summaryrefslogtreecommitdiff
path: root/quantum/oryx.h
diff options
context:
space:
mode:
authorFlorian Didron <0x6664@hey.com>2023-03-15 15:55:50 +0700
committerFlorian Didron <0x6664@hey.com>2023-03-15 15:55:50 +0700
commit0f23d33a864b78b20b460eb9126ee17a26f6f0ac (patch)
tree2a22c9a0f6c116de05920b9350a2e9b77ccaecec /quantum/oryx.h
parent788d70c1a78a30d75a5a286f04d8451162bb7f6e (diff)
feat: allows to take over the rgb leds and light them individually from raw hid
Diffstat (limited to 'quantum/oryx.h')
-rw-r--r--quantum/oryx.h56
1 files changed, 44 insertions, 12 deletions
diff --git a/quantum/oryx.h b/quantum/oryx.h
index 526299b4aa..25deb74f55 100644
--- a/quantum/oryx.h
+++ b/quantum/oryx.h
@@ -1,4 +1,15 @@
#pragma once
+/*
+The Oryx Webhid protocol
+
+Each HID packet is a series of bytes. The first byte is the packet type is the command. The rest of the bytes are the params.
+
+Before sending a packet, the host needs to be paired or should request a pairing code.
+
+The pairing code is a sequence of key positions derived from Oryx's firmware version code stored in the FIRMWARE_VERSION define.
+
+Once the host has paired, it can freely use the commands define in the Oryx_Command_Code enum for which the board will always respond with a Oryx_Event_Code or a Oryx_Error_Code.
+*/
#include "quantum.h"
#include "raw_hid.h"
@@ -10,6 +21,7 @@
# define RAW_EPSIZE 32
#endif
+#define ORYX_PROTOCOL_VERSION = 0x01
#define ORYX_STOP_BIT -2
#define PAIRING_BLINK_STEPS 512
#define PAIRING_BLINK_END PAIRING_BLINK_STEPS * 60
@@ -22,7 +34,10 @@ enum Oryx_Command_Code {
ORYX_CMD_PAIRING_INIT,
ORYX_CMD_PAIRING_VALIDATE,
ORYX_CMD_DISCONNECT,
- ORYX_SET_LAYER
+ ORYX_SET_LAYER,
+ ORYX_RGB_CONTROL,
+ ORYX_SET_RGB_LED,
+ ORYX_GET_PROTOCOL_VERSION = 0xFE,
};
enum Oryx_Event_Code {
@@ -34,6 +49,16 @@ enum Oryx_Event_Code {
ORYX_EVT_LAYER,
ORYX_EVT_KEYDOWN,
ORYX_EVT_KEYUP,
+ ORYX_EVT_GET_PROTOCOL_VERSION = 0XFE,
+ ORYX_EVT_ERROR = 0xFF,
+};
+
+enum Oryx_Error_Code {
+ ORYX_ERR_PAIRING_INIT_FAILED,
+ ORYX_ERR_PAIRING_INPUT_FAILED,
+ ORYX_ERR_PAIRING_KEY_INPUT_FAILED,
+ ORYX_ERR_PAIRING_FAILED,
+ ORYX_ERR_RGB_MATRIX_NOT_ENABLED,
};
extern bool oryx_state_live_training_enabled;
@@ -41,23 +66,30 @@ extern bool oryx_state_live_training_enabled;
typedef struct {
bool pairing;
bool paired;
+ bool rgb_control;
} rawhid_state_t;
extern rawhid_state_t rawhid_state;
-void create_pairing_code(void);
-bool store_pairing_sequence(keypos_t* pairing_sequence);
-keypos_t get_random_keypos(void);
-void pairing_init_handler(void);
-void pairing_validate_handler(void);
-void pairing_validate_eeprom_handler(void);
-void pairing_init_event(void);
-bool compare_sequences(keypos_t a[PAIRING_SEQUENCE_SIZE], keypos_t b[PAIRING_SEQUENCE_SIZE]);
-void pairing_key_input_event(void);
-void pairing_failed_event(void);
-void pairing_succesful_event(void);
+void create_pairing_code(void);
+void oryx_error(uint8_t code);
+bool store_pairing_sequence(keypos_t* pairing_sequence);
+keypos_t get_random_keypos(void);
+void pairing_init_handler(void);
+void pairing_validate_handler(void);
+void pairing_validate_eeprom_handler(void);
+void pairing_init_event(void);
+bool compare_sequences(keypos_t a[PAIRING_SEQUENCE_SIZE], keypos_t b[PAIRING_SEQUENCE_SIZE]);
+void pairing_key_input_event(void);
+void pairing_failed_event(void);
+void pairing_succesful_event(void);
+keypos_t* pairing_sequence(void);
void oryx_layer_event(void);
bool is_oryx_live_training_enabled(void);
bool process_record_oryx(uint16_t keycode, keyrecord_t* record);
void layer_state_set_oryx(layer_state_t state);
+
+#if defined(RGB_MATRIX_ENABLE) && !defined(KEYBOARD_ergodox_ez_glow)
+RGB webhid_leds[DRIVER_LED_TOTAL];
+#endif \ No newline at end of file