diff --git a/Firmware/PocketVoltex/Config.c b/Firmware/PocketVoltex/Config.c index 419fc54..d1835e5 100644 --- a/Firmware/PocketVoltex/Config.c +++ b/Firmware/PocketVoltex/Config.c @@ -33,11 +33,18 @@ static const PROGMEM sdvx_config_t defaults = { .keyLights = 1, .knobLights = 1, .lightPattern = FOLLOWER, - .macroClick = HID_KEYBOARD_SC_KEYPAD_PLUS, + .macroClick = { + .action = KEYPRESS, + .keypress = HID_KEYBOARD_SC_KEYPAD_PLUS + }, + .macroHold = { + .action = PIN_ENTRY, + .keypress = 0 + }, .macroPin = {HID_KEYBOARD_SC_KEYPAD_0_AND_INSERT, HID_KEYBOARD_SC_KEYPAD_0_AND_INSERT, HID_KEYBOARD_SC_KEYPAD_0_AND_INSERT, - HID_KEYBOARD_SC_KEYPAD_0_AND_INSERT} + HID_KEYBOARD_SC_KEYPAD_0_AND_INSERT}, .joystickMode = 1, }; @@ -53,7 +60,11 @@ void InitConfig(void) { void SetConfig(sdvx_config_t* config) { memcpy(&sdvxConfig, config, sizeof(sdvx_config_t)); - eeprom_write_block(&sdvxConfig, &eeConfig, sizeof(sdvx_config_t)); + eeprom_update_block(&sdvxConfig, &eeConfig, sizeof(sdvx_config_t)); +} + +void UpdateConfig(void) { + eeprom_update_block(&sdvxConfig, &eeConfig, sizeof(sdvx_config_t)); } command_response_t HandleConfig(uint8_t* buffer) { diff --git a/Firmware/PocketVoltex/Config.h b/Firmware/PocketVoltex/Config.h index 811250d..16fd2e8 100644 --- a/Firmware/PocketVoltex/Config.h +++ b/Firmware/PocketVoltex/Config.h @@ -5,13 +5,14 @@ #include #include #include "LEDPatterns.h" +#include "Macro.h" // 7 gameplay switches + macro combo switch #define SWITCH_COUNT 8 #define JOYSTICK_PPR (24 * 4) #define MAGIC_RESET_NUMBER 42 // divide by 10 for actual version -#define FIRMWARE_VERSION 10 +#define FIRMWARE_VERSION 11 // not configurable since they're all the same switches #define SWITCH_DEBOUNCE 30 @@ -29,8 +30,9 @@ typedef struct { uint8_t knobLights; uint8_t lightPattern; // When tapping or long-pressing the macro key - uint8_t macroClick; - uint8_t macroHold; + Macro_t macroClick; + Macro_t macroHold; + // Reused for both uint8_t macroPin[4]; uint8_t joystickMode; } ATTR_PACKED sdvx_config_t; @@ -69,6 +71,7 @@ extern sdvx_config_t sdvxConfig; extern void InitConfig(void); extern void SetConfig(sdvx_config_t* config); +void UpdateConfig(void); extern command_response_t HandleConfig(uint8_t* buffer); #endif \ No newline at end of file diff --git a/Firmware/PocketVoltex/Macro.c b/Firmware/PocketVoltex/Macro.c index 2e96bab..691407c 100644 --- a/Firmware/PocketVoltex/Macro.c +++ b/Firmware/PocketVoltex/Macro.c @@ -1,9 +1,12 @@ -#include +#include "Macro.h" +#include "LEDPatterns.h" // in ms #define KEY_DELAY 30 #define LONGPRESS_DELAY 500 +extern sdvx_config_t sdvxConfig; + static uint8_t countdown = 0; static uint16_t longpress = 0; static uint8_t *data; @@ -20,7 +23,6 @@ uint8_t macro_make_report(uint8_t* key) { liftoff = 0; countdown = KEY_DELAY; *key = 0; - return 1; } else { if(position >= dataLen) { return 0; @@ -31,20 +33,30 @@ uint8_t macro_make_report(uint8_t* key) { position++; liftoff = 1; - return 1; } + return 1; } -void macro_fire_click(void) { - data = &sdvxConfig.macroClick; - dataLen = 1; - position = 0; -} - -void macro_fire_pin(void) { - data = sdvxConfig.macroPin; - dataLen = 4; - position = 0; +void macro_handle(Macro_t* macro) { + switch(macro->action) { + case KEYPRESS: + data = ¯o->keypress; + dataLen = 1; + position = 0; + break; + case PIN_ENTRY: + data = sdvxConfig.macroPin; + dataLen = 4; + position = 0; + break; + case LED_PATTERN_CHANGE: + led_pattern_next(); + break; + case LED_TOGGLE: + sdvxConfig.lightsOn ^= 1; + UpdateConfig(); + break; + } } void macro_on_frame(switch_t* macro) { @@ -59,11 +71,11 @@ void macro_on_frame(switch_t* macro) { } else if(macro->state && macro->lastReport && longpress < LONGPRESS_DELAY) { longpress++; if(longpress >= LONGPRESS_DELAY) { - macro_fire_pin(); + macro_handle(&sdvxConfig.macroHold); } // falling edge before longpress time } else if(!macro->state && macro->lastReport && longpress < LONGPRESS_DELAY) { - macro_fire_click(); + macro_handle(&sdvxConfig.macroClick); } macro->lastReport = macro->state; } \ No newline at end of file diff --git a/Firmware/PocketVoltex/Macro.h b/Firmware/PocketVoltex/Macro.h index b9cfb5e..67f6dc4 100644 --- a/Firmware/PocketVoltex/Macro.h +++ b/Firmware/PocketVoltex/Macro.h @@ -1,15 +1,27 @@ #ifndef MACRO_H_ #define MACRO_H_ -#include "Config.h" -#include "asciihid.h" #include "PocketVoltex.h" -extern sdvx_config_t sdvxConfig; +#define NUMPAD_START HID_KEYBOARD_SC_KEYPAD_1_AND_END +// because 0 is top instead of bottom +#define NUMPAD_0 HID_KEYBOARD_SC_KEYPAD_0_AND_INSERT + +enum MacroAction { + KEYPRESS = 0, + PIN_ENTRY = 1, + LED_PATTERN_CHANGE = 2, + LED_TOGGLE = 3, +}; + +typedef struct { + uint8_t action; + // if set + uint8_t keypress; +} Macro_t; uint8_t macro_make_report(uint8_t* key); void macro_on_frame(switch_t* macro); -void macro_fire_click(void); -void macro_fire_pin(void); +void macro_handle(Macro_t* macro); #endif \ No newline at end of file diff --git a/Firmware/PocketVoltex/PocketVoltex.h b/Firmware/PocketVoltex/PocketVoltex.h index 86ac0c2..a63c026 100644 --- a/Firmware/PocketVoltex/PocketVoltex.h +++ b/Firmware/PocketVoltex/PocketVoltex.h @@ -1,5 +1,5 @@ -#ifndef _KEYBOARD_H_ -#define _KEYBOARD_H_ +#ifndef _POCKETVOLTEX_H_ +#define _POCKETVOLTEX_H_ /* Includes: */ #include diff --git a/Software/WebConfig/css/style.css b/Software/WebConfig/css/style.css index 76dd0cc..6f039cf 100644 --- a/Software/WebConfig/css/style.css +++ b/Software/WebConfig/css/style.css @@ -1,8 +1,14 @@ +body, html { + width: 100%; + height: 100%; + margin: 0; +} + .center { position: relative; display:flex; - align-items:center; - flex-direction: column; + justify-content: center; + height: 100%; } .configBox { @@ -12,12 +18,9 @@ } .connect { - position: absolute; - left: 0; - right: 0; - top: 285px; - display:flex; - justify-content:center; + height: 100%; + display: flex; + align-items: center; } .connect > button { @@ -25,16 +28,9 @@ } .configOptions { - margin-left: 180px; display: flex; flex-wrap: wrap; flex-direction: column; - height: 400px; - width: 600px; -} - -.configOptions > div, .configOptions > p { - width: 50%; } .colourPicker { diff --git a/Software/WebConfig/index.html b/Software/WebConfig/index.html index 3585e83..7515cc8 100644 --- a/Software/WebConfig/index.html +++ b/Software/WebConfig/index.html @@ -6,6 +6,7 @@ +