diff options
author | Drashna Jael're <drashna@live.com> | 2020-01-14 16:30:29 -0800 |
---|---|---|
committer | Florian Didron <fdidron@users.noreply.github.com> | 2020-02-26 10:15:12 +0900 |
commit | e41ab50016345f7813d250772457a1463e0cd973 (patch) | |
tree | 229011a7ba2d273643bf6245241f642b7ba3bda0 | |
parent | d3f23ecfbcd2a69714422ab68f346e51fcc2a6de (diff) |
Start moving code out of webusb and to Oryx feature
-rw-r--r-- | common_features.mk | 10 | ||||
-rw-r--r-- | quantum/oryx.c | 30 | ||||
-rw-r--r-- | quantum/oryx.h | 34 | ||||
-rw-r--r-- | quantum/quantum.c | 13 | ||||
-rw-r--r-- | quantum/quantum.h | 7 | ||||
-rw-r--r-- | tmk_core/common.mk | 1 | ||||
-rw-r--r-- | tmk_core/common/webusb.c | 27 | ||||
-rw-r--r-- | tmk_core/common/webusb.h | 13 | ||||
-rw-r--r-- | tmk_core/protocol/chibios/usb_main.c | 1 | ||||
-rw-r--r-- | tmk_core/protocol/lufa/lufa.c | 2 |
10 files changed, 108 insertions, 30 deletions
diff --git a/common_features.mk b/common_features.mk index 7687521ced..e6634712f0 100644 --- a/common_features.mk +++ b/common_features.mk @@ -316,9 +316,6 @@ ifeq ($(strip $(USB_HID_ENABLE)), yes) include $(TMK_DIR)/protocol/usb_hid.mk endif -ifeq ($(strip $(WEBUSB_ENABLE)), yes) - SRC += $(TMK_DIR)/common/webusb.c -endif ifeq ($(strip $(ENCODER_ENABLE)), yes) SRC += $(QUANTUM_DIR)/encoder.c @@ -352,6 +349,13 @@ ifeq ($(strip $(VELOCIKEY_ENABLE)), yes) SRC += $(QUANTUM_DIR)/velocikey.c endif +ifeq ($(strip $(ORYX_ENABLE)), yes) + DYNAMIC_KEYMAP_ENABLE := yes + WEBUSB_ENABLE := yes + SRC += $(QUANTUM_DIR)/oryx.c + OPT_DEFS += -DORYX_ENABLE +endif + ifeq ($(strip $(DYNAMIC_KEYMAP_ENABLE)), yes) OPT_DEFS += -DDYNAMIC_KEYMAP_ENABLE SRC += $(QUANTUM_DIR)/dynamic_keymap.c diff --git a/quantum/oryx.c b/quantum/oryx.c new file mode 100644 index 0000000000..93ee50e935 --- /dev/null +++ b/quantum/oryx.c @@ -0,0 +1,30 @@ +#include "oryx.h" + +bool webusb_state_live_training_enabled; + +bool webusb_receive_oryx(uint8_t *data, uint8_t length) { + uint8_t command = data[0]; + + switch (command) { + case ORYX_GET_LAYER: + oryx_layer_event(); + return true; break; + + } + + return false; +} + + +void oryx_layer_event(void) { + uint8_t layer; + uint8_t event[4]; + layer = get_highest_layer(layer_state); +#ifdef WEBUSB_ENABLE + event[0] = WEBUSB_STATUS_OK; + event[1] = ORYX_EVT_LAYER; + event[2] = layer; + event[3] = WEBUSB_STOP_BIT; + webusb_send(event, sizeof(event)); +#endif +} diff --git a/quantum/oryx.h b/quantum/oryx.h new file mode 100644 index 0000000000..eaef5bd335 --- /dev/null +++ b/quantum/oryx.h @@ -0,0 +1,34 @@ +#pragma once + +#include "quantum.h" +#include "webusb.h" + +#ifndef WEBUSB_ENABLE +# error "WebUSB needs to be enabled, please enable it!" +#endif + +#ifndef DYNAMIC_KEYMAP_ENABLE +# error "Dynamic Keymaps are not enabled. It must be aenbled " +#endif + + +enum Oryx_Command_Code { + ORYX_GET_LAYER = WEBUSB_CMD_SAFE_RANGE, + +}; + +enum Oryx_Event_Code { + ORYX_EVT_KEYDOWN = WEBUSB_EVT_SAFE_RANGE, + ORYX_EVT_KEYUP, + ORYX_EVT_LAYER, +}; + + + +extern bool webusb_state_live_training_enabled; + +bool webusb_receive_oryx(uint8_t *data, uint8_t length); +void oryx_layer_event(void); + + +void keyboard_pre_init_oryx(void); diff --git a/quantum/quantum.c b/quantum/quantum.c index e182e62790..755686b341 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -774,3 +774,16 @@ __attribute__((weak)) void startup_user() {} __attribute__((weak)) void shutdown_user() {} //------------------------------------------------------------------------------ + +#ifdef WEBUSB_ENABLE +__attribute__((weak)) bool webusb_receive_user(uint8_t *data, uint8_t length) { return false; } +__attribute__((weak)) bool webusb_receive_kb(uint8_t *data, uint8_t length) { return webusb_receive_user(data, length); } + +bool webusb_receive_quantum(uint8_t *data, uint8_t length) { +#ifdef ORYX_ENABLE + return webusb_receive_oryx(data, length); +#else + return webusb_receive_kb(data, length); +#endif +} +#endif diff --git a/quantum/quantum.h b/quantum/quantum.h index 9a38b036ff..7548ed8b93 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -162,6 +162,10 @@ extern layer_state_t layer_state; # include "webusb.h" #endif +#ifdef ORYX_ENABLE +# include "oryx.h" +#endif + #ifdef DYNAMIC_MACRO_ENABLE #include "process_dynamic_macro.h" #endif @@ -283,3 +287,6 @@ bool led_update_user(led_t led_state); bool led_update_kb(led_t led_state); void api_send_unicode(uint32_t unicode); + +bool webusb_receive_kb(uint8_t *data, uint8_t length); +bool webusb_receive_user(uint8_t *data, uint8_t length); diff --git a/tmk_core/common.mk b/tmk_core/common.mk index 3de7c0cdfd..f8505be483 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -95,6 +95,7 @@ ifeq ($(strip $(RAW_ENABLE)), yes) endif ifeq ($(strip $(WEBUSB_ENABLE)), yes) + TMK_COMMON_SRC += $(TMK_DIR)/common/webusb.c TMK_COMMON_DEFS += -DWEBUSB_ENABLE endif diff --git a/tmk_core/common/webusb.c b/tmk_core/common/webusb.c index 2488e75de7..bc349e6afa 100644 --- a/tmk_core/common/webusb.c +++ b/tmk_core/common/webusb.c @@ -1,12 +1,15 @@ -#include QMK_KEYBOARD_H +#include "quantum.h" #include <string.h> #include "webusb.h" #include "wait.h" + webusb_state_t webusb_state = { .paired = false, .pairing = false, }; +__attribute__((weak)) bool webusb_receive_quantum(uint8_t *data, uint8_t length) { return false; } + void webusb_receive(uint8_t *data, uint8_t length) { uint8_t command = data[0]; @@ -21,7 +24,7 @@ void webusb_receive(uint8_t *data, uint8_t length) { return; } - if(command == WEBUSB_GET_FW_VERSION) { + if(command == WEBUSB_CMD_GET_FW_VERSION) { // Landing page + packet headers(2) + stop bit(1) uint8_t lp_size = sizeof(FIRMWARE_VERSION) + 3; uint8_t url[lp_size]; @@ -41,30 +44,14 @@ void webusb_receive(uint8_t *data, uint8_t length) { } if(webusb_state.paired == true) { - switch(command) { - //Handle commands in here - case WEBUSB_GET_LAYER: - webusb_layer_event(); - break; - default: - break; + if (!webusb_receive_quantum(data, length)) { + webusb_error(WEBUSB_STATUS_UNKNOWN_COMMAND); } } else { webusb_error(WEBUSB_STATUS_NOT_PAIRED); } }; -void webusb_layer_event() { - uint8_t layer; - uint8_t event[4]; - layer = biton32(layer_state); - event[0] = WEBUSB_STATUS_OK; - event[1] = WEBUSB_EVT_LAYER; - event[2] = layer; - event[3] = WEBUSB_STOP_BIT; - webusb_send(event, sizeof(event)); -} - void webusb_error(uint8_t code) { uint8_t buffer[1]; buffer[0] = code; diff --git a/tmk_core/common/webusb.h b/tmk_core/common/webusb.h index 18e884f1ab..7958cb4586 100644 --- a/tmk_core/common/webusb.h +++ b/tmk_core/common/webusb.h @@ -13,8 +13,9 @@ void webusb_receive(uint8_t *data, uint8_t length); void webusb_send(uint8_t *data, uint8_t length); void webusb_layer_event(void); -void webusb_error(uint8_t); +void webusb_error(uint8_t code); void webusb_set_pairing_state(void); +bool webusb_receive_quantum(uint8_t *data, uint8_t length); typedef struct{ bool paired; @@ -31,14 +32,18 @@ enum Webusb_Status_Code { enum Webusb_Command_Code { WEBUSB_CMD_PAIR, - WEBUSB_GET_FW_VERSION, - WEBUSB_GET_LAYER + WEBUSB_CMD_GET_FW_VERSION, + WEBUSB_CMD_SAFE_RANGE, + + WEBUSB_GET_LAYER, }; enum Webusb_Event_Code { WEBUSB_EVT_PAIRED, + WEBUSB_EVT_FW_VERSION, + WEBUSB_EVT_SAFE_RANGE, + WEBUSB_EVT_KEYDOWN, WEBUSB_EVT_KEYUP, WEBUSB_EVT_LAYER, - WEBUSB_EVT_FW_VERSION }; diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c index 57ac7ce0e0..9f4adbca72 100644 --- a/tmk_core/protocol/chibios/usb_main.c +++ b/tmk_core/protocol/chibios/usb_main.c @@ -880,7 +880,6 @@ void webusb_send(uint8_t *data, uint8_t length) { } } -__attribute__((weak)) void webusb_receive_kb(uint8_t *data, uint8_t length) { // Users should #include "raw_hid.h" in their own code // and implement this function there. Leave this as weak linkage // so users can opt to not handle data coming in. diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index c107e7103a..8748ea63bf 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -288,8 +288,6 @@ void webusb_send(uint8_t *data, uint8_t length) { Endpoint_ClearIN(); } -__attribute__((weak)) void webusb_receive_kb(uint8_t *data, uint8_t length) { } - static void webusb_task(void) { // Create a temporary buffer to hold the read in data from the host uint8_t data[WEBUSB_EPSIZE]; |