diff options
| author | skullydazed <skullydazed@users.noreply.github.com> | 2017-09-29 16:17:30 -0700 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-09-29 16:17:30 -0700 | 
| commit | 5fd68266f5d90b2c7045f44f678d71b782907752 (patch) | |
| tree | 443e70a3f0dcebadd39a0c96857130546cc690a7 /tmk_core | |
| parent | b736f25e85171fceb06f01cf45a45f84dd0a4911 (diff) | |
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
Diffstat (limited to 'tmk_core')
| -rw-r--r-- | tmk_core/chibios.mk | 4 | ||||
| -rw-r--r-- | tmk_core/common/chibios/bootloader.c | 18 | ||||
| -rw-r--r-- | tmk_core/common/chibios/suspend.c | 5 | ||||
| -rw-r--r-- | tmk_core/common/wait.h | 11 | ||||
| -rw-r--r-- | tmk_core/protocol/chibios/main.c | 32 | ||||
| -rw-r--r-- | tmk_core/protocol/chibios/usb_main.c | 21 | ||||
| -rw-r--r-- | tmk_core/rules.mk | 2 | 
7 files changed, 61 insertions, 32 deletions
| diff --git a/tmk_core/chibios.mk b/tmk_core/chibios.mk index 61e0a847d7..c938eaeb90 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 8a533ab6f6..fc17fca1b6 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 6ca16034f3..7c3c75387d 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 bdcb3f2a41..553f5243f1 100644 --- a/tmk_core/common/wait.h +++ b/tmk_core/common/wait.h @@ -11,10 +11,15 @@ extern "C" {  #   include <util/delay.h>  #   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 b0eb9aef81..7138b5535c 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 d0c72c46c7..59edab9bd2 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 aef4d5e552..73ffeaac1e 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  | 
