Adding screen frame

This commit is contained in:
Balazs Kelemen
2022-01-04 19:43:06 +01:00
parent 2b588f1567
commit 7b8849493f
4 changed files with 118 additions and 20 deletions

View File

@@ -45,7 +45,9 @@ CannedMessagePlugin::CannedMessagePlugin()
#endif
}
void CannedMessagePlugin::sendText(NodeNum dest, bool wantReplies)
void CannedMessagePlugin::sendText(NodeNum dest,
const char* message,
bool wantReplies)
{
MeshPacket *p = allocDataPacket();
p->to = dest;
@@ -63,28 +65,57 @@ void CannedMessagePlugin::sendText(NodeNum dest, bool wantReplies)
int32_t CannedMessagePlugin::runOnce()
{
/*
if (this->action == ACTION_PRESSED)
if ((this->action != ACTION_NONE)
&& (this->currentMessageIndex == -1))
{
sendText(NODENUM_BROADCAST, true);
needSend = false;
this->currentMessageIndex = 0;
DEBUG_MSG("First touch. Current message:%s\n",
this->getCurrentSelection());
}
*/
if (this->action == ACTION_PRESSED)
else if (this->action == ACTION_PRESSED)
{
DEBUG_MSG("SELECTED\n");
sendText(
NODENUM_BROADCAST,
cannedMessagePluginMessages[this->currentMessageIndex],
true);
}
else if (this->action == ACTION_UP)
{
DEBUG_MSG("MOVE UP\n");
if (this->currentMessageIndex <= 0)
{
this->currentMessageIndex =
sizeof(cannedMessagePluginMessages) / CANNED_MESSAGE_PLUGIN_MESSAGE_MAX_LEN - 1;
}
else
{
this->currentMessageIndex -= 1;
}
DEBUG_MSG("MOVE UP. Current message:%s\n",
this->getCurrentSelection());
}
else if (this->action == ACTION_DOWN)
{
DEBUG_MSG("MOVE_DOWN\n");
if (this->currentMessageIndex >=
(sizeof(cannedMessagePluginMessages) / CANNED_MESSAGE_PLUGIN_MESSAGE_MAX_LEN) - 1)
{
this->currentMessageIndex = 0;
}
else
{
this->currentMessageIndex += 1;
}
DEBUG_MSG("MOVE DOWN. Current message:%s\n",
this->getCurrentSelection());
}
this->action = ACTION_NONE;
return UINT32_MAX;
if (this->action != ACTION_NONE)
{
this->action = ACTION_NONE;
this->notifyObservers(NULL);
}
DEBUG_MSG("Current selection index:%d\n",
this->currentMessageIndex);
return 3000;
}
void CannedMessagePlugin::select()

View File

@@ -1,7 +1,7 @@
#pragma once
#include "SinglePortPlugin.h"
enum cannedMessagePluginRotatyStateType
enum cannedMessagePluginRotaryStateType
{
EVENT_OCCURRED,
EVENT_CLEARED
@@ -15,13 +15,44 @@ enum cannedMessagePluginActionType
ACTION_DOWN
};
class CannedMessagePlugin : public SinglePortPlugin, private concurrency::OSThread
#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:
@@ -29,18 +60,20 @@ class CannedMessagePlugin : public SinglePortPlugin, private concurrency::OSThre
MeshPacket *preparePacket();
void sendText(NodeNum dest, bool wantReplies);
void sendText(
NodeNum dest,
const char* message,
bool wantReplies);
// TODO: make this configurable
volatile cannedMessagePluginActionType cwRotationMeaning = ACTION_UP;
bool needSend = false;
volatile cannedMessagePluginActionType action = ACTION_NONE;
volatile cannedMessagePluginRotatyStateType rotaryStateCW = EVENT_CLEARED;
volatile cannedMessagePluginRotatyStateType rotaryStateCCW = EVENT_CLEARED;
volatile cannedMessagePluginRotaryStateType rotaryStateCW = EVENT_CLEARED;
volatile cannedMessagePluginRotaryStateType rotaryStateCCW = EVENT_CLEARED;
volatile int rotaryLevelA = LOW;
volatile int rotaryLevelB = LOW;
// volatile bool enableEvent = true;
int currentMessageIndex = -1;
};
extern CannedMessagePlugin *cannedMessagePlugin;