Browse Source

CLI: Parse USB device version BCD (#14580)

* CLI: Parse USB device version BCD

* Apply suggestions
Ryan 3 years ago
parent
commit
c72ed7c024
42 changed files with 88 additions and 52 deletions
  1. 2 0
      data/mappings/info_config.json
  2. 7 3
      data/schemas/definitions.jsonschema
  3. 2 1
      data/schemas/keyboard.jsonschema
  4. 4 2
      docs/reference_info_json.md
  5. 3 3
      keyboards/40percentclub/25/config.h
  6. 3 3
      keyboards/40percentclub/5x5/config.h
  7. 3 3
      keyboards/40percentclub/6lit/config.h
  8. 3 3
      keyboards/40percentclub/foobar/config.h
  9. 3 3
      keyboards/40percentclub/half_n_half/config.h
  10. 1 1
      keyboards/boston_meetup/2019/config.h
  11. 1 1
      keyboards/capsunlocked/cu80/v2_ansi/info.json
  12. 1 1
      keyboards/capsunlocked/cu80/v2_iso/info.json
  13. 1 1
      keyboards/clueboard/17/info.json
  14. 1 1
      keyboards/clueboard/2x1800/2019/info.json
  15. 1 1
      keyboards/clueboard/60/info.json
  16. 1 1
      keyboards/clueboard/66/rev1/info.json
  17. 1 1
      keyboards/clueboard/66/rev2/info.json
  18. 1 1
      keyboards/clueboard/66/rev3/info.json
  19. 1 1
      keyboards/clueboard/66/rev4/info.json
  20. 1 1
      keyboards/clueboard/66_hotswap/gen1/info.json
  21. 1 1
      keyboards/clueboard/66_hotswap/prototype/info.json
  22. 1 1
      keyboards/clueboard/card/info.json
  23. 1 1
      keyboards/clueboard/info.json
  24. 1 1
      keyboards/coarse/ixora/config.h
  25. 1 1
      keyboards/coarse/vinta/config.h
  26. 1 1
      keyboards/cybergear/macro25/info.json
  27. 1 1
      keyboards/dyz/dyz60/info.json
  28. 1 1
      keyboards/ez_maker/directpins/promicro/info.json
  29. 1 1
      keyboards/ez_maker/directpins/proton_c/info.json
  30. 1 1
      keyboards/ez_maker/directpins/teensy_2/info.json
  31. 1 1
      keyboards/ez_maker/directpins/teensy_2pp/info.json
  32. 1 1
      keyboards/ez_maker/directpins/teensy_32/info.json
  33. 1 1
      keyboards/ez_maker/directpins/teensy_lc/info.json
  34. 1 1
      keyboards/forever65/info.json
  35. 1 1
      keyboards/frooastboard/info.json
  36. 1 1
      keyboards/handwired/qc60/config.h
  37. 1 1
      keyboards/lets_split_eh/config.h
  38. 1 1
      keyboards/ramonimbao/squishytkl/config.h
  39. 1 1
      keyboards/spacetime/config.h
  40. 1 1
      keyboards/tempo_turtle/bradpad/info.json
  41. 6 0
      lib/python/qmk/cli/generate/config_h.py
  42. 21 0
      lib/python/qmk/info.py

+ 2 - 0
data/mappings/info_config.json

@@ -15,6 +15,8 @@
     "COMBO_TERM": {"info_key": "combo.term", "value_type": "int"},
     "DEBOUNCE": {"info_key": "debounce", "value_type": "int"},
     "DEVICE_VER": {"info_key": "usb.device_ver", "value_type": "hex"},
+    # TODO: Replace ^^^ with vvv
+    #"DEVICE_VER": {"info_key": "usb.device_version", "value_type": "bcd_version"},
     "DESCRIPTION": {"info_key": "keyboard_folder", "to_json": false},
     "DIODE_DIRECTION": {"info_key": "diode_direction"},
     "FORCE_NKRO": {"info_key": "usb.force_nkro", "value_type": "bool"},

+ 7 - 3
data/schemas/definitions.jsonschema

@@ -20,6 +20,10 @@
         "type": "string",
         "pattern": "^0x[0-9A-F]{4}$"
     },
+    "bcd_version": {
+        "type": "string",
+        "pattern": "^[0-9]{1,2}\\.[0-9]\\.[0-9]$"
+    },
     "text_identifier": {
         "type": "string",
         "minLength": 1,
@@ -70,13 +74,13 @@
     "signed_int": {
         "type": "number",
         "multipleOf": 1
-    }
+    },
     "signed_int_8": {
         "type": "number",
         "min": -127,
         "max": 127,
         "multipleOf": 1
-    }
+    },
     "string_array": {
         "type": "array",
         "items": {
@@ -97,7 +101,7 @@
         "type": "number",
         "min": 0,
         "multipleOf": 1
-    }
+    },
     "unsigned_int_8": {
         "type": "number",
         "min": 0,

+ 2 - 1
data/schemas/keyboard.jsonschema

@@ -320,7 +320,8 @@
             "type": "object",
             "additionalProperties": false,
             "properties": {
-                "device_ver": {"$ref": "qmk.definitions.v1#/hex_number_4d"},
+                "device_ver": {"$ref": "qmk.definitions.v1#/hex_number_4d"}, # Deprecated
+                "device_version": {"$ref": "qmk.definitions.v1#/bcd_version"},
                 "force_nkro": {"type": "boolean"},
                 "pid": {"$ref": "qmk.definitions.v1#/hex_number_4d"},
                 "vid": {"$ref": "qmk.definitions.v1#/hex_number_4d"},

+ 4 - 2
docs/reference_info_json.md

@@ -172,7 +172,7 @@ The following animations can be enabled:
 
 ### USB
 
-Every USB keyboard needs to have its USB parmaters defined. At a minimum you need to set vid, pid, and device version.
+Every USB keyboard needs to have its USB parameters defined. At a minimum you need to set the Vendor ID, Product ID, and device version.
 
 Example:
 
@@ -181,7 +181,9 @@ Example:
     "usb": {
         "vid": "0xC1ED",
         "pid": "0x23B0",
-        "device_ver": "0x0001"
+        "device_version": "1.0.0"
     }
 }
 ```
+
+The device version is a BCD (binary coded decimal) value, in the format `MMmr`, so the below value would look like `0x0100` in the generated code. This also means the maximum valid values for each part are `99.9.9`, despite it being a hexadecimal value under the hood.

+ 3 - 3
keyboards/40percentclub/25/config.h

@@ -19,9 +19,9 @@
 #include "config_common.h"
 
 /* USB Device descriptor parameter */
-#define VENDOR_ID       0x4025
-#define PRODUCT_ID      0x0A0C
-#define DEVICE_VER      0x0F25
+#define VENDOR_ID       0x4025 // 40%
+#define PRODUCT_ID      0x0F25
+#define DEVICE_VER      0x0100
 #define MANUFACTURER    di0ib
 #define PRODUCT         The 5x5 Keyboard
 

+ 3 - 3
keyboards/40percentclub/5x5/config.h

@@ -5,9 +5,9 @@
 #include "config_common.h"
 
 /* USB Device descriptor parameter */
-#define VENDOR_ID       0x4025
-#define PRODUCT_ID      0x0A0C
-#define DEVICE_VER      0x05B5
+#define VENDOR_ID       0x4025 // 40%
+#define PRODUCT_ID      0x05B5
+#define DEVICE_VER      0x0100
 #define MANUFACTURER    di0ib
 #define PRODUCT         The 5x5 Keyboard
 

+ 3 - 3
keyboards/40percentclub/6lit/config.h

@@ -19,9 +19,9 @@
 #include "config_common.h"
 
 /* USB Device descriptor parameter */
-#define VENDOR_ID       0x4025
-#define PRODUCT_ID      0x0A0C
-#define DEVICE_VER      0x0F61
+#define VENDOR_ID       0x4025 // 40%
+#define PRODUCT_ID      0x0F61
+#define DEVICE_VER      0x0100
 #define MANUFACTURER    di0ib
 #define PRODUCT         The 6lit Macropad
 

+ 3 - 3
keyboards/40percentclub/foobar/config.h

@@ -19,9 +19,9 @@
 #include "config_common.h"
 
 /* USB Device descriptor parameter */
-#define VENDOR_ID       0x4025
-#define PRODUCT_ID      0x0A0C
-#define DEVICE_VER      0x0F00
+#define VENDOR_ID       0x4025 // 40%
+#define PRODUCT_ID      0x0F00
+#define DEVICE_VER      0x0100
 #define MANUFACTURER    di0ib
 #define PRODUCT         The foobar Keyboard
 

+ 3 - 3
keyboards/40percentclub/half_n_half/config.h

@@ -20,9 +20,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "config_common.h"
 
 /* USB Device descriptor parameter */
-#define VENDOR_ID       0x4025
-#define PRODUCT_ID      0x0A0C
-#define DEVICE_VER      0x4A1F
+#define VENDOR_ID       0x4025 // 40%
+#define PRODUCT_ID      0x4A1F
+#define DEVICE_VER      0x0100
 #define MANUFACTURER    di0ib
 #define PRODUCT         half_n_half
 

+ 1 - 1
keyboards/boston_meetup/2019/config.h

@@ -1,7 +1,7 @@
 #pragma once
 
 /* USB Device descriptor parameter */
-#define DEVICE_VER 0x07E3
+#define DEVICE_VER 0x2019
 
 #undef MATRIX_ROWS
 #undef MATRIX_COLS

+ 1 - 1
keyboards/capsunlocked/cu80/v2_ansi/info.json

@@ -37,7 +37,7 @@
   },
   "url": "https://caps-unlocked.com/cu80-round-2/",
   "usb": {
-    "device_ver": "0x0001",
+    "device_version": "0.0.1",
     "pid": "0x0081",
     "vid": "0x4355"
   },

+ 1 - 1
keyboards/capsunlocked/cu80/v2_iso/info.json

@@ -37,7 +37,7 @@
   },
   "url": "https://caps-unlocked.com/cu80-round-2/",
   "usb": {
-    "device_ver": "0x0001",
+    "device_version": "0.0.1",
     "pid": "0x0080",
     "vid": "0x4355"
   },

+ 1 - 1
keyboards/clueboard/17/info.json

@@ -32,7 +32,7 @@
   },
   "url": "",
   "usb": {
-    "device_ver": "0x0001",
+    "device_version": "0.0.1",
     "pid": "0x2312",
     "vid": "0xC1ED"
   },

+ 1 - 1
keyboards/clueboard/2x1800/2019/info.json

@@ -24,7 +24,7 @@
     "rows": ["C0", "C1", "C2", "C3", "C7", "F7", "B1", "F2", "F3", "F4", "F5", "F6", "C6"]
   },
   "usb": {
-    "device_ver": "0x0001",
+    "device_version": "0.0.1",
     "pid": "0x23A0",
     "vid": "0xC1ED"
   },

+ 1 - 1
keyboards/clueboard/60/info.json

@@ -25,7 +25,7 @@
     "rows": ["B0", "B1", "B2", "A15", "A10"]
   },
   "usb": {
-    "device_ver": "0x0001",
+    "device_version": "0.0.1",
     "pid": "0x2350",
     "vid": "0xC1ED"
   },

+ 1 - 1
keyboards/clueboard/66/rev1/info.json

@@ -37,7 +37,7 @@
     "saturation_steps": 17
   },
   "usb": {
-    "device_ver": "0x0001",
+    "device_version": "0.0.1",
     "pid": "0x2301",
     "vid": "0xC1ED"
   },

+ 1 - 1
keyboards/clueboard/66/rev2/info.json

@@ -37,7 +37,7 @@
     "saturation_steps": 17
   },
   "usb": {
-    "device_ver": "0x0001",
+    "device_version": "0.0.1",
     "pid": "0x2320",
     "vid": "0xC1ED"
   },

+ 1 - 1
keyboards/clueboard/66/rev3/info.json

@@ -37,7 +37,7 @@
     "saturation_steps": 17
   },
   "usb": {
-    "device_ver": "0x0001",
+    "device_version": "0.0.1",
     "pid": "0x2370",
     "vid": "0xC1ED"
   },

+ 1 - 1
keyboards/clueboard/66/rev4/info.json

@@ -36,7 +36,7 @@
     "saturation_steps": 17
   },
   "usb": {
-    "device_ver": "0x0001",
+    "device_version": "0.0.1",
     "pid": "0x2390",
     "vid": "0xC1ED"
   },

+ 1 - 1
keyboards/clueboard/66_hotswap/gen1/info.json

@@ -25,7 +25,7 @@
     "rows": ["B11", "A6", "A3", "A2", "A1", "B5", "B6", "C15", "C14", "C13"]
   },
   "usb": {
-    "device_ver": "0x0001",
+    "device_version": "0.0.1",
     "pid": "0x2391",
     "vid": "0xC1ED"
   },

+ 1 - 1
keyboards/clueboard/66_hotswap/prototype/info.json

@@ -37,7 +37,7 @@
     "saturation_steps": 17
   },
   "usb": {
-    "device_ver": "0x0001",
+    "device_version": "0.0.1",
     "pid": "0x2390",
     "vid": "0xC1ED"
   },

+ 1 - 1
keyboards/clueboard/card/info.json

@@ -32,7 +32,7 @@
     "saturation_steps": 17
   },
   "usb": {
-    "device_ver": "0x0001",
+    "device_version": "0.0.1",
     "pid": "0x2330",
     "vid": "0xC1ED"
   },

+ 1 - 1
keyboards/clueboard/info.json

@@ -2,7 +2,7 @@
   "manufacturer": "Clueboard",
   "maintainer": "skullydazed",
   "usb": {
-    "device_ver": "0x0001",
+    "device_version": "0.0.1",
     "vid": "0xC1ED"
   }
 }

+ 1 - 1
keyboards/coarse/ixora/config.h

@@ -5,7 +5,7 @@
 /* USB Device descriptor parameter */
 #define VENDOR_ID       0xFEED
 #define PRODUCT_ID      0x0C61
-#define DEVICE_VER      0x00C6
+#define DEVICE_VER      0x0100
 #define MANUFACTURER    PeiorisBoards
 #define PRODUCT         Ixora Rev1
 

+ 1 - 1
keyboards/coarse/vinta/config.h

@@ -5,7 +5,7 @@
 /* USB Device descriptor parameter */
 #define VENDOR_ID       0xFEED
 #define PRODUCT_ID      0x0C61
-#define DEVICE_VER      0x00C6
+#define DEVICE_VER      0x0100
 #define MANUFACTURER    PeiorisBoards
 #define PRODUCT         Vinta R1
 

+ 1 - 1
keyboards/cybergear/macro25/info.json

@@ -5,7 +5,7 @@
     "usb": {
         "vid": "0x1209",
         "pid": "0x69A1",
-        "device_ver": "0x0001"
+        "device_version": "0.0.1",
     },
     "diode_direction": "COL2ROW",
     "layouts": {

+ 1 - 1
keyboards/dyz/dyz60/info.json

@@ -20,7 +20,7 @@
     "usb": {
         "vid": "0xD772",
         "pid": "0x000A",
-        "device_ver": "0x0001"
+        "device_version": "0.0.1"
     },
     "layouts": {
         "LAYOUT_all": {

+ 1 - 1
keyboards/ez_maker/directpins/promicro/info.json

@@ -26,7 +26,7 @@
     },
     "processor": "atmega32u4",
     "usb": {
-        "device_ver": "0x0001",
+        "device_version": "0.0.1",
         "pid": "0x2320",
         "vid": "0xFEED"
     },

+ 1 - 1
keyboards/ez_maker/directpins/proton_c/info.json

@@ -32,7 +32,7 @@
         ]
     },
     "usb": {
-        "device_ver": "0x0001",
+        "device_version": "0.0.1",
         "pid": "0x2321",
         "vid": "0xFEED"
     },

+ 1 - 1
keyboards/ez_maker/directpins/teensy_2/info.json

@@ -28,7 +28,7 @@
         ]
     },
     "usb": {
-        "device_ver": "0x0001",
+        "device_version": "0.0.1",
         "pid": "0x2322",
         "vid": "0xFEED"
     },

+ 1 - 1
keyboards/ez_maker/directpins/teensy_2pp/info.json

@@ -35,7 +35,7 @@
         ]
     },
     "usb": {
-        "device_ver": "0x0001",
+        "device_version": "0.0.1",
         "pid": "0x2323",
         "vid": "0xFEED"
     },

+ 1 - 1
keyboards/ez_maker/directpins/teensy_32/info.json

@@ -27,7 +27,7 @@
         ]
     },
     "usb": {
-        "device_ver": "0x0001",
+        "device_version": "0.0.1",
         "pid": "0x2324",
         "vid": "0xFEED"
     },

+ 1 - 1
keyboards/ez_maker/directpins/teensy_lc/info.json

@@ -27,7 +27,7 @@
         ]
     },
     "usb": {
-        "device_ver": "0x0001",
+        "device_version": "0.0.1",
         "pid": "0x2325",
         "vid": "0xFEED"
     },

+ 1 - 1
keyboards/forever65/info.json

@@ -12,7 +12,7 @@
     "usb": {
         "vid": "0x4E53",
         "pid": "0x0F65",
-        "device_ver": "0x0001"
+        "device_version": "0.0.1"
     },
     "features": {
         "bootmagic": true,

+ 1 - 1
keyboards/frooastboard/info.json

@@ -37,6 +37,6 @@
     "usb": {
         "vid": "0x4642",
         "pid": "0x6F21",
-        "device_ver": "0x0001"
+        "device_version": "0.0.1"
     }
 }

+ 1 - 1
keyboards/handwired/qc60/config.h

@@ -5,7 +5,7 @@
 /* USB Device descriptor parameter */
 #define VENDOR_ID       0xFEED
 #define PRODUCT_ID      0x0C60
-#define DEVICE_VER      0x00C6
+#define DEVICE_VER      0x0100
 #define MANUFACTURER    PeiorisBoards
 #define PRODUCT         QC60
 

+ 1 - 1
keyboards/lets_split_eh/config.h

@@ -22,7 +22,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* USB Device descriptor parameter */
 #define VENDOR_ID       0xFEED
 #define PRODUCT_ID      0xE401
-#define DEVICE_VER      0x0E41
+#define DEVICE_VER      0x0100
 #define MANUFACTURER    That-Canadian
 #define PRODUCT         Lets Split Eh?
 

+ 1 - 1
keyboards/ramonimbao/squishytkl/config.h

@@ -22,7 +22,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* USB Device descriptor parameter */
 #define VENDOR_ID    0xB16B
 #define PRODUCT_ID   0x00B1
-#define DEVICE_VER   0xE500
+#define DEVICE_VER   0x0100
 #define MANUFACTURER Ramon Imbao
 #define PRODUCT      SquishyTKL
 

+ 1 - 1
keyboards/spacetime/config.h

@@ -22,7 +22,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* USB Device descriptor parameter */
 #define VENDOR_ID       0xFEED
 #define PRODUCT_ID      0x0A0C
-#define DEVICE_VER      0x4A1F
+#define DEVICE_VER      0x0100
 #define MANUFACTURER    Kyle Terry
 #define PRODUCT         spacetime
 

+ 1 - 1
keyboards/tempo_turtle/bradpad/info.json

@@ -10,7 +10,7 @@
     "usb":{
         "vid":"0x7474",
         "pid":"0x6270",
-        "device_ver":"0x0001"
+        "device_version":"0.0.1"
     },
     "layouts": {
         "LAYOUT": {

+ 6 - 0
lib/python/qmk/cli/generate/config_h.py

@@ -108,6 +108,12 @@ def generate_config_items(kb_info_json, config_h_lines):
                 config_h_lines.append(f'#ifndef {key}')
                 config_h_lines.append(f'#   define {key} {value}')
                 config_h_lines.append(f'#endif // {key}')
+        elif key_type == 'bcd_version':
+            (major, minor, revision) = config_value.split('.')
+            config_h_lines.append('')
+            config_h_lines.append(f'#ifndef {config_key}')
+            config_h_lines.append(f'#   define {config_key} 0x{major.zfill(2)}{minor}{revision}')
+            config_h_lines.append(f'#endif // {config_key}')
         else:
             config_h_lines.append('')
             config_h_lines.append(f'#ifndef {config_key}')

+ 21 - 0
lib/python/qmk/info.py

@@ -387,6 +387,19 @@ def _extract_matrix_info(info_data, config_c):
     return info_data
 
 
+# TODO: kill off usb.device_ver in favor of usb.device_version
+def _extract_device_version(info_data):
+    if info_data.get('usb'):
+        if info_data['usb'].get('device_version') and not info_data['usb'].get('device_ver'):
+            (major, minor, revision) = info_data['usb']['device_version'].split('.', 3)
+            info_data['usb']['device_ver'] = f'0x{major.zfill(2)}{minor}{revision}'
+        if not info_data['usb'].get('device_version') and info_data['usb'].get('device_ver'):
+            major = int(info_data['usb']['device_ver'][2:4])
+            minor = int(info_data['usb']['device_ver'][4])
+            revision = int(info_data['usb']['device_ver'][5])
+            info_data['usb']['device_version'] = f'{major}.{minor}.{revision}'
+
+
 def _extract_config_h(info_data):
     """Pull some keyboard information from existing config.h files
     """
@@ -430,6 +443,13 @@ def _extract_config_h(info_data):
                 elif key_type == 'int':
                     dotty_info[info_key] = int(config_c[config_key])
 
+                elif key_type == 'bcd_version':
+                    major = int(config_c[config_key][2:4])
+                    minor = int(config_c[config_key][4])
+                    revision = int(config_c[config_key][5])
+
+                    dotty_info[info_key] = f'{major}.{minor}.{revision}'
+
                 else:
                     dotty_info[info_key] = config_c[config_key]
 
@@ -444,6 +464,7 @@ def _extract_config_h(info_data):
     _extract_split_main(info_data, config_c)
     _extract_split_transport(info_data, config_c)
     _extract_split_right_pins(info_data, config_c)
+    _extract_device_version(info_data)
 
     return info_data