Merge branch 'master' into nimble-lib-swap

This commit is contained in:
Ben Meadors 2021-12-18 15:16:39 -06:00 committed by GitHub
commit 727dcbc809
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 75 additions and 71 deletions

2
proto

@ -1 +1 @@
Subproject commit 10e6857b1bd4a03ec16ec5cbaadf4f28293ab9a5 Subproject commit 26389cfa05f4980f318cc5c4ddbe3770a7865251

View File

@ -243,6 +243,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define GPS_TX_PIN 12 // not connected //#define GPS_TX_PIN 12 // not connected
#define BUTTON_PIN 39 // The middle button GPIO on the T-Beam #define BUTTON_PIN 39 // The middle button GPIO on the T-Beam
#define EXT_NOTIFY_OUT 12 // Overridden default pin to use for Ext Notify Plugin (#975).
#define LORA_DIO0 26 // a No connect on the SX1262/SX1268 module #define LORA_DIO0 26 // a No connect on the SX1262/SX1268 module
#define LORA_RESET 23 // RST for SX1276, and for SX1262/SX1268 #define LORA_RESET 23 // RST for SX1276, and for SX1262/SX1268
@ -330,8 +331,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define GPS_RX_PIN 36 #define GPS_RX_PIN 36
#define GPS_TX_PIN 37 #define GPS_TX_PIN 37
#define BATTERY_PIN 35 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
#define I2C_SDA 4 // I2C pins for this board #define I2C_SDA 4 // I2C pins for this board
#define I2C_SCL 15 #define I2C_SCL 15

View File

@ -40,6 +40,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef NO_ESP32 #ifndef NO_ESP32
#include "mesh/http/WiFiAPClient.h" #include "mesh/http/WiFiAPClient.h"
#include "esp_task_wdt.h"
#endif #endif
using namespace meshtastic; /** @todo remove */ using namespace meshtastic; /** @todo remove */
@ -155,8 +156,17 @@ static void drawSSLScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int16
display->setFont(FONT_SMALL); display->setFont(FONT_SMALL);
display->drawString(64 + x, y, "Creating SSL certificate"); display->drawString(64 + x, y, "Creating SSL certificate");
#ifndef NO_ESP32
yield();
esp_task_wdt_reset();
#endif
display->setFont(FONT_SMALL); display->setFont(FONT_SMALL);
display->drawString(64 + x, FONT_HEIGHT_SMALL + y + 2, "Please wait..."); if ((millis() / 1000) % 2) {
display->drawString(64 + x, FONT_HEIGHT_SMALL + y + 2, "Please wait . . .");
} else {
display->drawString(64 + x, FONT_HEIGHT_SMALL + y + 2, "Please wait . . ");
}
} }
#ifdef HAS_EINK #ifdef HAS_EINK
@ -216,7 +226,11 @@ static void drawFrameFirmware(OLEDDisplay *display, OLEDDisplayUiState *state, i
display->drawString(64 + x, y, "Updating"); display->drawString(64 + x, y, "Updating");
display->setFont(FONT_SMALL); display->setFont(FONT_SMALL);
display->drawString(64 + x, FONT_HEIGHT_SMALL + y + 2, "Please wait..."); if ((millis() / 1000) % 2) {
display->drawString(64 + x, FONT_HEIGHT_SMALL + y + 2, "Please wait . . .");
} else {
display->drawString(64 + x, FONT_HEIGHT_SMALL + y + 2, "Please wait . . ");
}
// display->setFont(FONT_LARGE); // display->setFont(FONT_LARGE);
// display->drawString(64 + x, 26 + y, btPIN); // display->drawString(64 + x, 26 + y, btPIN);
@ -689,6 +703,7 @@ void _screen_header()
Screen::Screen(uint8_t address, int sda, int scl) : OSThread("Screen"), cmdQueue(32), dispdev(address, sda, scl), ui(&dispdev) Screen::Screen(uint8_t address, int sda, int scl) : OSThread("Screen"), cmdQueue(32), dispdev(address, sda, scl), ui(&dispdev)
{ {
address_found = address;
cmdQueue.setReader(this); cmdQueue.setReader(this);
} }
@ -926,10 +941,12 @@ void Screen::drawDebugInfoWiFiTrampoline(OLEDDisplay *display, OLEDDisplayUiStat
* it is expected that this will be used during the boot phase */ * it is expected that this will be used during the boot phase */
void Screen::setSSLFrames() void Screen::setSSLFrames()
{ {
DEBUG_MSG("showing SSL frames\n"); if (address_found) {
static FrameCallback sslFrames[] = {drawSSLScreen}; // DEBUG_MSG("showing SSL frames\n");
ui.setFrames(sslFrames, 1); static FrameCallback sslFrames[] = {drawSSLScreen};
ui.update(); ui.setFrames(sslFrames, 1);
ui.update();
}
} }
// restore our regular frame list // restore our regular frame list

View File

@ -97,6 +97,8 @@ class Screen : public concurrency::OSThread
Screen(const Screen &) = delete; Screen(const Screen &) = delete;
Screen &operator=(const Screen &) = delete; Screen &operator=(const Screen &) = delete;
uint8_t address_found;
/// Initializes the UI, turns on the display, starts showing boot screen. /// Initializes the UI, turns on the display, starts showing boot screen.
// //
// Not thread safe - must be called before any other methods are called. // Not thread safe - must be called before any other methods are called.

View File

@ -5,6 +5,9 @@
#include <HTTPBodyParser.hpp> #include <HTTPBodyParser.hpp>
#include <HTTPMultipartBodyParser.hpp> #include <HTTPMultipartBodyParser.hpp>
#include <HTTPURLEncodedBodyParser.hpp> #include <HTTPURLEncodedBodyParser.hpp>
#include "sleep.h"
#include "graphics/Screen.h"
#include <WebServer.h> #include <WebServer.h>
#include <WiFi.h> #include <WiFi.h>
@ -78,13 +81,15 @@ static void taskCreateCert(void *parameter)
{ {
prefs.begin("MeshtasticHTTPS", false); prefs.begin("MeshtasticHTTPS", false);
#if 0
// Delete the saved certs (used in debugging) // Delete the saved certs (used in debugging)
if (0) { DEBUG_MSG("Deleting any saved SSL keys ...\n");
DEBUG_MSG("Deleting any saved SSL keys ...\n"); // prefs.clear();
// prefs.clear(); prefs.remove("PK");
prefs.remove("PK"); prefs.remove("cert");
prefs.remove("cert"); #endif
}
DEBUG_MSG("Checking if we have a previously saved SSL Certificate.\n"); DEBUG_MSG("Checking if we have a previously saved SSL Certificate.\n");
@ -103,16 +108,12 @@ static void taskCreateCert(void *parameter)
cert = new SSLCert(certBuffer, certLen, pkBuffer, pkLen); cert = new SSLCert(certBuffer, certLen, pkBuffer, pkLen);
DEBUG_MSG("Retrieved Private Key: %d Bytes\n", cert->getPKLength()); DEBUG_MSG("Retrieved Private Key: %d Bytes\n", cert->getPKLength());
// DEBUG_MSG("Retrieved Private Key: " + String(cert->getPKLength()) + " Bytes");
// for (int i = 0; i < cert->getPKLength(); i++)
// Serial.print(cert->getPKData()[i], HEX);
// Serial.println();
DEBUG_MSG("Retrieved Certificate: %d Bytes\n", cert->getCertLength()); DEBUG_MSG("Retrieved Certificate: %d Bytes\n", cert->getCertLength());
// for (int i = 0; i < cert->getCertLength(); i++)
// Serial.print(cert->getCertData()[i], HEX);
// Serial.println();
} else { } else {
setCPUFast(true);
DEBUG_MSG("Creating the certificate. This may take a while. Please wait...\n"); DEBUG_MSG("Creating the certificate. This may take a while. Please wait...\n");
yield(); yield();
cert = new SSLCert(); cert = new SSLCert();
@ -144,6 +145,9 @@ static void taskCreateCert(void *parameter)
prefs.putBytes("PK", (uint8_t *)cert->getPKData(), cert->getPKLength()); prefs.putBytes("PK", (uint8_t *)cert->getPKData(), cert->getPKLength());
prefs.putBytes("cert", (uint8_t *)cert->getCertData(), cert->getCertLength()); prefs.putBytes("cert", (uint8_t *)cert->getCertData(), cert->getCertLength());
} }
setCPUFast(false);
} }
isCertReady = true; isCertReady = true;
@ -154,6 +158,7 @@ static void taskCreateCert(void *parameter)
void createSSLCert() void createSSLCert()
{ {
bool runLoop = false;
if (isWifiAvailable() && !isCertReady) { if (isWifiAvailable() && !isCertReady) {
// Create a new process just to handle creating the cert. // Create a new process just to handle creating the cert.
@ -161,21 +166,28 @@ void createSSLCert()
// jm@casler.org (Oct 2020) // jm@casler.org (Oct 2020)
xTaskCreate(taskCreateCert, /* Task function. */ xTaskCreate(taskCreateCert, /* Task function. */
"createCert", /* String with name of task. */ "createCert", /* String with name of task. */
16384, /* Stack size in bytes. */ //16384, /* Stack size in bytes. */
8192, /* Stack size in bytes. */
NULL, /* Parameter passed as input of the task */ NULL, /* Parameter passed as input of the task */
16, /* Priority of the task. */ 16, /* Priority of the task. */
NULL); /* Task handle. */ NULL); /* Task handle. */
DEBUG_MSG("Waiting for SSL Cert to be generated.\n"); DEBUG_MSG("Waiting for SSL Cert to be generated.\n");
int seconds = 0;
while (!isCertReady) { while (!isCertReady) {
DEBUG_MSG("."); if ((millis() / 500) % 2) {
delay(1000); if (runLoop) {
yield(); DEBUG_MSG(".");
esp_task_wdt_reset();
seconds++; yield();
if ((seconds == 3) && screen) { esp_task_wdt_reset();
screen->setSSLFrames();
if (millis() / 1000 >= 3) {
screen->setSSLFrames();
}
}
runLoop = false;
} else {
runLoop = true;
} }
} }
DEBUG_MSG("SSL Cert Ready!\n"); DEBUG_MSG("SSL Cert Ready!\n");
@ -199,40 +211,6 @@ void initWebServer()
{ {
DEBUG_MSG("Initializing Web Server ...\n"); DEBUG_MSG("Initializing Web Server ...\n");
#if 0
// this seems to be a copypaste dup of taskCreateCert
prefs.begin("MeshtasticHTTPS", false);
size_t pkLen = prefs.getBytesLength("PK");
size_t certLen = prefs.getBytesLength("cert");
DEBUG_MSG("Checking if we have a previously saved SSL Certificate.\n");
if (pkLen && certLen) {
uint8_t *pkBuffer = new uint8_t[pkLen];
prefs.getBytes("PK", pkBuffer, pkLen);
uint8_t *certBuffer = new uint8_t[certLen];
prefs.getBytes("cert", certBuffer, certLen);
cert = new SSLCert(certBuffer, certLen, pkBuffer, pkLen);
DEBUG_MSG("Retrieved Private Key: %d Bytes\n", cert->getPKLength());
// DEBUG_MSG("Retrieved Private Key: " + String(cert->getPKLength()) + " Bytes");
// for (int i = 0; i < cert->getPKLength(); i++)
// Serial.print(cert->getPKData()[i], HEX);
// Serial.println();
DEBUG_MSG("Retrieved Certificate: %d Bytes\n", cert->getCertLength());
// for (int i = 0; i < cert->getCertLength(); i++)
// Serial.print(cert->getCertData()[i], HEX);
// Serial.println();
} else {
DEBUG_MSG("Web Server started without SSL keys! How did this happen?\n");
}
#endif
// We can now use the new certificate to setup our server as usual. // We can now use the new certificate to setup our server as usual.
secureServer = new HTTPSServer(cert); secureServer = new HTTPSServer(cert);
insecureServer = new HTTPServer(); insecureServer = new HTTPServer();

View File

@ -148,14 +148,22 @@ int32_t PositionPlugin::runOnce()
NodeInfo *node = service.refreshMyNodeInfo(); // should guarantee there is now a position NodeInfo *node = service.refreshMyNodeInfo(); // should guarantee there is now a position
if (node->has_position && (node->position.latitude_i != 0 || node->position.longitude_i != 0)) { if (node->has_position && (node->position.latitude_i != 0 || node->position.longitude_i != 0)) {
// The minimum distance to travel before we are able to send a new position packet.
const uint32_t distanceTravelMinimum = 30;
// The minimum time that would pass before we are able to send a new position packet.
const uint32_t timeTravelMinimum = 30;
// Determine the distance in meters between two points on the globe
float distance = GeoCoord::latLongToMeter(lastGpsLatitude * 1e-7, lastGpsLongitude * 1e-7, float distance = GeoCoord::latLongToMeter(lastGpsLatitude * 1e-7, lastGpsLongitude * 1e-7,
node->position.latitude_i * 1e-7, node->position.longitude_i * 1e-7); node->position.latitude_i * 1e-7, node->position.longitude_i * 1e-7);
// 2500 is a magic number. 50 is the minumum distance we want to travel before sending another position packet. // Yes, this has a bunch of magic numbers. Sorry. This is to make the scale non-linear.
uint32_t distanceTravel = ((2500 / myNodeInfo.bitrate) >= 50) ? (2500 / myNodeInfo.bitrate) : 50; const float distanceTravelMath = 1203 / (sqrt( pow(myNodeInfo.bitrate, 1.5) / 1.1 ) ) ;
uint32_t distanceTravel = (distanceTravelMath >= distanceTravelMinimum) ? distanceTravelMath : distanceTravelMinimum;
// 1500 is a magic number. 30 is the minumum interval between position packets // Yes, this has a bunch of magic numbers. Sorry.
uint32_t timeTravel = ((1500 / myNodeInfo.bitrate) >= 30) ? (1500 / myNodeInfo.bitrate) : 30; uint32_t timeTravel = ((1500 / myNodeInfo.bitrate) >= timeTravelMinimum) ? (1500 / myNodeInfo.bitrate) : timeTravelMinimum;
// If the distance traveled since the last update is greater than 100 meters // If the distance traveled since the last update is greater than 100 meters
// and it's been at least 60 seconds since the last update // and it's been at least 60 seconds since the last update

View File

@ -1,4 +1,4 @@
[VERSION] [VERSION]
major = 1 major = 1
minor = 2 minor = 2
build = 48 build = 49