summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common_features.mk10
-rw-r--r--quantum/oryx.c30
-rw-r--r--quantum/oryx.h34
-rw-r--r--quantum/quantum.c13
-rw-r--r--quantum/quantum.h7
-rw-r--r--tmk_core/common.mk1
-rw-r--r--tmk_core/common/webusb.c27
-rw-r--r--tmk_core/common/webusb.h13
-rw-r--r--tmk_core/protocol/chibios/usb_main.c1
-rw-r--r--tmk_core/protocol/lufa/lufa.c2
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];