mirror of
https://github.com/meshtastic/firmware.git
synced 2025-09-24 10:19:19 +00:00
Merge branch 'master' of https://github.com/mc-hamster/Meshtastic-device
This commit is contained in:
commit
00f3996cee
@ -1,5 +1,8 @@
|
|||||||
# Meshtastic-device
|
# Meshtastic-device
|
||||||
[](https://open.vscode.dev/meshtastic/Meshtastic-device)
|
[](https://open.vscode.dev/meshtastic/Meshtastic-device)
|
||||||
|
[](https://github.com/meshtastic/Meshtastic-device/actions/workflows/main.yml)
|
||||||
|

|
||||||
|
|
||||||
## This repository contains the device firmware used in the [Meshtastic](https://meshtastic.org) project.
|
## This repository contains the device firmware used in the [Meshtastic](https://meshtastic.org) project.
|
||||||
|
|
||||||
Update Instructions
|
Update Instructions
|
||||||
|
@ -17,6 +17,7 @@ default_envs = tbeam
|
|||||||
;default_envs = tlora-v1
|
;default_envs = tlora-v1
|
||||||
;default_envs = tlora_v1_3
|
;default_envs = tlora_v1_3
|
||||||
;default_envs = tlora-v2
|
;default_envs = tlora-v2
|
||||||
|
;default_envs = tlora-v2-1-1.6
|
||||||
;default_envs = lora-relay-v1 # nrf board
|
;default_envs = lora-relay-v1 # nrf board
|
||||||
;default_envs = t-echo
|
;default_envs = t-echo
|
||||||
;default_envs = nrf52840dk-geeksville
|
;default_envs = nrf52840dk-geeksville
|
||||||
|
2
proto
2
proto
@ -1 +1 @@
|
|||||||
Subproject commit be14ce595fc30e1f87f8182fab0a06fd8600cdaa
|
Subproject commit 62cb78fcbe2563f48b190b67cb6fc19fc463064d
|
@ -13,4 +13,5 @@ enum class Cmd {
|
|||||||
STOP_BLUETOOTH_PIN_SCREEN,
|
STOP_BLUETOOTH_PIN_SCREEN,
|
||||||
STOP_BOOT_SCREEN,
|
STOP_BOOT_SCREEN,
|
||||||
PRINT,
|
PRINT,
|
||||||
|
START_SHUTDOWN_SCREEN,
|
||||||
};
|
};
|
@ -26,7 +26,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include "MeshService.h"
|
#include "MeshService.h"
|
||||||
#include "NodeDB.h"
|
#include "NodeDB.h"
|
||||||
#include "Screen.h"
|
#include "Screen.h"
|
||||||
#include "fonts.h"
|
|
||||||
#include "gps/GeoCoord.h"
|
#include "gps/GeoCoord.h"
|
||||||
#include "gps/RTC.h"
|
#include "gps/RTC.h"
|
||||||
#include "graphics/images.h"
|
#include "graphics/images.h"
|
||||||
@ -219,6 +218,14 @@ static void drawFrameBluetooth(OLEDDisplay *display, OLEDDisplayUiState *state,
|
|||||||
display->drawString(64 + x, 48 + y, buf);
|
display->drawString(64 + x, 48 + y, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void drawFrameShutdown(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)
|
||||||
|
{
|
||||||
|
display->setTextAlignment(TEXT_ALIGN_CENTER);
|
||||||
|
|
||||||
|
display->setFont(FONT_MEDIUM);
|
||||||
|
display->drawString(64 + x, 26 + y, "Shutting down...");
|
||||||
|
}
|
||||||
|
|
||||||
static void drawFrameFirmware(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)
|
static void drawFrameFirmware(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)
|
||||||
{
|
{
|
||||||
display->setTextAlignment(TEXT_ALIGN_CENTER);
|
display->setTextAlignment(TEXT_ALIGN_CENTER);
|
||||||
@ -881,6 +888,9 @@ int32_t Screen::runOnce()
|
|||||||
handlePrint(cmd.print_text);
|
handlePrint(cmd.print_text);
|
||||||
free(cmd.print_text);
|
free(cmd.print_text);
|
||||||
break;
|
break;
|
||||||
|
case Cmd::START_SHUTDOWN_SCREEN:
|
||||||
|
handleShutdownScreen();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
DEBUG_MSG("BUG: invalid cmd\n");
|
DEBUG_MSG("BUG: invalid cmd\n");
|
||||||
}
|
}
|
||||||
@ -1047,6 +1057,18 @@ void Screen::handleStartBluetoothPinScreen(uint32_t pin)
|
|||||||
setFastFramerate();
|
setFastFramerate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Screen::handleShutdownScreen()
|
||||||
|
{
|
||||||
|
DEBUG_MSG("showing shutdown screen\n");
|
||||||
|
showingNormalScreen = false;
|
||||||
|
|
||||||
|
static FrameCallback shutdownFrames[] = {drawFrameShutdown};
|
||||||
|
|
||||||
|
ui.disableAllIndicators();
|
||||||
|
ui.setFrames(shutdownFrames, 1);
|
||||||
|
setFastFramerate();
|
||||||
|
}
|
||||||
|
|
||||||
void Screen::handleStartFirmwareUpdateScreen()
|
void Screen::handleStartFirmwareUpdateScreen()
|
||||||
{
|
{
|
||||||
DEBUG_MSG("showing firmware screen\n");
|
DEBUG_MSG("showing firmware screen\n");
|
||||||
|
@ -151,6 +151,12 @@ class Screen : public concurrency::OSThread
|
|||||||
enqueueCmd(cmd);
|
enqueueCmd(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void startShutdownScreen()
|
||||||
|
{
|
||||||
|
ScreenCmd cmd;
|
||||||
|
cmd.cmd = Cmd::START_SHUTDOWN_SCREEN;
|
||||||
|
enqueueCmd(cmd);
|
||||||
|
}
|
||||||
|
|
||||||
/// Stops showing the bluetooth PIN screen.
|
/// Stops showing the bluetooth PIN screen.
|
||||||
void stopBluetoothPinScreen() { enqueueCmd(ScreenCmd{.cmd = Cmd::STOP_BLUETOOTH_PIN_SCREEN}); }
|
void stopBluetoothPinScreen() { enqueueCmd(ScreenCmd{.cmd = Cmd::STOP_BLUETOOTH_PIN_SCREEN}); }
|
||||||
@ -262,7 +268,7 @@ class Screen : public concurrency::OSThread
|
|||||||
void handleStartBluetoothPinScreen(uint32_t pin);
|
void handleStartBluetoothPinScreen(uint32_t pin);
|
||||||
void handlePrint(const char *text);
|
void handlePrint(const char *text);
|
||||||
void handleStartFirmwareUpdateScreen();
|
void handleStartFirmwareUpdateScreen();
|
||||||
|
void handleShutdownScreen();
|
||||||
/// Rebuilds our list of frames (screens) to default ones.
|
/// Rebuilds our list of frames (screens) to default ones.
|
||||||
void setFrames();
|
void setFrames();
|
||||||
|
|
||||||
|
@ -1,425 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
const uint8_t Custom_ArialMT_Plain_10[] PROGMEM = {
|
|
||||||
0x0A, // Width: 10
|
|
||||||
0x0A, // Height: 10
|
|
||||||
0x20, // First Char: 32
|
|
||||||
0xE0, // Numbers of Chars: 224
|
|
||||||
|
|
||||||
// Jump Table:
|
|
||||||
0xFF, 0xFF, 0x00, 0x03, // 32:65535
|
|
||||||
0x00, 0x00, 0x04, 0x03, // 33:0
|
|
||||||
0x00, 0x04, 0x05, 0x04, // 34:4
|
|
||||||
0x00, 0x09, 0x09, 0x06, // 35:9
|
|
||||||
0x00, 0x12, 0x0A, 0x06, // 36:18
|
|
||||||
0x00, 0x1C, 0x10, 0x09, // 37:28
|
|
||||||
0x00, 0x2C, 0x0E, 0x07, // 38:44
|
|
||||||
0x00, 0x3A, 0x01, 0x02, // 39:58
|
|
||||||
0x00, 0x3B, 0x06, 0x03, // 40:59
|
|
||||||
0x00, 0x41, 0x06, 0x03, // 41:65
|
|
||||||
0x00, 0x47, 0x05, 0x04, // 42:71
|
|
||||||
0x00, 0x4C, 0x09, 0x06, // 43:76
|
|
||||||
0x00, 0x55, 0x04, 0x03, // 44:85
|
|
||||||
0x00, 0x59, 0x03, 0x03, // 45:89
|
|
||||||
0x00, 0x5C, 0x04, 0x03, // 46:92
|
|
||||||
0x00, 0x60, 0x05, 0x03, // 47:96
|
|
||||||
0x00, 0x65, 0x0A, 0x06, // 48:101
|
|
||||||
0x00, 0x6F, 0x08, 0x06, // 49:111
|
|
||||||
0x00, 0x77, 0x0A, 0x06, // 50:119
|
|
||||||
0x00, 0x81, 0x0A, 0x06, // 51:129
|
|
||||||
0x00, 0x8B, 0x0B, 0x06, // 52:139
|
|
||||||
0x00, 0x96, 0x0A, 0x06, // 53:150
|
|
||||||
0x00, 0xA0, 0x0A, 0x06, // 54:160
|
|
||||||
0x00, 0xAA, 0x09, 0x06, // 55:170
|
|
||||||
0x00, 0xB3, 0x0A, 0x06, // 56:179
|
|
||||||
0x00, 0xBD, 0x0A, 0x06, // 57:189
|
|
||||||
0x00, 0xC7, 0x04, 0x03, // 58:199
|
|
||||||
0x00, 0xCB, 0x04, 0x03, // 59:203
|
|
||||||
0x00, 0xCF, 0x0A, 0x06, // 60:207
|
|
||||||
0x00, 0xD9, 0x09, 0x06, // 61:217
|
|
||||||
0x00, 0xE2, 0x09, 0x06, // 62:226
|
|
||||||
0x00, 0xEB, 0x0B, 0x06, // 63:235
|
|
||||||
0x00, 0xF6, 0x14, 0x0A, // 64:246
|
|
||||||
0x01, 0x0A, 0x0E, 0x07, // 65:266
|
|
||||||
0x01, 0x18, 0x0C, 0x07, // 66:280
|
|
||||||
0x01, 0x24, 0x0C, 0x07, // 67:292
|
|
||||||
0x01, 0x30, 0x0B, 0x07, // 68:304
|
|
||||||
0x01, 0x3B, 0x0C, 0x07, // 69:315
|
|
||||||
0x01, 0x47, 0x09, 0x06, // 70:327
|
|
||||||
0x01, 0x50, 0x0D, 0x08, // 71:336
|
|
||||||
0x01, 0x5D, 0x0C, 0x07, // 72:349
|
|
||||||
0x01, 0x69, 0x04, 0x03, // 73:361
|
|
||||||
0x01, 0x6D, 0x08, 0x05, // 74:365
|
|
||||||
0x01, 0x75, 0x0E, 0x07, // 75:373
|
|
||||||
0x01, 0x83, 0x0C, 0x06, // 76:387
|
|
||||||
0x01, 0x8F, 0x10, 0x08, // 77:399
|
|
||||||
0x01, 0x9F, 0x0C, 0x07, // 78:415
|
|
||||||
0x01, 0xAB, 0x0E, 0x08, // 79:427
|
|
||||||
0x01, 0xB9, 0x0B, 0x07, // 80:441
|
|
||||||
0x01, 0xC4, 0x0E, 0x08, // 81:452
|
|
||||||
0x01, 0xD2, 0x0C, 0x07, // 82:466
|
|
||||||
0x01, 0xDE, 0x0C, 0x07, // 83:478
|
|
||||||
0x01, 0xEA, 0x0B, 0x06, // 84:490
|
|
||||||
0x01, 0xF5, 0x0C, 0x07, // 85:501
|
|
||||||
0x02, 0x01, 0x0D, 0x07, // 86:513
|
|
||||||
0x02, 0x0E, 0x11, 0x09, // 87:526
|
|
||||||
0x02, 0x1F, 0x0E, 0x07, // 88:543
|
|
||||||
0x02, 0x2D, 0x0D, 0x07, // 89:557
|
|
||||||
0x02, 0x3A, 0x0C, 0x06, // 90:570
|
|
||||||
0x02, 0x46, 0x06, 0x03, // 91:582
|
|
||||||
0x02, 0x4C, 0x06, 0x03, // 92:588
|
|
||||||
0x02, 0x52, 0x04, 0x03, // 93:594
|
|
||||||
0x02, 0x56, 0x09, 0x05, // 94:598
|
|
||||||
0x02, 0x5F, 0x0C, 0x06, // 95:607
|
|
||||||
0x02, 0x6B, 0x03, 0x03, // 96:619
|
|
||||||
0x02, 0x6E, 0x0A, 0x06, // 97:622
|
|
||||||
0x02, 0x78, 0x0A, 0x06, // 98:632
|
|
||||||
0x02, 0x82, 0x0A, 0x05, // 99:642
|
|
||||||
0x02, 0x8C, 0x0A, 0x06, // 100:652
|
|
||||||
0x02, 0x96, 0x0A, 0x06, // 101:662
|
|
||||||
0x02, 0xA0, 0x05, 0x03, // 102:672
|
|
||||||
0x02, 0xA5, 0x0A, 0x06, // 103:677
|
|
||||||
0x02, 0xAF, 0x0A, 0x06, // 104:687
|
|
||||||
0x02, 0xB9, 0x04, 0x02, // 105:697
|
|
||||||
0x02, 0xBD, 0x04, 0x02, // 106:701
|
|
||||||
0x02, 0xC1, 0x08, 0x05, // 107:705
|
|
||||||
0x02, 0xC9, 0x04, 0x02, // 108:713
|
|
||||||
0x02, 0xCD, 0x10, 0x08, // 109:717
|
|
||||||
0x02, 0xDD, 0x0A, 0x06, // 110:733
|
|
||||||
0x02, 0xE7, 0x0A, 0x06, // 111:743
|
|
||||||
0x02, 0xF1, 0x0A, 0x06, // 112:753
|
|
||||||
0x02, 0xFB, 0x0A, 0x06, // 113:763
|
|
||||||
0x03, 0x05, 0x05, 0x03, // 114:773
|
|
||||||
0x03, 0x0A, 0x08, 0x05, // 115:778
|
|
||||||
0x03, 0x12, 0x06, 0x03, // 116:786
|
|
||||||
0x03, 0x18, 0x0A, 0x06, // 117:792
|
|
||||||
0x03, 0x22, 0x09, 0x05, // 118:802
|
|
||||||
0x03, 0x2B, 0x0E, 0x07, // 119:811
|
|
||||||
0x03, 0x39, 0x0A, 0x05, // 120:825
|
|
||||||
0x03, 0x43, 0x09, 0x05, // 121:835
|
|
||||||
0x03, 0x4C, 0x0A, 0x05, // 122:844
|
|
||||||
0x03, 0x56, 0x06, 0x03, // 123:854
|
|
||||||
0x03, 0x5C, 0x04, 0x03, // 124:860
|
|
||||||
0x03, 0x60, 0x05, 0x03, // 125:864
|
|
||||||
0x03, 0x65, 0x09, 0x06, // 126:869
|
|
||||||
0xFF, 0xFF, 0x00, 0x00, // 127:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 128:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 129:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 130:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 131:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 132:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 133:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 134:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 135:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 136:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 137:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 138:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 139:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 140:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 141:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 142:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 143:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 144:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 145:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 146:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 147:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 148:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 149:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 150:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 151:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 152:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 153:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 154:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 155:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 156:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 157:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 158:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x0A, // 159:65535
|
|
||||||
0xFF, 0xFF, 0x00, 0x03, // 160:65535
|
|
||||||
0x03, 0x6E, 0x04, 0x03, // 161:878
|
|
||||||
0x03, 0x72, 0x0A, 0x06, // 162:882
|
|
||||||
0x03, 0x7C, 0x0C, 0x06, // 163:892
|
|
||||||
0x03, 0x88, 0x0A, 0x06, // 164:904
|
|
||||||
0x03, 0x92, 0x0A, 0x06, // 165:914
|
|
||||||
0x03, 0x9C, 0x04, 0x03, // 166:924
|
|
||||||
0x03, 0xA0, 0x0A, 0x06, // 167:928
|
|
||||||
0x03, 0xAA, 0x05, 0x03, // 168:938
|
|
||||||
0x03, 0xAF, 0x0D, 0x07, // 169:943
|
|
||||||
0x03, 0xBC, 0x07, 0x04, // 170:956
|
|
||||||
0x03, 0xC3, 0x0A, 0x06, // 171:963
|
|
||||||
0x03, 0xCD, 0x09, 0x06, // 172:973
|
|
||||||
0x03, 0xD6, 0x03, 0x03, // 173:982
|
|
||||||
0x03, 0xD9, 0x0D, 0x07, // 174:985
|
|
||||||
0x03, 0xE6, 0x0B, 0x06, // 175:998
|
|
||||||
0x03, 0xF1, 0x07, 0x04, // 176:1009
|
|
||||||
0x03, 0xF8, 0x0A, 0x05, // 177:1016
|
|
||||||
0x04, 0x02, 0x05, 0x03, // 178:1026
|
|
||||||
0x04, 0x07, 0x05, 0x03, // 179:1031
|
|
||||||
0x04, 0x0C, 0x05, 0x03, // 180:1036
|
|
||||||
0x04, 0x11, 0x0A, 0x06, // 181:1041
|
|
||||||
0x04, 0x1B, 0x09, 0x05, // 182:1051
|
|
||||||
0x04, 0x24, 0x03, 0x03, // 183:1060
|
|
||||||
0x04, 0x27, 0x06, 0x03, // 184:1063
|
|
||||||
0x04, 0x2D, 0x05, 0x03, // 185:1069
|
|
||||||
0x04, 0x32, 0x07, 0x04, // 186:1074
|
|
||||||
0x04, 0x39, 0x0A, 0x06, // 187:1081
|
|
||||||
0x04, 0x43, 0x10, 0x08, // 188:1091
|
|
||||||
0x04, 0x53, 0x10, 0x08, // 189:1107
|
|
||||||
0x04, 0x63, 0x10, 0x08, // 190:1123
|
|
||||||
0x04, 0x73, 0x0A, 0x06, // 191:1139
|
|
||||||
0x04, 0x7D, 0x0E, 0x07, // 192:1149
|
|
||||||
0x04, 0x8B, 0x0E, 0x07, // 193:1163
|
|
||||||
0x04, 0x99, 0x0E, 0x07, // 194:1177
|
|
||||||
0x04, 0xA7, 0x0E, 0x07, // 195:1191
|
|
||||||
0x04, 0xB5, 0x0E, 0x07, // 196:1205
|
|
||||||
0x04, 0xC3, 0x0E, 0x07, // 197:1219
|
|
||||||
0x04, 0xD1, 0x12, 0x0A, // 198:1233
|
|
||||||
0x04, 0xE3, 0x0C, 0x07, // 199:1251
|
|
||||||
0x04, 0xEF, 0x0C, 0x07, // 200:1263
|
|
||||||
0x04, 0xFB, 0x0C, 0x07, // 201:1275
|
|
||||||
0x05, 0x07, 0x0C, 0x07, // 202:1287
|
|
||||||
0x05, 0x13, 0x0C, 0x07, // 203:1299
|
|
||||||
0x05, 0x1F, 0x05, 0x03, // 204:1311
|
|
||||||
0x05, 0x24, 0x04, 0x03, // 205:1316
|
|
||||||
0x05, 0x28, 0x04, 0x03, // 206:1320
|
|
||||||
0x05, 0x2C, 0x05, 0x03, // 207:1324
|
|
||||||
0x05, 0x31, 0x0B, 0x07, // 208:1329
|
|
||||||
0x05, 0x3C, 0x0C, 0x07, // 209:1340
|
|
||||||
0x05, 0x48, 0x0E, 0x08, // 210:1352
|
|
||||||
0x05, 0x56, 0x0E, 0x08, // 211:1366
|
|
||||||
0x05, 0x64, 0x0E, 0x08, // 212:1380
|
|
||||||
0x05, 0x72, 0x0E, 0x08, // 213:1394
|
|
||||||
0x05, 0x80, 0x0E, 0x08, // 214:1408
|
|
||||||
0x05, 0x8E, 0x0A, 0x06, // 215:1422
|
|
||||||
0x05, 0x98, 0x0D, 0x08, // 216:1432
|
|
||||||
0x05, 0xA5, 0x0C, 0x07, // 217:1445
|
|
||||||
0x05, 0xB1, 0x0C, 0x07, // 218:1457
|
|
||||||
0x05, 0xBD, 0x0C, 0x07, // 219:1469
|
|
||||||
0x05, 0xC9, 0x0C, 0x07, // 220:1481
|
|
||||||
0x05, 0xD5, 0x0D, 0x07, // 221:1493
|
|
||||||
0x05, 0xE2, 0x0B, 0x07, // 222:1506
|
|
||||||
0x05, 0xED, 0x0C, 0x06, // 223:1517
|
|
||||||
0x05, 0xF9, 0x0A, 0x06, // 224:1529
|
|
||||||
0x06, 0x03, 0x0A, 0x06, // 225:1539
|
|
||||||
0x06, 0x0D, 0x0A, 0x06, // 226:1549
|
|
||||||
0x06, 0x17, 0x0A, 0x06, // 227:1559
|
|
||||||
0x06, 0x21, 0x0A, 0x06, // 228:1569
|
|
||||||
0x06, 0x2B, 0x0A, 0x06, // 229:1579
|
|
||||||
0x06, 0x35, 0x10, 0x09, // 230:1589
|
|
||||||
0x06, 0x45, 0x0A, 0x05, // 231:1605
|
|
||||||
0x06, 0x4F, 0x0A, 0x06, // 232:1615
|
|
||||||
0x06, 0x59, 0x0A, 0x06, // 233:1625
|
|
||||||
0x06, 0x63, 0x0A, 0x06, // 234:1635
|
|
||||||
0x06, 0x6D, 0x0A, 0x06, // 235:1645
|
|
||||||
0x06, 0x77, 0x05, 0x03, // 236:1655
|
|
||||||
0x06, 0x7C, 0x04, 0x03, // 237:1660
|
|
||||||
0x06, 0x80, 0x05, 0x03, // 238:1664
|
|
||||||
0x06, 0x85, 0x05, 0x03, // 239:1669
|
|
||||||
0x06, 0x8A, 0x0A, 0x06, // 240:1674
|
|
||||||
0x06, 0x94, 0x0A, 0x06, // 241:1684
|
|
||||||
0x06, 0x9E, 0x0A, 0x06, // 242:1694
|
|
||||||
0x06, 0xA8, 0x0A, 0x06, // 243:1704
|
|
||||||
0x06, 0xB2, 0x0A, 0x06, // 244:1714
|
|
||||||
0x06, 0xBC, 0x0A, 0x06, // 245:1724
|
|
||||||
0x06, 0xC6, 0x0A, 0x06, // 246:1734
|
|
||||||
0x06, 0xD0, 0x09, 0x05, // 247:1744
|
|
||||||
0x06, 0xD9, 0x0A, 0x06, // 248:1753
|
|
||||||
0x06, 0xE3, 0x0A, 0x06, // 249:1763
|
|
||||||
0x06, 0xED, 0x0A, 0x06, // 250:1773
|
|
||||||
0x06, 0xF7, 0x0A, 0x06, // 251:1783
|
|
||||||
0x07, 0x01, 0x0A, 0x06, // 252:1793
|
|
||||||
0x07, 0x0B, 0x09, 0x05, // 253:1803
|
|
||||||
0x07, 0x14, 0x0A, 0x06, // 254:1812
|
|
||||||
0x07, 0x1E, 0x09, 0x05, // 255:1822
|
|
||||||
|
|
||||||
// Font Data:
|
|
||||||
0x00, 0x00, 0xF8, 0x02, // 33
|
|
||||||
0x38, 0x00, 0x00, 0x00, 0x38, // 34
|
|
||||||
0xA0, 0x03, 0xE0, 0x00, 0xB8, 0x03, 0xE0, 0x00, 0xB8, // 35
|
|
||||||
0x30, 0x01, 0x28, 0x02, 0xF8, 0x07, 0x48, 0x02, 0x90, 0x01, // 36
|
|
||||||
0x00, 0x00, 0x30, 0x00, 0x48, 0x00, 0x30, 0x03, 0xC0, 0x00, 0xB0, 0x01, 0x48, 0x02, 0x80, 0x01, // 37
|
|
||||||
0x80, 0x01, 0x50, 0x02, 0x68, 0x02, 0xA8, 0x02, 0x18, 0x01, 0x80, 0x03, 0x80, 0x02, // 38
|
|
||||||
0x38, // 39
|
|
||||||
0xE0, 0x03, 0x10, 0x04, 0x08, 0x08, // 40
|
|
||||||
0x08, 0x08, 0x10, 0x04, 0xE0, 0x03, // 41
|
|
||||||
0x28, 0x00, 0x18, 0x00, 0x28, // 42
|
|
||||||
0x40, 0x00, 0x40, 0x00, 0xF0, 0x01, 0x40, 0x00, 0x40, // 43
|
|
||||||
0x00, 0x00, 0x00, 0x06, // 44
|
|
||||||
0x80, 0x00, 0x80, // 45
|
|
||||||
0x00, 0x00, 0x00, 0x02, // 46
|
|
||||||
0x00, 0x03, 0xE0, 0x00, 0x18, // 47
|
|
||||||
0xF0, 0x01, 0x08, 0x02, 0x08, 0x02, 0x08, 0x02, 0xF0, 0x01, // 48
|
|
||||||
0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0xF8, 0x03, // 49
|
|
||||||
0x10, 0x02, 0x08, 0x03, 0x88, 0x02, 0x48, 0x02, 0x30, 0x02, // 50
|
|
||||||
0x10, 0x01, 0x08, 0x02, 0x48, 0x02, 0x48, 0x02, 0xB0, 0x01, // 51
|
|
||||||
0xC0, 0x00, 0xA0, 0x00, 0x90, 0x00, 0x88, 0x00, 0xF8, 0x03, 0x80, // 52
|
|
||||||
0x60, 0x01, 0x38, 0x02, 0x28, 0x02, 0x28, 0x02, 0xC8, 0x01, // 53
|
|
||||||
0xF0, 0x01, 0x28, 0x02, 0x28, 0x02, 0x28, 0x02, 0xD0, 0x01, // 54
|
|
||||||
0x08, 0x00, 0x08, 0x03, 0xC8, 0x00, 0x38, 0x00, 0x08, // 55
|
|
||||||
0xB0, 0x01, 0x48, 0x02, 0x48, 0x02, 0x48, 0x02, 0xB0, 0x01, // 56
|
|
||||||
0x70, 0x01, 0x88, 0x02, 0x88, 0x02, 0x88, 0x02, 0xF0, 0x01, // 57
|
|
||||||
0x00, 0x00, 0x20, 0x02, // 58
|
|
||||||
0x00, 0x00, 0x20, 0x06, // 59
|
|
||||||
0x00, 0x00, 0x40, 0x00, 0xA0, 0x00, 0xA0, 0x00, 0x10, 0x01, // 60
|
|
||||||
0xA0, 0x00, 0xA0, 0x00, 0xA0, 0x00, 0xA0, 0x00, 0xA0, // 61
|
|
||||||
0x00, 0x00, 0x10, 0x01, 0xA0, 0x00, 0xA0, 0x00, 0x40, // 62
|
|
||||||
0x10, 0x00, 0x08, 0x00, 0x08, 0x00, 0xC8, 0x02, 0x48, 0x00, 0x30, // 63
|
|
||||||
0x00, 0x00, 0xC0, 0x03, 0x30, 0x04, 0xD0, 0x09, 0x28, 0x0A, 0x28, 0x0A, 0xC8, 0x0B, 0x68, 0x0A, 0x10, 0x05, 0xE0, 0x04, // 64
|
|
||||||
0x00, 0x02, 0xC0, 0x01, 0xB0, 0x00, 0x88, 0x00, 0xB0, 0x00, 0xC0, 0x01, 0x00, 0x02, // 65
|
|
||||||
0x00, 0x00, 0xF8, 0x03, 0x48, 0x02, 0x48, 0x02, 0x48, 0x02, 0xF0, 0x01, // 66
|
|
||||||
0x00, 0x00, 0xF0, 0x01, 0x08, 0x02, 0x08, 0x02, 0x08, 0x02, 0x10, 0x01, // 67
|
|
||||||
0x00, 0x00, 0xF8, 0x03, 0x08, 0x02, 0x08, 0x02, 0x10, 0x01, 0xE0, // 68
|
|
||||||
0x00, 0x00, 0xF8, 0x03, 0x48, 0x02, 0x48, 0x02, 0x48, 0x02, 0x48, 0x02, // 69
|
|
||||||
0x00, 0x00, 0xF8, 0x03, 0x48, 0x00, 0x48, 0x00, 0x08, // 70
|
|
||||||
0x00, 0x00, 0xE0, 0x00, 0x10, 0x01, 0x08, 0x02, 0x48, 0x02, 0x50, 0x01, 0xC0, // 71
|
|
||||||
0x00, 0x00, 0xF8, 0x03, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0xF8, 0x03, // 72
|
|
||||||
0x00, 0x00, 0xF8, 0x03, // 73
|
|
||||||
0x00, 0x03, 0x00, 0x02, 0x00, 0x02, 0xF8, 0x01, // 74
|
|
||||||
0x00, 0x00, 0xF8, 0x03, 0x80, 0x00, 0x60, 0x00, 0x90, 0x00, 0x08, 0x01, 0x00, 0x02, // 75
|
|
||||||
0x00, 0x00, 0xF8, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, // 76
|
|
||||||
0x00, 0x00, 0xF8, 0x03, 0x30, 0x00, 0xC0, 0x01, 0x00, 0x02, 0xC0, 0x01, 0x30, 0x00, 0xF8, 0x03, // 77
|
|
||||||
0x00, 0x00, 0xF8, 0x03, 0x30, 0x00, 0x40, 0x00, 0x80, 0x01, 0xF8, 0x03, // 78
|
|
||||||
0x00, 0x00, 0xF0, 0x01, 0x08, 0x02, 0x08, 0x02, 0x08, 0x02, 0x08, 0x02, 0xF0, 0x01, // 79
|
|
||||||
0x00, 0x00, 0xF8, 0x03, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x30, // 80
|
|
||||||
0x00, 0x00, 0xF0, 0x01, 0x08, 0x02, 0x08, 0x02, 0x08, 0x03, 0x08, 0x03, 0xF0, 0x02, // 81
|
|
||||||
0x00, 0x00, 0xF8, 0x03, 0x48, 0x00, 0x48, 0x00, 0xC8, 0x00, 0x30, 0x03, // 82
|
|
||||||
0x00, 0x00, 0x30, 0x01, 0x48, 0x02, 0x48, 0x02, 0x48, 0x02, 0x90, 0x01, // 83
|
|
||||||
0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0xF8, 0x03, 0x08, 0x00, 0x08, // 84
|
|
||||||
0x00, 0x00, 0xF8, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0xF8, 0x01, // 85
|
|
||||||
0x08, 0x00, 0x70, 0x00, 0x80, 0x01, 0x00, 0x02, 0x80, 0x01, 0x70, 0x00, 0x08, // 86
|
|
||||||
0x18, 0x00, 0xE0, 0x01, 0x00, 0x02, 0xF0, 0x01, 0x08, 0x00, 0xF0, 0x01, 0x00, 0x02, 0xE0, 0x01, 0x18, // 87
|
|
||||||
0x00, 0x02, 0x08, 0x01, 0x90, 0x00, 0x60, 0x00, 0x90, 0x00, 0x08, 0x01, 0x00, 0x02, // 88
|
|
||||||
0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0xC0, 0x03, 0x20, 0x00, 0x10, 0x00, 0x08, // 89
|
|
||||||
0x08, 0x03, 0x88, 0x02, 0xC8, 0x02, 0x68, 0x02, 0x38, 0x02, 0x18, 0x02, // 90
|
|
||||||
0x00, 0x00, 0xF8, 0x0F, 0x08, 0x08, // 91
|
|
||||||
0x18, 0x00, 0xE0, 0x00, 0x00, 0x03, // 92
|
|
||||||
0x08, 0x08, 0xF8, 0x0F, // 93
|
|
||||||
0x40, 0x00, 0x30, 0x00, 0x08, 0x00, 0x30, 0x00, 0x40, // 94
|
|
||||||
0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, // 95
|
|
||||||
0x08, 0x00, 0x10, // 96
|
|
||||||
0x00, 0x00, 0x00, 0x03, 0xA0, 0x02, 0xA0, 0x02, 0xE0, 0x03, // 97
|
|
||||||
0x00, 0x00, 0xF8, 0x03, 0x20, 0x02, 0x20, 0x02, 0xC0, 0x01, // 98
|
|
||||||
0x00, 0x00, 0xC0, 0x01, 0x20, 0x02, 0x20, 0x02, 0x40, 0x01, // 99
|
|
||||||
0x00, 0x00, 0xC0, 0x01, 0x20, 0x02, 0x20, 0x02, 0xF8, 0x03, // 100
|
|
||||||
0x00, 0x00, 0xC0, 0x01, 0xA0, 0x02, 0xA0, 0x02, 0xC0, 0x02, // 101
|
|
||||||
0x20, 0x00, 0xF0, 0x03, 0x28, // 102
|
|
||||||
0x00, 0x00, 0xC0, 0x05, 0x20, 0x0A, 0x20, 0x0A, 0xE0, 0x07, // 103
|
|
||||||
0x00, 0x00, 0xF8, 0x03, 0x20, 0x00, 0x20, 0x00, 0xC0, 0x03, // 104
|
|
||||||
0x00, 0x00, 0xE8, 0x03, // 105
|
|
||||||
0x00, 0x08, 0xE8, 0x07, // 106
|
|
||||||
0xF8, 0x03, 0x80, 0x00, 0xC0, 0x01, 0x20, 0x02, // 107
|
|
||||||
0x00, 0x00, 0xF8, 0x03, // 108
|
|
||||||
0x00, 0x00, 0xE0, 0x03, 0x20, 0x00, 0x20, 0x00, 0xE0, 0x03, 0x20, 0x00, 0x20, 0x00, 0xC0, 0x03, // 109
|
|
||||||
0x00, 0x00, 0xE0, 0x03, 0x20, 0x00, 0x20, 0x00, 0xC0, 0x03, // 110
|
|
||||||
0x00, 0x00, 0xC0, 0x01, 0x20, 0x02, 0x20, 0x02, 0xC0, 0x01, // 111
|
|
||||||
0x00, 0x00, 0xE0, 0x0F, 0x20, 0x02, 0x20, 0x02, 0xC0, 0x01, // 112
|
|
||||||
0x00, 0x00, 0xC0, 0x01, 0x20, 0x02, 0x20, 0x02, 0xE0, 0x0F, // 113
|
|
||||||
0x00, 0x00, 0xE0, 0x03, 0x20, // 114
|
|
||||||
0x40, 0x02, 0xA0, 0x02, 0xA0, 0x02, 0x20, 0x01, // 115
|
|
||||||
0x20, 0x00, 0xF8, 0x03, 0x20, 0x02, // 116
|
|
||||||
0x00, 0x00, 0xE0, 0x01, 0x00, 0x02, 0x00, 0x02, 0xE0, 0x03, // 117
|
|
||||||
0x20, 0x00, 0xC0, 0x01, 0x00, 0x02, 0xC0, 0x01, 0x20, // 118
|
|
||||||
0xE0, 0x01, 0x00, 0x02, 0xC0, 0x01, 0x20, 0x00, 0xC0, 0x01, 0x00, 0x02, 0xE0, 0x01, // 119
|
|
||||||
0x20, 0x02, 0x40, 0x01, 0x80, 0x00, 0x40, 0x01, 0x20, 0x02, // 120
|
|
||||||
0x20, 0x00, 0xC0, 0x09, 0x00, 0x06, 0xC0, 0x01, 0x20, // 121
|
|
||||||
0x20, 0x02, 0x20, 0x03, 0xA0, 0x02, 0x60, 0x02, 0x20, 0x02, // 122
|
|
||||||
0x80, 0x00, 0x78, 0x0F, 0x08, 0x08, // 123
|
|
||||||
0x00, 0x00, 0xF8, 0x0F, // 124
|
|
||||||
0x08, 0x08, 0x78, 0x0F, 0x80, // 125
|
|
||||||
0xC0, 0x00, 0x40, 0x00, 0xC0, 0x00, 0x80, 0x00, 0xC0, // 126
|
|
||||||
0x00, 0x00, 0xA0, 0x0F, // 161
|
|
||||||
0x00, 0x00, 0xC0, 0x01, 0xA0, 0x0F, 0x78, 0x02, 0x40, 0x01, // 162
|
|
||||||
0x40, 0x02, 0x70, 0x03, 0xC8, 0x02, 0x48, 0x02, 0x08, 0x02, 0x10, 0x02, // 163
|
|
||||||
0x00, 0x00, 0xE0, 0x01, 0x20, 0x01, 0x20, 0x01, 0xE0, 0x01, // 164
|
|
||||||
0x48, 0x01, 0x70, 0x01, 0xC0, 0x03, 0x70, 0x01, 0x48, 0x01, // 165
|
|
||||||
0x00, 0x00, 0x38, 0x0F, // 166
|
|
||||||
0xD0, 0x04, 0x28, 0x09, 0x48, 0x09, 0x48, 0x0A, 0x90, 0x05, // 167
|
|
||||||
0x08, 0x00, 0x00, 0x00, 0x08, // 168
|
|
||||||
0xE0, 0x00, 0x10, 0x01, 0x48, 0x02, 0xA8, 0x02, 0xA8, 0x02, 0x10, 0x01, 0xE0, // 169
|
|
||||||
0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x78, // 170
|
|
||||||
0x00, 0x00, 0x80, 0x01, 0x40, 0x02, 0x80, 0x01, 0x40, 0x02, // 171
|
|
||||||
0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0xE0, // 172
|
|
||||||
0x80, 0x00, 0x80, // 173
|
|
||||||
0xE0, 0x00, 0x10, 0x01, 0xE8, 0x02, 0x68, 0x02, 0xC8, 0x02, 0x10, 0x01, 0xE0, // 174
|
|
||||||
0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, // 175
|
|
||||||
0x00, 0x00, 0x38, 0x00, 0x28, 0x00, 0x38, // 176
|
|
||||||
0x40, 0x02, 0x40, 0x02, 0xF0, 0x03, 0x40, 0x02, 0x40, 0x02, // 177
|
|
||||||
0x48, 0x00, 0x68, 0x00, 0x58, // 178
|
|
||||||
0x48, 0x00, 0x58, 0x00, 0x68, // 179
|
|
||||||
0x00, 0x00, 0x10, 0x00, 0x08, // 180
|
|
||||||
0x00, 0x00, 0xE0, 0x0F, 0x00, 0x02, 0x00, 0x02, 0xE0, 0x03, // 181
|
|
||||||
0x70, 0x00, 0xF8, 0x0F, 0x08, 0x00, 0xF8, 0x0F, 0x08, // 182
|
|
||||||
0x00, 0x00, 0x40, // 183
|
|
||||||
0x00, 0x00, 0x00, 0x14, 0x00, 0x18, // 184
|
|
||||||
0x00, 0x00, 0x10, 0x00, 0x78, // 185
|
|
||||||
0x30, 0x00, 0x48, 0x00, 0x48, 0x00, 0x30, // 186
|
|
||||||
0x00, 0x00, 0x40, 0x02, 0x80, 0x01, 0x40, 0x02, 0x80, 0x01, // 187
|
|
||||||
0x00, 0x00, 0x10, 0x02, 0x78, 0x01, 0xC0, 0x00, 0x20, 0x01, 0x90, 0x01, 0xC8, 0x03, 0x00, 0x01, // 188
|
|
||||||
0x00, 0x00, 0x10, 0x02, 0x78, 0x01, 0x80, 0x00, 0x60, 0x00, 0x50, 0x02, 0x48, 0x03, 0xC0, 0x02, // 189
|
|
||||||
0x48, 0x00, 0x58, 0x00, 0x68, 0x03, 0x80, 0x00, 0x60, 0x01, 0x90, 0x01, 0xC8, 0x03, 0x00, 0x01, // 190
|
|
||||||
0x00, 0x00, 0x00, 0x06, 0x00, 0x09, 0xA0, 0x09, 0x00, 0x04, // 191
|
|
||||||
0x00, 0x02, 0xC0, 0x01, 0xB0, 0x00, 0x89, 0x00, 0xB2, 0x00, 0xC0, 0x01, 0x00, 0x02, // 192
|
|
||||||
0x00, 0x02, 0xC0, 0x01, 0xB0, 0x00, 0x8A, 0x00, 0xB1, 0x00, 0xC0, 0x01, 0x00, 0x02, // 193
|
|
||||||
0x00, 0x02, 0xC0, 0x01, 0xB2, 0x00, 0x89, 0x00, 0xB2, 0x00, 0xC0, 0x01, 0x00, 0x02, // 194
|
|
||||||
0x00, 0x02, 0xC2, 0x01, 0xB1, 0x00, 0x8A, 0x00, 0xB1, 0x00, 0xC0, 0x01, 0x00, 0x02, // 195
|
|
||||||
0x00, 0x02, 0xC0, 0x01, 0xB2, 0x00, 0x88, 0x00, 0xB2, 0x00, 0xC0, 0x01, 0x00, 0x02, // 196
|
|
||||||
0x00, 0x02, 0xC0, 0x01, 0xBE, 0x00, 0x8A, 0x00, 0xBE, 0x00, 0xC0, 0x01, 0x00, 0x02, // 197
|
|
||||||
0x00, 0x03, 0xC0, 0x00, 0xE0, 0x00, 0x98, 0x00, 0x88, 0x00, 0xF8, 0x03, 0x48, 0x02, 0x48, 0x02, 0x48, 0x02, // 198
|
|
||||||
0x00, 0x00, 0xF0, 0x01, 0x08, 0x02, 0x08, 0x16, 0x08, 0x1A, 0x10, 0x01, // 199
|
|
||||||
0x00, 0x00, 0xF8, 0x03, 0x49, 0x02, 0x4A, 0x02, 0x48, 0x02, 0x48, 0x02, // 200
|
|
||||||
0x00, 0x00, 0xF8, 0x03, 0x48, 0x02, 0x4A, 0x02, 0x49, 0x02, 0x48, 0x02, // 201
|
|
||||||
0x00, 0x00, 0xFA, 0x03, 0x49, 0x02, 0x4A, 0x02, 0x48, 0x02, 0x48, 0x02, // 202
|
|
||||||
0x00, 0x00, 0xF8, 0x03, 0x4A, 0x02, 0x48, 0x02, 0x4A, 0x02, 0x48, 0x02, // 203
|
|
||||||
0x00, 0x00, 0xF9, 0x03, 0x02, // 204
|
|
||||||
0x02, 0x00, 0xF9, 0x03, // 205
|
|
||||||
0x01, 0x00, 0xFA, 0x03, // 206
|
|
||||||
0x02, 0x00, 0xF8, 0x03, 0x02, // 207
|
|
||||||
0x40, 0x00, 0xF8, 0x03, 0x48, 0x02, 0x48, 0x02, 0x10, 0x01, 0xE0, // 208
|
|
||||||
0x00, 0x00, 0xFA, 0x03, 0x31, 0x00, 0x42, 0x00, 0x81, 0x01, 0xF8, 0x03, // 209
|
|
||||||
0x00, 0x00, 0xF0, 0x01, 0x08, 0x02, 0x09, 0x02, 0x0A, 0x02, 0x08, 0x02, 0xF0, 0x01, // 210
|
|
||||||
0x00, 0x00, 0xF0, 0x01, 0x08, 0x02, 0x0A, 0x02, 0x09, 0x02, 0x08, 0x02, 0xF0, 0x01, // 211
|
|
||||||
0x00, 0x00, 0xF0, 0x01, 0x08, 0x02, 0x0A, 0x02, 0x09, 0x02, 0x0A, 0x02, 0xF0, 0x01, // 212
|
|
||||||
0x00, 0x00, 0xF0, 0x01, 0x0A, 0x02, 0x09, 0x02, 0x0A, 0x02, 0x09, 0x02, 0xF0, 0x01, // 213
|
|
||||||
0x00, 0x00, 0xF0, 0x01, 0x0A, 0x02, 0x08, 0x02, 0x0A, 0x02, 0x08, 0x02, 0xF0, 0x01, // 214
|
|
||||||
0x10, 0x01, 0xA0, 0x00, 0xE0, 0x00, 0xA0, 0x00, 0x10, 0x01, // 215
|
|
||||||
0x00, 0x00, 0xF0, 0x02, 0x08, 0x03, 0xC8, 0x02, 0x28, 0x02, 0x18, 0x03, 0xE8, // 216
|
|
||||||
0x00, 0x00, 0xF8, 0x01, 0x01, 0x02, 0x02, 0x02, 0x00, 0x02, 0xF8, 0x01, // 217
|
|
||||||
0x00, 0x00, 0xF8, 0x01, 0x02, 0x02, 0x01, 0x02, 0x00, 0x02, 0xF8, 0x01, // 218
|
|
||||||
0x00, 0x00, 0xF8, 0x01, 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, 0xF8, 0x01, // 219
|
|
||||||
0x00, 0x00, 0xF8, 0x01, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0xF8, 0x01, // 220
|
|
||||||
0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0xC2, 0x03, 0x21, 0x00, 0x10, 0x00, 0x08, // 221
|
|
||||||
0x00, 0x00, 0xF8, 0x03, 0x10, 0x01, 0x10, 0x01, 0x10, 0x01, 0xE0, // 222
|
|
||||||
0x00, 0x00, 0xF0, 0x03, 0x08, 0x01, 0x48, 0x02, 0xB0, 0x02, 0x80, 0x01, // 223
|
|
||||||
0x00, 0x00, 0x00, 0x03, 0xA4, 0x02, 0xA8, 0x02, 0xE0, 0x03, // 224
|
|
||||||
0x00, 0x00, 0x00, 0x03, 0xA8, 0x02, 0xA4, 0x02, 0xE0, 0x03, // 225
|
|
||||||
0x00, 0x00, 0x00, 0x03, 0xA8, 0x02, 0xA4, 0x02, 0xE8, 0x03, // 226
|
|
||||||
0x00, 0x00, 0x08, 0x03, 0xA4, 0x02, 0xA8, 0x02, 0xE4, 0x03, // 227
|
|
||||||
0x00, 0x00, 0x00, 0x03, 0xA8, 0x02, 0xA0, 0x02, 0xE8, 0x03, // 228
|
|
||||||
0x00, 0x00, 0x00, 0x03, 0xAE, 0x02, 0xAA, 0x02, 0xEE, 0x03, // 229
|
|
||||||
0x00, 0x00, 0x40, 0x03, 0xA0, 0x02, 0xA0, 0x02, 0xC0, 0x01, 0xA0, 0x02, 0xA0, 0x02, 0xC0, 0x02, // 230
|
|
||||||
0x00, 0x00, 0xC0, 0x01, 0x20, 0x16, 0x20, 0x1A, 0x40, 0x01, // 231
|
|
||||||
0x00, 0x00, 0xC0, 0x01, 0xA4, 0x02, 0xA8, 0x02, 0xC0, 0x02, // 232
|
|
||||||
0x00, 0x00, 0xC0, 0x01, 0xA8, 0x02, 0xA4, 0x02, 0xC0, 0x02, // 233
|
|
||||||
0x00, 0x00, 0xC0, 0x01, 0xA8, 0x02, 0xA4, 0x02, 0xC8, 0x02, // 234
|
|
||||||
0x00, 0x00, 0xC0, 0x01, 0xA8, 0x02, 0xA0, 0x02, 0xC8, 0x02, // 235
|
|
||||||
0x00, 0x00, 0xE4, 0x03, 0x08, // 236
|
|
||||||
0x08, 0x00, 0xE4, 0x03, // 237
|
|
||||||
0x08, 0x00, 0xE4, 0x03, 0x08, // 238
|
|
||||||
0x08, 0x00, 0xE0, 0x03, 0x08, // 239
|
|
||||||
0x00, 0x00, 0xC0, 0x01, 0x28, 0x02, 0x38, 0x02, 0xE0, 0x01, // 240
|
|
||||||
0x00, 0x00, 0xE8, 0x03, 0x24, 0x00, 0x28, 0x00, 0xC4, 0x03, // 241
|
|
||||||
0x00, 0x00, 0xC0, 0x01, 0x24, 0x02, 0x28, 0x02, 0xC0, 0x01, // 242
|
|
||||||
0x00, 0x00, 0xC0, 0x01, 0x28, 0x02, 0x24, 0x02, 0xC0, 0x01, // 243
|
|
||||||
0x00, 0x00, 0xC0, 0x01, 0x28, 0x02, 0x24, 0x02, 0xC8, 0x01, // 244
|
|
||||||
0x00, 0x00, 0xC8, 0x01, 0x24, 0x02, 0x28, 0x02, 0xC4, 0x01, // 245
|
|
||||||
0x00, 0x00, 0xC0, 0x01, 0x28, 0x02, 0x20, 0x02, 0xC8, 0x01, // 246
|
|
||||||
0x40, 0x00, 0x40, 0x00, 0x50, 0x01, 0x40, 0x00, 0x40, // 247
|
|
||||||
0x00, 0x00, 0xC0, 0x02, 0xA0, 0x03, 0x60, 0x02, 0xA0, 0x01, // 248
|
|
||||||
0x00, 0x00, 0xE0, 0x01, 0x04, 0x02, 0x08, 0x02, 0xE0, 0x03, // 249
|
|
||||||
0x00, 0x00, 0xE0, 0x01, 0x08, 0x02, 0x04, 0x02, 0xE0, 0x03, // 250
|
|
||||||
0x00, 0x00, 0xE8, 0x01, 0x04, 0x02, 0x08, 0x02, 0xE0, 0x03, // 251
|
|
||||||
0x00, 0x00, 0xE0, 0x01, 0x08, 0x02, 0x00, 0x02, 0xE8, 0x03, // 252
|
|
||||||
0x20, 0x00, 0xC0, 0x09, 0x08, 0x06, 0xC4, 0x01, 0x20, // 253
|
|
||||||
0x00, 0x00, 0xF8, 0x0F, 0x20, 0x02, 0x20, 0x02, 0xC0, 0x01, // 254
|
|
||||||
0x20, 0x00, 0xC8, 0x09, 0x00, 0x06, 0xC8, 0x01, 0x20 // 255
|
|
||||||
};
|
|
@ -39,7 +39,7 @@ void RotaryEncoderInterruptBase::init(
|
|||||||
int32_t RotaryEncoderInterruptBase::runOnce()
|
int32_t RotaryEncoderInterruptBase::runOnce()
|
||||||
{
|
{
|
||||||
InputEvent e;
|
InputEvent e;
|
||||||
e.inputEvent = InputEventChar_NULL;
|
e.inputEvent = InputEventChar_KEY_NONE;
|
||||||
e.source = this->_originName;
|
e.source = this->_originName;
|
||||||
|
|
||||||
if (this->action == ROTARY_ACTION_PRESSED)
|
if (this->action == ROTARY_ACTION_PRESSED)
|
||||||
@ -58,7 +58,7 @@ int32_t RotaryEncoderInterruptBase::runOnce()
|
|||||||
e.inputEvent = this->_eventCcw;
|
e.inputEvent = this->_eventCcw;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (e.inputEvent != InputEventChar_NULL)
|
if (e.inputEvent != InputEventChar_KEY_NONE)
|
||||||
{
|
{
|
||||||
this->notifyObservers(&e);
|
this->notifyObservers(&e);
|
||||||
}
|
}
|
||||||
|
34
src/main.cpp
34
src/main.cpp
@ -300,8 +300,9 @@ class ButtonThread : public OSThread
|
|||||||
static void userButtonPressedLong()
|
static void userButtonPressedLong()
|
||||||
{
|
{
|
||||||
// DEBUG_MSG("Long press!\n");
|
// DEBUG_MSG("Long press!\n");
|
||||||
|
#ifndef NRF52_SERIES
|
||||||
screen->adjustBrightness();
|
screen->adjustBrightness();
|
||||||
|
#endif
|
||||||
// If user button is held down for 5 seconds, shutdown the device.
|
// If user button is held down for 5 seconds, shutdown the device.
|
||||||
if (millis() - longPressTime > 5 * 1000) {
|
if (millis() - longPressTime > 5 * 1000) {
|
||||||
#ifdef TBEAM_V10
|
#ifdef TBEAM_V10
|
||||||
@ -313,6 +314,7 @@ class ButtonThread : public OSThread
|
|||||||
// Do actual shutdown when button released, otherwise the button release
|
// Do actual shutdown when button released, otherwise the button release
|
||||||
// may wake the board immediatedly.
|
// may wake the board immediatedly.
|
||||||
if (!shutdown_on_long_stop) {
|
if (!shutdown_on_long_stop) {
|
||||||
|
screen->startShutdownScreen();
|
||||||
DEBUG_MSG("Shutdown from long press");
|
DEBUG_MSG("Shutdown from long press");
|
||||||
playBeep();
|
playBeep();
|
||||||
ledOff(PIN_LED1);
|
ledOff(PIN_LED1);
|
||||||
@ -354,6 +356,7 @@ class ButtonThread : public OSThread
|
|||||||
longPressTime = 0;
|
longPressTime = 0;
|
||||||
if (shutdown_on_long_stop) {
|
if (shutdown_on_long_stop) {
|
||||||
playShutdownMelody();
|
playShutdownMelody();
|
||||||
|
delay(3000);
|
||||||
power->shutdown();
|
power->shutdown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -696,8 +699,9 @@ axpDebugOutput.setup();
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint32_t rebootAtMsec; // If not zero we will reboot at this time (used to reboot shortly after the update completes)
|
uint32_t rebootAtMsec; // If not zero we will reboot at this time (used to reboot shortly after the update completes)
|
||||||
|
uint32_t shutdownAtMsec; // If not zero we will shutdown at this time (used to shutdown from python or mobile client)
|
||||||
|
|
||||||
void rebootCheck()
|
void powerCommandsCheck()
|
||||||
{
|
{
|
||||||
if (rebootAtMsec && millis() > rebootAtMsec) {
|
if (rebootAtMsec && millis() > rebootAtMsec) {
|
||||||
#ifndef NO_ESP32
|
#ifndef NO_ESP32
|
||||||
@ -707,6 +711,30 @@ void rebootCheck()
|
|||||||
DEBUG_MSG("FIXME implement reboot for this platform");
|
DEBUG_MSG("FIXME implement reboot for this platform");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if NRF52_SERIES
|
||||||
|
if (shutdownAtMsec) {
|
||||||
|
screen->startShutdownScreen();
|
||||||
|
playBeep();
|
||||||
|
ledOff(PIN_LED1);
|
||||||
|
ledOff(PIN_LED2);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (shutdownAtMsec && millis() > shutdownAtMsec) {
|
||||||
|
DEBUG_MSG("Shutting down from admin command\n");
|
||||||
|
#ifdef TBEAM_V10
|
||||||
|
if (axp192_found == true) {
|
||||||
|
setLed(false);
|
||||||
|
power->shutdown();
|
||||||
|
}
|
||||||
|
#elif NRF52_SERIES
|
||||||
|
playShutdownMelody();
|
||||||
|
power->shutdown();
|
||||||
|
#else
|
||||||
|
DEBUG_MSG("FIXME implement shutdown for this platform");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If a thread does something that might need for it to be rescheduled ASAP it can set this flag
|
// If a thread does something that might need for it to be rescheduled ASAP it can set this flag
|
||||||
@ -727,7 +755,7 @@ void loop()
|
|||||||
#ifdef NRF52_SERIES
|
#ifdef NRF52_SERIES
|
||||||
nrf52Loop();
|
nrf52Loop();
|
||||||
#endif
|
#endif
|
||||||
rebootCheck();
|
powerCommandsCheck();
|
||||||
|
|
||||||
// For debugging
|
// For debugging
|
||||||
// if (rIf) ((RadioLibInterface *)rIf)->isActivelyReceiving();
|
// if (rIf) ((RadioLibInterface *)rIf)->isActivelyReceiving();
|
||||||
|
@ -21,6 +21,7 @@ extern graphics::Screen *screen;
|
|||||||
const char *getDeviceName();
|
const char *getDeviceName();
|
||||||
|
|
||||||
extern uint32_t rebootAtMsec;
|
extern uint32_t rebootAtMsec;
|
||||||
|
extern uint32_t shutdownAtMsec;
|
||||||
|
|
||||||
// If a thread does something that might need for it to be rescheduled ASAP it can set this flag
|
// If a thread does something that might need for it to be rescheduled ASAP it can set this flag
|
||||||
// This will supress the current delay and instead try to run ASAP.
|
// This will supress the current delay and instead try to run ASAP.
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#ifndef PB_ADMIN_PB_H_INCLUDED
|
#ifndef PB_ADMIN_PB_H_INCLUDED
|
||||||
#define PB_ADMIN_PB_H_INCLUDED
|
#define PB_ADMIN_PB_H_INCLUDED
|
||||||
#include <pb.h>
|
#include <pb.h>
|
||||||
|
#include "cannedmessages.pb.h"
|
||||||
#include "channel.pb.h"
|
#include "channel.pb.h"
|
||||||
#include "mesh.pb.h"
|
#include "mesh.pb.h"
|
||||||
#include "radioconfig.pb.h"
|
#include "radioconfig.pb.h"
|
||||||
@ -29,6 +30,22 @@ typedef struct _AdminMessage {
|
|||||||
bool confirm_set_radio;
|
bool confirm_set_radio;
|
||||||
bool exit_simulator;
|
bool exit_simulator;
|
||||||
int32_t reboot_seconds;
|
int32_t reboot_seconds;
|
||||||
|
bool get_canned_message_plugin_part1_request;
|
||||||
|
CannedMessagePluginMessagePart1 get_canned_message_plugin_part1_response;
|
||||||
|
bool get_canned_message_plugin_part2_request;
|
||||||
|
CannedMessagePluginMessagePart2 get_canned_message_plugin_part2_response;
|
||||||
|
bool get_canned_message_plugin_part3_request;
|
||||||
|
CannedMessagePluginMessagePart3 get_canned_message_plugin_part3_response;
|
||||||
|
bool get_canned_message_plugin_part4_request;
|
||||||
|
CannedMessagePluginMessagePart4 get_canned_message_plugin_part4_response;
|
||||||
|
bool get_canned_message_plugin_part5_request;
|
||||||
|
CannedMessagePluginMessagePart5 get_canned_message_plugin_part5_response;
|
||||||
|
CannedMessagePluginMessagePart1 set_canned_message_plugin_part1;
|
||||||
|
CannedMessagePluginMessagePart2 set_canned_message_plugin_part2;
|
||||||
|
CannedMessagePluginMessagePart3 set_canned_message_plugin_part3;
|
||||||
|
CannedMessagePluginMessagePart4 set_canned_message_plugin_part4;
|
||||||
|
CannedMessagePluginMessagePart5 set_canned_message_plugin_part5;
|
||||||
|
int32_t shutdown_seconds;
|
||||||
};
|
};
|
||||||
} AdminMessage;
|
} AdminMessage;
|
||||||
|
|
||||||
@ -55,6 +72,22 @@ extern "C" {
|
|||||||
#define AdminMessage_confirm_set_radio_tag 33
|
#define AdminMessage_confirm_set_radio_tag 33
|
||||||
#define AdminMessage_exit_simulator_tag 34
|
#define AdminMessage_exit_simulator_tag 34
|
||||||
#define AdminMessage_reboot_seconds_tag 35
|
#define AdminMessage_reboot_seconds_tag 35
|
||||||
|
#define AdminMessage_get_canned_message_plugin_part1_request_tag 36
|
||||||
|
#define AdminMessage_get_canned_message_plugin_part1_response_tag 37
|
||||||
|
#define AdminMessage_get_canned_message_plugin_part2_request_tag 38
|
||||||
|
#define AdminMessage_get_canned_message_plugin_part2_response_tag 39
|
||||||
|
#define AdminMessage_get_canned_message_plugin_part3_request_tag 40
|
||||||
|
#define AdminMessage_get_canned_message_plugin_part3_response_tag 41
|
||||||
|
#define AdminMessage_get_canned_message_plugin_part4_request_tag 42
|
||||||
|
#define AdminMessage_get_canned_message_plugin_part4_response_tag 43
|
||||||
|
#define AdminMessage_get_canned_message_plugin_part5_request_tag 44
|
||||||
|
#define AdminMessage_get_canned_message_plugin_part5_response_tag 45
|
||||||
|
#define AdminMessage_set_canned_message_plugin_part1_tag 46
|
||||||
|
#define AdminMessage_set_canned_message_plugin_part2_tag 47
|
||||||
|
#define AdminMessage_set_canned_message_plugin_part3_tag 48
|
||||||
|
#define AdminMessage_set_canned_message_plugin_part4_tag 49
|
||||||
|
#define AdminMessage_set_canned_message_plugin_part5_tag 50
|
||||||
|
#define AdminMessage_shutdown_seconds_tag 51
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define AdminMessage_FIELDLIST(X, a) \
|
#define AdminMessage_FIELDLIST(X, a) \
|
||||||
@ -70,7 +103,23 @@ X(a, STATIC, ONEOF, MESSAGE, (variant,get_owner_response,get_owner_respons
|
|||||||
X(a, STATIC, ONEOF, BOOL, (variant,confirm_set_channel,confirm_set_channel), 32) \
|
X(a, STATIC, ONEOF, BOOL, (variant,confirm_set_channel,confirm_set_channel), 32) \
|
||||||
X(a, STATIC, ONEOF, BOOL, (variant,confirm_set_radio,confirm_set_radio), 33) \
|
X(a, STATIC, ONEOF, BOOL, (variant,confirm_set_radio,confirm_set_radio), 33) \
|
||||||
X(a, STATIC, ONEOF, BOOL, (variant,exit_simulator,exit_simulator), 34) \
|
X(a, STATIC, ONEOF, BOOL, (variant,exit_simulator,exit_simulator), 34) \
|
||||||
X(a, STATIC, ONEOF, INT32, (variant,reboot_seconds,reboot_seconds), 35)
|
X(a, STATIC, ONEOF, INT32, (variant,reboot_seconds,reboot_seconds), 35) \
|
||||||
|
X(a, STATIC, ONEOF, BOOL, (variant,get_canned_message_plugin_part1_request,get_canned_message_plugin_part1_request), 36) \
|
||||||
|
X(a, STATIC, ONEOF, MESSAGE, (variant,get_canned_message_plugin_part1_response,get_canned_message_plugin_part1_response), 37) \
|
||||||
|
X(a, STATIC, ONEOF, BOOL, (variant,get_canned_message_plugin_part2_request,get_canned_message_plugin_part2_request), 38) \
|
||||||
|
X(a, STATIC, ONEOF, MESSAGE, (variant,get_canned_message_plugin_part2_response,get_canned_message_plugin_part2_response), 39) \
|
||||||
|
X(a, STATIC, ONEOF, BOOL, (variant,get_canned_message_plugin_part3_request,get_canned_message_plugin_part3_request), 40) \
|
||||||
|
X(a, STATIC, ONEOF, MESSAGE, (variant,get_canned_message_plugin_part3_response,get_canned_message_plugin_part3_response), 41) \
|
||||||
|
X(a, STATIC, ONEOF, BOOL, (variant,get_canned_message_plugin_part4_request,get_canned_message_plugin_part4_request), 42) \
|
||||||
|
X(a, STATIC, ONEOF, MESSAGE, (variant,get_canned_message_plugin_part4_response,get_canned_message_plugin_part4_response), 43) \
|
||||||
|
X(a, STATIC, ONEOF, BOOL, (variant,get_canned_message_plugin_part5_request,get_canned_message_plugin_part5_request), 44) \
|
||||||
|
X(a, STATIC, ONEOF, MESSAGE, (variant,get_canned_message_plugin_part5_response,get_canned_message_plugin_part5_response), 45) \
|
||||||
|
X(a, STATIC, ONEOF, MESSAGE, (variant,set_canned_message_plugin_part1,set_canned_message_plugin_part1), 46) \
|
||||||
|
X(a, STATIC, ONEOF, MESSAGE, (variant,set_canned_message_plugin_part2,set_canned_message_plugin_part2), 47) \
|
||||||
|
X(a, STATIC, ONEOF, MESSAGE, (variant,set_canned_message_plugin_part3,set_canned_message_plugin_part3), 48) \
|
||||||
|
X(a, STATIC, ONEOF, MESSAGE, (variant,set_canned_message_plugin_part4,set_canned_message_plugin_part4), 49) \
|
||||||
|
X(a, STATIC, ONEOF, MESSAGE, (variant,set_canned_message_plugin_part5,set_canned_message_plugin_part5), 50) \
|
||||||
|
X(a, STATIC, ONEOF, INT32, (variant,shutdown_seconds,shutdown_seconds), 51)
|
||||||
#define AdminMessage_CALLBACK NULL
|
#define AdminMessage_CALLBACK NULL
|
||||||
#define AdminMessage_DEFAULT NULL
|
#define AdminMessage_DEFAULT NULL
|
||||||
#define AdminMessage_variant_set_radio_MSGTYPE RadioConfig
|
#define AdminMessage_variant_set_radio_MSGTYPE RadioConfig
|
||||||
@ -79,6 +128,16 @@ X(a, STATIC, ONEOF, INT32, (variant,reboot_seconds,reboot_seconds), 35)
|
|||||||
#define AdminMessage_variant_get_radio_response_MSGTYPE RadioConfig
|
#define AdminMessage_variant_get_radio_response_MSGTYPE RadioConfig
|
||||||
#define AdminMessage_variant_get_channel_response_MSGTYPE Channel
|
#define AdminMessage_variant_get_channel_response_MSGTYPE Channel
|
||||||
#define AdminMessage_variant_get_owner_response_MSGTYPE User
|
#define AdminMessage_variant_get_owner_response_MSGTYPE User
|
||||||
|
#define AdminMessage_variant_get_canned_message_plugin_part1_response_MSGTYPE CannedMessagePluginMessagePart1
|
||||||
|
#define AdminMessage_variant_get_canned_message_plugin_part2_response_MSGTYPE CannedMessagePluginMessagePart2
|
||||||
|
#define AdminMessage_variant_get_canned_message_plugin_part3_response_MSGTYPE CannedMessagePluginMessagePart3
|
||||||
|
#define AdminMessage_variant_get_canned_message_plugin_part4_response_MSGTYPE CannedMessagePluginMessagePart4
|
||||||
|
#define AdminMessage_variant_get_canned_message_plugin_part5_response_MSGTYPE CannedMessagePluginMessagePart5
|
||||||
|
#define AdminMessage_variant_set_canned_message_plugin_part1_MSGTYPE CannedMessagePluginMessagePart1
|
||||||
|
#define AdminMessage_variant_set_canned_message_plugin_part2_MSGTYPE CannedMessagePluginMessagePart2
|
||||||
|
#define AdminMessage_variant_set_canned_message_plugin_part3_MSGTYPE CannedMessagePluginMessagePart3
|
||||||
|
#define AdminMessage_variant_set_canned_message_plugin_part4_MSGTYPE CannedMessagePluginMessagePart4
|
||||||
|
#define AdminMessage_variant_set_canned_message_plugin_part5_MSGTYPE CannedMessagePluginMessagePart5
|
||||||
|
|
||||||
extern const pb_msgdesc_t AdminMessage_msg;
|
extern const pb_msgdesc_t AdminMessage_msg;
|
||||||
|
|
||||||
@ -86,7 +145,7 @@ extern const pb_msgdesc_t AdminMessage_msg;
|
|||||||
#define AdminMessage_fields &AdminMessage_msg
|
#define AdminMessage_fields &AdminMessage_msg
|
||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define AdminMessage_size 1619
|
#define AdminMessage_size 795
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
24
src/mesh/generated/cannedmessages.pb.c
Normal file
24
src/mesh/generated/cannedmessages.pb.c
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/* Automatically generated nanopb constant definitions */
|
||||||
|
/* Generated by nanopb-0.4.4 */
|
||||||
|
|
||||||
|
#include "cannedmessages.pb.h"
|
||||||
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PB_BIND(CannedMessagePluginMessagePart1, CannedMessagePluginMessagePart1, AUTO)
|
||||||
|
|
||||||
|
|
||||||
|
PB_BIND(CannedMessagePluginMessagePart2, CannedMessagePluginMessagePart2, AUTO)
|
||||||
|
|
||||||
|
|
||||||
|
PB_BIND(CannedMessagePluginMessagePart3, CannedMessagePluginMessagePart3, AUTO)
|
||||||
|
|
||||||
|
|
||||||
|
PB_BIND(CannedMessagePluginMessagePart4, CannedMessagePluginMessagePart4, AUTO)
|
||||||
|
|
||||||
|
|
||||||
|
PB_BIND(CannedMessagePluginMessagePart5, CannedMessagePluginMessagePart5, AUTO)
|
||||||
|
|
||||||
|
|
||||||
|
|
107
src/mesh/generated/cannedmessages.pb.h
Normal file
107
src/mesh/generated/cannedmessages.pb.h
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
/* Automatically generated nanopb header */
|
||||||
|
/* Generated by nanopb-0.4.4 */
|
||||||
|
|
||||||
|
#ifndef PB_CANNEDMESSAGES_PB_H_INCLUDED
|
||||||
|
#define PB_CANNEDMESSAGES_PB_H_INCLUDED
|
||||||
|
#include <pb.h>
|
||||||
|
|
||||||
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Struct definitions */
|
||||||
|
typedef struct _CannedMessagePluginMessagePart1 {
|
||||||
|
char text[200];
|
||||||
|
} CannedMessagePluginMessagePart1;
|
||||||
|
|
||||||
|
typedef struct _CannedMessagePluginMessagePart2 {
|
||||||
|
char text[200];
|
||||||
|
} CannedMessagePluginMessagePart2;
|
||||||
|
|
||||||
|
typedef struct _CannedMessagePluginMessagePart3 {
|
||||||
|
char text[200];
|
||||||
|
} CannedMessagePluginMessagePart3;
|
||||||
|
|
||||||
|
typedef struct _CannedMessagePluginMessagePart4 {
|
||||||
|
char text[200];
|
||||||
|
} CannedMessagePluginMessagePart4;
|
||||||
|
|
||||||
|
typedef struct _CannedMessagePluginMessagePart5 {
|
||||||
|
char text[200];
|
||||||
|
} CannedMessagePluginMessagePart5;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Initializer values for message structs */
|
||||||
|
#define CannedMessagePluginMessagePart1_init_default {""}
|
||||||
|
#define CannedMessagePluginMessagePart2_init_default {""}
|
||||||
|
#define CannedMessagePluginMessagePart3_init_default {""}
|
||||||
|
#define CannedMessagePluginMessagePart4_init_default {""}
|
||||||
|
#define CannedMessagePluginMessagePart5_init_default {""}
|
||||||
|
#define CannedMessagePluginMessagePart1_init_zero {""}
|
||||||
|
#define CannedMessagePluginMessagePart2_init_zero {""}
|
||||||
|
#define CannedMessagePluginMessagePart3_init_zero {""}
|
||||||
|
#define CannedMessagePluginMessagePart4_init_zero {""}
|
||||||
|
#define CannedMessagePluginMessagePart5_init_zero {""}
|
||||||
|
|
||||||
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
|
#define CannedMessagePluginMessagePart1_text_tag 1
|
||||||
|
#define CannedMessagePluginMessagePart2_text_tag 1
|
||||||
|
#define CannedMessagePluginMessagePart3_text_tag 1
|
||||||
|
#define CannedMessagePluginMessagePart4_text_tag 1
|
||||||
|
#define CannedMessagePluginMessagePart5_text_tag 1
|
||||||
|
|
||||||
|
/* Struct field encoding specification for nanopb */
|
||||||
|
#define CannedMessagePluginMessagePart1_FIELDLIST(X, a) \
|
||||||
|
X(a, STATIC, SINGULAR, STRING, text, 1)
|
||||||
|
#define CannedMessagePluginMessagePart1_CALLBACK NULL
|
||||||
|
#define CannedMessagePluginMessagePart1_DEFAULT NULL
|
||||||
|
|
||||||
|
#define CannedMessagePluginMessagePart2_FIELDLIST(X, a) \
|
||||||
|
X(a, STATIC, SINGULAR, STRING, text, 1)
|
||||||
|
#define CannedMessagePluginMessagePart2_CALLBACK NULL
|
||||||
|
#define CannedMessagePluginMessagePart2_DEFAULT NULL
|
||||||
|
|
||||||
|
#define CannedMessagePluginMessagePart3_FIELDLIST(X, a) \
|
||||||
|
X(a, STATIC, SINGULAR, STRING, text, 1)
|
||||||
|
#define CannedMessagePluginMessagePart3_CALLBACK NULL
|
||||||
|
#define CannedMessagePluginMessagePart3_DEFAULT NULL
|
||||||
|
|
||||||
|
#define CannedMessagePluginMessagePart4_FIELDLIST(X, a) \
|
||||||
|
X(a, STATIC, SINGULAR, STRING, text, 1)
|
||||||
|
#define CannedMessagePluginMessagePart4_CALLBACK NULL
|
||||||
|
#define CannedMessagePluginMessagePart4_DEFAULT NULL
|
||||||
|
|
||||||
|
#define CannedMessagePluginMessagePart5_FIELDLIST(X, a) \
|
||||||
|
X(a, STATIC, SINGULAR, STRING, text, 1)
|
||||||
|
#define CannedMessagePluginMessagePart5_CALLBACK NULL
|
||||||
|
#define CannedMessagePluginMessagePart5_DEFAULT NULL
|
||||||
|
|
||||||
|
extern const pb_msgdesc_t CannedMessagePluginMessagePart1_msg;
|
||||||
|
extern const pb_msgdesc_t CannedMessagePluginMessagePart2_msg;
|
||||||
|
extern const pb_msgdesc_t CannedMessagePluginMessagePart3_msg;
|
||||||
|
extern const pb_msgdesc_t CannedMessagePluginMessagePart4_msg;
|
||||||
|
extern const pb_msgdesc_t CannedMessagePluginMessagePart5_msg;
|
||||||
|
|
||||||
|
/* Defines for backwards compatibility with code written before nanopb-0.4.0 */
|
||||||
|
#define CannedMessagePluginMessagePart1_fields &CannedMessagePluginMessagePart1_msg
|
||||||
|
#define CannedMessagePluginMessagePart2_fields &CannedMessagePluginMessagePart2_msg
|
||||||
|
#define CannedMessagePluginMessagePart3_fields &CannedMessagePluginMessagePart3_msg
|
||||||
|
#define CannedMessagePluginMessagePart4_fields &CannedMessagePluginMessagePart4_msg
|
||||||
|
#define CannedMessagePluginMessagePart5_fields &CannedMessagePluginMessagePart5_msg
|
||||||
|
|
||||||
|
/* Maximum encoded size of messages (where known) */
|
||||||
|
#define CannedMessagePluginMessagePart1_size 202
|
||||||
|
#define CannedMessagePluginMessagePart2_size 202
|
||||||
|
#define CannedMessagePluginMessagePart3_size 202
|
||||||
|
#define CannedMessagePluginMessagePart4_size 202
|
||||||
|
#define CannedMessagePluginMessagePart5_size 202
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -43,6 +43,11 @@ typedef struct _DeviceState {
|
|||||||
uint32_t version;
|
uint32_t version;
|
||||||
bool no_save;
|
bool no_save;
|
||||||
bool did_gps_reset;
|
bool did_gps_reset;
|
||||||
|
char canned_message_plugin_message_part1[200];
|
||||||
|
char canned_message_plugin_message_part2[200];
|
||||||
|
char canned_message_plugin_message_part3[200];
|
||||||
|
char canned_message_plugin_message_part4[200];
|
||||||
|
char canned_message_plugin_message_part5[200];
|
||||||
} DeviceState;
|
} DeviceState;
|
||||||
|
|
||||||
|
|
||||||
@ -53,11 +58,11 @@ extern "C" {
|
|||||||
/* Initializer values for message structs */
|
/* Initializer values for message structs */
|
||||||
#define LegacyRadioConfig_init_default {false, LegacyRadioConfig_LegacyPreferences_init_default}
|
#define LegacyRadioConfig_init_default {false, LegacyRadioConfig_LegacyPreferences_init_default}
|
||||||
#define LegacyRadioConfig_LegacyPreferences_init_default {_RegionCode_MIN}
|
#define LegacyRadioConfig_LegacyPreferences_init_default {_RegionCode_MIN}
|
||||||
#define DeviceState_init_default {false, LegacyRadioConfig_init_default, false, MyNodeInfo_init_default, false, User_init_default, 0, {NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default}, 0, {MeshPacket_init_default}, false, MeshPacket_init_default, 0, 0, 0}
|
#define DeviceState_init_default {false, LegacyRadioConfig_init_default, false, MyNodeInfo_init_default, false, User_init_default, 0, {NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default}, 0, {MeshPacket_init_default}, false, MeshPacket_init_default, 0, 0, 0, "", "", "", "", ""}
|
||||||
#define ChannelFile_init_default {0, {Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default}}
|
#define ChannelFile_init_default {0, {Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default}}
|
||||||
#define LegacyRadioConfig_init_zero {false, LegacyRadioConfig_LegacyPreferences_init_zero}
|
#define LegacyRadioConfig_init_zero {false, LegacyRadioConfig_LegacyPreferences_init_zero}
|
||||||
#define LegacyRadioConfig_LegacyPreferences_init_zero {_RegionCode_MIN}
|
#define LegacyRadioConfig_LegacyPreferences_init_zero {_RegionCode_MIN}
|
||||||
#define DeviceState_init_zero {false, LegacyRadioConfig_init_zero, false, MyNodeInfo_init_zero, false, User_init_zero, 0, {NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero}, 0, {MeshPacket_init_zero}, false, MeshPacket_init_zero, 0, 0, 0}
|
#define DeviceState_init_zero {false, LegacyRadioConfig_init_zero, false, MyNodeInfo_init_zero, false, User_init_zero, 0, {NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero}, 0, {MeshPacket_init_zero}, false, MeshPacket_init_zero, 0, 0, 0, "", "", "", "", ""}
|
||||||
#define ChannelFile_init_zero {0, {Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero}}
|
#define ChannelFile_init_zero {0, {Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero}}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
@ -73,6 +78,11 @@ extern "C" {
|
|||||||
#define DeviceState_version_tag 8
|
#define DeviceState_version_tag 8
|
||||||
#define DeviceState_no_save_tag 9
|
#define DeviceState_no_save_tag 9
|
||||||
#define DeviceState_did_gps_reset_tag 11
|
#define DeviceState_did_gps_reset_tag 11
|
||||||
|
#define DeviceState_canned_message_plugin_message_part1_tag 13
|
||||||
|
#define DeviceState_canned_message_plugin_message_part2_tag 14
|
||||||
|
#define DeviceState_canned_message_plugin_message_part3_tag 15
|
||||||
|
#define DeviceState_canned_message_plugin_message_part4_tag 16
|
||||||
|
#define DeviceState_canned_message_plugin_message_part5_tag 17
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define LegacyRadioConfig_FIELDLIST(X, a) \
|
#define LegacyRadioConfig_FIELDLIST(X, a) \
|
||||||
@ -95,7 +105,12 @@ X(a, STATIC, REPEATED, MESSAGE, receive_queue, 5) \
|
|||||||
X(a, STATIC, OPTIONAL, MESSAGE, rx_text_message, 7) \
|
X(a, STATIC, OPTIONAL, MESSAGE, rx_text_message, 7) \
|
||||||
X(a, STATIC, SINGULAR, UINT32, version, 8) \
|
X(a, STATIC, SINGULAR, UINT32, version, 8) \
|
||||||
X(a, STATIC, SINGULAR, BOOL, no_save, 9) \
|
X(a, STATIC, SINGULAR, BOOL, no_save, 9) \
|
||||||
X(a, STATIC, SINGULAR, BOOL, did_gps_reset, 11)
|
X(a, STATIC, SINGULAR, BOOL, did_gps_reset, 11) \
|
||||||
|
X(a, STATIC, SINGULAR, STRING, canned_message_plugin_message_part1, 13) \
|
||||||
|
X(a, STATIC, SINGULAR, STRING, canned_message_plugin_message_part2, 14) \
|
||||||
|
X(a, STATIC, SINGULAR, STRING, canned_message_plugin_message_part3, 15) \
|
||||||
|
X(a, STATIC, SINGULAR, STRING, canned_message_plugin_message_part4, 16) \
|
||||||
|
X(a, STATIC, SINGULAR, STRING, canned_message_plugin_message_part5, 17)
|
||||||
#define DeviceState_CALLBACK NULL
|
#define DeviceState_CALLBACK NULL
|
||||||
#define DeviceState_DEFAULT NULL
|
#define DeviceState_DEFAULT NULL
|
||||||
#define DeviceState_legacyRadio_MSGTYPE LegacyRadioConfig
|
#define DeviceState_legacyRadio_MSGTYPE LegacyRadioConfig
|
||||||
@ -125,7 +140,7 @@ extern const pb_msgdesc_t ChannelFile_msg;
|
|||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define LegacyRadioConfig_size 4
|
#define LegacyRadioConfig_size 4
|
||||||
#define LegacyRadioConfig_LegacyPreferences_size 2
|
#define LegacyRadioConfig_LegacyPreferences_size 2
|
||||||
#define DeviceState_size 9973
|
#define DeviceState_size 10985
|
||||||
#define ChannelFile_size 832
|
#define ChannelFile_size 832
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -80,14 +80,14 @@ typedef enum _PositionFlags {
|
|||||||
} PositionFlags;
|
} PositionFlags;
|
||||||
|
|
||||||
typedef enum _InputEventChar {
|
typedef enum _InputEventChar {
|
||||||
InputEventChar_NULL = 0,
|
InputEventChar_KEY_NONE = 0,
|
||||||
InputEventChar_UP = 17,
|
InputEventChar_KEY_UP = 17,
|
||||||
InputEventChar_DOWN = 18,
|
InputEventChar_KEY_DOWN = 18,
|
||||||
InputEventChar_LEFT = 19,
|
InputEventChar_KEY_LEFT = 19,
|
||||||
InputEventChar_RIGHT = 20,
|
InputEventChar_KEY_RIGHT = 20,
|
||||||
InputEventChar_SELECT = 10,
|
InputEventChar_KEY_SELECT = 10,
|
||||||
InputEventChar_BACK = 27,
|
InputEventChar_KEY_BACK = 27,
|
||||||
InputEventChar_CANCEL = 24
|
InputEventChar_KEY_CANCEL = 24
|
||||||
} InputEventChar;
|
} InputEventChar;
|
||||||
|
|
||||||
typedef enum _RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType {
|
typedef enum _RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType {
|
||||||
@ -180,7 +180,7 @@ typedef struct _RadioConfig_UserPreferences {
|
|||||||
InputEventChar rotary1_event_press;
|
InputEventChar rotary1_event_press;
|
||||||
bool canned_message_plugin_enabled;
|
bool canned_message_plugin_enabled;
|
||||||
char canned_message_plugin_allow_input_source[16];
|
char canned_message_plugin_allow_input_source[16];
|
||||||
char canned_message_plugin_messages[1024];
|
char canned_message_plugin_messages[200];
|
||||||
bool canned_message_plugin_send_bell;
|
bool canned_message_plugin_send_bell;
|
||||||
} RadioConfig_UserPreferences;
|
} RadioConfig_UserPreferences;
|
||||||
|
|
||||||
@ -215,9 +215,9 @@ typedef struct _RadioConfig {
|
|||||||
#define _PositionFlags_MAX PositionFlags_POS_TIMESTAMP
|
#define _PositionFlags_MAX PositionFlags_POS_TIMESTAMP
|
||||||
#define _PositionFlags_ARRAYSIZE ((PositionFlags)(PositionFlags_POS_TIMESTAMP+1))
|
#define _PositionFlags_ARRAYSIZE ((PositionFlags)(PositionFlags_POS_TIMESTAMP+1))
|
||||||
|
|
||||||
#define _InputEventChar_MIN InputEventChar_NULL
|
#define _InputEventChar_MIN InputEventChar_KEY_NONE
|
||||||
#define _InputEventChar_MAX InputEventChar_BACK
|
#define _InputEventChar_MAX InputEventChar_KEY_BACK
|
||||||
#define _InputEventChar_ARRAYSIZE ((InputEventChar)(InputEventChar_BACK+1))
|
#define _InputEventChar_ARRAYSIZE ((InputEventChar)(InputEventChar_KEY_BACK+1))
|
||||||
|
|
||||||
#define _RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_MIN RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_DHT11
|
#define _RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_MIN RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_DHT11
|
||||||
#define _RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_MAX RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_DHT22
|
#define _RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_MAX RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_DHT22
|
||||||
@ -418,8 +418,8 @@ extern const pb_msgdesc_t RadioConfig_UserPreferences_msg;
|
|||||||
#define RadioConfig_UserPreferences_fields &RadioConfig_UserPreferences_msg
|
#define RadioConfig_UserPreferences_fields &RadioConfig_UserPreferences_msg
|
||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define RadioConfig_size 1616
|
#define RadioConfig_size 792
|
||||||
#define RadioConfig_UserPreferences_size 1613
|
#define RadioConfig_UserPreferences_size 789
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
@ -104,6 +104,12 @@ bool AdminPlugin::handleReceivedProtobuf(const MeshPacket &mp, AdminMessage *r)
|
|||||||
rebootAtMsec = (s < 0) ? 0 : (millis() + s * 1000);
|
rebootAtMsec = (s < 0) ? 0 : (millis() + s * 1000);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case AdminMessage_shutdown_seconds_tag: {
|
||||||
|
int32_t s = r->shutdown_seconds;
|
||||||
|
DEBUG_MSG("Shutdown in %d seconds\n", s);
|
||||||
|
shutdownAtMsec = (s < 0) ? 0 : (millis() + s * 1000);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef PORTDUINO
|
#ifdef PORTDUINO
|
||||||
case AdminMessage_exit_simulator_tag:
|
case AdminMessage_exit_simulator_tag:
|
||||||
|
@ -30,7 +30,7 @@ CannedMessagePlugin::CannedMessagePlugin()
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Items in array this->messages will be set to be pointing on the right
|
* @brief Items in array this->messages will be set to be pointing on the right
|
||||||
* starting points of the string radioConfig.preferences.canned_message_plugin_messages
|
* starting points of the string this->messageStore
|
||||||
*
|
*
|
||||||
* @return int Returns the number of messages found.
|
* @return int Returns the number of messages found.
|
||||||
*/
|
*/
|
||||||
@ -38,17 +38,23 @@ int CannedMessagePlugin::splitConfiguredMessages()
|
|||||||
{
|
{
|
||||||
int messageIndex = 0;
|
int messageIndex = 0;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
|
strncpy(
|
||||||
|
this->messageStore,
|
||||||
|
radioConfig.preferences.canned_message_plugin_messages,
|
||||||
|
CANNED_MESSAGE_PLUGIN_MESSAGES_SIZE);
|
||||||
|
|
||||||
this->messages[messageIndex++] =
|
this->messages[messageIndex++] =
|
||||||
radioConfig.preferences.canned_message_plugin_messages;
|
this->messageStore;
|
||||||
int upTo =
|
int upTo =
|
||||||
strlen(radioConfig.preferences.canned_message_plugin_messages) - 1;
|
strlen(this->messageStore) - 1;
|
||||||
|
|
||||||
while (i < upTo)
|
while (i < upTo)
|
||||||
{
|
{
|
||||||
if (radioConfig.preferences.canned_message_plugin_messages[i] == '|')
|
if (this->messageStore[i] == '|')
|
||||||
{
|
{
|
||||||
// Message ending found, replace it with string-end character.
|
// Message ending found, replace it with string-end character.
|
||||||
radioConfig.preferences.canned_message_plugin_messages[i] = '\0';
|
this->messageStore[i] = '\0';
|
||||||
DEBUG_MSG("CannedMessage %d is: '%s'\n",
|
DEBUG_MSG("CannedMessage %d is: '%s'\n",
|
||||||
messageIndex-1, this->messages[messageIndex-1]);
|
messageIndex-1, this->messages[messageIndex-1]);
|
||||||
|
|
||||||
@ -60,7 +66,7 @@ int CannedMessagePlugin::splitConfiguredMessages()
|
|||||||
|
|
||||||
// Next message starts after pipe (|) just found.
|
// Next message starts after pipe (|) just found.
|
||||||
this->messages[messageIndex++] =
|
this->messages[messageIndex++] =
|
||||||
(radioConfig.preferences.canned_message_plugin_messages + i + 1);
|
(this->messageStore + i + 1);
|
||||||
}
|
}
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
@ -90,22 +96,22 @@ int CannedMessagePlugin::handleInputEvent(const InputEvent *event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool validEvent = false;
|
bool validEvent = false;
|
||||||
if (event->inputEvent == static_cast<char>(InputEventChar_UP))
|
if (event->inputEvent == static_cast<char>(InputEventChar_KEY_UP))
|
||||||
{
|
{
|
||||||
DEBUG_MSG("Canned message event UP\n");
|
DEBUG_MSG("Canned message event UP\n");
|
||||||
this->action = CANNED_MESSAGE_ACTION_UP;
|
this->runState = CANNED_MESSAGE_RUN_STATE_ACTION_UP;
|
||||||
validEvent = true;
|
validEvent = true;
|
||||||
}
|
}
|
||||||
if (event->inputEvent == static_cast<char>(InputEventChar_DOWN))
|
if (event->inputEvent == static_cast<char>(InputEventChar_KEY_DOWN))
|
||||||
{
|
{
|
||||||
DEBUG_MSG("Canned message event DOWN\n");
|
DEBUG_MSG("Canned message event DOWN\n");
|
||||||
this->action = CANNED_MESSAGE_ACTION_DOWN;
|
this->runState = CANNED_MESSAGE_RUN_STATE_ACTION_DOWN;
|
||||||
validEvent = true;
|
validEvent = true;
|
||||||
}
|
}
|
||||||
if (event->inputEvent == static_cast<char>(InputEventChar_SELECT))
|
if (event->inputEvent == static_cast<char>(InputEventChar_KEY_SELECT))
|
||||||
{
|
{
|
||||||
DEBUG_MSG("Canned message event Select\n");
|
DEBUG_MSG("Canned message event Select\n");
|
||||||
this->action = CANNED_MESSAGE_ACTION_SELECT;
|
this->runState = CANNED_MESSAGE_RUN_STATE_ACTION_SELECT;
|
||||||
validEvent = true;
|
validEvent = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,76 +151,82 @@ void CannedMessagePlugin::sendText(NodeNum dest,
|
|||||||
|
|
||||||
int32_t CannedMessagePlugin::runOnce()
|
int32_t CannedMessagePlugin::runOnce()
|
||||||
{
|
{
|
||||||
if (!radioConfig.preferences.canned_message_plugin_enabled)
|
if ((!radioConfig.preferences.canned_message_plugin_enabled)
|
||||||
|
|| (this->runState == CANNED_MESSAGE_RUN_STATE_INACTIVE))
|
||||||
{
|
{
|
||||||
return 30000; // TODO: should return MAX_VAL
|
return 30000; // TODO: should return MAX_VAL
|
||||||
}
|
}
|
||||||
DEBUG_MSG("Check status\n");
|
DEBUG_MSG("Check status\n");
|
||||||
UIFrameEvent e = {false, true};
|
UIFrameEvent e = {false, true};
|
||||||
if (this->sendingState == SENDING_STATE_ACTIVE)
|
if (this->runState == CANNED_MESSAGE_RUN_STATE_SENDING_ACTIVE)
|
||||||
{
|
{
|
||||||
// TODO: might have some feedback of sendig state
|
// TODO: might have some feedback of sendig state
|
||||||
this->sendingState = SENDING_STATE_NONE;
|
this->runState = CANNED_MESSAGE_RUN_STATE_INACTIVE;
|
||||||
e.frameChanged = true;
|
e.frameChanged = true;
|
||||||
this->notifyObservers(&e);
|
|
||||||
}
|
|
||||||
else if ((this->action != CANNED_MESSAGE_ACTION_NONE)
|
|
||||||
&& (this->currentMessageIndex == -1))
|
|
||||||
{
|
|
||||||
this->currentMessageIndex = 0;
|
|
||||||
DEBUG_MSG("First touch.\n");
|
|
||||||
e.frameChanged = true;
|
|
||||||
}
|
|
||||||
else if (this->action == CANNED_MESSAGE_ACTION_SELECT)
|
|
||||||
{
|
|
||||||
sendText(
|
|
||||||
NODENUM_BROADCAST,
|
|
||||||
this->messages[this->currentMessageIndex],
|
|
||||||
true);
|
|
||||||
this->sendingState = SENDING_STATE_ACTIVE;
|
|
||||||
this->currentMessageIndex = -1;
|
this->currentMessageIndex = -1;
|
||||||
this->notifyObservers(&e);
|
this->notifyObservers(&e);
|
||||||
return 2000;
|
|
||||||
}
|
}
|
||||||
else if (this->action == CANNED_MESSAGE_ACTION_UP)
|
else if (
|
||||||
{
|
(this->runState == CANNED_MESSAGE_RUN_STATE_ACTIVE)
|
||||||
this->currentMessageIndex = getPrevIndex();
|
&& (millis() - this->lastTouchMillis) > INACTIVATE_AFTER_MS)
|
||||||
DEBUG_MSG("MOVE UP");
|
|
||||||
}
|
|
||||||
else if (this->action == CANNED_MESSAGE_ACTION_DOWN)
|
|
||||||
{
|
|
||||||
this->currentMessageIndex = this->getNextIndex();
|
|
||||||
DEBUG_MSG("MOVE DOWN");
|
|
||||||
}
|
|
||||||
if (this->action != CANNED_MESSAGE_ACTION_NONE)
|
|
||||||
{
|
|
||||||
this->lastTouchMillis = millis();
|
|
||||||
this->action = CANNED_MESSAGE_ACTION_NONE;
|
|
||||||
this->notifyObservers(&e);
|
|
||||||
return INACTIVATE_AFTER_MS;
|
|
||||||
}
|
|
||||||
if ((millis() - this->lastTouchMillis) > INACTIVATE_AFTER_MS)
|
|
||||||
{
|
{
|
||||||
// Reset plugin
|
// Reset plugin
|
||||||
DEBUG_MSG("Reset due the lack of activity.\n");
|
DEBUG_MSG("Reset due the lack of activity.\n");
|
||||||
e.frameChanged = true;
|
e.frameChanged = true;
|
||||||
this->currentMessageIndex = -1;
|
this->currentMessageIndex = -1;
|
||||||
this->sendingState = SENDING_STATE_NONE;
|
this->runState = CANNED_MESSAGE_RUN_STATE_INACTIVE;
|
||||||
this->notifyObservers(&e);
|
this->notifyObservers(&e);
|
||||||
}
|
}
|
||||||
|
else if (this->currentMessageIndex == -1)
|
||||||
|
{
|
||||||
|
this->currentMessageIndex = 0;
|
||||||
|
DEBUG_MSG("First touch.\n");
|
||||||
|
e.frameChanged = true;
|
||||||
|
this->runState = CANNED_MESSAGE_RUN_STATE_ACTIVE;
|
||||||
|
}
|
||||||
|
else if (this->runState == CANNED_MESSAGE_RUN_STATE_ACTION_SELECT)
|
||||||
|
{
|
||||||
|
sendText(
|
||||||
|
NODENUM_BROADCAST,
|
||||||
|
this->messages[this->currentMessageIndex],
|
||||||
|
true);
|
||||||
|
this->runState = CANNED_MESSAGE_RUN_STATE_SENDING_ACTIVE;
|
||||||
|
this->currentMessageIndex = -1;
|
||||||
|
this->notifyObservers(&e);
|
||||||
|
return 2000;
|
||||||
|
}
|
||||||
|
else if (this->runState == CANNED_MESSAGE_RUN_STATE_ACTION_UP)
|
||||||
|
{
|
||||||
|
this->currentMessageIndex = getPrevIndex();
|
||||||
|
this->runState = CANNED_MESSAGE_RUN_STATE_ACTIVE;
|
||||||
|
DEBUG_MSG("MOVE UP\n");
|
||||||
|
}
|
||||||
|
else if (this->runState == CANNED_MESSAGE_RUN_STATE_ACTION_DOWN)
|
||||||
|
{
|
||||||
|
this->currentMessageIndex = this->getNextIndex();
|
||||||
|
this->runState = CANNED_MESSAGE_RUN_STATE_ACTIVE;
|
||||||
|
DEBUG_MSG("MOVE DOWN\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->runState == CANNED_MESSAGE_RUN_STATE_ACTIVE)
|
||||||
|
{
|
||||||
|
this->lastTouchMillis = millis();
|
||||||
|
this->notifyObservers(&e);
|
||||||
|
return INACTIVATE_AFTER_MS;
|
||||||
|
}
|
||||||
|
|
||||||
return 30000; // TODO: should return MAX_VAL
|
return 30000; // TODO: should return MAX_VAL
|
||||||
}
|
}
|
||||||
|
|
||||||
String CannedMessagePlugin::getCurrentMessage()
|
const char* CannedMessagePlugin::getCurrentMessage()
|
||||||
{
|
{
|
||||||
return this->messages[this->currentMessageIndex];
|
return this->messages[this->currentMessageIndex];
|
||||||
}
|
}
|
||||||
String CannedMessagePlugin::getPrevMessage()
|
const char* CannedMessagePlugin::getPrevMessage()
|
||||||
{
|
{
|
||||||
return this->messages[this->getPrevIndex()];
|
return this->messages[this->getPrevIndex()];
|
||||||
}
|
}
|
||||||
String CannedMessagePlugin::getNextMessage()
|
const char* CannedMessagePlugin::getNextMessage()
|
||||||
{
|
{
|
||||||
return this->messages[this->getNextIndex()];
|
return this->messages[this->getNextIndex()];
|
||||||
}
|
}
|
||||||
@ -224,11 +236,7 @@ bool CannedMessagePlugin::shouldDraw()
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return (currentMessageIndex != -1) || (this->sendingState != SENDING_STATE_NONE);
|
return (currentMessageIndex != -1) || (this->runState != CANNED_MESSAGE_RUN_STATE_INACTIVE);
|
||||||
}
|
|
||||||
cannedMessagePluginSendigState CannedMessagePlugin::getSendingState()
|
|
||||||
{
|
|
||||||
return this->sendingState;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int CannedMessagePlugin::getNextIndex()
|
int CannedMessagePlugin::getNextIndex()
|
||||||
@ -260,7 +268,13 @@ void CannedMessagePlugin::drawFrame(
|
|||||||
{
|
{
|
||||||
displayedNodeNum = 0; // Not currently showing a node pane
|
displayedNodeNum = 0; // Not currently showing a node pane
|
||||||
|
|
||||||
if (cannedMessagePlugin->getSendingState() == SENDING_STATE_NONE)
|
if (cannedMessagePlugin->runState == CANNED_MESSAGE_RUN_STATE_SENDING_ACTIVE)
|
||||||
|
{
|
||||||
|
display->setTextAlignment(TEXT_ALIGN_CENTER);
|
||||||
|
display->setFont(FONT_MEDIUM);
|
||||||
|
display->drawString(display->getWidth()/2 + x, 0 + y + 12, "Sending...");
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
display->setTextAlignment(TEXT_ALIGN_LEFT);
|
display->setTextAlignment(TEXT_ALIGN_LEFT);
|
||||||
display->setFont(FONT_SMALL);
|
display->setFont(FONT_SMALL);
|
||||||
@ -270,11 +284,5 @@ void CannedMessagePlugin::drawFrame(
|
|||||||
display->setFont(FONT_SMALL);
|
display->setFont(FONT_SMALL);
|
||||||
display->drawString(0 + x, 0 + y + 24, cannedMessagePlugin->getNextMessage());
|
display->drawString(0 + x, 0 + y + 24, cannedMessagePlugin->getNextMessage());
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
display->setTextAlignment(TEXT_ALIGN_CENTER);
|
|
||||||
display->setFont(FONT_MEDIUM);
|
|
||||||
display->drawString(display->getWidth()/2 + x, 0 + y + 12, "Sending...");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,22 +2,23 @@
|
|||||||
#include "SinglePortPlugin.h"
|
#include "SinglePortPlugin.h"
|
||||||
#include "input/InputBroker.h"
|
#include "input/InputBroker.h"
|
||||||
|
|
||||||
enum cannedMessagePluginActionType
|
enum cannedMessagePluginRunState
|
||||||
{
|
{
|
||||||
CANNED_MESSAGE_ACTION_NONE,
|
CANNED_MESSAGE_RUN_STATE_INACTIVE,
|
||||||
CANNED_MESSAGE_ACTION_SELECT,
|
CANNED_MESSAGE_RUN_STATE_ACTIVE,
|
||||||
CANNED_MESSAGE_ACTION_UP,
|
CANNED_MESSAGE_RUN_STATE_SENDING_ACTIVE,
|
||||||
CANNED_MESSAGE_ACTION_DOWN
|
CANNED_MESSAGE_RUN_STATE_ACTION_SELECT,
|
||||||
};
|
CANNED_MESSAGE_RUN_STATE_ACTION_UP,
|
||||||
|
CANNED_MESSAGE_RUN_STATE_ACTION_DOWN
|
||||||
enum cannedMessagePluginSendigState
|
|
||||||
{
|
|
||||||
SENDING_STATE_NONE,
|
|
||||||
SENDING_STATE_ACTIVE
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#define CANNED_MESSAGE_PLUGIN_MESSAGE_MAX_COUNT 50
|
#define CANNED_MESSAGE_PLUGIN_MESSAGE_MAX_COUNT 50
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
|
|
||||||
class CannedMessagePlugin :
|
class CannedMessagePlugin :
|
||||||
public SinglePortPlugin,
|
public SinglePortPlugin,
|
||||||
@ -29,11 +30,10 @@ class CannedMessagePlugin :
|
|||||||
this, &CannedMessagePlugin::handleInputEvent);
|
this, &CannedMessagePlugin::handleInputEvent);
|
||||||
public:
|
public:
|
||||||
CannedMessagePlugin();
|
CannedMessagePlugin();
|
||||||
String getCurrentMessage();
|
const char* getCurrentMessage();
|
||||||
String getPrevMessage();
|
const char* getPrevMessage();
|
||||||
String getNextMessage();
|
const char* getNextMessage();
|
||||||
bool shouldDraw();
|
bool shouldDraw();
|
||||||
cannedMessagePluginSendigState getSendingState();
|
|
||||||
void eventUp();
|
void eventUp();
|
||||||
void eventDown();
|
void eventDown();
|
||||||
void eventSelect();
|
void eventSelect();
|
||||||
@ -57,10 +57,10 @@ class CannedMessagePlugin :
|
|||||||
virtual void drawFrame(
|
virtual void drawFrame(
|
||||||
OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y);
|
OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y);
|
||||||
|
|
||||||
volatile cannedMessagePluginActionType action = CANNED_MESSAGE_ACTION_NONE;
|
|
||||||
int currentMessageIndex = -1;
|
int currentMessageIndex = -1;
|
||||||
cannedMessagePluginSendigState sendingState = SENDING_STATE_NONE;
|
cannedMessagePluginRunState runState = CANNED_MESSAGE_RUN_STATE_INACTIVE;
|
||||||
|
|
||||||
|
char messageStore[CANNED_MESSAGE_PLUGIN_MESSAGES_SIZE];
|
||||||
char *messages[CANNED_MESSAGE_PLUGIN_MESSAGE_MAX_COUNT];
|
char *messages[CANNED_MESSAGE_PLUGIN_MESSAGE_MAX_COUNT];
|
||||||
int messagesCount = 0;
|
int messagesCount = 0;
|
||||||
unsigned long lastTouchMillis = 0;
|
unsigned long lastTouchMillis = 0;
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
#define GPS_TX_PIN 13
|
#define GPS_TX_PIN 13
|
||||||
|
|
||||||
#define BATTERY_PIN 35 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
|
#define BATTERY_PIN 35 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
|
||||||
|
// ratio of voltage divider = 2.0 (R42=100k, R43=100k)
|
||||||
|
#define ADC_MULTIPLIER 2.2 // 2.0 + 10% for correction of display undervoltage.
|
||||||
|
|
||||||
#define I2C_SDA 21 // I2C pins for this board
|
#define I2C_SDA 21 // I2C pins for this board
|
||||||
#define I2C_SCL 22
|
#define I2C_SCL 22
|
||||||
@ -20,4 +22,4 @@
|
|||||||
#define LORA_DIO0 26 // a No connect on the SX1262 module
|
#define LORA_DIO0 26 // a No connect on the SX1262 module
|
||||||
#define LORA_RESET 14
|
#define LORA_RESET 14
|
||||||
#define LORA_DIO1 35 // Not really used
|
#define LORA_DIO1 35 // Not really used
|
||||||
#define LORA_DIO2 34 // Not really used
|
#define LORA_DIO2 34 // Not really used
|
||||||
|
Loading…
Reference in New Issue
Block a user