diff options
45 files changed, 1463 insertions, 556 deletions
diff --git a/.gitignore b/.gitignore index 1d426aa635..8a99635419 100644 --- a/.gitignore +++ b/.gitignore @@ -64,3 +64,6 @@ id_rsa_* # python things __pycache__ + +# prerequisites for updating ChibiOS +/util/fmpp* diff --git a/.gitmodules b/.gitmodules index 4137c84d39..154768cd75 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,7 +4,6 @@ [submodule "lib/chibios-contrib"] path = lib/chibios-contrib url = https://github.com/qmk/ChibiOS-Contrib - branch = k-type-fix [submodule "lib/ugfx"] path = lib/ugfx url = https://github.com/qmk/uGFX @@ -618,13 +618,19 @@ endif # Generate the version.h file ifndef SKIP_GIT GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") + CHIBIOS_VERSION := $(shell cd lib/chibios && git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") + CHIBIOS_CONTRIB_VERSION := $(shell cd lib/chibios-contrib && git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") else GIT_VERSION := NA + CHIBIOS_VERSION := NA + CHIBIOS_CONTRIB_VERSION := NA endif ifndef SKIP_VERSION BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S") $(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(ROOT_DIR)/quantum/version.h) $(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(ROOT_DIR)/quantum/version.h) +$(shell echo '#define CHIBIOS_VERSION "$(CHIBIOS_VERSION)"' >> $(ROOT_DIR)/quantum/version.h) +$(shell echo '#define CHIBIOS_CONTRIB_VERSION "$(CHIBIOS_CONTRIB_VERSION)"' >> $(ROOT_DIR)/quantum/version.h) else BUILD_DATE := NA endif diff --git a/common_features.mk b/common_features.mk index 6a22fed372..5c184a8fb8 100644 --- a/common_features.mk +++ b/common_features.mk @@ -298,6 +298,7 @@ VALID_BACKLIGHT_TYPES := pwm software custom BACKLIGHT_ENABLE ?= no BACKLIGHT_DRIVER ?= pwm ifeq ($(strip $(BACKLIGHT_ENABLE)), yes) + SRC += $(QUANTUM_DIR)/process_keycode/process_backlight.c ifeq ($(filter $(BACKLIGHT_DRIVER),$(VALID_BACKLIGHT_TYPES)),) $(error BACKLIGHT_DRIVER="$(BACKLIGHT_DRIVER)" is not a valid backlight type) endif diff --git a/drivers/arm/i2c_master.c b/drivers/arm/i2c_master.c index 744ffb4612..ede915fa4a 100644 --- a/drivers/arm/i2c_master.c +++ b/drivers/arm/i2c_master.c @@ -29,12 +29,16 @@ #include <string.h> #include <hal.h> +static uint8_t i2c_address; + static const I2CConfig i2cconfig = { #ifdef USE_I2CV1 I2C1_OPMODE, I2C1_CLOCK_SPEED, I2C1_DUTY_CYCLE, #else + // This configures the I2C clock to 400khz assuming a 72Mhz clock + // For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html STM32_TIMINGR_PRESC(I2C1_TIMINGR_PRESC) | STM32_TIMINGR_SCLDEL(I2C1_TIMINGR_SCLDEL) | STM32_TIMINGR_SDADEL(I2C1_TIMINGR_SDADEL) | STM32_TIMINGR_SCLH(I2C1_TIMINGR_SCLH) | STM32_TIMINGR_SCLL(I2C1_TIMINGR_SCLL), 0, 0 #endif }; @@ -64,58 +68,30 @@ __attribute__((weak)) void i2c_init(void) { palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_ALTERNATE(I2C1_SCL_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN); palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_ALTERNATE(I2C1_SDA_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN); #endif - - // i2cInit(); //This is invoked by halInit() so no need to redo it. } i2c_status_t i2c_start(uint8_t address) { -#if I2C_USE_MUTUAL_EXCLUSION - i2cAcquireBus(&I2C_DRIVER); -#endif - + i2c_address = address; i2cStart(&I2C_DRIVER, &i2cconfig); return I2C_STATUS_SUCCESS; } i2c_status_t i2c_transmit(uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout) { -#if I2C_USE_MUTUAL_EXCLUSION - i2cAcquireBus(&I2C_DRIVER); -#endif - + i2c_address = address; i2cStart(&I2C_DRIVER, &i2cconfig); - msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (address >> 1), data, length, 0, 0, MS2ST(timeout)); - -#if I2C_USE_MUTUAL_EXCLUSION - i2cReleaseBus(&I2C_DRIVER); -#endif - + msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), data, length, 0, 0, TIME_MS2I(timeout)); return chibios_to_qmk(&status); } i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout) { -#if I2C_USE_MUTUAL_EXCLUSION - i2cAcquireBus(&I2C_DRIVER); -#endif - + i2c_address = address; i2cStart(&I2C_DRIVER, &i2cconfig); - msg_t status = i2cMasterReceiveTimeout(&I2C_DRIVER, (address >> 1), data, length, MS2ST(timeout)); - -#if I2C_USE_MUTUAL_EXCLUSION - i2cReleaseBus(&I2C_DRIVER); -#endif - + msg_t status = i2cMasterReceiveTimeout(&I2C_DRIVER, (i2c_address >> 1), data, length, TIME_MS2I(timeout)); return chibios_to_qmk(&status); } -i2c_status_t i2c_transmit_receive(uint8_t address, uint8_t * tx_body, uint16_t tx_length, uint8_t * rx_body, uint16_t rx_length) { - return i2cMasterTransmitTimeout(&I2C_DRIVER, address/2, tx_body, tx_length, rx_body, rx_length, MS2ST(100)); -} - i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout) { -#if I2C_USE_MUTUAL_EXCLUSION - i2cAcquireBus(&I2C_DRIVER); -#endif - + i2c_address = devaddr; i2cStart(&I2C_DRIVER, &i2cconfig); uint8_t complete_packet[length + 1]; @@ -124,34 +100,15 @@ i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, } complete_packet[0] = regaddr; - msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (devaddr >> 1), complete_packet, length + 1, 0, 0, MS2ST(timeout)); - -#if I2C_USE_MUTUAL_EXCLUSION - i2cReleaseBus(&I2C_DRIVER); -#endif - + msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), complete_packet, length + 1, 0, 0, TIME_MS2I(timeout)); return chibios_to_qmk(&status); } i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) { -#if I2C_USE_MUTUAL_EXCLUSION - i2cAcquireBus(&I2C_DRIVER); -#endif - + i2c_address = devaddr; i2cStart(&I2C_DRIVER, &i2cconfig); - msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (devaddr >> 1), ®addr, 1, data, length, MS2ST(timeout)); - -#if I2C_USE_MUTUAL_EXCLUSION - i2cReleaseBus(&I2C_DRIVER); -#endif - + msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), ®addr, 1, data, length, TIME_MS2I(timeout)); return chibios_to_qmk(&status); } -void i2c_stop(void) { - i2cStop(&I2C_DRIVER); - -#if I2C_USE_MUTUAL_EXCLUSION - i2cReleaseBus(&I2C_DRIVER); -#endif -} +void i2c_stop(void) { i2cStop(&I2C_DRIVER); } diff --git a/drivers/arm/ws2812_spi.c b/drivers/arm/ws2812_spi.c index 0e954ec506..36e08e39ed 100644 --- a/drivers/arm/ws2812_spi.c +++ b/drivers/arm/ws2812_spi.c @@ -60,7 +60,7 @@ void ws2812_init(void) { // TODO: more dynamic baudrate static const SPIConfig spicfg = { - NULL, PAL_PORT(RGB_DI_PIN), PAL_PAD(RGB_DI_PIN), + 0, NULL, PAL_PORT(RGB_DI_PIN), PAL_PAD(RGB_DI_PIN), SPI_CR1_BR_1 | SPI_CR1_BR_0 // baudrate : fpclk / 8 => 1tick is 0.32us (2.25 MHz) }; diff --git a/drivers/boards/GENERIC_STM32_F072XB/board.c b/drivers/boards/GENERIC_STM32_F072XB/board.c index dcbb94310f..c91136e8f6 100644 --- a/drivers/boards/GENERIC_STM32_F072XB/board.c +++ b/drivers/boards/GENERIC_STM32_F072XB/board.c @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,56 +20,209 @@ */ #include "hal.h" +#include "stm32_gpio.h" + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local variables and types. */ +/*===========================================================================*/ + +/** + * @brief Type of STM32 GPIO port setup. + */ +typedef struct { + uint32_t moder; + uint32_t otyper; + uint32_t ospeedr; + uint32_t pupdr; + uint32_t odr; + uint32_t afrl; + uint32_t afrh; +} gpio_setup_t; -#if HAL_USE_PAL || defined(__DOXYGEN__) /** - * @brief PAL setup. - * @details Digital I/O ports static configuration as defined in @p board.h. - * This variable is used by the HAL when initializing the PAL driver. + * @brief Type of STM32 GPIO initialization data. */ -const PALConfig pal_default_config = { -# if STM32_HAS_GPIOA +typedef struct { +#if STM32_HAS_GPIOA || defined(__DOXYGEN__) + gpio_setup_t PAData; +#endif +#if STM32_HAS_GPIOB || defined(__DOXYGEN__) + gpio_setup_t PBData; +#endif +#if STM32_HAS_GPIOC || defined(__DOXYGEN__) + gpio_setup_t PCData; +#endif +#if STM32_HAS_GPIOD || defined(__DOXYGEN__) + gpio_setup_t PDData; +#endif +#if STM32_HAS_GPIOE || defined(__DOXYGEN__) + gpio_setup_t PEData; +#endif +#if STM32_HAS_GPIOF || defined(__DOXYGEN__) + gpio_setup_t PFData; +#endif +#if STM32_HAS_GPIOG || defined(__DOXYGEN__) + gpio_setup_t PGData; +#endif +#if STM32_HAS_GPIOH || defined(__DOXYGEN__) + gpio_setup_t PHData; +#endif +#if STM32_HAS_GPIOI || defined(__DOXYGEN__) + gpio_setup_t PIData; +#endif +#if STM32_HAS_GPIOJ || defined(__DOXYGEN__) + gpio_setup_t PJData; +#endif +#if STM32_HAS_GPIOK || defined(__DOXYGEN__) + gpio_setup_t PKData; +#endif +} gpio_config_t; + +/** + * @brief STM32 GPIO static initialization data. + */ +static const gpio_config_t gpio_default_config = { +#if STM32_HAS_GPIOA {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR, VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH}, -# endif -# if STM32_HAS_GPIOB +#endif +#if STM32_HAS_GPIOB {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR, VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH}, -# endif -# if STM32_HAS_GPIOC +#endif +#if STM32_HAS_GPIOC {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR, VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH}, -# endif -# if STM32_HAS_GPIOD +#endif +#if STM32_HAS_GPIOD {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR, VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH}, -# endif -# if STM32_HAS_GPIOE +#endif +#if STM32_HAS_GPIOE {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR, VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH}, -# endif -# if STM32_HAS_GPIOF +#endif +#if STM32_HAS_GPIOF {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR, VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH}, -# endif -# if STM32_HAS_GPIOG +#endif +#if STM32_HAS_GPIOG {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR, VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH}, -# endif -# if STM32_HAS_GPIOH +#endif +#if STM32_HAS_GPIOH {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR, VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH}, -# endif -# if STM32_HAS_GPIOI - {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR, VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH} -# endif +#endif +#if STM32_HAS_GPIOI + {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR, VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH}, +#endif +#if STM32_HAS_GPIOJ + {VAL_GPIOJ_MODER, VAL_GPIOJ_OTYPER, VAL_GPIOJ_OSPEEDR, VAL_GPIOJ_PUPDR, VAL_GPIOJ_ODR, VAL_GPIOJ_AFRL, VAL_GPIOJ_AFRH}, +#endif +#if STM32_HAS_GPIOK + {VAL_GPIOK_MODER, VAL_GPIOK_OTYPER, VAL_GPIOK_OSPEEDR, VAL_GPIOK_PUPDR, VAL_GPIOK_ODR, VAL_GPIOK_AFRL, VAL_GPIOK_AFRH} +#endif }; + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +static void gpio_init(stm32_gpio_t *gpiop, const gpio_setup_t *config) { + gpiop->OTYPER = config->otyper; + gpiop->OSPEEDR = config->ospeedr; + gpiop->PUPDR = config->pupdr; + gpiop->ODR = config->odr; + gpiop->AFRL = config->afrl; + gpiop->AFRH = config->afrh; + gpiop->MODER = config->moder; +} + +static void stm32_gpio_init(void) { + /* Enabling GPIO-related clocks, the mask comes from the + registry header file.*/ + rccResetAHB(STM32_GPIO_EN_MASK); + rccEnableAHB(STM32_GPIO_EN_MASK, true); + + /* Initializing all the defined GPIO ports.*/ +#if STM32_HAS_GPIOA + gpio_init(GPIOA, &gpio_default_config.PAData); +#endif +#if STM32_HAS_GPIOB + gpio_init(GPIOB, &gpio_default_config.PBData); +#endif +#if STM32_HAS_GPIOC + gpio_init(GPIOC, &gpio_default_config.PCData); +#endif +#if STM32_HAS_GPIOD + gpio_init(GPIOD, &gpio_default_config.PDData); #endif +#if STM32_HAS_GPIOE + gpio_init(GPIOE, &gpio_default_config.PEData); +#endif +#if STM32_HAS_GPIOF + gpio_init(GPIOF, &gpio_default_config.PFData); +#endif +#if STM32_HAS_GPIOG + gpio_init(GPIOG, &gpio_default_config.PGData); +#endif +#if STM32_HAS_GPIOH + gpio_init(GPIOH, &gpio_default_config.PHData); +#endif +#if STM32_HAS_GPIOI + gpio_init(GPIOI, &gpio_default_config.PIData); +#endif +#if STM32_HAS_GPIOJ + gpio_init(GPIOJ, &gpio_default_config.PJData); +#endif +#if STM32_HAS_GPIOK + gpio_init(GPIOK, &gpio_default_config.PKData); +#endif +} + +/*===========================================================================*/ +/* Driver interrupt handlers. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ __attribute__((weak)) void enter_bootloader_mode_if_requested(void) {} /** * @brief Early initialization code. - * @details This initialization must be performed just after stack setup - * and before any other initialization. + * @details GPIO ports and system clocks are initialized before everything + * else. */ void __early_init(void) { enter_bootloader_mode_if_requested(); + + stm32_gpio_init(); stm32_clock_init(); } +#if HAL_USE_SDC || defined(__DOXYGEN__) +/** + * @brief SDC card detection. + */ +bool sdc_lld_is_card_inserted(SDCDriver *sdcp) { + (void)sdcp; + /* TODO: Fill the implementation.*/ + return true; +} + +/** + * @brief SDC card write protection detection. + */ +bool sdc_lld_is_write_protected(SDCDriver *sdcp) { + (void)sdcp; + /* TODO: Fill the implementation.*/ + return false; +} +#endif /* HAL_USE_SDC */ + #if HAL_USE_MMC_SPI || defined(__DOXYGEN__) /** * @brief MMC_SPI card detection. diff --git a/drivers/boards/GENERIC_STM32_F072XB/board.h b/drivers/boards/GENERIC_STM32_F072XB/board.h index c625a4330a..87570e62d2 100644 --- a/drivers/boards/GENERIC_STM32_F072XB/board.h +++ b/drivers/boards/GENERIC_STM32_F072XB/board.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -22,6 +22,10 @@ #ifndef BOARD_H #define BOARD_H +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + /* * Setup for Generic STM32_F072 Board */ @@ -167,11 +171,9 @@ #define LINE_USB_DP PAL_LINE(GPIOA, 12U) #define LINE_SWDIO PAL_LINE(GPIOA, 13U) #define LINE_SWCLK PAL_LINE(GPIOA, 14U) - #define LINE_SPI2_SCK PAL_LINE(GPIOB, 13U) #define LINE_SPI2_MISO PAL_LINE(GPIOB, 14U) #define LINE_SPI2_MOSI PAL_LINE(GPIOB, 15U) - #define LINE_MEMS_CS PAL_LINE(GPIOC, 0U) #define LINE_LED_RED PAL_LINE(GPIOC, 6U) #define LINE_LED_BLUE PAL_LINE(GPIOC, 7U) @@ -179,10 +181,25 @@ #define LINE_LED_GREEN PAL_LINE(GPIOC, 9U) #define LINE_OSC32_IN PAL_LINE(GPIOC, 14U) #define LINE_OSC32_OUT PAL_LINE(GPIOC, 15U) - #define LINE_OSC_IN PAL_LINE(GPIOF, 0U) #define LINE_OSC_OUT PAL_LINE(GPIOF, 1U) +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Derived constants and error checks. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver macros. */ +/*===========================================================================*/ + /* * I/O ports initial setup, this configuration is established soon after reset * in the initialization code. @@ -373,6 +390,10 @@ #define VAL_GPIOF_AFRL (PIN_AFIO_AF(GPIOF_OSC_IN, 0U) | PIN_AFIO_AF(GPIOF_OSC_OUT, 0U) | PIN_AFIO_AF(GPIOF_PIN2, 0U) | PIN_AFIO_AF(GPIOF_PIN3, 0U) | PIN_AFIO_AF(GPIOF_PIN4, 0U) | PIN_AFIO_AF(GPIOF_PIN5, 0U) | PIN_AFIO_AF(GPIOF_PIN6, 0U) | PIN_AFIO_AF(GPIOF_PIN7, 0U)) #define VAL_GPIOF_AFRH (PIN_AFIO_AF(GPIOF_PIN8, 0U) | PIN_AFIO_AF(GPIOF_PIN9, 0U) | PIN_AFIO_AF(GPIOF_PIN10, 0U) | PIN_AFIO_AF(GPIOF_PIN11, 0U) | PIN_AFIO_AF(GPIOF_PIN12, 0U) | PIN_AFIO_AF(GPIOF_PIN13, 0U) | PIN_AFIO_AF(GPIOF_PIN14, 0U) | PIN_AFIO_AF(GPIOF_PIN15, 0U)) +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + #if !defined(_FROM_ASM_) # ifdef __cplusplus extern "C" { diff --git a/drivers/boards/GENERIC_STM32_F072XB/board.mk b/drivers/boards/GENERIC_STM32_F072XB/board.mk index c136f705a6..bd6f878269 100644 --- a/drivers/boards/GENERIC_STM32_F072XB/board.mk +++ b/drivers/boards/GENERIC_STM32_F072XB/board.mk @@ -3,3 +3,7 @@ BOARDSRC = $(BOARD_PATH)/boards/GENERIC_STM32_F072XB/board.c # Required include directories BOARDINC = $(BOARD_PATH)/boards/GENERIC_STM32_F072XB + +# Shared variables +ALLCSRC += $(BOARDSRC) +ALLINC += $(BOARDINC) diff --git a/drivers/boards/GENERIC_STM32_F072XB/cfg/board.chcfg b/drivers/boards/GENERIC_STM32_F072XB/cfg/board.chcfg index 9c7cf4fd76..e6ceecb62e 100644 --- a/drivers/boards/GENERIC_STM32_F072XB/cfg/board.chcfg +++ b/drivers/boards/GENERIC_STM32_F072XB/cfg/board.chcfg @@ -6,7 +6,7 @@ <configuration_settings> <templates_path>resources/gencfg/processors/boards/stm32f0xx/templates</templates_path> <output_path>..</output_path> - <hal_version>3.0.x</hal_version> + <hal_version>5.0.x</hal_version> </configuration_settings> <board_name>ST STM32F072B-Discovery</board_name> <board_id>ST_STM32F072B_DISCOVERY</board_id> diff --git a/drivers/boards/GENERIC_STM32_F072XB/cfg/board.fmpp b/drivers/boards/GENERIC_STM32_F072XB/cfg/board.fmpp new file mode 100644 index 0000000000..55cd396e41 --- /dev/null +++ b/drivers/boards/GENERIC_STM32_F072XB/cfg/board.fmpp @@ -0,0 +1,15 @@ +sourceRoot: ../../../../../tools/ftl/processors/boards/stm32f0xx/templates +outputRoot: .. +dataRoot: . + +freemarkerLinks: { + lib: ../../../../../tools/ftl/libs +} + +data : { + doc1:xml ( + board.chcfg + { + } + ) +} diff --git a/drivers/boards/GENERIC_STM32_F303XC/board.c b/drivers/boards/GENERIC_STM32_F303XC/board.c index 60c191d9b1..9b0fc1b6b9 100644 --- a/drivers/boards/GENERIC_STM32_F303XC/board.c +++ b/drivers/boards/GENERIC_STM32_F303XC/board.c @@ -14,44 +14,172 @@ limitations under the License. */ +/* + * This file has been automatically generated using ChibiStudio board + * generator plugin. Do not edit manually. + */ + #include "hal.h" +#include "stm32_gpio.h" + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local variables and types. */ +/*===========================================================================*/ + +/** + * @brief Type of STM32 GPIO port setup. + */ +typedef struct { + uint32_t moder; + uint32_t otyper; + uint32_t ospeedr; + uint32_t pupdr; + uint32_t odr; + uint32_t afrl; + uint32_t afrh; +} gpio_setup_t; + +/** + * @brief Type of STM32 GPIO initialization data. + */ +typedef struct { +#if STM32_HAS_GPIOA || defined(__DOXYGEN__) + gpio_setup_t PAData; +#endif +#if STM32_HAS_GPIOB || defined(__DOXYGEN__) + gpio_setup_t PBData; +#endif +#if STM32_HAS_GPIOC || defined(__DOXYGEN__) + gpio_setup_t PCData; +#endif +#if STM32_HAS_GPIOD || defined(__DOXYGEN__) + gpio_setup_t PDData; +#endif +#if STM32_HAS_GPIOE || defined(__DOXYGEN__) + gpio_setup_t PEData; +#endif +#if STM32_HAS_GPIOF || defined(__DOXYGEN__) + gpio_setup_t PFData; +#endif +#if STM32_HAS_GPIOG || defined(__DOXYGEN__) + gpio_setup_t PGData; +#endif +#if STM32_HAS_GPIOH || defined(__DOXYGEN__) + gpio_setup_t PHData; +#endif +#if STM32_HAS_GPIOI || defined(__DOXYGEN__) + gpio_setup_t PIData; +#endif +#if STM32_HAS_GPIOJ || defined(__DOXYGEN__) + gpio_setup_t PJData; +#endif +#if STM32_HAS_GPIOK || defined(__DOXYGEN__) + gpio_setup_t PKData; +#endif +} gpio_config_t; -#if HAL_USE_PAL || defined(__DOXYGEN__) /** - * @brief PAL setup. - * @details Digital I/O ports static configuration as defined in @p board.h. - * This variable is used by the HAL when initializing the PAL driver. + * @brief STM32 GPIO static initialization data. */ -const PALConfig pal_default_config = { -# if STM32_HAS_GPIOA +static const gpio_config_t gpio_default_config = { +#if STM32_HAS_GPIOA {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR, VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH}, -# endif -# if STM32_HAS_GPIOB +#endif +#if STM32_HAS_GPIOB {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR, VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH}, -# endif -# if STM32_HAS_GPIOC +#endif +#if STM32_HAS_GPIOC {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR, VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH}, -# endif -# if STM32_HAS_GPIOD +#endif +#if STM32_HAS_GPIOD {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR, VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH}, -# endif -# if STM32_HAS_GPIOE +#endif +#if STM32_HAS_GPIOE {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR, VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH}, -# endif -# if STM32_HAS_GPIOF +#endif +#if STM32_HAS_GPIOF {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR, VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH}, -# endif -# if STM32_HAS_GPIOG +#endif +#if STM32_HAS_GPIOG {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR, VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH}, -# endif -# if STM32_HAS_GPIOH +#endif +#if STM32_HAS_GPIOH {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR, VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH}, -# endif -# if STM32_HAS_GPIOI - {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR, VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH} -# endif +#endif +#if STM32_HAS_GPIOI + {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR, VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH}, +#endif +#if STM32_HAS_GPIOJ + {VAL_GPIOJ_MODER, VAL_GPIOJ_OTYPER, VAL_GPIOJ_OSPEEDR, VAL_GPIOJ_PUPDR, VAL_GPIOJ_ODR, VAL_GPIOJ_AFRL, VAL_GPIOJ_AFRH}, +#endif +#if STM32_HAS_GPIOK + {VAL_GPIOK_MODER, VAL_GPIOK_OTYPER, VAL_GPIOK_OSPEEDR, VAL_GPIOK_PUPDR, VAL_GPIOK_ODR, VAL_GPIOK_AFRL, VAL_GPIOK_AFRH} +#endif }; + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +static void gpio_init(stm32_gpio_t *gpiop, const gpio_setup_t *config) { + gpiop->OTYPER = config->otyper; + gpiop->OSPEEDR = config->ospeedr; + gpiop->PUPDR = config->pupdr; + gpiop->ODR = config->odr; + gpiop->AFRL = config->afrl; + gpiop->AFRH = config->afrh; + gpiop->MODER = config->moder; +} + +static void stm32_gpio_init(void) { + /* Enabling GPIO-related clocks, the mask comes from the + registry header file.*/ + rccResetAHB(STM32_GPIO_EN_MASK); + rccEnableAHB(STM32_GPIO_EN_MASK, true); + + /* Initializing all the defined GPIO ports.*/ +#if STM32_HAS_GPIOA + gpio_init(GPIOA, &gpio_default_config.PAData); #endif +#if STM32_HAS_GPIOB + gpio_init(GPIOB, &gpio_default_config.PBData); +#endif +#if STM32_HAS_GPIOC + gpio_init(GPIOC, &gpio_default_config.PCData); +#endif +#if STM32_HAS_GPIOD + gpio_init(GPIOD, &gpio_default_config.PDData); +#endif +#if STM32_HAS_GPIOE + gpio_init(GPIOE, &gpio_default_config.PEData); +#endif +#if STM32_HAS_GPIOF + gpio_init(GPIOF, &gpio_default_config.PFData); +#endif +#if STM32_HAS_GPIOG + gpio_init(GPIOG, &gpio_default_config.PGData); +#endif +#if STM32_HAS_GPIOH + gpio_init(GPIOH, &gpio_default_config.PHData); +#endif +#if STM32_HAS_GPIOI + gpio_init(GPIOI, &gpio_default_config.PIData); +#endif +#if STM32_HAS_GPIOJ + gpio_init(GPIOJ, &gpio_default_config.PJData); +#endif +#if STM32_HAS_GPIOK + gpio_init(GPIOK, &gpio_default_config.PKData); +#endif +} void enter_bootloader_mode_if_requested(void); @@ -62,6 +190,8 @@ void enter_bootloader_mode_if_requested(void); */ void __early_init(void) { enter_bootloader_mode_if_requested(); + + stm32_gpio_init(); stm32_clock_init(); } diff --git a/drivers/ugfx/gdisp/is31fl3731c/gdisp_lld_config.h b/drivers/ugfx/gdisp/is31fl3731c/gdisp_lld_config.h index 1b9fadba16..403c6b0409 100644 --- a/drivers/ugfx/gdisp/is31fl3731c/gdisp_lld_config.h +++ b/drivers/ugfx/gdisp/is31fl3731c/gdisp_lld_config.h @@ -24,10 +24,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. /* Driver hardware support. */ /*===========================================================================*/ -# define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing -# define GDISP_HARDWARE_DRAWPIXEL TRUE -# define GDISP_HARDWARE_PIXELREAD TRUE -# define GDISP_HARDWARE_CONTROL TRUE +# define GDISP_HARDWARE_FLUSH GFXON // This controller requires flushing +# define GDISP_HARDWARE_DRAWPIXEL GFXON +# define GDISP_HARDWARE_PIXELREAD GFXON +# define GDISP_HARDWARE_CONTROL GFXON # define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_GRAY256 diff --git a/drivers/ugfx/gdisp/st7565/gdisp_lld_config.h b/drivers/ugfx/gdisp/st7565/gdisp_lld_config.h index 9ab5daac1c..6052058ec2 100644 --- a/drivers/ugfx/gdisp/st7565/gdisp_lld_config.h +++ b/drivers/ugfx/gdisp/st7565/gdisp_lld_config.h @@ -14,11 +14,11 @@ /* Driver hardware support. */ /*===========================================================================*/ -# define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing -# define GDISP_HARDWARE_DRAWPIXEL TRUE -# define GDISP_HARDWARE_PIXELREAD TRUE -# define GDISP_HARDWARE_CONTROL TRUE -# define GDISP_HARDWARE_BITFILLS TRUE +# define GDISP_HARDWARE_FLUSH GFXON // This controller requires flushing +# define GDISP_HARDWARE_DRAWPIXEL GFXON +# define GDISP_HARDWARE_PIXELREAD GFXON +# define GDISP_HARDWARE_CONTROL GFXON +# define GDISP_HARDWARE_BITFILLS GFXON # define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO diff --git a/layouts/community/ortho_1x1/layout.json b/layouts/community/ortho_1x1/layout.json deleted file mode 100644 index 66a1e18560..0000000000 --- a/layouts/community/ortho_1x1/layout.json +++ /dev/null @@ -1 +0,0 @@ -[""] diff --git a/layouts/community/ortho_1x1/test/keymap.c b/layouts/community/ortho_1x1/test/keymap.c deleted file mode 100644 index 6a186669b0..0000000000 --- a/layouts/community/ortho_1x1/test/keymap.c +++ /dev/null @@ -1,12 +0,0 @@ -#include QMK_KEYBOARD_H - -/* This keyboard/layout is used to test community layout discovery/compilation. */ - -#define _DEFAULT 0 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -[_DEFAULT] = LAYOUT ( - KC_B -), -}; diff --git a/lib/chibios b/lib/chibios -Subproject 587968d6cbc2b0e1c7147540872f2a67e59ca18 +Subproject 313416b8fda90d9973a749a0a35970956852c28 diff --git a/lib/chibios-contrib b/lib/chibios-contrib -Subproject ede48346eee4b8d6847c19bc01420bee76a5e48 +Subproject e3a3a24047717af33b098266e11c2e4e5102206 diff --git a/lib/ugfx b/lib/ugfx -Subproject 3e97b74e03c93631cdd3ddb2ce43b963fdce19b +Subproject 40b48f470addad6a4fb1177de1a69a181158739 diff --git a/quantum/audio/audio_arm.c b/quantum/audio/audio_arm.c index a194a66419..6b54d80acf 100644 --- a/quantum/audio/audio_arm.c +++ b/quantum/audio/audio_arm.c @@ -230,17 +230,11 @@ static const dacsample_t dac_buffer_2[DAC_BUFFER_SIZE] = { /* * DAC streaming callback. */ -size_t nx = 0, ny = 0, nz = 0; -static void end_cb1(DACDriver *dacp, dacsample_t *buffer, size_t n) { +size_t nz = 0; +static void end_cb1(DACDriver *dacp) { (void)dacp; nz++; - if (dac_buffer == buffer) { - nx += n; - } else { - ny += n; - } - if ((nz % 1000) == 0) { // palTogglePad(GPIOD, GPIOD_LED3); } diff --git a/quantum/backlight/backlight_avr.c b/quantum/backlight/backlight_avr.c index dfc523e6e8..5b8b094890 100644 --- a/quantum/backlight/backlight_avr.c +++ b/quantum/backlight/backlight_avr.c @@ -22,12 +22,15 @@ # define TOIEx TOIE1 # if BACKLIGHT_PIN == B5 +# define COMxx0 COM1A0 # define COMxx1 COM1A1 # define OCRxx OCR1A # elif BACKLIGHT_PIN == B6 +# define COMxx0 COM1B0 # define COMxx1 COM1B1 # define OCRxx OCR1B # elif BACKLIGHT_PIN == B7 +# define COMxx0 COM1C0 # define COMxx1 COM1C1 # define OCRxx OCR1C # endif @@ -44,6 +47,7 @@ # if (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__)) # error This MCU has no C4 pin! # else +# define COMxx0 COM3C0 # define COMxx1 COM3C1 # define OCRxx OCR3C # endif @@ -51,10 +55,12 @@ # if (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__)) # error This MCU has no C5 pin! # else +# define COMxx0 COM3B0 # define COMxx1 COM3B1 # define OCRxx OCR3B # endif # elif BACKLIGHT_PIN == C6 +# define COMxx0 COM3A0 # define COMxx1 COM3A1 # define OCRxx OCR3A # endif @@ -68,12 +74,15 @@ # define TOIEx TOIE1 # if BACKLIGHT_PIN == B7 +# define COMxx0 COM1C0 # define COMxx1 COM1C1 # define OCRxx OCR1C # elif BACKLIGHT_PIN == C5 +# define COMxx0 COM1B0 # define COMxx1 COM1B1 # define OCRxx OCR1B # elif BACKLIGHT_PIN == C6 +# define COMxx0 COM1A0 # define COMxx1 COM1A1 # define OCRxx OCR1A # endif @@ -87,9 +96,11 @@ # define TOIEx TOIE1 # if BACKLIGHT_PIN == D4 +# define COMxx0 COM1B0 # define COMxx1 COM1B1 # define OCRxx OCR1B # elif BACKLIGHT_PIN == D5 +# define COMxx0 COM1A0 # define COMxx1 COM1A1 # define OCRxx OCR1A # endif @@ -103,9 +114,11 @@ # define TOIEx TOIE1 # if BACKLIGHT_PIN == B1 +# define COMxx0 COM1A0 # define COMxx1 COM1A1 # define OCRxx OCR1A # elif BACKLIGHT_PIN == B2 +# define COMxx0 COM1B0 # define COMxx1 COM1B1 # define OCRxx OCR1B # endif @@ -156,22 +169,22 @@ # endif # ifndef BACKLIGHT_ON_STATE -# define BACKLIGHT_ON_STATE 0 +# define BACKLIGHT_ON_STATE 1 # endif void backlight_on(pin_t backlight_pin) { -# if BACKLIGHT_ON_STATE == 0 - writePinLow(backlight_pin); -# else +# if BACKLIGHT_ON_STATE == 1 writePinHigh(backlight_pin); +# else + writePinLow(backlight_pin); # endif } void backlight_off(pin_t backlight_pin) { -# if BACKLIGHT_ON_STATE == 0 - writePinHigh(backlight_pin); -# else +# if BACKLIGHT_ON_STATE == 1 writePinLow(backlight_pin); +# else + writePinHigh(backlight_pin); # endif } @@ -199,6 +212,22 @@ static const pin_t backlight_pins[BACKLIGHT_LED_COUNT] = BACKLIGHT_PIN_INIT; # else // full hardware PWM +static inline void enable_pwm(void) { +# if BACKLIGHT_ON_STATE == 1 + TCCRxA |= _BV(COMxx1); +# else + TCCRxA |= _BV(COMxx1) | _BV(COMxx0); +# endif +} + +static inline void disable_pwm(void) { +# if BACKLIGHT_ON_STATE == 1 + TCCRxA &= ~(_BV(COMxx1)); +# else + TCCRxA &= ~(_BV(COMxx1) | _BV(COMxx0)); +# endif +} + // we support only one backlight pin static const pin_t backlight_pin = BACKLIGHT_PIN; # define FOR_EACH_LED(x) x @@ -309,12 +338,12 @@ void backlight_set(uint8_t level) { if (OCRxx) { TIMSKx &= ~(_BV(OCIExA)); TIMSKx &= ~(_BV(TOIEx)); - FOR_EACH_LED(backlight_off(backlight_pin);) } # else // Turn off PWM control on backlight pin - TCCRxA &= ~(_BV(COMxx1)); + disable_pwm(); # endif + FOR_EACH_LED(backlight_off(backlight_pin);) } else { # ifdef BACKLIGHT_PWM_TIMER if (!OCRxx) { @@ -323,7 +352,7 @@ void backlight_set(uint8_t level) { } # else // Turn on PWM control of backlight pin - TCCRxA |= _BV(COMxx1); + enable_pwm(); # endif } // Set the brightness @@ -471,8 +500,13 @@ void backlight_init_ports(void) { "In fast PWM mode, the compare units allow generation of PWM waveforms on the OCnx pins. Setting the COMnx1:0 bits to two will produce a non-inverted PWM [..]." "In fast PWM mode the counter is incremented until the counter value matches either one of the fixed values 0x00FF, 0x01FF, or 0x03FF (WGMn3:0 = 5, 6, or 7), the value in ICRn (WGMn3:0 = 14), or the value in OCRnA (WGMn3:0 = 15)." */ - TCCRxA = _BV(COMxx1) | _BV(WGM11); // = 0b00001010; - TCCRxB = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001; +# if BACKLIGHT_ON_STATE == 1 + TCCRxA = _BV(COMxx1) | _BV(WGM11); +# else + TCCRxA = _BV(COMxx1) | _BV(COMxx0) | _BV(WGM11); +# endif + + TCCRxB = _BV(WGM13) | _BV(WGM12) | _BV(CS10); # endif // Use full 16-bit resolution. Counter counts to ICR1 before reset to 0. ICRx = TIMER_TOP; diff --git a/quantum/encoder.c b/quantum/encoder.c index 8e11562eb7..81ec1bb376 100644 --- a/quantum/encoder.c +++ b/quantum/encoder.c @@ -35,6 +35,13 @@ static pin_t encoders_pad_a[] = ENCODERS_PAD_A; static pin_t encoders_pad_b[] = ENCODERS_PAD_B; +#ifndef ENCODER_DIRECTION_FLIP +# define ENCODER_CLOCKWISE true +# define ENCODER_COUNTER_CLOCKWISE false +#else +# define ENCODER_CLOCKWISE false +# define ENCODER_COUNTER_CLOCKWISE true +#endif static int8_t encoder_LUT[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0}; static uint8_t encoder_state[NUMBER_OF_ENCODERS] = {0}; @@ -86,11 +93,11 @@ static void encoder_update(int8_t index, uint8_t state) { encoder_pulses[i] += encoder_LUT[state & 0xF]; if (encoder_pulses[i] >= ENCODER_RESOLUTION) { encoder_value[index]++; - encoder_update_kb(index, true); + encoder_update_kb(index, ENCODER_COUNTER_CLOCKWISE); } if (encoder_pulses[i] <= -ENCODER_RESOLUTION) { // direction is arbitrary here, but this clockwise encoder_value[index]--; - encoder_update_kb(index, false); + encoder_update_kb(index, ENCODER_CLOCKWISE); } encoder_pulses[i] %= ENCODER_RESOLUTION; } @@ -113,12 +120,12 @@ void encoder_update_raw(uint8_t* slave_state) { while (delta > 0) { delta--; encoder_value[index]++; - encoder_update_kb(index, true); + encoder_update_kb(index, ENCODER_COUNTER_CLOCKWISE); } while (delta < 0) { delta++; encoder_value[index]--; - encoder_update_kb(index, false); + encoder_update_kb(index, ENCODER_CLOCKWISE); } } } diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index c82c446399..f34ba26e5a 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -139,26 +139,6 @@ action_t action_for_key(uint8_t layer, keypos_t key) { mod = mod_config((keycode >> 0x8) & 0x1F); action.code = ACTION_MODS_TAP_KEY(mod, keycode & 0xFF); break; -#ifdef BACKLIGHT_ENABLE - case BL_ON: - action.code = ACTION_BACKLIGHT_ON(); - break; - case BL_OFF: - action.code = ACTION_BACKLIGHT_OFF(); - break; - case BL_DEC: - action.code = ACTION_BACKLIGHT_DECREASE(); - break; - case BL_INC: - action.code = ACTION_BACKLIGHT_INCREASE(); - break; - case BL_TOGG: - action.code = ACTION_BACKLIGHT_TOGGLE(); - break; - case BL_STEP: - action.code = ACTION_BACKLIGHT_STEP(); - break; -#endif #ifdef SWAP_HANDS_ENABLE case QK_SWAP_HANDS ... QK_SWAP_HANDS_MAX: action.code = ACTION(ACT_SWAP_HANDS, keycode & 0xff); diff --git a/quantum/process_keycode/process_backlight.c b/quantum/process_keycode/process_backlight.c new file mode 100644 index 0000000000..4d12f6813a --- /dev/null +++ b/quantum/process_keycode/process_backlight.c @@ -0,0 +1,51 @@ +/* Copyright 2019 + * + * 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 distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "process_backlight.h" + +#include "backlight.h" + +bool process_backlight(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + switch (keycode) { + case BL_ON: + backlight_level(BACKLIGHT_LEVELS); + return false; + case BL_OFF: + backlight_level(0); + return false; + case BL_DEC: + backlight_decrease(); + return false; + case BL_INC: + backlight_increase(); + return false; + case BL_TOGG: + backlight_toggle(); + return false; + case BL_STEP: + backlight_step(); + return false; +#ifdef BACKLIGHT_BREATHING + case BL_BRTG: + backlight_toggle_breathing(); + return false; +#endif + } + } + + return true; +} diff --git a/quantum/process_keycode/process_backlight.h b/quantum/process_keycode/process_backlight.h new file mode 100644 index 0000000000..7fe887ae67 --- /dev/null +++ b/quantum/process_keycode/process_backlight.h @@ -0,0 +1,21 @@ +/* Copyright 2019 + * + * 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 distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#include "quantum.h" + +bool process_backlight(uint16_t keycode, keyrecord_t *record); diff --git a/quantum/quantum.c b/quantum/quantum.c index bc56fe6ed6..846955ab00 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -224,6 +224,9 @@ bool process_record_quantum(keyrecord_t *record) { #ifdef AUDIO_ENABLE process_audio(keycode, record) && #endif +#ifdef BACKLIGHT_ENABLE + process_backlight(keycode, record) && +#endif #ifdef STENO_ENABLE process_steno(keycode, record) && #endif diff --git a/quantum/quantum.h b/quantum/quantum.h index 3af93cf5b2..69c8d2151f 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -88,6 +88,10 @@ extern layer_state_t layer_state; # include "process_music.h" #endif +#ifdef BACKLIGHT_ENABLE +# include "process_backlight.h" +#endif + #ifdef LEADER_ENABLE # include "process_leader.h" #endif diff --git a/quantum/serial_link/system/serial_link.c b/quantum/serial_link/system/serial_link.c index feac64e297..c59c068944 100644 --- a/quantum/serial_link/system/serial_link.c +++ b/quantum/serial_link/system/serial_link.c @@ -119,7 +119,7 @@ static THD_FUNCTION(serialThread, arg) { eventflags_t flags1 = 0; eventflags_t flags2 = 0; if (need_wait) { - eventmask_t mask = chEvtWaitAnyTimeout(ALL_EVENTS, MS2ST(1000)); + eventmask_t mask = chEvtWaitAnyTimeout(ALL_EVENTS, TIME_MS2I(1000)); if (mask & EVENT_MASK(1)) { flags1 = chEvtGetAndClearFlags(&sd1_listener); print_error("DOWNLINK", flags1, &SD1); @@ -192,7 +192,7 @@ void serial_link_update(void) { systime_t current_time = chVTGetSystemTimeX(); systime_t delta = current_time - last_update; - if (changed || delta > US2ST(5000)) { + if (changed || delta > TIME_US2I(5000)) { last_update = current_time; last_matrix = matrix; matrix_object_t* m = begin_write_keyboard_matrix(); diff --git a/quantum/stm32/chconf.h b/quantum/stm32/chconf.h index 8fcb55d408..c0ed6c5515 100644 --- a/quantum/stm32/chconf.h +++ b/quantum/stm32/chconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ */ /** - * @file templates/chconf.h + * @file rt/templates/chconf.h * @brief Configuration file template. * @details A copy of this file must be placed in each project directory, it * contains the application specific kernel settings. @@ -29,6 +29,7 @@ # define CHCONF_H # define _CHIBIOS_RT_CONF_ +# define _CHIBIOS_RT_CONF_VER_6_0_ /*===========================================================================*/ /** @@ -41,14 +42,34 @@ * @brief System time counter resolution. * @note Allowed values are 16 or 32 bits. */ -# define CH_CFG_ST_RESOLUTION 32 +# if !defined(CH_CFG_ST_RESOLUTION) +# define CH_CFG_ST_RESOLUTION 32 +# endif /** * @brief System tick frequency. * @details Frequency of the system timer that drives the system ticks. This * setting also defines the system tick time unit. */ -# define CH_CFG_ST_FREQUENCY 100000 +# if !defined(CH_CFG_ST_FREQUENCY) +# define CH_CFG_ST_FREQUENCY 100000 +# endif + +/** + * @brief Time intervals data size. + * @note Allowed values are 16, 32 or 64 bits. + */ +# if !defined(CH_CFG_INTERVALS_SIZE) +# define CH_CFG_INTERVALS_SIZE 32 +# endif + +/** + * @brief Time types data size. + * @note Allowed values are 16 or 32 bits. + */ +# if !defined(CH_CFG_TIME_TYPES_SIZE) +# define CH_CFG_TIME_TYPES_SIZE 32 +# endif /** * @brief Time delta constant for the tick-less mode. @@ -58,7 +79,10 @@ * The value one is not valid, timeouts are rounded up to * this value. */ -# define CH_CFG_ST_TIMEDELTA 0 + +# if !defined(CH_CFG_ST_TIMEDELTA) +# define CH_CFG_ST_TIMEDELTA 2 +# endif /** @} */ @@ -81,7 +105,9 @@ * @note The round robin preemption is not supported in tickless mode and * must be set to zero in that case. */ -# define CH_CFG_TIME_QUANTUM 0 +# if !defined(CH_CFG_TIME_QUANTUM) +# define CH_CFG_TIME_QUANTUM 0 +# endif /** * @brief Managed RAM size. @@ -94,7 +120,9 @@ * provide the @p __heap_base__ and @p __heap_end__ symbols. * @note Requires @p CH_CFG_USE_MEMCORE. */ -# define CH_CFG_MEMCORE_SIZE 0 +# if !defined(CH_CFG_MEMCORE_SIZE) +# define CH_CFG_MEMCORE_SIZE 0 +# endif /** * @brief Idle thread automatic spawn suppression. @@ -103,7 +131,9 @@ * function becomes the idle thread and must implement an * infinite loop. */ -# define CH_CFG_NO_IDLE_THREAD FALSE +# if !defined(CH_CFG_NO_IDLE_THREAD) +# define CH_CFG_NO_IDLE_THREAD FALSE +# endif /** @} */ @@ -122,7 +152,9 @@ * @note This is not related to the compiler optimization options. * @note The default is @p TRUE. */ -# define CH_CFG_OPTIMIZE_SPEED TRUE +# if !defined(CH_CFG_OPTIMIZE_SPEED) +# define CH_CFG_OPTIMIZE_SPEED TRUE +# endif /** @} */ @@ -140,7 +172,9 @@ * * @note The default is @p TRUE. */ -# define CH_CFG_USE_TM TRUE +# if !defined(CH_CFG_USE_TM) +# define CH_CFG_USE_TM TRUE +# endif /** * @brief Threads registry APIs. @@ -148,7 +182,9 @@ * * @note The default is @p TRUE. */ -# define CH_CFG_USE_REGISTRY TRUE +# if !defined(CH_CFG_USE_REGISTRY) +# define CH_CFG_USE_REGISTRY TRUE +# endif /** * @brief Threads synchronization APIs. @@ -157,7 +193,9 @@ * * @note The default is @p TRUE. */ -# define CH_CFG_USE_WAITEXIT TRUE +# if !defined(CH_CFG_USE_WAITEXIT) +# define CH_CFG_USE_WAITEXIT TRUE +# endif /** * @brief Semaphores APIs. @@ -165,7 +203,9 @@ * * @note The default is @p TRUE. */ -# define CH_CFG_USE_SEMAPHORES TRUE +# if !defined(CH_CFG_USE_SEMAPHORES) +# define CH_CFG_USE_SEMAPHORES TRUE +# endif /** * @brief Semaphores queuing mode. @@ -176,7 +216,9 @@ * requirements. * @note Requires @p CH_CFG_USE_SEMAPHORES. */ -# define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE +# if !defined(CH_CFG_USE_SEMAPHORES_PRIORITY) +# define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE +# endif /** * @brief Mutexes APIs. @@ -184,7 +226,9 @@ * * @note The default is @p TRUE. */ -# define CH_CFG_USE_MUTEXES TRUE +# if !defined(CH_CFG_USE_MUTEXES) +# define CH_CFG_USE_MUTEXES TRUE +# endif /** * @brief Enables recursive behavior on mutexes. @@ -194,7 +238,9 @@ * @note The default is @p FALSE. * @note Requires @p CH_CFG_USE_MUTEXES. */ -# define CH_CFG_USE_MUTEXES_RECURSIVE FALSE +# if !defined(CH_CFG_USE_MUTEXES_RECURSIVE) +# define CH_CFG_USE_MUTEXES_RECURSIVE FALSE +# endif /** * @brief Conditional Variables APIs. @@ -204,7 +250,9 @@ * @note The default is @p TRUE. * @note Requires @p CH_CFG_USE_MUTEXES. */ -# define CH_CFG_USE_CONDVARS TRUE +# if !defined(CH_CFG_USE_CONDVARS) +# define CH_CFG_USE_CONDVARS TRUE +# endif /** * @brief Conditional Variables APIs with timeout. @@ -214,7 +262,9 @@ * @note The default is @p TRUE. * @note Requires @p CH_CFG_USE_CONDVARS. */ -# define CH_CFG_USE_CONDVARS_TIMEOUT TRUE +# if !defined(CH_CFG_USE_CONDVARS_TIMEOUT) +# define CH_CFG_USE_CONDVARS_TIMEOUT TRUE +# endif /** * @brief Events Flags APIs. @@ -222,7 +272,9 @@ * * @note The default is @p TRUE. */ -# define CH_CFG_USE_EVENTS TRUE +# if !defined(CH_CFG_USE_EVENTS) +# define CH_CFG_USE_EVENTS TRUE +# endif /** * @brief Events Flags APIs with timeout. @@ -232,7 +284,9 @@ * @note The default is @p TRUE. * @note Requires @p CH_CFG_USE_EVENTS. */ -# define CH_CFG_USE_EVENTS_TIMEOUT TRUE +# if !defined(CH_CFG_USE_EVENTS_TIMEOUT) +# define CH_CFG_USE_EVENTS_TIMEOUT TRUE +# endif /** * @brief Synchronous Messages APIs. @@ -241,7 +295,9 @@ * * @note The default is @p TRUE. */ -# define CH_CFG_USE_MESSAGES TRUE +# if !defined(CH_CFG_USE_MESSAGES) +# define CH_CFG_USE_MESSAGES TRUE +# endif /** * @brief Synchronous Messages queuing mode. @@ -252,7 +308,9 @@ * requirements. * @note Requires @p CH_CFG_USE_MESSAGES. */ -# define CH_CFG_USE_MESSAGES_PRIORITY TRUE +# if !defined(CH_CFG_USE_MESSAGES_PRIORITY) +# define CH_CFG_USE_MESSAGES_PRIORITY TRUE +# endif /** * @brief Mailboxes APIs. @@ -262,7 +320,9 @@ * @note The default is @p TRUE. * @note Requires @p CH_CFG_USE_SEMAPHORES. */ -# define CH_CFG_USE_MAILBOXES TRUE +# if !defined(CH_CFG_USE_MAILBOXES) +# define CH_CFG_USE_MAILBOXES TRUE +# endif /** * @brief Core Memory Manager APIs. @@ -271,7 +331,9 @@ * * @note The default is @p TRUE. */ -# define CH_CFG_USE_MEMCORE TRUE +# if !defined(CH_CFG_USE_MEMCORE) +# define CH_CFG_USE_MEMCORE TRUE +# endif /** * @brief Heap Allocator APIs. @@ -283,7 +345,9 @@ * @p CH_CFG_USE_SEMAPHORES. * @note Mutexes are recommended. */ -# define CH_CFG_USE_HEAP TRUE +# if !defined(CH_CFG_USE_HEAP) +# define CH_CFG_USE_HEAP TRUE +# endif /** * @brief Memory Pools Allocator APIs. @@ -292,7 +356,31 @@ * * @note The default is @p TRUE. */ -# define CH_CFG_USE_MEMPOOLS TRUE +# if !defined(CH_CFG_USE_MEMPOOLS) +# define CH_CFG_USE_MEMPOOLS TRUE +# endif + +/** + * @brief Objects FIFOs APIs. + * @details If enabled then the objects FIFOs APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +# if !defined(CH_CFG_USE_OBJ_FIFOS) +# define CH_CFG_USE_OBJ_FIFOS TRUE +# endif + +/** + * @brief Pipes APIs. + * @details If enabled then the pipes APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +# if !defined(CH_CFG_USE_PIPES) +# define CH_CFG_USE_PIPES TRUE +# endif /** * @brief Dynamic Threads APIs. @@ -303,7 +391,80 @@ * @note Requires @p CH_CFG_USE_WAITEXIT. * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS. */ -# define CH_CFG_USE_DYNAMIC TRUE +# if !defined(CH_CFG_USE_DYNAMIC) +# define CH_CFG_USE_DYNAMIC TRUE +# endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Objects factory options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Objects Factory APIs. + * @details If enabled then the objects factory APIs are included in the + * kernel. + * + * @note The default is @p FALSE. + */ +# if !defined(CH_CFG_USE_FACTORY) +# define CH_CFG_USE_FACTORY TRUE +# endif + +/** + * @brief Maximum length for object names. + * @details If the specified length is zero then the name is stored by + * pointer but this could have unintended side effects. + */ +# if !defined(CH_CFG_FACTORY_MAX_NAMES_LENGTH) +# define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8 +# endif + +/** + * @brief Enables the registry of generic objects. + */ +# if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY) +# define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE +# endif + +/** + * @brief Enables factory for generic buffers. + */ +# if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS) +# define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE +# endif + +/** + * @brief Enables factory for semaphores. + */ +# if !defined(CH_CFG_FACTORY_SEMAPHORES) +# define CH_CFG_FACTORY_SEMAPHORES TRUE +# endif + +/** + * @brief Enables factory for mailboxes. + */ +# if !defined(CH_CFG_FACTORY_MAILBOXES) +# define CH_CFG_FACTORY_MAILBOXES TRUE +# endif + +/** + * @brief Enables factory for objects FIFOs. + */ +# if !defined(CH_CFG_FACTORY_OBJ_FIFOS) +# define CH_CFG_FACTORY_OBJ_FIFOS TRUE +# endif + +/** + * @brief Enables factory for Pipes. + */ +# if !defined(CH_CFG_FACTORY_PIPES) || defined(__DOXYGEN__) +# define CH_CFG_FACTORY_PIPES TRUE +# endif /** @} */ @@ -319,7 +480,9 @@ * * @note The default is @p FALSE. */ -# define CH_DBG_STATISTICS FALSE +# if !defined(CH_DBG_STATISTICS) +# define CH_DBG_STATISTICS FALSE +# endif /** * @brief Debug option, system state check. @@ -328,7 +491,9 @@ * * @note The default is @p FALSE. */ -# define CH_DBG_SYSTEM_STATE_CHECK FALSE +# if !defined(CH_DBG_SYSTEM_STATE_CHECK) +# define CH_DBG_SYSTEM_STATE_CHECK FALSE +# endif /** * @brief Debug option, parameters checks. @@ -337,7 +502,9 @@ * * @note The default is @p FALSE. */ -# define CH_DBG_ENABLE_CHECKS FALSE +# if !defined(CH_DBG_ENABLE_CHECKS) +# define CH_DBG_ENABLE_CHECKS FALSE +# endif /** * @brief Debug option, consistency checks. @@ -347,7 +514,9 @@ * * @note The default is @p FALSE. */ -# define CH_DBG_ENABLE_ASSERTS FALSE +# if !defined(CH_DBG_ENABLE_ASSERTS) +# define CH_DBG_ENABLE_ASSERTS FALSE +# endif /** * @brief Debug option, trace buffer. @@ -355,14 +524,18 @@ * * @note The default is @p CH_DBG_TRACE_MASK_DISABLED. */ -# define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED +# if !defined(CH_DBG_TRACE_MASK) +# define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED +# endif /** * @brief Trace buffer entries. * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is * different from @p CH_DBG_TRACE_MASK_DISABLED. */ -# define CH_DBG_TRACE_BUFFER_SIZE 128 +# if !defined(CH_DBG_TRACE_BUFFER_SIZE) +# define CH_DBG_TRACE_BUFFER_SIZE 128 +# endif /** * @brief Debug option, stack checks. @@ -374,7 +547,9 @@ * @note The default failure mode is to halt the system with the global * @p panic_msg variable set to @p NULL. */ -# define CH_DBG_ENABLE_STACK_CHECK TRUE +# if !defined(CH_DBG_ENABLE_STACK_CHECK) +# define CH_DBG_ENABLE_STACK_CHECK TRUE +# endif /** * @brief Debug option, stacks initialization. @@ -384,7 +559,9 @@ * * @note The default is @p FALSE. */ -# define CH_DBG_FILL_THREADS FALSE +# if !defined(CH_DBG_FILL_THREADS) +# define CH_DBG_FILL_THREADS FALSE +# endif /** * @brief Debug option, threads profiling. @@ -395,7 +572,9 @@ * @note This debug option is not currently compatible with the * tickless mode. */ -# define CH_DBG_THREADS_PROFILING FALSE +# if !defined(CH_DBG_THREADS_PROFILING) +# define CH_DBG_THREADS_PROFILING FALSE +# endif /** @} */ @@ -407,6 +586,21 @@ /*===========================================================================*/ /** + * @brief System structure extension. + * @details User fields added to the end of the @p ch_system_t structure. + */ +# define CH_CFG_SYSTEM_EXTRA_FIELDS /* Add threads custom fields here.*/ + +/** + * @brief System initialization hook. + * @details User initialization code added to the @p chSysInit() function + * just before interrupts are enabled globally. + */ +# define CH_CFG_SYSTEM_INIT_HOOK() \ + { /* Add threads initialization code here.*/ \ + } + +/** * @brief Threads descriptor structure extension. * @details User fields added to the end of the @p thread_t structure. */ @@ -414,9 +608,9 @@ /** * @brief Threads initialization hook. - * @details User initialization code added to the @p chThdInit() API. + * @details User initialization code added to the @p _thread_init() function. * - * @note It is invoked from within @p chThdInit() and implicitly from all + * @note It is invoked from within @p _thread_init() and implicitly from all * the threads creation APIs. */ # define CH_CFG_THREAD_INIT_HOOK(tp) \ diff --git a/quantum/stm32/halconf.h b/quantum/stm32/halconf.h index 72e011d3dc..106f0f5755 100644 --- a/quantum/stm32/halconf.h +++ b/quantum/stm32/halconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -28,6 +28,9 @@ #ifndef HALCONF_H # define HALCONF_H +# define _CHIBIOS_HAL_CONF_ +# define _CHIBIOS_HAL_CONF_VER_7_0_ + # include "mcuconf.h" /** @@ -52,17 +55,17 @@ # endif /** - * @brief Enables the DAC subsystem. + * @brief Enables the cryptographic subsystem. */ -# if !defined(HAL_USE_DAC) || defined(__DOXYGEN__) -# define HAL_USE_DAC TRUE +# if !defined(HAL_USE_CRY) || defined(__DOXYGEN__) +# define HAL_USE_CRY FALSE # endif /** - * @brief Enables the EXT subsystem. + * @brief Enables the DAC subsystem. */ -# if !defined(HAL_USE_EXT) || defined(__DOXYGEN__) -# define HAL_USE_EXT FALSE +# if !defined(HAL_USE_DAC) || defined(__DOXYGEN__) +# define HAL_USE_DAC TRUE # endif /** @@ -115,13 +118,6 @@ # endif /** - * @brief Enables the QSPI subsystem. - */ -# if !defined(HAL_USE_QSPI) || defined(__DOXYGEN__) -# define HAL_USE_QSPI FALSE -# endif - -/** * @brief Enables the RTC subsystem. */ # if !defined(HAL_USE_RTC) || defined(__DOXYGEN__) @@ -150,6 +146,13 @@ # endif /** + * @brief Enables the SIO subsystem. + */ +# if !defined(HAL_USE_SIO) || defined(__DOXYGEN__) +# define HAL_USE_SIO FALSE +# endif + +/** * @brief Enables the SPI subsystem. */ # if !defined(HAL_USE_SPI) || defined(__DOXYGEN__) @@ -157,6 +160,13 @@ # endif /** + * @brief Enables the TRNG subsystem. + */ +# if !defined(HAL_USE_TRNG) || defined(__DOXYGEN__) +# define HAL_USE_TRNG FALSE +# endif + +/** * @brief Enables the UART subsystem. */ # if !defined(HAL_USE_UART) || defined(__DOXYGEN__) @@ -177,6 +187,33 @@ # define HAL_USE_WDG FALSE # endif +/** + * @brief Enables the WSPI subsystem. + */ +# if !defined(HAL_USE_WSPI) || defined(__DOXYGEN__) +# define HAL_USE_WSPI FALSE +# endif + +/*===========================================================================*/ +/* PAL driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +# if !defined(PAL_USE_CALLBACKS) || defined(__DOXYGEN__) +# define PAL_USE_CALLBACKS FALSE +# endif + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +# if !defined(PAL_USE_WAIT) || defined(__DOXYGEN__) +# define PAL_USE_WAIT FALSE +# endif + /*===========================================================================*/ /* ADC driver related settings. */ /*===========================================================================*/ @@ -208,6 +245,55 @@ # define CAN_USE_SLEEP_MODE TRUE # endif +/** + * @brief Enforces the driver to use direct callbacks rather than OSAL events. + */ +# if !defined(CAN_ENFORCE_USE_CALLBACKS) || defined(__DOXYGEN__) +# define CAN_ENFORCE_USE_CALLBACKS FALSE +# endif + +/*===========================================================================*/ +/* CRY driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables the SW fall-back of the cryptographic driver. + * @details When enabled, this option, activates a fall-back software + * implementation for algorithms not supported by the underlying + * hardware. + * @note Fall-back implementations may not be present for all algorithms. + */ +# if !defined(HAL_CRY_USE_FALLBACK) || defined(__DOXYGEN__) +# define HAL_CRY_USE_FALLBACK FALSE +# endif + +/** + * @brief Makes the driver forcibly use the fall-back implementations. + */ +# if !defined(HAL_CRY_ENFORCE_FALLBACK) || defined(__DOXYGEN__) +# define HAL_CRY_ENFORCE_FALLBACK FALSE +# endif + +/*===========================================================================*/ +/* DAC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +# if !defined(DAC_USE_WAIT) || defined(__DOXYGEN__) +# define DAC_USE_WAIT TRUE +# endif + +/** + * @brief Enables the @p dacAcquireBus() and @p dacReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +# if !defined(DAC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +# define DAC_USE_MUTUAL_EXCLUSION TRUE +# endif + /*===========================================================================*/ /* I2C driver related settings. */ /*===========================================================================*/ @@ -224,7 +310,7 @@ /*===========================================================================*/ /** - * @brief Enables an event sources for incoming packets. + * @brief Enables the zero-copy API. */ # if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__) # define MAC_USE_ZERO_COPY FALSE @@ -284,6 +370,20 @@ # define SDC_NICE_WAITING TRUE # endif +/** + * @brief OCR initialization constant for V20 cards. + */ +# if !defined(SDC_INIT_OCR_V20) || defined(__DOXYGEN__) +# define SDC_INIT_OCR_V20 0x50FF8000U +# endif + +/** + * @brief OCR initialization constant for non-V20 cards. + */ +# if !defined(SDC_INIT_OCR) || defined(__DOXYGEN__) +# define SDC_INIT_OCR 0x80100000U +# endif + /*===========================================================================*/ /* SERIAL driver related settings. */ /*===========================================================================*/ @@ -344,6 +444,14 @@ # endif /** + * @brief Enables circular transfers APIs. + * @note Disabling this option saves both code and data space. + */ +# if !defined(SPI_USE_CIRCULAR) || defined(__DOXYGEN__) +# define SPI_USE_CIRCULAR FALSE +# endif + +/** * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs. * @note Disabling this option saves both code and data space. */ @@ -351,6 +459,14 @@ # define SPI_USE_MUTUAL_EXCLUSION TRUE # endif +/** + * @brief Handling method for SPI CS line. + * @note Disabling this option saves both code and data space. + */ +# if !defined(SPI_SELECT_MODE) || defined(__DOXYGEN__) +# define SPI_SELECT_MODE SPI_SELECT_MODE_PAD +# endif + /*===========================================================================*/ /* UART driver related settings. */ /*===========================================================================*/ @@ -383,6 +499,26 @@ # define USB_USE_WAIT TRUE # endif +/*===========================================================================*/ +/* WSPI driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +# if !defined(WSPI_USE_WAIT) || defined(__DOXYGEN__) +# define WSPI_USE_WAIT TRUE +# endif + +/** + * @brief Enables the @p wspiAcquireBus() and @p wspiReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +# if !defined(WSPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +# define WSPI_USE_MUTUAL_EXCLUSION TRUE +# endif + #endif /* HALCONF_H */ /** @} */ diff --git a/quantum/stm32/mcuconf.h b/quantum/stm32/mcuconf.h index 23c9610b57..ca4ad7b515 100644 --- a/quantum/stm32/mcuconf.h +++ b/quantum/stm32/mcuconf.h @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -32,6 +32,7 @@ */ #define STM32F3xx_MCUCONF +#define STM32F303_MCUCONF /* * HAL driver system settings. @@ -66,9 +67,28 @@ #define STM32_USB_CLOCK_REQUIRED TRUE #define STM32_USBPRE STM32_USBPRE_DIV1P5 -#undef STM32_HSE_BYPASS -// #error "oh no" -// #endif +/* + * IRQ system settings. + */ +#define STM32_IRQ_EXTI0_PRIORITY 6 +#define STM32_IRQ_EXTI1_PRIORITY 6 +#define STM32_IRQ_EXTI2_PRIORITY 6 +#define STM32_IRQ_EXTI3_PRIORITY 6 +#define STM32_IRQ_EXTI4_PRIORITY 6 +#define STM32_IRQ_EXTI5_9_PRIORITY 6 +#define STM32_IRQ_EXTI10_15_PRIORITY 6 +#define STM32_IRQ_EXTI16_PRIORITY 6 +#define STM32_IRQ_EXTI17_PRIORITY 15 +#define STM32_IRQ_EXTI18_PRIORITY 6 +#define STM32_IRQ_EXTI19_PRIORITY 15 +#define STM32_IRQ_EXTI20_PRIORITY 15 +#define STM32_IRQ_EXTI21_22_29_PRIORITY 6 +#define STM32_IRQ_EXTI30_32_PRIORITY 6 +#define STM32_IRQ_EXTI33_PRIORITY 6 +#define STM32_IRQ_TIM1_BRK_TIM15_PRIORITY 7 +#define STM32_IRQ_TIM1_UP_TIM16_PRIORITY 7 +#define STM32_IRQ_TIM1_TRGCO_TIM17_PRIORITY 7 +#define STM32_IRQ_TIM1_CC_PRIORITY 7 /* * ADC driver system settings. @@ -115,25 +135,6 @@ #define STM32_DAC_DAC1_CH2_DMA_PRIORITY 2 /* - * EXT driver system settings. - */ -#define STM32_EXT_EXTI0_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI1_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI2_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI3_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI4_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI16_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI17_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI18_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI19_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI20_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI21_22_29_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI30_32_IRQ_PRIORITY 6 -#define STM32_EXT_EXTI33_IRQ_PRIORITY 6 - -/* * GPT driver system settings. */ #define STM32_GPT_USE_TIM1 FALSE @@ -143,6 +144,9 @@ #define STM32_GPT_USE_TIM6 TRUE #define STM32_GPT_USE_TIM7 TRUE #define STM32_GPT_USE_TIM8 TRUE +#define STM32_GPT_USE_TIM15 FALSE +#define STM32_GPT_USE_TIM16 FALSE +#define STM32_GPT_USE_TIM17 FALSE #define STM32_GPT_TIM1_IRQ_PRIORITY 7 #define STM32_GPT_TIM2_IRQ_PRIORITY 7 #define STM32_GPT_TIM3_IRQ_PRIORITY 7 @@ -172,6 +176,7 @@ #define STM32_ICU_USE_TIM3 FALSE #define STM32_ICU_USE_TIM4 FALSE #define STM32_ICU_USE_TIM8 FALSE +#define STM32_ICU_USE_TIM15 FALSE #define STM32_ICU_TIM1_IRQ_PRIORITY 7 #define STM32_ICU_TIM2_IRQ_PRIORITY 7 #define STM32_ICU_TIM3_IRQ_PRIORITY 7 @@ -183,10 +188,13 @@ */ #define STM32_PWM_USE_ADVANCED FALSE #define STM32_PWM_USE_TIM1 FALSE -#define STM32_PWM_USE_TIM2 TRUE +#define STM32_PWM_USE_TIM2 FALSE #define STM32_PWM_USE_TIM3 TRUE #define STM32_PWM_USE_TIM4 TRUE #define STM32_PWM_USE_TIM8 FALSE +#define STM32_PWM_USE_TIM15 FALSE +#define STM32_PWM_USE_TIM16 FALSE +#define STM32_PWM_USE_TIM17 FALSE #define STM32_PWM_TIM1_IRQ_PRIORITY 7 #define STM32_PWM_TIM2_IRQ_PRIORITY 7 #define STM32_PWM_TIM3_IRQ_PRIORITY 7 @@ -194,6 +202,14 @@ #define STM32_PWM_TIM8_IRQ_PRIORITY 7 /* + * RTC driver system settings. + */ +#define STM32_RTC_PRESA_VALUE 32 +#define STM32_RTC_PRESS_VALUE 1024 +#define STM32_RTC_CR_INIT 0 +#define STM32_RTC_TAMPCR_INIT 0 + +/* * SERIAL driver system settings. */ #define STM32_SERIAL_USE_USART1 FALSE diff --git a/quantum/visualizer/common_gfxconf.h b/quantum/visualizer/common_gfxconf.h index 865e588693..e5bbddbb02 100644 --- a/quantum/visualizer/common_gfxconf.h +++ b/quantum/visualizer/common_gfxconf.h @@ -23,294 +23,335 @@ #define COMMON_GFXCONF_H /////////////////////////////////////////////////////////////////////////// +// GFX - Compatibility options // +/////////////////////////////////////////////////////////////////////////// +//#define GFX_COMPAT_V2 GFXON +//#define GFX_COMPAT_OLDCOLORS GFXON + +/////////////////////////////////////////////////////////////////////////// // GOS - One of these must be defined, preferably in your Makefile // /////////////////////////////////////////////////////////////////////////// -//#define GFX_USE_OS_CHIBIOS TRUE -//#define GFX_USE_OS_FREERTOS FALSE -// #define GFX_FREERTOS_USE_TRACE FALSE -//#define GFX_USE_OS_WIN32 FALSE -//#define GFX_USE_OS_LINUX FALSE -//#define GFX_USE_OS_OSX FALSE -//#define GFX_USE_OS_ECOS FALSE -//#define GFX_USE_OS_RAWRTOS FALSE -//#define GFX_USE_OS_ARDUINO FALSE -//#define GFX_USE_OS_KEIL FALSE -//#define GFX_USE_OS_CMSIS FALSE -//#define GFX_USE_OS_RAW32 FALSE +//#define GFX_USE_OS_CHIBIOS GFXOFF +//#define GFX_USE_OS_FREERTOS GFXOFF +// #define GFX_FREERTOS_USE_TRACE GFXOFF +//#define GFX_USE_OS_WIN32 GFXOFF +//#define GFX_USE_OS_LINUX GFXOFF +//#define GFX_USE_OS_OSX GFXOFF +//#define GFX_USE_OS_ECOS GFXOFF +//#define GFX_USE_OS_RAWRTOS GFXOFF +//#define GFX_USE_OS_ARDUINO GFXOFF +//#define GFX_USE_OS_KEIL GFXOFF +//#define GFX_USE_OS_RTX5 GFXOFF +//#define GFX_USE_OS_CMSIS GFXOFF +//#define GFX_USE_OS_CMSIS2 GFXOFF +//#define GFX_USE_OS_RAW32 GFXOFF +//#define GFX_USE_OS_ZEPHYR GFXOFF +//#define GFX_USE_OS_NIOS GFXOFF +//#define GFX_USE_OS_QT GFXOFF // #define INTERRUPTS_OFF() optional_code // #define INTERRUPTS_ON() optional_code -// These are not defined by default for some reason -#define GOS_NEED_X_THREADS FALSE -#define GOS_NEED_X_HEAP FALSE // Options that (should where relevant) apply to all operating systems -#define GFX_NO_INLINE FALSE +#define GFX_NO_INLINE GFXON // #define GFX_COMPILER GFX_COMPILER_UNKNOWN +// #define GFX_SHOW_COMPILER GFXOFF // #define GFX_CPU GFX_CPU_UNKNOWN +// #define GFX_CPU_NO_ALIGNMENT_FAULTS GFXOFF +// #define GFX_CPU_ENDIAN GFX_CPU_ENDIAN_UNKNOWN // #define GFX_OS_HEAP_SIZE 0 -// #define GFX_OS_NO_INIT FALSE -// #define GFX_OS_INIT_NO_WARNING FALSE +// #define GFX_OS_NO_INIT GFXOFF +// #define GFX_OS_INIT_NO_WARNING GFXOFF // #define GFX_OS_PRE_INIT_FUNCTION myHardwareInitRoutine // #define GFX_OS_EXTRA_INIT_FUNCTION myOSInitRoutine // #define GFX_OS_EXTRA_DEINIT_FUNCTION myOSDeInitRoutine +// #define GFX_OS_CALL_UGFXMAIN GFXOFF +// #define GFX_OS_UGFXMAIN_STACKSIZE 0 +// #define GFX_EMULATE_MALLOC GFXOFF +// #define GFX_MEM_LT64K GFXOFF /////////////////////////////////////////////////////////////////////////// // GDISP // /////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GDISP TRUE - -//#define GDISP_NEED_AUTOFLUSH FALSE -//#define GDISP_NEED_TIMERFLUSH FALSE -//#define GDISP_NEED_VALIDATION TRUE -//#define GDISP_NEED_CLIP TRUE -#define GDISP_NEED_CIRCLE TRUE -#define GDISP_NEED_ELLIPSE TRUE -#define GDISP_NEED_ARC TRUE -#define GDISP_NEED_ARCSECTORS TRUE -#define GDISP_NEED_CONVEX_POLYGON TRUE -//#define GDISP_NEED_SCROLL FALSE -#define GDISP_NEED_PIXELREAD TRUE -#define GDISP_NEED_CONTROL TRUE -//#define GDISP_NEED_QUERY FALSE -//#define GDISP_NEED_MULTITHREAD FALSE -//#define GDISP_NEED_STREAMING FALSE -#define GDISP_NEED_TEXT TRUE -// #define GDISP_NEED_TEXT_WORDWRAP FALSE -// #define GDISP_NEED_ANTIALIAS FALSE -// #define GDISP_NEED_UTF8 FALSE -#define GDISP_NEED_TEXT_KERNING TRUE -// #define GDISP_INCLUDE_FONT_UI1 FALSE -// #define GDISP_INCLUDE_FONT_UI2 FALSE // The smallest preferred font. -// #define GDISP_INCLUDE_FONT_LARGENUMBERS FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS10 FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS12 FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS16 FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS20 FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS24 FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS32 FALSE -#define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12 TRUE -// #define GDISP_INCLUDE_FONT_FIXED_10X20 FALSE -// #define GDISP_INCLUDE_FONT_FIXED_7X14 FALSE -#define GDISP_INCLUDE_FONT_FIXED_5X8 TRUE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS12_AA FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS16_AA FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS20_AA FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS24_AA FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANS32_AA FALSE -// #define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12_AA FALSE -// #define GDISP_INCLUDE_USER_FONTS FALSE - -//#define GDISP_NEED_IMAGE FALSE -// #define GDISP_NEED_IMAGE_NATIVE FALSE -// #define GDISP_NEED_IMAGE_GIF FALSE -// #define GDISP_NEED_IMAGE_BMP FALSE -// #define GDISP_NEED_IMAGE_BMP_1 FALSE -// #define GDISP_NEED_IMAGE_BMP_4 FALSE -// #define GDISP_NEED_IMAGE_BMP_4_RLE FALSE -// #define GDISP_NEED_IMAGE_BMP_8 FALSE -// #define GDISP_NEED_IMAGE_BMP_8_RLE FALSE -// #define GDISP_NEED_IMAGE_BMP_16 FALSE -// #define GDISP_NEED_IMAGE_BMP_24 FALSE -// #define GDISP_NEED_IMAGE_BMP_32 FALSE -// #define GDISP_NEED_IMAGE_JPG FALSE -// #define GDISP_NEED_IMAGE_PNG FALSE -// #define GDISP_NEED_IMAGE_ACCOUNTING FALSE -#ifdef EMULATOR -# define GDISP_NEED_PIXMAP TRUE -#endif -// #define GDISP_NEED_PIXMAP_IMAGE FALSE - -//#define GDISP_DEFAULT_ORIENTATION GDISP_ROTATE_LANDSCAPE // If not defined the native hardware orientation is used. +#define GFX_USE_GDISP GFXON + +//#define GDISP_NEED_AUTOFLUSH GFXOFF +//#define GDISP_NEED_TIMERFLUSH GFXOFF +//#define GDISP_NEED_VALIDATION GFXON +//#define GDISP_NEED_CLIP GFXON +#define GDISP_NEED_CIRCLE GFXON +//#define GDISP_NEED_DUALCIRCLE GFXOFF +#define GDISP_NEED_ELLIPSE GFXON +#define GDISP_NEED_ARC GFXON +#define GDISP_NEED_ARCSECTORS GFXON +#define GDISP_NEED_CONVEX_POLYGON GFXON +//#define GDISP_NEED_SCROLL GFXOFF +#define GDISP_NEED_PIXELREAD GFXON +#define GDISP_NEED_CONTROL GFXON +//#define GDISP_NEED_QUERY GFXOFF +//#define GDISP_NEED_MULTITHREAD GFXOFF +//#define GDISP_NEED_STREAMING GFXOFF +#define GDISP_NEED_TEXT GFXON +// #define GDISP_NEED_TEXT_WORDWRAP GFXOFF +// #define GDISP_NEED_TEXT_BOXPADLR 1 +// #define GDISP_NEED_TEXT_BOXPADTB 1 +// #define GDISP_NEED_ANTIALIAS GFXOFF +// #define GDISP_NEED_UTF8 GFXOFF +#define GDISP_NEED_TEXT_KERNING GFXON +// #define GDISP_INCLUDE_FONT_UI1 GFXOFF +// #define GDISP_INCLUDE_FONT_UI2 GFXOFF // The smallest preferred font. +// #define GDISP_INCLUDE_FONT_LARGENUMBERS GFXOFF +// #define GDISP_INCLUDE_FONT_DEJAVUSANS10 GFXOFF +// #define GDISP_INCLUDE_FONT_DEJAVUSANS12 GFXOFF +// #define GDISP_INCLUDE_FONT_DEJAVUSANS16 GFXOFF +// #define GDISP_INCLUDE_FONT_DEJAVUSANS20 GFXOFF +// #define GDISP_INCLUDE_FONT_DEJAVUSANS24 GFXOFF +// #define GDISP_INCLUDE_FONT_DEJAVUSANS32 GFXOFF +#define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12 GFXON +// #define GDISP_INCLUDE_FONT_FIXED_10X20 GFXOFF +// #define GDISP_INCLUDE_FONT_FIXED_7X14 GFXOFF +#define GDISP_INCLUDE_FONT_FIXED_5X8 GFXON +// #define GDISP_INCLUDE_FONT_DEJAVUSANS12_AA GFXOFF +// #define GDISP_INCLUDE_FONT_DEJAVUSANS16_AA GFXOFF +// #define GDISP_INCLUDE_FONT_DEJAVUSANS20_AA GFXOFF +// #define GDISP_INCLUDE_FONT_DEJAVUSANS24_AA GFXOFF +// #define GDISP_INCLUDE_FONT_DEJAVUSANS32_AA GFXOFF +// #define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12_AA GFXOFF +// #define GDISP_INCLUDE_USER_FONTS GFXOFF + +//#define GDISP_NEED_IMAGE GFXOFF +// #define GDISP_NEED_IMAGE_NATIVE GFXOFF +// #define GDISP_NEED_IMAGE_GIF GFXOFF +// #define GDISP_IMAGE_GIF_BLIT_BUFFER_SIZE 32 +// #define GDISP_NEED_IMAGE_BMP GFXOFF +// #define GDISP_NEED_IMAGE_BMP_1 GFXON +// #define GDISP_NEED_IMAGE_BMP_4 GFXON +// #define GDISP_NEED_IMAGE_BMP_4_RLE GFXON +// #define GDISP_NEED_IMAGE_BMP_8 GFXON +// #define GDISP_NEED_IMAGE_BMP_8_RLE GFXON +// #define GDISP_NEED_IMAGE_BMP_16 GFXON +// #define GDISP_NEED_IMAGE_BMP_24 GFXON +// #define GDISP_NEED_IMAGE_BMP_32 GFXON +// #define GDISP_IMAGE_BMP_BLIT_BUFFER_SIZE 32 +// #define GDISP_NEED_IMAGE_JPG GFXOFF +// #define GDISP_NEED_IMAGE_PNG GFXOFF +// #define GDISP_NEED_IMAGE_PNG_INTERLACED GFXOFF +// #define GDISP_NEED_IMAGE_PNG_TRANSPARENCY GFXON +// #define GDISP_NEED_IMAGE_PNG_BACKGROUND GFXON +// #define GDISP_NEED_IMAGE_PNG_ALPHACLIFF 32 +// #define GDISP_NEED_IMAGE_PNG_PALETTE_124 GFXON +// #define GDISP_NEED_IMAGE_PNG_PALETTE_8 GFXON +// #define GDISP_NEED_IMAGE_PNG_GRAYSCALE_124 GFXON +// #define GDISP_NEED_IMAGE_PNG_GRAYSCALE_8 GFXON +// #define GDISP_NEED_IMAGE_PNG_GRAYSCALE_16 GFXON +// #define GDISP_NEED_IMAGE_PNG_GRAYALPHA_8 GFXON +// #define GDISP_NEED_IMAGE_PNG_GRAYALPHA_16 GFXON +// #define GDISP_NEED_IMAGE_PNG_RGB_8 GFXON +// #define GDISP_NEED_IMAGE_PNG_RGB_16 GFXON +// #define GDISP_NEED_IMAGE_PNG_RGBALPHA_8 GFXON +// #define GDISP_NEED_IMAGE_PNG_RGBALPHA_16 GFXON +// #define GDISP_IMAGE_PNG_BLIT_BUFFER_SIZE 32 +// #define GDISP_IMAGE_PNG_FILE_BUFFER_SIZE 8 +// #define GDISP_IMAGE_PNG_Z_BUFFER_SIZE 32768 +// #define GDISP_NEED_IMAGE_ACCOUNTING GFXOFF + +//#define GDISP_NEED_PIXMAP GFXOFF +// #define GDISP_NEED_PIXMAP_IMAGE GFXOFF + +//#define GDISP_DEFAULT_ORIENTATION gOrientationLandscape // If not defined the native hardware orientation is used. //#define GDISP_LINEBUF_SIZE 128 -//#define GDISP_STARTUP_COLOR Black -#define GDISP_NEED_STARTUP_LOGO FALSE +//#define GDISP_STARTUP_COLOR GFX_BLACK +#define GDISP_NEED_STARTUP_LOGO GFXOFF -//#define GDISP_TOTAL_DISPLAYS 2 +//#define GDISP_TOTAL_DISPLAYS 1 +//#define GDISP_DRIVER_LIST GDISPVMT_Win32, GDISPVMT_Win32 #ifdef GDISP_DRIVER_LIST -// For code and speed optimization define as TRUE or FALSE if all controllers have the same capability -# define GDISP_HARDWARE_STREAM_WRITE FALSE -# define GDISP_HARDWARE_STREAM_READ FALSE -# define GDISP_HARDWARE_STREAM_POS FALSE -# define GDISP_HARDWARE_DRAWPIXEL TRUE -# define GDISP_HARDWARE_CLEARS FALSE -# define GDISP_HARDWARE_FILLS FALSE -//#define GDISP_HARDWARE_BITFILLS FALSE -# define GDISP_HARDWARE_SCROLL FALSE -# define GDISP_HARDWARE_PIXELREAD TRUE -# define GDISP_HARDWARE_CONTROL TRUE -# define GDISP_HARDWARE_QUERY FALSE -# define GDISP_HARDWARE_CLIP FALSE +// // For code and speed optimization define as GFXON or GFXOFF if all controllers have the same capability +# define GDISP_HARDWARE_STREAM_WRITE GFXOFF +# define GDISP_HARDWARE_STREAM_READ GFXOFF +# define GDISP_HARDWARE_STREAM_POS GFXOFF +# define GDISP_HARDWARE_DRAWPIXEL GFXON +# define GDISP_HARDWARE_CLEARS GFXOFF +# define GDISP_HARDWARE_FILLS GFXOFF +//#define GDISP_HARDWARE_BITFILLS GFXOFF +# define GDISP_HARDWARE_SCROLL GFXOFF +# define GDISP_HARDWARE_PIXELREAD GFXON +# define GDISP_HARDWARE_CONTROL GFXON +# define GDISP_HARDWARE_QUERY GFXOFF +# define GDISP_HARDWARE_CLIP GFXOFF # define GDISP_PIXELFORMAT GDISP_PIXELFORMAT_RGB888 #endif -// The custom format is not defined for some reason, so define it as error -// so we don't get compiler warnings -#define GDISP_PIXELFORMAT_CUSTOM GDISP_PIXELFORMAT_ERROR - -#define GDISP_USE_GFXNET FALSE +#define GDISP_USE_GFXNET GFXOFF // #define GDISP_GFXNET_PORT 13001 -// #define GDISP_GFXNET_CUSTOM_LWIP_STARTUP FALSE -// #define GDISP_DONT_WAIT_FOR_NET_DISPLAY FALSE -// #define GDISP_GFXNET_UNSAFE_SOCKETS FALSE +// #define GDISP_GFXNET_CUSTOM_LWIP_STARTUP GFXOFF +// #define GDISP_DONT_WAIT_FOR_NET_DISPLAY GFXOFF +// #define GDISP_GFXNET_UNSAFE_SOCKETS GFXOFF /////////////////////////////////////////////////////////////////////////// // GWIN // /////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GWIN FALSE +#define GFX_USE_GWIN GFXOFF -//#define GWIN_NEED_WINDOWMANAGER FALSE -// #define GWIN_REDRAW_IMMEDIATE FALSE -// #define GWIN_REDRAW_SINGLEOP FALSE -// #define GWIN_NEED_FLASHING FALSE +//#define GWIN_NEED_WINDOWMANAGER GFXOFF +// #define GWIN_REDRAW_IMMEDIATE GFXOFF +// #define GWIN_REDRAW_SINGLEOP GFXOFF +// #define GWIN_NEED_FLASHING GFXOFF // #define GWIN_FLASHING_PERIOD 250 -//#define GWIN_NEED_CONSOLE FALSE -// #define GWIN_CONSOLE_USE_HISTORY FALSE -// #define GWIN_CONSOLE_HISTORY_AVERAGING FALSE -// #define GWIN_CONSOLE_HISTORY_ATCREATE FALSE -// #define GWIN_CONSOLE_ESCSEQ FALSE -// #define GWIN_CONSOLE_USE_BASESTREAM FALSE -// #define GWIN_CONSOLE_USE_FLOAT FALSE -//#define GWIN_NEED_GRAPH FALSE -//#define GWIN_NEED_GL3D FALSE - -//#define GWIN_NEED_WIDGET FALSE +//#define GWIN_NEED_CONSOLE GFXOFF +// #define GWIN_CONSOLE_USE_HISTORY GFXOFF +// #define GWIN_CONSOLE_HISTORY_AVERAGING GFXOFF +// #define GWIN_CONSOLE_HISTORY_ATCREATE GFXOFF +// #define GWIN_CONSOLE_ESCSEQ GFXOFF +// #define GWIN_CONSOLE_USE_BASESTREAM GFXOFF +// #define GWIN_CONSOLE_USE_FLOAT GFXOFF +//#define GWIN_NEED_GRAPH GFXOFF +//#define GWIN_NEED_GL3D GFXOFF + +//#define GWIN_NEED_WIDGET GFXOFF //#define GWIN_FOCUS_HIGHLIGHT_WIDTH 1 -// #define GWIN_NEED_LABEL FALSE -// #define GWIN_LABEL_ATTRIBUTE FALSE -// #define GWIN_NEED_BUTTON FALSE -// #define GWIN_BUTTON_LAZY_RELEASE FALSE -// #define GWIN_NEED_SLIDER FALSE -// #define GWIN_SLIDER_NOSNAP FALSE +// #define GWIN_NEED_LABEL GFXOFF +// #define GWIN_LABEL_ATTRIBUTE GFXOFF +// #define GWIN_NEED_BUTTON GFXOFF +// #define GWIN_BUTTON_LAZY_RELEASE GFXOFF +// #define GWIN_NEED_SLIDER GFXOFF +// #define GWIN_SLIDER_NOSNAP GFXOFF // #define GWIN_SLIDER_DEAD_BAND 5 // #define GWIN_SLIDER_TOGGLE_INC 20 -// #define GWIN_NEED_CHECKBOX FALSE -// #define GWIN_NEED_IMAGE FALSE -// #define GWIN_NEED_IMAGE_ANIMATION FALSE -// #define GWIN_NEED_RADIO FALSE -// #define GWIN_NEED_LIST FALSE -// #define GWIN_NEED_LIST_IMAGES FALSE -// #define GWIN_NEED_PROGRESSBAR FALSE -// #define GWIN_PROGRESSBAR_AUTO FALSE -// #define GWIN_NEED_KEYBOARD FALSE +// #define GWIN_NEED_CHECKBOX GFXOFF +// #define GWIN_NEED_IMAGE GFXOFF +// #define GWIN_NEED_IMAGE_ANIMATION GFXOFF +// #define GWIN_NEED_RADIO GFXOFF +// #define GWIN_NEED_LIST GFXOFF +// #define GWIN_NEED_LIST_IMAGES GFXOFF +// #define GWIN_NEED_PROGRESSBAR GFXOFF +// #define GWIN_PROGRESSBAR_AUTO GFXOFF +// #define GWIN_NEED_KEYBOARD GFXOFF // #define GWIN_KEYBOARD_DEFAULT_LAYOUT VirtualKeyboard_English1 -// #define GWIN_NEED_KEYBOARD_ENGLISH1 TRUE -// #define GWIN_NEED_TEXTEDIT FALSE -// #define GWIN_FLAT_STYLING FALSE -// #define GWIN_WIDGET_TAGS FALSE - -//#define GWIN_NEED_CONTAINERS FALSE -// #define GWIN_NEED_CONTAINER FALSE -// #define GWIN_NEED_FRAME FALSE -// #define GWIN_NEED_TABSET FALSE +// #define GWIN_NEED_KEYBOARD_ENGLISH1 GFXON +// #define GWIN_NEED_TEXTEDIT GFXOFF +// #define GWIN_FLAT_STYLING GFXOFF +// #define GWIN_WIDGET_TAGS GFXOFF + +//#define GWIN_NEED_CONTAINERS GFXOFF +// #define GWIN_NEED_CONTAINER GFXOFF +// #define GWIN_NEED_FRAME GFXOFF +// #define GWIN_NEED_TABSET GFXOFF // #define GWIN_TABSET_TABHEIGHT 18 /////////////////////////////////////////////////////////////////////////// +// GTRANS // +/////////////////////////////////////////////////////////////////////////// +//#define GFX_USE_GTRANS GFXOFF + +/////////////////////////////////////////////////////////////////////////// // GEVENT // /////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GEVENT TRUE +#define GFX_USE_GEVENT GFXON -//#define GEVENT_ASSERT_NO_RESOURCE FALSE +//#define GEVENT_ASSERT_NO_RESOURCE GFXOFF //#define GEVENT_MAXIMUM_SIZE 32 //#define GEVENT_MAX_SOURCE_LISTENERS 32 /////////////////////////////////////////////////////////////////////////// // GTIMER // /////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GTIMER FALSE +#define GFX_USE_GTIMER GFXOFF -//#define GTIMER_THREAD_PRIORITY HIGH_PRIORITY +//#define GTIMER_THREAD_PRIORITY gThreadpriorityHigh //#define GTIMER_THREAD_WORKAREA_SIZE 2048 /////////////////////////////////////////////////////////////////////////// // GQUEUE // /////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GQUEUE FALSE +#define GFX_USE_GQUEUE GFXOFF -//#define GQUEUE_NEED_ASYNC FALSE -//#define GQUEUE_NEED_GSYNC FALSE -//#define GQUEUE_NEED_FSYNC FALSE -//#define GQUEUE_NEED_BUFFERS FALSE +//#define GQUEUE_NEED_ASYNC GFXOFF +//#define GQUEUE_NEED_GSYNC GFXOFF +//#define GQUEUE_NEED_FSYNC GFXOFF +//#define GQUEUE_NEED_BUFFERS GFXOFF /////////////////////////////////////////////////////////////////////////// // GINPUT // /////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GINPUT FALSE +#define GFX_USE_GINPUT GFXOFF -//#define GINPUT_NEED_MOUSE FALSE -// #define GINPUT_TOUCH_STARTRAW FALSE -// #define GINPUT_TOUCH_NOTOUCH FALSE -// #define GINPUT_TOUCH_NOCALIBRATE FALSE -// #define GINPUT_TOUCH_NOCALIBRATE_GUI FALSE +//#define GINPUT_NEED_MOUSE GFXOFF +// #define GINPUT_TOUCH_STARTRAW GFXOFF +// #define GINPUT_TOUCH_NOTOUCH GFXOFF +// #define GINPUT_TOUCH_NOCALIBRATE GFXOFF +// #define GINPUT_TOUCH_NOCALIBRATE_GUI GFXOFF // #define GINPUT_MOUSE_POLL_PERIOD 25 // #define GINPUT_MOUSE_CLICK_TIME 300 // #define GINPUT_TOUCH_CXTCLICK_TIME 700 -// #define GINPUT_TOUCH_USER_CALIBRATION_LOAD FALSE -// #define GINPUT_TOUCH_USER_CALIBRATION_SAVE FALSE +// #define GINPUT_TOUCH_USER_CALIBRATION_LOAD GFXOFF +// #define GINPUT_TOUCH_USER_CALIBRATION_SAVE GFXOFF // #define GMOUSE_DRIVER_LIST GMOUSEVMT_Win32, GMOUSEVMT_Win32 -//#define GINPUT_NEED_KEYBOARD FALSE +// #define GINPUT_TOUCH_CALIBRATION_FONT1 "* Double" +// #define GINPUT_TOUCH_CALIBRATION_FONT2 "* Narrow" +// #define GINPUT_TOUCH_CALIBRATION_TITLE "Calibration" +// #define GINPUT_TOUCH_CALIBRATION_ERROR "Calibration Failed!" +//#define GINPUT_NEED_KEYBOARD GFXOFF // #define GINPUT_KEYBOARD_POLL_PERIOD 200 // #define GKEYBOARD_DRIVER_LIST GKEYBOARDVMT_Win32, GKEYBOARDVMT_Win32 -// #define GKEYBOARD_LAYOUT_OFF FALSE -// #define GKEYBOARD_LAYOUT_SCANCODE2_US FALSE -//#define GINPUT_NEED_TOGGLE FALSE -//#define GINPUT_NEED_DIAL FALSE +// #define GKEYBOARD_LAYOUT_OFF GFXOFF +// #define GKEYBOARD_LAYOUT_SCANCODE2_US GFXOFF +//#define GINPUT_NEED_TOGGLE GFXOFF +//#define GINPUT_NEED_DIAL GFXOFF /////////////////////////////////////////////////////////////////////////// // GFILE // /////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GFILE FALSE - -//#define GFILE_NEED_PRINTG FALSE -//#define GFILE_NEED_SCANG FALSE -//#define GFILE_NEED_STRINGS FALSE -//#define GFILE_NEED_FILELISTS FALSE -//#define GFILE_NEED_STDIO FALSE -//#define GFILE_NEED_NOAUTOMOUNT FALSE -//#define GFILE_NEED_NOAUTOSYNC FALSE - -//#define GFILE_NEED_MEMFS FALSE -//#define GFILE_NEED_ROMFS FALSE -//#define GFILE_NEED_RAMFS FALSE -//#define GFILE_NEED_FATFS FALSE -//#define GFILE_NEED_NATIVEFS FALSE -//#define GFILE_NEED_CHBIOSFS FALSE - -//#define GFILE_ALLOW_FLOATS FALSE -//#define GFILE_ALLOW_DEVICESPECIFIC FALSE +#define GFX_USE_GFILE GFXOFF + +//#define GFILE_NEED_PRINTG GFXOFF +//#define GFILE_NEED_SCANG GFXOFF +//#define GFILE_NEED_STRINGS GFXOFF +//#define GFILE_NEED_FILELISTS GFXOFF +//#define GFILE_NEED_STDIO GFXOFF +//#define GFILE_NEED_NOAUTOMOUNT GFXOFF +//#define GFILE_NEED_NOAUTOSYNC GFXOFF + +//#define GFILE_NEED_MEMFS GFXOFF +//#define GFILE_NEED_ROMFS GFXOFF +//#define GFILE_NEED_RAMFS GFXOFF +//#define GFILE_NEED_FATFS GFXOFF +//#define GFILE_NEED_NATIVEFS GFXOFF +//#define GFILE_NEED_CHBIOSFS GFXOFF +//#define GFILE_NEED_USERFS GFXOFF + +//#define GFILE_ALLOW_FLOATS GFXOFF +//#define GFILE_ALLOW_DEVICESPECIFIC GFXOFF //#define GFILE_MAX_GFILES 3 /////////////////////////////////////////////////////////////////////////// // GADC // /////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GADC FALSE - -//#define GADC_MAX_LOWSPEED_DEVICES 4 +#define GFX_USE_GADC GFXOFF +// #define GADC_MAX_LOWSPEED_DEVICES 4 /////////////////////////////////////////////////////////////////////////// // GAUDIO // /////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GAUDIO FALSE -// There seems to be a bug in the ugfx code, the wrong define is used -// So define it in order to avoid warnings -#define GFX_USE_GAUDIN GFX_USE_GAUDIO -// #define GAUDIO_NEED_PLAY FALSE -// #define GAUDIO_NEED_RECORD FALSE +#define GFX_USE_GAUDIO GFXOFF +// #define GAUDIO_NEED_PLAY GFXOFF +// #define GAUDIO_NEED_RECORD GFXOFF /////////////////////////////////////////////////////////////////////////// // GMISC // /////////////////////////////////////////////////////////////////////////// -#define GFX_USE_GMISC TRUE - -//#define GMISC_NEED_ARRAYOPS FALSE -//#define GMISC_NEED_FASTTRIG FALSE -//#define GMISC_NEED_FIXEDTRIG FALSE -//#define GMISC_NEED_INVSQRT FALSE -// #define GMISC_INVSQRT_MIXED_ENDIAN FALSE -// #define GMISC_INVSQRT_REAL_SLOW FALSE -#define GMISC_NEED_MATRIXFLOAT2D TRUE -#define GMISC_NEED_MATRIXFIXED2D FALSE +#define GFX_USE_GMISC GFXON + +//#define GMISC_NEED_ARRAYOPS GFXOFF +//#define GMISC_NEED_FASTTRIG GFXOFF +//#define GMISC_NEED_FIXEDTRIG GFXOFF +//#define GMISC_NEED_INVSQRT GFXOFF +// #define GMISC_INVSQRT_MIXED_ENDIAN GFXOFF +// #define GMISC_INVSQRT_REAL_SLOW GFXOFF +#define GMISC_NEED_MATRIXFLOAT2D GFXON +#define GMISC_NEED_MATRIXFIXED2D GFXOFF +//#define GMISC_NEED_HITTEST_POLY GFXOFF #endif /* COMMON_GFXCONF_H */ diff --git a/quantum/visualizer/visualizer.c b/quantum/visualizer/visualizer.c index 3f182e74d8..9e9cb6d410 100644 --- a/quantum/visualizer/visualizer.c +++ b/quantum/visualizer/visualizer.c @@ -352,7 +352,7 @@ static DECLARE_THREAD_FUNCTION(visualizerThread, arg) { // On windows the system ticks is the same as milliseconds anyway if (sleep_time != TIME_INFINITE) { - sleep_time = ST2MS(sleep_time); + sleep_time = TIME_I2MS(sleep_time); } #endif geventEventWait(&event_listener, sleep_time); @@ -400,7 +400,7 @@ void update_status(bool changed) { static systime_t last_update = 0; systime_t current_update = chVTGetSystemTimeX(); systime_t delta = current_update - last_update; - if (changed || delta > MS2ST(10)) { + if (changed || delta > TIME_MS2I(10)) { last_update = current_update; visualizer_keyboard_status_t* r = begin_write_current_status(); *r = current_status; diff --git a/quantum/visualizer/visualizer.h b/quantum/visualizer/visualizer.h index 7ca6837ce6..488d130dec 100644 --- a/quantum/visualizer/visualizer.h +++ b/quantum/visualizer/visualizer.h @@ -97,8 +97,8 @@ typedef struct visualizer_state_t { uint32_t current_lcd_color; uint32_t prev_lcd_color; #ifdef LCD_ENABLE - font_t font_fixed5x8; - font_t font_dejavusansbold12; + gFont font_fixed5x8; + gFont font_dejavusansbold12; #endif } visualizer_state_t; diff --git a/tmk_core/chibios.mk b/tmk_core/chibios.mk index fcc5de183d..d447bc13ee 100644 --- a/tmk_core/chibios.mk +++ b/tmk_core/chibios.mk @@ -110,6 +110,8 @@ else ifneq ("$(wildcard $(KEYBOARD_PATH_1)/ld/$(MCU_LDSCRIPT).ld)","") LDSCRIPT = $(KEYBOARD_PATH_1)/ld/$(MCU_LDSCRIPT).ld else ifneq ("$(wildcard $(TOP_DIR)/drivers/boards/ld/$(MCU_LDSCRIPT).ld)","") LDSCRIPT = $(TOP_DIR)/drivers/boards/ld/$(MCU_LDSCRIPT).ld +else ifneq ("$(wildcard $(STARTUPLD_CONTRIB)/$(MCU_LDSCRIPT).ld)","") + LDSCRIPT = $(STARTUPLD_CONTRIB)/$(MCU_LDSCRIPT).ld else LDSCRIPT = $(STARTUPLD)/$(MCU_LDSCRIPT).ld endif @@ -120,6 +122,7 @@ CHIBISRC = $(STARTUPSRC) \ $(OSALSRC) \ $(HALSRC) \ $(PLATFORMSRC) \ + $(PLATFORMSRC_CONTRIB) \ $(BOARDSRC) \ $(STREAMSSRC) \ $(CHIBIOS)/os/various/syscalls.c @@ -129,9 +132,9 @@ QUANTUM_LIB_SRC += $(STARTUPASM) $(PORTASM) $(OSALASM) CHIBISRC := $(patsubst $(TOP_DIR)/%,%,$(CHIBISRC)) -EXTRAINCDIRS += $(CHIBIOS)/os/license \ +EXTRAINCDIRS += $(CHIBIOS)/os/license $(CHIBIOS)/os/oslib/include \ $(STARTUPINC) $(KERNINC) $(PORTINC) $(OSALINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) $(TESTINC) \ + $(HALINC) $(PLATFORMINC) $(PLATFORMINC_CONTRIB) $(BOARDINC) $(TESTINC) \ $(STREAMSINC) $(CHIBIOS)/os/various $(COMMON_VPATH) # @@ -180,6 +183,9 @@ LDFLAGS += -Wl,--script=$(LDSCRIPT)$(LDSYMBOLS) OPT_DEFS += -DPROTOCOL_CHIBIOS +# Workaround to stop ChibiOS from complaining about new GCC -- it's been fixed for 7/8/9 already +OPT_DEFS += -DPORT_IGNORE_GCC_VERSION_CHECK=1 + MCUFLAGS = -mcpu=$(MCU) # FPU options default (Cortex-M4 and Cortex-M7 single precision). diff --git a/tmk_core/common.mk b/tmk_core/common.mk index 278a6b6a14..bcd38240e6 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -167,11 +167,16 @@ ifeq ($(strip $(LTO_ENABLE)), yes) endif ifeq ($(strip $(LINK_TIME_OPTIMIZATION_ENABLE)), yes) + ifeq ($(PLATFORM),CHIBIOS) + $(info Enabling LTO on ChibiOS-targeting boards is known to have a high likelihood of failure.) + $(info If unsure, set LINK_TIME_OPTIMIZATION_ENABLE = no.) + endif EXTRAFLAGS += -flto TMK_COMMON_DEFS += -DLINK_TIME_OPTIMIZATION_ENABLE TMK_COMMON_DEFS += -DNO_ACTION_MACRO TMK_COMMON_DEFS += -DNO_ACTION_FUNCTION endif + # Bootloader address ifdef STM32_BOOTLOADER_ADDRESS TMK_COMMON_DEFS += -DSTM32_BOOTLOADER_ADDRESS=$(STM32_BOOTLOADER_ADDRESS) diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index 001f0de13a..ab68681ded 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -562,34 +562,6 @@ void process_action(keyrecord_t *record, action_t action) { action_macro_play(action_get_macro(record, action.func.id, action.func.opt)); break; #endif -#if defined(BACKLIGHT_ENABLE) | defined(LED_MATRIX_ENABLE) - case ACT_BACKLIGHT: - if (!event.pressed) { - switch (action.backlight.opt) { - case BACKLIGHT_INCREASE: - backlight_increase(); - break; - case BACKLIGHT_DECREASE: - backlight_decrease(); - break; - case BACKLIGHT_TOGGLE: - backlight_toggle(); - break; - case BACKLIGHT_STEP: - backlight_step(); - break; - case BACKLIGHT_ON: - backlight_level(BACKLIGHT_LEVELS); - break; - case BACKLIGHT_OFF: - backlight_level(0); - break; - } - } - break; -#endif - case ACT_COMMAND: - break; #ifdef SWAP_HANDS_ENABLE case ACT_SWAP_HANDS: switch (action.swap.code) { diff --git a/tmk_core/common/action_code.h b/tmk_core/common/action_code.h index 03fcb3382b..6c005b76d1 100644 --- a/tmk_core/common/action_code.h +++ b/tmk_core/common/action_code.h @@ -86,8 +86,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. * 1100|opt | id(8) Macro play? * 1100|1111| id(8) Macro record? * - * ACT_BACKLIGHT(1101): - * 1101|opt |level(8) Backlight commands + * 1101|xxxx xxxx xxxx (reserved) * * ACT_COMMAND(1110): * 1110|opt | id(8) Built-in Command exec @@ -115,10 +114,9 @@ enum action_kind_id { ACT_LAYER_TAP = 0b1010, /* Layer 0-15 */ ACT_LAYER_TAP_EXT = 0b1011, /* Layer 16-31 */ /* Extensions */ - ACT_MACRO = 0b1100, - ACT_BACKLIGHT = 0b1101, - ACT_COMMAND = 0b1110, - ACT_FUNCTION = 0b1111 + ACT_MACRO = 0b1100, + ACT_COMMAND = 0b1110, + ACT_FUNCTION = 0b1111 }; /** \brief Action Code Struct @@ -169,11 +167,6 @@ typedef union { uint8_t page : 2; uint8_t kind : 4; } usage; - struct action_backlight { - uint8_t level : 8; - uint8_t opt : 4; - uint8_t kind : 4; - } backlight; struct action_command { uint8_t id : 8; uint8_t opt : 4; @@ -290,28 +283,10 @@ enum layer_param_tap_op { #define ACTION_DEFAULT_LAYER_BIT_XOR(part, bits) ACTION_LAYER_BITOP(OP_BIT_XOR, (part), (bits), 0) #define ACTION_DEFAULT_LAYER_BIT_SET(part, bits) ACTION_LAYER_BITOP(OP_BIT_SET, (part), (bits), 0) -/** \brief Extensions - */ -enum backlight_opt { - BACKLIGHT_INCREASE = 0, - BACKLIGHT_DECREASE = 1, - BACKLIGHT_TOGGLE = 2, - BACKLIGHT_STEP = 3, - BACKLIGHT_ON = 4, - BACKLIGHT_OFF = 5, -}; - /* Macro */ #define ACTION_MACRO(id) ACTION(ACT_MACRO, (id)) #define ACTION_MACRO_TAP(id) ACTION(ACT_MACRO, FUNC_TAP << 8 | (id)) #define ACTION_MACRO_OPT(id, opt) ACTION(ACT_MACRO, (opt) << 8 | (id)) -/* Backlight */ -#define ACTION_BACKLIGHT_INCREASE() ACTION(ACT_BACKLIGHT, BACKLIGHT_INCREASE << 8) -#define ACTION_BACKLIGHT_DECREASE() ACTION(ACT_BACKLIGHT, BACKLIGHT_DECREASE << 8) -#define ACTION_BACKLIGHT_TOGGLE() ACTION(ACT_BACKLIGHT, BACKLIGHT_TOGGLE << 8) -#define ACTION_BACKLIGHT_STEP() ACTION(ACT_BACKLIGHT, BACKLIGHT_STEP << 8) -#define ACTION_BACKLIGHT_ON() ACTION(ACT_BACKLIGHT, BACKLIGHT_ON << 8) -#define ACTION_BACKLIGHT_OFF() ACTION(ACT_BACKLIGHT, BACKLIGHT_OFF << 8) /* Command */ #define ACTION_COMMAND(id, opt) ACTION(ACT_COMMAND, (opt) << 8 | (id)) /* Function */ diff --git a/tmk_core/common/chibios/timer.c b/tmk_core/common/chibios/timer.c index ed5cfe1b05..ac5a5af638 100644 --- a/tmk_core/common/chibios/timer.c +++ b/tmk_core/common/chibios/timer.c @@ -2,30 +2,44 @@ #include "timer.h" -static systime_t last_systime = 0; -static systime_t overflow = 0; -static uint32_t current_time_ms = 0; +static uint32_t reset_point = 0; +#if CH_CFG_ST_RESOLUTION < 32 +static uint32_t last_systime = 0; +static uint32_t overflow = 0; +#endif void timer_init(void) { timer_clear(); } void timer_clear(void) { - last_systime = chVTGetSystemTime(); - overflow = 0; - current_time_ms = 0; + reset_point = (uint32_t)chVTGetSystemTime(); +#if CH_CFG_ST_RESOLUTION < 32 + last_systime = reset_point; + overflow = 0; +#endif } uint16_t timer_read(void) { return (uint16_t)timer_read32(); } uint32_t timer_read32(void) { - // Note: We assume that the timer update is called at least once betweeen every wrap around of the system time - systime_t current_systime = chVTGetSystemTime(); - systime_t elapsed = current_systime - last_systime + overflow; - uint32_t elapsed_ms = ST2MS(elapsed); - current_time_ms += elapsed_ms; - overflow = elapsed - MS2ST(elapsed_ms); - last_systime = current_systime; - - return current_time_ms; + uint32_t systime = (uint32_t)chVTGetSystemTime(); + +#if CH_CFG_ST_RESOLUTION < 32 + // If/when we need to support 64-bit chips, this may need to be modified to match the native bit-ness of the MCU. + // At this point, the only SysTick resolution allowed other than 32 is 16 bit. + // In the 16-bit case, at: + // - CH_CFG_ST_FREQUENCY = 100000, overflow will occur every ~0.65 seconds + // - CH_CFG_ST_FREQUENCY = 10000, overflow will occur every ~6.5 seconds + // - CH_CFG_ST_FREQUENCY = 1000, overflow will occur every ~65 seconds + // With this implementation, as long as we ensure a timer read happens at least once during the overflow period, timing should be accurate. + if (systime < last_systime) { + overflow += ((uint32_t)1) << CH_CFG_ST_RESOLUTION; + } + + last_systime = systime; + return (uint32_t)TIME_I2MS(systime - reset_point + overflow); +#else + return (uint32_t)TIME_I2MS(systime - reset_point); +#endif } uint16_t timer_elapsed(uint16_t last) { return TIMER_DIFF_16(timer_read(), last); } diff --git a/tmk_core/common/command.c b/tmk_core/common/command.c index 900de54103..77a205eac4 100644 --- a/tmk_core/common/command.c +++ b/tmk_core/common/command.c @@ -153,6 +153,9 @@ static void print_version(void) { print("BUILD: (" __DATE__ ")\n"); #else print("BUILD: " STR(QMK_VERSION) " (" __TIME__ " " __DATE__ ")\n"); +# ifdef PROTOCOL_CHIBIOS + print("CHIBIOS: " STR(CHIBIOS_VERSION) ", CONTRIB: " STR(CHIBIOS_CONTRIB_VERSION) "\n"); +# endif #endif /* build options */ @@ -182,6 +185,9 @@ static void print_version(void) { #ifdef NKRO_ENABLE " NKRO" #endif +#ifdef LINK_TIME_OPTIMIZATION_ENABLE + " LTO" +#endif " " STR(BOOTLOADER_SIZE) "\n"); diff --git a/tmk_core/common/timer.h b/tmk_core/common/timer.h index 378cf7892c..bbaae109d0 100644 --- a/tmk_core/common/timer.h +++ b/tmk_core/common/timer.h @@ -45,9 +45,8 @@ uint16_t timer_elapsed(uint16_t last); uint32_t timer_elapsed32(uint32_t last); // Utility functions to check if a future time has expired & autmatically handle time wrapping if checked / reset frequently (half of max value) -inline bool timer_expired(uint16_t current, uint16_t future) { return (uint16_t)(current - future) < 0x8000; } - -inline bool timer_expired32(uint32_t current, uint32_t future) { return (uint32_t)(current - future) < 0x80000000; } +#define timer_expired(current, future) (((uint16_t)current - (uint16_t)future) < 0x8000) +#define timer_expired32(current, future) (((uint32_t)current - (uint32_t)future) < 0x80000000) #ifdef __cplusplus } diff --git a/tmk_core/protocol/chibios.mk b/tmk_core/protocol/chibios.mk index 222fb4dad4..2070420f56 100644 --- a/tmk_core/protocol/chibios.mk +++ b/tmk_core/protocol/chibios.mk @@ -6,6 +6,7 @@ SRC += $(CHIBIOS_DIR)/usb_main.c SRC += $(CHIBIOS_DIR)/main.c SRC += usb_descriptor.c SRC += $(CHIBIOS_DIR)/usb_driver.c +SRC += $(LIBSRC) VPATH += $(TMK_PATH)/$(PROTOCOL_DIR) VPATH += $(TMK_PATH)/$(CHIBIOS_DIR) diff --git a/tmk_core/protocol/chibios/usb_driver.c b/tmk_core/protocol/chibios/usb_driver.c index 28a8c66635..22d3c91f5a 100644 --- a/tmk_core/protocol/chibios/usb_driver.c +++ b/tmk_core/protocol/chibios/usb_driver.c @@ -88,15 +88,15 @@ static msg_t _put(void *ip, uint8_t b) { return obqPutTimeout(&((QMKUSBDriver *) static msg_t _get(void *ip) { return ibqGetTimeout(&((QMKUSBDriver *)ip)->ibqueue, TIME_INFINITE); } -static msg_t _putt(void *ip, uint8_t b, systime_t timeout) { return obqPutTimeout(&((QMKUSBDriver *)ip)->obqueue, b, timeout); } +static msg_t _putt(void *ip, uint8_t b, sysinterval_t timeout) { return obqPutTimeout(&((QMKUSBDriver *)ip)->obqueue, b, timeout); } -static msg_t _gett(void *ip, systime_t timeout) { return ibqGetTimeout(&((QMKUSBDriver *)ip)->ibqueue, timeout); } +static msg_t _gett(void *ip, sysinterval_t timeout) { return ibqGetTimeout(&((QMKUSBDriver *)ip)->ibqueue, timeout); } -static size_t _writet(void *ip, const uint8_t *bp, size_t n, systime_t timeout) { return obqWriteTimeout(&((QMKUSBDriver *)ip)->obqueue, bp, n, timeout); } +static size_t _writet(void *ip, const uint8_t *bp, size_t n, sysinterval_t timeout) { return obqWriteTimeout(&((QMKUSBDriver *)ip)->obqueue, bp, n, timeout); } -static size_t _readt(void *ip, uint8_t *bp, size_t n, systime_t timeout) { return ibqReadTimeout(&((QMKUSBDriver *)ip)->ibqueue, bp, n, timeout); } +static size_t _readt(void *ip, uint8_t *bp, size_t n, sysinterval_t timeout) { return ibqReadTimeout(&((QMKUSBDriver *)ip)->ibqueue, bp, n, timeout); } -static const struct QMKUSBDriverVMT vmt = {_write, _read, _put, _get, _putt, _gett, _writet, _readt}; +static const struct QMKUSBDriverVMT vmt = {0, _write, _read, _put, _get, _putt, _gett, _writet, _readt}; /** * @brief Notification of empty buffer released into the input buffers queue. diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c index 6192baa4d2..3370964683 100644 --- a/tmk_core/protocol/chibios/usb_main.c +++ b/tmk_core/protocol/chibios/usb_main.c @@ -499,7 +499,7 @@ static bool usb_request_hook_cb(USBDriver *usbp) { #endif /* NKRO_ENABLE */ /* arm the idle timer if boot protocol & idle */ osalSysLockFromISR(); - chVTSetI(&keyboard_idle_timer, 4 * MS2ST(keyboard_idle), keyboard_idle_timer_cb, (void *)usbp); + chVTSetI(&keyboard_idle_timer, 4 * TIME_MS2I(keyboard_idle), keyboard_idle_timer_cb, (void *)usbp); osalSysUnlockFromISR(); } } @@ -516,7 +516,7 @@ static bool usb_request_hook_cb(USBDriver *usbp) { if (keyboard_idle) { #endif /* NKRO_ENABLE */ osalSysLockFromISR(); - chVTSetI(&keyboard_idle_timer, 4 * MS2ST(keyboard_idle), keyboard_idle_timer_cb, (void *)usbp); + chVTSetI(&keyboard_idle_timer, 4 * TIME_MS2I(keyboard_idle), keyboard_idle_timer_cb, (void *)usbp); osalSysUnlockFromISR(); } usbSetupTransfer(usbp, NULL, 0, NULL); @@ -652,7 +652,7 @@ static void keyboard_idle_timer_cb(void *arg) { usbStartTransmitI(usbp, KEYBOARD_IN_EPNUM, (uint8_t *)&keyboard_report_sent, KEYBOARD_EPSIZE); } /* rearm the timer */ - chVTSetI(&keyboard_idle_timer, 4 * MS2ST(keyboard_idle), keyboard_idle_timer_cb, (void *)usbp); + chVTSetI(&keyboard_idle_timer, 4 * TIME_MS2I(keyboard_idle), keyboard_idle_timer_cb, (void *)usbp); } /* do not rearm the timer if the condition above fails @@ -751,7 +751,7 @@ void send_mouse(report_mouse_t *report) { * every iteration - otherwise the system will remain locked, * no interrupts served, so USB not going through as well. * Note: for suspend, need USB_USE_WAIT == TRUE in halconf.h */ - if (osalThreadSuspendTimeoutS(&(&USB_DRIVER)->epc[MOUSE_IN_EPNUM]->in_state->thread, MS2ST(10)) == MSG_TIMEOUT) { + if (osalThreadSuspendTimeoutS(&(&USB_DRIVER)->epc[MOUSE_IN_EPNUM]->in_state->thread, TIME_MS2I(10)) == MSG_TIMEOUT) { osalSysUnlock(); return; } diff --git a/util/chibios-upgrader.sh b/util/chibios-upgrader.sh new file mode 100755 index 0000000000..4f27125957 --- /dev/null +++ b/util/chibios-upgrader.sh @@ -0,0 +1,172 @@ +#!/bin/bash + +set -eEuo pipefail +umask 022 + +sinfo() { echo "$@" >&2 ; } +shead() { sinfo "" ; sinfo "---------------------------------" ; sinfo "-- $@" ; sinfo "---------------------------------" ; } +havecmd() { command command type "${1}" >/dev/null 2>&1 || return 1 ; } + +this_script="$(realpath "${BASH_SOURCE[0]}")" +script_dir="$(realpath "$(dirname "$this_script")")" +qmk_firmware_dir="$(realpath "$script_dir/../")" + +declare -A file_hashes + +export PATH="$PATH:$script_dir/fmpp/bin" + +build_fmpp() { + [ -f "$script_dir/fmpp.tar.gz" ] \ + || wget -O"$script_dir/fmpp.tar.gz" https://github.com/freemarker/fmpp/archive/v0.9.16.tar.gz + [ -d "$script_dir/fmpp" ] \ + || { mkdir "$script_dir/fmpp" && tar xf "$script_dir/fmpp.tar.gz" -C "$script_dir/fmpp" --strip-components=1 ; } + pushd "$script_dir/fmpp" >/dev/null 2>&1 + sed -e "s#bootclasspath.path=.*#bootclasspath.path=$(find /usr/lib/jvm -name 'rt.jar' | sort | tail -n1)#g" \ + -e "s#ant.jar.path=.*#ant.jar.path=$(find /usr/share/java -name 'ant-1*.jar' | sort | tail -n1)#g" \ + build.properties.sample > build.properties + sed -e 's#source="1.5"#source="1.8"#g' \ + -e 's#target="1.5"#target="1.8"#g' \ + build.xml > build.xml.new + mv build.xml.new build.xml + ant clean + ant + chmod +x "$script_dir/fmpp/bin/fmpp" + popd >/dev/null 2>&1 +} + +find_chibi_files() { + local search_path="$1" + shift + local conditions=( "$@" ) + find "$search_path" -not -path '*/lib/chibios*' -and -not -path '*/lib/ugfx*' -and -not -path '*/util/*' -and \( "${conditions[@]}" \) | sort +} + +revert_chibi_files() { + local search_path="$1" + shead "Reverting ChibiOS config/board files..." + for file in $(find_chibi_files "$search_path" -name chconf.h -or -name halconf.h -or -name mcuconf.h -or -name board.c -or -name board.h -or -name board.mk -or -name board.chcfg) ; do + pushd "$search_path" >/dev/null 2>&1 + local relpath=$(realpath --relative-to="$search_path" "$file") + git checkout upstream/master -- "$relpath" || git checkout origin/master -- "$relpath" || true + popd >/dev/null 2>&1 + done +} + +populate_file_hashes() { + local search_path="$1" + shead "Determining duplicate config/board files..." + for file in $(find_chibi_files "$search_path" -name chconf.h -or -name halconf.h -or -name mcuconf.h -or -name board.c -or -name board.h) ; do + local key="file_$(clang-format "$file" | sha1sum | cut -d' ' -f1)" + local relpath=$(realpath --relative-to="$search_path" "$file") + file_hashes[$key]="${file_hashes[$key]:-} $relpath" + done + for file in $(find_chibi_files "$search_path" -name board.mk -or -name board.chcfg) ; do + local key="file_$(cat "$file" | sha1sum | cut -d' ' -f1)" + local relpath=$(realpath --relative-to="$search_path" "$file") + file_hashes[$key]="${file_hashes[$key]:-} $relpath" + done +} + +determine_equivalent_files() { + local search_file="$1" + for K in "${!file_hashes[@]}"; do + for V in ${file_hashes[$K]}; do + if [[ "$V" == "$search_file" ]] ; then + for V in ${file_hashes[$K]}; do + echo "$V" + done + return 0 + fi + done + done + return 1 +} + +deploy_staged_files() { + shead "Deploying staged files..." + for file in $(find "$qmk_firmware_dir/util/chibios-upgrade-staging" -type f) ; do + local relpath=$(realpath --relative-to="$qmk_firmware_dir/util/chibios-upgrade-staging" "$file") + sinfo "Deploying staged file: $relpath" + for other in $(determine_equivalent_files "$relpath") ; do + sinfo " => $other" + cp "$qmk_firmware_dir/util/chibios-upgrade-staging/$relpath" "$qmk_firmware_dir/$other" + done + done +} + +swap_mcuconf_f3xx_f303() { + shead "Swapping STM32F3xx_MCUCONF -> STM32F303_MCUCONF..." + for file in $(find_chibi_files "$qmk_firmware_dir" -name mcuconf.h) ; do + sed -i 's#STM32F3xx_MCUCONF#STM32F303_MCUCONF#g' "$file" + dos2unix "$file" >/dev/null 2>&1 + done +} + +upgrade_conf_files_generic() { + local search_filename="$1" + local update_script="$2" + shead "Updating $search_filename files ($update_script)..." + pushd "$qmk_firmware_dir/lib/chibios/tools/updater" >/dev/null 2>&1 + for file in $(find_chibi_files "$qmk_firmware_dir" -name "$search_filename") ; do + cp -f "$file" "$file.orig" + clang-format --style='{IndentPPDirectives: None}' -i "$file" + cp -f "$file" "$file.formatted" + bash "$update_script" "$file" + if ! diff "$file" "$file.formatted" >/dev/null 2>&1 ; then + dos2unix "$file" >/dev/null 2>&1 + else + cp -f "$file.orig" "$file" + fi + rm -f "$file.orig" "$file.formatted" + done + popd >/dev/null 2>&1 +} + +upgrade_chconf_files() { + upgrade_conf_files_generic chconf.h update_chconf_rt.sh +} + +upgrade_halconf_files() { + upgrade_conf_files_generic halconf.h update_halconf.sh +} + +upgrade_mcuconf_files() { + pushd "$qmk_firmware_dir/lib/chibios/tools/updater" >/dev/null 2>&1 + for f in $(find . -name 'update_mcuconf*') ; do + upgrade_conf_files_generic mcuconf.h $f + done + popd >/dev/null 2>&1 +} + +update_staged_files() { + shead "Updating staged files with ChibiOS upgraded versions..." + for file in $(find "$qmk_firmware_dir/util/chibios-upgrade-staging" -type f) ; do + local relpath=$(realpath --relative-to="$qmk_firmware_dir/util/chibios-upgrade-staging" "$file") + sinfo "Updating staged file: $relpath" + cp "$qmk_firmware_dir/$relpath" "$qmk_firmware_dir/util/chibios-upgrade-staging/$relpath" + done +} + +havecmd fmpp || build_fmpp +revert_chibi_files "$qmk_firmware_dir" +populate_file_hashes "$qmk_firmware_dir" + +shead "Showing duplicate ChibiOS files..." +for K in "${!file_hashes[@]}"; do + sinfo ${K#file_}: + for V in ${file_hashes[$K]}; do + sinfo " $V" + done +done + +if [ "${1:-}" == "-r" ] ; then + exit 0 +fi + +swap_mcuconf_f3xx_f303 + +deploy_staged_files +upgrade_mcuconf_files +upgrade_chconf_files +upgrade_halconf_files +update_staged_files |