Files
firmware/src/plugins/CannedMessagePlugin.h
2022-01-13 14:15:53 +01:00

80 lines
1.8 KiB
C++

#pragma once
#include "SinglePortPlugin.h"
enum cannedMessagePluginRotaryStateType
{
EVENT_OCCURRED,
EVENT_CLEARED
};
enum cannedMessagePluginActionType
{
ACTION_NONE,
ACTION_PRESSED,
ACTION_UP,
ACTION_DOWN
};
#define CANNED_MESSAGE_PLUGIN_MESSAGE_MAX_LEN 50
static char cannedMessagePluginMessages[][CANNED_MESSAGE_PLUGIN_MESSAGE_MAX_LEN] =
{
"I need a helping hand",
"I need help with saw",
"I need an alpinist",
"I need ambulance",
"I'm fine",
"I'm already waiting",
"I will be late",
"I couldn't join",
"We have got company"
};
typedef struct _CannedMessagePluginStatus
{
int dummy;
} CannedMessagePluginStatus;
class CannedMessagePlugin :
public SinglePortPlugin,
public Observable<const meshtastic::Status *>,
private concurrency::OSThread
{
public:
CannedMessagePlugin();
void select();
void directionA();
void directionB();
String getCurrentSelection()
{
return cannedMessagePluginMessages[this->currentMessageIndex];
}
bool shouldDraw()
{
return currentMessageIndex != -1;
}
protected:
virtual int32_t runOnce();
MeshPacket *preparePacket();
void sendText(
NodeNum dest,
const char* message,
bool wantReplies);
// TODO: make this configurable
volatile cannedMessagePluginActionType cwRotationMeaning = ACTION_UP;
volatile cannedMessagePluginActionType action = ACTION_NONE;
volatile cannedMessagePluginRotaryStateType rotaryStateCW = EVENT_CLEARED;
volatile cannedMessagePluginRotaryStateType rotaryStateCCW = EVENT_CLEARED;
volatile int rotaryLevelA = LOW;
volatile int rotaryLevelB = LOW;
int currentMessageIndex = -1;
};
extern CannedMessagePlugin *cannedMessagePlugin;