diff options
| -rw-r--r-- | common/host.c | 8 | ||||
| -rw-r--r-- | common/host.h | 1 | ||||
| -rw-r--r-- | common/keyboard.c | 122 | ||||
| -rw-r--r-- | common/mousekey.c | 7 | ||||
| -rw-r--r-- | common/usb_keycodes.h | 41 |
5 files changed, 141 insertions, 38 deletions
diff --git a/common/host.c b/common/host.c index fddd5b662..0a03807f7 100644 --- a/common/host.c +++ b/common/host.c | |||
| @@ -69,6 +69,14 @@ void host_unregister_key(uint8_t key) | |||
| 69 | host_send_keyboard_report(); | 69 | host_send_keyboard_report(); |
| 70 | } | 70 | } |
| 71 | 71 | ||
| 72 | void host_clear_all_keys_but_mods(void) | ||
| 73 | { | ||
| 74 | for (int8_t i = 0; i < REPORT_KEYS; i++) { | ||
| 75 | keyboard_report->keys[i] = 0; | ||
| 76 | } | ||
| 77 | host_send_keyboard_report(); | ||
| 78 | } | ||
| 79 | |||
| 72 | /* keyboard report operations */ | 80 | /* keyboard report operations */ |
| 73 | void host_add_key(uint8_t key) | 81 | void host_add_key(uint8_t key) |
| 74 | { | 82 | { |
diff --git a/common/host.h b/common/host.h index 84a6c2477..a6dff8de0 100644 --- a/common/host.h +++ b/common/host.h | |||
| @@ -42,6 +42,7 @@ uint8_t host_keyboard_leds(void); | |||
| 42 | /* new interface */ | 42 | /* new interface */ |
| 43 | void host_register_key(uint8_t key); | 43 | void host_register_key(uint8_t key); |
| 44 | void host_unregister_key(uint8_t key); | 44 | void host_unregister_key(uint8_t key); |
| 45 | void host_clear_all_keys_but_mods(void); | ||
| 45 | 46 | ||
| 46 | /* keyboard report operations */ | 47 | /* keyboard report operations */ |
| 47 | void host_add_key(uint8_t key); | 48 | void host_add_key(uint8_t key); |
diff --git a/common/keyboard.c b/common/keyboard.c index b7063a264..328941df3 100644 --- a/common/keyboard.c +++ b/common/keyboard.c | |||
| @@ -41,8 +41,6 @@ typedef enum keykind { | |||
| 41 | FNK_DOWN, FNK_UP, | 41 | FNK_DOWN, FNK_UP, |
| 42 | KEY_DOWN, KEY_UP, | 42 | KEY_DOWN, KEY_UP, |
| 43 | MOD_DOWN, MOD_UP, | 43 | MOD_DOWN, MOD_UP, |
| 44 | MOUSEKEY_DOWN, MOUSEKEY_UP, | ||
| 45 | DELAY | ||
| 46 | } keykind_t; | 44 | } keykind_t; |
| 47 | 45 | ||
| 48 | typedef enum { IDLE, DELAYING, WAITING, PRESSING } kbdstate_t; | 46 | typedef enum { IDLE, DELAYING, WAITING, PRESSING } kbdstate_t; |
| @@ -69,15 +67,17 @@ static const char *state_str(kbdstate_t state) | |||
| 69 | 67 | ||
| 70 | static inline keykind_t get_keykind(uint8_t code, bool pressed) | 68 | static inline keykind_t get_keykind(uint8_t code, bool pressed) |
| 71 | { | 69 | { |
| 72 | if IS_KEY(code) return (pressed ? KEY_DOWN : KEY_UP); | 70 | if IS_KEY(code) return (pressed ? KEY_DOWN : KEY_UP); |
| 73 | if IS_MOD(code) return (pressed ? MOD_DOWN : MOD_UP); | 71 | if IS_MOD(code) return (pressed ? MOD_DOWN : MOD_UP); |
| 74 | if IS_FN(code) { | 72 | if IS_FN(code) { |
| 75 | if (keymap_fn_keycode(FN_INDEX(code))) | 73 | if (keymap_fn_keycode(FN_INDEX(code))) |
| 76 | return (pressed ? FNK_DOWN : FNK_UP); | 74 | return (pressed ? FNK_DOWN : FNK_UP); |
| 77 | else | 75 | else |
| 78 | return (pressed ? FN_DOWN : FN_UP); | 76 | return (pressed ? FN_DOWN : FN_UP); |
| 79 | } | 77 | } |
| 80 | if IS_MOUSEKEY(code) return (pressed ? MOUSEKEY_DOWN : MOUSEKEY_UP); | 78 | if IS_MOUSEKEY(code) return (pressed ? KEY_DOWN : KEY_UP); |
| 79 | if IS_SYSTEM(code) return (pressed ? KEY_DOWN : KEY_UP); | ||
| 80 | if IS_CONSUMER(code) return (pressed ? KEY_DOWN : KEY_UP); | ||
| 81 | return NONE; | 81 | return NONE; |
| 82 | } | 82 | } |
| 83 | 83 | ||
| @@ -86,7 +86,13 @@ static void layer_switch_on(uint8_t code) | |||
| 86 | if (!IS_FN(code)) return; | 86 | if (!IS_FN(code)) return; |
| 87 | fn_state_bits |= FN_BIT(code); | 87 | fn_state_bits |= FN_BIT(code); |
| 88 | if (current_layer != keymap_fn_layer(FN_INDEX(code))) { | 88 | if (current_layer != keymap_fn_layer(FN_INDEX(code))) { |
| 89 | //TODO: clear all key execpt Mod key | 89 | // clear all key execpt Mod key |
| 90 | host_clear_all_keys_but_mods(); | ||
| 91 | host_system_send(0); | ||
| 92 | host_consumer_send(0); | ||
| 93 | mousekey_clear(); | ||
| 94 | mousekey_send(); | ||
| 95 | |||
| 90 | debug("Layer Switch(on): "); debug_hex(current_layer); | 96 | debug("Layer Switch(on): "); debug_hex(current_layer); |
| 91 | current_layer = keymap_fn_layer(FN_INDEX(code)); | 97 | current_layer = keymap_fn_layer(FN_INDEX(code)); |
| 92 | debug(" -> "); debug_hex(current_layer); debug("\n"); | 98 | debug(" -> "); debug_hex(current_layer); debug("\n"); |
| @@ -98,7 +104,13 @@ static void layer_switch_off(uint8_t code) | |||
| 98 | if (!IS_FN(code)) return; | 104 | if (!IS_FN(code)) return; |
| 99 | fn_state_bits &= ~FN_BIT(code); | 105 | fn_state_bits &= ~FN_BIT(code); |
| 100 | if (current_layer != keymap_fn_layer(biton(fn_state_bits))) { | 106 | if (current_layer != keymap_fn_layer(biton(fn_state_bits))) { |
| 101 | //TODO: clear all key execpt Mod key | 107 | // clear all key execpt Mod key |
| 108 | host_clear_all_keys_but_mods(); | ||
| 109 | host_system_send(0); | ||
| 110 | host_consumer_send(0); | ||
| 111 | mousekey_clear(); | ||
| 112 | mousekey_send(); | ||
| 113 | |||
| 102 | debug("Layer Switch(off): "); debug_hex(current_layer); | 114 | debug("Layer Switch(off): "); debug_hex(current_layer); |
| 103 | current_layer = keymap_fn_layer(biton(fn_state_bits)); | 115 | current_layer = keymap_fn_layer(biton(fn_state_bits)); |
| 104 | debug(" -> "); debug_hex(current_layer); debug("\n"); | 116 | debug(" -> "); debug_hex(current_layer); debug("\n"); |
| @@ -128,6 +140,7 @@ static inline bool is_anykey_down(void) | |||
| 128 | 140 | ||
| 129 | static void register_code(uint8_t code) | 141 | static void register_code(uint8_t code) |
| 130 | { | 142 | { |
| 143 | debug("register_code\n"); | ||
| 131 | if IS_KEY(code) { | 144 | if IS_KEY(code) { |
| 132 | host_add_key(code); | 145 | host_add_key(code); |
| 133 | host_send_keyboard_report(); | 146 | host_send_keyboard_report(); |
| @@ -140,6 +153,84 @@ static void register_code(uint8_t code) | |||
| 140 | mousekey_on(code); | 153 | mousekey_on(code); |
| 141 | mousekey_send(); | 154 | mousekey_send(); |
| 142 | } | 155 | } |
| 156 | else if IS_CONSUMER(code) { | ||
| 157 | debug("consumer\n"); | ||
| 158 | uint16_t usage = 0; | ||
| 159 | switch (code) { | ||
| 160 | case KB_AUDIO_MUTE: | ||
| 161 | usage = AUDIO_MUTE; | ||
| 162 | break; | ||
| 163 | case KB_AUDIO_VOL_UP: | ||
| 164 | usage = AUDIO_VOL_UP; | ||
| 165 | break; | ||
| 166 | case KB_AUDIO_VOL_DOWN: | ||
| 167 | usage = AUDIO_VOL_DOWN; | ||
| 168 | break; | ||
| 169 | case KB_MEDIA_NEXT_TRACK: | ||
| 170 | usage = TRANSPORT_NEXT_TRACK; | ||
| 171 | break; | ||
| 172 | case KB_MEDIA_PREV_TRACK: | ||
| 173 | usage = TRANSPORT_PREV_TRACK; | ||
| 174 | break; | ||
| 175 | case KB_MEDIA_STOP: | ||
| 176 | usage = TRANSPORT_STOP; | ||
| 177 | break; | ||
| 178 | case KB_MEDIA_PLAY_PAUSE: | ||
| 179 | usage = TRANSPORT_PLAY_PAUSE; | ||
| 180 | break; | ||
| 181 | case KB_MEDIA_SELECT: | ||
| 182 | usage = AL_CC_CONFIG; | ||
| 183 | break; | ||
| 184 | case KB_MAIL: | ||
| 185 | usage = AL_EMAIL; | ||
| 186 | break; | ||
| 187 | case KB_CALCULATOR: | ||
| 188 | usage = AL_CALCULATOR; | ||
| 189 | break; | ||
| 190 | case KB_MY_COMPUTER: | ||
| 191 | usage = AL_LOCAL_BROWSER; | ||
| 192 | break; | ||
| 193 | case KB_WWW_SEARCH: | ||
| 194 | usage = AC_SEARCH; | ||
| 195 | break; | ||
| 196 | case KB_WWW_HOME: | ||
| 197 | usage = AC_HOME; | ||
| 198 | break; | ||
| 199 | case KB_WWW_BACK: | ||
| 200 | usage = AC_BACK; | ||
| 201 | break; | ||
| 202 | case KB_WWW_FORWARD: | ||
| 203 | usage = AC_FORWARD; | ||
| 204 | break; | ||
| 205 | case KB_WWW_STOP: | ||
| 206 | usage = AC_STOP; | ||
| 207 | break; | ||
| 208 | case KB_WWW_REFRESH: | ||
| 209 | usage = AC_REFRESH; | ||
| 210 | break; | ||
| 211 | case KB_WWW_FAVORITES: | ||
| 212 | usage = AC_BOOKMARKS; | ||
| 213 | break; | ||
| 214 | } | ||
| 215 | debug("usage: "); phex16(usage); debug("\n"); | ||
| 216 | host_consumer_send(usage); | ||
| 217 | } | ||
| 218 | else if IS_SYSTEM(code) { | ||
| 219 | uint16_t usage = 0; | ||
| 220 | switch (code) { | ||
| 221 | case KB_SYSTEM_POWER: | ||
| 222 | usage = SYSTEM_POWER_DOWN; | ||
| 223 | break; | ||
| 224 | case KB_SYSTEM_SLEEP: | ||
| 225 | usage = SYSTEM_SLEEP; | ||
| 226 | break; | ||
| 227 | case KB_SYSTEM_WAKE: | ||
| 228 | usage = SYSTEM_WAKE_UP; | ||
| 229 | break; | ||
| 230 | } | ||
| 231 | host_system_send(usage); | ||
| 232 | } | ||
| 233 | |||
| 143 | } | 234 | } |
| 144 | 235 | ||
| 145 | static void unregister_code(uint8_t code) | 236 | static void unregister_code(uint8_t code) |
| @@ -156,6 +247,12 @@ static void unregister_code(uint8_t code) | |||
| 156 | mousekey_off(code); | 247 | mousekey_off(code); |
| 157 | mousekey_send(); | 248 | mousekey_send(); |
| 158 | } | 249 | } |
| 250 | else if IS_CONSUMER(code) { | ||
| 251 | host_consumer_send(0x0000); | ||
| 252 | } | ||
| 253 | else if IS_SYSTEM(code) { | ||
| 254 | host_system_send(0x0000); | ||
| 255 | } | ||
| 159 | } | 256 | } |
| 160 | 257 | ||
| 161 | /* | 258 | /* |
| @@ -254,7 +351,6 @@ static inline void process_key(keyevent_t event) | |||
| 254 | layer_switch_off(code); | 351 | layer_switch_off(code); |
| 255 | break; | 352 | break; |
| 256 | case KEY_DOWN: | 353 | case KEY_DOWN: |
| 257 | case MOUSEKEY_DOWN: | ||
| 258 | register_code(code); | 354 | register_code(code); |
| 259 | NEXT(PRESSING); | 355 | NEXT(PRESSING); |
| 260 | break; | 356 | break; |
| @@ -262,7 +358,6 @@ static inline void process_key(keyevent_t event) | |||
| 262 | register_code(code); | 358 | register_code(code); |
| 263 | break; | 359 | break; |
| 264 | case KEY_UP: | 360 | case KEY_UP: |
| 265 | case MOUSEKEY_UP: | ||
| 266 | case MOD_UP: | 361 | case MOD_UP: |
| 267 | unregister_code(code); | 362 | unregister_code(code); |
| 268 | break; | 363 | break; |
| @@ -283,16 +378,16 @@ static inline void process_key(keyevent_t event) | |||
| 283 | register_code(keymap_fn_keycode(FN_INDEX(code))); | 378 | register_code(keymap_fn_keycode(FN_INDEX(code))); |
| 284 | break; | 379 | break; |
| 285 | case FNK_UP: | 380 | case FNK_UP: |
| 381 | // can't know whether layer switched or not | ||
| 382 | layer_switch_off(code); | ||
| 286 | unregister_code(keymap_fn_keycode(FN_INDEX(code))); | 383 | unregister_code(keymap_fn_keycode(FN_INDEX(code))); |
| 287 | break; | 384 | break; |
| 288 | case KEY_DOWN: | 385 | case KEY_DOWN: |
| 289 | case MOD_DOWN: | 386 | case MOD_DOWN: |
| 290 | case MOUSEKEY_DOWN: | ||
| 291 | register_code(code); | 387 | register_code(code); |
| 292 | break; | 388 | break; |
| 293 | case KEY_UP: | 389 | case KEY_UP: |
| 294 | case MOD_UP: | 390 | case MOD_UP: |
| 295 | case MOUSEKEY_UP: | ||
| 296 | unregister_code(code); | 391 | unregister_code(code); |
| 297 | // no key registered? mousekey, mediakey, systemkey | 392 | // no key registered? mousekey, mediakey, systemkey |
| 298 | if (!host_has_anykey()) | 393 | if (!host_has_anykey()) |
| @@ -307,7 +402,6 @@ static inline void process_key(keyevent_t event) | |||
| 307 | case FN_DOWN: | 402 | case FN_DOWN: |
| 308 | case FNK_DOWN: | 403 | case FNK_DOWN: |
| 309 | case KEY_DOWN: | 404 | case KEY_DOWN: |
| 310 | case MOUSEKEY_DOWN: | ||
| 311 | waiting_key = (keyrecord_t) { | 405 | waiting_key = (keyrecord_t) { |
| 312 | .event = event, | 406 | .event = event, |
| 313 | .code = code, | 407 | .code = code, |
| @@ -339,7 +433,6 @@ static inline void process_key(keyevent_t event) | |||
| 339 | } | 433 | } |
| 340 | break; | 434 | break; |
| 341 | case KEY_UP: | 435 | case KEY_UP: |
| 342 | case MOUSEKEY_UP: | ||
| 343 | unregister_code(code); | 436 | unregister_code(code); |
| 344 | NEXT(IDLE); | 437 | NEXT(IDLE); |
| 345 | break; | 438 | break; |
| @@ -355,7 +448,6 @@ static inline void process_key(keyevent_t event) | |||
| 355 | case FN_DOWN: | 448 | case FN_DOWN: |
| 356 | case FNK_DOWN: | 449 | case FNK_DOWN: |
| 357 | case KEY_DOWN: | 450 | case KEY_DOWN: |
| 358 | case MOUSEKEY_DOWN: | ||
| 359 | tmp_mods = keyboard_report->mods; | 451 | tmp_mods = keyboard_report->mods; |
| 360 | host_set_mods(delayed_fn.mods); | 452 | host_set_mods(delayed_fn.mods); |
| 361 | register_code(keymap_fn_keycode(FN_INDEX(delayed_fn.code))); | 453 | register_code(keymap_fn_keycode(FN_INDEX(delayed_fn.code))); |
| @@ -389,7 +481,6 @@ static inline void process_key(keyevent_t event) | |||
| 389 | } | 481 | } |
| 390 | break; | 482 | break; |
| 391 | case KEY_UP: | 483 | case KEY_UP: |
| 392 | case MOUSEKEY_UP: | ||
| 393 | if (code == waiting_key.code) { | 484 | if (code == waiting_key.code) { |
| 394 | layer_switch_on(delayed_fn.code); | 485 | layer_switch_on(delayed_fn.code); |
| 395 | NEXT(IDLE); | 486 | NEXT(IDLE); |
| @@ -444,7 +535,6 @@ void keyboard_task(void) | |||
| 444 | matrix_row = matrix_get_row(r); | 535 | matrix_row = matrix_get_row(r); |
| 445 | matrix_change = matrix_row ^ matrix_prev[r]; | 536 | matrix_change = matrix_row ^ matrix_prev[r]; |
| 446 | if (matrix_change) { | 537 | if (matrix_change) { |
| 447 | // TODO: print once per scan | ||
| 448 | if (debug_matrix) matrix_print(); | 538 | if (debug_matrix) matrix_print(); |
| 449 | 539 | ||
| 450 | for (int c = 0; c < MATRIX_COLS; c++) { | 540 | for (int c = 0; c < MATRIX_COLS; c++) { |
diff --git a/common/mousekey.c b/common/mousekey.c index 7f8e860aa..222d9e445 100644 --- a/common/mousekey.c +++ b/common/mousekey.c | |||
| @@ -135,13 +135,6 @@ void mousekey_send(void) | |||
| 135 | void mousekey_clear(void) | 135 | void mousekey_clear(void) |
| 136 | { | 136 | { |
| 137 | report = (report_mouse_t){}; | 137 | report = (report_mouse_t){}; |
| 138 | /* | ||
| 139 | report.buttons = 0; | ||
| 140 | report.x = 0; | ||
| 141 | report.y = 0; | ||
| 142 | report.v = 0; | ||
| 143 | report.h = 0; | ||
| 144 | */ | ||
| 145 | } | 138 | } |
| 146 | 139 | ||
| 147 | static void mousekey_debug(void) | 140 | static void mousekey_debug(void) |
diff --git a/common/usb_keycodes.h b/common/usb_keycodes.h index 61d6bf002..6a4437418 100644 --- a/common/usb_keycodes.h +++ b/common/usb_keycodes.h | |||
| @@ -24,15 +24,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| 24 | 24 | ||
| 25 | 25 | ||
| 26 | #define IS_ERROR(code) (KB_ROLL_OVER <= (code) && (code) <= KB_UNDEFINED) | 26 | #define IS_ERROR(code) (KB_ROLL_OVER <= (code) && (code) <= KB_UNDEFINED) |
| 27 | #define IS_ANY(code) (KB_A <= (code)) | 27 | #define IS_ANY(code) (KB_A <= (code) && (code) <= 0xFF) |
| 28 | #define IS_KEY(code) (KB_A <= (code) && (code) <= KB_EXSEL) | 28 | #define IS_KEY(code) (KB_A <= (code) && (code) <= KB_EXSEL) |
| 29 | #define IS_MOD(code) (KB_LCTRL <= (code) && (code) <= KB_RGUI) | 29 | #define IS_MOD(code) (KB_LCTRL <= (code) && (code) <= KB_RGUI) |
| 30 | |||
| 30 | #define IS_FN(code) (KB_FN0 <= (code) && (code) <= KB_FN7) | 31 | #define IS_FN(code) (KB_FN0 <= (code) && (code) <= KB_FN7) |
| 31 | #define IS_MOUSEKEY(code) (KB_MS_UP <= (code) && (code) <= KB_MS_WH_RIGHT) | 32 | #define IS_MOUSEKEY(code) (KB_MS_UP <= (code) && (code) <= KB_MS_WH_RIGHT) |
| 32 | #define IS_MOUSEKEY_MOVE(code) (KB_MS_UP <= (code) && (code) <= KB_MS_RIGHT) | 33 | #define IS_MOUSEKEY_MOVE(code) (KB_MS_UP <= (code) && (code) <= KB_MS_RIGHT) |
| 33 | #define IS_MOUSEKEY_BUTTON(code) (KB_MS_BTN1 <= (code) && (code) <= KB_MS_BTN5) | 34 | #define IS_MOUSEKEY_BUTTON(code) (KB_MS_BTN1 <= (code) && (code) <= KB_MS_BTN5) |
| 34 | #define IS_MOUSEKEY_WHEEL(code) (KB_MS_WH_UP <= (code) && (code) <= KB_MS_WH_RIGHT) | 35 | #define IS_MOUSEKEY_WHEEL(code) (KB_MS_WH_UP <= (code) && (code) <= KB_MS_WH_RIGHT) |
| 35 | 36 | ||
| 37 | #define IS_SPECIAL(code) ((0xB0 <= (code) && (code) <= 0xDF) || (0xE8 <= (code) && (code) <= 0xFF)) | ||
| 38 | #define IS_CONSUMER(code) (KB_MUTE <= (code) && (code) <= KB_WFAV) | ||
| 39 | #define IS_SYSTEM(code) (KB_POWER <= (code) && (code) <= KB_WAKE) | ||
| 40 | |||
| 36 | #define MOD_BIT(code) (1<<((code) & 0x07)) | 41 | #define MOD_BIT(code) (1<<((code) & 0x07)) |
| 37 | #define FN_BIT(code) (1<<((code) - KB_FN0)) | 42 | #define FN_BIT(code) (1<<((code) - KB_FN0)) |
| 38 | #define FN_INDEX(code) ((code) - KB_FN0) | 43 | #define FN_INDEX(code) ((code) - KB_FN0) |
| @@ -137,14 +142,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| 137 | 142 | ||
| 138 | 143 | ||
| 139 | /* Special keycode */ | 144 | /* Special keycode */ |
| 145 | /* NOTE: 0xA5-DF and 0xE8-FF can be used for internal special purpose */ | ||
| 140 | enum special_keycodes { | 146 | enum special_keycodes { |
| 141 | /* System Control */ | 147 | /* System Control */ |
| 142 | KB_SYSTEM_POWER = 0xB0, | 148 | KB_SYSTEM_POWER = 0xA5, |
| 143 | KB_SYSTEM_SLEEP, | 149 | KB_SYSTEM_SLEEP, |
| 144 | KB_SYSTEM_WAKE, | 150 | KB_SYSTEM_WAKE, /* 0xA7 */ |
| 151 | /* 0xA8-AF */ | ||
| 145 | 152 | ||
| 146 | /* Consumer Page */ | 153 | /* Consumer Page */ |
| 147 | KB_AUDIO_MUTE, | 154 | KB_AUDIO_MUTE = 0xB0, |
| 148 | KB_AUDIO_VOL_UP, | 155 | KB_AUDIO_VOL_UP, |
| 149 | KB_AUDIO_VOL_DOWN, | 156 | KB_AUDIO_VOL_DOWN, |
| 150 | KB_MEDIA_NEXT_TRACK, | 157 | KB_MEDIA_NEXT_TRACK, |
| @@ -157,13 +164,14 @@ enum special_keycodes { | |||
| 157 | KB_MY_COMPUTER, | 164 | KB_MY_COMPUTER, |
| 158 | KB_WWW_SEARCH, | 165 | KB_WWW_SEARCH, |
| 159 | KB_WWW_HOME, | 166 | KB_WWW_HOME, |
| 160 | KB_WWW_BACK, /* 0xC0 */ | 167 | KB_WWW_BACK, |
| 161 | KB_WWW_FORWARD, | 168 | KB_WWW_FORWARD, |
| 162 | KB_WWW_STOP, | 169 | KB_WWW_STOP, |
| 163 | KB_WWW_REFRESH, | 170 | KB_WWW_REFRESH, /* 0xC0 */ |
| 164 | KB_WWW_FAVORITES, | 171 | KB_WWW_FAVORITES, /* 0xC1 */ |
| 172 | /* 0xC2-DF vacant for future use */ | ||
| 165 | 173 | ||
| 166 | /* reserve 0xE0-E7 for Modifiers */ | 174 | /* 0xE0-E7 for Modifiers. DO NOT USE. */ |
| 167 | 175 | ||
| 168 | /* Layer Switching */ | 176 | /* Layer Switching */ |
| 169 | KB_FN0 = 0xE8, | 177 | KB_FN0 = 0xE8, |
| @@ -173,7 +181,7 @@ enum special_keycodes { | |||
| 173 | KB_FN4, | 181 | KB_FN4, |
| 174 | KB_FN5, | 182 | KB_FN5, |
| 175 | KB_FN6, | 183 | KB_FN6, |
| 176 | KB_FN7, | 184 | KB_FN7, /* 0xEF */ |
| 177 | 185 | ||
| 178 | /* Mousekey */ | 186 | /* Mousekey */ |
| 179 | KB_MS_UP = 0xF0, | 187 | KB_MS_UP = 0xF0, |
| @@ -189,11 +197,13 @@ enum special_keycodes { | |||
| 189 | KB_MS_WH_UP, | 197 | KB_MS_WH_UP, |
| 190 | KB_MS_WH_DOWN, | 198 | KB_MS_WH_DOWN, |
| 191 | KB_MS_WH_LEFT, | 199 | KB_MS_WH_LEFT, |
| 192 | KB_MS_WH_RIGHT, | 200 | KB_MS_WH_RIGHT, /* 0xFC */ |
| 201 | /* 0xFD-FF vacant for future use */ | ||
| 193 | }; | 202 | }; |
| 194 | 203 | ||
| 204 | /* USB HID Keyboard/Keypad Usage(0x07) */ | ||
| 195 | enum keycodes { | 205 | enum keycodes { |
| 196 | KB_NO = 0, | 206 | KB_NO = 0x00, |
| 197 | KB_ROLL_OVER, | 207 | KB_ROLL_OVER, |
| 198 | KB_POST_FAIL, | 208 | KB_POST_FAIL, |
| 199 | KB_UNDEFINED, | 209 | KB_UNDEFINED, |
| @@ -357,9 +367,10 @@ enum keycodes { | |||
| 357 | KB_OPER, | 367 | KB_OPER, |
| 358 | KB_CLEAR_AGAIN, | 368 | KB_CLEAR_AGAIN, |
| 359 | KB_CRSEL, | 369 | KB_CRSEL, |
| 360 | KB_EXSEL, | 370 | KB_EXSEL, /* 0xA4 */ |
| 371 | |||
| 372 | /* NOTE: 0xA5-DF are used for internal special purpose */ | ||
| 361 | 373 | ||
| 362 | /* NOTE: 0xB0-DF are used as special_keycodes */ | ||
| 363 | #if 0 | 374 | #if 0 |
| 364 | KB_KP_00 = 0xB0, | 375 | KB_KP_00 = 0xB0, |
| 365 | KB_KP_000, | 376 | KB_KP_000, |
| @@ -406,7 +417,7 @@ enum keycodes { | |||
| 406 | KB_KP_BINARY, | 417 | KB_KP_BINARY, |
| 407 | KB_KP_OCTAL, | 418 | KB_KP_OCTAL, |
| 408 | KB_KP_DECIMAL, | 419 | KB_KP_DECIMAL, |
| 409 | KB_KP_HEXADECIMAL, | 420 | KB_KP_HEXADECIMAL, /* 0xDD */ |
| 410 | #endif | 421 | #endif |
| 411 | 422 | ||
| 412 | /* Modifiers */ | 423 | /* Modifiers */ |
| @@ -419,7 +430,7 @@ enum keycodes { | |||
| 419 | KB_RALT, | 430 | KB_RALT, |
| 420 | KB_RGUI, | 431 | KB_RGUI, |
| 421 | 432 | ||
| 422 | /* NOTE: 0xE8-FF are used as special_keycodes */ | 433 | /* NOTE: 0xE8-FF are used for internal special purpose */ |
| 423 | }; | 434 | }; |
| 424 | 435 | ||
| 425 | #endif /* USB_KEYCODES_H */ | 436 | #endif /* USB_KEYCODES_H */ |
