From 017458a07bda3f4b2604d079ec65ef607a1a1e57 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 17 Jun 2017 15:19:15 +0300 Subject: Move functionality from action_util to report The functions also takes report_kebyoard_t parameters, so that they can be used elsewhere. --- tmk_core/common/action_util.c | 176 ++---------------------------------------- 1 file changed, 5 insertions(+), 171 deletions(-) (limited to 'tmk_core/common/action_util.c') diff --git a/tmk_core/common/action_util.c b/tmk_core/common/action_util.c index 77848c092..511649676 100644 --- a/tmk_core/common/action_util.c +++ b/tmk_core/common/action_util.c @@ -25,13 +25,6 @@ along with this program. If not, see . extern keymap_config_t keymap_config; -static inline void add_key_byte(uint8_t code); -static inline void del_key_byte(uint8_t code); -#ifdef NKRO_ENABLE -static inline void add_key_bit(uint8_t code); -static inline void del_key_bit(uint8_t code); -#endif - static uint8_t real_mods = 0; static uint8_t weak_mods = 0; static uint8_t macro_mods = 0; @@ -134,7 +127,7 @@ void send_keyboard_report(void) { } #endif keyboard_report->mods |= oneshot_mods; - if (has_anykey()) { + if (has_anykey(keyboard_report)) { clear_oneshot_mods(); } } @@ -148,22 +141,22 @@ void add_key(uint8_t key) { #ifdef NKRO_ENABLE if (keyboard_protocol && keymap_config.nkro) { - add_key_bit(key); + add_key_bit(keyboard_report, key); return; } #endif - add_key_byte(key); + add_key_byte(keyboard_report, key); } void del_key(uint8_t key) { #ifdef NKRO_ENABLE if (keyboard_protocol && keymap_config.nkro) { - del_key_bit(key); + del_key_bit(keyboard_report, key); return; } #endif - del_key_byte(key); + del_key_byte(keyboard_report, key); } void clear_keys(void) @@ -221,166 +214,7 @@ uint8_t get_oneshot_mods(void) /* * inspect keyboard state */ -uint8_t has_anykey(void) -{ - uint8_t cnt = 0; - for (uint8_t i = 1; i < KEYBOARD_REPORT_SIZE; i++) { - if (keyboard_report->raw[i]) - cnt++; - } - return cnt; -} - uint8_t has_anymod(void) { return bitpop(real_mods); } - -uint8_t get_first_key(void) -{ -#ifdef NKRO_ENABLE - if (keyboard_protocol && keymap_config.nkro) { - uint8_t i = 0; - for (; i < KEYBOARD_REPORT_BITS && !keyboard_report->nkro.bits[i]; i++) - ; - return i<<3 | biton(keyboard_report->nkro.bits[i]); - } -#endif -#ifdef USB_6KRO_ENABLE - uint8_t i = cb_head; - do { - if (keyboard_report->keys[i] != 0) { - break; - } - i = RO_INC(i); - } while (i != cb_tail); - return keyboard_report->keys[i]; -#else - return keyboard_report->keys[0]; -#endif -} - - - -/* local functions */ -static inline void add_key_byte(uint8_t code) -{ -#ifdef USB_6KRO_ENABLE - int8_t i = cb_head; - int8_t empty = -1; - if (cb_count) { - do { - if (keyboard_report->keys[i] == code) { - return; - } - if (empty == -1 && keyboard_report->keys[i] == 0) { - empty = i; - } - i = RO_INC(i); - } while (i != cb_tail); - if (i == cb_tail) { - if (cb_tail == cb_head) { - // buffer is full - if (empty == -1) { - // pop head when has no empty space - cb_head = RO_INC(cb_head); - cb_count--; - } - else { - // left shift when has empty space - uint8_t offset = 1; - i = RO_INC(empty); - do { - if (keyboard_report->keys[i] != 0) { - keyboard_report->keys[empty] = keyboard_report->keys[i]; - keyboard_report->keys[i] = 0; - empty = RO_INC(empty); - } - else { - offset++; - } - i = RO_INC(i); - } while (i != cb_tail); - cb_tail = RO_SUB(cb_tail, offset); - } - } - } - } - // add to tail - keyboard_report->keys[cb_tail] = code; - cb_tail = RO_INC(cb_tail); - cb_count++; -#else - int8_t i = 0; - int8_t empty = -1; - for (; i < KEYBOARD_REPORT_KEYS; i++) { - if (keyboard_report->keys[i] == code) { - break; - } - if (empty == -1 && keyboard_report->keys[i] == 0) { - empty = i; - } - } - if (i == KEYBOARD_REPORT_KEYS) { - if (empty != -1) { - keyboard_report->keys[empty] = code; - } - } -#endif -} - -static inline void del_key_byte(uint8_t code) -{ -#ifdef USB_6KRO_ENABLE - uint8_t i = cb_head; - if (cb_count) { - do { - if (keyboard_report->keys[i] == code) { - keyboard_report->keys[i] = 0; - cb_count--; - if (cb_count == 0) { - // reset head and tail - cb_tail = cb_head = 0; - } - if (i == RO_DEC(cb_tail)) { - // left shift when next to tail - do { - cb_tail = RO_DEC(cb_tail); - if (keyboard_report->keys[RO_DEC(cb_tail)] != 0) { - break; - } - } while (cb_tail != cb_head); - } - break; - } - i = RO_INC(i); - } while (i != cb_tail); - } -#else - for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) { - if (keyboard_report->keys[i] == code) { - keyboard_report->keys[i] = 0; - } - } -#endif -} - -#ifdef NKRO_ENABLE -static inline void add_key_bit(uint8_t code) -{ - if ((code>>3) < KEYBOARD_REPORT_BITS) { - keyboard_report->nkro.bits[code>>3] |= 1<<(code&7); - } else { - dprintf("add_key_bit: can't add: %02X\n", code); - } -} - -static inline void del_key_bit(uint8_t code) -{ - if ((code>>3) < KEYBOARD_REPORT_BITS) { - keyboard_report->nkro.bits[code>>3] &= ~(1<<(code&7)); - } else { - dprintf("del_key_bit: can't del: %02X\n", code); - } -} -#endif -- cgit v1.2.3 From fb95d86b39074b581455fb35a17477cce79a3738 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 17 Jun 2017 17:55:44 +0300 Subject: Move functions for adding keys from to reports to report.h --- tmk_core/common/action_util.c | 32 -------------------------------- tmk_core/common/action_util.h | 14 +++++++++++--- tmk_core/common/report.c | 30 ++++++++++++++++++++++++++++++ tmk_core/common/report.h | 4 ++++ 4 files changed, 45 insertions(+), 35 deletions(-) (limited to 'tmk_core/common/action_util.c') diff --git a/tmk_core/common/action_util.c b/tmk_core/common/action_util.c index 511649676..f76398fb9 100644 --- a/tmk_core/common/action_util.c +++ b/tmk_core/common/action_util.c @@ -136,38 +136,6 @@ void send_keyboard_report(void) { host_keyboard_send(keyboard_report); } -/* key */ -void add_key(uint8_t key) -{ -#ifdef NKRO_ENABLE - if (keyboard_protocol && keymap_config.nkro) { - add_key_bit(keyboard_report, key); - return; - } -#endif - add_key_byte(keyboard_report, key); -} - -void del_key(uint8_t key) -{ -#ifdef NKRO_ENABLE - if (keyboard_protocol && keymap_config.nkro) { - del_key_bit(keyboard_report, key); - return; - } -#endif - del_key_byte(keyboard_report, key); -} - -void clear_keys(void) -{ - // not clear mods - for (int8_t i = 1; i < KEYBOARD_REPORT_SIZE; i++) { - keyboard_report->raw[i] = 0; - } -} - - /* modifier */ uint8_t get_mods(void) { return real_mods; } void add_mods(uint8_t mods) { real_mods |= mods; } diff --git a/tmk_core/common/action_util.h b/tmk_core/common/action_util.h index 8fb88c0f6..345893151 100644 --- a/tmk_core/common/action_util.h +++ b/tmk_core/common/action_util.h @@ -29,9 +29,17 @@ extern report_keyboard_t *keyboard_report; void send_keyboard_report(void); /* key */ -void add_key(uint8_t key); -void del_key(uint8_t key); -void clear_keys(void); +inline void add_key(uint8_t key) { + add_key_to_report(keyboard_report, key); +} + +inline void del_key(uint8_t key) { + del_key_from_report(keyboard_report, key); +} + +inline void clear_keys(void) { + clear_keys_from_report(keyboard_report); +} /* modifier */ uint8_t get_mods(void); diff --git a/tmk_core/common/report.c b/tmk_core/common/report.c index 0a67b2534..74c6d3fdd 100644 --- a/tmk_core/common/report.c +++ b/tmk_core/common/report.c @@ -175,3 +175,33 @@ void del_key_bit(report_keyboard_t* keyboard_report, uint8_t code) } } #endif + +void add_key_to_report(report_keyboard_t* keyboard_report, int8_t key) +{ +#ifdef NKRO_ENABLE + if (keyboard_protocol && keymap_config.nkro) { + add_key_bit(keyboard_report, key); + return; + } +#endif + add_key_byte(keyboard_report, key); +} + +void del_key_from_report(report_keyboard_t* keyboard_report, uint8_t key) +{ +#ifdef NKRO_ENABLE + if (keyboard_protocol && keymap_config.nkro) { + del_key_bit(keyboard_report, key); + return; + } +#endif + del_key_byte(keyboard_report, key); +} + +void clear_keys_from_report(report_keyboard_t* keyboard_report) +{ + // not clear mods + for (int8_t i = 1; i < KEYBOARD_REPORT_SIZE; i++) { + keyboard_report->raw[i] = 0; + } +} \ No newline at end of file diff --git a/tmk_core/common/report.h b/tmk_core/common/report.h index 30ce80542..899fc524c 100644 --- a/tmk_core/common/report.h +++ b/tmk_core/common/report.h @@ -184,6 +184,10 @@ void add_key_bit(report_keyboard_t* keyboard_report, uint8_t code); void del_key_bit(report_keyboard_t* keyboard_report, uint8_t code); #endif +void add_key_to_report(report_keyboard_t* keyboard_report, int8_t key); +void del_key_from_report(report_keyboard_t* keyboard_report, uint8_t key); +void clear_keys_from_report(report_keyboard_t* keyboard_report); + #ifdef __cplusplus } #endif -- cgit v1.2.3 From 6a76192fa4bb8c5757c32cf3c65c4e7e7f6c7c3e Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 18 Jun 2017 14:39:58 +0300 Subject: Fix problems with undefined inlines in debug mode --- tmk_core/common/action_util.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'tmk_core/common/action_util.c') diff --git a/tmk_core/common/action_util.c b/tmk_core/common/action_util.c index f76398fb9..148162a51 100644 --- a/tmk_core/common/action_util.c +++ b/tmk_core/common/action_util.c @@ -43,6 +43,10 @@ static int8_t cb_count = 0; //report_keyboard_t keyboard_report = {}; report_keyboard_t *keyboard_report = &(report_keyboard_t){}; +extern inline void add_key(uint8_t key); +extern inline void del_key(uint8_t key); +extern inline void clear_keys(void); + #ifndef NO_ACTION_ONESHOT static int8_t oneshot_mods = 0; static int8_t oneshot_locked_mods = 0; -- cgit v1.2.3