constants.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  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. GPL2_HEADER_XML_LIKE = f'''\
  137. <!--- Copyright {date.today().year} QMK --->
  138. <!--- SPDX-License-Identifier: GPL-2.0-or-later --->
  139. '''
  140. GENERATED_HEADER_C_LIKE = '''\
  141. /*******************************************************************************
  142. 88888888888 888 d8b .d888 d8b 888 d8b
  143. 888 888 Y8P d88P" Y8P 888 Y8P
  144. 888 888 888 888
  145. 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
  146. 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
  147. 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
  148. 888 888 888 888 X88 888 888 888 Y8b. 888 X88
  149. 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
  150. 888 888
  151. 888 888
  152. 888 888
  153. .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
  154. d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
  155. 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
  156. Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
  157. "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
  158. 888
  159. Y8b d88P
  160. "Y88P"
  161. *******************************************************************************/
  162. '''
  163. GENERATED_HEADER_SH_LIKE = '''\
  164. ################################################################################
  165. #
  166. # 88888888888 888 d8b .d888 d8b 888 d8b
  167. # 888 888 Y8P d88P" Y8P 888 Y8P
  168. # 888 888 888 888
  169. # 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
  170. # 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
  171. # 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
  172. # 888 888 888 888 X88 888 888 888 Y8b. 888 X88
  173. # 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
  174. #
  175. # 888 888
  176. # 888 888
  177. # 888 888
  178. # .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
  179. # d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
  180. # 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
  181. # Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
  182. # "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
  183. # 888
  184. # Y8b d88P
  185. # "Y88P"
  186. #
  187. ################################################################################
  188. '''
  189. GENERATED_HEADER_XML_LIKE = '''\
  190. <!---
  191. *******************************************************************************
  192. 88888888888 888 d8b .d888 d8b 888 d8b
  193. 888 888 Y8P d88P" Y8P 888 Y8P
  194. 888 888 888 888
  195. 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
  196. 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
  197. 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
  198. 888 888 888 888 X88 888 888 888 Y8b. 888 X88
  199. 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
  200. 888 888
  201. 888 888
  202. 888 888
  203. .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
  204. d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
  205. 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
  206. Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
  207. "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
  208. 888
  209. Y8b d88P
  210. "Y88P"
  211. *******************************************************************************
  212. --->
  213. '''
  214. LICENSE_TEXTS = [
  215. (
  216. 'GPL-2.0-or-later', [
  217. """\
  218. This program is free software; you can redistribute it and/or
  219. modify it under the terms of the GNU General Public License
  220. as published by the Free Software Foundation; either version 2
  221. of the License, or (at your option) any later version.
  222. """, """\
  223. This program is free software; you can redistribute it and/or
  224. modify it under the terms of the GNU General Public License
  225. as published by the Free Software Foundation; either version 2
  226. of the License, or any later version.
  227. """
  228. ]
  229. ),
  230. ('GPL-2.0-only', ["""\
  231. This program is free software; you can redistribute it and/or
  232. modify it under the terms of the GNU General Public License as
  233. published by the Free Software Foundation; version 2.
  234. """]),
  235. (
  236. 'GPL-3.0-or-later', [
  237. """\
  238. This program is free software: you can redistribute it and/or
  239. modify it under the terms of the GNU General Public License as
  240. published by the Free Software Foundation, either version 3 of
  241. the License, or (at your option) any later version.
  242. """, """\
  243. This program is free software: you can redistribute it and/or
  244. modify it under the terms of the GNU General Public License as
  245. published by the Free Software Foundation, either version 3 of
  246. the License, or any later version.
  247. """
  248. ]
  249. ),
  250. ('GPL-3.0-only', ["""\
  251. This program is free software: you can redistribute it and/or
  252. modify it under the terms of the GNU General Public License as
  253. published by the Free Software Foundation, version 3.
  254. """]),
  255. (
  256. 'LGPL-2.1-or-later', [
  257. """\
  258. This program is free software; you can redistribute it and/or
  259. modify it under the terms of the GNU Lesser General Public License
  260. as published by the Free Software Foundation; either version 2.1
  261. of the License, or (at your option) any later version.
  262. """, """\
  263. This program is free software; you can redistribute it and/or
  264. modify it under the terms of the GNU Lesser General Public License
  265. as published by the Free Software Foundation; either version 2.1
  266. of the License, or any later version.
  267. """, """\
  268. This library is free software; you can redistribute it and/or
  269. modify it under the terms of the GNU Lesser General Public License
  270. as published by the Free Software Foundation; either version 2.1
  271. of the License, or (at your option) any later version.
  272. """, """\
  273. This library is free software; you can redistribute it and/or
  274. modify it under the terms of the GNU Lesser General Public License
  275. as published by the Free Software Foundation; either version 2.1
  276. of the License, or any later version.
  277. """
  278. ]
  279. ),
  280. (
  281. 'LGPL-2.1-only', [
  282. """\
  283. This program is free software; you can redistribute it and/or
  284. modify it under the terms of the GNU Lesser General Public License as
  285. published by the Free Software Foundation; version 2.1.
  286. """, """\
  287. This library is free software; you can redistribute it and/or
  288. modify it under the terms of the GNU Lesser General Public License as
  289. published by the Free Software Foundation; version 2.1.
  290. """
  291. ]
  292. ),
  293. (
  294. 'LGPL-3.0-or-later', [
  295. """\
  296. This program is free software; you can redistribute it and/or
  297. modify it under the terms of the GNU Lesser General Public License
  298. as published by the Free Software Foundation; either version 3
  299. of the License, or (at your option) any later version.
  300. """, """\
  301. This program is free software; you can redistribute it and/or
  302. modify it under the terms of the GNU Lesser General Public License
  303. as published by the Free Software Foundation; either version 3
  304. of the License, or any later version.
  305. """, """\
  306. This library is free software; you can redistribute it and/or
  307. modify it under the terms of the GNU Lesser General Public License
  308. as published by the Free Software Foundation; either version 3
  309. of the License, or (at your option) any later version.
  310. """, """\
  311. This library is free software; you can redistribute it and/or
  312. modify it under the terms of the GNU Lesser General Public License
  313. as published by the Free Software Foundation; either version 3
  314. of the License, or any later version.
  315. """
  316. ]
  317. ),
  318. (
  319. 'LGPL-3.0-only', [
  320. """\
  321. This program is free software; you can redistribute it and/or
  322. modify it under the terms of the GNU Lesser General Public License as
  323. published by the Free Software Foundation; version 3.
  324. """, """\
  325. This library is free software; you can redistribute it and/or
  326. modify it under the terms of the GNU Lesser General Public License as
  327. published by the Free Software Foundation; version 3.
  328. """
  329. ]
  330. ),
  331. ('Apache-2.0', ["""\
  332. Licensed under the Apache License, Version 2.0 (the "License");
  333. you may not use this file except in compliance with the License.
  334. """]),
  335. ]
  336. JOYSTICK_AXES = ['x', 'y', 'z', 'rx', 'ry', 'rz']