mirror of
https://github.com/meshtastic/firmware.git
synced 2026-01-30 05:32:08 +00:00
Compare commits
51 Commits
v1.3.28.41
...
v1.3.32.7e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7e6c22f542 | ||
|
|
2fac581fa3 | ||
|
|
1155727a45 | ||
|
|
1c8e64319c | ||
|
|
ca1e687fd4 | ||
|
|
4c215530f6 | ||
|
|
472fb6e5b0 | ||
|
|
00846439d0 | ||
|
|
a10e56265b | ||
|
|
9fe2ddb082 | ||
|
|
a9ad314307 | ||
|
|
688ac3f8ee | ||
|
|
e79ef0dd35 | ||
|
|
9bc2b4d8d7 | ||
|
|
720cd62943 | ||
|
|
4073ba7572 | ||
|
|
39aa7f9880 | ||
|
|
71a9f46451 | ||
|
|
18d5712ecd | ||
|
|
295dca8415 | ||
|
|
7b438cd16b | ||
|
|
d285a2e70a | ||
|
|
2ad9e238e2 | ||
|
|
2d2f306982 | ||
|
|
7afc14991e | ||
|
|
86095323e5 | ||
|
|
01ac8d10b5 | ||
|
|
874d308b50 | ||
|
|
1f8878bd89 | ||
|
|
b39b58c87b | ||
|
|
fab20f5acf | ||
|
|
21f75686a4 | ||
|
|
4ad2e58047 | ||
|
|
e26975ca12 | ||
|
|
47da3b695a | ||
|
|
151321ac3c | ||
|
|
faac761dc0 | ||
|
|
5e2acc43f5 | ||
|
|
25a229ce85 | ||
|
|
edd6f049cf | ||
|
|
69ac8c0353 | ||
|
|
a41735544b | ||
|
|
dcc6a4b5e7 | ||
|
|
c292e539d4 | ||
|
|
4daf2cc3fa | ||
|
|
9c21064634 | ||
|
|
20d7d1b162 | ||
|
|
97a2bf6221 | ||
|
|
7485c312dd | ||
|
|
6ff5ada7d6 | ||
|
|
cf331dc58b |
2
.github/workflows/main_matrix.yml
vendored
2
.github/workflows/main_matrix.yml
vendored
@@ -38,6 +38,7 @@ jobs:
|
|||||||
- board: rak4631_eink
|
- board: rak4631_eink
|
||||||
- board: t-echo
|
- board: t-echo
|
||||||
- board: nano-g1
|
- board: nano-g1
|
||||||
|
- board: station-g1
|
||||||
- board: m5stack-core
|
- board: m5stack-core
|
||||||
- board: m5stack-coreink
|
- board: m5stack-coreink
|
||||||
|
|
||||||
@@ -95,6 +96,7 @@ jobs:
|
|||||||
- board: tbeam0.7
|
- board: tbeam0.7
|
||||||
- board: meshtastic-diy-v1
|
- board: meshtastic-diy-v1
|
||||||
- board: nano-g1
|
- board: nano-g1
|
||||||
|
- board: station-g1
|
||||||
- board: m5stack-core
|
- board: m5stack-core
|
||||||
- board: m5stack-coreink
|
- board: m5stack-coreink
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ set -e
|
|||||||
VERSION=`bin/buildinfo.py long`
|
VERSION=`bin/buildinfo.py long`
|
||||||
SHORT_VERSION=`bin/buildinfo.py short`
|
SHORT_VERSION=`bin/buildinfo.py short`
|
||||||
|
|
||||||
BOARDS_ESP32="rak11200 tlora-v2 tlora-v1 tlora_v1_3 tlora-v2-1-1.6 tbeam heltec-v1 heltec-v2.0 heltec-v2.1 tbeam0.7 meshtastic-diy-v1 nano-g1 m5stack-core m5stack-coreink"
|
BOARDS_ESP32="rak11200 tlora-v2 tlora-v1 tlora_v1_3 tlora-v2-1-1.6 tbeam heltec-v1 heltec-v2.0 heltec-v2.1 tbeam0.7 meshtastic-diy-v1 nano-g1 station-g1 m5stack-core m5stack-coreink"
|
||||||
#BOARDS_ESP32=tbeam
|
#BOARDS_ESP32=tbeam
|
||||||
|
|
||||||
# FIXME note nrf52840dk build is for some reason only generating a BIN file but not a HEX file nrf52840dk-geeksville is fine
|
# FIXME note nrf52840dk build is for some reason only generating a BIN file but not a HEX file nrf52840dk-geeksville is fine
|
||||||
|
|||||||
@@ -103,13 +103,13 @@ debug_init_break = tbreak setup
|
|||||||
build_flags =
|
build_flags =
|
||||||
${arduino_base.build_flags} -Wall -Wextra -Isrc/esp32 -Isrc/esp32-mfix-esp32-psram-cache-issue -lnimble -std=c++11
|
${arduino_base.build_flags} -Wall -Wextra -Isrc/esp32 -Isrc/esp32-mfix-esp32-psram-cache-issue -lnimble -std=c++11
|
||||||
-DLOG_LOCAL_LEVEL=ESP_LOG_DEBUG -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG -DMYNEWT_VAL_BLE_HS_LOG_LVL=LOG_LEVEL_CRITICAL
|
-DLOG_LOCAL_LEVEL=ESP_LOG_DEBUG -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG -DMYNEWT_VAL_BLE_HS_LOG_LVL=LOG_LEVEL_CRITICAL
|
||||||
-DAXP_DEBUG_PORT=Serial -DUSE_NEW_ESP32_BLUETOOTH
|
-DAXP_DEBUG_PORT=Serial -DUSE_NEW_ESP32_BLUETOOTH -DCONFIG_BT_NIMBLE_ENABLED -DCONFIG_NIMBLE_CPP_LOG_LEVEL=1
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${arduino_base.lib_deps}
|
${arduino_base.lib_deps}
|
||||||
${networking_base.lib_deps}
|
${networking_base.lib_deps}
|
||||||
${environmental_base.lib_deps}
|
${environmental_base.lib_deps}
|
||||||
https://github.com/meshtastic/esp32_https_server.git
|
https://github.com/meshtastic/esp32_https_server.git
|
||||||
h2zero/NimBLE-Arduino@1.3.7
|
h2zero/NimBLE-Arduino@1.4.0
|
||||||
arduino-libraries/NTPClient@^3.1.0
|
arduino-libraries/NTPClient@^3.1.0
|
||||||
lorol/LittleFS_esp32@^1.0.6
|
lorol/LittleFS_esp32@^1.0.6
|
||||||
https://github.com/meshtastic/AXP202X_Library.git#8404abb6d4b486748636bc6ad72d2a47baaf5460
|
https://github.com/meshtastic/AXP202X_Library.git#8404abb6d4b486748636bc6ad72d2a47baaf5460
|
||||||
|
|||||||
Submodule protobufs updated: 11d94c9b15...6bddcd2647
@@ -144,8 +144,15 @@ class ButtonThread : public concurrency::OSThread
|
|||||||
screen->startShutdownScreen();
|
screen->startShutdownScreen();
|
||||||
DEBUG_MSG("Shutdown from long press");
|
DEBUG_MSG("Shutdown from long press");
|
||||||
playBeep();
|
playBeep();
|
||||||
|
#ifdef PIN_LED1
|
||||||
ledOff(PIN_LED1);
|
ledOff(PIN_LED1);
|
||||||
|
#endif
|
||||||
|
#ifdef PIN_LED2
|
||||||
ledOff(PIN_LED2);
|
ledOff(PIN_LED2);
|
||||||
|
#endif
|
||||||
|
#ifdef PIN_LED3
|
||||||
|
ledOff(PIN_LED3);
|
||||||
|
#endif
|
||||||
shutdown_on_long_stop = true;
|
shutdown_on_long_stop = true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,6 +1,46 @@
|
|||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include "FSCommon.h"
|
#include "FSCommon.h"
|
||||||
|
|
||||||
|
|
||||||
|
bool copyFile(const char* from, const char* to)
|
||||||
|
{
|
||||||
|
#ifdef FSCom
|
||||||
|
unsigned char cbuffer[16];
|
||||||
|
|
||||||
|
File f1 = FSCom.open(from, FILE_O_READ);
|
||||||
|
if (!f1){
|
||||||
|
DEBUG_MSG("Failed to open file");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
File f2 = FSCom.open(to, FILE_O_WRITE);
|
||||||
|
if (!f2) {
|
||||||
|
DEBUG_MSG("Failed to open file");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (f1.available() > 0) {
|
||||||
|
byte i = f1.read(cbuffer, 16);
|
||||||
|
f2.write(cbuffer, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
f2.close();
|
||||||
|
f1.close();
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool renameFile(const char* pathFrom, const char* pathTo)
|
||||||
|
{
|
||||||
|
#ifdef FSCom
|
||||||
|
if (copyFile(pathFrom, pathTo) && FSCom.remove(pathFrom) ) {
|
||||||
|
return true;
|
||||||
|
} else{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void listDir(const char * dirname, uint8_t levels)
|
void listDir(const char * dirname, uint8_t levels)
|
||||||
{
|
{
|
||||||
#ifdef FSCom
|
#ifdef FSCom
|
||||||
|
|||||||
@@ -31,5 +31,6 @@ using namespace Adafruit_LittleFS_Namespace;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
void fsInit();
|
void fsInit();
|
||||||
|
bool renameFile(const char* pathFrom, const char* pathTo);
|
||||||
void listDir(const char * dirname, uint8_t levels);
|
void listDir(const char * dirname, uint8_t levels);
|
||||||
void rmDir(const char * dirname);
|
void rmDir(const char * dirname);
|
||||||
|
|||||||
@@ -62,9 +62,9 @@ PhoneAPI *bluetoothPhoneAPI;
|
|||||||
class ESP32BluetoothToRadioCallback : public NimBLECharacteristicCallbacks {
|
class ESP32BluetoothToRadioCallback : public NimBLECharacteristicCallbacks {
|
||||||
virtual void onWrite(NimBLECharacteristic *pCharacteristic) {
|
virtual void onWrite(NimBLECharacteristic *pCharacteristic) {
|
||||||
DEBUG_MSG("To Radio onwrite\n");
|
DEBUG_MSG("To Radio onwrite\n");
|
||||||
auto valueString = pCharacteristic->getValue();
|
auto val = pCharacteristic->getValue();
|
||||||
|
|
||||||
bluetoothPhoneAPI->handleToRadio(reinterpret_cast<const uint8_t*>(&valueString[0]), pCharacteristic->getDataLength());
|
bluetoothPhoneAPI->handleToRadio(val.data(), val.length());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -70,6 +70,8 @@
|
|||||||
#define HW_VENDOR HardwareModel_NANO_G1
|
#define HW_VENDOR HardwareModel_NANO_G1
|
||||||
#elif defined(M5STACK)
|
#elif defined(M5STACK)
|
||||||
#define HW_VENDOR HardwareModel_M5STACK
|
#define HW_VENDOR HardwareModel_M5STACK
|
||||||
|
#elif defined(STATION_G1)
|
||||||
|
#define HW_VENDOR HardwareModel_STATION_G1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -101,3 +103,4 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define SERIAL0_RX_GPIO 3 // Always GPIO3 on ESP32
|
#define SERIAL0_RX_GPIO 3 // Always GPIO3 on ESP32
|
||||||
|
|
||||||
|
|||||||
@@ -330,7 +330,7 @@ int32_t GPS::runOnce()
|
|||||||
if(devicestate.did_gps_reset && (millis() > 60000) && !hasFlow()) {
|
if(devicestate.did_gps_reset && (millis() > 60000) && !hasFlow()) {
|
||||||
DEBUG_MSG("GPS is not communicating, trying factory reset on next bootup.\n");
|
DEBUG_MSG("GPS is not communicating, trying factory reset on next bootup.\n");
|
||||||
devicestate.did_gps_reset = false;
|
devicestate.did_gps_reset = false;
|
||||||
nodeDB.saveToDisk();
|
nodeDB.saveDeviceStateToDisk();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,6 +65,11 @@ static FrameCallback normalFrames[MAX_NUM_NODES + NUM_EXTRA_FRAMES];
|
|||||||
static uint32_t targetFramerate = IDLE_FRAMERATE;
|
static uint32_t targetFramerate = IDLE_FRAMERATE;
|
||||||
static char btPIN[16] = "888888";
|
static char btPIN[16] = "888888";
|
||||||
|
|
||||||
|
// This defines the layout of the compass.
|
||||||
|
// If true, North with remain static at the top of the compass.
|
||||||
|
// If false, your current heading is static at the top of the compass.
|
||||||
|
bool compassNorthTop = false;
|
||||||
|
|
||||||
// This image definition is here instead of images.h because it's modified dynamically by the drawBattery function
|
// This image definition is here instead of images.h because it's modified dynamically by the drawBattery function
|
||||||
uint8_t imgBattery[16] = {0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xE7, 0x3C};
|
uint8_t imgBattery[16] = {0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xE7, 0x3C};
|
||||||
|
|
||||||
@@ -595,7 +600,7 @@ class Point
|
|||||||
void rotate(float radian)
|
void rotate(float radian)
|
||||||
{
|
{
|
||||||
float cos = cosf(radian), sin = sinf(radian);
|
float cos = cosf(radian), sin = sinf(radian);
|
||||||
float rx = x * cos - y * sin, ry = x * sin + y * cos;
|
float rx = x * cos + y * sin, ry = -x * sin + y * cos;
|
||||||
|
|
||||||
x = rx;
|
x = rx;
|
||||||
y = ry;
|
y = ry;
|
||||||
@@ -609,8 +614,10 @@ class Point
|
|||||||
|
|
||||||
void scale(float f)
|
void scale(float f)
|
||||||
{
|
{
|
||||||
|
//We use -f here to counter the flip that happens
|
||||||
|
//on the y axis when drawing and rotating on screen
|
||||||
x *= f;
|
x *= f;
|
||||||
y *= f;
|
y *= -f;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -682,16 +689,21 @@ static void drawNodeHeading(OLEDDisplay *display, int16_t compassX, int16_t comp
|
|||||||
drawLine(display, rightArrow, tip);
|
drawLine(display, rightArrow, tip);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw the compass heading
|
// Draw north
|
||||||
static void drawCompassHeading(OLEDDisplay *display, int16_t compassX, int16_t compassY, float myHeading)
|
static void drawCompassNorth(OLEDDisplay *display, int16_t compassX, int16_t compassY, float myHeading)
|
||||||
{
|
{
|
||||||
Point N1(-0.04f, -0.65f), N2(0.04f, -0.65f);
|
//If north is supposed to be at the top of the compass we want rotation to be +0
|
||||||
Point N3(-0.04f, -0.55f), N4(0.04f, -0.55f);
|
if(compassNorthTop)
|
||||||
|
myHeading = -0;
|
||||||
|
|
||||||
|
Point N1(-0.04f, 0.65f), N2(0.04f, 0.65f);
|
||||||
|
Point N3(-0.04f, 0.55f), N4(0.04f, 0.55f);
|
||||||
Point *rosePoints[] = {&N1, &N2, &N3, &N4};
|
Point *rosePoints[] = {&N1, &N2, &N3, &N4};
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
rosePoints[i]->rotate(myHeading);
|
// North on compass will be negative of heading
|
||||||
rosePoints[i]->scale(-1 * COMPASS_DIAM);
|
rosePoints[i]->rotate(-myHeading);
|
||||||
|
rosePoints[i]->scale(COMPASS_DIAM);
|
||||||
rosePoints[i]->translate(compassX, compassY);
|
rosePoints[i]->translate(compassX, compassY);
|
||||||
}
|
}
|
||||||
drawLine(display, N1, N3);
|
drawLine(display, N1, N3);
|
||||||
@@ -762,7 +774,7 @@ static void drawNodeInfo(OLEDDisplay *display, OLEDDisplayUiState *state, int16_
|
|||||||
if (ourNode && hasPosition(ourNode)) {
|
if (ourNode && hasPosition(ourNode)) {
|
||||||
Position &op = ourNode->position;
|
Position &op = ourNode->position;
|
||||||
float myHeading = estimatedHeading(DegD(op.latitude_i), DegD(op.longitude_i));
|
float myHeading = estimatedHeading(DegD(op.latitude_i), DegD(op.longitude_i));
|
||||||
drawCompassHeading(display, compassX, compassY, myHeading);
|
drawCompassNorth(display, compassX, compassY, myHeading);
|
||||||
|
|
||||||
if (hasPosition(node)) {
|
if (hasPosition(node)) {
|
||||||
// display direction toward node
|
// display direction toward node
|
||||||
@@ -775,12 +787,13 @@ static void drawNodeInfo(OLEDDisplay *display, OLEDDisplayUiState *state, int16_
|
|||||||
else
|
else
|
||||||
snprintf(distStr, sizeof(distStr), "%.1f km", d / 1000);
|
snprintf(distStr, sizeof(distStr), "%.1f km", d / 1000);
|
||||||
|
|
||||||
// FIXME, also keep the guess at the operators heading and add/substract
|
|
||||||
// it. currently we don't do this and instead draw north up only.
|
|
||||||
float bearingToOther =
|
float bearingToOther =
|
||||||
GeoCoord::bearing(DegD(p.latitude_i), DegD(p.longitude_i), DegD(op.latitude_i), DegD(op.longitude_i));
|
GeoCoord::bearing(DegD(op.latitude_i), DegD(op.longitude_i), DegD(p.latitude_i), DegD(p.longitude_i));
|
||||||
float headingRadian = bearingToOther - myHeading;
|
// If the top of the compass is a static north then bearingToOther can be drawn on the compass directly
|
||||||
drawNodeHeading(display, compassX, compassY, headingRadian);
|
// If the top of the compass is not a static north we need adjust bearingToOther based on heading
|
||||||
|
if(!compassNorthTop)
|
||||||
|
bearingToOther -= myHeading;
|
||||||
|
drawNodeHeading(display, compassX, compassY, bearingToOther);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!hasNodeHeading)
|
if (!hasNodeHeading)
|
||||||
@@ -935,9 +948,11 @@ void Screen::setup()
|
|||||||
handleSetOn(true);
|
handleSetOn(true);
|
||||||
|
|
||||||
// On some ssd1306 clones, the first draw command is discarded, so draw it
|
// On some ssd1306 clones, the first draw command is discarded, so draw it
|
||||||
// twice initially.
|
// twice initially. Skip this for EINK Displays to save a few seconds during boot
|
||||||
ui.update();
|
ui.update();
|
||||||
|
#ifndef USE_EINK
|
||||||
ui.update();
|
ui.update();
|
||||||
|
#endif
|
||||||
serialSinceMsec = millis();
|
serialSinceMsec = millis();
|
||||||
|
|
||||||
// Subscribe to status updates
|
// Subscribe to status updates
|
||||||
@@ -1355,7 +1370,7 @@ void DebugInfo::drawFrameWiFi(OLEDDisplay *display, OLEDDisplayUiState *state, i
|
|||||||
|
|
||||||
if (isSoftAPForced()) {
|
if (isSoftAPForced()) {
|
||||||
display->drawString(x, y, String("WiFi: Software AP (Admin)"));
|
display->drawString(x, y, String("WiFi: Software AP (Admin)"));
|
||||||
} else if (config.wifi.ap_mode) {
|
} else if (config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPoint || config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPointHidden) {
|
||||||
display->drawString(x, y, String("WiFi: Software AP"));
|
display->drawString(x, y, String("WiFi: Software AP"));
|
||||||
} else if (WiFi.status() != WL_CONNECTED) {
|
} else if (WiFi.status() != WL_CONNECTED) {
|
||||||
display->drawString(x, y, String("WiFi: Not Connected"));
|
display->drawString(x, y, String("WiFi: Not Connected"));
|
||||||
@@ -1378,8 +1393,8 @@ void DebugInfo::drawFrameWiFi(OLEDDisplay *display, OLEDDisplayUiState *state, i
|
|||||||
- WL_NO_SHIELD: assigned when no WiFi shield is present;
|
- WL_NO_SHIELD: assigned when no WiFi shield is present;
|
||||||
|
|
||||||
*/
|
*/
|
||||||
if (WiFi.status() == WL_CONNECTED || isSoftAPForced() || config.wifi.ap_mode) {
|
if (WiFi.status() == WL_CONNECTED || isSoftAPForced() || config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPoint || config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPointHidden) {
|
||||||
if (config.wifi.ap_mode || isSoftAPForced()) {
|
if (config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPoint || config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPointHidden || isSoftAPForced()) {
|
||||||
display->drawString(x, y + FONT_HEIGHT_SMALL * 1, "IP: " + String(WiFi.softAPIP().toString().c_str()));
|
display->drawString(x, y + FONT_HEIGHT_SMALL * 1, "IP: " + String(WiFi.softAPIP().toString().c_str()));
|
||||||
|
|
||||||
// Number of connections to the AP. Default max for the esp32 is 4
|
// Number of connections to the AP. Default max for the esp32 is 4
|
||||||
@@ -1471,7 +1486,7 @@ void DebugInfo::drawFrameWiFi(OLEDDisplay *display, OLEDDisplayUiState *state, i
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (config.wifi.ap_mode) {
|
if (config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPoint || config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPointHidden) {
|
||||||
if ((millis() / 10000) % 2) {
|
if ((millis() / 10000) % 2) {
|
||||||
display->drawString(x, y + FONT_HEIGHT_SMALL * 2, "SSID: " + String(wifiName));
|
display->drawString(x, y + FONT_HEIGHT_SMALL * 2, "SSID: " + String(wifiName));
|
||||||
} else {
|
} else {
|
||||||
@@ -1665,4 +1680,5 @@ int Screen::handleUIFrameEvent(const UIFrameEvent *event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
} // namespace graphics
|
} // namespace graphics
|
||||||
|
|
||||||
#endif // HAS_SCREEN
|
#endif // HAS_SCREEN
|
||||||
@@ -414,7 +414,7 @@ bool saveProto(const char *filename, size_t protoSize, size_t objSize, const pb_
|
|||||||
// brief window of risk here ;-)
|
// brief window of risk here ;-)
|
||||||
if (FSCom.exists(filename) && !FSCom.remove(filename))
|
if (FSCom.exists(filename) && !FSCom.remove(filename))
|
||||||
DEBUG_MSG("Warning: Can't remove old pref file\n");
|
DEBUG_MSG("Warning: Can't remove old pref file\n");
|
||||||
if (!FSCom.rename(filenameTmp.c_str(), filename))
|
if (!renameFile(filenameTmp.c_str(), filename))
|
||||||
DEBUG_MSG("Error: can't rename new pref file\n");
|
DEBUG_MSG("Error: can't rename new pref file\n");
|
||||||
} else {
|
} else {
|
||||||
DEBUG_MSG("Can't write prefs\n");
|
DEBUG_MSG("Can't write prefs\n");
|
||||||
@@ -435,6 +435,16 @@ void NodeDB::saveChannelsToDisk()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NodeDB::saveDeviceStateToDisk()
|
||||||
|
{
|
||||||
|
if (!devicestate.no_save) {
|
||||||
|
#ifdef FSCom
|
||||||
|
FSCom.mkdir("/prefs");
|
||||||
|
#endif
|
||||||
|
saveProto(prefFileName, DeviceState_size, sizeof(devicestate), DeviceState_fields, &devicestate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void NodeDB::saveToDisk()
|
void NodeDB::saveToDisk()
|
||||||
{
|
{
|
||||||
if (!devicestate.no_save) {
|
if (!devicestate.no_save) {
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ class NodeDB
|
|||||||
void init();
|
void init();
|
||||||
|
|
||||||
/// write to flash
|
/// write to flash
|
||||||
void saveToDisk(), saveChannelsToDisk();
|
void saveToDisk(), saveChannelsToDisk(), saveDeviceStateToDisk();
|
||||||
|
|
||||||
/** Reinit radio config if needed, because either:
|
/** Reinit radio config if needed, because either:
|
||||||
* a) sometimes a buggy android app might send us bogus settings or
|
* a) sometimes a buggy android app might send us bogus settings or
|
||||||
|
|||||||
@@ -34,3 +34,4 @@ PB_BIND(Config_LoRaConfig, Config_LoRaConfig, 2)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -51,6 +51,12 @@ typedef enum _Config_PowerConfig_ChargeCurrent {
|
|||||||
Config_PowerConfig_ChargeCurrent_MA1320 = 16
|
Config_PowerConfig_ChargeCurrent_MA1320 = 16
|
||||||
} Config_PowerConfig_ChargeCurrent;
|
} Config_PowerConfig_ChargeCurrent;
|
||||||
|
|
||||||
|
typedef enum _Config_WiFiConfig_WiFiMode {
|
||||||
|
Config_WiFiConfig_WiFiMode_Client = 0,
|
||||||
|
Config_WiFiConfig_WiFiMode_AccessPoint = 1,
|
||||||
|
Config_WiFiConfig_WiFiMode_AccessPointHidden = 2
|
||||||
|
} Config_WiFiConfig_WiFiMode;
|
||||||
|
|
||||||
typedef enum _Config_DisplayConfig_GpsCoordinateFormat {
|
typedef enum _Config_DisplayConfig_GpsCoordinateFormat {
|
||||||
Config_DisplayConfig_GpsCoordinateFormat_GpsFormatDec = 0,
|
Config_DisplayConfig_GpsCoordinateFormat_GpsFormatDec = 0,
|
||||||
Config_DisplayConfig_GpsCoordinateFormat_GpsFormatDMS = 1,
|
Config_DisplayConfig_GpsCoordinateFormat_GpsFormatDMS = 1,
|
||||||
@@ -99,6 +105,7 @@ typedef struct _Config_DisplayConfig {
|
|||||||
uint32_t screen_on_secs;
|
uint32_t screen_on_secs;
|
||||||
Config_DisplayConfig_GpsCoordinateFormat gps_format;
|
Config_DisplayConfig_GpsCoordinateFormat gps_format;
|
||||||
uint32_t auto_screen_carousel_secs;
|
uint32_t auto_screen_carousel_secs;
|
||||||
|
bool compass_north_top;
|
||||||
} Config_DisplayConfig;
|
} Config_DisplayConfig;
|
||||||
|
|
||||||
typedef struct _Config_LoRaConfig {
|
typedef struct _Config_LoRaConfig {
|
||||||
@@ -138,10 +145,10 @@ typedef struct _Config_PowerConfig {
|
|||||||
} Config_PowerConfig;
|
} Config_PowerConfig;
|
||||||
|
|
||||||
typedef struct _Config_WiFiConfig {
|
typedef struct _Config_WiFiConfig {
|
||||||
|
bool enabled;
|
||||||
|
Config_WiFiConfig_WiFiMode mode;
|
||||||
char ssid[33];
|
char ssid[33];
|
||||||
char psk[64];
|
char psk[64];
|
||||||
bool ap_mode;
|
|
||||||
bool ap_hidden;
|
|
||||||
} Config_WiFiConfig;
|
} Config_WiFiConfig;
|
||||||
|
|
||||||
typedef struct _Config {
|
typedef struct _Config {
|
||||||
@@ -170,6 +177,10 @@ typedef struct _Config {
|
|||||||
#define _Config_PowerConfig_ChargeCurrent_MAX Config_PowerConfig_ChargeCurrent_MA1320
|
#define _Config_PowerConfig_ChargeCurrent_MAX Config_PowerConfig_ChargeCurrent_MA1320
|
||||||
#define _Config_PowerConfig_ChargeCurrent_ARRAYSIZE ((Config_PowerConfig_ChargeCurrent)(Config_PowerConfig_ChargeCurrent_MA1320+1))
|
#define _Config_PowerConfig_ChargeCurrent_ARRAYSIZE ((Config_PowerConfig_ChargeCurrent)(Config_PowerConfig_ChargeCurrent_MA1320+1))
|
||||||
|
|
||||||
|
#define _Config_WiFiConfig_WiFiMode_MIN Config_WiFiConfig_WiFiMode_Client
|
||||||
|
#define _Config_WiFiConfig_WiFiMode_MAX Config_WiFiConfig_WiFiMode_AccessPointHidden
|
||||||
|
#define _Config_WiFiConfig_WiFiMode_ARRAYSIZE ((Config_WiFiConfig_WiFiMode)(Config_WiFiConfig_WiFiMode_AccessPointHidden+1))
|
||||||
|
|
||||||
#define _Config_DisplayConfig_GpsCoordinateFormat_MIN Config_DisplayConfig_GpsCoordinateFormat_GpsFormatDec
|
#define _Config_DisplayConfig_GpsCoordinateFormat_MIN Config_DisplayConfig_GpsCoordinateFormat_GpsFormatDec
|
||||||
#define _Config_DisplayConfig_GpsCoordinateFormat_MAX Config_DisplayConfig_GpsCoordinateFormat_GpsFormatOSGR
|
#define _Config_DisplayConfig_GpsCoordinateFormat_MAX Config_DisplayConfig_GpsCoordinateFormat_GpsFormatOSGR
|
||||||
#define _Config_DisplayConfig_GpsCoordinateFormat_ARRAYSIZE ((Config_DisplayConfig_GpsCoordinateFormat)(Config_DisplayConfig_GpsCoordinateFormat_GpsFormatOSGR+1))
|
#define _Config_DisplayConfig_GpsCoordinateFormat_ARRAYSIZE ((Config_DisplayConfig_GpsCoordinateFormat)(Config_DisplayConfig_GpsCoordinateFormat_GpsFormatOSGR+1))
|
||||||
@@ -192,15 +203,15 @@ extern "C" {
|
|||||||
#define Config_DeviceConfig_init_default {_Config_DeviceConfig_Role_MIN, 0, 0, 0, ""}
|
#define Config_DeviceConfig_init_default {_Config_DeviceConfig_Role_MIN, 0, 0, 0, ""}
|
||||||
#define Config_PositionConfig_init_default {0, 0, 0, 0, 0, 0, 0}
|
#define Config_PositionConfig_init_default {0, 0, 0, 0, 0, 0, 0}
|
||||||
#define Config_PowerConfig_init_default {_Config_PowerConfig_ChargeCurrent_MIN, 0, 0, 0, 0, 0, 0, 0, 0}
|
#define Config_PowerConfig_init_default {_Config_PowerConfig_ChargeCurrent_MIN, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
#define Config_WiFiConfig_init_default {"", "", 0, 0}
|
#define Config_WiFiConfig_init_default {0, _Config_WiFiConfig_WiFiMode_MIN, "", ""}
|
||||||
#define Config_DisplayConfig_init_default {0, _Config_DisplayConfig_GpsCoordinateFormat_MIN, 0}
|
#define Config_DisplayConfig_init_default {0, _Config_DisplayConfig_GpsCoordinateFormat_MIN, 0, 0}
|
||||||
#define Config_LoRaConfig_init_default {0, _Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, _Config_LoRaConfig_RegionCode_MIN, 0, 0, 0, {0, 0, 0}}
|
#define Config_LoRaConfig_init_default {0, _Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, _Config_LoRaConfig_RegionCode_MIN, 0, 0, 0, {0, 0, 0}}
|
||||||
#define Config_init_zero {0, {Config_DeviceConfig_init_zero}}
|
#define Config_init_zero {0, {Config_DeviceConfig_init_zero}}
|
||||||
#define Config_DeviceConfig_init_zero {_Config_DeviceConfig_Role_MIN, 0, 0, 0, ""}
|
#define Config_DeviceConfig_init_zero {_Config_DeviceConfig_Role_MIN, 0, 0, 0, ""}
|
||||||
#define Config_PositionConfig_init_zero {0, 0, 0, 0, 0, 0, 0}
|
#define Config_PositionConfig_init_zero {0, 0, 0, 0, 0, 0, 0}
|
||||||
#define Config_PowerConfig_init_zero {_Config_PowerConfig_ChargeCurrent_MIN, 0, 0, 0, 0, 0, 0, 0, 0}
|
#define Config_PowerConfig_init_zero {_Config_PowerConfig_ChargeCurrent_MIN, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
#define Config_WiFiConfig_init_zero {"", "", 0, 0}
|
#define Config_WiFiConfig_init_zero {0, _Config_WiFiConfig_WiFiMode_MIN, "", ""}
|
||||||
#define Config_DisplayConfig_init_zero {0, _Config_DisplayConfig_GpsCoordinateFormat_MIN, 0}
|
#define Config_DisplayConfig_init_zero {0, _Config_DisplayConfig_GpsCoordinateFormat_MIN, 0, 0}
|
||||||
#define Config_LoRaConfig_init_zero {0, _Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, _Config_LoRaConfig_RegionCode_MIN, 0, 0, 0, {0, 0, 0}}
|
#define Config_LoRaConfig_init_zero {0, _Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, _Config_LoRaConfig_RegionCode_MIN, 0, 0, 0, {0, 0, 0}}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
@@ -212,6 +223,7 @@ extern "C" {
|
|||||||
#define Config_DisplayConfig_screen_on_secs_tag 1
|
#define Config_DisplayConfig_screen_on_secs_tag 1
|
||||||
#define Config_DisplayConfig_gps_format_tag 2
|
#define Config_DisplayConfig_gps_format_tag 2
|
||||||
#define Config_DisplayConfig_auto_screen_carousel_secs_tag 3
|
#define Config_DisplayConfig_auto_screen_carousel_secs_tag 3
|
||||||
|
#define Config_DisplayConfig_compass_north_top_tag 4
|
||||||
#define Config_LoRaConfig_tx_power_tag 1
|
#define Config_LoRaConfig_tx_power_tag 1
|
||||||
#define Config_LoRaConfig_modem_preset_tag 2
|
#define Config_LoRaConfig_modem_preset_tag 2
|
||||||
#define Config_LoRaConfig_bandwidth_tag 3
|
#define Config_LoRaConfig_bandwidth_tag 3
|
||||||
@@ -238,10 +250,10 @@ extern "C" {
|
|||||||
#define Config_PowerConfig_sds_secs_tag 10
|
#define Config_PowerConfig_sds_secs_tag 10
|
||||||
#define Config_PowerConfig_ls_secs_tag 11
|
#define Config_PowerConfig_ls_secs_tag 11
|
||||||
#define Config_PowerConfig_min_wake_secs_tag 12
|
#define Config_PowerConfig_min_wake_secs_tag 12
|
||||||
#define Config_WiFiConfig_ssid_tag 1
|
#define Config_WiFiConfig_enabled_tag 1
|
||||||
#define Config_WiFiConfig_psk_tag 2
|
#define Config_WiFiConfig_mode_tag 2
|
||||||
#define Config_WiFiConfig_ap_mode_tag 3
|
#define Config_WiFiConfig_ssid_tag 3
|
||||||
#define Config_WiFiConfig_ap_hidden_tag 4
|
#define Config_WiFiConfig_psk_tag 4
|
||||||
#define Config_device_tag 1
|
#define Config_device_tag 1
|
||||||
#define Config_position_tag 2
|
#define Config_position_tag 2
|
||||||
#define Config_power_tag 3
|
#define Config_power_tag 3
|
||||||
@@ -300,17 +312,18 @@ X(a, STATIC, SINGULAR, UINT32, min_wake_secs, 12)
|
|||||||
#define Config_PowerConfig_DEFAULT NULL
|
#define Config_PowerConfig_DEFAULT NULL
|
||||||
|
|
||||||
#define Config_WiFiConfig_FIELDLIST(X, a) \
|
#define Config_WiFiConfig_FIELDLIST(X, a) \
|
||||||
X(a, STATIC, SINGULAR, STRING, ssid, 1) \
|
X(a, STATIC, SINGULAR, BOOL, enabled, 1) \
|
||||||
X(a, STATIC, SINGULAR, STRING, psk, 2) \
|
X(a, STATIC, SINGULAR, UENUM, mode, 2) \
|
||||||
X(a, STATIC, SINGULAR, BOOL, ap_mode, 3) \
|
X(a, STATIC, SINGULAR, STRING, ssid, 3) \
|
||||||
X(a, STATIC, SINGULAR, BOOL, ap_hidden, 4)
|
X(a, STATIC, SINGULAR, STRING, psk, 4)
|
||||||
#define Config_WiFiConfig_CALLBACK NULL
|
#define Config_WiFiConfig_CALLBACK NULL
|
||||||
#define Config_WiFiConfig_DEFAULT NULL
|
#define Config_WiFiConfig_DEFAULT NULL
|
||||||
|
|
||||||
#define Config_DisplayConfig_FIELDLIST(X, a) \
|
#define Config_DisplayConfig_FIELDLIST(X, a) \
|
||||||
X(a, STATIC, SINGULAR, UINT32, screen_on_secs, 1) \
|
X(a, STATIC, SINGULAR, UINT32, screen_on_secs, 1) \
|
||||||
X(a, STATIC, SINGULAR, UENUM, gps_format, 2) \
|
X(a, STATIC, SINGULAR, UENUM, gps_format, 2) \
|
||||||
X(a, STATIC, SINGULAR, UINT32, auto_screen_carousel_secs, 3)
|
X(a, STATIC, SINGULAR, UINT32, auto_screen_carousel_secs, 3) \
|
||||||
|
X(a, STATIC, SINGULAR, BOOL, compass_north_top, 4)
|
||||||
#define Config_DisplayConfig_CALLBACK NULL
|
#define Config_DisplayConfig_CALLBACK NULL
|
||||||
#define Config_DisplayConfig_DEFAULT NULL
|
#define Config_DisplayConfig_DEFAULT NULL
|
||||||
|
|
||||||
@@ -347,7 +360,7 @@ extern const pb_msgdesc_t Config_LoRaConfig_msg;
|
|||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define Config_DeviceConfig_size 42
|
#define Config_DeviceConfig_size 42
|
||||||
#define Config_DisplayConfig_size 14
|
#define Config_DisplayConfig_size 16
|
||||||
#define Config_LoRaConfig_size 67
|
#define Config_LoRaConfig_size 67
|
||||||
#define Config_PositionConfig_size 30
|
#define Config_PositionConfig_size 30
|
||||||
#define Config_PowerConfig_size 45
|
#define Config_PowerConfig_size 45
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ extern const pb_msgdesc_t LocalModuleConfig_msg;
|
|||||||
#define LocalModuleConfig_fields &LocalModuleConfig_msg
|
#define LocalModuleConfig_fields &LocalModuleConfig_msg
|
||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define LocalConfig_size 319
|
#define LocalConfig_size 321
|
||||||
#define LocalModuleConfig_size 268
|
#define LocalModuleConfig_size 268
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@@ -71,6 +71,8 @@ typedef enum _HardwareModel {
|
|||||||
HardwareModel_DR_DEV = 43,
|
HardwareModel_DR_DEV = 43,
|
||||||
/* M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, Paper) https://m5stack.com/ */
|
/* M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, Paper) https://m5stack.com/ */
|
||||||
HardwareModel_M5STACK = 44,
|
HardwareModel_M5STACK = 44,
|
||||||
|
/* B&Q Consulting Station Edition G1: https://uniteng.com/wiki/doku.php?id=meshtastic:station */
|
||||||
|
HardwareModel_STATION_G1 = 45,
|
||||||
/* 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. */
|
||||||
HardwareModel_PRIVATE_HW = 255
|
HardwareModel_PRIVATE_HW = 255
|
||||||
} HardwareModel;
|
} HardwareModel;
|
||||||
|
|||||||
@@ -610,7 +610,7 @@ void handleReport(HTTPRequest *req, HTTPResponse *res)
|
|||||||
|
|
||||||
// data->wifi
|
// data->wifi
|
||||||
String ipStr;
|
String ipStr;
|
||||||
if (config.wifi.ap_mode || isSoftAPForced()) {
|
if (config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPoint || config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPointHidden || isSoftAPForced()) {
|
||||||
ipStr = String(WiFi.softAPIP().toString());
|
ipStr = String(WiFi.softAPIP().toString());
|
||||||
} else {
|
} else {
|
||||||
ipStr = String(WiFi.localIP().toString());
|
ipStr = String(WiFi.localIP().toString());
|
||||||
|
|||||||
@@ -191,10 +191,14 @@ bool initWifi(bool forceSoftAP)
|
|||||||
|
|
||||||
if (forceSoftAP) {
|
if (forceSoftAP) {
|
||||||
DEBUG_MSG("WiFi ... Forced AP Mode\n");
|
DEBUG_MSG("WiFi ... Forced AP Mode\n");
|
||||||
} else if (config.wifi.ap_mode) {
|
} else if (config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPoint) {
|
||||||
DEBUG_MSG("WiFi ... AP Mode\n");
|
DEBUG_MSG("WiFi ... AP Mode\n");
|
||||||
} else {
|
} else if (config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPointHidden) {
|
||||||
|
DEBUG_MSG("WiFi ... Hidden AP Mode\n");
|
||||||
|
} else if (config.wifi.mode == Config_WiFiConfig_WiFiMode_Client) {
|
||||||
DEBUG_MSG("WiFi ... Client Mode\n");
|
DEBUG_MSG("WiFi ... Client Mode\n");
|
||||||
|
} else {
|
||||||
|
DEBUG_MSG("WiFi ... WiFi Disabled\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
createSSLCert();
|
createSSLCert();
|
||||||
@@ -203,7 +207,7 @@ bool initWifi(bool forceSoftAP)
|
|||||||
wifiPsw = NULL;
|
wifiPsw = NULL;
|
||||||
|
|
||||||
if (*wifiName || forceSoftAP) {
|
if (*wifiName || forceSoftAP) {
|
||||||
if (config.wifi.ap_mode || forceSoftAP) {
|
if (config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPoint || config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPointHidden || forceSoftAP) {
|
||||||
|
|
||||||
IPAddress apIP(192, 168, 42, 1);
|
IPAddress apIP(192, 168, 42, 1);
|
||||||
WiFi.onEvent(WiFiEvent);
|
WiFi.onEvent(WiFiEvent);
|
||||||
@@ -218,7 +222,7 @@ bool initWifi(bool forceSoftAP)
|
|||||||
} else {
|
} else {
|
||||||
|
|
||||||
// If AP is configured to be hidden hidden
|
// If AP is configured to be hidden hidden
|
||||||
if (config.wifi.ap_hidden) {
|
if (config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPointHidden) {
|
||||||
|
|
||||||
// The configurations on softAP are from the espresif library
|
// The configurations on softAP are from the espresif library
|
||||||
int ok = WiFi.softAP(wifiName, wifiPsw, 1, 1, 4);
|
int ok = WiFi.softAP(wifiName, wifiPsw, 1, 1, 4);
|
||||||
@@ -373,7 +377,7 @@ static void WiFiEvent(WiFiEvent_t event)
|
|||||||
|
|
||||||
void handleDNSResponse()
|
void handleDNSResponse()
|
||||||
{
|
{
|
||||||
if (config.wifi.ap_mode || isSoftAPForced()) {
|
if (config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPoint || config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPointHidden || isSoftAPForced()) {
|
||||||
dnsServer.processNextRequest();
|
dnsServer.processNextRequest();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,4 +44,5 @@ void RoutingModule::sendAckNak(Routing_Error err, NodeNum to, PacketId idFrom, C
|
|||||||
RoutingModule::RoutingModule() : ProtobufModule("routing", PortNum_ROUTING_APP, Routing_fields)
|
RoutingModule::RoutingModule() : ProtobufModule("routing", PortNum_ROUTING_APP, Routing_fields)
|
||||||
{
|
{
|
||||||
isPromiscuous = true;
|
isPromiscuous = true;
|
||||||
|
encryptedOk = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,8 +21,15 @@ void powerCommandsCheck()
|
|||||||
if (shutdownAtMsec) {
|
if (shutdownAtMsec) {
|
||||||
screen->startShutdownScreen();
|
screen->startShutdownScreen();
|
||||||
playBeep();
|
playBeep();
|
||||||
|
#ifdef PIN_LED1
|
||||||
ledOff(PIN_LED1);
|
ledOff(PIN_LED1);
|
||||||
|
#endif
|
||||||
|
#ifdef PIN_LED2
|
||||||
ledOff(PIN_LED2);
|
ledOff(PIN_LED2);
|
||||||
|
#endif
|
||||||
|
#ifdef PIN_LED3
|
||||||
|
ledOff(PIN_LED3);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
8
variants/station-g1/platformio.ini
Normal file
8
variants/station-g1/platformio.ini
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
; The 1.0 release of the nano-g1 board
|
||||||
|
[env:station-g1]
|
||||||
|
extends = esp32_base
|
||||||
|
board = ttgo-t-beam
|
||||||
|
lib_deps =
|
||||||
|
${esp32_base.lib_deps}
|
||||||
|
build_flags =
|
||||||
|
${esp32_base.build_flags} -D STATION_G1 -I variants/station-g1
|
||||||
36
variants/station-g1/variant.h
Normal file
36
variants/station-g1/variant.h
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
// #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 middle button GPIO on the Nano G1
|
||||||
|
//#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 30 //Set the number of samples, It has an effect of increasing sensitivity.
|
||||||
|
#define ADC_MULTIPLIER 2.15
|
||||||
|
|
||||||
|
// different screen
|
||||||
|
#define USE_SH1106
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
[VERSION]
|
[VERSION]
|
||||||
major = 1
|
major = 1
|
||||||
minor = 3
|
minor = 3
|
||||||
build = 28
|
build = 32
|
||||||
|
|||||||
Reference in New Issue
Block a user