Merge branch 'dev' into multibyte-paths
This commit is contained in:
@@ -41,7 +41,7 @@
|
|||||||
"name": "LilyGo T-Beam supreme (8MB Flash 8MB PSRAM)",
|
"name": "LilyGo T-Beam supreme (8MB Flash 8MB PSRAM)",
|
||||||
"upload": {
|
"upload": {
|
||||||
"flash_size": "8MB",
|
"flash_size": "8MB",
|
||||||
"maximum_ram_size": 327680,
|
"maximum_ram_size": 8388608,
|
||||||
"maximum_size": 8388608,
|
"maximum_size": 8388608,
|
||||||
"require_upload_port": true,
|
"require_upload_port": true,
|
||||||
"speed": 460800
|
"speed": 460800
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ public:
|
|||||||
virtual uint32_t getGpio() { return 0; }
|
virtual uint32_t getGpio() { return 0; }
|
||||||
virtual void setGpio(uint32_t values) {}
|
virtual void setGpio(uint32_t values) {}
|
||||||
virtual uint8_t getStartupReason() const = 0;
|
virtual uint8_t getStartupReason() const = 0;
|
||||||
|
virtual bool getBootloaderVersion(char* version, size_t max_len) { return false; }
|
||||||
virtual bool startOTAUpdate(const char* id, char reply[]) { return false; } // not supported
|
virtual bool startOTAUpdate(const char* id, char reply[]) { return false; } // not supported
|
||||||
|
|
||||||
// Power management interface (boards with power management override these)
|
// Power management interface (boards with power management override these)
|
||||||
|
|||||||
@@ -362,6 +362,17 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
|
|||||||
} else if (memcmp(config, "bridge.secret", 13) == 0) {
|
} else if (memcmp(config, "bridge.secret", 13) == 0) {
|
||||||
sprintf(reply, "> %s", _prefs->bridge_secret);
|
sprintf(reply, "> %s", _prefs->bridge_secret);
|
||||||
#endif
|
#endif
|
||||||
|
} else if (memcmp(config, "bootloader.ver", 14) == 0) {
|
||||||
|
#ifdef NRF52_PLATFORM
|
||||||
|
char ver[32];
|
||||||
|
if (_board->getBootloaderVersion(ver, sizeof(ver))) {
|
||||||
|
sprintf(reply, "> %s", ver);
|
||||||
|
} else {
|
||||||
|
strcpy(reply, "> unknown");
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
strcpy(reply, "ERROR: unsupported");
|
||||||
|
#endif
|
||||||
} else if (memcmp(config, "adc.multiplier", 14) == 0) {
|
} else if (memcmp(config, "adc.multiplier", 14) == 0) {
|
||||||
float adc_mult = _board->getAdcMultiplier();
|
float adc_mult = _board->getAdcMultiplier();
|
||||||
if (adc_mult == 0.0f) {
|
if (adc_mult == 0.0f) {
|
||||||
|
|||||||
@@ -297,6 +297,25 @@ float NRF52Board::getMCUTemperature() {
|
|||||||
return temp * 0.25f; // Convert to *C
|
return temp * 0.25f; // Convert to *C
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool NRF52Board::getBootloaderVersion(char* out, size_t max_len) {
|
||||||
|
static const char BOOTLOADER_MARKER[] = "UF2 Bootloader ";
|
||||||
|
const uint8_t* flash = (const uint8_t*)0x000FB000; // earliest known info.txt location is 0xFB90B, latest is 0xFCC4B
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < 0x3000 - (sizeof(BOOTLOADER_MARKER) - 1); i++) {
|
||||||
|
if (memcmp(&flash[i], BOOTLOADER_MARKER, sizeof(BOOTLOADER_MARKER) - 1) == 0) {
|
||||||
|
const char* ver = (const char*)&flash[i + sizeof(BOOTLOADER_MARKER) - 1];
|
||||||
|
size_t len = 0;
|
||||||
|
while (len < max_len - 1 && ver[len] != '\0' && ver[len] != ' ' && ver[len] != '\n' && ver[len] != '\r') {
|
||||||
|
out[len] = ver[len];
|
||||||
|
len++;
|
||||||
|
}
|
||||||
|
out[len] = '\0';
|
||||||
|
return len > 0; // bootloader string is non-empty
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool NRF52Board::startOTAUpdate(const char *id, char reply[]) {
|
bool NRF52Board::startOTAUpdate(const char *id, char reply[]) {
|
||||||
// Config the peripheral connection with maximum bandwidth
|
// Config the peripheral connection with maximum bandwidth
|
||||||
// more SRAM required by SoftDevice
|
// more SRAM required by SoftDevice
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ public:
|
|||||||
virtual uint8_t getStartupReason() const override { return startup_reason; }
|
virtual uint8_t getStartupReason() const override { return startup_reason; }
|
||||||
virtual float getMCUTemperature() override;
|
virtual float getMCUTemperature() override;
|
||||||
virtual void reboot() override { NVIC_SystemReset(); }
|
virtual void reboot() override { NVIC_SystemReset(); }
|
||||||
|
virtual bool getBootloaderVersion(char* version, size_t max_len) override;
|
||||||
virtual bool startOTAUpdate(const char *id, char reply[]) override;
|
virtual bool startOTAUpdate(const char *id, char reply[]) override;
|
||||||
virtual void sleep(uint32_t secs) override;
|
virtual void sleep(uint32_t secs) override;
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ PacketQueue::PacketQueue(int max_entries) {
|
|||||||
int PacketQueue::countBefore(uint32_t now) const {
|
int PacketQueue::countBefore(uint32_t now) const {
|
||||||
int n = 0;
|
int n = 0;
|
||||||
for (int j = 0; j < _num; j++) {
|
for (int j = 0; j < _num; j++) {
|
||||||
if (_schedule_table[j] > now) continue; // scheduled for future... ignore for now
|
if ((int32_t)(_schedule_table[j] - now) > 0) continue; // scheduled for future... ignore for now
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
return n;
|
return n;
|
||||||
@@ -21,7 +21,7 @@ mesh::Packet* PacketQueue::get(uint32_t now) {
|
|||||||
uint8_t min_pri = 0xFF;
|
uint8_t min_pri = 0xFF;
|
||||||
int best_idx = -1;
|
int best_idx = -1;
|
||||||
for (int j = 0; j < _num; j++) {
|
for (int j = 0; j < _num; j++) {
|
||||||
if (_schedule_table[j] > now) continue; // scheduled for future... ignore for now
|
if ((int32_t)(_schedule_table[j] - now) > 0) continue; // scheduled for future... ignore for now
|
||||||
if (_pri_table[j] < min_pri) { // select most important priority amongst non-future entries
|
if (_pri_table[j] < min_pri) { // select most important priority amongst non-future entries
|
||||||
min_pri = _pri_table[j];
|
min_pri = _pri_table[j];
|
||||||
best_idx = j;
|
best_idx = j;
|
||||||
@@ -55,15 +55,15 @@ mesh::Packet* PacketQueue::removeByIdx(int i) {
|
|||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PacketQueue::add(mesh::Packet* packet, uint8_t priority, uint32_t scheduled_for) {
|
bool PacketQueue::add(mesh::Packet* packet, uint8_t priority, uint32_t scheduled_for) {
|
||||||
if (_num == _size) {
|
if (_num == _size) {
|
||||||
// TODO: log "FATAL: queue is full!"
|
return false;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
_table[_num] = packet;
|
_table[_num] = packet;
|
||||||
_pri_table[_num] = priority;
|
_pri_table[_num] = priority;
|
||||||
_schedule_table[_num] = scheduled_for;
|
_schedule_table[_num] = scheduled_for;
|
||||||
_num++;
|
_num++;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
StaticPoolPacketManager::StaticPoolPacketManager(int pool_size): unused(pool_size), send_queue(pool_size), rx_queue(pool_size) {
|
StaticPoolPacketManager::StaticPoolPacketManager(int pool_size): unused(pool_size), send_queue(pool_size), rx_queue(pool_size) {
|
||||||
@@ -82,7 +82,10 @@ void StaticPoolPacketManager::free(mesh::Packet* packet) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void StaticPoolPacketManager::queueOutbound(mesh::Packet* packet, uint8_t priority, uint32_t scheduled_for) {
|
void StaticPoolPacketManager::queueOutbound(mesh::Packet* packet, uint8_t priority, uint32_t scheduled_for) {
|
||||||
send_queue.add(packet, priority, scheduled_for);
|
if (!send_queue.add(packet, priority, scheduled_for)) {
|
||||||
|
MESH_DEBUG_PRINTLN("queueOutbound: send queue full, dropping packet");
|
||||||
|
free(packet);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mesh::Packet* StaticPoolPacketManager::getNextOutbound(uint32_t now) {
|
mesh::Packet* StaticPoolPacketManager::getNextOutbound(uint32_t now) {
|
||||||
@@ -106,7 +109,10 @@ mesh::Packet* StaticPoolPacketManager::removeOutboundByIdx(int i) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void StaticPoolPacketManager::queueInbound(mesh::Packet* packet, uint32_t scheduled_for) {
|
void StaticPoolPacketManager::queueInbound(mesh::Packet* packet, uint32_t scheduled_for) {
|
||||||
rx_queue.add(packet, 0, scheduled_for);
|
if (!rx_queue.add(packet, 0, scheduled_for)) {
|
||||||
|
MESH_DEBUG_PRINTLN("queueInbound: rx queue full, dropping packet");
|
||||||
|
free(packet);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
mesh::Packet* StaticPoolPacketManager::getNextInbound(uint32_t now) {
|
mesh::Packet* StaticPoolPacketManager::getNextInbound(uint32_t now) {
|
||||||
return rx_queue.get(now);
|
return rx_queue.get(now);
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ class PacketQueue {
|
|||||||
public:
|
public:
|
||||||
PacketQueue(int max_entries);
|
PacketQueue(int max_entries);
|
||||||
mesh::Packet* get(uint32_t now);
|
mesh::Packet* get(uint32_t now);
|
||||||
void add(mesh::Packet* packet, uint8_t priority, uint32_t scheduled_for);
|
bool add(mesh::Packet* packet, uint8_t priority, uint32_t scheduled_for);
|
||||||
int count() const { return _num; }
|
int count() const { return _num; }
|
||||||
int countBefore(uint32_t now) const;
|
int countBefore(uint32_t now) const;
|
||||||
mesh::Packet* itemAt(int i) const { return _table[i]; }
|
mesh::Packet* itemAt(int i) const { return _table[i]; }
|
||||||
|
|||||||
@@ -43,6 +43,31 @@ lib_deps =
|
|||||||
stevemarple/MicroNMEA @ ^2.0.6
|
stevemarple/MicroNMEA @ ^2.0.6
|
||||||
adafruit/Adafruit ST7735 and ST7789 Library @ ^1.11.0
|
adafruit/Adafruit ST7735 and ST7789 Library @ ^1.11.0
|
||||||
|
|
||||||
|
[env:Heltec_Wireless_Tracker_companion_radio_usb]
|
||||||
|
extends = Heltec_tracker_base
|
||||||
|
build_flags =
|
||||||
|
${Heltec_tracker_base.build_flags}
|
||||||
|
-I src/helpers/ui
|
||||||
|
-I examples/companion_radio/ui-new
|
||||||
|
-D DISPLAY_ROTATION=1
|
||||||
|
-D DISPLAY_CLASS=ST7735Display
|
||||||
|
-D MAX_CONTACTS=350
|
||||||
|
-D MAX_GROUP_CHANNELS=40
|
||||||
|
; -D BLE_PIN_CODE=123456 ; HWT will use display for pin
|
||||||
|
; -D OFFLINE_QUEUE_SIZE=256
|
||||||
|
; -D BLE_DEBUG_LOGGING=1
|
||||||
|
; -D MESH_PACKET_LOGGING=1
|
||||||
|
; -D MESH_DEBUG=1
|
||||||
|
build_src_filter = ${Heltec_tracker_base.build_src_filter}
|
||||||
|
+<helpers/esp32/*.cpp>
|
||||||
|
+<helpers/ui/MomentaryButton.cpp>
|
||||||
|
+<../examples/companion_radio/*.cpp>
|
||||||
|
+<../examples/companion_radio/ui-new/*.cpp>
|
||||||
|
+<helpers/ui/ST7735Display.cpp>
|
||||||
|
lib_deps =
|
||||||
|
${Heltec_tracker_base.lib_deps}
|
||||||
|
densaugeo/base64 @ ~1.4.0
|
||||||
|
|
||||||
[env:Heltec_Wireless_Tracker_companion_radio_ble]
|
[env:Heltec_Wireless_Tracker_companion_radio_ble]
|
||||||
extends = Heltec_tracker_base
|
extends = Heltec_tracker_base
|
||||||
build_flags =
|
build_flags =
|
||||||
|
|||||||
@@ -26,7 +26,9 @@ build_src_filter = ${esp32_base.build_src_filter}
|
|||||||
+<helpers/ui/SH1106Display.cpp>
|
+<helpers/ui/SH1106Display.cpp>
|
||||||
+<helpers/esp32/TBeamBoard.cpp>
|
+<helpers/esp32/TBeamBoard.cpp>
|
||||||
+<helpers/sensors>
|
+<helpers/sensors>
|
||||||
board_build.partitions = min_spiffs.csv ; get around 4mb flash limit
|
board_build.partitions = default_8MB.csv
|
||||||
|
board_upload.flash_size = 8MB
|
||||||
|
board_upload.maximum_size = 8388608
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${esp32_base.lib_deps}
|
${esp32_base.lib_deps}
|
||||||
lewisxhe/XPowersLib @ ^0.2.7
|
lewisxhe/XPowersLib @ ^0.2.7
|
||||||
@@ -131,3 +133,27 @@ build_src_filter = ${T_Beam_S3_Supreme_SX1262.build_src_filter}
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${T_Beam_S3_Supreme_SX1262.lib_deps}
|
${T_Beam_S3_Supreme_SX1262.lib_deps}
|
||||||
densaugeo/base64 @ ~1.4.0
|
densaugeo/base64 @ ~1.4.0
|
||||||
|
|
||||||
|
[env:T_Beam_S3_Supreme_SX1262_companion_radio_wifi]
|
||||||
|
extends = T_Beam_S3_Supreme_SX1262
|
||||||
|
build_flags =
|
||||||
|
${T_Beam_S3_Supreme_SX1262.build_flags}
|
||||||
|
-I examples/companion_radio/ui-new
|
||||||
|
-D MAX_CONTACTS=350
|
||||||
|
-D MAX_GROUP_CHANNELS=40
|
||||||
|
-D OFFLINE_QUEUE_SIZE=256
|
||||||
|
-D WIFI_SSID='"Three_CA7C65"'
|
||||||
|
-D WIFI_PWD='"8hC45a66265eA3w"'
|
||||||
|
; -D WIFI_DEBUG_LOGGING=1
|
||||||
|
; -D MESH_PACKET_LOGGING=8
|
||||||
|
; -D MESH_DEBUG=1
|
||||||
|
; -D ARDUHAL_LOG_LEVEL=4
|
||||||
|
; -D CORE_DEBUG_LEVEL=4
|
||||||
|
build_src_filter = ${T_Beam_S3_Supreme_SX1262.build_src_filter}
|
||||||
|
+<helpers/esp32/*.cpp>
|
||||||
|
+<helpers/ui/MomentaryButton.cpp>
|
||||||
|
+<../examples/companion_radio/*.cpp>
|
||||||
|
+<../examples/companion_radio/ui-new/*.cpp>
|
||||||
|
lib_deps =
|
||||||
|
${T_Beam_S3_Supreme_SX1262.lib_deps}
|
||||||
|
densaugeo/base64 @ ~1.4.0
|
||||||
|
|||||||
Reference in New Issue
Block a user