diff --git a/.github/workflows/main_matrix.yml b/.github/workflows/main_matrix.yml
index fb01f3208..13c32d783 100644
--- a/.github/workflows/main_matrix.yml
+++ b/.github/workflows/main_matrix.yml
@@ -73,6 +73,7 @@ jobs:
- board: m5stack-coreink
- board: tbeam-s3-core
- board: tlora-t3s3-v1
+ - board: nano-g1-explorer
uses: ./.github/workflows/build_esp32.yml
with:
board: ${{ matrix.board }}
@@ -92,16 +93,16 @@ jobs:
with:
board: ${{ matrix.board }}
- build-rpi2040:
- strategy:
- fail-fast: false
- max-parallel: 2
- matrix:
- include:
- - board: pico
- uses: ./.github/workflows/build_rpi2040.yml
- with:
- board: ${{ matrix.board }}
+ # build-rpi2040:
+ # strategy:
+ # fail-fast: false
+ # max-parallel: 2
+ # matrix:
+ # include:
+ # - board: pico
+ # uses: ./.github/workflows/build_rpi2040.yml
+ # with:
+ # board: ${{ matrix.board }}
build-native:
runs-on: ubuntu-latest
@@ -175,7 +176,7 @@ jobs:
gather-artifacts:
runs-on: ubuntu-latest
- needs: [build-esp32, build-nrf52, build-native, build-rpi2040]
+ needs: [build-esp32, build-nrf52, build-native] #, build-rpi2040]
steps:
- name: Checkout code
uses: actions/checkout@v3
diff --git a/protobufs b/protobufs
index cb01d7472..05f49816c 160000
--- a/protobufs
+++ b/protobufs
@@ -1 +1 @@
-Subproject commit cb01d7472fc22321652a5471155dfc6c04a612ab
+Subproject commit 05f49816cd8d7d405e052753f0aee8275cf33d36
diff --git a/src/RF95Configuration.h b/src/RF95Configuration.h
index f304aadd0..66b2dcf86 100644
--- a/src/RF95Configuration.h
+++ b/src/RF95Configuration.h
@@ -2,6 +2,6 @@
#ifdef USE_RF95
#define RF95_RESET LORA_RESET
#define RF95_IRQ LORA_DIO0 // on SX1262 version this is a no connect DIO0
-#define RF95_DIO1 LORA_DIO1 // Note: not really used for RF95
+#define RF95_DIO1 LORA_DIO1 // Note: not really used for RF95, but used for pure SX127x
#define RF95_DIO2 LORA_DIO2 // Note: not really used for RF95
#endif
\ No newline at end of file
diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp
index c5b428537..c935c354f 100644
--- a/src/graphics/Screen.cpp
+++ b/src/graphics/Screen.cpp
@@ -50,6 +50,10 @@ along with this program. If not, see .
#include "fonts/OLEDDisplayFontsRU.h"
#endif
+#ifdef OLED_UA
+#include "fonts/OLEDDisplayFontsUA.h"
+#endif
+
using namespace meshtastic; /** @todo remove */
namespace graphics
@@ -106,8 +110,12 @@ static uint16_t displayWidth, displayHeight;
#ifdef OLED_RU
#define FONT_SMALL ArialMT_Plain_10_RU
#else
+#ifdef OLED_UA
+#define FONT_SMALL ArialMT_Plain_10_UA
+#else
#define FONT_SMALL ArialMT_Plain_10 // Height: 13
#endif
+#endif
#define FONT_MEDIUM ArialMT_Plain_16 // Height: 19
#define FONT_LARGE ArialMT_Plain_24 // Height: 28
#endif
diff --git a/src/graphics/Screen.h b/src/graphics/Screen.h
index 5e92e73bb..51f3a2fe6 100644
--- a/src/graphics/Screen.h
+++ b/src/graphics/Screen.h
@@ -240,6 +240,12 @@ class Screen : public concurrency::OSThread
// library have empty chars for non-latin ASCII symbols
case 0xD0: {
SKIPREST = false;
+ if (ch == 132)
+ return (uint8_t)(170); // Є
+ if (ch == 134)
+ return (uint8_t)(178); // І
+ if (ch == 135)
+ return (uint8_t)(175); // Ї
if (ch == 129)
return (uint8_t)(168); // Ё
if (ch > 143 && ch < 192)
@@ -248,12 +254,26 @@ class Screen : public concurrency::OSThread
}
case 0xD1: {
SKIPREST = false;
+ if (ch == 148)
+ return (uint8_t)(186); // є
+ if (ch == 150)
+ return (uint8_t)(179); // і
+ if (ch == 151)
+ return (uint8_t)(191); // ї
if (ch == 145)
return (uint8_t)(184); // ё
if (ch > 127 && ch < 144)
return (uint8_t)(ch + 112);
break;
}
+ case 0xD2: {
+ SKIPREST = false;
+ if (ch == 144)
+ return (uint8_t)(165); // Ґ
+ if (ch == 145)
+ return (uint8_t)(180); // ґ
+ break;
+ }
}
// We want to strip out prefix chars for two-byte char formats
diff --git a/src/graphics/fonts/OLEDDisplayFontsUA.cpp b/src/graphics/fonts/OLEDDisplayFontsUA.cpp
new file mode 100644
index 000000000..0295ee6ba
--- /dev/null
+++ b/src/graphics/fonts/OLEDDisplayFontsUA.cpp
@@ -0,0 +1,424 @@
+#include "OLEDDisplayFontsUA.h"
+
+// Font generated or edited with the glyphEditor
+const uint8_t ArialMT_Plain_10_UA[] PROGMEM = {
+ 0x0A, // Width: 10
+ 0x0D, // Height: 13
+ 0x20, // First char: 32
+ 0xE0, // Number of chars: 224
+ // Jump Table:
+ 0xFF, 0xFF, 0x00, 0x0A, // 32
+ 0x00, 0x00, 0x04, 0x03, // 33
+ 0x00, 0x04, 0x05, 0x04, // 34
+ 0x00, 0x09, 0x09, 0x06, // 35
+ 0x00, 0x12, 0x0A, 0x06, // 36
+ 0x00, 0x1C, 0x10, 0x09, // 37
+ 0x00, 0x2C, 0x0E, 0x08, // 38
+ 0x00, 0x3A, 0x01, 0x02, // 39
+ 0x00, 0x3B, 0x06, 0x04, // 40
+ 0x00, 0x41, 0x06, 0x04, // 41
+ 0x00, 0x47, 0x05, 0x04, // 42
+ 0x00, 0x4C, 0x09, 0x06, // 43
+ 0x00, 0x55, 0x04, 0x03, // 44
+ 0x00, 0x59, 0x03, 0x03, // 45
+ 0x00, 0x5C, 0x04, 0x03, // 46
+ 0x00, 0x60, 0x05, 0x04, // 47
+ 0x00, 0x65, 0x0A, 0x06, // 48
+ 0x00, 0x6F, 0x08, 0x05, // 49
+ 0x00, 0x77, 0x0A, 0x06, // 50
+ 0x00, 0x81, 0x0A, 0x06, // 51
+ 0x00, 0x8B, 0x0B, 0x07, // 52
+ 0x00, 0x96, 0x0A, 0x06, // 53
+ 0x00, 0xA0, 0x0A, 0x06, // 54
+ 0x00, 0xAA, 0x09, 0x06, // 55
+ 0x00, 0xB3, 0x0A, 0x06, // 56
+ 0x00, 0xBD, 0x0A, 0x06, // 57
+ 0x00, 0xC7, 0x04, 0x03, // 58
+ 0x00, 0xCB, 0x04, 0x03, // 59
+ 0x00, 0xCF, 0x0A, 0x06, // 60
+ 0x00, 0xD9, 0x09, 0x06, // 61
+ 0x00, 0xE2, 0x09, 0x06, // 62
+ 0x00, 0xEB, 0x0B, 0x07, // 63
+ 0x00, 0xF6, 0x14, 0x0B, // 64
+ 0x01, 0x0A, 0x0E, 0x08, // 65
+ 0x01, 0x18, 0x0C, 0x07, // 66
+ 0x01, 0x24, 0x0C, 0x07, // 67
+ 0x01, 0x30, 0x0B, 0x07, // 68
+ 0x01, 0x3B, 0x0C, 0x07, // 69
+ 0x01, 0x47, 0x09, 0x06, // 70
+ 0x01, 0x50, 0x0D, 0x08, // 71
+ 0x01, 0x5D, 0x0C, 0x07, // 72
+ 0x01, 0x69, 0x04, 0x03, // 73
+ 0x01, 0x6D, 0x08, 0x05, // 74
+ 0x01, 0x75, 0x0E, 0x08, // 75
+ 0x01, 0x83, 0x0C, 0x07, // 76
+ 0x01, 0x8F, 0x10, 0x09, // 77
+ 0x01, 0x9F, 0x0C, 0x07, // 78
+ 0x01, 0xAB, 0x0E, 0x08, // 79
+ 0x01, 0xB9, 0x0B, 0x07, // 80
+ 0x01, 0xC4, 0x0E, 0x08, // 81
+ 0x01, 0xD2, 0x0C, 0x07, // 82
+ 0x01, 0xDE, 0x0C, 0x07, // 83
+ 0x01, 0xEA, 0x0B, 0x07, // 84
+ 0x01, 0xF5, 0x0C, 0x07, // 85
+ 0x02, 0x01, 0x0D, 0x08, // 86
+ 0x02, 0x0E, 0x11, 0x0A, // 87
+ 0x02, 0x1F, 0x0E, 0x08, // 88
+ 0x02, 0x2D, 0x0D, 0x08, // 89
+ 0x02, 0x3A, 0x0C, 0x07, // 90
+ 0x02, 0x46, 0x06, 0x04, // 91
+ 0x02, 0x4C, 0x06, 0x04, // 92
+ 0x02, 0x52, 0x04, 0x03, // 93
+ 0x02, 0x56, 0x09, 0x06, // 94
+ 0x02, 0x5F, 0x0C, 0x07, // 95
+ 0x02, 0x6B, 0x03, 0x03, // 96
+ 0x02, 0x6E, 0x0A, 0x06, // 97
+ 0x02, 0x78, 0x0A, 0x06, // 98
+ 0x02, 0x82, 0x0A, 0x06, // 99
+ 0x02, 0x8C, 0x0A, 0x06, // 100
+ 0x02, 0x96, 0x0A, 0x06, // 101
+ 0x02, 0xA0, 0x05, 0x04, // 102
+ 0x02, 0xA5, 0x0A, 0x06, // 103
+ 0x02, 0xAF, 0x0A, 0x06, // 104
+ 0x02, 0xB9, 0x04, 0x03, // 105
+ 0x02, 0xBD, 0x04, 0x03, // 106
+ 0x02, 0xC1, 0x08, 0x05, // 107
+ 0x02, 0xC9, 0x04, 0x03, // 108
+ 0x02, 0xCD, 0x10, 0x09, // 109
+ 0x02, 0xDD, 0x0A, 0x06, // 110
+ 0x02, 0xE7, 0x0A, 0x06, // 111
+ 0x02, 0xF1, 0x0A, 0x06, // 112
+ 0x02, 0xFB, 0x0A, 0x06, // 113
+ 0x03, 0x05, 0x05, 0x04, // 114
+ 0x03, 0x0A, 0x08, 0x05, // 115
+ 0x03, 0x12, 0x06, 0x04, // 116
+ 0x03, 0x18, 0x0A, 0x06, // 117
+ 0x03, 0x22, 0x09, 0x06, // 118
+ 0x03, 0x2B, 0x0E, 0x08, // 119
+ 0x03, 0x39, 0x0A, 0x06, // 120
+ 0x03, 0x43, 0x09, 0x06, // 121
+ 0x03, 0x4C, 0x0A, 0x06, // 122
+ 0x03, 0x56, 0x06, 0x04, // 123
+ 0x03, 0x5C, 0x04, 0x03, // 124
+ 0x03, 0x60, 0x05, 0x04, // 125
+ 0x03, 0x65, 0x09, 0x06, // 126
+ 0xFF, 0xFF, 0x00, 0x0A, // 127
+ 0xFF, 0xFF, 0x00, 0x0A, // 128
+ 0xFF, 0xFF, 0x00, 0x0A, // 129
+ 0xFF, 0xFF, 0x00, 0x0A, // 130
+ 0xFF, 0xFF, 0x00, 0x0A, // 131
+ 0xFF, 0xFF, 0x00, 0x0A, // 132
+ 0xFF, 0xFF, 0x00, 0x0A, // 133
+ 0xFF, 0xFF, 0x00, 0x0A, // 134
+ 0xFF, 0xFF, 0x00, 0x0A, // 135
+ 0xFF, 0xFF, 0x00, 0x0A, // 136
+ 0xFF, 0xFF, 0x00, 0x0A, // 137
+ 0xFF, 0xFF, 0x00, 0x0A, // 138
+ 0xFF, 0xFF, 0x00, 0x0A, // 139
+ 0xFF, 0xFF, 0x00, 0x0A, // 140
+ 0xFF, 0xFF, 0x00, 0x0A, // 141
+ 0xFF, 0xFF, 0x00, 0x0A, // 142
+ 0xFF, 0xFF, 0x00, 0x0A, // 143
+ 0xFF, 0xFF, 0x00, 0x0A, // 144
+ 0xFF, 0xFF, 0x00, 0x0A, // 145
+ 0xFF, 0xFF, 0x00, 0x0A, // 146
+ 0xFF, 0xFF, 0x00, 0x0A, // 147
+ 0xFF, 0xFF, 0x00, 0x0A, // 148
+ 0xFF, 0xFF, 0x00, 0x0A, // 149
+ 0xFF, 0xFF, 0x00, 0x0A, // 150
+ 0xFF, 0xFF, 0x00, 0x0A, // 151
+ 0xFF, 0xFF, 0x00, 0x0A, // 152
+ 0xFF, 0xFF, 0x00, 0x0A, // 153
+ 0xFF, 0xFF, 0x00, 0x0A, // 154
+ 0xFF, 0xFF, 0x00, 0x0A, // 155
+ 0xFF, 0xFF, 0x00, 0x0A, // 156
+ 0xFF, 0xFF, 0x00, 0x0A, // 157
+ 0xFF, 0xFF, 0x00, 0x0A, // 158
+ 0xFF, 0xFF, 0x00, 0x0A, // 159
+ 0xFF, 0xFF, 0x00, 0x0A, // 160
+ 0x03, 0x6E, 0x04, 0x03, // 161
+ 0x03, 0x72, 0x0A, 0x06, // 162
+ 0x03, 0x7C, 0x0C, 0x07, // 163
+ 0x03, 0x88, 0x0A, 0x06, // 164
+ 0x03, 0x92, 0x09, 0x06, // 165
+ 0x03, 0x9B, 0x04, 0x03, // 166
+ 0x03, 0x9F, 0x0A, 0x06, // 167
+ 0x03, 0xA9, 0x0C, 0x07, // 168
+ 0x03, 0xB5, 0x0D, 0x08, // 169
+ 0x03, 0xC2, 0x0C, 0x07, // 170
+ 0x03, 0xCE, 0x0A, 0x06, // 171
+ 0x03, 0xD8, 0x09, 0x06, // 172
+ 0x03, 0xE1, 0x03, 0x03, // 173
+ 0x03, 0xE4, 0x0D, 0x08, // 174
+ 0x03, 0xF1, 0x0C, 0x07, // 175
+ 0x03, 0xFD, 0x07, 0x05, // 176
+ 0x04, 0x04, 0x0A, 0x06, // 177
+ 0x04, 0x0E, 0x0C, 0x07, // 178
+ 0x04, 0x1A, 0x0C, 0x07, // 179
+ 0x04, 0x26, 0x07, 0x05, // 180
+ 0x04, 0x2D, 0x0A, 0x06, // 181
+ 0x04, 0x37, 0x09, 0x06, // 182
+ 0x04, 0x40, 0x03, 0x03, // 183
+ 0x04, 0x43, 0x0B, 0x07, // 184
+ 0x04, 0x4E, 0x0B, 0x07, // 185
+ 0x04, 0x59, 0x0C, 0x07, // 186
+ 0x04, 0x65, 0x0A, 0x06, // 187
+ 0x04, 0x6F, 0x10, 0x09, // 188
+ 0x04, 0x7F, 0x10, 0x09, // 189
+ 0x04, 0x8F, 0x10, 0x09, // 190
+ 0x04, 0x9F, 0x0A, 0x06, // 191
+ 0x04, 0xA9, 0x0C, 0x07, // 192
+ 0x04, 0xB5, 0x0C, 0x07, // 193
+ 0x04, 0xC1, 0x0C, 0x07, // 194
+ 0x04, 0xCD, 0x0B, 0x07, // 195
+ 0x04, 0xD8, 0x0C, 0x07, // 196
+ 0x04, 0xE4, 0x0C, 0x07, // 197
+ 0x04, 0xF0, 0x0C, 0x07, // 198
+ 0x04, 0xFC, 0x0C, 0x07, // 199
+ 0x05, 0x08, 0x0C, 0x07, // 200
+ 0x05, 0x14, 0x0C, 0x07, // 201
+ 0x05, 0x20, 0x0C, 0x07, // 202
+ 0x05, 0x2C, 0x0C, 0x07, // 203
+ 0x05, 0x38, 0x0C, 0x07, // 204
+ 0x05, 0x44, 0x0C, 0x07, // 205
+ 0x05, 0x50, 0x0C, 0x07, // 206
+ 0x05, 0x5C, 0x0C, 0x07, // 207
+ 0x05, 0x68, 0x0B, 0x07, // 208
+ 0x05, 0x73, 0x0C, 0x07, // 209
+ 0x05, 0x7F, 0x0B, 0x07, // 210
+ 0x05, 0x8A, 0x0C, 0x07, // 211
+ 0x05, 0x96, 0x0B, 0x07, // 212
+ 0x05, 0xA1, 0x0C, 0x07, // 213
+ 0x05, 0xAD, 0x0C, 0x07, // 214
+ 0x05, 0xB9, 0x0C, 0x07, // 215
+ 0x05, 0xC5, 0x0C, 0x07, // 216
+ 0x05, 0xD1, 0x0E, 0x08, // 217
+ 0x05, 0xDF, 0x0C, 0x07, // 218
+ 0x05, 0xEB, 0x0C, 0x07, // 219
+ 0x05, 0xF7, 0x0C, 0x07, // 220
+ 0x06, 0x03, 0x0C, 0x07, // 221
+ 0x06, 0x0F, 0x0C, 0x07, // 222
+ 0x06, 0x1B, 0x0C, 0x07, // 223
+ 0x06, 0x27, 0x0C, 0x07, // 224
+ 0x06, 0x33, 0x0C, 0x07, // 225
+ 0x06, 0x3F, 0x0C, 0x07, // 226
+ 0x06, 0x4B, 0x0B, 0x07, // 227
+ 0x06, 0x56, 0x0C, 0x07, // 228
+ 0x06, 0x62, 0x0B, 0x07, // 229
+ 0x06, 0x6D, 0x0C, 0x07, // 230
+ 0x06, 0x79, 0x0C, 0x07, // 231
+ 0x06, 0x85, 0x0C, 0x07, // 232
+ 0x06, 0x91, 0x0C, 0x07, // 233
+ 0x06, 0x9D, 0x0C, 0x07, // 234
+ 0x06, 0xA9, 0x0C, 0x07, // 235
+ 0x06, 0xB5, 0x0C, 0x07, // 236
+ 0x06, 0xC1, 0x0C, 0x07, // 237
+ 0x06, 0xCD, 0x0C, 0x07, // 238
+ 0x06, 0xD9, 0x0C, 0x07, // 239
+ 0x06, 0xE5, 0x0B, 0x07, // 240
+ 0x06, 0xF0, 0x0C, 0x07, // 241
+ 0x06, 0xFC, 0x0B, 0x07, // 242
+ 0x07, 0x07, 0x0C, 0x07, // 243
+ 0x07, 0x13, 0x0B, 0x07, // 244
+ 0x07, 0x1E, 0x0C, 0x07, // 245
+ 0x07, 0x2A, 0x0C, 0x07, // 246
+ 0x07, 0x36, 0x0C, 0x07, // 247
+ 0x07, 0x42, 0x0C, 0x07, // 248
+ 0x07, 0x4E, 0x0E, 0x08, // 249
+ 0x07, 0x5C, 0x0C, 0x07, // 250
+ 0x07, 0x68, 0x0C, 0x07, // 251
+ 0x07, 0x74, 0x0C, 0x07, // 252
+ 0x07, 0x80, 0x0C, 0x07, // 253
+ 0x07, 0x8C, 0x0C, 0x07, // 254
+ 0x07, 0x98, 0x0C, 0x07, // 255
+ // 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
+ 0x00, 0x00, 0xF8, 0x03, 0x08, 0x00, 0x08, 0x00, 0x0C, // 165
+ 0x00, 0x00, 0x38, 0x0F, // 166
+ 0xD0, 0x04, 0x28, 0x09, 0x48, 0x09, 0x48, 0x0A, 0x90, 0x05, // 167
+ 0x00, 0x00, 0xE0, 0x03, 0xA8, 0x02, 0xA0, 0x02, 0xA8, 0x02, 0x20, 0x02, // 168
+ 0xE0, 0x00, 0x10, 0x01, 0x48, 0x02, 0xA8, 0x02, 0xA8, 0x02, 0x10, 0x01, 0xE0, // 169
+ 0x00, 0x00, 0xF0, 0x01, 0x58, 0x03, 0x48, 0x02, 0x08, 0x02, 0x10, 0x01, // 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
+ 0x00, 0x00, 0x08, 0x02, 0x0A, 0x02, 0xF8, 0x03, 0x0A, 0x02, 0x08, 0x02, // 175
+ 0x00, 0x00, 0x38, 0x00, 0x28, 0x00, 0x38, // 176
+ 0x40, 0x02, 0x40, 0x02, 0xF0, 0x03, 0x40, 0x02, 0x40, 0x02, // 177
+ 0x00, 0x00, 0x08, 0x02, 0x08, 0x02, 0xF8, 0x03, 0x08, 0x02, 0x08, 0x02, // 178
+ 0x00, 0x00, 0x20, 0x02, 0x20, 0x02, 0xE8, 0x03, 0x20, 0x02, 0x20, 0x02, // 179
+ 0x00, 0x00, 0xE0, 0x03, 0x20, 0x00, 0x30, // 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, 0xC0, 0x01, 0xA8, 0x02, 0xA0, 0x02, 0xA8, 0x02, 0xC0, // 184
+ 0x00, 0x00, 0xF0, 0x03, 0x40, 0x00, 0x80, 0x00, 0xF8, 0x03, 0x08, // 185
+ 0x00, 0x00, 0xE0, 0x01, 0x50, 0x02, 0x50, 0x02, 0x10, 0x02, 0x20, 0x01, // 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, 0x00, 0x28, 0x02, 0xE0, 0x03, 0x28, 0x02, // 191
+ 0x00, 0x00, 0xF0, 0x03, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0xF0, 0x03, // 192
+ 0x00, 0x00, 0xF8, 0x03, 0x48, 0x02, 0x48, 0x02, 0x48, 0x02, 0x88, 0x01, // 193
+ 0x00, 0x00, 0xF8, 0x03, 0x48, 0x02, 0x48, 0x02, 0x48, 0x02, 0xB0, 0x01, // 194
+ 0x00, 0x00, 0xF8, 0x03, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x18, // 195
+ 0x00, 0x00, 0x00, 0x02, 0xFC, 0x03, 0x04, 0x02, 0xFC, 0x03, 0x00, 0x02, // 196
+ 0x00, 0x00, 0xF8, 0x03, 0x48, 0x02, 0x48, 0x02, 0x48, 0x02, 0x08, 0x02, // 197
+ 0x00, 0x00, 0xB8, 0x03, 0x40, 0x00, 0xF8, 0x03, 0x40, 0x00, 0xB8, 0x03, // 198
+ 0x00, 0x00, 0x08, 0x02, 0x48, 0x02, 0x48, 0x02, 0x48, 0x02, 0xB0, 0x01, // 199
+ 0x00, 0x00, 0xF8, 0x03, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0xF8, 0x03, // 200
+ 0x00, 0x00, 0xE0, 0x03, 0x08, 0x01, 0x90, 0x00, 0x48, 0x00, 0xE0, 0x03, // 201
+ 0x00, 0x00, 0xF8, 0x03, 0x40, 0x00, 0xA0, 0x00, 0x10, 0x01, 0x08, 0x02, // 202
+ 0x00, 0x00, 0x00, 0x02, 0xF0, 0x01, 0x08, 0x00, 0x08, 0x00, 0xF8, 0x03, // 203
+ 0x00, 0x00, 0xF8, 0x03, 0x10, 0x00, 0x60, 0x00, 0x10, 0x00, 0xF8, 0x03, // 204
+ 0x00, 0x00, 0xF8, 0x03, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0xF8, 0x03, // 205
+ 0x00, 0x00, 0xF0, 0x01, 0x08, 0x02, 0x08, 0x02, 0x08, 0x02, 0xF0, 0x01, // 206
+ 0x00, 0x00, 0xF8, 0x03, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0xF8, 0x03, // 207
+ 0x00, 0x00, 0xF8, 0x03, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x30, // 208
+ 0x00, 0x00, 0xF0, 0x01, 0x08, 0x02, 0x08, 0x02, 0x08, 0x02, 0x10, 0x01, // 209
+ 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0xF8, 0x03, 0x08, 0x00, 0x08, // 210
+ 0x00, 0x00, 0x38, 0x00, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0xF8, 0x01, // 211
+ 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, 0xF8, 0x03, 0x88, 0x00, 0x70, // 212
+ 0x00, 0x00, 0x18, 0x03, 0xA0, 0x00, 0x40, 0x00, 0xA0, 0x00, 0x18, 0x03, // 213
+ 0x00, 0x00, 0xF8, 0x03, 0x00, 0x02, 0x00, 0x02, 0xF8, 0x03, 0x00, 0x02, // 214
+ 0x00, 0x00, 0x38, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0xF8, 0x03, // 215
+ 0x00, 0x00, 0xF8, 0x03, 0x00, 0x02, 0xF8, 0x03, 0x00, 0x02, 0xF8, 0x03, // 216
+ 0x00, 0x00, 0xF8, 0x03, 0x00, 0x02, 0xF8, 0x03, 0x00, 0x02, 0xF8, 0x03, 0x00, 0x06, // 217
+ 0x00, 0x00, 0x08, 0x00, 0xF8, 0x03, 0x40, 0x02, 0x40, 0x02, 0x80, 0x01, // 218
+ 0x00, 0x00, 0xF8, 0x03, 0x40, 0x02, 0x40, 0x02, 0x80, 0x01, 0xF8, 0x03, // 219
+ 0x00, 0x00, 0xF8, 0x03, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x80, 0x01, // 220
+ 0x00, 0x00, 0x10, 0x01, 0x08, 0x02, 0x48, 0x02, 0x48, 0x02, 0xF0, 0x01, // 221
+ 0x00, 0x00, 0xF8, 0x03, 0x40, 0x00, 0xF0, 0x01, 0x08, 0x02, 0xF0, 0x01, // 222
+ 0x00, 0x00, 0x30, 0x02, 0x48, 0x01, 0xC8, 0x00, 0x48, 0x00, 0xF8, 0x03, // 223
+ 0x00, 0x00, 0x00, 0x01, 0xA0, 0x02, 0xA0, 0x02, 0xA0, 0x02, 0xC0, 0x03, // 224
+ 0x00, 0x00, 0xE0, 0x01, 0x50, 0x02, 0x50, 0x02, 0x48, 0x02, 0x88, 0x01, // 225
+ 0x00, 0x00, 0xE0, 0x03, 0xA0, 0x02, 0xA0, 0x02, 0xA0, 0x02, 0x40, 0x01, // 226
+ 0x00, 0x00, 0xE0, 0x03, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, // 227
+ 0x00, 0x00, 0x00, 0x02, 0xC0, 0x03, 0x20, 0x02, 0xE0, 0x03, 0x00, 0x02, // 228
+ 0x00, 0x00, 0xC0, 0x01, 0xA0, 0x02, 0xA0, 0x02, 0xA0, 0x02, 0xC0, // 229
+ 0x00, 0x00, 0x60, 0x03, 0x80, 0x00, 0xE0, 0x03, 0x80, 0x00, 0x60, 0x03, // 230
+ 0x00, 0x00, 0x20, 0x02, 0xA0, 0x02, 0xA0, 0x02, 0xA0, 0x02, 0x40, 0x01, // 231
+ 0x00, 0x00, 0xE0, 0x03, 0x00, 0x01, 0x80, 0x00, 0x40, 0x00, 0xE0, 0x03, // 232
+ 0x00, 0x00, 0xE0, 0x03, 0x00, 0x01, 0x98, 0x00, 0x40, 0x00, 0xE0, 0x03, // 233
+ 0x00, 0x00, 0xE0, 0x03, 0x80, 0x00, 0x80, 0x00, 0x40, 0x01, 0x20, 0x02, // 234
+ 0x00, 0x00, 0x00, 0x02, 0xC0, 0x01, 0x20, 0x00, 0x20, 0x00, 0xE0, 0x03, // 235
+ 0x00, 0x00, 0xE0, 0x03, 0x40, 0x00, 0x80, 0x00, 0x40, 0x00, 0xE0, 0x03, // 236
+ 0x00, 0x00, 0xE0, 0x03, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0xE0, 0x03, // 237
+ 0x00, 0x00, 0xC0, 0x01, 0x20, 0x02, 0x20, 0x02, 0x20, 0x02, 0xC0, 0x01, // 238
+ 0x00, 0x00, 0xE0, 0x03, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0xE0, 0x03, // 239
+ 0x00, 0x00, 0xE0, 0x03, 0xA0, 0x00, 0xA0, 0x00, 0xA0, 0x00, 0x40, // 240
+ 0x00, 0x00, 0xC0, 0x01, 0x20, 0x02, 0x20, 0x02, 0x20, 0x02, 0x40, 0x02, // 241
+ 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0xE0, 0x03, 0x20, 0x00, 0x20, // 242
+ 0x00, 0x00, 0x60, 0x00, 0x80, 0x02, 0x80, 0x02, 0x80, 0x02, 0xE0, 0x01, // 243
+ 0x00, 0x00, 0xC0, 0x00, 0x20, 0x01, 0xE0, 0x03, 0x20, 0x01, 0xC0, // 244
+ 0x00, 0x00, 0x20, 0x02, 0x40, 0x01, 0x80, 0x00, 0x40, 0x01, 0x20, 0x02, // 245
+ 0x00, 0x00, 0xE0, 0x03, 0x00, 0x02, 0x00, 0x02, 0xE0, 0x03, 0x00, 0x02, // 246
+ 0x00, 0x00, 0x60, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0xE0, 0x03, // 247
+ 0x00, 0x00, 0xE0, 0x03, 0x00, 0x02, 0xE0, 0x03, 0x00, 0x02, 0xE0, 0x03, // 248
+ 0x00, 0x00, 0xE0, 0x03, 0x00, 0x02, 0xE0, 0x03, 0x00, 0x02, 0xE0, 0x03, 0x00, 0x06, // 249
+ 0x00, 0x00, 0x20, 0x00, 0xE0, 0x03, 0x80, 0x02, 0x80, 0x02, 0x00, 0x01, // 250
+ 0x00, 0x00, 0xE0, 0x03, 0x80, 0x02, 0x80, 0x02, 0x00, 0x01, 0xE0, 0x03, // 251
+ 0x00, 0x00, 0xE0, 0x03, 0x80, 0x02, 0x80, 0x02, 0x80, 0x02, 0x00, 0x01, // 252
+ 0x00, 0x00, 0x40, 0x01, 0x20, 0x02, 0xA0, 0x02, 0xA0, 0x02, 0xC0, 0x01, // 253
+ 0x00, 0x00, 0xE0, 0x03, 0x80, 0x00, 0xC0, 0x01, 0x20, 0x02, 0xC0, 0x01, // 254
+ 0x00, 0x00, 0x40, 0x02, 0xA0, 0x01, 0xA0, 0x00, 0xA0, 0x00, 0xE0, 0x03, // 255
+};
\ No newline at end of file
diff --git a/src/graphics/fonts/OLEDDisplayFontsUA.h b/src/graphics/fonts/OLEDDisplayFontsUA.h
new file mode 100644
index 000000000..3bd9bb4ca
--- /dev/null
+++ b/src/graphics/fonts/OLEDDisplayFontsUA.h
@@ -0,0 +1,11 @@
+#ifndef OLEDDISPLAYFONTSUA_h
+#define OLEDDISPLAYFONTSUA_h
+
+#ifdef ARDUINO
+#include
+#elif __MBED__
+#define PROGMEM
+#endif
+
+extern const uint8_t ArialMT_Plain_10_UA[] PROGMEM;
+#endif
\ No newline at end of file
diff --git a/src/main.cpp b/src/main.cpp
index 24b1767dc..e2e39ebd2 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -409,7 +409,7 @@ void setup()
#if defined(RF95_IRQ)
if (!rIf) {
- rIf = new RF95Interface(RF95_NSS, RF95_IRQ, RF95_RESET, SPI);
+ rIf = new RF95Interface(RF95_NSS, RF95_IRQ, RF95_RESET, RF95_DIO1, SPI);
if (!rIf->init()) {
LOG_WARN("Failed to find RF95 radio\n");
delete rIf;
diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp
index 5c28f5261..9702fb5f2 100644
--- a/src/mesh/NodeDB.cpp
+++ b/src/mesh/NodeDB.cpp
@@ -235,11 +235,6 @@ void NodeDB::installRoleDefaults(meshtastic_Config_DeviceConfig_Role role)
initModuleConfigIntervals();
} else if (role == meshtastic_Config_DeviceConfig_Role_REPEATER) {
config.display.screen_on_secs = 1;
- meshtastic_Channel &ch = channels.getByIndex(channels.getPrimaryIndex());
- meshtastic_ChannelSettings &channelSettings = ch.settings;
- uint8_t defaultpskIndex = 1;
- channelSettings.psk.bytes[0] = defaultpskIndex;
- channelSettings.psk.size = 1;
} else if (role == meshtastic_Config_DeviceConfig_Role_TRACKER) {
config.position.position_broadcast_smart_enabled = false;
config.position.position_broadcast_secs = 120;
diff --git a/src/mesh/RF95Interface.cpp b/src/mesh/RF95Interface.cpp
index 7c2eb553f..27bbe927a 100644
--- a/src/mesh/RF95Interface.cpp
+++ b/src/mesh/RF95Interface.cpp
@@ -11,8 +11,9 @@
#define POWER_DEFAULT 17 // How much power to use if the user hasn't set a power level
-RF95Interface::RF95Interface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, SPIClass &spi)
- : RadioLibInterface(cs, irq, rst, RADIOLIB_NC, spi)
+RF95Interface::RF95Interface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy,
+ SPIClass &spi)
+ : RadioLibInterface(cs, irq, rst, busy, spi)
{
LOG_WARN("RF95Interface(cs=%d, irq=%d, rst=%d)\n", cs, irq, rst);
}
diff --git a/src/mesh/RF95Interface.h b/src/mesh/RF95Interface.h
index 9851020d9..96c3f2476 100644
--- a/src/mesh/RF95Interface.h
+++ b/src/mesh/RF95Interface.h
@@ -12,7 +12,7 @@ class RF95Interface : public RadioLibInterface
RadioLibRF95 *lora = NULL; // Either a RFM95 or RFM96 depending on what was stuffed on this board
public:
- RF95Interface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, SPIClass &spi);
+ RF95Interface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy, SPIClass &spi);
// TODO: Verify that this irq flag works with RFM95 / SX1276 radios the way it used to
bool isIRQPending() override { return lora->getIRQFlags() & RADIOLIB_SX127X_MASK_IRQ_FLAG_VALID_HEADER; }
diff --git a/src/mesh/RadioLibInterface.cpp b/src/mesh/RadioLibInterface.cpp
index ef69f722c..c624bc168 100644
--- a/src/mesh/RadioLibInterface.cpp
+++ b/src/mesh/RadioLibInterface.cpp
@@ -218,8 +218,9 @@ void RadioLibInterface::onNotify(uint32_t notification)
setTransmitDelay(); // currently Rx/Tx-ing: reset random delay
} else {
if (isChannelActive()) { // check if there is currently a LoRa packet on the channel
- // LOG_DEBUG("Channel is active: set random delay\n");
- setTransmitDelay(); // reset random delay
+ // LOG_DEBUG("Channel is active, try receiving first.\n");
+ startReceive(); // try receiving this packet, afterwards we'll be trying to transmit again
+ setTransmitDelay();
} else {
// Send any outgoing packets we have ready
meshtastic_MeshPacket *txp = txQueue.dequeue();
@@ -388,8 +389,6 @@ void RadioLibInterface::startSend(meshtastic_MeshPacket *txp)
LOG_WARN("startSend is dropping tx packet because we are disabled\n");
packetPool.release(txp);
} else {
- setStandby(); // Cancel any already in process receives
-
configHardwareForSend(); // must be after setStandby
size_t numbytes = beginSending(txp);
diff --git a/src/mesh/ReliableRouter.cpp b/src/mesh/ReliableRouter.cpp
index 8000926f3..3d07ff77e 100644
--- a/src/mesh/ReliableRouter.cpp
+++ b/src/mesh/ReliableRouter.cpp
@@ -148,7 +148,11 @@ bool ReliableRouter::stopRetransmission(GlobalPacketId key)
if (old) {
auto numErased = pending.erase(key);
assert(numErased == 1);
+ // remove the 'original' (identified by originator and packet->id) from the txqueue and free it
cancelSending(getFrom(old->packet), old->packet->id);
+ // now free the pooled copy for retransmission too. tryfix for #2228
+ if (old->packet)
+ packetPool.release(old->packet);
return true;
} else
return false;
diff --git a/src/mesh/SX126xInterface.cpp b/src/mesh/SX126xInterface.cpp
index 8cd735da5..1036042eb 100644
--- a/src/mesh/SX126xInterface.cpp
+++ b/src/mesh/SX126xInterface.cpp
@@ -232,7 +232,7 @@ template bool SX126xInterface::isChannelActive()
setStandby();
result = lora.scanChannel();
- if (result == RADIOLIB_PREAMBLE_DETECTED)
+ if (result == RADIOLIB_LORA_DETECTED)
return true;
assert(result != RADIOLIB_ERR_WRONG_MODEM);
diff --git a/src/mesh/SX128xInterface.cpp b/src/mesh/SX128xInterface.cpp
index c984d9f05..19001a0de 100644
--- a/src/mesh/SX128xInterface.cpp
+++ b/src/mesh/SX128xInterface.cpp
@@ -222,7 +222,7 @@ template bool SX128xInterface::isChannelActive()
setStandby();
result = lora.scanChannel();
- if (result == RADIOLIB_PREAMBLE_DETECTED)
+ if (result == RADIOLIB_LORA_DETECTED)
return true;
assert(result != RADIOLIB_ERR_WRONG_MODEM);
diff --git a/src/mesh/generated/meshtastic/mesh.pb.h b/src/mesh/generated/meshtastic/mesh.pb.h
index 25e5fbf05..1f9804749 100644
--- a/src/mesh/generated/meshtastic/mesh.pb.h
+++ b/src/mesh/generated/meshtastic/mesh.pb.h
@@ -57,9 +57,13 @@ typedef enum _meshtastic_HardwareModel {
meshtastic_HardwareModel_TLORA_V2_1_1P8 = 15,
/* TODO: REPLACE */
meshtastic_HardwareModel_TLORA_T3_S3 = 16,
+ /* B&Q Consulting Nano G1 Explorer: https://wiki.uniteng.com/en/meshtastic/nano-g1-explorer */
+ meshtastic_HardwareModel_NANO_G1_EXPLORER = 17,
/* B&Q Consulting Station Edition G1: https://uniteng.com/wiki/doku.php?id=meshtastic:station */
meshtastic_HardwareModel_STATION_G1 = 25,
- /* Less common/prototype boards listed here (needs one more byte over the air) */
+ /* ---------------------------------------------------------------------------
+ Less common/prototype boards listed here (needs one more byte over the air)
+ --------------------------------------------------------------------------- */
meshtastic_HardwareModel_LORA_RELAY_V1 = 32,
/* TODO: REPLACE */
meshtastic_HardwareModel_NRF52840DK = 33,
@@ -89,9 +93,9 @@ typedef enum _meshtastic_HardwareModel {
meshtastic_HardwareModel_BETAFPV_2400_TX = 45,
/* BetaFPV ExpressLRS "Nano" TX Module 900MHz with ESP32 CPU */
meshtastic_HardwareModel_BETAFPV_900_NANO_TX = 46,
- /* B&Q Consulting Nano G1 Explorer: https://wiki.uniteng.com/en/meshtastic/nano-g1-explorer */
- meshtastic_HardwareModel_NANO_G1_EXPLORER = 47,
- /* Reserved ID For developing private Ports. These will show up in live traffic sparsely, so we can use a high number. Keep it within 8 bits. */
+ /* ------------------------------------------------------------------------------------------------------------------------------------------
+ Reserved ID For developing private Ports. These will show up in live traffic sparsely, so we can use a high number. Keep it within 8 bits.
+ ------------------------------------------------------------------------------------------------------------------------------------------ */
meshtastic_HardwareModel_PRIVATE_HW = 255
} meshtastic_HardwareModel;
diff --git a/src/platform/esp32/architecture.h b/src/platform/esp32/architecture.h
index 90c016dae..edd16ebbd 100644
--- a/src/platform/esp32/architecture.h
+++ b/src/platform/esp32/architecture.h
@@ -95,6 +95,8 @@
#define HW_VENDOR meshtastic_HardwareModel_TLORA_T3_S3
#elif defined(BETAFPV_2400_TX)
#define HW_VENDOR meshtastic_HardwareModel_BETAFPV_2400_TX
+#elif defined(NANO_G1_EXPLORER)
+#define HW_VENDOR meshtastic_HardwareModel_NANO_G1_EXPLORER
#endif
//
diff --git a/variants/heltec_v1/variant.h b/variants/heltec_v1/variant.h
index 50a786623..948f6ff1e 100644
--- a/variants/heltec_v1/variant.h
+++ b/variants/heltec_v1/variant.h
@@ -20,8 +20,8 @@
#ifndef USE_JTAG
#define LORA_RESET 14
#endif
-#define LORA_DIO1 35 // Not really used
-#define LORA_DIO2 34 // Not really used
+#define LORA_DIO1 RADIOLIB_NC
+#define LORA_DIO2 32 // Not really used
// ratio of voltage divider = 3.20 (R1=100k, R2=220k)
#define ADC_MULTIPLIER 3.2
diff --git a/variants/heltec_v2.1/variant.h b/variants/heltec_v2.1/variant.h
index 884ad83d6..39a0e677f 100644
--- a/variants/heltec_v2.1/variant.h
+++ b/variants/heltec_v2.1/variant.h
@@ -24,7 +24,7 @@
#ifndef USE_JTAG
#define LORA_RESET 14
#endif
-#define LORA_DIO1 35 // Not really used
+#define LORA_DIO1 35 // https://www.thethingsnetwork.org/forum/t/big-esp32-sx127x-topic-part-3/18436
#define LORA_DIO2 34 // Not really used
#define ADC_MULTIPLIER 3.8
diff --git a/variants/heltec_v2/variant.h b/variants/heltec_v2/variant.h
index 893ee320f..59e0c76e6 100644
--- a/variants/heltec_v2/variant.h
+++ b/variants/heltec_v2/variant.h
@@ -21,7 +21,7 @@
#ifndef USE_JTAG
#define LORA_RESET 14
#endif
-#define LORA_DIO1 35 // Not really used
+#define LORA_DIO1 35 // https://www.thethingsnetwork.org/forum/t/big-esp32-sx127x-topic-part-3/18436
#define LORA_DIO2 34 // Not really used
// ratio of voltage divider = 3.20 (R12=100k, R10=220k)
diff --git a/variants/nano-g1-explorer/platformio.ini b/variants/nano-g1-explorer/platformio.ini
new file mode 100644
index 000000000..22037cbc9
--- /dev/null
+++ b/variants/nano-g1-explorer/platformio.ini
@@ -0,0 +1,8 @@
+; The 1.0 release of the nano-g1-explorer board
+[env:nano-g1-explorer]
+extends = esp32_base
+board = ttgo-t-beam
+lib_deps =
+ ${esp32_base.lib_deps}
+build_flags =
+ ${esp32_base.build_flags} -D NANO_G1_EXPLORER -I variants/nano-g1-explorer
\ No newline at end of file
diff --git a/variants/nano-g1-explorer/variant.h b/variants/nano-g1-explorer/variant.h
new file mode 100644
index 000000000..df8a0aad9
--- /dev/null
+++ b/variants/nano-g1-explorer/variant.h
@@ -0,0 +1,37 @@
+// #define BUTTON_NEED_PULLUP // if set we need to turn on the internal CPU pullup during sleep
+
+#define I2C_SDA 21
+#define I2C_SCL 22
+
+#define BUTTON_PIN 36 // The user button (information button) GPIO on the Nano G1 explorer
+//#define BUTTON_PIN_ALT 13 // Alternate GPIO for an external button if needed. Does anyone use this? It is not documented
+// anywhere.
+#define EXT_NOTIFY_OUT 13 // Default pin to use for Ext Notify Module.
+
+// common pinout for their SX1262 vs RF95 modules - both can be enabled and we will probe at runtime for RF95 and if
+// not found then probe for SX1262
+#define USE_RF95
+#define USE_SX1262
+
+#define LORA_DIO0 26 // a No connect on the SX1262 module
+#define LORA_RESET 23
+#define LORA_DIO1 33 // SX1262 IRQ
+#define LORA_DIO2 32 // SX1262 BUSY
+#define LORA_DIO3 // Not connected on PCB
+
+#ifdef USE_SX1262
+#define SX126X_CS RF95_NSS // FIXME - we really should define LORA_CS instead
+#define SX126X_DIO1 LORA_DIO1
+#define SX126X_BUSY LORA_DIO2
+#define SX126X_RESET LORA_RESET
+#define SX126X_E22 // Not really an E22
+// Internally the module hooks the SX1262-DIO2 in to control the TX/RX switch (which is the default for the sx1262interface
+// code)
+#endif
+
+#define BATTERY_PIN 35 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
+#define BATTERY_SENSE_SAMPLES 15 // Set the number of samples, It has an effect of increasing sensitivity.
+#define ADC_MULTIPLIER 2
+
+//#define USE_SH1107 // Finally we will use SH1107 128x64 resolution driver, because SH1106 will shift the screen by 2 lines.
+#define USE_SH1106
\ No newline at end of file
diff --git a/variants/tbeam_v07/variant.h b/variants/tbeam_v07/variant.h
index ac7776c1a..2c8008688 100644
--- a/variants/tbeam_v07/variant.h
+++ b/variants/tbeam_v07/variant.h
@@ -10,7 +10,7 @@
#define USE_RF95
#define LORA_DIO0 26 // a No connect on the SX1262 module
#define LORA_RESET 23
-#define LORA_DIO1 33 // Not really used
+#define LORA_DIO1 33
#define LORA_DIO2 32 // Not really used
// This board has different GPS pins than all other boards
diff --git a/variants/tlora_v1/variant.h b/variants/tlora_v1/variant.h
index c390a3438..b4365a443 100644
--- a/variants/tlora_v1/variant.h
+++ b/variants/tlora_v1/variant.h
@@ -15,5 +15,5 @@
#define USE_RF95
#define LORA_DIO0 26 // a No connect on the SX1262 module
#define LORA_RESET 14
-#define LORA_DIO1 35 // Not really used
-#define LORA_DIO2 34 // Not really used
+#define LORA_DIO1 33 // Must be manually wired: https://www.thethingsnetwork.org/forum/t/big-esp32-sx127x-topic-part-3/18436
+#define LORA_DIO2 32 // Not really used
diff --git a/variants/tlora_v1_3/variant.h b/variants/tlora_v1_3/variant.h
index f5240d140..7e8aec0c4 100644
--- a/variants/tlora_v1_3/variant.h
+++ b/variants/tlora_v1_3/variant.h
@@ -18,5 +18,5 @@
#define USE_RF95
#define LORA_DIO0 26 // a No connect on the SX1262 module
#define LORA_RESET 14
-#define LORA_DIO1 35 // Not really used
-#define LORA_DIO2 34 // Not really used
\ No newline at end of file
+#define LORA_DIO1 33 // Prob. must be manually wired: https://www.thethingsnetwork.org/forum/t/big-esp32-sx127x-topic-part-3/18436
+#define LORA_DIO2 32 // Not really used
\ No newline at end of file
diff --git a/variants/tlora_v2/variant.h b/variants/tlora_v2/variant.h
index 0c854e37a..f18503139 100644
--- a/variants/tlora_v2/variant.h
+++ b/variants/tlora_v2/variant.h
@@ -18,5 +18,5 @@
#define USE_RF95
#define LORA_DIO0 26 // a No connect on the SX1262 module
#define LORA_RESET 14
-#define LORA_DIO1 35 // Not really used
-#define LORA_DIO2 34 // Not really used
+#define LORA_DIO1 33 // Must be manually wired: https://www.thethingsnetwork.org/forum/t/big-esp32-sx127x-topic-part-3/18436
+#define LORA_DIO2 32 // Not really used
diff --git a/variants/tlora_v2_1_16/variant.h b/variants/tlora_v2_1_16/variant.h
index 74b82d8c1..11c5921ba 100644
--- a/variants/tlora_v2_1_16/variant.h
+++ b/variants/tlora_v2_1_16/variant.h
@@ -18,3 +18,5 @@
#define USE_RF95
#define LORA_DIO0 26 // a No connect on the SX1262 module
#define LORA_RESET 23
+#define LORA_DIO1 33 // https://www.thethingsnetwork.org/forum/t/big-esp32-sx127x-topic-part-3/18436
+#define LORA_DIO2 32 // Not really used
diff --git a/version.properties b/version.properties
index bdda0d97b..d0805fbbf 100644
--- a/version.properties
+++ b/version.properties
@@ -1,4 +1,4 @@
[VERSION]
major = 2
minor = 0
-build = 21
+build = 22