mirror of
https://github.com/meshtastic/firmware.git
synced 2025-02-12 23:51:25 +00:00
Add Notification on device screen following feature toggle (#3627)
* Update CannedMessageModule.h * Update CannedMessageModule.cpp * Update CannedMessageModule.cpp hopefully this fixes the errors on Trunk * Update CannedMessageModule.cpp Changed "Ping Broadcasted" with "Telemetry Update Sent" * tryfix: disable tempmessage again after 2 seconds * fix 2s showtime * Put spelling fix back * Fix build --------- Co-authored-by: Thomas Göttgens <tgoettgens@gmail.com> Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
This commit is contained in:
parent
e683d8f552
commit
38c4d35a7b
@ -233,14 +233,16 @@ int32_t CannedMessageModule::runOnce()
|
|||||||
{
|
{
|
||||||
if (((!moduleConfig.canned_message.enabled) && !CANNED_MESSAGE_MODULE_ENABLE) ||
|
if (((!moduleConfig.canned_message.enabled) && !CANNED_MESSAGE_MODULE_ENABLE) ||
|
||||||
(this->runState == CANNED_MESSAGE_RUN_STATE_DISABLED) || (this->runState == CANNED_MESSAGE_RUN_STATE_INACTIVE)) {
|
(this->runState == CANNED_MESSAGE_RUN_STATE_DISABLED) || (this->runState == CANNED_MESSAGE_RUN_STATE_INACTIVE)) {
|
||||||
|
temporaryMessage = "";
|
||||||
return INT32_MAX;
|
return INT32_MAX;
|
||||||
}
|
}
|
||||||
// LOG_DEBUG("Check status\n");
|
// LOG_DEBUG("Check status\n");
|
||||||
UIFrameEvent e = {false, true};
|
UIFrameEvent e = {false, true};
|
||||||
if ((this->runState == CANNED_MESSAGE_RUN_STATE_SENDING_ACTIVE) ||
|
if ((this->runState == CANNED_MESSAGE_RUN_STATE_SENDING_ACTIVE) ||
|
||||||
(this->runState == CANNED_MESSAGE_RUN_STATE_ACK_NACK_RECEIVED)) {
|
(this->runState == CANNED_MESSAGE_RUN_STATE_ACK_NACK_RECEIVED) || (this->runState == CANNED_MESSAGE_RUN_STATE_MESSAGE)) {
|
||||||
// TODO: might have some feedback of sending state
|
// TODO: might have some feedback of sending state
|
||||||
this->runState = CANNED_MESSAGE_RUN_STATE_INACTIVE;
|
this->runState = CANNED_MESSAGE_RUN_STATE_INACTIVE;
|
||||||
|
temporaryMessage = "";
|
||||||
e.frameChanged = true;
|
e.frameChanged = true;
|
||||||
this->currentMessageIndex = -1;
|
this->currentMessageIndex = -1;
|
||||||
this->freetext = ""; // clear freetext
|
this->freetext = ""; // clear freetext
|
||||||
@ -434,7 +436,7 @@ int32_t CannedMessageModule::runOnce()
|
|||||||
}
|
}
|
||||||
if (screen)
|
if (screen)
|
||||||
screen->forceDisplay();
|
screen->forceDisplay();
|
||||||
runState = CANNED_MESSAGE_RUN_STATE_INACTIVE;
|
showTemporaryMessage("GPS Toggled");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// mute (switch off/toggle) external notifications on fn+m
|
// mute (switch off/toggle) external notifications on fn+m
|
||||||
@ -442,18 +444,21 @@ int32_t CannedMessageModule::runOnce()
|
|||||||
if (moduleConfig.external_notification.enabled == true) {
|
if (moduleConfig.external_notification.enabled == true) {
|
||||||
if (externalNotificationModule->getMute()) {
|
if (externalNotificationModule->getMute()) {
|
||||||
externalNotificationModule->setMute(false);
|
externalNotificationModule->setMute(false);
|
||||||
runState = CANNED_MESSAGE_RUN_STATE_INACTIVE;
|
showTemporaryMessage("Notifications \nEnabled");
|
||||||
} else {
|
} else {
|
||||||
externalNotificationModule->stopNow(); // this will turn off all GPIO and sounds and idle the loop
|
externalNotificationModule->stopNow(); // this will turn off all GPIO and sounds and idle the loop
|
||||||
externalNotificationModule->setMute(true);
|
externalNotificationModule->setMute(true);
|
||||||
runState = CANNED_MESSAGE_RUN_STATE_INACTIVE;
|
showTemporaryMessage("Notifications \nDisabled");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0xaf: // fn+space send network ping like double press does
|
case 0xaf: // fn+space send network ping like double press does
|
||||||
service.refreshLocalMeshNode();
|
service.refreshLocalMeshNode();
|
||||||
service.trySendPosition(NODENUM_BROADCAST, true);
|
if (service.trySendPosition(NODENUM_BROADCAST, true)) {
|
||||||
runState = CANNED_MESSAGE_RUN_STATE_INACTIVE;
|
showTemporaryMessage("Position \nUpdate Sent");
|
||||||
|
} else {
|
||||||
|
showTemporaryMessage("Node Info \nUpdate Sent");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (this->cursor == this->freetext.length()) {
|
if (this->cursor == this->freetext.length()) {
|
||||||
@ -542,12 +547,27 @@ int CannedMessageModule::getPrevIndex()
|
|||||||
return this->currentMessageIndex - 1;
|
return this->currentMessageIndex - 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void CannedMessageModule::showTemporaryMessage(const String &message)
|
||||||
|
{
|
||||||
|
temporaryMessage = message;
|
||||||
|
UIFrameEvent e = {false, true};
|
||||||
|
e.frameChanged = true;
|
||||||
|
notifyObservers(&e);
|
||||||
|
runState = CANNED_MESSAGE_RUN_STATE_MESSAGE;
|
||||||
|
// run this loop again in 2 seconds, next iteration will clear the display
|
||||||
|
setIntervalFromNow(2000);
|
||||||
|
}
|
||||||
|
|
||||||
void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)
|
void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)
|
||||||
{
|
{
|
||||||
char buffer[50];
|
char buffer[50];
|
||||||
|
|
||||||
if (cannedMessageModule->runState == CANNED_MESSAGE_RUN_STATE_ACK_NACK_RECEIVED) {
|
if (temporaryMessage.length() != 0) {
|
||||||
|
LOG_DEBUG("Drawing temporary message: %s", temporaryMessage.c_str());
|
||||||
|
display->setTextAlignment(TEXT_ALIGN_CENTER);
|
||||||
|
display->setFont(FONT_MEDIUM);
|
||||||
|
display->drawString(display->getWidth() / 2 + x, 0 + y + 12, temporaryMessage);
|
||||||
|
} else if (cannedMessageModule->runState == CANNED_MESSAGE_RUN_STATE_ACK_NACK_RECEIVED) {
|
||||||
display->setTextAlignment(TEXT_ALIGN_CENTER);
|
display->setTextAlignment(TEXT_ALIGN_CENTER);
|
||||||
display->setFont(FONT_MEDIUM);
|
display->setFont(FONT_MEDIUM);
|
||||||
String displayString;
|
String displayString;
|
||||||
|
@ -10,6 +10,7 @@ enum cannedMessageModuleRunState {
|
|||||||
CANNED_MESSAGE_RUN_STATE_FREETEXT,
|
CANNED_MESSAGE_RUN_STATE_FREETEXT,
|
||||||
CANNED_MESSAGE_RUN_STATE_SENDING_ACTIVE,
|
CANNED_MESSAGE_RUN_STATE_SENDING_ACTIVE,
|
||||||
CANNED_MESSAGE_RUN_STATE_ACK_NACK_RECEIVED,
|
CANNED_MESSAGE_RUN_STATE_ACK_NACK_RECEIVED,
|
||||||
|
CANNED_MESSAGE_RUN_STATE_MESSAGE,
|
||||||
CANNED_MESSAGE_RUN_STATE_ACTION_SELECT,
|
CANNED_MESSAGE_RUN_STATE_ACTION_SELECT,
|
||||||
CANNED_MESSAGE_RUN_STATE_ACTION_UP,
|
CANNED_MESSAGE_RUN_STATE_ACTION_UP,
|
||||||
CANNED_MESSAGE_RUN_STATE_ACTION_DOWN,
|
CANNED_MESSAGE_RUN_STATE_ACTION_DOWN,
|
||||||
@ -51,6 +52,8 @@ class CannedMessageModule : public SinglePortModule, public Observable<const UIF
|
|||||||
void handleGetCannedMessageModuleMessages(const meshtastic_MeshPacket &req, meshtastic_AdminMessage *response);
|
void handleGetCannedMessageModuleMessages(const meshtastic_MeshPacket &req, meshtastic_AdminMessage *response);
|
||||||
void handleSetCannedMessageModuleMessages(const char *from_msg);
|
void handleSetCannedMessageModuleMessages(const char *from_msg);
|
||||||
|
|
||||||
|
void showTemporaryMessage(const String &message);
|
||||||
|
|
||||||
String drawWithCursor(String text, int cursor);
|
String drawWithCursor(String text, int cursor);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -112,6 +115,7 @@ class CannedMessageModule : public SinglePortModule, public Observable<const UIF
|
|||||||
char *messages[CANNED_MESSAGE_MODULE_MESSAGE_MAX_COUNT];
|
char *messages[CANNED_MESSAGE_MODULE_MESSAGE_MAX_COUNT];
|
||||||
int messagesCount = 0;
|
int messagesCount = 0;
|
||||||
unsigned long lastTouchMillis = 0;
|
unsigned long lastTouchMillis = 0;
|
||||||
|
String temporaryMessage;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern CannedMessageModule *cannedMessageModule;
|
extern CannedMessageModule *cannedMessageModule;
|
||||||
|
Loading…
Reference in New Issue
Block a user