Files
firmware/src/plugins/CannedMessagePlugin.h

118 lines
2.7 KiB
C
Raw Normal View History

2022-01-04 19:42:28 +01:00
#pragma once
#include "SinglePortPlugin.h"
2022-01-04 19:43:06 +01:00
enum cannedMessagePluginRotaryStateType
2022-01-04 19:42:28 +01:00
{
EVENT_OCCURRED,
EVENT_CLEARED
};
enum cannedMessagePluginActionType
{
ACTION_NONE,
ACTION_PRESSED,
ACTION_UP,
ACTION_DOWN
};
2022-01-04 22:02:16 +01:00
enum cannedMessagePluginSendigState
{
SENDING_STATE_NONE,
SENDING_STATE_ACTIVE
};
2022-01-04 19:43:06 +01:00
#define CANNED_MESSAGE_PLUGIN_MESSAGE_MAX_LEN 50
static char cannedMessagePluginMessages[][CANNED_MESSAGE_PLUGIN_MESSAGE_MAX_LEN] =
{
2022-01-04 22:02:16 +01:00
"Need helping hand",
"Help me with saw",
2022-01-04 19:43:06 +01:00
"I need an alpinist",
"I need ambulance",
"I'm fine",
"I'm already waiting",
"I will be late",
"I couldn't join",
2022-01-04 22:02:16 +01:00
"We have company"
2022-01-04 19:43:06 +01:00
};
class CannedMessagePlugin :
public SinglePortPlugin,
public Observable<const meshtastic::Status *>,
private concurrency::OSThread
2022-01-04 19:42:28 +01:00
{
public:
CannedMessagePlugin();
void select();
void directionA();
void directionB();
String getCurrentMessage()
2022-01-04 19:43:06 +01:00
{
return cannedMessagePluginMessages[this->currentMessageIndex];
}
String getPrevMessage()
{
return cannedMessagePluginMessages[this->getPrevIndex()];
}
String getNextMessage()
{
return cannedMessagePluginMessages[this->getNextIndex()];
}
2022-01-04 19:43:06 +01:00
bool shouldDraw()
{
2022-01-04 22:02:16 +01:00
return (currentMessageIndex != -1) || (this->sendingState != SENDING_STATE_NONE);
}
cannedMessagePluginSendigState getSendingState()
{
return this->sendingState;
2022-01-04 19:43:06 +01:00
}
2022-01-04 19:42:28 +01:00
protected:
virtual int32_t runOnce();
2022-01-04 19:43:06 +01:00
void sendText(
NodeNum dest,
const char* message,
bool wantReplies);
2022-01-04 19:42:28 +01:00
int getNextIndex()
{
if (this->currentMessageIndex >=
(sizeof(cannedMessagePluginMessages) / CANNED_MESSAGE_PLUGIN_MESSAGE_MAX_LEN) - 1)
{
return 0;
}
else
{
return this->currentMessageIndex + 1;
}
}
int getPrevIndex()
{
if (this->currentMessageIndex <= 0)
{
return
sizeof(cannedMessagePluginMessages) / CANNED_MESSAGE_PLUGIN_MESSAGE_MAX_LEN - 1;
}
else
{
return this->currentMessageIndex - 1;
}
}
2022-01-04 19:42:28 +01:00
// TODO: make this configurable
volatile cannedMessagePluginActionType cwRotationMeaning = ACTION_UP;
volatile cannedMessagePluginActionType action = ACTION_NONE;
2022-01-04 19:43:06 +01:00
volatile cannedMessagePluginRotaryStateType rotaryStateCW = EVENT_CLEARED;
volatile cannedMessagePluginRotaryStateType rotaryStateCCW = EVENT_CLEARED;
2022-01-04 19:42:28 +01:00
volatile int rotaryLevelA = LOW;
volatile int rotaryLevelB = LOW;
2022-01-04 19:43:06 +01:00
int currentMessageIndex = -1;
2022-01-04 22:02:16 +01:00
cannedMessagePluginSendigState sendingState = SENDING_STATE_NONE;
2022-01-04 19:42:28 +01:00
};
extern CannedMessagePlugin *cannedMessagePlugin;