constants.py 13 KB

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