Move defines to input broker

pull/4623/head
Robert Fisk 2024-09-05 22:32:24 -04:00 zatwierdzone przez Thomas Göttgens
rodzic 8e0a342f06
commit 962d9ff220
6 zmienionych plików z 56 dodań i 59 usunięć

Wyświetl plik

@ -4,6 +4,20 @@
#define ANYKEY 0xFF #define ANYKEY 0xFF
#define MATRIXKEY 0xFE #define MATRIXKEY 0xFE
#define INPUT_BROKER_MSG_BRIGHTNESS_UP 0x11
#define INPUT_BROKER_MSG_BRIGHTNESS_DOWN 0x12
#define INPUT_BROKER_MSG_REBOOT 0x90
#define INPUT_BROKER_MSG_SHUTDOWN 0x9b
#define INPUT_BROKER_MSG_GPS_TOGGLE 0x9e
#define INPUT_BROKER_MSG_MUTE_TOGGLE 0xac
#define INPUT_BROKER_MSG_SEND_PING 0xaf
#define INPUT_BROKER_MSG_LEFT 0xb4
#define INPUT_BROKER_MSG_UP 0xb5
#define INPUT_BROKER_MSG_DOWN 0xb6
#define INPUT_BROKER_MSG_RIGHT 0xb7
#define INPUT_BROKER_MSG_FN_SYMBOL_ON 0xf1
#define INPUT_BROKER_MSG_FN_SYMBOL_OFF 0xf2
typedef struct _InputEvent { typedef struct _InputEvent {
const char *source; const char *source;
char inputEvent; char inputEvent;

Wyświetl plik

@ -1,7 +1,6 @@
#include "configuration.h" #include "configuration.h"
#if ARCH_PORTDUINO #if ARCH_PORTDUINO
#include "LinuxInput.h" #include "LinuxInput.h"
#include "modules/CannedMessageModule.h"
#include "platform/portduino/PortduinoGlue.h" #include "platform/portduino/PortduinoGlue.h"
#include <assert.h> #include <assert.h>
#include <ctype.h> #include <ctype.h>
@ -148,11 +147,11 @@ int32_t LinuxInput::runOnce()
case KEY_LEFT: // Left case KEY_LEFT: // Left
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT; e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT;
break; break;
e.kbchar = CANNED_MESSAGE_KEY_LEFT; e.kbchar = INPUT_BROKER_MSG_LEFT;
case KEY_RIGHT: // Right case KEY_RIGHT: // Right
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT; e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT;
break; break;
e.kbchar = CANNED_MESSAGE_KEY_RIGHT; e.kbchar = INPUT_BROKER_MSG_RIGHT;
case KEY_ENTER: // Enter case KEY_ENTER: // Enter
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_SELECT; e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_SELECT;
break; break;

Wyświetl plik

@ -1,6 +1,5 @@
#include "SerialKeyboard.h" #include "SerialKeyboard.h"
#include "configuration.h" #include "configuration.h"
#include "modules/CannedMessageModule.h"
#ifdef INPUTBROKER_SERIAL_TYPE #ifdef INPUTBROKER_SERIAL_TYPE
#define CANNED_MESSAGE_MODULE_ENABLE 1 // in case it's not set in the variant file #define CANNED_MESSAGE_MODULE_ENABLE 1 // in case it's not set in the variant file
@ -88,7 +87,7 @@ int32_t SerialKeyboard::runOnce()
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_UP; e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_UP;
} else if (!(shiftRegister2 & (1 << 2))) { } else if (!(shiftRegister2 & (1 << 2))) {
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT; e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT;
e.kbchar = CANNED_MESSAGE_KEY_RIGHT; e.kbchar = INPUT_BROKER_MSG_RIGHT;
} else if (!(shiftRegister2 & (1 << 1))) { } else if (!(shiftRegister2 & (1 << 1))) {
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_SELECT; e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_SELECT;
} else if (!(shiftRegister2 & (1 << 0))) { } else if (!(shiftRegister2 & (1 << 0))) {

Wyświetl plik

@ -2,7 +2,6 @@
#include "configuration.h" #include "configuration.h"
#include "detect/ScanI2C.h" #include "detect/ScanI2C.h"
#include "detect/ScanI2CTwoWire.h" #include "detect/ScanI2CTwoWire.h"
#include "modules/CannedMessageModule.h"
extern ScanI2C::DeviceAddress cardkb_found; extern ScanI2C::DeviceAddress cardkb_found;
extern uint8_t kb_model; extern uint8_t kb_model;
@ -95,7 +94,7 @@ int32_t KbI2cBase::runOnce()
case 'e': // sym e case 'e': // sym e
if (is_sym) { if (is_sym) {
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_UP; e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_UP;
e.kbchar = CANNED_MESSAGE_KEY_UP; e.kbchar = INPUT_BROKER_MSG_UP;
is_sym = false; // reset sym state after second keypress is_sym = false; // reset sym state after second keypress
} else { } else {
e.inputEvent = ANYKEY; e.inputEvent = ANYKEY;
@ -105,7 +104,7 @@ int32_t KbI2cBase::runOnce()
case 'x': // sym x case 'x': // sym x
if (is_sym) { if (is_sym) {
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_DOWN; e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_DOWN;
e.kbchar = CANNED_MESSAGE_KEY_DOWN; e.kbchar = INPUT_BROKER_MSG_DOWN;
is_sym = false; // reset sym state after second keypress is_sym = false; // reset sym state after second keypress
} else { } else {
e.inputEvent = ANYKEY; e.inputEvent = ANYKEY;
@ -135,8 +134,8 @@ int32_t KbI2cBase::runOnce()
case 0x13: // Code scanner says the SYM key is 0x13 case 0x13: // Code scanner says the SYM key is 0x13
is_sym = !is_sym; is_sym = !is_sym;
e.inputEvent = ANYKEY; e.inputEvent = ANYKEY;
e.kbchar = is_sym ? CANNED_MESSAGE_KEY_FN_SYMBOL_ON // send 0xf1 to tell CannedMessages to display that e.kbchar = is_sym ? INPUT_BROKER_MSG_FN_SYMBOL_ON // send 0xf1 to tell CannedMessages to display that
: CANNED_MESSAGE_KEY_FN_SYMBOL_OFF; // the modifier key is active : INPUT_BROKER_MSG_FN_SYMBOL_OFF; // the modifier key is active
break; break;
case 0x0a: // apparently Enter on Q10 is a line feed instead of carriage return case 0x0a: // apparently Enter on Q10 is a line feed instead of carriage return
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_SELECT; e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_SELECT;
@ -215,7 +214,7 @@ int32_t KbI2cBase::runOnce()
if (is_sym) { if (is_sym) {
is_sym = false; is_sym = false;
e.inputEvent = ANYKEY; e.inputEvent = ANYKEY;
e.kbchar = CANNED_MESSAGE_KEY_MUTE_TOGGLE; // mute notifications e.kbchar = INPUT_BROKER_MSG_MUTE_TOGGLE; // mute notifications
} else { } else {
e.inputEvent = ANYKEY; e.inputEvent = ANYKEY;
e.kbchar = c; e.kbchar = c;
@ -225,7 +224,7 @@ int32_t KbI2cBase::runOnce()
if (is_sym) { if (is_sym) {
is_sym = false; is_sym = false;
e.inputEvent = ANYKEY; e.inputEvent = ANYKEY;
e.kbchar = CANNED_MESSAGE_KEY_BRIGHTNESS_UP; // Increase Brightness code e.kbchar = INPUT_BROKER_MSG_BRIGHTNESS_UP; // Increase Brightness code
} else { } else {
e.inputEvent = ANYKEY; e.inputEvent = ANYKEY;
e.kbchar = c; e.kbchar = c;
@ -235,7 +234,7 @@ int32_t KbI2cBase::runOnce()
if (is_sym) { if (is_sym) {
is_sym = false; is_sym = false;
e.inputEvent = ANYKEY; e.inputEvent = ANYKEY;
e.kbchar = CANNED_MESSAGE_KEY_BRIGHTNESS_DOWN; // Decrease Brightness code e.kbchar = INPUT_BROKER_MSG_BRIGHTNESS_DOWN; // Decrease Brightness code
} else { } else {
e.inputEvent = ANYKEY; e.inputEvent = ANYKEY;
e.kbchar = c; e.kbchar = c;
@ -245,7 +244,7 @@ int32_t KbI2cBase::runOnce()
if (is_sym) { if (is_sym) {
is_sym = false; is_sym = false;
e.inputEvent = ANYKEY; e.inputEvent = ANYKEY;
e.kbchar = CANNED_MESSAGE_KEY_SEND_PING; // (fn + space) e.kbchar = INPUT_BROKER_MSG_SEND_PING; // (fn + space)
} else { } else {
e.inputEvent = ANYKEY; e.inputEvent = ANYKEY;
e.kbchar = c; e.kbchar = c;
@ -255,7 +254,7 @@ int32_t KbI2cBase::runOnce()
if (is_sym) { if (is_sym) {
is_sym = false; is_sym = false;
e.inputEvent = ANYKEY; e.inputEvent = ANYKEY;
e.kbchar = CANNED_MESSAGE_KEY_GPS_TOGGLE; e.kbchar = INPUT_BROKER_MSG_GPS_TOGGLE;
} else { } else {
e.inputEvent = ANYKEY; e.inputEvent = ANYKEY;
e.kbchar = c; e.kbchar = c;
@ -270,33 +269,33 @@ int32_t KbI2cBase::runOnce()
break; break;
case 0xb5: // Up case 0xb5: // Up
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_UP; e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_UP;
e.kbchar = CANNED_MESSAGE_KEY_UP; e.kbchar = INPUT_BROKER_MSG_UP;
break; break;
case 0xb6: // Down case 0xb6: // Down
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_DOWN; e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_DOWN;
e.kbchar = CANNED_MESSAGE_KEY_DOWN; e.kbchar = INPUT_BROKER_MSG_DOWN;
break; break;
case 0xb4: // Left case 0xb4: // Left
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT; e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT;
e.kbchar = CANNED_MESSAGE_KEY_LEFT; e.kbchar = INPUT_BROKER_MSG_LEFT;
break; break;
case 0xb7: // Right case 0xb7: // Right
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT; e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT;
e.kbchar = CANNED_MESSAGE_KEY_RIGHT; e.kbchar = INPUT_BROKER_MSG_RIGHT;
break; break;
case 0xc: // Modifier key: 0xc is alt+c (Other options could be: 0xea = shift+mic button or 0x4 shift+$(speaker)) case 0xc: // Modifier key: 0xc is alt+c (Other options could be: 0xea = shift+mic button or 0x4 shift+$(speaker))
// toggle moddifiers button. // toggle moddifiers button.
is_sym = !is_sym; is_sym = !is_sym;
e.inputEvent = ANYKEY; e.inputEvent = ANYKEY;
e.kbchar = is_sym ? CANNED_MESSAGE_KEY_FN_SYMBOL_ON // send 0xf1 to tell CannedMessages to display that the e.kbchar = is_sym ? INPUT_BROKER_MSG_FN_SYMBOL_ON // send 0xf1 to tell CannedMessages to display that the
: CANNED_MESSAGE_KEY_FN_SYMBOL_OFF; // modifier key is active : INPUT_BROKER_MSG_FN_SYMBOL_OFF; // modifier key is active
break; break;
case 0x90: // fn+r CANNED_MESSAGE_KEY_REBOOT case 0x90: // fn+r INPUT_BROKER_MSG_REBOOT
case 0x91: // fn+t case 0x91: // fn+t
case 0x9b: // fn+s CANNED_MESSAGE_KEY_SHUTDOWN case 0x9b: // fn+s INPUT_BROKER_MSG_SHUTDOWN
case 0xac: // fn+m CANNED_MESSAGE_KEY_MUTE_TOGGLE case 0xac: // fn+m INPUT_BROKER_MSG_MUTE_TOGGLE
case 0x9e: // fn+g CANNED_MESSAGE_KEY_GPS_TOGGLE case 0x9e: // fn+g INPUT_BROKER_MSG_GPS_TOGGLE
case 0xaf: // fn+space CANNED_MESSAGE_KEY_SEND_PING case 0xaf: // fn+space INPUT_BROKER_MSG_SEND_PING
// just pass those unmodified // just pass those unmodified
e.inputEvent = ANYKEY; e.inputEvent = ANYKEY;
e.kbchar = c; e.kbchar = c;

Wyświetl plik

@ -190,17 +190,17 @@ int CannedMessageModule::handleInputEvent(const InputEvent *event)
#if defined(T_WATCH_S3) || defined(RAK14014) #if defined(T_WATCH_S3) || defined(RAK14014)
if (event->inputEvent == static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT)) { if (event->inputEvent == static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT)) {
this->payload = CANNED_MESSAGE_KEY_LEFT; this->payload = INPUT_BROKER_MSG_LEFT;
} else if (event->inputEvent == static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT)) { } else if (event->inputEvent == static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT)) {
this->payload = CANNED_MESSAGE_KEY_RIGHT; this->payload = INPUT_BROKER_MSG_RIGHT;
} }
#else #else
// tweak for left/right events generated via trackball/touch with empty kbchar // tweak for left/right events generated via trackball/touch with empty kbchar
if (!event->kbchar) { if (!event->kbchar) {
if (event->inputEvent == static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT)) { if (event->inputEvent == static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT)) {
this->payload = CANNED_MESSAGE_KEY_LEFT; this->payload = INPUT_BROKER_MSG_LEFT;
} else if (event->inputEvent == static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT)) { } else if (event->inputEvent == static_cast<char>(meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT)) {
this->payload = CANNED_MESSAGE_KEY_RIGHT; this->payload = INPUT_BROKER_MSG_RIGHT;
} }
} else { } else {
// pass the pressed key // pass the pressed key
@ -222,26 +222,26 @@ int CannedMessageModule::handleInputEvent(const InputEvent *event)
// Run modifier key code below, (doesnt inturrupt typing or reset to start screen page) // Run modifier key code below, (doesnt inturrupt typing or reset to start screen page)
switch (event->kbchar) { switch (event->kbchar) {
case CANNED_MESSAGE_KEY_BRIGHTNESS_UP: // make screen brighter case INPUT_BROKER_MSG_BRIGHTNESS_UP: // make screen brighter
if (screen) if (screen)
screen->increaseBrightness(); screen->increaseBrightness();
LOG_DEBUG("increasing Screen Brightness\n"); LOG_DEBUG("increasing Screen Brightness\n");
break; break;
case CANNED_MESSAGE_KEY_BRIGHTNESS_DOWN: // make screen dimmer case INPUT_BROKER_MSG_BRIGHTNESS_DOWN: // make screen dimmer
if (screen) if (screen)
screen->decreaseBrightness(); screen->decreaseBrightness();
LOG_DEBUG("Decreasing Screen Brightness\n"); LOG_DEBUG("Decreasing Screen Brightness\n");
break; break;
case CANNED_MESSAGE_KEY_FN_SYMBOL_ON: // draw modifier (function) symbal case INPUT_BROKER_MSG_FN_SYMBOL_ON: // draw modifier (function) symbal
if (screen) if (screen)
screen->setFunctionSymbal("Fn"); screen->setFunctionSymbal("Fn");
break; break;
case CANNED_MESSAGE_KEY_FN_SYMBOL_OFF: // remove modifier (function) symbal case INPUT_BROKER_MSG_FN_SYMBOL_OFF: // remove modifier (function) symbal
if (screen) if (screen)
screen->removeFunctionSymbal("Fn"); screen->removeFunctionSymbal("Fn");
break; break;
// mute (switch off/toggle) external notifications on fn+m // mute (switch off/toggle) external notifications on fn+m
case CANNED_MESSAGE_KEY_MUTE_TOGGLE: case INPUT_BROKER_MSG_MUTE_TOGGLE:
if (moduleConfig.external_notification.enabled == true) { if (moduleConfig.external_notification.enabled == true) {
if (externalNotificationModule->getMute()) { if (externalNotificationModule->getMute()) {
externalNotificationModule->setMute(false); externalNotificationModule->setMute(false);
@ -257,7 +257,7 @@ int CannedMessageModule::handleInputEvent(const InputEvent *event)
} }
} }
break; break;
case CANNED_MESSAGE_KEY_GPS_TOGGLE: // toggle GPS like triple press does case INPUT_BROKER_MSG_GPS_TOGGLE: // toggle GPS like triple press does
#if !MESHTASTIC_EXCLUDE_GPS #if !MESHTASTIC_EXCLUDE_GPS
if (gps != nullptr) { if (gps != nullptr) {
gps->toggleGpsMode(); gps->toggleGpsMode();
@ -267,7 +267,7 @@ int CannedMessageModule::handleInputEvent(const InputEvent *event)
showTemporaryMessage("GPS Toggled"); showTemporaryMessage("GPS Toggled");
#endif #endif
break; break;
case CANNED_MESSAGE_KEY_SEND_PING: // fn+space send network ping like double press does case INPUT_BROKER_MSG_SEND_PING: // fn+space send network ping like double press does
service->refreshLocalMeshNode(); service->refreshLocalMeshNode();
if (service->trySendPosition(NODENUM_BROADCAST, true)) { if (service->trySendPosition(NODENUM_BROADCAST, true)) {
showTemporaryMessage("Position \nUpdate Sent"); showTemporaryMessage("Position \nUpdate Sent");
@ -283,7 +283,7 @@ int CannedMessageModule::handleInputEvent(const InputEvent *event)
validEvent = true; validEvent = true;
break; break;
} }
if (screen && (event->kbchar != CANNED_MESSAGE_KEY_FN_SYMBOL_ON)) { if (screen && (event->kbchar != INPUT_BROKER_MSG_FN_SYMBOL_ON)) {
screen->removeFunctionSymbal("Fn"); // remove modifier (function) symbal screen->removeFunctionSymbal("Fn"); // remove modifier (function) symbal
} }
} }
@ -505,7 +505,7 @@ int32_t CannedMessageModule::runOnce()
} }
} else if (this->runState == CANNED_MESSAGE_RUN_STATE_FREETEXT || this->runState == CANNED_MESSAGE_RUN_STATE_ACTIVE) { } else if (this->runState == CANNED_MESSAGE_RUN_STATE_FREETEXT || this->runState == CANNED_MESSAGE_RUN_STATE_ACTIVE) {
switch (this->payload) { switch (this->payload) {
case CANNED_MESSAGE_KEY_LEFT: case INPUT_BROKER_MSG_LEFT:
if (this->destSelect == CANNED_MESSAGE_DESTINATION_TYPE_NODE) { if (this->destSelect == CANNED_MESSAGE_DESTINATION_TYPE_NODE) {
size_t numMeshNodes = nodeDB->getNumMeshNodes(); size_t numMeshNodes = nodeDB->getNumMeshNodes();
if (this->dest == NODENUM_BROADCAST) { if (this->dest == NODENUM_BROADCAST) {
@ -540,7 +540,7 @@ int32_t CannedMessageModule::runOnce()
} }
} }
break; break;
case CANNED_MESSAGE_KEY_RIGHT: case INPUT_BROKER_MSG_RIGHT:
if (this->destSelect == CANNED_MESSAGE_DESTINATION_TYPE_NODE) { if (this->destSelect == CANNED_MESSAGE_DESTINATION_TYPE_NODE) {
size_t numMeshNodes = nodeDB->getNumMeshNodes(); size_t numMeshNodes = nodeDB->getNumMeshNodes();
if (this->dest == NODENUM_BROADCAST) { if (this->dest == NODENUM_BROADCAST) {
@ -602,19 +602,19 @@ int32_t CannedMessageModule::runOnce()
this->destSelect = CANNED_MESSAGE_DESTINATION_TYPE_NODE; this->destSelect = CANNED_MESSAGE_DESTINATION_TYPE_NODE;
} }
break; break;
case CANNED_MESSAGE_KEY_LEFT: case INPUT_BROKER_MSG_LEFT:
case CANNED_MESSAGE_KEY_RIGHT: case INPUT_BROKER_MSG_RIGHT:
// already handled above // already handled above
break; break;
// handle fn+s for shutdown // handle fn+s for shutdown
case CANNED_MESSAGE_KEY_SHUTDOWN: case INPUT_BROKER_MSG_SHUTDOWN:
if (screen) if (screen)
screen->startAlert("Shutting down..."); screen->startAlert("Shutting down...");
shutdownAtMsec = millis() + DEFAULT_SHUTDOWN_SECONDS * 1000; shutdownAtMsec = millis() + DEFAULT_SHUTDOWN_SECONDS * 1000;
runState = CANNED_MESSAGE_RUN_STATE_INACTIVE; runState = CANNED_MESSAGE_RUN_STATE_INACTIVE;
break; break;
// and fn+r for reboot // and fn+r for reboot
case CANNED_MESSAGE_KEY_REBOOT: case INPUT_BROKER_MSG_REBOOT:
if (screen) if (screen)
screen->startAlert("Rebooting..."); screen->startAlert("Rebooting...");
rebootAtMsec = millis() + DEFAULT_REBOOT_SECONDS * 1000; rebootAtMsec = millis() + DEFAULT_REBOOT_SECONDS * 1000;

Wyświetl plik

@ -43,20 +43,6 @@ struct Letter {
#define CANNED_MESSAGE_MODULE_ENABLE 0 #define CANNED_MESSAGE_MODULE_ENABLE 0
#endif #endif
#define CANNED_MESSAGE_KEY_BRIGHTNESS_UP 0x11
#define CANNED_MESSAGE_KEY_BRIGHTNESS_DOWN 0x12
#define CANNED_MESSAGE_KEY_REBOOT 0x90
#define CANNED_MESSAGE_KEY_SHUTDOWN 0x9b
#define CANNED_MESSAGE_KEY_GPS_TOGGLE 0x9e
#define CANNED_MESSAGE_KEY_MUTE_TOGGLE 0xac
#define CANNED_MESSAGE_KEY_SEND_PING 0xaf
#define CANNED_MESSAGE_KEY_LEFT 0xb4
#define CANNED_MESSAGE_KEY_UP 0xb5
#define CANNED_MESSAGE_KEY_DOWN 0xb6
#define CANNED_MESSAGE_KEY_RIGHT 0xb7
#define CANNED_MESSAGE_KEY_FN_SYMBOL_ON 0xf1
#define CANNED_MESSAGE_KEY_FN_SYMBOL_OFF 0xf2
class CannedMessageModule : public SinglePortModule, public Observable<const UIFrameEvent *>, private concurrency::OSThread class CannedMessageModule : public SinglePortModule, public Observable<const UIFrameEvent *>, private concurrency::OSThread
{ {
CallbackObserver<CannedMessageModule, const InputEvent *> inputObserver = CallbackObserver<CannedMessageModule, const InputEvent *> inputObserver =