Merge branch 'master' into custom-esp32

This commit is contained in:
Ben Meadors 2024-07-23 11:52:29 -05:00 committed by GitHub
commit 50bf56132a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 12 additions and 7 deletions

View File

@ -92,22 +92,23 @@ void Router::enqueueReceivedMessage(meshtastic_MeshPacket *p)
// FIXME, move this someplace better // FIXME, move this someplace better
PacketId generatePacketId() PacketId generatePacketId()
{ {
static uint32_t i; // Note: trying to keep this in noinit didn't help for working across reboots static uint32_t rollingPacketId; // Note: trying to keep this in noinit didn't help for working across reboots
static bool didInit = false; static bool didInit = false;
uint32_t numPacketId = UINT32_MAX;
if (!didInit) { if (!didInit) {
didInit = true; didInit = true;
// pick a random initial sequence number at boot (to prevent repeated reboots always starting at 0) // pick a random initial sequence number at boot (to prevent repeated reboots always starting at 0)
// Note: we mask the high order bit to ensure that we never pass a 'negative' number to random // Note: we mask the high order bit to ensure that we never pass a 'negative' number to random
i = random(numPacketId & 0x7fffffff); rollingPacketId = random(UINT32_MAX & 0x7fffffff);
LOG_DEBUG("Initial packet id %u, numPacketId %u\n", i, numPacketId); LOG_DEBUG("Initial packet id %u\n", rollingPacketId);
} }
i++; rollingPacketId++;
PacketId id = (i % numPacketId) + 1; // return number between 1 and numPacketId (ie - never zero)
rollingPacketId &= UINT32_MAX >> 22; // Mask out the top 22 bits
PacketId id = rollingPacketId | random(UINT32_MAX & 0x7fffffff) << 10; // top 22 bits
LOG_DEBUG("Partially randomized packet id %u\n", id);
return id; return id;
} }

View File

@ -91,8 +91,12 @@ void enableSlowCLK()
void esp32Setup() void esp32Setup()
{ {
/* We explicitly don't want to do call randomSeed,
// as that triggers the esp32 core to use a less secure pseudorandom function.
uint32_t seed = esp_random(); uint32_t seed = esp_random();
LOG_DEBUG("Setting random seed %u\n", seed); LOG_DEBUG("Setting random seed %u\n", seed);
randomSeed(seed);
*/
LOG_DEBUG("Total heap: %d\n", ESP.getHeapSize()); LOG_DEBUG("Total heap: %d\n", ESP.getHeapSize());
LOG_DEBUG("Free heap: %d\n", ESP.getFreeHeap()); LOG_DEBUG("Free heap: %d\n", ESP.getFreeHeap());