mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-04-20 22:13:47 +00:00
Pulled the class out of main.cpp, made a header to go along with it, externed globals in headers to make them accessible to button code. Added button code to send an advert on double press. Refactored ini files to prevent linker errors.
76 lines
No EOL
1.8 KiB
C++
76 lines
No EOL
1.8 KiB
C++
#ifndef UI_TASK_H
|
|
#define UI_TASK_H
|
|
|
|
#include <MeshCore.h>
|
|
#include <helpers/ui/DisplayDriver.h>
|
|
#include <stddef.h>
|
|
|
|
#ifdef PIN_BUZZER
|
|
#include <helpers/ui/buzzer.h>
|
|
#endif
|
|
|
|
#include "NodePrefs.h"
|
|
#include "Button.h"
|
|
|
|
enum class UIEventType
|
|
{
|
|
none,
|
|
contactMessage,
|
|
channelMessage,
|
|
roomMessage,
|
|
newContactMessage,
|
|
ack
|
|
};
|
|
|
|
class UITask {
|
|
DisplayDriver* _display;
|
|
mesh::MainBoard* _board;
|
|
#ifdef PIN_BUZZER
|
|
genericBuzzer buzzer;
|
|
#endif
|
|
unsigned long _next_refresh, _auto_off;
|
|
bool _connected;
|
|
uint32_t _pin_code;
|
|
NodePrefs* _node_prefs;
|
|
char _version_info[32];
|
|
char _origin[62];
|
|
char _msg[80];
|
|
int _msgcount;
|
|
bool _need_refresh = true;
|
|
bool _displayWasOn = false; // Track display state before button press
|
|
|
|
// Button handlers
|
|
#if defined(PIN_USER_BTN) || defined(PIN_USER_BTN_ANA)
|
|
Button* _userButton = nullptr;
|
|
#endif
|
|
|
|
void renderCurrScreen();
|
|
void userLedHandler();
|
|
void renderBatteryIndicator(uint16_t batteryMilliVolts);
|
|
|
|
// Button action handlers
|
|
void handleButtonAnyPress();
|
|
void handleButtonShortPress();
|
|
void handleButtonDoublePress();
|
|
void handleButtonTriplePress();
|
|
void handleButtonLongPress();
|
|
|
|
|
|
public:
|
|
|
|
UITask(mesh::MainBoard* board) : _board(board), _display(NULL) {
|
|
_next_refresh = 0;
|
|
_connected = false;
|
|
}
|
|
void begin(DisplayDriver* display, NodePrefs* node_prefs, const char* build_date, const char* firmware_version, uint32_t pin_code);
|
|
|
|
void setHasConnection(bool connected) { _connected = connected; }
|
|
bool hasDisplay() const { return _display != NULL; }
|
|
void clearMsgPreview();
|
|
void msgRead(int msgcount);
|
|
void newMsg(uint8_t path_len, const char* from_name, const char* text, int msgcount);
|
|
void soundBuzzer(UIEventType bet = UIEventType::none);
|
|
void shutdown(bool restart = false);
|
|
void loop();
|
|
};
|
|
#endif //UI_TASK_H
|