]> git.donarmstrong.com Git - tmk_firmware.git/commitdiff
Port action_* to mbed
authortmk <nobody@nowhere>
Mon, 16 Jun 2014 15:57:59 +0000 (00:57 +0900)
committertmk <nobody@nowhere>
Wed, 30 Jul 2014 05:07:43 +0000 (14:07 +0900)
21 files changed:
common.mk
common/action.c
common/action.h
common/action_layer.c
common/action_layer.h
common/action_macro.c
common/action_macro.h
common/action_util.c
common/action_util.h
common/bootmagic.c
common/host.c
common/keyboard.c
common/keyboard.h
common/keymap.c
common/keymap.h
common/print.h
common/report.h
common/wait.h [new file with mode: 0644]
keyboard/mbed_onekey/HIDKeyboard.h
keyboard/mbed_onekey/Makefile
keyboard/mbed_onekey/common.mk

index 9d58fa2145ffb8f3cdb14392c5bda2aa05be7807..9b5ef0ea88f6e420d1ec70cc3145c356ea7ab172 100644 (file)
--- a/common.mk
+++ b/common.mk
@@ -11,7 +11,7 @@ SRC +=        $(COMMON_DIR)/host.c \
        $(COMMON_DIR)/print.c \
        $(COMMON_DIR)/bootloader.c \
        $(COMMON_DIR)/suspend.c \
-       $(COMMON_DIR)/xprintf.S \
+       $(COMMON_DIR)/avr/xprintf.S \
        $(COMMON_DIR)/util.c
 
 
index fddb97c508dbd96865c73ef08bfd68cc1739b1ac..94498fe6cb33e456069537ab9feffc721016e52c 100644 (file)
@@ -499,7 +499,7 @@ void clear_keyboard_but_mods(void)
 #endif
 }
 
-bool is_tap_key(key_t key)
+bool is_tap_key(keypos_t key)
 {
     action_t action = layer_switch_get_action(key);
 
index 077711c231a3fffb0640fa35784323724a555cf2..8a4736d7bc19cbb833481649b467cc4da109e1ac 100644 (file)
@@ -25,6 +25,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "action_macro.h"
 
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* tapping count and state */
 typedef struct {
     bool    interrupted :1;
@@ -42,12 +46,11 @@ typedef struct {
 #endif
 } keyrecord_t;
 
-
 /* Execute action per keyevent */
 void action_exec(keyevent_t event);
 
 /* action for key */
-action_t action_for_key(uint8_t layer, key_t key);
+action_t action_for_key(uint8_t layer, keypos_t key);
 
 /* macro */
 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt);
@@ -65,11 +68,15 @@ void unregister_mods(uint8_t mods);
 void clear_keyboard(void);
 void clear_keyboard_but_mods(void);
 void layer_switch(uint8_t new_layer);
-bool is_tap_key(key_t key);
+bool is_tap_key(keypos_t key);
 
 /* debug */
 void debug_event(keyevent_t event);
 void debug_record(keyrecord_t record);
 void debug_action(action_t action);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif  /* ACTION_H */
index 526e24d5397aedf6e5e9d1eb4204ee92ca5cad2d..c535615f44d44a8fa669e1f86825142b9c56b616 100644 (file)
@@ -112,7 +112,7 @@ void layer_debug(void)
 
 
 
-action_t layer_switch_get_action(key_t key)
+action_t layer_switch_get_action(keypos_t key)
 {
     action_t action;
     action.code = ACTION_TRANSPARENT;
index 034e00027b3ee07586edd30f6004ec48d88a3e5b..b6da353cfdbe851d6bfb5689b6173135b8697d84 100644 (file)
@@ -72,6 +72,6 @@ void layer_xor(uint32_t state);
 
 
 /* return action depending on current layer status */
-action_t layer_switch_get_action(key_t key);
+action_t layer_switch_get_action(keypos_t key);
 
 #endif
index d85aee3796e58a85196fae6765f3025be53d84c7..ba93fc8b2324b7cb96e9a5744a21eee89c3f588d 100644 (file)
@@ -14,10 +14,10 @@ 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 <util/delay.h>
 #include "action.h"
 #include "action_util.h"
 #include "action_macro.h"
+#include "wait.h"
 
 #ifdef DEBUG_ACTION
 #include "debug.h"
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #ifndef NO_ACTION_MACRO
 
-#define MACRO_READ()  (macro = pgm_read_byte(macro_p++))
+#define MACRO_READ()  (macro = MACRO_GET(macro_p++))
 void action_macro_play(const macro_t *macro_p)
 {
     macro_t macro = END;
@@ -58,7 +58,7 @@ void action_macro_play(const macro_t *macro_p)
             case WAIT:
                 MACRO_READ();
                 dprintf("WAIT(%u)\n", macro);
-                { uint8_t ms = macro; while (ms--) _delay_ms(1); }
+                { uint8_t ms = macro; while (ms--) wait_ms(1); }
                 break;
             case INTERVAL:
                 interval = MACRO_READ();
@@ -77,7 +77,7 @@ void action_macro_play(const macro_t *macro_p)
                 return;
         }
         // interval
-        { uint8_t ms = interval; while (ms--) _delay_ms(1); }
+        { uint8_t ms = interval; while (ms--) wait_ms(1); }
     }
 }
 #endif
index 621826308858c93b589013d25e4330a84683046d..aedc32ec6b2c428e53cd24d3d5c105eb1f1143eb 100644 (file)
@@ -17,12 +17,12 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #ifndef ACTION_MACRO_H
 #define ACTION_MACRO_H
 #include <stdint.h>
-#include <avr/pgmspace.h>
+#include "progmem.h"
 
 
-#define MACRO_NONE  0
-#define MACRO(...) ({ static const macro_t __m[] PROGMEM = { __VA_ARGS__ }; &__m[0]; })
-
+#define MACRO_NONE      0
+#define MACRO(...)      ({ static const macro_t __m[] PROGMEM = { __VA_ARGS__ }; &__m[0]; })
+#define MACRO_GET(p)    pgm_read_byte(p)
 
 typedef uint8_t macro_t;
 
index 5f44b3812c00e232d3e8594e2deacf6faf62e6f0..dbee630d18175127e4d3aa333245ef2875d74dc9 100644 (file)
@@ -31,8 +31,8 @@ static uint8_t real_mods = 0;
 static uint8_t weak_mods = 0;
 
 #ifdef USB_6KRO_ENABLE
-#define RO_ADD(a, b) ((a + b) % REPORT_KEYS)
-#define RO_SUB(a, b) ((a - b + REPORT_KEYS) % REPORT_KEYS)
+#define RO_ADD(a, b) ((a + b) % KEYBOARD_REPORT_KEYS)
+#define RO_SUB(a, b) ((a - b + KEYBOARD_REPORT_KEYS) % KEYBOARD_REPORT_KEYS)
 #define RO_INC(a) RO_ADD(a, 1)
 #define RO_DEC(a) RO_SUB(a, 1)
 static int8_t cb_head = 0;
@@ -98,7 +98,7 @@ void del_key(uint8_t key)
 void clear_keys(void)
 {
     // not clear mods
-    for (int8_t i = 1; i < REPORT_SIZE; i++) {
+    for (int8_t i = 1; i < KEYBOARD_REPORT_SIZE; i++) {
         keyboard_report->raw[i] = 0;
     }
 }
@@ -145,7 +145,7 @@ void clear_oneshot_mods(void)
 uint8_t has_anykey(void)
 {
     uint8_t cnt = 0;
-    for (uint8_t i = 1; i < REPORT_SIZE; i++) {
+    for (uint8_t i = 1; i < KEYBOARD_REPORT_SIZE; i++) {
         if (keyboard_report->raw[i])
             cnt++;
     }
@@ -162,7 +162,7 @@ uint8_t get_first_key(void)
 #ifdef NKRO_ENABLE
     if (keyboard_nkro) {
         uint8_t i = 0;
-        for (; i < REPORT_BITS && !keyboard_report->nkro.bits[i]; i++)
+        for (; i < KEYBOARD_REPORT_BITS && !keyboard_report->nkro.bits[i]; i++)
             ;
         return i<<3 | biton(keyboard_report->nkro.bits[i]);
     }
@@ -234,7 +234,7 @@ static inline void add_key_byte(uint8_t code)
 #else
     int8_t i = 0;
     int8_t empty = -1;
-    for (; i < REPORT_KEYS; i++) {
+    for (; i < KEYBOARD_REPORT_KEYS; i++) {
         if (keyboard_report->keys[i] == code) {
             break;
         }
@@ -242,7 +242,7 @@ static inline void add_key_byte(uint8_t code)
             empty = i;
         }
     }
-    if (i == REPORT_KEYS) {
+    if (i == KEYBOARD_REPORT_KEYS) {
         if (empty != -1) {
             keyboard_report->keys[empty] = code;
         }
@@ -278,7 +278,7 @@ static inline void del_key_byte(uint8_t code)
         } while (i != cb_tail);
     }
 #else
-    for (uint8_t i = 0; i < REPORT_KEYS; i++) {
+    for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
         if (keyboard_report->keys[i] == code) {
             keyboard_report->keys[i] = 0;
         }
@@ -289,7 +289,7 @@ static inline void del_key_byte(uint8_t code)
 #ifdef NKRO_ENABLE
 static inline void add_key_bit(uint8_t code)
 {
-    if ((code>>3) < REPORT_BITS) {
+    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);
@@ -298,7 +298,7 @@ static inline void add_key_bit(uint8_t code)
 
 static inline void del_key_bit(uint8_t code)
 {
-    if ((code>>3) < REPORT_BITS) {
+    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);
index f9d3161a800200be9b808c2a799e4f930107e095..a955638b46d8ad84c45c297b2a5f431f506aa85a 100644 (file)
@@ -20,6 +20,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <stdint.h>
 #include "report.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 extern report_keyboard_t *keyboard_report;
 
 void send_keyboard_report(void);
@@ -54,4 +58,9 @@ void oneshot_disable(void);
 uint8_t has_anykey(void);
 uint8_t has_anymod(void);
 uint8_t get_first_key(void);
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif
index 642d5face42e18bcc79fc17ae172d4224a49f98d..b002a585622029f998a94adf8d95d2fa0ce7672b 100644 (file)
@@ -111,7 +111,7 @@ static bool scan_keycode(uint8_t keycode)
         matrix_row_t matrix_row = matrix_get_row(r);
         for (uint8_t c = 0; c < MATRIX_COLS; c++) {
             if (matrix_row & ((matrix_row_t)1<<c)) {
-                if (keycode == keymap_key_to_keycode(0, (key_t){ .row = r, .col = c })) {
+                if (keycode == keymap_key_to_keycode(0, (keypos_t){ .row = r, .col = c })) {
                     return true;
                 }
             }
index 2e56971bddb6a9abca480f3d7764a0b0585dc136..e9b791670670eed07b9956495c1fc38dde989bab 100644 (file)
@@ -16,7 +16,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include <stdint.h>
-#include <avr/interrupt.h>
+//#include <avr/interrupt.h>
 #include "keycode.h"
 #include "host.h"
 #include "util.h"
@@ -55,7 +55,7 @@ void host_keyboard_send(report_keyboard_t *report)
 
     if (debug_keyboard) {
         dprint("keyboard_report: ");
-        for (uint8_t i = 0; i < REPORT_SIZE; i++) {
+        for (uint8_t i = 0; i < KEYBOARD_REPORT_SIZE; i++) {
             dprintf("%02X ", report->raw[i]);
         }
         dprint("\n");
index 2b66f20a013e4c0389d74b422d00c870b41336ab..b71d5bf13c9a0050de280807b2dbd0826377bad1 100644 (file)
@@ -100,7 +100,7 @@ void keyboard_task(void)
             for (uint8_t c = 0; c < MATRIX_COLS; c++) {
                 if (matrix_change & ((matrix_row_t)1<<c)) {
                     action_exec((keyevent_t){
-                        .key = (key_t){ .row = r, .col = c },
+                        .key = (keypos_t){ .row = r, .col = c },
                         .pressed = (matrix_row & ((matrix_row_t)1<<c)),
                         .time = (timer_read() | 1) /* time should not be 0 */
                     });
index d1a922420b8483e01c6f50eedfcae4c83e96b711..60f8a89d1d3a5703fe686286aaed8b3cc6d50338 100644 (file)
@@ -30,16 +30,16 @@ extern "C" {
 typedef struct {
     uint8_t col;
     uint8_t row;
-} key_t;
+} keypos_t;
 
 /* key event */
 typedef struct {
-    key_t    key;
+    keypos_t key;
     bool     pressed;
     uint16_t time;
 } keyevent_t;
 
-/* equivalent test of key_t */
+/* equivalent test of keypos_t */
 #define KEYEQ(keya, keyb)       ((keya).row == (keyb).row && (keya).col == (keyb).col)
 
 /* Rules for No Event:
@@ -52,7 +52,7 @@ static inline bool IS_RELEASED(keyevent_t event) { return (!IS_NOEVENT(event) &&
 
 /* Tick event */
 #define TICK                    (keyevent_t){           \
-    .key = (key_t){ .row = 255, .col = 255 },           \
+    .key = (keypos_t){ .row = 255, .col = 255 },           \
     .pressed = false,                                   \
     .time = (timer_read() | 1)                          \
 }
index bfb8ffac1a593b1cd06a6364db4ce3c2f151df31..0df2e2edff02024ccbe15d0a927c4e205e2e44ed 100644 (file)
@@ -28,7 +28,7 @@ static action_t keycode_to_action(uint8_t keycode);
 
 
 /* converts key to action */
-action_t action_for_key(uint8_t layer, key_t key)
+action_t action_for_key(uint8_t layer, keypos_t key)
 {
     uint8_t keycode = keymap_key_to_keycode(layer, key);
     switch (keycode) {
@@ -156,7 +156,7 @@ static action_t keycode_to_action(uint8_t keycode)
  *      Consider using new keymap API instead.
  */
 __attribute__ ((weak))
-uint8_t keymap_key_to_keycode(uint8_t layer, key_t key)
+uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
 {
     return keymap_get_keycode(layer, key.row, key.col);
 }
index 4c3019a364c2dfad5b6194409bf1bacfb71c3a64..e1a6f992e64cf47e0201790ddce1b8f069c6c06a 100644 (file)
@@ -43,7 +43,7 @@ keymap_config_t keymap_config;
 
 
 /* translates key to keycode */
-uint8_t keymap_key_to_keycode(uint8_t layer, key_t key);
+uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key);
 
 /* translates Fn keycode to action */
 action_t keymap_fn_to_action(uint8_t keycode);
index 4001bcf1b5de6d5005cdc1adc5581b271202d6e2..a8dbbc020abc5610bc769b4dfb5e1123f6b57f93 100644 (file)
@@ -37,7 +37,7 @@
 
 #if defined(__AVR__)
 
-#include "xprintf.h"
+#include "avr/xprintf.h"
 
 
 // TODO: avoid collision with arduino/Print.h
index 71543cc23fa341ad77c2453913e6d0f9b4b34224..62190469a42bbd10d1c2ee82a26c4fb6a84d8293 100644 (file)
@@ -74,19 +74,19 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* key report size(NKRO or boot mode) */
 #if defined(PROTOCOL_PJRC) && defined(NKRO_ENABLE)
 #   include "usb.h"
-#   define REPORT_SIZE KBD2_SIZE
-#   define REPORT_KEYS (KBD2_SIZE - 2)
-#   define REPORT_BITS (KBD2_SIZE - 1)
+#   define KEYBOARD_REPORT_SIZE KBD2_SIZE
+#   define KEYBOARD_REPORT_KEYS (KBD2_SIZE - 2)
+#   define KEYBOARD_REPORT_BITS (KBD2_SIZE - 1)
 
 #elif defined(PROTOCOL_LUFA) && defined(NKRO_ENABLE)
 #   include "protocol/lufa/descriptor.h"
-#   define REPORT_SIZE NKRO_EPSIZE
-#   define REPORT_KEYS (NKRO_EPSIZE - 2)
-#   define REPORT_BITS (NKRO_EPSIZE - 1)
+#   define KEYBOARD_REPORT_SIZE NKRO_EPSIZE
+#   define KEYBOARD_REPORT_KEYS (NKRO_EPSIZE - 2)
+#   define KEYBOARD_REPORT_BITS (NKRO_EPSIZE - 1)
 
 #else
-#   define REPORT_SIZE 8
-#   define REPORT_KEYS 6
+#   define KEYBOARD_REPORT_SIZE 8
+#   define KEYBOARD_REPORT_KEYS 6
 #endif
 
 
@@ -115,16 +115,16 @@ extern "C" {
  *
  */
 typedef union {
-    uint8_t raw[REPORT_SIZE];
+    uint8_t raw[KEYBOARD_REPORT_SIZE];
     struct {
         uint8_t mods;
         uint8_t reserved;
-        uint8_t keys[REPORT_KEYS];
+        uint8_t keys[KEYBOARD_REPORT_KEYS];
     };
 #ifdef NKRO_ENABLE
     struct {
         uint8_t mods;
-        uint8_t bits[REPORT_BITS];
+        uint8_t bits[KEYBOARD_REPORT_BITS];
     } nkro;
 #endif
 } __attribute__ ((packed)) report_keyboard_t;
diff --git a/common/wait.h b/common/wait.h
new file mode 100644 (file)
index 0000000..40d00b0
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef WAIT_H
+#define WAIT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(__AVR__)
+#   include <util/delay.h>
+#   define wait_ms(ms)  _delay_ms(ms)
+#   define wait_us(us)  _delay_us(us)
+#elif defined(__arm__)
+#   include "wait_api.h"
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
index b00c97b9b0ec448bb4ecc79de6e81fe01a66b926..4ebe610a6379bafa65480a1412720aca96d66888 100644 (file)
@@ -3,16 +3,7 @@
 #include "stdint.h"
 #include "stdbool.h"
 #include "USBHID.h"
-
-
-typedef union {
-    uint8_t raw[8];
-    struct {
-        uint8_t mods;
-        uint8_t reserved;
-        uint8_t keys[6];
-    };
-} __attribute__ ((packed)) report_keyboard_t;
+#include "report.h"
 
 
 class HIDKeyboard : public USBDevice {
index e194052c1091c849330aa55bd70b4ee12465c54c..1bc91bc7e7d77be2fcaef4c967e6d5c2571dbcac 100644 (file)
@@ -15,6 +15,7 @@ OBJDIR = ./build
 
 OBJECTS = \
        $(OBJDIR)/./HIDKeyboard.o \
+       $(OBJDIR)/./mbed_driver.o \
        $(OBJDIR)/./main.o
 
 SYS_OBJECTS = 
index 101a82205296889f089bb8bac936e06bc9dea386..6eb7f7699578bd23f9fde1268d424079f4a62ab9 100644 (file)
@@ -2,20 +2,20 @@ COMMON_DIR = common
 OBJECTS += \
        $(OBJDIR)/$(COMMON_DIR)/mbed/timer.o \
        $(OBJDIR)/$(COMMON_DIR)/mbed/xprintf.o \
+       $(OBJDIR)/$(COMMON_DIR)/action.o \
+       $(OBJDIR)/$(COMMON_DIR)/action_tapping.o \
+       $(OBJDIR)/$(COMMON_DIR)/action_macro.o \
+       $(OBJDIR)/$(COMMON_DIR)/action_layer.o \
+       $(OBJDIR)/$(COMMON_DIR)/action_util.o \
+       $(OBJDIR)/$(COMMON_DIR)/host.o \
 
 INCLUDE_PATHS += \
        -I$(TMK_DIR)/$(COMMON_DIR)
 
 
 
-#      $(OBJDIR)/$(COMMON_DIR)/action.o \
 
-#      $(OBJDIR)/$(COMMON_DIR)/host.o \
 #      $(OBJDIR)/$(COMMON_DIR)/keyboard.o \
-#      $(OBJDIR)/$(COMMON_DIR)/action_tapping.o \
-#      $(OBJDIR)/$(COMMON_DIR)/action_macro.o \
-#      $(OBJDIR)/$(COMMON_DIR)/action_layer.o \
-#      $(OBJDIR)/$(COMMON_DIR)/action_util.o \
 #      $(OBJDIR)/$(COMMON_DIR)/keymap.o \
 #      $(OBJDIR)/$(COMMON_DIR)/bootloader.o \
 #      $(OBJDIR)/$(COMMON_DIR)/suspend.o \