constants.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  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. from qmk.userspace import detect_qmk_userspace
  7. # The root of the qmk_firmware tree.
  8. QMK_FIRMWARE = Path.cwd()
  9. # The detected userspace tree
  10. QMK_USERSPACE = detect_qmk_userspace()
  11. # Whether or not we have a separate userspace directory
  12. HAS_QMK_USERSPACE = True if QMK_USERSPACE is not None else False
  13. # Upstream repo url
  14. QMK_FIRMWARE_UPSTREAM = 'qmk/qmk_firmware'
  15. # This is the number of directories under `qmk_firmware/keyboards` that will be traversed. This is currently a limitation of our make system.
  16. MAX_KEYBOARD_SUBFOLDERS = 5
  17. # Supported processor types
  18. 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', 'AT32F415'
  19. LUFA_PROCESSORS = 'at90usb162', 'atmega16u2', 'atmega32u2', 'atmega16u4', 'atmega32u4', 'at90usb646', 'at90usb647', 'at90usb1286', 'at90usb1287', None
  20. VUSB_PROCESSORS = 'atmega32a', 'atmega328p', 'atmega328', 'attiny85'
  21. # Bootloaders of the supported processors
  22. MCU2BOOTLOADER = {
  23. "RP2040": "rp2040",
  24. "MKL26Z64": "halfkay",
  25. "MK20DX128": "halfkay",
  26. "MK20DX256": "halfkay",
  27. "MK66FX1M0": "halfkay",
  28. "STM32F042": "stm32-dfu",
  29. "STM32F072": "stm32-dfu",
  30. "STM32F103": "stm32duino",
  31. "STM32F303": "stm32-dfu",
  32. "STM32F401": "stm32-dfu",
  33. "STM32F405": "stm32-dfu",
  34. "STM32F407": "stm32-dfu",
  35. "STM32F411": "stm32-dfu",
  36. "STM32F446": "stm32-dfu",
  37. "STM32G431": "stm32-dfu",
  38. "STM32G474": "stm32-dfu",
  39. "STM32H723": "stm32-dfu",
  40. "STM32H733": "stm32-dfu",
  41. "STM32L412": "stm32-dfu",
  42. "STM32L422": "stm32-dfu",
  43. "STM32L432": "stm32-dfu",
  44. "STM32L433": "stm32-dfu",
  45. "STM32L442": "stm32-dfu",
  46. "STM32L443": "stm32-dfu",
  47. "GD32VF103": "gd32v-dfu",
  48. "WB32F3G71": "wb32-dfu",
  49. "WB32FQ95": "wb32-dfu",
  50. "AT32F415": "at32-dfu",
  51. "atmega16u2": "atmel-dfu",
  52. "atmega32u2": "atmel-dfu",
  53. "atmega16u4": "atmel-dfu",
  54. "atmega32u4": "atmel-dfu",
  55. "at90usb162": "atmel-dfu",
  56. "at90usb646": "atmel-dfu",
  57. "at90usb647": "atmel-dfu",
  58. "at90usb1286": "atmel-dfu",
  59. "at90usb1287": "atmel-dfu",
  60. "atmega32a": "bootloadhid",
  61. "atmega328p": "usbasploader",
  62. "atmega328": "usbasploader",
  63. }
  64. # Map of legacy keycodes that can be automatically updated
  65. LEGACY_KEYCODES = { # Comment here is to force multiline formatting
  66. 'RESET': 'QK_BOOT'
  67. }
  68. # Map VID:PID values to bootloaders
  69. BOOTLOADER_VIDS_PIDS = {
  70. 'atmel-dfu': {
  71. ("03eb", "2fef"), # ATmega16U2
  72. ("03eb", "2ff0"), # ATmega32U2
  73. ("03eb", "2ff3"), # ATmega16U4
  74. ("03eb", "2ff4"), # ATmega32U4
  75. ("03eb", "2ff9"), # AT90USB64
  76. ("03eb", "2ffa"), # AT90USB162
  77. ("03eb", "2ffb") # AT90USB128
  78. },
  79. 'kiibohd': {("1c11", "b007")},
  80. 'stm32-dfu': {
  81. ("1eaf", "0003"), # STM32duino
  82. ("0483", "df11") # STM32 DFU
  83. },
  84. 'apm32-dfu': {("314b", "0106")},
  85. 'gd32v-dfu': {("28e9", "0189")},
  86. 'wb32-dfu': {("342d", "dfa0")},
  87. 'at32-dfu': {("2e3c", "df11")},
  88. 'bootloadhid': {("16c0", "05df")},
  89. 'usbasploader': {("16c0", "05dc")},
  90. 'usbtinyisp': {("1782", "0c9f")},
  91. 'md-boot': {("03eb", "6124")},
  92. 'caterina': {
  93. # pid.codes shared PID
  94. ("1209", "2302"), # Keyboardio Atreus 2 Bootloader
  95. # Spark Fun Electronics
  96. ("1b4f", "9203"), # Pro Micro 3V3/8MHz
  97. ("1b4f", "9205"), # Pro Micro 5V/16MHz
  98. ("1b4f", "9207"), # LilyPad 3V3/8MHz (and some Pro Micro clones)
  99. # Pololu Electronics
  100. ("1ffb", "0101"), # A-Star 32U4
  101. # Arduino SA
  102. ("2341", "0036"), # Leonardo
  103. ("2341", "0037"), # Micro
  104. # Adafruit Industries LLC
  105. ("239a", "000c"), # Feather 32U4
  106. ("239a", "000d"), # ItsyBitsy 32U4 3V3/8MHz
  107. ("239a", "000e"), # ItsyBitsy 32U4 5V/16MHz
  108. # dog hunter AG
  109. ("2a03", "0036"), # Leonardo
  110. ("2a03", "0037") # Micro
  111. },
  112. 'hid-bootloader': {
  113. ("03eb", "2067"), # QMK HID
  114. ("16c0", "0478") # PJRC halfkay
  115. }
  116. }
  117. # Common format strings
  118. DATE_FORMAT = '%Y-%m-%d'
  119. DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S %Z'
  120. TIME_FORMAT = '%H:%M:%S'
  121. # Used when generating matrix locations
  122. COL_LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijilmnopqrstuvwxyz'
  123. ROW_LETTERS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnop'
  124. # Constants that should match their counterparts in make
  125. BUILD_DIR = environ.get('BUILD_DIR', '.build')
  126. INTERMEDIATE_OUTPUT_PREFIX = f'{BUILD_DIR}/obj_'
  127. # Headers for generated files
  128. GPL2_HEADER_C_LIKE = f'''\
  129. // Copyright {date.today().year} QMK
  130. // SPDX-License-Identifier: GPL-2.0-or-later
  131. '''
  132. GPL2_HEADER_SH_LIKE = f'''\
  133. # Copyright {date.today().year} QMK
  134. # SPDX-License-Identifier: GPL-2.0-or-later
  135. '''
  136. GENERATED_HEADER_C_LIKE = '''\
  137. /*******************************************************************************
  138. 88888888888 888 d8b .d888 d8b 888 d8b
  139. 888 888 Y8P d88P" Y8P 888 Y8P
  140. 888 888 888 888
  141. 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
  142. 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
  143. 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
  144. 888 888 888 888 X88 888 888 888 Y8b. 888 X88
  145. 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
  146. 888 888
  147. 888 888
  148. 888 888
  149. .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
  150. d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
  151. 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
  152. Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
  153. "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
  154. 888
  155. Y8b d88P
  156. "Y88P"
  157. *******************************************************************************/
  158. '''
  159. GENERATED_HEADER_SH_LIKE = '''\
  160. ################################################################################
  161. #
  162. # 88888888888 888 d8b .d888 d8b 888 d8b
  163. # 888 888 Y8P d88P" Y8P 888 Y8P
  164. # 888 888 888 888
  165. # 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
  166. # 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
  167. # 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
  168. # 888 888 888 888 X88 888 888 888 Y8b. 888 X88
  169. # 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
  170. #
  171. # 888 888
  172. # 888 888
  173. # 888 888
  174. # .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
  175. # d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
  176. # 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
  177. # Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
  178. # "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
  179. # 888
  180. # Y8b d88P
  181. # "Y88P"
  182. #
  183. ################################################################################
  184. '''
  185. LICENSE_TEXTS = [
  186. (
  187. 'GPL-2.0-or-later', [
  188. """\
  189. This program is free software; you can redistribute it and/or
  190. modify it under the terms of the GNU General Public License
  191. as published by the Free Software Foundation; either version 2
  192. of the License, or (at your option) any later version.
  193. """, """\
  194. This program is free software; you can redistribute it and/or
  195. modify it under the terms of the GNU General Public License
  196. as published by the Free Software Foundation; either version 2
  197. of the License, or any later version.
  198. """
  199. ]
  200. ),
  201. ('GPL-2.0-only', ["""\
  202. This program is free software; you can redistribute it and/or
  203. modify it under the terms of the GNU General Public License as
  204. published by the Free Software Foundation; version 2.
  205. """]),
  206. (
  207. 'GPL-3.0-or-later', [
  208. """\
  209. This program is free software: you can redistribute it and/or
  210. modify it under the terms of the GNU General Public License as
  211. published by the Free Software Foundation, either version 3 of
  212. the License, or (at your option) any later version.
  213. """, """\
  214. This program is free software: you can redistribute it and/or
  215. modify it under the terms of the GNU General Public License as
  216. published by the Free Software Foundation, either version 3 of
  217. the License, or any later version.
  218. """
  219. ]
  220. ),
  221. ('GPL-3.0-only', ["""\
  222. This program is free software: you can redistribute it and/or
  223. modify it under the terms of the GNU General Public License as
  224. published by the Free Software Foundation, version 3.
  225. """]),
  226. (
  227. 'LGPL-2.1-or-later', [
  228. """\
  229. This program is free software; you can redistribute it and/or
  230. modify it under the terms of the GNU Lesser General Public License
  231. as published by the Free Software Foundation; either version 2.1
  232. of the License, or (at your option) any later version.
  233. """, """\
  234. This program is free software; you can redistribute it and/or
  235. modify it under the terms of the GNU Lesser General Public License
  236. as published by the Free Software Foundation; either version 2.1
  237. of the License, or any later version.
  238. """, """\
  239. This library is free software; you can redistribute it and/or
  240. modify it under the terms of the GNU Lesser General Public License
  241. as published by the Free Software Foundation; either version 2.1
  242. of the License, or (at your option) any later version.
  243. """, """\
  244. This library is free software; you can redistribute it and/or
  245. modify it under the terms of the GNU Lesser General Public License
  246. as published by the Free Software Foundation; either version 2.1
  247. of the License, or any later version.
  248. """
  249. ]
  250. ),
  251. (
  252. 'LGPL-2.1-only', [
  253. """\
  254. This program is free software; you can redistribute it and/or
  255. modify it under the terms of the GNU Lesser General Public License as
  256. published by the Free Software Foundation; version 2.1.
  257. """, """\
  258. This library is free software; you can redistribute it and/or
  259. modify it under the terms of the GNU Lesser General Public License as
  260. published by the Free Software Foundation; version 2.1.
  261. """
  262. ]
  263. ),
  264. (
  265. 'LGPL-3.0-or-later', [
  266. """\
  267. This program is free software; you can redistribute it and/or
  268. modify it under the terms of the GNU Lesser General Public License
  269. as published by the Free Software Foundation; either version 3
  270. of the License, or (at your option) any later version.
  271. """, """\
  272. This program is free software; you can redistribute it and/or
  273. modify it under the terms of the GNU Lesser General Public License
  274. as published by the Free Software Foundation; either version 3
  275. of the License, or any later version.
  276. """, """\
  277. This library is free software; you can redistribute it and/or
  278. modify it under the terms of the GNU Lesser General Public License
  279. as published by the Free Software Foundation; either version 3
  280. of the License, or (at your option) any later version.
  281. """, """\
  282. This library is free software; you can redistribute it and/or
  283. modify it under the terms of the GNU Lesser General Public License
  284. as published by the Free Software Foundation; either version 3
  285. of the License, or any later version.
  286. """
  287. ]
  288. ),
  289. (
  290. 'LGPL-3.0-only', [
  291. """\
  292. This program is free software; you can redistribute it and/or
  293. modify it under the terms of the GNU Lesser General Public License as
  294. published by the Free Software Foundation; version 3.
  295. """, """\
  296. This library is free software; you can redistribute it and/or
  297. modify it under the terms of the GNU Lesser General Public License as
  298. published by the Free Software Foundation; version 3.
  299. """
  300. ]
  301. ),
  302. ('Apache-2.0', ["""\
  303. Licensed under the Apache License, Version 2.0 (the "License");
  304. you may not use this file except in compliance with the License.
  305. """]),
  306. ]
  307. JOYSTICK_AXES = ['x', 'y', 'z', 'rx', 'ry', 'rz']