2022-01-04 18:42:28 +00:00
|
|
|
#pragma once
|
|
|
|
#include "SinglePortPlugin.h"
|
2022-01-12 08:26:42 +00:00
|
|
|
#include "input/InputBroker.h"
|
2022-01-04 18:42:28 +00:00
|
|
|
|
2022-01-19 08:55:06 +00:00
|
|
|
enum cannedMessagePluginRunState
|
2022-01-04 18:42:28 +00:00
|
|
|
{
|
2022-01-19 08:55:06 +00:00
|
|
|
CANNED_MESSAGE_RUN_STATE_INACTIVE,
|
|
|
|
CANNED_MESSAGE_RUN_STATE_ACTIVE,
|
|
|
|
CANNED_MESSAGE_RUN_STATE_SENDING_ACTIVE,
|
|
|
|
CANNED_MESSAGE_RUN_STATE_ACTION_SELECT,
|
|
|
|
CANNED_MESSAGE_RUN_STATE_ACTION_UP,
|
|
|
|
CANNED_MESSAGE_RUN_STATE_ACTION_DOWN
|
2022-01-04 21:02:16 +00:00
|
|
|
};
|
|
|
|
|
2022-01-13 08:19:36 +00:00
|
|
|
|
2022-01-12 08:26:42 +00:00
|
|
|
#define CANNED_MESSAGE_PLUGIN_MESSAGE_MAX_COUNT 50
|
2022-01-18 22:15:54 +00:00
|
|
|
/**
|
|
|
|
* 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
|
2022-01-04 18:43:06 +00:00
|
|
|
|
|
|
|
class CannedMessagePlugin :
|
|
|
|
public SinglePortPlugin,
|
2022-01-13 08:19:36 +00:00
|
|
|
public Observable<const UIFrameEvent *>,
|
2022-01-04 18:43:06 +00:00
|
|
|
private concurrency::OSThread
|
2022-01-04 18:42:28 +00:00
|
|
|
{
|
2022-01-09 09:08:31 +00:00
|
|
|
CallbackObserver<CannedMessagePlugin, const InputEvent *> inputObserver =
|
|
|
|
CallbackObserver<CannedMessagePlugin, const InputEvent *>(
|
|
|
|
this, &CannedMessagePlugin::handleInputEvent);
|
2022-01-04 18:42:28 +00:00
|
|
|
public:
|
2022-01-11 15:02:55 +00:00
|
|
|
CannedMessagePlugin();
|
2022-01-18 22:15:54 +00:00
|
|
|
const char* getCurrentMessage();
|
|
|
|
const char* getPrevMessage();
|
|
|
|
const char* getNextMessage();
|
2022-01-09 09:08:31 +00:00
|
|
|
bool shouldDraw();
|
|
|
|
void eventUp();
|
|
|
|
void eventDown();
|
|
|
|
void eventSelect();
|
2022-01-04 18:42:28 +00:00
|
|
|
|
|
|
|
protected:
|
|
|
|
|
2022-01-13 11:51:36 +00:00
|
|
|
virtual int32_t runOnce();
|
2022-01-04 18:42:28 +00:00
|
|
|
|
2022-01-04 18:43:06 +00:00
|
|
|
void sendText(
|
|
|
|
NodeNum dest,
|
|
|
|
const char* message,
|
|
|
|
bool wantReplies);
|
2022-01-04 18:42:28 +00:00
|
|
|
|
2022-01-12 08:26:42 +00:00
|
|
|
int splitConfiguredMessages();
|
2022-01-09 09:08:31 +00:00
|
|
|
int getNextIndex();
|
|
|
|
int getPrevIndex();
|
2022-01-04 19:41:45 +00:00
|
|
|
|
2022-01-09 09:08:31 +00:00
|
|
|
int handleInputEvent(const InputEvent *event);
|
2022-01-13 07:08:16 +00:00
|
|
|
virtual bool wantUIFrame() { return this->shouldDraw(); }
|
2022-01-13 08:19:36 +00:00
|
|
|
virtual Observable<const UIFrameEvent *>* getUIFrameObservable() { return this; }
|
2022-01-13 07:08:16 +00:00
|
|
|
virtual void drawFrame(
|
|
|
|
OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y);
|
2022-01-04 18:42:28 +00:00
|
|
|
|
2022-01-04 18:43:06 +00:00
|
|
|
int currentMessageIndex = -1;
|
2022-01-19 08:55:06 +00:00
|
|
|
cannedMessagePluginRunState runState = CANNED_MESSAGE_RUN_STATE_INACTIVE;
|
2022-01-12 08:26:42 +00:00
|
|
|
|
2022-01-18 22:15:54 +00:00
|
|
|
char messageStore[CANNED_MESSAGE_PLUGIN_MESSAGES_SIZE];
|
2022-01-12 08:26:42 +00:00
|
|
|
char *messages[CANNED_MESSAGE_PLUGIN_MESSAGE_MAX_COUNT];
|
|
|
|
int messagesCount = 0;
|
2022-01-13 11:51:36 +00:00
|
|
|
unsigned long lastTouchMillis = 0;
|
2022-01-04 18:42:28 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
extern CannedMessagePlugin *cannedMessagePlugin;
|