#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, 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;