mirror of
https://github.com/meshtastic/firmware.git
synced 2025-08-13 16:55:08 +00:00
Merge branch 'master' into rak_wismeshtag
This commit is contained in:
commit
1e8caba188
@ -55,7 +55,7 @@ lib_deps =
|
|||||||
# renovate: datasource=git-refs depName=libpax packageName=https://github.com/dbinfrago/libpax gitBranch=master
|
# renovate: datasource=git-refs depName=libpax packageName=https://github.com/dbinfrago/libpax gitBranch=master
|
||||||
https://github.com/dbinfrago/libpax/archive/3cdc0371c375676a97967547f4065607d4c53fd1.zip
|
https://github.com/dbinfrago/libpax/archive/3cdc0371c375676a97967547f4065607d4c53fd1.zip
|
||||||
# renovate: datasource=custom.pio depName=XPowersLib packageName=lewisxhe/library/XPowersLib
|
# renovate: datasource=custom.pio depName=XPowersLib packageName=lewisxhe/library/XPowersLib
|
||||||
lewisxhe/XPowersLib@^0.2.7
|
lewisxhe/XPowersLib@0.3.0
|
||||||
# renovate: datasource=git-refs depName=meshtastic-ESP32_Codec2 packageName=https://github.com/meshtastic/ESP32_Codec2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-ESP32_Codec2 packageName=https://github.com/meshtastic/ESP32_Codec2 gitBranch=master
|
||||||
https://github.com/meshtastic/ESP32_Codec2/archive/633326c78ac251c059ab3a8c430fcdf25b41672f.zip
|
https://github.com/meshtastic/ESP32_Codec2/archive/633326c78ac251c059ab3a8c430fcdf25b41672f.zip
|
||||||
# renovate: datasource=custom.pio depName=rweather/Crypto packageName=rweather/library/Crypto
|
# renovate: datasource=custom.pio depName=rweather/Crypto packageName=rweather/library/Crypto
|
||||||
|
@ -28,7 +28,7 @@ lib_deps =
|
|||||||
${environmental_extra.lib_deps}
|
${environmental_extra.lib_deps}
|
||||||
${radiolib_base.lib_deps}
|
${radiolib_base.lib_deps}
|
||||||
# renovate: datasource=custom.pio depName=XPowersLib packageName=lewisxhe/library/XPowersLib
|
# renovate: datasource=custom.pio depName=XPowersLib packageName=lewisxhe/library/XPowersLib
|
||||||
lewisxhe/XPowersLib@^0.2.7
|
lewisxhe/XPowersLib@0.3.0
|
||||||
# renovate: datasource=git-refs depName=meshtastic-ESP32_Codec2 packageName=https://github.com/meshtastic/ESP32_Codec2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-ESP32_Codec2 packageName=https://github.com/meshtastic/ESP32_Codec2 gitBranch=master
|
||||||
https://github.com/meshtastic/ESP32_Codec2/archive/633326c78ac251c059ab3a8c430fcdf25b41672f.zip
|
https://github.com/meshtastic/ESP32_Codec2/archive/633326c78ac251c059ab3a8c430fcdf25b41672f.zip
|
||||||
# renovate: datasource=custom.pio depName=rweather/Crypto packageName=rweather/library/Crypto
|
# renovate: datasource=custom.pio depName=rweather/Crypto packageName=rweather/library/Crypto
|
||||||
|
@ -87,6 +87,9 @@
|
|||||||
</screenshots>
|
</screenshots>
|
||||||
|
|
||||||
<releases>
|
<releases>
|
||||||
|
<release version="2.7.2" date="2025-07-04">
|
||||||
|
<url type="details">https://github.com/meshtastic/firmware/releases?q=tag%3Av2.7.2</url>
|
||||||
|
</release>
|
||||||
<release version="2.7.1" date="2025-06-27">
|
<release version="2.7.1" date="2025-06-27">
|
||||||
<url type="details">https://github.com/meshtastic/firmware/releases?q=tag%3Av2.7.1</url>
|
<url type="details">https://github.com/meshtastic/firmware/releases?q=tag%3Av2.7.1</url>
|
||||||
</release>
|
</release>
|
||||||
|
@ -11,7 +11,8 @@
|
|||||||
["0x239A", "0x8029"],
|
["0x239A", "0x8029"],
|
||||||
["0x239A", "0x0029"],
|
["0x239A", "0x0029"],
|
||||||
["0x239A", "0x002A"],
|
["0x239A", "0x002A"],
|
||||||
["0x239A", "0x802A"]
|
["0x239A", "0x802A"],
|
||||||
|
["0x2886", "0x0057"]
|
||||||
],
|
],
|
||||||
"usb_product": "T1000-E-BOOT",
|
"usb_product": "T1000-E-BOOT",
|
||||||
"mcu": "nrf52840",
|
"mcu": "nrf52840",
|
||||||
|
7
debian/changelog
vendored
7
debian/changelog
vendored
@ -1,4 +1,4 @@
|
|||||||
meshtasticd (2.7.1.0) UNRELEASED; urgency=medium
|
meshtasticd (2.7.2.0) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
[ Austin Lane ]
|
[ Austin Lane ]
|
||||||
* Initial packaging
|
* Initial packaging
|
||||||
@ -25,4 +25,7 @@ meshtasticd (2.7.1.0) UNRELEASED; urgency=medium
|
|||||||
[ ]
|
[ ]
|
||||||
* GitHub Actions Automatic version bump
|
* GitHub Actions Automatic version bump
|
||||||
|
|
||||||
-- <github-actions[bot]@users.noreply.github.com> Fri, 27 Jun 2025 20:12:21 +0000
|
[ ]
|
||||||
|
* GitHub Actions Automatic version bump
|
||||||
|
|
||||||
|
-- <github-actions[bot]@users.noreply.github.com> Fri, 04 Jul 2025 11:58:01 +0000
|
||||||
|
@ -109,7 +109,7 @@ lib_deps =
|
|||||||
[device-ui_base]
|
[device-ui_base]
|
||||||
lib_deps =
|
lib_deps =
|
||||||
# renovate: datasource=git-refs depName=meshtastic/device-ui packageName=https://github.com/meshtastic/device-ui gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic/device-ui packageName=https://github.com/meshtastic/device-ui gitBranch=master
|
||||||
https://github.com/meshtastic/device-ui/archive/4b7bf369adfa5a7bd419fa8293d21206576d52d0.zip
|
https://github.com/meshtastic/device-ui/archive/8c7092c73425adfda1aac8c6960df06cd85f6d92.zip
|
||||||
|
|
||||||
; Common libs for environmental measurements in telemetry module
|
; Common libs for environmental measurements in telemetry module
|
||||||
[environmental_base]
|
[environmental_base]
|
||||||
|
@ -1373,6 +1373,8 @@ int Screen::handleInputEvent(const InputEvent *event)
|
|||||||
this->ui->getUiState()->currentFrame == framesetInfo.positions.nodelist_hopsignal ||
|
this->ui->getUiState()->currentFrame == framesetInfo.positions.nodelist_hopsignal ||
|
||||||
this->ui->getUiState()->currentFrame == framesetInfo.positions.nodelist_bearings) {
|
this->ui->getUiState()->currentFrame == framesetInfo.positions.nodelist_bearings) {
|
||||||
menuHandler::nodeListMenu();
|
menuHandler::nodeListMenu();
|
||||||
|
} else if (this->ui->getUiState()->currentFrame == framesetInfo.positions.wifi) {
|
||||||
|
menuHandler::wifiBaseMenu();
|
||||||
}
|
}
|
||||||
} else if (event->inputEvent == INPUT_BROKER_BACK) {
|
} else if (event->inputEvent == INPUT_BROKER_BACK) {
|
||||||
showPrevFrame();
|
showPrevFrame();
|
||||||
|
@ -831,6 +831,44 @@ void menuHandler::numberTest()
|
|||||||
[](int number_picked) -> void { LOG_WARN("Nodenum: %u", number_picked); });
|
[](int number_picked) -> void { LOG_WARN("Nodenum: %u", number_picked); });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void menuHandler::wifiBaseMenu()
|
||||||
|
{
|
||||||
|
enum optionsNumbers { Back, Wifi_toggle };
|
||||||
|
|
||||||
|
static const char *optionsArray[] = {"Back", "WiFi Toggle"};
|
||||||
|
BannerOverlayOptions bannerOptions;
|
||||||
|
bannerOptions.message = "WiFi Menu";
|
||||||
|
bannerOptions.optionsArrayPtr = optionsArray;
|
||||||
|
bannerOptions.optionsCount = 2;
|
||||||
|
bannerOptions.bannerCallback = [](int selected) -> void {
|
||||||
|
if (selected == Wifi_toggle) {
|
||||||
|
menuQueue = wifi_toggle_menu;
|
||||||
|
screen->runNow();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
screen->showOverlayBanner(bannerOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
void menuHandler::wifiToggleMenu()
|
||||||
|
{
|
||||||
|
enum optionsNumbers { Back, Wifi_toggle };
|
||||||
|
|
||||||
|
static const char *optionsArray[] = {"Back", "Disable"};
|
||||||
|
BannerOverlayOptions bannerOptions;
|
||||||
|
bannerOptions.message = "Disable Wifi and\nEnable Bluetooth?";
|
||||||
|
bannerOptions.optionsArrayPtr = optionsArray;
|
||||||
|
bannerOptions.optionsCount = 2;
|
||||||
|
bannerOptions.bannerCallback = [](int selected) -> void {
|
||||||
|
if (selected == Wifi_toggle) {
|
||||||
|
config.network.wifi_enabled = false;
|
||||||
|
config.bluetooth.enabled = true;
|
||||||
|
service->reloadConfig(SEGMENT_CONFIG);
|
||||||
|
rebootAtMsec = (millis() + DEFAULT_REBOOT_SECONDS * 1000);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
screen->showOverlayBanner(bannerOptions);
|
||||||
|
}
|
||||||
|
|
||||||
void menuHandler::handleMenuSwitch(OLEDDisplay *display)
|
void menuHandler::handleMenuSwitch(OLEDDisplay *display)
|
||||||
{
|
{
|
||||||
if (menuQueue != menu_none)
|
if (menuQueue != menu_none)
|
||||||
@ -894,6 +932,9 @@ void menuHandler::handleMenuSwitch(OLEDDisplay *display)
|
|||||||
case number_test:
|
case number_test:
|
||||||
numberTest();
|
numberTest();
|
||||||
break;
|
break;
|
||||||
|
case wifi_toggle_menu:
|
||||||
|
wifiToggleMenu();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
menuQueue = menu_none;
|
menuQueue = menu_none;
|
||||||
}
|
}
|
||||||
|
@ -13,9 +13,7 @@ class menuHandler
|
|||||||
clock_face_picker,
|
clock_face_picker,
|
||||||
clock_menu,
|
clock_menu,
|
||||||
position_base_menu,
|
position_base_menu,
|
||||||
#if !MESHTASTIC_EXCLUDE_GPS
|
|
||||||
gps_toggle_menu,
|
gps_toggle_menu,
|
||||||
#endif
|
|
||||||
compass_point_north_menu,
|
compass_point_north_menu,
|
||||||
reset_node_db_menu,
|
reset_node_db_menu,
|
||||||
buzzermodemenupicker,
|
buzzermodemenupicker,
|
||||||
@ -26,7 +24,8 @@ class menuHandler
|
|||||||
add_favorite,
|
add_favorite,
|
||||||
remove_favorite,
|
remove_favorite,
|
||||||
test_menu,
|
test_menu,
|
||||||
number_test
|
number_test,
|
||||||
|
wifi_toggle_menu
|
||||||
};
|
};
|
||||||
static screenMenus menuQueue;
|
static screenMenus menuQueue;
|
||||||
|
|
||||||
@ -54,6 +53,8 @@ class menuHandler
|
|||||||
static void removeFavoriteMenu();
|
static void removeFavoriteMenu();
|
||||||
static void testMenu();
|
static void testMenu();
|
||||||
static void numberTest();
|
static void numberTest();
|
||||||
|
static void wifiBaseMenu();
|
||||||
|
static void wifiToggleMenu();
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace graphics
|
} // namespace graphics
|
@ -369,6 +369,14 @@ NodeDB::NodeDB()
|
|||||||
config.device.rebroadcast_mode = meshtastic_Config_DeviceConfig_RebroadcastMode_LOCAL_ONLY;
|
config.device.rebroadcast_mode = meshtastic_Config_DeviceConfig_RebroadcastMode_LOCAL_ONLY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !HAS_TFT
|
||||||
|
if (config.display.displaymode == meshtastic_Config_DisplayConfig_DisplayMode_COLOR) {
|
||||||
|
// On a device without MUI, this display mode makes no sense, and will break logic.
|
||||||
|
config.display.displaymode = meshtastic_Config_DisplayConfig_DisplayMode_DEFAULT;
|
||||||
|
config.bluetooth.enabled = true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (devicestateCRC != crc32Buffer(&devicestate, sizeof(devicestate)))
|
if (devicestateCRC != crc32Buffer(&devicestate, sizeof(devicestate)))
|
||||||
saveWhat |= SEGMENT_DEVICESTATE;
|
saveWhat |= SEGMENT_DEVICESTATE;
|
||||||
if (nodeDatabaseCRC != crc32Buffer(&nodeDatabase, sizeof(nodeDatabase)))
|
if (nodeDatabaseCRC != crc32Buffer(&nodeDatabase, sizeof(nodeDatabase)))
|
||||||
|
@ -10,6 +10,32 @@
|
|||||||
#include "aes-ccm.h"
|
#include "aes-ccm.h"
|
||||||
#if !MESHTASTIC_EXCLUDE_PKI
|
#if !MESHTASTIC_EXCLUDE_PKI
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constant-time comparison of two byte arrays
|
||||||
|
*
|
||||||
|
* @param a First byte array to compare
|
||||||
|
* @param b Second byte array to compare
|
||||||
|
* @param len Number of bytes to compare
|
||||||
|
* @return 0 if arrays are equal, -1 if different or if inputs are invalid
|
||||||
|
*/
|
||||||
|
static int constant_time_compare(const void *a_, const void *b_, size_t len)
|
||||||
|
{
|
||||||
|
/* Cast to volatile to prevent the compiler from optimizing out their comparison. */
|
||||||
|
const volatile uint8_t *volatile a = (const volatile uint8_t *volatile)a_;
|
||||||
|
const volatile uint8_t *volatile b = (const volatile uint8_t *volatile)b_;
|
||||||
|
if (len == 0)
|
||||||
|
return 0;
|
||||||
|
if (a == NULL || b == NULL)
|
||||||
|
return -1;
|
||||||
|
size_t i;
|
||||||
|
volatile uint8_t d = 0U;
|
||||||
|
for (i = 0U; i < len; i++) {
|
||||||
|
d |= (a[i] ^ b[i]);
|
||||||
|
}
|
||||||
|
/* Constant time bit arithmetic to convert d > 0 to -1 and d = 0 to 0. */
|
||||||
|
return (1 & ((d - 1) >> 8)) - 1;
|
||||||
|
}
|
||||||
|
|
||||||
static void WPA_PUT_BE16(uint8_t *a, uint16_t val)
|
static void WPA_PUT_BE16(uint8_t *a, uint16_t val)
|
||||||
{
|
{
|
||||||
a[0] = val >> 8;
|
a[0] = val >> 8;
|
||||||
@ -146,7 +172,7 @@ bool aes_ccm_ad(const uint8_t *key, size_t key_len, const uint8_t *nonce, size_t
|
|||||||
aes_ccm_encr(L, crypt, crypt_len, plain, a);
|
aes_ccm_encr(L, crypt, crypt_len, plain, a);
|
||||||
aes_ccm_auth_start(M, L, nonce, aad, aad_len, crypt_len, x);
|
aes_ccm_auth_start(M, L, nonce, aad, aad_len, crypt_len, x);
|
||||||
aes_ccm_auth(plain, crypt_len, x);
|
aes_ccm_auth(plain, crypt_len, x);
|
||||||
if (memcmp(x, t, M) != 0) { // FIXME make const comp
|
if (constant_time_compare(x, t, M) != 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -29,6 +29,7 @@ class BluetoothPhoneAPI : public PhoneAPI, public concurrency::OSThread
|
|||||||
uint8_t fromRadioBytes[meshtastic_FromRadio_size] = {0};
|
uint8_t fromRadioBytes[meshtastic_FromRadio_size] = {0};
|
||||||
size_t numBytes = 0;
|
size_t numBytes = 0;
|
||||||
bool hasChecked = false;
|
bool hasChecked = false;
|
||||||
|
bool phoneWants = false;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual int32_t runOnce() override
|
virtual int32_t runOnce() override
|
||||||
@ -38,10 +39,10 @@ class BluetoothPhoneAPI : public PhoneAPI, public concurrency::OSThread
|
|||||||
for (uint8_t i = 0; i < queue_size; i++) {
|
for (uint8_t i = 0; i < queue_size; i++) {
|
||||||
handleToRadio(nimble_queue.at(i).data(), nimble_queue.at(i).length());
|
handleToRadio(nimble_queue.at(i).data(), nimble_queue.at(i).length());
|
||||||
}
|
}
|
||||||
LOG_WARN("Queue_size %u", queue_size);
|
LOG_DEBUG("Queue_size %u", queue_size);
|
||||||
queue_size = 0;
|
queue_size = 0;
|
||||||
}
|
}
|
||||||
if (hasChecked == false) {
|
if (hasChecked == false && phoneWants == true) {
|
||||||
numBytes = getFromRadio(fromRadioBytes);
|
numBytes = getFromRadio(fromRadioBytes);
|
||||||
hasChecked = true;
|
hasChecked = true;
|
||||||
}
|
}
|
||||||
@ -98,9 +99,12 @@ class NimbleBluetoothFromRadioCallback : public NimBLECharacteristicCallbacks
|
|||||||
{
|
{
|
||||||
virtual void onRead(NimBLECharacteristic *pCharacteristic)
|
virtual void onRead(NimBLECharacteristic *pCharacteristic)
|
||||||
{
|
{
|
||||||
while (!bluetoothPhoneAPI->hasChecked) {
|
int tries = 0;
|
||||||
|
bluetoothPhoneAPI->phoneWants = true;
|
||||||
|
while (!bluetoothPhoneAPI->hasChecked && tries < 100) {
|
||||||
bluetoothPhoneAPI->setIntervalFromNow(0);
|
bluetoothPhoneAPI->setIntervalFromNow(0);
|
||||||
delay(20);
|
delay(20);
|
||||||
|
tries++;
|
||||||
}
|
}
|
||||||
std::lock_guard<std::mutex> guard(bluetoothPhoneAPI->nimble_mutex);
|
std::lock_guard<std::mutex> guard(bluetoothPhoneAPI->nimble_mutex);
|
||||||
std::string fromRadioByteString(bluetoothPhoneAPI->fromRadioBytes,
|
std::string fromRadioByteString(bluetoothPhoneAPI->fromRadioBytes,
|
||||||
@ -111,6 +115,7 @@ class NimbleBluetoothFromRadioCallback : public NimBLECharacteristicCallbacks
|
|||||||
bluetoothPhoneAPI->setIntervalFromNow(0);
|
bluetoothPhoneAPI->setIntervalFromNow(0);
|
||||||
bluetoothPhoneAPI->numBytes = 0;
|
bluetoothPhoneAPI->numBytes = 0;
|
||||||
bluetoothPhoneAPI->hasChecked = false;
|
bluetoothPhoneAPI->hasChecked = false;
|
||||||
|
bluetoothPhoneAPI->phoneWants = false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -186,7 +191,12 @@ class NimbleBluetoothServerCallback : public NimBLEServerCallbacks
|
|||||||
new meshtastic::BluetoothStatus(meshtastic::BluetoothStatus::ConnectionState::DISCONNECTED));
|
new meshtastic::BluetoothStatus(meshtastic::BluetoothStatus::ConnectionState::DISCONNECTED));
|
||||||
|
|
||||||
if (bluetoothPhoneAPI) {
|
if (bluetoothPhoneAPI) {
|
||||||
|
std::lock_guard<std::mutex> guard(bluetoothPhoneAPI->nimble_mutex);
|
||||||
bluetoothPhoneAPI->close();
|
bluetoothPhoneAPI->close();
|
||||||
|
bluetoothPhoneAPI->hasChecked = false;
|
||||||
|
bluetoothPhoneAPI->phoneWants = false;
|
||||||
|
bluetoothPhoneAPI->numBytes = 0;
|
||||||
|
bluetoothPhoneAPI->queue_size = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
[VERSION]
|
[VERSION]
|
||||||
major = 2
|
major = 2
|
||||||
minor = 7
|
minor = 7
|
||||||
build = 1
|
build = 2
|
||||||
|
Loading…
Reference in New Issue
Block a user