From 9a2282157fbdf57ef0a50d4fea7da72505906588 Mon Sep 17 00:00:00 2001 From: tmk Date: Thu, 14 May 2015 15:38:15 +0900 Subject: [PATCH 1/3] ibm4704_usb: Fix interrupt of clock(rising edge) --- converter/ibm4704_usb/config.h | 4 +-- converter/ibm4704_usb/ibm4704.txt | 6 ++-- tmk_core/protocol/ibm4704.c | 47 +++++++++++++++---------------- 3 files changed, 27 insertions(+), 30 deletions(-) diff --git a/converter/ibm4704_usb/config.h b/converter/ibm4704_usb/config.h index 4f267b3b7a..d9d8d39bc0 100644 --- a/converter/ibm4704_usb/config.h +++ b/converter/ibm4704_usb/config.h @@ -51,8 +51,8 @@ along with this program. If not, see . #define IBM4704_DATA_DDR DDRD #define IBM4704_DATA_BIT 0 -/* Pin interrupt on rising edge */ -#define IBM4704_INT_INIT() do { EICRA |= ((1< Date: Sun, 17 May 2015 19:34:34 +0900 Subject: [PATCH 2/3] Add keyboard_setup() and matrix_setup() --- tmk_core/common/avr/suspend.c | 2 ++ tmk_core/common/keyboard.c | 6 ++++++ tmk_core/common/keyboard.h | 8 +++++--- tmk_core/common/matrix.h | 4 +++- tmk_core/protocol/lufa/lufa.c | 9 +++++++-- tmk_core/protocol/pjrc/main.c | 2 ++ 6 files changed, 25 insertions(+), 6 deletions(-) diff --git a/tmk_core/common/avr/suspend.c b/tmk_core/common/avr/suspend.c index 80243f02bc..af99f52b5e 100644 --- a/tmk_core/common/avr/suspend.c +++ b/tmk_core/common/avr/suspend.c @@ -85,6 +85,8 @@ void suspend_power_down(void) power_down(WDTO_15MS); } +__attribute__ ((weak)) void matrix_power_up(void) {} +__attribute__ ((weak)) void matrix_power_down(void) {} bool suspend_wakeup_condition(void) { matrix_power_up(); diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index b03b124d76..eb7b096bed 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -62,6 +62,12 @@ static bool has_ghost_in_row(uint8_t row) #endif +__attribute__ ((weak)) void matrix_setup(void) {} +void keyboard_setup(void) +{ + matrix_setup(); +} + void keyboard_init(void) { timer_init(); diff --git a/tmk_core/common/keyboard.h b/tmk_core/common/keyboard.h index 6442716fc7..7738251b64 100644 --- a/tmk_core/common/keyboard.h +++ b/tmk_core/common/keyboard.h @@ -58,13 +58,15 @@ static inline bool IS_RELEASED(keyevent_t event) { return (!IS_NOEVENT(event) && } +/* it runs once at early stage of startup before keyboard_init. */ +void keyboard_setup(void); +/* it runs once after initializing host side protocol, debug and MCU peripherals. */ void keyboard_init(void); +/* it runs repeatedly in main loop */ void keyboard_task(void); +/* it runs when host LED status is updated */ void keyboard_set_leds(uint8_t leds); -__attribute__ ((weak)) void matrix_power_up(void) {} -__attribute__ ((weak)) void matrix_power_down(void) {} - #ifdef __cplusplus } #endif diff --git a/tmk_core/common/matrix.h b/tmk_core/common/matrix.h index 107ee72653..ec6f8cd431 100644 --- a/tmk_core/common/matrix.h +++ b/tmk_core/common/matrix.h @@ -43,7 +43,9 @@ extern "C" { uint8_t matrix_rows(void); /* number of matrix columns */ uint8_t matrix_cols(void); -/* intialize matrix for scaning. should be called once. */ +/* should be called at early stage of startup before matrix_init.(optional) */ +void matrix_setup(void); +/* intialize matrix for scaning. */ void matrix_init(void); /* scan all key states on matrix */ uint8_t matrix_scan(void); diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index cdfc7bc6ad..391064c9b2 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -544,7 +544,7 @@ int8_t sendchar(uint8_t c) /******************************************************************************* * main ******************************************************************************/ -static void SetupHardware(void) +static void setup_mcu(void) { /* Disable watchdog if enabled by bootloader/fuses */ MCUSR &= ~(1 << WDRF); @@ -552,7 +552,10 @@ static void SetupHardware(void) /* Disable clock division */ clock_prescale_set(clock_div_1); +} +static void setup_usb(void) +{ // Leonardo needs. Without this USB device is not recognized. USB_Disable(); @@ -566,7 +569,9 @@ static void SetupHardware(void) int main(void) __attribute__ ((weak)); int main(void) { - SetupHardware(); + setup_mcu(); + keyboard_setup(); + setup_usb(); sei(); /* wait for USB startup & debug output */ diff --git a/tmk_core/protocol/pjrc/main.c b/tmk_core/protocol/pjrc/main.c index e7bdcc059a..45eb17d4cd 100644 --- a/tmk_core/protocol/pjrc/main.c +++ b/tmk_core/protocol/pjrc/main.c @@ -46,6 +46,8 @@ int main(void) // set for 16 MHz clock CPU_PRESCALE(0); + keyboard_setup(); + // Initialize the USB, and then wait for the host to set configuration. // If the Teensy is powered without a PC connected to the USB port, // this will wait forever. From 80fd3b0b240a8840fbca1cc3cc70e76f5b52b888 Mon Sep 17 00:00:00 2001 From: tmk Date: Tue, 19 May 2015 00:32:58 +0900 Subject: [PATCH 3/3] ibm4704_usb: Fix protocol handling --- converter/ibm4704_usb/README.md | 1 + converter/ibm4704_usb/config.h | 2 +- converter/ibm4704_usb/ibm4704.txt | 5 +++-- converter/ibm4704_usb/matrix.c | 30 +++++++++++++----------------- tmk_core/protocol/ibm4704.c | 20 +++++++++++--------- 5 files changed, 29 insertions(+), 29 deletions(-) diff --git a/converter/ibm4704_usb/README.md b/converter/ibm4704_usb/README.md index 25b72ba671..15c826ab8b 100644 --- a/converter/ibm4704_usb/README.md +++ b/converter/ibm4704_usb/README.md @@ -8,6 +8,7 @@ Keyboard initialization process takes a few seconds at start up. During that you Update ------ 2015/05/05 Added keymaps for 107-key, 77-key and 50-key. Thanks, orihalcon @ geekhack! +2015/05/19 Fixed a protocol handling bug. diff --git a/converter/ibm4704_usb/config.h b/converter/ibm4704_usb/config.h index d9d8d39bc0..2fee10fd61 100644 --- a/converter/ibm4704_usb/config.h +++ b/converter/ibm4704_usb/config.h @@ -53,7 +53,7 @@ along with this program. If not, see . /* Pin interrupt on rising edge of clock */ #define IBM4704_INT_INIT() do { EICRA |= ((1<