Compare commits

...

51 Commits

Author SHA1 Message Date
Garth Vander Houwen
7e6c22f542 Update version.properties 2022-08-06 12:56:10 -07:00
Garth Vander Houwen
2fac581fa3 Merge pull request #1602 from meshtastic/WiFi_enum
Combine WIFI state into an enum
2022-08-06 12:55:45 -07:00
Garth Vander Houwen
1155727a45 Merge branch 'master' into WiFi_enum 2022-08-06 12:38:19 -07:00
Ben Meadors
1c8e64319c Update nimble to 1.4 (#1600)
* Update nimble version

* Back down a version

* Nimble 1.4

* Change log level of Nimble. Too chatty

* Log level

* Log level of 1 (error)
2022-08-06 14:16:11 -05:00
Sacha Weatherstone
ca1e687fd4 update protobufs 2022-08-06 21:29:59 +10:00
Sacha Weatherstone
4c215530f6 Update protobufs 2022-08-06 16:35:52 +10:00
Sacha Weatherstone
472fb6e5b0 Update protobufs & fix build 2022-08-06 16:31:40 +10:00
Garth Vander Houwen
00846439d0 Update version.properties 2022-08-05 16:52:10 -07:00
Ben Meadors
a10e56265b Update nimble version (#1599)
* Update nimble version

* Back down a version
2022-08-05 16:11:22 -05:00
Ben Meadors
9fe2ddb082 1.3.30 2022-08-04 07:33:02 -05:00
Thomas Göttgens
a9ad314307 Merge pull request #1551 from loodydo/loodydo-Compass-Fix
Update Screen.cpp
2022-08-04 11:34:38 +02:00
Thomas Göttgens
688ac3f8ee Merge branch 'master' into loodydo-Compass-Fix 2022-08-04 11:01:02 +02:00
Thomas Göttgens
e79ef0dd35 Merge pull request #1596 from meshtastic/eink-speedup
Skip unneccessary EINK update
2022-08-04 11:00:48 +02:00
Thomas Göttgens
9bc2b4d8d7 Skip unneccessary EINK update 2022-08-04 10:35:40 +02:00
Thomas Göttgens
720cd62943 Merge pull request #1572 from meshtastic/patch1
Tryfix LED T-Echo
2022-08-04 10:14:47 +02:00
Thomas Göttgens
4073ba7572 Merge branch 'master' into patch1 2022-08-04 10:02:44 +02:00
Thomas Göttgens
39aa7f9880 Merge pull request #1594 from meshtastic/littlefs-rename-fix
Littlefs rename fix
2022-08-04 09:37:34 +02:00
Thomas Göttgens
71a9f46451 change to logical and operator 2022-08-04 09:12:56 +02:00
Thomas Göttgens
18d5712ecd This code was committed by mistake 2022-08-04 09:10:50 +02:00
Thomas Göttgens
295dca8415 Work around bug in littlefs rename() for now. After upstream change to version 2.5 this can be reverted. 2022-08-04 09:08:02 +02:00
Thomas Göttgens
7b438cd16b Merge branch 'master' of github.com:meshtastic/Meshtastic-device 2022-08-04 08:30:35 +02:00
Jm Casler
d285a2e70a Merge pull request #1593 from GUVWAF/master
Rebroadcast encrypted messages
2022-08-03 12:28:33 -07:00
GUVWAF
2ad9e238e2 RoutingModule can handle encrypted packets 2022-08-03 19:08:23 +02:00
Thomas Göttgens
2d2f306982 Merge branch 'master' of github.com:meshtastic/Meshtastic-device 2022-08-03 15:18:29 +02:00
Ben Meadors
7afc14991e Bump for release 2022-08-03 07:38:20 -05:00
Ben Meadors
86095323e5 Add station-g1 to PR build (#1588) 2022-08-03 07:36:29 -05:00
Ben Meadors
01ac8d10b5 Add station-g1 to release (#1589) 2022-08-03 07:28:43 -05:00
Ben Meadors
874d308b50 Only save devicestate on GPS reset (#1587) 2022-08-03 07:16:41 -05:00
Thomas Göttgens
1f8878bd89 Merge branch 'master' into loodydo-Compass-Fix 2022-08-03 11:37:48 +02:00
Thomas Göttgens
b39b58c87b Merge branch 'master' into patch1 2022-08-03 11:37:36 +02:00
Thomas Göttgens
fab20f5acf Merge pull request #1584 from neilhao/master
'station-g1'
2022-08-03 10:44:35 +02:00
Thomas Göttgens
21f75686a4 Merge branch 'master' into master 2022-08-03 10:15:57 +02:00
Neil Hao
4ad2e58047 Update mesh.pb.h 2022-08-03 16:15:11 +08:00
Thomas Göttgens
e26975ca12 Merge pull request #1586 from meshtastic/create-pull-request/patch
Changes by create-pull-request action
2022-08-03 10:14:28 +02:00
Neil Hao
47da3b695a Update mesh.pb.h 2022-08-03 16:13:21 +08:00
caveman99
151321ac3c [create-pull-request] automated change 2022-08-03 08:09:05 +00:00
neil
faac761dc0 'station-g1' 2022-08-03 04:23:32 +08:00
Thomas Göttgens
5e2acc43f5 Merge branch 'master' of github.com:meshtastic/Meshtastic-device 2022-08-02 10:03:16 +02:00
Thomas Göttgens
25a229ce85 Merge branch 'master' into loodydo-Compass-Fix 2022-08-02 09:39:29 +02:00
Thomas Göttgens
edd6f049cf Merge branch 'master' into patch1 2022-07-31 16:14:33 +02:00
Thomas Göttgens
69ac8c0353 Merge branch 'master' of github.com:meshtastic/Meshtastic-device 2022-07-31 10:32:14 +02:00
Ben Meadors
a41735544b Merge branch 'master' into loodydo-Compass-Fix 2022-07-28 07:25:56 -05:00
Thomas Göttgens
dcc6a4b5e7 Tryfix LED T-Echo 2022-07-28 09:37:16 +02:00
Ben Meadors
c292e539d4 Merge branch 'master' into loodydo-Compass-Fix 2022-07-17 18:27:35 -05:00
loodydo
4daf2cc3fa Merge branch 'meshtastic:master' into loodydo-Compass-Fix 2022-07-14 22:00:13 -06:00
loodydo
9c21064634 Update Screen.cpp
Fixed variable shadowing
2022-07-09 11:47:50 -06:00
loodydo
20d7d1b162 Update Screen.cpp
Add option to switch between static/non-static North.
2022-07-09 11:38:41 -06:00
loodydo
97a2bf6221 Merge branch 'meshtastic:master' into loodydo-Compass-Fix 2022-07-09 10:57:20 -06:00
Ben Meadors
7485c312dd Merge branch 'master' into loodydo-Compass-Fix 2022-07-06 07:03:48 -05:00
Jm Casler
6ff5ada7d6 Merge branch 'master' into loodydo-Compass-Fix 2022-07-05 19:23:12 -07:00
loodydo
cf331dc58b Update Screen.cpp 2022-07-04 13:16:29 -06:00
24 changed files with 204 additions and 53 deletions

View File

@@ -38,6 +38,7 @@ jobs:
- board: rak4631_eink
- board: t-echo
- board: nano-g1
- board: station-g1
- board: m5stack-core
- board: m5stack-coreink
@@ -95,6 +96,7 @@ jobs:
- board: tbeam0.7
- board: meshtastic-diy-v1
- board: nano-g1
- board: station-g1
- board: m5stack-core
- board: m5stack-coreink

View File

@@ -5,7 +5,7 @@ set -e
VERSION=`bin/buildinfo.py long`
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
# FIXME note nrf52840dk build is for some reason only generating a BIN file but not a HEX file nrf52840dk-geeksville is fine

View File

@@ -103,13 +103,13 @@ debug_init_break = tbreak setup
build_flags =
${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
-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 =
${arduino_base.lib_deps}
${networking_base.lib_deps}
${environmental_base.lib_deps}
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
lorol/LittleFS_esp32@^1.0.6
https://github.com/meshtastic/AXP202X_Library.git#8404abb6d4b486748636bc6ad72d2a47baaf5460

View File

@@ -144,8 +144,15 @@ class ButtonThread : public concurrency::OSThread
screen->startShutdownScreen();
DEBUG_MSG("Shutdown from long press");
playBeep();
#ifdef PIN_LED1
ledOff(PIN_LED1);
#endif
#ifdef PIN_LED2
ledOff(PIN_LED2);
#endif
#ifdef PIN_LED3
ledOff(PIN_LED3);
#endif
shutdown_on_long_stop = true;
}
#endif

View File

@@ -1,6 +1,46 @@
#include "configuration.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)
{
#ifdef FSCom

View File

@@ -31,5 +31,6 @@ using namespace Adafruit_LittleFS_Namespace;
#endif
void fsInit();
bool renameFile(const char* pathFrom, const char* pathTo);
void listDir(const char * dirname, uint8_t levels);
void rmDir(const char * dirname);

View File

@@ -62,9 +62,9 @@ PhoneAPI *bluetoothPhoneAPI;
class ESP32BluetoothToRadioCallback : public NimBLECharacteristicCallbacks {
virtual void onWrite(NimBLECharacteristic *pCharacteristic) {
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());
}
};

View File

@@ -70,6 +70,8 @@
#define HW_VENDOR HardwareModel_NANO_G1
#elif defined(M5STACK)
#define HW_VENDOR HardwareModel_M5STACK
#elif defined(STATION_G1)
#define HW_VENDOR HardwareModel_STATION_G1
#endif
//
@@ -101,3 +103,4 @@
#endif
#define SERIAL0_RX_GPIO 3 // Always GPIO3 on ESP32

View File

@@ -330,7 +330,7 @@ int32_t GPS::runOnce()
if(devicestate.did_gps_reset && (millis() > 60000) && !hasFlow()) {
DEBUG_MSG("GPS is not communicating, trying factory reset on next bootup.\n");
devicestate.did_gps_reset = false;
nodeDB.saveToDisk();
nodeDB.saveDeviceStateToDisk();
}
#endif
}

View File

@@ -64,6 +64,11 @@ namespace graphics
static FrameCallback normalFrames[MAX_NUM_NODES + NUM_EXTRA_FRAMES];
static uint32_t targetFramerate = IDLE_FRAMERATE;
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
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)
{
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;
y = ry;
@@ -609,8 +614,10 @@ class Point
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;
y *= f;
y *= -f;
}
};
@@ -682,16 +689,21 @@ static void drawNodeHeading(OLEDDisplay *display, int16_t compassX, int16_t comp
drawLine(display, rightArrow, tip);
}
// Draw the compass heading
static void drawCompassHeading(OLEDDisplay *display, int16_t compassX, int16_t compassY, float myHeading)
// Draw north
static void drawCompassNorth(OLEDDisplay *display, int16_t compassX, int16_t compassY, float myHeading)
{
Point N1(-0.04f, -0.65f), N2(0.04f, -0.65f);
Point N3(-0.04f, -0.55f), N4(0.04f, -0.55f);
//If north is supposed to be at the top of the compass we want rotation to be +0
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};
for (int i = 0; i < 4; i++) {
rosePoints[i]->rotate(myHeading);
rosePoints[i]->scale(-1 * COMPASS_DIAM);
// North on compass will be negative of heading
rosePoints[i]->rotate(-myHeading);
rosePoints[i]->scale(COMPASS_DIAM);
rosePoints[i]->translate(compassX, compassY);
}
drawLine(display, N1, N3);
@@ -762,7 +774,7 @@ static void drawNodeInfo(OLEDDisplay *display, OLEDDisplayUiState *state, int16_
if (ourNode && hasPosition(ourNode)) {
Position &op = ourNode->position;
float myHeading = estimatedHeading(DegD(op.latitude_i), DegD(op.longitude_i));
drawCompassHeading(display, compassX, compassY, myHeading);
drawCompassNorth(display, compassX, compassY, myHeading);
if (hasPosition(node)) {
// display direction toward node
@@ -775,12 +787,13 @@ static void drawNodeInfo(OLEDDisplay *display, OLEDDisplayUiState *state, int16_
else
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 =
GeoCoord::bearing(DegD(p.latitude_i), DegD(p.longitude_i), DegD(op.latitude_i), DegD(op.longitude_i));
float headingRadian = bearingToOther - myHeading;
drawNodeHeading(display, compassX, compassY, headingRadian);
GeoCoord::bearing(DegD(op.latitude_i), DegD(op.longitude_i), DegD(p.latitude_i), DegD(p.longitude_i));
// If the top of the compass is a static north then bearingToOther can be drawn on the compass directly
// 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)
@@ -935,9 +948,11 @@ void Screen::setup()
handleSetOn(true);
// 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();
#ifndef USE_EINK
ui.update();
#endif
serialSinceMsec = millis();
// Subscribe to status updates
@@ -1355,7 +1370,7 @@ void DebugInfo::drawFrameWiFi(OLEDDisplay *display, OLEDDisplayUiState *state, i
if (isSoftAPForced()) {
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"));
} else if (WiFi.status() != WL_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;
*/
if (WiFi.status() == WL_CONNECTED || isSoftAPForced() || config.wifi.ap_mode) {
if (config.wifi.ap_mode || isSoftAPForced()) {
if (WiFi.status() == WL_CONNECTED || isSoftAPForced() || config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPoint || config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPointHidden) {
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()));
// 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 {
if (config.wifi.ap_mode) {
if (config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPoint || config.wifi.mode == Config_WiFiConfig_WiFiMode_AccessPointHidden) {
if ((millis() / 10000) % 2) {
display->drawString(x, y + FONT_HEIGHT_SMALL * 2, "SSID: " + String(wifiName));
} else {
@@ -1665,4 +1680,5 @@ int Screen::handleUIFrameEvent(const UIFrameEvent *event)
}
} // namespace graphics
#endif // HAS_SCREEN
#endif // HAS_SCREEN

View File

@@ -414,7 +414,7 @@ bool saveProto(const char *filename, size_t protoSize, size_t objSize, const pb_
// brief window of risk here ;-)
if (FSCom.exists(filename) && !FSCom.remove(filename))
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");
} else {
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()
{
if (!devicestate.no_save) {

View File

@@ -44,7 +44,7 @@ class NodeDB
void init();
/// write to flash
void saveToDisk(), saveChannelsToDisk();
void saveToDisk(), saveChannelsToDisk(), saveDeviceStateToDisk();
/** Reinit radio config if needed, because either:
* a) sometimes a buggy android app might send us bogus settings or

View File

@@ -34,3 +34,4 @@ PB_BIND(Config_LoRaConfig, Config_LoRaConfig, 2)

View File

@@ -51,6 +51,12 @@ typedef enum _Config_PowerConfig_ChargeCurrent {
Config_PowerConfig_ChargeCurrent_MA1320 = 16
} 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 {
Config_DisplayConfig_GpsCoordinateFormat_GpsFormatDec = 0,
Config_DisplayConfig_GpsCoordinateFormat_GpsFormatDMS = 1,
@@ -99,6 +105,7 @@ typedef struct _Config_DisplayConfig {
uint32_t screen_on_secs;
Config_DisplayConfig_GpsCoordinateFormat gps_format;
uint32_t auto_screen_carousel_secs;
bool compass_north_top;
} Config_DisplayConfig;
typedef struct _Config_LoRaConfig {
@@ -138,10 +145,10 @@ typedef struct _Config_PowerConfig {
} Config_PowerConfig;
typedef struct _Config_WiFiConfig {
bool enabled;
Config_WiFiConfig_WiFiMode mode;
char ssid[33];
char psk[64];
bool ap_mode;
bool ap_hidden;
} Config_WiFiConfig;
typedef struct _Config {
@@ -170,6 +177,10 @@ typedef struct _Config {
#define _Config_PowerConfig_ChargeCurrent_MAX Config_PowerConfig_ChargeCurrent_MA1320
#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_MAX Config_DisplayConfig_GpsCoordinateFormat_GpsFormatOSGR
#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_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_WiFiConfig_init_default {"", "", 0, 0}
#define Config_DisplayConfig_init_default {0, _Config_DisplayConfig_GpsCoordinateFormat_MIN, 0}
#define Config_WiFiConfig_init_default {0, _Config_WiFiConfig_WiFiMode_MIN, "", ""}
#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_init_zero {0, {Config_DeviceConfig_init_zero}}
#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_PowerConfig_init_zero {_Config_PowerConfig_ChargeCurrent_MIN, 0, 0, 0, 0, 0, 0, 0, 0}
#define Config_WiFiConfig_init_zero {"", "", 0, 0}
#define Config_DisplayConfig_init_zero {0, _Config_DisplayConfig_GpsCoordinateFormat_MIN, 0}
#define Config_WiFiConfig_init_zero {0, _Config_WiFiConfig_WiFiMode_MIN, "", ""}
#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}}
/* 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_gps_format_tag 2
#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_modem_preset_tag 2
#define Config_LoRaConfig_bandwidth_tag 3
@@ -238,10 +250,10 @@ extern "C" {
#define Config_PowerConfig_sds_secs_tag 10
#define Config_PowerConfig_ls_secs_tag 11
#define Config_PowerConfig_min_wake_secs_tag 12
#define Config_WiFiConfig_ssid_tag 1
#define Config_WiFiConfig_psk_tag 2
#define Config_WiFiConfig_ap_mode_tag 3
#define Config_WiFiConfig_ap_hidden_tag 4
#define Config_WiFiConfig_enabled_tag 1
#define Config_WiFiConfig_mode_tag 2
#define Config_WiFiConfig_ssid_tag 3
#define Config_WiFiConfig_psk_tag 4
#define Config_device_tag 1
#define Config_position_tag 2
#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_WiFiConfig_FIELDLIST(X, a) \
X(a, STATIC, SINGULAR, STRING, ssid, 1) \
X(a, STATIC, SINGULAR, STRING, psk, 2) \
X(a, STATIC, SINGULAR, BOOL, ap_mode, 3) \
X(a, STATIC, SINGULAR, BOOL, ap_hidden, 4)
X(a, STATIC, SINGULAR, BOOL, enabled, 1) \
X(a, STATIC, SINGULAR, UENUM, mode, 2) \
X(a, STATIC, SINGULAR, STRING, ssid, 3) \
X(a, STATIC, SINGULAR, STRING, psk, 4)
#define Config_WiFiConfig_CALLBACK NULL
#define Config_WiFiConfig_DEFAULT NULL
#define Config_DisplayConfig_FIELDLIST(X, a) \
X(a, STATIC, SINGULAR, UINT32, screen_on_secs, 1) \
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_DEFAULT NULL
@@ -347,7 +360,7 @@ extern const pb_msgdesc_t Config_LoRaConfig_msg;
/* Maximum encoded size of messages (where known) */
#define Config_DeviceConfig_size 42
#define Config_DisplayConfig_size 14
#define Config_DisplayConfig_size 16
#define Config_LoRaConfig_size 67
#define Config_PositionConfig_size 30
#define Config_PowerConfig_size 45

View File

@@ -138,7 +138,7 @@ extern const pb_msgdesc_t LocalModuleConfig_msg;
#define LocalModuleConfig_fields &LocalModuleConfig_msg
/* Maximum encoded size of messages (where known) */
#define LocalConfig_size 319
#define LocalConfig_size 321
#define LocalModuleConfig_size 268
#ifdef __cplusplus

View File

@@ -71,6 +71,8 @@ typedef enum _HardwareModel {
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/ */
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. */
HardwareModel_PRIVATE_HW = 255
} HardwareModel;

View File

@@ -610,7 +610,7 @@ void handleReport(HTTPRequest *req, HTTPResponse *res)
// data->wifi
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());
} else {
ipStr = String(WiFi.localIP().toString());

View File

@@ -191,10 +191,14 @@ bool initWifi(bool forceSoftAP)
if (forceSoftAP) {
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");
} 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");
} else {
DEBUG_MSG("WiFi ... WiFi Disabled\n");
}
createSSLCert();
@@ -203,7 +207,7 @@ bool initWifi(bool forceSoftAP)
wifiPsw = NULL;
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);
WiFi.onEvent(WiFiEvent);
@@ -218,7 +222,7 @@ bool initWifi(bool forceSoftAP)
} else {
// 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
int ok = WiFi.softAP(wifiName, wifiPsw, 1, 1, 4);
@@ -373,7 +377,7 @@ static void WiFiEvent(WiFiEvent_t event)
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();
}
}

View File

@@ -44,4 +44,5 @@ void RoutingModule::sendAckNak(Routing_Error err, NodeNum to, PacketId idFrom, C
RoutingModule::RoutingModule() : ProtobufModule("routing", PortNum_ROUTING_APP, Routing_fields)
{
isPromiscuous = true;
encryptedOk = true;
}

View File

@@ -21,8 +21,15 @@ void powerCommandsCheck()
if (shutdownAtMsec) {
screen->startShutdownScreen();
playBeep();
#ifdef PIN_LED1
ledOff(PIN_LED1);
#endif
#ifdef PIN_LED2
ledOff(PIN_LED2);
#endif
#ifdef PIN_LED3
ledOff(PIN_LED3);
#endif
}
#endif

View 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

View 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

View File

@@ -1,4 +1,4 @@
[VERSION]
major = 1
minor = 3
build = 28
build = 32