constants.py 13 KB

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