"""Information that should be available to the python library. """ from os import environ from datetime import date from pathlib import Path from qmk.userspace import detect_qmk_userspace # The root of the qmk_firmware tree. QMK_FIRMWARE = Path.cwd() # The detected userspace tree QMK_USERSPACE = detect_qmk_userspace() # Whether or not we have a separate userspace directory HAS_QMK_USERSPACE = True if QMK_USERSPACE is not None else False # Upstream repo url QMK_FIRMWARE_UPSTREAM = 'qmk/qmk_firmware' # This is the number of directories under `qmk_firmware/keyboards` that will be traversed. This is currently a limitation of our make system. MAX_KEYBOARD_SUBFOLDERS = 5 # Supported processor types 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' LUFA_PROCESSORS = 'at90usb162', 'atmega16u2', 'atmega32u2', 'atmega16u4', 'atmega32u4', 'at90usb646', 'at90usb647', 'at90usb1286', 'at90usb1287', None VUSB_PROCESSORS = 'atmega32a', 'atmega328p', 'atmega328', 'attiny85' # Bootloaders of the supported processors MCU2BOOTLOADER = { "RP2040": "rp2040", "MKL26Z64": "halfkay", "MK20DX128": "halfkay", "MK20DX256": "halfkay", "MK66FX1M0": "halfkay", "STM32F042": "stm32-dfu", "STM32F072": "stm32-dfu", "STM32F103": "stm32duino", "STM32F303": "stm32-dfu", "STM32F401": "stm32-dfu", "STM32F405": "stm32-dfu", "STM32F407": "stm32-dfu", "STM32F411": "stm32-dfu", "STM32F446": "stm32-dfu", "STM32G431": "stm32-dfu", "STM32G474": "stm32-dfu", "STM32H723": "stm32-dfu", "STM32H733": "stm32-dfu", "STM32L412": "stm32-dfu", "STM32L422": "stm32-dfu", "STM32L432": "stm32-dfu", "STM32L433": "stm32-dfu", "STM32L442": "stm32-dfu", "STM32L443": "stm32-dfu", "GD32VF103": "gd32v-dfu", "WB32F3G71": "wb32-dfu", "WB32FQ95": "wb32-dfu", "atmega16u2": "atmel-dfu", "atmega32u2": "atmel-dfu", "atmega16u4": "atmel-dfu", "atmega32u4": "atmel-dfu", "at90usb162": "atmel-dfu", "at90usb646": "atmel-dfu", "at90usb647": "atmel-dfu", "at90usb1286": "atmel-dfu", "at90usb1287": "atmel-dfu", "atmega32a": "bootloadhid", "atmega328p": "usbasploader", "atmega328": "usbasploader", } # Map of legacy keycodes that can be automatically updated LEGACY_KEYCODES = { # Comment here is to force multiline formatting 'RESET': 'QK_BOOT' } # Map VID:PID values to bootloaders BOOTLOADER_VIDS_PIDS = { 'atmel-dfu': { ("03eb", "2fef"), # ATmega16U2 ("03eb", "2ff0"), # ATmega32U2 ("03eb", "2ff3"), # ATmega16U4 ("03eb", "2ff4"), # ATmega32U4 ("03eb", "2ff9"), # AT90USB64 ("03eb", "2ffa"), # AT90USB162 ("03eb", "2ffb") # AT90USB128 }, 'kiibohd': {("1c11", "b007")}, 'stm32-dfu': { ("1eaf", "0003"), # STM32duino ("0483", "df11") # STM32 DFU }, 'apm32-dfu': {("314b", "0106")}, 'gd32v-dfu': {("28e9", "0189")}, 'wb32-dfu': {("342d", "dfa0")}, 'bootloadhid': {("16c0", "05df")}, 'usbasploader': {("16c0", "05dc")}, 'usbtinyisp': {("1782", "0c9f")}, 'md-boot': {("03eb", "6124")}, 'caterina': { # pid.codes shared PID ("1209", "2302"), # Keyboardio Atreus 2 Bootloader # Spark Fun Electronics ("1b4f", "9203"), # Pro Micro 3V3/8MHz ("1b4f", "9205"), # Pro Micro 5V/16MHz ("1b4f", "9207"), # LilyPad 3V3/8MHz (and some Pro Micro clones) # Pololu Electronics ("1ffb", "0101"), # A-Star 32U4 # Arduino SA ("2341", "0036"), # Leonardo ("2341", "0037"), # Micro # Adafruit Industries LLC ("239a", "000c"), # Feather 32U4 ("239a", "000d"), # ItsyBitsy 32U4 3V3/8MHz ("239a", "000e"), # ItsyBitsy 32U4 5V/16MHz # dog hunter AG ("2a03", "0036"), # Leonardo ("2a03", "0037") # Micro }, 'hid-bootloader': { ("03eb", "2067"), # QMK HID ("16c0", "0478") # PJRC halfkay } } # Common format strings DATE_FORMAT = '%Y-%m-%d' DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S %Z' TIME_FORMAT = '%H:%M:%S' # Used when generating matrix locations COL_LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijilmnopqrstuvwxyz' ROW_LETTERS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnop' # Constants that should match their counterparts in make BUILD_DIR = environ.get('BUILD_DIR', '.build') INTERMEDIATE_OUTPUT_PREFIX = f'{BUILD_DIR}/obj_' # Headers for generated files GPL2_HEADER_C_LIKE = f'''\ // Copyright {date.today().year} QMK // SPDX-License-Identifier: GPL-2.0-or-later ''' GPL2_HEADER_SH_LIKE = f'''\ # Copyright {date.today().year} QMK # SPDX-License-Identifier: GPL-2.0-or-later ''' GENERATED_HEADER_C_LIKE = '''\ /******************************************************************************* 88888888888 888 d8b .d888 d8b 888 d8b 888 888 Y8P d88P" Y8P 888 Y8P 888 888 888 888 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b. 888 888 888 888 X88 888 888 888 Y8b. 888 X88 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P' 888 888 888 888 888 888 .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888 d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888 Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888 "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888 888 Y8b d88P "Y88P" *******************************************************************************/ ''' GENERATED_HEADER_SH_LIKE = '''\ ################################################################################ # # 88888888888 888 d8b .d888 d8b 888 d8b # 888 888 Y8P d88P" Y8P 888 Y8P # 888 888 888 888 # 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b # 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K # 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b. # 888 888 888 888 X88 888 888 888 Y8b. 888 X88 # 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P' # # 888 888 # 888 888 # 888 888 # .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888 # d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888 # 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888 # Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888 # "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888 # 888 # Y8b d88P # "Y88P" # ################################################################################ ''' LICENSE_TEXTS = [ ( 'GPL-2.0-or-later', [ """\ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. """, """\ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. """ ] ), ('GPL-2.0-only', ["""\ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2. """]), ( 'GPL-3.0-or-later', [ """\ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. """, """\ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version. """ ] ), ('GPL-3.0-only', ["""\ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3. """]), ( 'LGPL-2.1-or-later', [ """\ This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. """, """\ This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or any later version. """, """\ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. """, """\ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or any later version. """ ] ), ( 'LGPL-2.1-only', [ """\ This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; version 2.1. """, """\ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; version 2.1. """ ] ), ( 'LGPL-3.0-or-later', [ """\ This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. """, """\ This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or any later version. """, """\ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. """, """\ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or any later version. """ ] ), ( 'LGPL-3.0-only', [ """\ This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; version 3. """, """\ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; version 3. """ ] ), ('Apache-2.0', ["""\ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. """]), ]