constants.py 9.1 KB

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