Add support for Hackaday Communicator function keys (#9444)
This commit is contained in:
co-authored by
GitHub
parent
23a8b5a66f
commit
fd498bebad
@@ -1731,6 +1731,26 @@ int Screen::handleInputEvent(const InputEvent *event)
|
|||||||
showFrame(FrameDirection::PREVIOUS);
|
showFrame(FrameDirection::PREVIOUS);
|
||||||
} else if (event->inputEvent == INPUT_BROKER_RIGHT || event->inputEvent == INPUT_BROKER_USER_PRESS) {
|
} else if (event->inputEvent == INPUT_BROKER_RIGHT || event->inputEvent == INPUT_BROKER_USER_PRESS) {
|
||||||
showFrame(FrameDirection::NEXT);
|
showFrame(FrameDirection::NEXT);
|
||||||
|
} else if (event->inputEvent == INPUT_BROKER_FN_F1) {
|
||||||
|
this->ui->switchToFrame(0);
|
||||||
|
lastScreenTransition = millis();
|
||||||
|
setFastFramerate();
|
||||||
|
} else if (event->inputEvent == INPUT_BROKER_FN_F2) {
|
||||||
|
this->ui->switchToFrame(1);
|
||||||
|
lastScreenTransition = millis();
|
||||||
|
setFastFramerate();
|
||||||
|
} else if (event->inputEvent == INPUT_BROKER_FN_F3) {
|
||||||
|
this->ui->switchToFrame(2);
|
||||||
|
lastScreenTransition = millis();
|
||||||
|
setFastFramerate();
|
||||||
|
} else if (event->inputEvent == INPUT_BROKER_FN_F4) {
|
||||||
|
this->ui->switchToFrame(3);
|
||||||
|
lastScreenTransition = millis();
|
||||||
|
setFastFramerate();
|
||||||
|
} else if (event->inputEvent == INPUT_BROKER_FN_F5) {
|
||||||
|
this->ui->switchToFrame(4);
|
||||||
|
lastScreenTransition = millis();
|
||||||
|
setFastFramerate();
|
||||||
} else if (event->inputEvent == INPUT_BROKER_UP_LONG) {
|
} else if (event->inputEvent == INPUT_BROKER_UP_LONG) {
|
||||||
// Long press up button for fast frame switching
|
// Long press up button for fast frame switching
|
||||||
showPrevFrame();
|
showPrevFrame();
|
||||||
|
|||||||
@@ -20,20 +20,20 @@ constexpr uint8_t modifierLeftShift = 0b0001;
|
|||||||
|
|
||||||
// Num chars per key, Modulus for rotating through characters
|
// Num chars per key, Modulus for rotating through characters
|
||||||
static uint8_t HackadayCommunicatorTapMod[_TCA8418_NUM_KEYS] = {
|
static uint8_t HackadayCommunicatorTapMod[_TCA8418_NUM_KEYS] = {
|
||||||
0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 2, 2, 2, 1, 2, 2, 0, 0, 0, 2, 1, 2, 2, 0, 1, 1, 0,
|
0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 2, 2, 2, 1, 2, 2, 0, 0, 0, 2, 1, 2, 2, 0, 1, 1, 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
static unsigned char HackadayCommunicatorTapMap[_TCA8418_NUM_KEYS][2] = {{},
|
static unsigned char HackadayCommunicatorTapMap[_TCA8418_NUM_KEYS][2] = {{},
|
||||||
{},
|
{Key::FUNCTION_F1},
|
||||||
{'+'},
|
{'+'},
|
||||||
{'9'},
|
{'9'},
|
||||||
{'8'},
|
{'8'},
|
||||||
{'7'},
|
{'7'},
|
||||||
{'2'},
|
{Key::FUNCTION_F2},
|
||||||
{'3'},
|
{Key::FUNCTION_F3},
|
||||||
{'4'},
|
{Key::FUNCTION_F4},
|
||||||
{'5'},
|
{Key::FUNCTION_F5},
|
||||||
{Key::ESC},
|
{Key::ESC},
|
||||||
{'q', 'Q'},
|
{'q', 'Q'},
|
||||||
{'w', 'W'},
|
{'w', 'W'},
|
||||||
@@ -141,6 +141,7 @@ void HackadayCommunicatorKeyboard::pressed(uint8_t key)
|
|||||||
if (state == Init || state == Busy) {
|
if (state == Init || state == Busy) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
LOG_DEBUG("Key pressed: %u", key);
|
||||||
|
|
||||||
if (modifierFlag && (millis() - last_modifier_time > _TCA8418_MULTI_TAP_THRESHOLD)) {
|
if (modifierFlag && (millis() - last_modifier_time > _TCA8418_MULTI_TAP_THRESHOLD)) {
|
||||||
modifierFlag = 0;
|
modifierFlag = 0;
|
||||||
|
|||||||
@@ -27,6 +27,11 @@ enum input_broker_event {
|
|||||||
INPUT_BROKER_SHUTDOWN = 0x9b,
|
INPUT_BROKER_SHUTDOWN = 0x9b,
|
||||||
INPUT_BROKER_GPS_TOGGLE = 0x9e,
|
INPUT_BROKER_GPS_TOGGLE = 0x9e,
|
||||||
INPUT_BROKER_SEND_PING = 0xaf,
|
INPUT_BROKER_SEND_PING = 0xaf,
|
||||||
|
INPUT_BROKER_FN_F1 = 0xf1,
|
||||||
|
INPUT_BROKER_FN_F2 = 0xf2,
|
||||||
|
INPUT_BROKER_FN_F3 = 0xf3,
|
||||||
|
INPUT_BROKER_FN_F4 = 0xf4,
|
||||||
|
INPUT_BROKER_FN_F5 = 0xf5,
|
||||||
INPUT_BROKER_MATRIXKEY = 0xFE,
|
INPUT_BROKER_MATRIXKEY = 0xFE,
|
||||||
INPUT_BROKER_ANYKEY = 0xff
|
INPUT_BROKER_ANYKEY = 0xff
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,12 @@ class TCA8418KeyboardBase
|
|||||||
GPS_TOGGLE = 0x9E,
|
GPS_TOGGLE = 0x9E,
|
||||||
MUTE_TOGGLE = 0xAC,
|
MUTE_TOGGLE = 0xAC,
|
||||||
SEND_PING = 0xAF,
|
SEND_PING = 0xAF,
|
||||||
BL_TOGGLE = 0xAB
|
BL_TOGGLE = 0xAB,
|
||||||
|
FUNCTION_F1 = 0xF1,
|
||||||
|
FUNCTION_F2 = 0xF2,
|
||||||
|
FUNCTION_F3 = 0xF3,
|
||||||
|
FUNCTION_F4 = 0xF4,
|
||||||
|
FUNCTION_F5 = 0xF5
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef uint8_t (*i2c_com_fptr_t)(uint8_t dev_addr, uint8_t reg_addr, uint8_t *data, uint8_t len);
|
typedef uint8_t (*i2c_com_fptr_t)(uint8_t dev_addr, uint8_t reg_addr, uint8_t *data, uint8_t len);
|
||||||
|
|||||||
@@ -321,6 +321,26 @@ int32_t KbI2cBase::runOnce()
|
|||||||
e.inputEvent = INPUT_BROKER_ANYKEY;
|
e.inputEvent = INPUT_BROKER_ANYKEY;
|
||||||
e.kbchar = INPUT_BROKER_MSG_TAB;
|
e.kbchar = INPUT_BROKER_MSG_TAB;
|
||||||
break;
|
break;
|
||||||
|
case TCA8418KeyboardBase::FUNCTION_F1:
|
||||||
|
e.inputEvent = INPUT_BROKER_FN_F1;
|
||||||
|
e.kbchar = 0x00;
|
||||||
|
break;
|
||||||
|
case TCA8418KeyboardBase::FUNCTION_F2:
|
||||||
|
e.inputEvent = INPUT_BROKER_FN_F2;
|
||||||
|
e.kbchar = 0x00;
|
||||||
|
break;
|
||||||
|
case TCA8418KeyboardBase::FUNCTION_F3:
|
||||||
|
e.inputEvent = INPUT_BROKER_FN_F3;
|
||||||
|
e.kbchar = 0x00;
|
||||||
|
break;
|
||||||
|
case TCA8418KeyboardBase::FUNCTION_F4:
|
||||||
|
e.inputEvent = INPUT_BROKER_FN_F4;
|
||||||
|
e.kbchar = 0x00;
|
||||||
|
break;
|
||||||
|
case TCA8418KeyboardBase::FUNCTION_F5:
|
||||||
|
e.inputEvent = INPUT_BROKER_FN_F5;
|
||||||
|
e.kbchar = 0x00;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
if (nextEvent > 127) {
|
if (nextEvent > 127) {
|
||||||
e.inputEvent = INPUT_BROKER_NONE;
|
e.inputEvent = INPUT_BROKER_NONE;
|
||||||
|
|||||||
Reference in New Issue
Block a user