diff --git a/proto b/proto index adf4127fe..e9c7f9b95 160000 --- a/proto +++ b/proto @@ -1 +1 @@ -Subproject commit adf4127fe3e4140bfd97b48a2d11b53ee34a16c8 +Subproject commit e9c7f9b95d490aea3f0f213d4666d2dbf7e2111c diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp index f46d1d8d3..faa035930 100644 --- a/src/mesh/NodeDB.cpp +++ b/src/mesh/NodeDB.cpp @@ -8,7 +8,9 @@ #include "CryptoEngine.h" #include "GPS.h" #include "NodeDB.h" +#include "PacketHistory.h" #include "PowerFSM.h" +#include "Router.h" #include "configuration.h" #include "error.h" #include "mesh-pb-constants.h" @@ -122,6 +124,10 @@ void NodeDB::init() // default to no GPS, until one has been found by probing myNodeInfo.has_gps = false; + myNodeInfo.node_num_bits = sizeof(NodeNum) * 8; + myNodeInfo.packet_id_bits = sizeof(PacketId) * 8; + myNodeInfo.message_timeout_msec = FLOOD_EXPIRE_TIME; + generatePacketId(); // FIXME - ugly way to init current_packet_id; // Init our blank owner info to reasonable defaults getMacAddr(ourMacAddr); diff --git a/src/mesh/PacketHistory.cpp b/src/mesh/PacketHistory.cpp index 11accf4c5..75005d408 100644 --- a/src/mesh/PacketHistory.cpp +++ b/src/mesh/PacketHistory.cpp @@ -2,8 +2,7 @@ #include "configuration.h" #include "mesh-pb-constants.h" -/// We clear our old flood record five minute after we see the last of it -#define FLOOD_EXPIRE_TIME (5 * 60 * 1000L) + PacketHistory::PacketHistory() { diff --git a/src/mesh/PacketHistory.h b/src/mesh/PacketHistory.h index 38edf7d77..3cc81084f 100644 --- a/src/mesh/PacketHistory.h +++ b/src/mesh/PacketHistory.h @@ -6,6 +6,9 @@ using namespace std; +/// We clear our old flood record five minute after we see the last of it +#define FLOOD_EXPIRE_TIME (5 * 60 * 1000L) + /** * A record of a recent message broadcast */ diff --git a/src/mesh/Router.cpp b/src/mesh/Router.cpp index 5abf73cb5..dc7409a07 100644 --- a/src/mesh/Router.cpp +++ b/src/mesh/Router.cpp @@ -44,8 +44,6 @@ void Router::loop() } } -#define NUM_PACKET_ID 255 // 0 is consider invalid - /// Generate a unique packet id // FIXME, move this someplace better PacketId generatePacketId() @@ -53,14 +51,18 @@ PacketId generatePacketId() static uint32_t i; // Note: trying to keep this in noinit didn't help for working across reboots static bool didInit = false; + uint32_t numPacketId = 255; // 0 is consider invalid + if (!didInit) { didInit = true; - i = random(0, NUM_PACKET_ID + + i = random(0, numPacketId + 1); // pick a random initial sequence number at boot (to prevent repeated reboots always starting at 0) } i++; - return (i % NUM_PACKET_ID) + 1; // return number between 1 and 255 + PacketId id = (i % numPacketId) + 1; // return number between 1 and 255 (ie - never zero) + myNodeInfo.current_packet_id = id; // Kinda crufty - we keep updating this so the phone can see a current value + return id; } MeshPacket *Router::allocForSending() diff --git a/src/mesh/mesh.pb.h b/src/mesh/mesh.pb.h index fe9cd575c..ae7edb1ff 100644 --- a/src/mesh/mesh.pb.h +++ b/src/mesh/mesh.pb.h @@ -74,6 +74,10 @@ typedef struct _MyNodeInfo { uint32_t error_code; uint32_t error_address; uint32_t error_count; + uint32_t packet_id_bits; + uint32_t current_packet_id; + uint32_t node_num_bits; + uint32_t message_timeout_msec; } MyNodeInfo; typedef struct _Position { @@ -238,7 +242,7 @@ typedef struct _ToRadio { #define RadioConfig_init_default {false, RadioConfig_UserPreferences_init_default, false, ChannelSettings_init_default} #define RadioConfig_UserPreferences_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0}} #define NodeInfo_init_default {0, false, User_init_default, false, Position_init_default, 0, 0} -#define MyNodeInfo_init_default {0, 0, 0, "", "", "", 0, 0, 0} +#define MyNodeInfo_init_default {0, 0, 0, "", "", "", 0, 0, 0, 0, 0, 0, 0} #define DeviceState_init_default {false, RadioConfig_init_default, false, MyNodeInfo_init_default, false, User_init_default, 0, {NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default}, 0, {MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default, MeshPacket_init_default}, false, MeshPacket_init_default, 0} #define DebugString_init_default {""} #define FromRadio_init_default {0, 0, {MeshPacket_init_default}} @@ -254,7 +258,7 @@ typedef struct _ToRadio { #define RadioConfig_init_zero {false, RadioConfig_UserPreferences_init_zero, false, ChannelSettings_init_zero} #define RadioConfig_UserPreferences_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0}} #define NodeInfo_init_zero {0, false, User_init_zero, false, Position_init_zero, 0, 0} -#define MyNodeInfo_init_zero {0, 0, 0, "", "", "", 0, 0, 0} +#define MyNodeInfo_init_zero {0, 0, 0, "", "", "", 0, 0, 0, 0, 0, 0, 0} #define DeviceState_init_zero {false, RadioConfig_init_zero, false, MyNodeInfo_init_zero, false, User_init_zero, 0, {NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero}, 0, {MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero, MeshPacket_init_zero}, false, MeshPacket_init_zero, 0} #define DebugString_init_zero {""} #define FromRadio_init_zero {0, 0, {MeshPacket_init_zero}} @@ -282,6 +286,10 @@ typedef struct _ToRadio { #define MyNodeInfo_error_code_tag 7 #define MyNodeInfo_error_address_tag 8 #define MyNodeInfo_error_count_tag 9 +#define MyNodeInfo_packet_id_bits_tag 10 +#define MyNodeInfo_current_packet_id_tag 11 +#define MyNodeInfo_node_num_bits_tag 12 +#define MyNodeInfo_message_timeout_msec_tag 13 #define Position_latitude_i_tag 7 #define Position_longitude_i_tag 8 #define Position_altitude_tag 3 @@ -472,7 +480,11 @@ X(a, STATIC, SINGULAR, STRING, hw_model, 5) \ X(a, STATIC, SINGULAR, STRING, firmware_version, 6) \ X(a, STATIC, SINGULAR, UINT32, error_code, 7) \ X(a, STATIC, SINGULAR, UINT32, error_address, 8) \ -X(a, STATIC, SINGULAR, UINT32, error_count, 9) +X(a, STATIC, SINGULAR, UINT32, error_count, 9) \ +X(a, STATIC, SINGULAR, UINT32, packet_id_bits, 10) \ +X(a, STATIC, SINGULAR, UINT32, current_packet_id, 11) \ +X(a, STATIC, SINGULAR, UINT32, node_num_bits, 12) \ +X(a, STATIC, SINGULAR, UINT32, message_timeout_msec, 13) #define MyNodeInfo_CALLBACK NULL #define MyNodeInfo_DEFAULT NULL @@ -580,8 +592,8 @@ extern const pb_msgdesc_t ManufacturingData_msg; #define RadioConfig_size 157 #define RadioConfig_UserPreferences_size 93 #define NodeInfo_size 132 -#define MyNodeInfo_size 80 -#define DeviceState_size 15433 +#define MyNodeInfo_size 104 +#define DeviceState_size 15457 #define DebugString_size 258 #define FromRadio_size 333 #define ToRadio_size 327