Versioning Scheme

Version 3 (J. Simmons, 12/11/2017 04:33 am)

1 1 J. Simmons
h1. Versioning Scheme
2 1 J. Simmons
3 1 J. Simmons
{{toc}}
4 1 J. Simmons
5 1 J. Simmons
h2. Terms
6 1 J. Simmons
7 1 J. Simmons
|hw|Hardware|The physical components of Holoseat which are encumbered with version related compatibility concerns|
8 1 J. Simmons
|sw|Software|The user application and the REST API|
9 1 J. Simmons
|fw|Firmware|The code running on the controller itself interacting with the sensors and the game|
10 1 J. Simmons
11 1 J. Simmons
h2. Goals
12 1 J. Simmons
13 1 J. Simmons
# Ensure only compatible versions of hw/sw/fw are connected to one another so users do not experience issues stemming from compatibility mismatch
14 1 J. Simmons
# It should be easy to identify a compatible set of hw/sw/fw from version their numbers
15 1 J. Simmons
# Bring consistency and rigor to versioning process moving forward
16 2 J. Simmons
17 2 J. Simmons
h2. Assumptions
18 2 J. Simmons
19 2 J. Simmons
# hw rarely changes
20 2 J. Simmons
# hw changes only occur as part of production runs
21 2 J. Simmons
# hw includes all electro-mechanical elements of the system (so sensor and tone ring are hw, but bike pedals are generally not since they are interchangeable)
22 2 J. Simmons
# fw is coupled to hw (hw must support the fw access to sensors, etc) and to sw (sw uses the HSP in the fw to implement REST API and to interact with the hw)
23 2 J. Simmons
# Looking for a scheme where parallel version numbers across hw/sw/fw indicate compatibility
24 2 J. Simmons
25 2 J. Simmons
h2. Defining Levels of Versioning
26 2 J. Simmons
27 2 J. Simmons
* Version numbers may be multi-digit, aka, v1.0.9 does not automatically become v1.1.0 on next patch, it becomes v1.0.10
28 2 J. Simmons
* Product - the top most level of compatibility grouping, defined by the principle capability set.  There is no expectation of hw/sw/fw compatibility between products.  Each product has its own version history.  Examples of products:
29 2 J. Simmons
** Holoseat (standard) - current development effort, requires a PC for use, emulates HID devices but does not proxy for HID devices.  Not suitable for consoles.  May require additional software (such as key mapper) for users who wish to achieve similar results to proxying HID devices
30 2 J. Simmons
** Holoseat Advanced - next major development effort, utilizes system on a chip to replace need for PC and to implement HID proxy.  Will enable use of Holoseat with consoles.
31 2 J. Simmons
* Major - a version of a product with significant feature changes from the previous version of the same product.  There is no expectation of hw/sw/fw compatibility between major versions.  Major versions should be reserved for introduing changes that require hardware upgrades (e.g. changing the type of sensor used or the number of poles in a tone ring) but don’t fundamentally change the nature of the product (e.g. the same capability but implemented in a new manor or adding new way to support the capability, specifically in a way that does not require a new architecture for the system).  
32 2 J. Simmons
** Adding BLE to the standard Holoseat so it can connect to tablets or phones would be a major version change as it requires a hardware upgrade, but that upgrade just means adding a new outbound HID path which is in line with the existing architecture. 
33 2 J. Simmons
** Supporting proxy for HID devices would be a product change as it means adding an inbound HID path and all the code and potential hw needed to implement the proxy behavior.
34 2 J. Simmons
* Minor - a version of a product with incremental feature changes (e.g. additions or marking of existing features as deprecated) not requiring a hardware change.  Used to bring improved experience to existing users.
35 2 J. Simmons
* Patch - a version which does not add any new behaviors.  Used to introduce bug fixes or refinements.  Patch level should never impact compatibility.
36 3 J. Simmons
37 3 J. Simmons
h2. Versioning Matrix
38 3 J. Simmons
39 3 J. Simmons
||*Product*|*Major*|*Minor*|*Patch*|
40 3 J. Simmons
|hw|Determined by USB VID/PID|Identified in hardware by version resistor|Not Used|Identified by physical markings|
41 3 J. Simmons
|sw|Identified by string constant|\3. Identified by string constant of form Major.Minor.Patch| 
42 3 J. Simmons
|fw|Identified by string constant|\3. Identified by string constant of form Major.Minor.Patch|