constants.py 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. """Information that should be available to the python library.
  2. """
  3. from os import environ
  4. from datetime import date
  5. from pathlib import Path
  6. # The root of the qmk_firmware tree.
  7. QMK_FIRMWARE = Path.cwd()
  8. # Upstream repo url
  9. QMK_FIRMWARE_UPSTREAM = 'qmk/qmk_firmware'
  10. # This is the number of directories under `qmk_firmware/keyboards` that will be traversed. This is currently a limitation of our make system.
  11. MAX_KEYBOARD_SUBFOLDERS = 5
  12. # Supported processor types
  13. CHIBIOS_PROCESSORS = 'cortex-m0', 'cortex-m0plus', 'cortex-m3', 'cortex-m4', 'MKL26Z64', 'MK20DX128', 'MK20DX256', 'MK64FX512', 'MK66FX1M0', 'RP2040', 'STM32F042', 'STM32F072', 'STM32F103', 'STM32F303', 'STM32F401', 'STM32F405', 'STM32F407', 'STM32F411', 'STM32F446', 'STM32G431', 'STM32G474', 'STM32H723', 'STM32H733', 'STM32L412', 'STM32L422', 'STM32L432', 'STM32L433', 'STM32L442', 'STM32L443', 'GD32VF103', 'WB32F3G71', 'WB32FQ95'
  14. LUFA_PROCESSORS = 'at90usb162', 'atmega16u2', 'atmega32u2', 'atmega16u4', 'atmega32u4', 'at90usb646', 'at90usb647', 'at90usb1286', 'at90usb1287', None
  15. VUSB_PROCESSORS = 'atmega32a', 'atmega328p', 'atmega328', 'attiny85'
  16. # Bootloaders of the supported processors
  17. MCU2BOOTLOADER = {
  18. "RP2040": "rp2040",
  19. "MKL26Z64": "halfkay",
  20. "MK20DX128": "halfkay",
  21. "MK20DX256": "halfkay",
  22. "MK66FX1M0": "halfkay",
  23. "STM32F042": "stm32-dfu",
  24. "STM32F072": "stm32-dfu",
  25. "STM32F103": "stm32duino",
  26. "STM32F303": "stm32-dfu",
  27. "STM32F401": "stm32-dfu",
  28. "STM32F405": "stm32-dfu",
  29. "STM32F407": "stm32-dfu",
  30. "STM32F411": "stm32-dfu",
  31. "STM32F446": "stm32-dfu",
  32. "STM32G431": "stm32-dfu",
  33. "STM32G474": "stm32-dfu",
  34. "STM32H723": "stm32-dfu",
  35. "STM32H733": "stm32-dfu",
  36. "STM32L412": "stm32-dfu",
  37. "STM32L422": "stm32-dfu",
  38. "STM32L432": "stm32-dfu",
  39. "STM32L433": "stm32-dfu",
  40. "STM32L442": "stm32-dfu",
  41. "STM32L443": "stm32-dfu",
  42. "GD32VF103": "gd32v-dfu",
  43. "WB32F3G71": "wb32-dfu",
  44. "WB32FQ95": "wb32-dfu",
  45. "atmega16u2": "atmel-dfu",
  46. "atmega32u2": "atmel-dfu",
  47. "atmega16u4": "atmel-dfu",
  48. "atmega32u4": "atmel-dfu",
  49. "at90usb162": "atmel-dfu",
  50. "at90usb646": "atmel-dfu",
  51. "at90usb647": "atmel-dfu",
  52. "at90usb1286": "atmel-dfu",
  53. "at90usb1287": "atmel-dfu",
  54. "atmega32a": "bootloadhid",
  55. "atmega328p": "usbasploader",
  56. "atmega328": "usbasploader",
  57. }
  58. # Map of legacy keycodes that can be automatically updated
  59. LEGACY_KEYCODES = { # Comment here is to force multiline formatting
  60. 'RESET': 'QK_BOOT'
  61. }
  62. # Map VID:PID values to bootloaders
  63. BOOTLOADER_VIDS_PIDS = {
  64. 'atmel-dfu': {
  65. ("03eb", "2fef"), # ATmega16U2
  66. ("03eb", "2ff0"), # ATmega32U2
  67. ("03eb", "2ff3"), # ATmega16U4
  68. ("03eb", "2ff4"), # ATmega32U4
  69. ("03eb", "2ff9"), # AT90USB64
  70. ("03eb", "2ffa"), # AT90USB162
  71. ("03eb", "2ffb") # AT90USB128
  72. },
  73. 'kiibohd': {("1c11", "b007")},
  74. 'stm32-dfu': {
  75. ("1eaf", "0003"), # STM32duino
  76. ("0483", "df11") # STM32 DFU
  77. },
  78. 'apm32-dfu': {("314b", "0106")},
  79. 'gd32v-dfu': {("28e9", "0189")},
  80. 'bootloadhid': {("16c0", "05df")},
  81. 'usbasploader': {("16c0", "05dc")},
  82. 'usbtinyisp': {("1782", "0c9f")},
  83. 'md-boot': {("03eb", "6124")},
  84. 'caterina': {
  85. # pid.codes shared PID
  86. ("1209", "2302"), # Keyboardio Atreus 2 Bootloader
  87. # Spark Fun Electronics
  88. ("1b4f", "9203"), # Pro Micro 3V3/8MHz
  89. ("1b4f", "9205"), # Pro Micro 5V/16MHz
  90. ("1b4f", "9207"), # LilyPad 3V3/8MHz (and some Pro Micro clones)
  91. # Pololu Electronics
  92. ("1ffb", "0101"), # A-Star 32U4
  93. # Arduino SA
  94. ("2341", "0036"), # Leonardo
  95. ("2341", "0037"), # Micro
  96. # Adafruit Industries LLC
  97. ("239a", "000c"), # Feather 32U4
  98. ("239a", "000d"), # ItsyBitsy 32U4 3V3/8MHz
  99. ("239a", "000e"), # ItsyBitsy 32U4 5V/16MHz
  100. # dog hunter AG
  101. ("2a03", "0036"), # Leonardo
  102. ("2a03", "0037") # Micro
  103. },
  104. 'hid-bootloader': {
  105. ("03eb", "2067"), # QMK HID
  106. ("16c0", "0478") # PJRC halfkay
  107. }
  108. }
  109. # Common format strings
  110. DATE_FORMAT = '%Y-%m-%d'
  111. DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S %Z'
  112. TIME_FORMAT = '%H:%M:%S'
  113. # Used when generating matrix locations
  114. COL_LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijilmnopqrstuvwxyz'
  115. ROW_LETTERS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnop'
  116. # Constants that should match their counterparts in make
  117. BUILD_DIR = environ.get('BUILD_DIR', '.build')
  118. INTERMEDIATE_OUTPUT_PREFIX = f'{BUILD_DIR}/obj_'
  119. # Headers for generated files
  120. GPL2_HEADER_C_LIKE = f'''\
  121. // Copyright {date.today().year} QMK
  122. // SPDX-License-Identifier: GPL-2.0-or-later
  123. '''
  124. GPL2_HEADER_SH_LIKE = f'''\
  125. # Copyright {date.today().year} QMK
  126. # SPDX-License-Identifier: GPL-2.0-or-later
  127. '''
  128. GPL2_HEADER_XML_LIKE = f'''\
  129. <!--- Copyright {date.today().year} QMK --->
  130. <!--- SPDX-License-Identifier: GPL-2.0-or-later --->
  131. '''
  132. GENERATED_HEADER_C_LIKE = '''\
  133. /*******************************************************************************
  134. 88888888888 888 d8b .d888 d8b 888 d8b
  135. 888 888 Y8P d88P" Y8P 888 Y8P
  136. 888 888 888 888
  137. 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
  138. 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
  139. 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
  140. 888 888 888 888 X88 888 888 888 Y8b. 888 X88
  141. 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
  142. 888 888
  143. 888 888
  144. 888 888
  145. .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
  146. d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
  147. 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
  148. Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
  149. "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
  150. 888
  151. Y8b d88P
  152. "Y88P"
  153. *******************************************************************************/
  154. '''
  155. GENERATED_HEADER_SH_LIKE = '''\
  156. ################################################################################
  157. #
  158. # 88888888888 888 d8b .d888 d8b 888 d8b
  159. # 888 888 Y8P d88P" Y8P 888 Y8P
  160. # 888 888 888 888
  161. # 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
  162. # 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
  163. # 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
  164. # 888 888 888 888 X88 888 888 888 Y8b. 888 X88
  165. # 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
  166. #
  167. # 888 888
  168. # 888 888
  169. # 888 888
  170. # .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
  171. # d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
  172. # 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
  173. # Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
  174. # "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
  175. # 888
  176. # Y8b d88P
  177. # "Y88P"
  178. #
  179. ################################################################################
  180. '''
  181. GENERATED_HEADER_XML_LIKE = '''\
  182. <!---
  183. *******************************************************************************
  184. 88888888888 888 d8b .d888 d8b 888 d8b
  185. 888 888 Y8P d88P" Y8P 888 Y8P
  186. 888 888 888 888
  187. 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
  188. 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
  189. 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
  190. 888 888 888 888 X88 888 888 888 Y8b. 888 X88
  191. 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
  192. 888 888
  193. 888 888
  194. 888 888
  195. .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
  196. d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
  197. 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
  198. Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
  199. "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
  200. 888
  201. Y8b d88P
  202. "Y88P"
  203. *******************************************************************************
  204. --->
  205. '''