constants.py 15 KB

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