diff --git a/data/mappings/info_config.json b/data/mappings/info_config.json
index 3cb64dd3a2f..cfe8807d436 100644
--- a/data/mappings/info_config.json
+++ b/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"},
diff --git a/data/schemas/definitions.jsonschema b/data/schemas/definitions.jsonschema
index 822f237073c..3f92e289a79 100644
--- a/data/schemas/definitions.jsonschema
+++ b/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,
diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema
index 94bbbe7e855..f7b05d6655f 100644
--- a/data/schemas/keyboard.jsonschema
+++ b/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"},
diff --git a/docs/reference_info_json.md b/docs/reference_info_json.md
index b2e6cae28e4..3cc807c179d 100644
--- a/docs/reference_info_json.md
+++ b/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.
diff --git a/keyboards/40percentclub/25/config.h b/keyboards/40percentclub/25/config.h
index 8ff52646711..d478131e95c 100644
--- a/keyboards/40percentclub/25/config.h
+++ b/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
diff --git a/keyboards/40percentclub/5x5/config.h b/keyboards/40percentclub/5x5/config.h
index c9a83de7372..c3bb5d6380c 100644
--- a/keyboards/40percentclub/5x5/config.h
+++ b/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
diff --git a/keyboards/40percentclub/6lit/config.h b/keyboards/40percentclub/6lit/config.h
index f5c0ea30400..ae4ee1bad87 100644
--- a/keyboards/40percentclub/6lit/config.h
+++ b/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
diff --git a/keyboards/40percentclub/foobar/config.h b/keyboards/40percentclub/foobar/config.h
index a65b6e51bf4..1e91d3bd10b 100644
--- a/keyboards/40percentclub/foobar/config.h
+++ b/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
diff --git a/keyboards/40percentclub/half_n_half/config.h b/keyboards/40percentclub/half_n_half/config.h
index f79f83839c8..0c819031da2 100644
--- a/keyboards/40percentclub/half_n_half/config.h
+++ b/keyboards/40percentclub/half_n_half/config.h
@@ -20,9 +20,9 @@ along with this program. If not, see .
#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
diff --git a/keyboards/boston_meetup/2019/config.h b/keyboards/boston_meetup/2019/config.h
index 80896242e07..138dedab570 100644
--- a/keyboards/boston_meetup/2019/config.h
+++ b/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
diff --git a/keyboards/capsunlocked/cu80/v2_ansi/info.json b/keyboards/capsunlocked/cu80/v2_ansi/info.json
index f0317de36d5..7615d9f0296 100644
--- a/keyboards/capsunlocked/cu80/v2_ansi/info.json
+++ b/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"
},
diff --git a/keyboards/capsunlocked/cu80/v2_iso/info.json b/keyboards/capsunlocked/cu80/v2_iso/info.json
index c3321560695..43f074f170d 100644
--- a/keyboards/capsunlocked/cu80/v2_iso/info.json
+++ b/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"
},
diff --git a/keyboards/clueboard/17/info.json b/keyboards/clueboard/17/info.json
index fb12f7dccea..5ea4937e50e 100644
--- a/keyboards/clueboard/17/info.json
+++ b/keyboards/clueboard/17/info.json
@@ -32,7 +32,7 @@
},
"url": "",
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"pid": "0x2312",
"vid": "0xC1ED"
},
diff --git a/keyboards/clueboard/2x1800/2019/info.json b/keyboards/clueboard/2x1800/2019/info.json
index a877cae8b07..886f3878bf1 100644
--- a/keyboards/clueboard/2x1800/2019/info.json
+++ b/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"
},
diff --git a/keyboards/clueboard/60/info.json b/keyboards/clueboard/60/info.json
index 6e0d90fe1df..16f94644c90 100644
--- a/keyboards/clueboard/60/info.json
+++ b/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"
},
diff --git a/keyboards/clueboard/66/rev1/info.json b/keyboards/clueboard/66/rev1/info.json
index 6ff733b3dda..bc3e1e23b65 100644
--- a/keyboards/clueboard/66/rev1/info.json
+++ b/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"
},
diff --git a/keyboards/clueboard/66/rev2/info.json b/keyboards/clueboard/66/rev2/info.json
index 27d293552db..0cfb6903889 100644
--- a/keyboards/clueboard/66/rev2/info.json
+++ b/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"
},
diff --git a/keyboards/clueboard/66/rev3/info.json b/keyboards/clueboard/66/rev3/info.json
index 0f2eada753e..208bc22dd1f 100644
--- a/keyboards/clueboard/66/rev3/info.json
+++ b/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"
},
diff --git a/keyboards/clueboard/66/rev4/info.json b/keyboards/clueboard/66/rev4/info.json
index b40abf402f2..8733216f058 100644
--- a/keyboards/clueboard/66/rev4/info.json
+++ b/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"
},
diff --git a/keyboards/clueboard/66_hotswap/gen1/info.json b/keyboards/clueboard/66_hotswap/gen1/info.json
index cf6288b5450..2b42bf22e84 100644
--- a/keyboards/clueboard/66_hotswap/gen1/info.json
+++ b/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"
},
diff --git a/keyboards/clueboard/66_hotswap/prototype/info.json b/keyboards/clueboard/66_hotswap/prototype/info.json
index d3f81851f4d..4940af8439f 100644
--- a/keyboards/clueboard/66_hotswap/prototype/info.json
+++ b/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"
},
diff --git a/keyboards/clueboard/card/info.json b/keyboards/clueboard/card/info.json
index 24088b2c41b..62ccd9ced0f 100644
--- a/keyboards/clueboard/card/info.json
+++ b/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"
},
diff --git a/keyboards/clueboard/info.json b/keyboards/clueboard/info.json
index 47514f280b1..4421643e106 100644
--- a/keyboards/clueboard/info.json
+++ b/keyboards/clueboard/info.json
@@ -2,7 +2,7 @@
"manufacturer": "Clueboard",
"maintainer": "skullydazed",
"usb": {
- "device_ver": "0x0001",
+ "device_version": "0.0.1",
"vid": "0xC1ED"
}
}
diff --git a/keyboards/coarse/ixora/config.h b/keyboards/coarse/ixora/config.h
index ec7dfa705bb..13246e92260 100644
--- a/keyboards/coarse/ixora/config.h
+++ b/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
diff --git a/keyboards/coarse/vinta/config.h b/keyboards/coarse/vinta/config.h
index d08994ae67a..4e35b3461a3 100644
--- a/keyboards/coarse/vinta/config.h
+++ b/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
diff --git a/keyboards/cybergear/macro25/info.json b/keyboards/cybergear/macro25/info.json
index a029ae1ce33..75078962bff 100644
--- a/keyboards/cybergear/macro25/info.json
+++ b/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": {
diff --git a/keyboards/dyz/dyz60/info.json b/keyboards/dyz/dyz60/info.json
index 24ff2575541..d946f9b97ba 100644
--- a/keyboards/dyz/dyz60/info.json
+++ b/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": {
diff --git a/keyboards/ez_maker/directpins/promicro/info.json b/keyboards/ez_maker/directpins/promicro/info.json
index 419450385ce..264ee350c8c 100644
--- a/keyboards/ez_maker/directpins/promicro/info.json
+++ b/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"
},
diff --git a/keyboards/ez_maker/directpins/proton_c/info.json b/keyboards/ez_maker/directpins/proton_c/info.json
index e3d000424ac..d35fe9a90a1 100644
--- a/keyboards/ez_maker/directpins/proton_c/info.json
+++ b/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"
},
diff --git a/keyboards/ez_maker/directpins/teensy_2/info.json b/keyboards/ez_maker/directpins/teensy_2/info.json
index 0c8fa672a9f..731d089322e 100644
--- a/keyboards/ez_maker/directpins/teensy_2/info.json
+++ b/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"
},
diff --git a/keyboards/ez_maker/directpins/teensy_2pp/info.json b/keyboards/ez_maker/directpins/teensy_2pp/info.json
index e12544a5ef9..214d4bdadc3 100644
--- a/keyboards/ez_maker/directpins/teensy_2pp/info.json
+++ b/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"
},
diff --git a/keyboards/ez_maker/directpins/teensy_32/info.json b/keyboards/ez_maker/directpins/teensy_32/info.json
index e0c024ec942..851f9e67d17 100644
--- a/keyboards/ez_maker/directpins/teensy_32/info.json
+++ b/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"
},
diff --git a/keyboards/ez_maker/directpins/teensy_lc/info.json b/keyboards/ez_maker/directpins/teensy_lc/info.json
index bf93c41fab6..8f64145e450 100644
--- a/keyboards/ez_maker/directpins/teensy_lc/info.json
+++ b/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"
},
diff --git a/keyboards/forever65/info.json b/keyboards/forever65/info.json
index 9f5a3539e36..b50a2cf4065 100644
--- a/keyboards/forever65/info.json
+++ b/keyboards/forever65/info.json
@@ -12,7 +12,7 @@
"usb": {
"vid": "0x4E53",
"pid": "0x0F65",
- "device_ver": "0x0001"
+ "device_version": "0.0.1"
},
"features": {
"bootmagic": true,
diff --git a/keyboards/frooastboard/info.json b/keyboards/frooastboard/info.json
index ca99cf594a7..4217439b5e1 100644
--- a/keyboards/frooastboard/info.json
+++ b/keyboards/frooastboard/info.json
@@ -37,6 +37,6 @@
"usb": {
"vid": "0x4642",
"pid": "0x6F21",
- "device_ver": "0x0001"
+ "device_version": "0.0.1"
}
}
diff --git a/keyboards/handwired/qc60/config.h b/keyboards/handwired/qc60/config.h
index 0c27755910f..db3d88dcf4f 100644
--- a/keyboards/handwired/qc60/config.h
+++ b/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
diff --git a/keyboards/lets_split_eh/config.h b/keyboards/lets_split_eh/config.h
index 7527c6b3d2b..787b9783b8a 100644
--- a/keyboards/lets_split_eh/config.h
+++ b/keyboards/lets_split_eh/config.h
@@ -22,7 +22,7 @@ along with this program. If not, see .
/* 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?
diff --git a/keyboards/ramonimbao/squishytkl/config.h b/keyboards/ramonimbao/squishytkl/config.h
index 3e0812bb12b..ebebc35bb4b 100644
--- a/keyboards/ramonimbao/squishytkl/config.h
+++ b/keyboards/ramonimbao/squishytkl/config.h
@@ -22,7 +22,7 @@ along with this program. If not, see .
/* 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
diff --git a/keyboards/spacetime/config.h b/keyboards/spacetime/config.h
index 3afcee17359..7dfca576a02 100644
--- a/keyboards/spacetime/config.h
+++ b/keyboards/spacetime/config.h
@@ -22,7 +22,7 @@ along with this program. If not, see .
/* 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
diff --git a/keyboards/tempo_turtle/bradpad/info.json b/keyboards/tempo_turtle/bradpad/info.json
index d32cc2c665f..e1caeeeb880 100644
--- a/keyboards/tempo_turtle/bradpad/info.json
+++ b/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": {
diff --git a/lib/python/qmk/cli/generate/config_h.py b/lib/python/qmk/cli/generate/config_h.py
index f16dca1de8b..6b1012fae7a 100755
--- a/lib/python/qmk/cli/generate/config_h.py
+++ b/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}')
diff --git a/lib/python/qmk/info.py b/lib/python/qmk/info.py
index 6bdf2cb1664..905f10ecc23 100644
--- a/lib/python/qmk/info.py
+++ b/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