Merge pull request #1110 from prampec/master

Temporary fix on canned messages total length.
This commit is contained in:
mkinney 2022-01-19 16:14:56 -08:00 committed by GitHub
commit 1acabb9d35
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 108 additions and 100 deletions

View File

@ -39,7 +39,7 @@ void RotaryEncoderInterruptBase::init(
int32_t RotaryEncoderInterruptBase::runOnce() int32_t RotaryEncoderInterruptBase::runOnce()
{ {
InputEvent e; InputEvent e;
e.inputEvent = InputEventChar_NULL; e.inputEvent = InputEventChar_KEY_NONE;
e.source = this->_originName; e.source = this->_originName;
if (this->action == ROTARY_ACTION_PRESSED) if (this->action == ROTARY_ACTION_PRESSED)
@ -58,7 +58,7 @@ int32_t RotaryEncoderInterruptBase::runOnce()
e.inputEvent = this->_eventCcw; e.inputEvent = this->_eventCcw;
} }
if (e.inputEvent != InputEventChar_NULL) if (e.inputEvent != InputEventChar_KEY_NONE)
{ {
this->notifyObservers(&e); this->notifyObservers(&e);
} }

View File

@ -86,7 +86,7 @@ extern const pb_msgdesc_t AdminMessage_msg;
#define AdminMessage_fields &AdminMessage_msg #define AdminMessage_fields &AdminMessage_msg
/* Maximum encoded size of messages (where known) */ /* Maximum encoded size of messages (where known) */
#define AdminMessage_size 1619 #define AdminMessage_size 795
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */

View File

@ -80,14 +80,14 @@ typedef enum _PositionFlags {
} PositionFlags; } PositionFlags;
typedef enum _InputEventChar { typedef enum _InputEventChar {
InputEventChar_NULL = 0, InputEventChar_KEY_NONE = 0,
InputEventChar_UP = 17, InputEventChar_KEY_UP = 17,
InputEventChar_DOWN = 18, InputEventChar_KEY_DOWN = 18,
InputEventChar_LEFT = 19, InputEventChar_KEY_LEFT = 19,
InputEventChar_RIGHT = 20, InputEventChar_KEY_RIGHT = 20,
InputEventChar_SELECT = 10, InputEventChar_KEY_SELECT = 10,
InputEventChar_BACK = 27, InputEventChar_KEY_BACK = 27,
InputEventChar_CANCEL = 24 InputEventChar_KEY_CANCEL = 24
} InputEventChar; } InputEventChar;
typedef enum _RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType { typedef enum _RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType {
@ -180,7 +180,7 @@ typedef struct _RadioConfig_UserPreferences {
InputEventChar rotary1_event_press; InputEventChar rotary1_event_press;
bool canned_message_plugin_enabled; bool canned_message_plugin_enabled;
char canned_message_plugin_allow_input_source[16]; char canned_message_plugin_allow_input_source[16];
char canned_message_plugin_messages[1024]; char canned_message_plugin_messages[200];
bool canned_message_plugin_send_bell; bool canned_message_plugin_send_bell;
} RadioConfig_UserPreferences; } RadioConfig_UserPreferences;
@ -215,9 +215,9 @@ typedef struct _RadioConfig {
#define _PositionFlags_MAX PositionFlags_POS_TIMESTAMP #define _PositionFlags_MAX PositionFlags_POS_TIMESTAMP
#define _PositionFlags_ARRAYSIZE ((PositionFlags)(PositionFlags_POS_TIMESTAMP+1)) #define _PositionFlags_ARRAYSIZE ((PositionFlags)(PositionFlags_POS_TIMESTAMP+1))
#define _InputEventChar_MIN InputEventChar_NULL #define _InputEventChar_MIN InputEventChar_KEY_NONE
#define _InputEventChar_MAX InputEventChar_BACK #define _InputEventChar_MAX InputEventChar_KEY_BACK
#define _InputEventChar_ARRAYSIZE ((InputEventChar)(InputEventChar_BACK+1)) #define _InputEventChar_ARRAYSIZE ((InputEventChar)(InputEventChar_KEY_BACK+1))
#define _RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_MIN RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_DHT11 #define _RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_MIN RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_DHT11
#define _RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_MAX RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_DHT22 #define _RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_MAX RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_DHT22
@ -418,8 +418,8 @@ extern const pb_msgdesc_t RadioConfig_UserPreferences_msg;
#define RadioConfig_UserPreferences_fields &RadioConfig_UserPreferences_msg #define RadioConfig_UserPreferences_fields &RadioConfig_UserPreferences_msg
/* Maximum encoded size of messages (where known) */ /* Maximum encoded size of messages (where known) */
#define RadioConfig_size 1616 #define RadioConfig_size 792
#define RadioConfig_UserPreferences_size 1613 #define RadioConfig_UserPreferences_size 789
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */

View File

@ -30,7 +30,7 @@ CannedMessagePlugin::CannedMessagePlugin()
/** /**
* @brief Items in array this->messages will be set to be pointing on the right * @brief Items in array this->messages will be set to be pointing on the right
* starting points of the string radioConfig.preferences.canned_message_plugin_messages * starting points of the string this->messageStore
* *
* @return int Returns the number of messages found. * @return int Returns the number of messages found.
*/ */
@ -38,17 +38,23 @@ int CannedMessagePlugin::splitConfiguredMessages()
{ {
int messageIndex = 0; int messageIndex = 0;
int i = 0; int i = 0;
strncpy(
this->messageStore,
radioConfig.preferences.canned_message_plugin_messages,
CANNED_MESSAGE_PLUGIN_MESSAGES_SIZE);
this->messages[messageIndex++] = this->messages[messageIndex++] =
radioConfig.preferences.canned_message_plugin_messages; this->messageStore;
int upTo = int upTo =
strlen(radioConfig.preferences.canned_message_plugin_messages) - 1; strlen(this->messageStore) - 1;
while (i < upTo) while (i < upTo)
{ {
if (radioConfig.preferences.canned_message_plugin_messages[i] == '|') if (this->messageStore[i] == '|')
{ {
// Message ending found, replace it with string-end character. // Message ending found, replace it with string-end character.
radioConfig.preferences.canned_message_plugin_messages[i] = '\0'; this->messageStore[i] = '\0';
DEBUG_MSG("CannedMessage %d is: '%s'\n", DEBUG_MSG("CannedMessage %d is: '%s'\n",
messageIndex-1, this->messages[messageIndex-1]); messageIndex-1, this->messages[messageIndex-1]);
@ -60,7 +66,7 @@ int CannedMessagePlugin::splitConfiguredMessages()
// Next message starts after pipe (|) just found. // Next message starts after pipe (|) just found.
this->messages[messageIndex++] = this->messages[messageIndex++] =
(radioConfig.preferences.canned_message_plugin_messages + i + 1); (this->messageStore + i + 1);
} }
i += 1; i += 1;
} }
@ -90,22 +96,22 @@ int CannedMessagePlugin::handleInputEvent(const InputEvent *event)
} }
bool validEvent = false; bool validEvent = false;
if (event->inputEvent == static_cast<char>(InputEventChar_UP)) if (event->inputEvent == static_cast<char>(InputEventChar_KEY_UP))
{ {
DEBUG_MSG("Canned message event UP\n"); DEBUG_MSG("Canned message event UP\n");
this->action = CANNED_MESSAGE_ACTION_UP; this->runState = CANNED_MESSAGE_RUN_STATE_ACTION_UP;
validEvent = true; validEvent = true;
} }
if (event->inputEvent == static_cast<char>(InputEventChar_DOWN)) if (event->inputEvent == static_cast<char>(InputEventChar_KEY_DOWN))
{ {
DEBUG_MSG("Canned message event DOWN\n"); DEBUG_MSG("Canned message event DOWN\n");
this->action = CANNED_MESSAGE_ACTION_DOWN; this->runState = CANNED_MESSAGE_RUN_STATE_ACTION_DOWN;
validEvent = true; validEvent = true;
} }
if (event->inputEvent == static_cast<char>(InputEventChar_SELECT)) if (event->inputEvent == static_cast<char>(InputEventChar_KEY_SELECT))
{ {
DEBUG_MSG("Canned message event Select\n"); DEBUG_MSG("Canned message event Select\n");
this->action = CANNED_MESSAGE_ACTION_SELECT; this->runState = CANNED_MESSAGE_RUN_STATE_ACTION_SELECT;
validEvent = true; validEvent = true;
} }
@ -145,76 +151,82 @@ void CannedMessagePlugin::sendText(NodeNum dest,
int32_t CannedMessagePlugin::runOnce() int32_t CannedMessagePlugin::runOnce()
{ {
if (!radioConfig.preferences.canned_message_plugin_enabled) if ((!radioConfig.preferences.canned_message_plugin_enabled)
|| (this->runState == CANNED_MESSAGE_RUN_STATE_INACTIVE))
{ {
return 30000; // TODO: should return MAX_VAL return 30000; // TODO: should return MAX_VAL
} }
DEBUG_MSG("Check status\n"); DEBUG_MSG("Check status\n");
UIFrameEvent e = {false, true}; UIFrameEvent e = {false, true};
if (this->sendingState == SENDING_STATE_ACTIVE) if (this->runState == CANNED_MESSAGE_RUN_STATE_SENDING_ACTIVE)
{ {
// TODO: might have some feedback of sendig state // TODO: might have some feedback of sendig state
this->sendingState = SENDING_STATE_NONE; this->runState = CANNED_MESSAGE_RUN_STATE_INACTIVE;
e.frameChanged = true; e.frameChanged = true;
this->notifyObservers(&e);
}
else if ((this->action != CANNED_MESSAGE_ACTION_NONE)
&& (this->currentMessageIndex == -1))
{
this->currentMessageIndex = 0;
DEBUG_MSG("First touch.\n");
e.frameChanged = true;
}
else if (this->action == CANNED_MESSAGE_ACTION_SELECT)
{
sendText(
NODENUM_BROADCAST,
this->messages[this->currentMessageIndex],
true);
this->sendingState = SENDING_STATE_ACTIVE;
this->currentMessageIndex = -1; this->currentMessageIndex = -1;
this->notifyObservers(&e); this->notifyObservers(&e);
return 2000;
} }
else if (this->action == CANNED_MESSAGE_ACTION_UP) else if (
{ (this->runState == CANNED_MESSAGE_RUN_STATE_ACTIVE)
this->currentMessageIndex = getPrevIndex(); && (millis() - this->lastTouchMillis) > INACTIVATE_AFTER_MS)
DEBUG_MSG("MOVE UP");
}
else if (this->action == CANNED_MESSAGE_ACTION_DOWN)
{
this->currentMessageIndex = this->getNextIndex();
DEBUG_MSG("MOVE DOWN");
}
if (this->action != CANNED_MESSAGE_ACTION_NONE)
{
this->lastTouchMillis = millis();
this->action = CANNED_MESSAGE_ACTION_NONE;
this->notifyObservers(&e);
return INACTIVATE_AFTER_MS;
}
if ((millis() - this->lastTouchMillis) > INACTIVATE_AFTER_MS)
{ {
// Reset plugin // Reset plugin
DEBUG_MSG("Reset due the lack of activity.\n"); DEBUG_MSG("Reset due the lack of activity.\n");
e.frameChanged = true; e.frameChanged = true;
this->currentMessageIndex = -1; this->currentMessageIndex = -1;
this->sendingState = SENDING_STATE_NONE; this->runState = CANNED_MESSAGE_RUN_STATE_INACTIVE;
this->notifyObservers(&e); this->notifyObservers(&e);
} }
else if (this->currentMessageIndex == -1)
{
this->currentMessageIndex = 0;
DEBUG_MSG("First touch.\n");
e.frameChanged = true;
this->runState = CANNED_MESSAGE_RUN_STATE_ACTIVE;
}
else if (this->runState == CANNED_MESSAGE_RUN_STATE_ACTION_SELECT)
{
sendText(
NODENUM_BROADCAST,
this->messages[this->currentMessageIndex],
true);
this->runState = CANNED_MESSAGE_RUN_STATE_SENDING_ACTIVE;
this->currentMessageIndex = -1;
this->notifyObservers(&e);
return 2000;
}
else if (this->runState == CANNED_MESSAGE_RUN_STATE_ACTION_UP)
{
this->currentMessageIndex = getPrevIndex();
this->runState = CANNED_MESSAGE_RUN_STATE_ACTIVE;
DEBUG_MSG("MOVE UP\n");
}
else if (this->runState == CANNED_MESSAGE_RUN_STATE_ACTION_DOWN)
{
this->currentMessageIndex = this->getNextIndex();
this->runState = CANNED_MESSAGE_RUN_STATE_ACTIVE;
DEBUG_MSG("MOVE DOWN\n");
}
if (this->runState == CANNED_MESSAGE_RUN_STATE_ACTIVE)
{
this->lastTouchMillis = millis();
this->notifyObservers(&e);
return INACTIVATE_AFTER_MS;
}
return 30000; // TODO: should return MAX_VAL return 30000; // TODO: should return MAX_VAL
} }
String CannedMessagePlugin::getCurrentMessage() const char* CannedMessagePlugin::getCurrentMessage()
{ {
return this->messages[this->currentMessageIndex]; return this->messages[this->currentMessageIndex];
} }
String CannedMessagePlugin::getPrevMessage() const char* CannedMessagePlugin::getPrevMessage()
{ {
return this->messages[this->getPrevIndex()]; return this->messages[this->getPrevIndex()];
} }
String CannedMessagePlugin::getNextMessage() const char* CannedMessagePlugin::getNextMessage()
{ {
return this->messages[this->getNextIndex()]; return this->messages[this->getNextIndex()];
} }
@ -224,11 +236,7 @@ bool CannedMessagePlugin::shouldDraw()
{ {
return false; return false;
} }
return (currentMessageIndex != -1) || (this->sendingState != SENDING_STATE_NONE); return (currentMessageIndex != -1) || (this->runState != CANNED_MESSAGE_RUN_STATE_INACTIVE);
}
cannedMessagePluginSendigState CannedMessagePlugin::getSendingState()
{
return this->sendingState;
} }
int CannedMessagePlugin::getNextIndex() int CannedMessagePlugin::getNextIndex()
@ -260,7 +268,13 @@ void CannedMessagePlugin::drawFrame(
{ {
displayedNodeNum = 0; // Not currently showing a node pane displayedNodeNum = 0; // Not currently showing a node pane
if (cannedMessagePlugin->getSendingState() == SENDING_STATE_NONE) if (cannedMessagePlugin->runState == CANNED_MESSAGE_RUN_STATE_SENDING_ACTIVE)
{
display->setTextAlignment(TEXT_ALIGN_CENTER);
display->setFont(FONT_MEDIUM);
display->drawString(display->getWidth()/2 + x, 0 + y + 12, "Sending...");
}
else
{ {
display->setTextAlignment(TEXT_ALIGN_LEFT); display->setTextAlignment(TEXT_ALIGN_LEFT);
display->setFont(FONT_SMALL); display->setFont(FONT_SMALL);
@ -270,11 +284,5 @@ void CannedMessagePlugin::drawFrame(
display->setFont(FONT_SMALL); display->setFont(FONT_SMALL);
display->drawString(0 + x, 0 + y + 24, cannedMessagePlugin->getNextMessage()); display->drawString(0 + x, 0 + y + 24, cannedMessagePlugin->getNextMessage());
} }
else
{
display->setTextAlignment(TEXT_ALIGN_CENTER);
display->setFont(FONT_MEDIUM);
display->drawString(display->getWidth()/2 + x, 0 + y + 12, "Sending...");
}
} }

View File

@ -2,22 +2,23 @@
#include "SinglePortPlugin.h" #include "SinglePortPlugin.h"
#include "input/InputBroker.h" #include "input/InputBroker.h"
enum cannedMessagePluginActionType enum cannedMessagePluginRunState
{ {
CANNED_MESSAGE_ACTION_NONE, CANNED_MESSAGE_RUN_STATE_INACTIVE,
CANNED_MESSAGE_ACTION_SELECT, CANNED_MESSAGE_RUN_STATE_ACTIVE,
CANNED_MESSAGE_ACTION_UP, CANNED_MESSAGE_RUN_STATE_SENDING_ACTIVE,
CANNED_MESSAGE_ACTION_DOWN CANNED_MESSAGE_RUN_STATE_ACTION_SELECT,
}; CANNED_MESSAGE_RUN_STATE_ACTION_UP,
CANNED_MESSAGE_RUN_STATE_ACTION_DOWN
enum cannedMessagePluginSendigState
{
SENDING_STATE_NONE,
SENDING_STATE_ACTIVE
}; };
#define CANNED_MESSAGE_PLUGIN_MESSAGE_MAX_COUNT 50 #define CANNED_MESSAGE_PLUGIN_MESSAGE_MAX_COUNT 50
/**
* Due to config-packet size restrictions we cannot have user configuration bigger
* than Constants_DATA_PAYLOAD_LEN bytes.
*/
#define CANNED_MESSAGE_PLUGIN_MESSAGES_SIZE 200
class CannedMessagePlugin : class CannedMessagePlugin :
public SinglePortPlugin, public SinglePortPlugin,
@ -29,11 +30,10 @@ class CannedMessagePlugin :
this, &CannedMessagePlugin::handleInputEvent); this, &CannedMessagePlugin::handleInputEvent);
public: public:
CannedMessagePlugin(); CannedMessagePlugin();
String getCurrentMessage(); const char* getCurrentMessage();
String getPrevMessage(); const char* getPrevMessage();
String getNextMessage(); const char* getNextMessage();
bool shouldDraw(); bool shouldDraw();
cannedMessagePluginSendigState getSendingState();
void eventUp(); void eventUp();
void eventDown(); void eventDown();
void eventSelect(); void eventSelect();
@ -57,10 +57,10 @@ class CannedMessagePlugin :
virtual void drawFrame( virtual void drawFrame(
OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y); OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y);
volatile cannedMessagePluginActionType action = CANNED_MESSAGE_ACTION_NONE;
int currentMessageIndex = -1; int currentMessageIndex = -1;
cannedMessagePluginSendigState sendingState = SENDING_STATE_NONE; cannedMessagePluginRunState runState = CANNED_MESSAGE_RUN_STATE_INACTIVE;
char messageStore[CANNED_MESSAGE_PLUGIN_MESSAGES_SIZE];
char *messages[CANNED_MESSAGE_PLUGIN_MESSAGE_MAX_COUNT]; char *messages[CANNED_MESSAGE_PLUGIN_MESSAGE_MAX_COUNT];
int messagesCount = 0; int messagesCount = 0;
unsigned long lastTouchMillis = 0; unsigned long lastTouchMillis = 0;