From 5fd68266f5d90b2c7045f44f678d71b782907752 Mon Sep 17 00:00:00 2001 From: skullydazed Date: Fri, 29 Sep 2017 16:17:30 -0700 Subject: Clueboard 60% support (#1746) * initial clueboard_60 support * LED lighting support * fix the clueboard->clueboard_66 rename * Add layout support to clueboard_60 * Fix the 60_iso layout so it's actually iso * add a default keymap for AEK layout * fix clueboard_17 * Fixup the ISO layouts * Fix the `wait_ms()/wait_us()` definitions for chibios * Fix up the wait_ms/wait_us hack. Reduce stack size. * Add a missing #include "wait.h" * commit files that should have already been comitted --- tmk_core/chibios.mk | 4 ++-- tmk_core/common/chibios/bootloader.c | 18 ++++++++++++++++-- tmk_core/common/chibios/suspend.c | 5 +++-- tmk_core/common/wait.h | 11 ++++++++--- tmk_core/protocol/chibios/main.c | 32 ++++++++++++++++---------------- tmk_core/protocol/chibios/usb_main.c | 21 +++++++++++++++------ tmk_core/rules.mk | 2 +- 7 files changed, 61 insertions(+), 32 deletions(-) (limited to 'tmk_core') diff --git a/tmk_core/chibios.mk b/tmk_core/chibios.mk index 61e0a847d..c938eaeb9 100644 --- a/tmk_core/chibios.mk +++ b/tmk_core/chibios.mk @@ -143,7 +143,7 @@ MCUFLAGS = -mcpu=$(MCU) DEBUG = gdb -DFU_ARGS = +DFU_ARGS ?= ifneq ("$(SERIAL)","") DFU_ARGS += -S $(SERIAL) endif @@ -157,4 +157,4 @@ dfu-util: $(BUILD_DIR)/$(TARGET).bin sizeafter $(DFU_UTIL) $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin bin: $(BUILD_DIR)/$(TARGET).bin sizeafter - $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin; \ No newline at end of file + $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin; diff --git a/tmk_core/common/chibios/bootloader.c b/tmk_core/common/chibios/bootloader.c index 8a533ab6f..fc17fca1b 100644 --- a/tmk_core/common/chibios/bootloader.c +++ b/tmk_core/common/chibios/bootloader.c @@ -16,6 +16,19 @@ void bootloader_jump(void) { NVIC_SystemReset(); } +#elif defined(STM32F3XX) +/* This code should be checked whether it runs correctly on platforms. + * It was added for clueboard60 BUT HAS NOT BEEN TESTED. + * FIXME - Test this + */ +#define SYMVAL(sym) (uint32_t)(((uint8_t *)&(sym)) - ((uint8_t *)0)) +extern uint32_t __ram0_end__; + +void bootloader_jump(void) { + *((unsigned long *)(SYMVAL(__ram0_end__) - 4)) = 0xDEADBEEF; // set magic flag => reset handler will jump into boot loader + NVIC_SystemReset(); +} + #else /* defined(STM32F0XX) */ #error Check that the bootloader code works on your platform and add it to bootloader.c! #endif /* defined(STM32F0XX) */ @@ -35,8 +48,9 @@ void bootloader_jump(void) { #else /* defined(KIIBOHD_BOOTLOADER) */ /* Default for Kinetis - expecting an ARM Teensy */ +#include "wait.h" void bootloader_jump(void) { - chThdSleepMilliseconds(100); + wait_ms(100); __BKPT(0); } #endif /* defined(KIIBOHD_BOOTLOADER) */ @@ -44,4 +58,4 @@ void bootloader_jump(void) { #else /* neither STM32 nor KINETIS */ __attribute__((weak)) void bootloader_jump(void) {} -#endif \ No newline at end of file +#endif diff --git a/tmk_core/common/chibios/suspend.c b/tmk_core/common/chibios/suspend.c index 6ca16034f..7c3c75387 100644 --- a/tmk_core/common/chibios/suspend.c +++ b/tmk_core/common/chibios/suspend.c @@ -10,10 +10,11 @@ #include "host.h" #include "backlight.h" #include "suspend.h" +#include "wait.h" void suspend_idle(uint8_t time) { // TODO: this is not used anywhere - what units is 'time' in? - chThdSleepMilliseconds(time); + wait_ms(time); } void suspend_power_down(void) { @@ -24,7 +25,7 @@ void suspend_power_down(void) { // on AVR, this enables the watchdog for 15ms (max), and goes to // SLEEP_MODE_PWR_DOWN - chThdSleepMilliseconds(17); + wait_ms(17); } __attribute__ ((weak)) void matrix_power_up(void) {} diff --git a/tmk_core/common/wait.h b/tmk_core/common/wait.h index bdcb3f2a4..553f5243f 100644 --- a/tmk_core/common/wait.h +++ b/tmk_core/common/wait.h @@ -11,10 +11,15 @@ extern "C" { # include # define wait_ms(ms) _delay_ms(ms) # define wait_us(us) _delay_us(us) -#elif defined(PROTOCOL_CHIBIOS) +#elif defined PROTOCOL_CHIBIOS # include "ch.h" -# define wait_ms(ms) chThdSleepMilliseconds(ms) -# define wait_us(us) chThdSleepMicroseconds(us) +# if defined(STM32F3xx_MCUCONF) +# define wait_ms(ms) chSysPolledDelayX(MS2RTC(STM32_HCLK, (ms))) +# define wait_us(us) chSysPolledDelayX(US2RTC(STM32_HCLK, (us))) +# else +# define wait_ms(ms) chThdSleepMilliseconds(ms) +# define wait_us(us) chThdSleepMicroseconds(us) +# endif #elif defined(__arm__) # include "wait_api.h" #else // Unit tests diff --git a/tmk_core/protocol/chibios/main.c b/tmk_core/protocol/chibios/main.c index b0eb9aef8..7138b5535 100644 --- a/tmk_core/protocol/chibios/main.c +++ b/tmk_core/protocol/chibios/main.c @@ -42,7 +42,7 @@ #include "visualizer/visualizer.h" #endif #include "suspend.h" - +#include "wait.h" /* ------------------------- * TMK host driver defs @@ -70,19 +70,19 @@ host_driver_t chibios_driver = { * Amber LED blinker thread, times are in milliseconds. */ /* set this variable to non-zero anywhere to blink once */ -// uint8_t blinkLed = 0; -// static THD_WORKING_AREA(waBlinkerThread, 128); -// static THD_FUNCTION(blinkerThread, arg) { +// static THD_WORKING_AREA(waThread1, 128); +// static THD_FUNCTION(Thread1, arg) { + // (void)arg; -// chRegSetThreadName("blinkOrange"); -// while(true) { -// if(blinkLed) { -// blinkLed = 0; -// palSetPad(TEENSY_PIN13_IOPORT, TEENSY_PIN13); -// chThdSleepMilliseconds(100); -// palClearPad(TEENSY_PIN13_IOPORT, TEENSY_PIN13); -// } -// chThdSleepMilliseconds(100); +// chRegSetThreadName("blinker"); +// while (true) { +// systime_t time; + +// time = USB_DRIVER.state == USB_ACTIVE ? 250 : 500; +// palClearLine(LINE_CAPS_LOCK); +// chSysPolledDelayX(MS2RTC(STM32_HCLK, time)); +// palSetLine(LINE_CAPS_LOCK); +// chSysPolledDelayX(MS2RTC(STM32_HCLK, time)); // } // } @@ -96,7 +96,7 @@ int main(void) { chSysInit(); // TESTING - // chThdCreateStatic(waBlinkerThread, sizeof(waBlinkerThread), NORMALPRIO, blinkerThread, NULL); + // chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); /* Init USB */ init_usb_driver(&USB_DRIVER); @@ -128,7 +128,7 @@ int main(void) { } serial_link_update(); #endif - chThdSleepMilliseconds(50); + wait_ms(50); } /* Do need to wait here! @@ -136,7 +136,7 @@ int main(void) { * before the USB is completely ready, which sometimes causes * HardFaults. */ - chThdSleepMilliseconds(50); + wait_ms(50); print("USB configured.\n"); diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c index d0c72c46c..59edab9bd 100644 --- a/tmk_core/protocol/chibios/usb_main.c +++ b/tmk_core/protocol/chibios/usb_main.c @@ -27,6 +27,7 @@ #include "sleep_led.h" #include "led.h" #endif +#include "wait.h" #ifdef NKRO_ENABLE #include "keycode_config.h" @@ -39,6 +40,14 @@ * --------------------------------------------------------- */ +#ifndef usb_lld_connect_bus + #define usb_lld_connect_bus(usbp) +#endif + +#ifndef usb_lld_disconnect_bus + #define usb_lld_disconnect_bus(usbp) +#endif + uint8_t keyboard_idle __attribute__((aligned(2))) = 0; uint8_t keyboard_protocol __attribute__((aligned(2))) = 1; uint16_t keyboard_led_stats __attribute__((aligned(2))) = 0; @@ -1017,7 +1026,7 @@ void init_usb_driver(USBDriver *usbp) { * after a reset. */ usbDisconnectBus(usbp); - chThdSleepMilliseconds(1500); + wait_ms(1500); usbStart(usbp, &usbcfg); usbConnectBus(usbp); @@ -1037,16 +1046,16 @@ void send_remote_wakeup(USBDriver *usbp) { #if defined(K20x) || defined(KL2x) #if KINETIS_USB_USE_USB0 USB0->CTL |= USBx_CTL_RESUME; - chThdSleepMilliseconds(15); + wait_ms(15); USB0->CTL &= ~USBx_CTL_RESUME; #endif /* KINETIS_USB_USE_USB0 */ -#elif defined(STM32F0XX) || defined(STM32F1XX) /* K20x || KL2x */ +#elif defined(STM32F0XX) || defined(STM32F1XX) || defined(STM32F3XX) /* End K20x || KL2x */ STM32_USB->CNTR |= CNTR_RESUME; - chThdSleepMilliseconds(15); + wait_ms(15); STM32_USB->CNTR &= ~CNTR_RESUME; -#else /* STM32F0XX || STM32F1XX */ +#else /* End STM32F0XX || STM32F1XX || STM32F3XX */ #warning Sending remote wakeup packet not implemented for your platform. -#endif /* K20x || KL2x */ +#endif } /* --------------------------------------------------------- diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index aef4d5e55..73ffeaac1 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -385,4 +385,4 @@ $(eval $(foreach OUTPUT,$(OUTPUTS),$(shell mkdir -p $(OUTPUT) 2>/dev/null))) .PHONY : all finish sizebefore sizeafter qmkversion \ gccversion build elf hex eep lss sym coff extcoff \ clean clean_list debug gdb-config show_path \ -program teensy dfu flip dfu-ee flip-ee dfu-start \ No newline at end of file +program teensy dfu flip dfu-ee flip-ee dfu-start -- cgit v1.2.3-24-g4f1b