diff --git a/src/input/BBQ10Keyboard.cpp b/src/input/BBQ10Keyboard.cpp index fa663d9b9..8f8399aef 100644 --- a/src/input/BBQ10Keyboard.cpp +++ b/src/input/BBQ10Keyboard.cpp @@ -22,6 +22,8 @@ #define CFG_NUMLOCK_INT (1 << 3) #define CFG_KEY_INT (1 << 4) #define CFG_PANIC_INT (1 << 5) +#define CFG_REPORT_MODS (1 << 6) +#define CFG_USE_MODS (1 << 7) #define INT_OVERFLOW (1 << 0) #define INT_CAPSLOCK (1 << 1) @@ -66,6 +68,8 @@ void BBQ10Keyboard::reset() writeCallback(m_addr, _REG_RST, &data, 0); } delay(100); + writeRegister(_REG_CFG, readRegister8(_REG_CFG) | CFG_REPORT_MODS); + delay(100); } void BBQ10Keyboard::attachInterrupt(uint8_t pin, void (*func)(void)) const diff --git a/src/input/BBQ10Keyboard.h b/src/input/BBQ10Keyboard.h index da6de71d7..07d02308f 100644 --- a/src/input/BBQ10Keyboard.h +++ b/src/input/BBQ10Keyboard.h @@ -3,6 +3,11 @@ #include "configuration.h" #include +#define KEY_MOD_ALT (0x1A) +#define KEY_MOD_SHL (0x1B) +#define KEY_MOD_SHR (0x1C) +#define KEY_MOD_SYM (0x1D) + class BBQ10Keyboard { public: diff --git a/src/input/kbI2cBase.cpp b/src/input/kbI2cBase.cpp index 3289a665c..56d065070 100644 --- a/src/input/kbI2cBase.cpp +++ b/src/input/kbI2cBase.cpp @@ -78,21 +78,48 @@ int32_t KbI2cBase::runOnce() e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_BACK; e.kbchar = key.key; break; - case 0x12: // sym shift+2 - e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_UP; - e.kbchar = 0xb5; + case 'e': // sym e + case '2': // sym shift+2 + if (is_sym) { + e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_UP; + e.kbchar = 0xb5; + } else { + e.inputEvent = ANYKEY; + e.kbchar = key.key; + } break; - case 0x18: // sym shift+8 - e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_DOWN; - e.kbchar = 0xb6; + case 'x': // sym x + case '8': // sym shift+8 + if (is_sym) { + e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_DOWN; + e.kbchar = 0xb6; + } else { + e.inputEvent = ANYKEY; + e.kbchar = key.key; + } break; - case 0x14: // Left (sym shift+4) - e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT; - e.kbchar = 0x00; // tweak for destSelect + case 's': // sym s + case '4': // Left (sym shift+4) + if (is_sym) { + e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT; + e.kbchar = 0x00; // tweak for destSelect + } else { + e.inputEvent = ANYKEY; + e.kbchar = key.key; + } break; - case 0x16: // Right (sym shift+6) - e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT; - e.kbchar = 0x00; // tweak for destSelect + case 'f': // sym f + case '6': // Right (sym shift+6) + if (is_sym) { + e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT; + e.kbchar = 0x00; // tweak for destSelect + } else { + e.inputEvent = ANYKEY; + e.kbchar = key.key; + } + break; + case KEY_MOD_SYM: // toggle SYM Key + is_sym = !is_sym; break; case 0x0d: // Enter case 0x0a: // apparently Enter on Q10 is a line feed instead of carriage return diff --git a/src/input/kbI2cBase.h b/src/input/kbI2cBase.h index 59c26e16d..35b9b0901 100644 --- a/src/input/kbI2cBase.h +++ b/src/input/kbI2cBase.h @@ -19,4 +19,5 @@ class KbI2cBase : public Observable, public concurrency::OST TwoWire *i2cBus = 0; BBQ10Keyboard Q10keyboard; + bool is_sym = false; };