include our local user in the node db

This commit is contained in:
geeksville 2020-02-04 09:00:17 -08:00
parent b04fb061c4
commit b538677ad2
6 changed files with 60 additions and 49 deletions

View File

@ -36,7 +36,7 @@ monitor_speed = 115200
# debug_port = /dev/ttyUSB0 # debug_port = /dev/ttyUSB0
debug_tool = olimex-arm-usb-ocd-h debug_tool = olimex-arm-usb-ocd-h
upload_protocol = olimex-arm-usb-ocd-h ; upload_protocol = olimex-arm-usb-ocd-h
;debug_init_cmds = ;debug_init_cmds =
; adapter_khz 10000 ; adapter_khz 10000

View File

@ -37,6 +37,8 @@ MeshService::MeshService()
void MeshService::init() void MeshService::init()
{ {
nodeDB.init();
if (!radio.init()) if (!radio.init())
DEBUG_MSG("radio init failed\n"); DEBUG_MSG("radio init failed\n");
} }

View File

@ -10,32 +10,60 @@
MyNodeInfo myNodeInfo = MyNodeInfo_init_zero; MyNodeInfo myNodeInfo = MyNodeInfo_init_zero;
NodeDB nodeDB; NodeDB nodeDB;
User owner = User_init_zero;
/**
*
* Normally userids are unique and start with +country code to look like Signal phone numbers.
* But there are some special ids used when we haven't yet been configured by a user. In that case
* we use !macaddr (no colons).
*/
User owner = {"+1650xxxyyyy", "unset name", "????", {0}};
static uint8_t ourMacAddr[6];
/** /**
* get our starting (provisional) nodenum from flash. But check first if anyone else is using it, by trying to send a message to it (arping) * get our starting (provisional) nodenum from flash. But check first if anyone else is using it, by trying to send a message to it (arping)
*/ */
static NodeNum getDesiredNodeNum() static NodeNum getDesiredNodeNum()
{ {
uint8_t dmac[6]; esp_efuse_mac_get_default(ourMacAddr);
esp_efuse_mac_get_default(dmac);
// FIXME not the right way to guess node numes // FIXME not the right way to guess node numes
uint8_t r = dmac[5]; uint8_t r = ourMacAddr[5];
assert(r != 0xff); // It better not be the broadcast address assert(r != 0xff); // It better not be the broadcast address
return r; return r;
} }
NodeDB::NodeDB() : ourNodeNum(getDesiredNodeNum())
{
}
/// return number msecs since 1970 /// return number msecs since 1970
uint64_t getCurrentTime() uint64_t getCurrentTime()
{ {
return 4403; // FIXME return 4403; // FIXME
} }
NodeDB::NodeDB()
{
}
void NodeDB::init() {
ourNodeNum = getDesiredNodeNum();
// Init our blank owner info to reasonable defaults
sprintf(owner.id, "!%02x%02x%02x%02x%02x%02x", ourMacAddr[0],
ourMacAddr[1], ourMacAddr[2], ourMacAddr[3], ourMacAddr[4], ourMacAddr[5]);
memcpy(owner.macaddr, ourMacAddr, sizeof(owner.macaddr));
// FIXME, read owner info from flash
// Include our owner in the node db under our nodenum
NodeInfo *info = getOrCreateNode(ourNodeNum);
info->user = owner;
info->has_user = true;
info->last_seen = getCurrentTime();
}
const NodeInfo *NodeDB::readNextInfo() const NodeInfo *NodeDB::readNextInfo()
{ {
if (readPointer < numNodes) if (readPointer < numNodes)
@ -60,8 +88,7 @@ void NodeDB::updateFrom(const MeshPacket &mp)
if (oldNumNodes != numNodes) if (oldNumNodes != numNodes)
updateGUI = true; // we just created a nodeinfo updateGUI = true; // we just created a nodeinfo
info->last_seen.msecs = getCurrentTime(); info->last_seen = getCurrentTime();
info->has_last_seen = true;
switch (p.which_variant) switch (p.which_variant)
{ {
@ -99,7 +126,7 @@ NodeInfo *NodeDB::getOrCreateNode(NodeNum n)
{ {
NodeInfo *info = getNode(n); NodeInfo *info = getNode(n);
if (!n) if (!info)
{ {
// add the node // add the node
assert(numNodes < MAX_NUM_NODES); assert(numNodes < MAX_NUM_NODES);

View File

@ -10,7 +10,7 @@ class NodeDB
{ {
// NodeNum provisionalNodeNum; // if we are trying to find a node num this is our current attempt // NodeNum provisionalNodeNum; // if we are trying to find a node num this is our current attempt
NodeNum ourNodeNum; NodeNum ourNodeNum = 0;
// A NodeInfo for every node we've seen // A NodeInfo for every node we've seen
// Eventually use a smarter datastructure // Eventually use a smarter datastructure
@ -28,6 +28,9 @@ public:
/// instead just store in flash - possibly even in the initial alpha release do this hack /// instead just store in flash - possibly even in the initial alpha release do this hack
NodeDB(); NodeDB();
/// Called from service after app start, to do init which can only be done after OS load
void init();
/// given a subpacket sniffed from the network, update our DB state /// given a subpacket sniffed from the network, update our DB state
/// we updateGUI and updateGUIforNode if we think our this change is big enough for a redraw /// we updateGUI and updateGUIforNode if we think our this change is big enough for a redraw
void updateFrom(const MeshPacket &p); void updateFrom(const MeshPacket &p);

View File

@ -9,9 +9,6 @@
PB_BIND(Position, Position, AUTO) PB_BIND(Position, Position, AUTO)
PB_BIND(Time, Time, AUTO)
PB_BIND(Data, Data, AUTO) PB_BIND(Data, Data, AUTO)

View File

@ -55,14 +55,10 @@ typedef struct _RadioConfig {
bool promiscuous_mode; bool promiscuous_mode;
} RadioConfig; } RadioConfig;
typedef struct _Time {
uint64_t msecs;
} Time;
typedef struct _User { typedef struct _User {
char id[16]; char id[16];
char long_name[40]; char long_name[40];
char short_name[4]; char short_name[5];
pb_byte_t macaddr[6]; pb_byte_t macaddr[6];
} User; } User;
@ -77,8 +73,7 @@ typedef struct _NodeInfo {
User user; User user;
bool has_position; bool has_position;
Position position; Position position;
bool has_last_seen; uint64_t last_seen;
Time last_seen;
int32_t rx_power; int32_t rx_power;
} NodeInfo; } NodeInfo;
@ -86,7 +81,7 @@ typedef struct _SubPacket {
pb_size_t which_variant; pb_size_t which_variant;
union { union {
Position position; Position position;
Time time; uint64_t time;
Data data; Data data;
User user; User user;
WantNodeNum want_node; WantNodeNum want_node;
@ -135,7 +130,6 @@ typedef struct _ToRadio {
/* Initializer values for message structs */ /* Initializer values for message structs */
#define Position_init_default {0, 0, 0, 0, 0} #define Position_init_default {0, 0, 0, 0, 0}
#define Time_init_default {0}
#define Data_init_default {_Data_Type_MIN, {0, {0}}} #define Data_init_default {_Data_Type_MIN, {0, {0}}}
#define User_init_default {"", "", "", {0}} #define User_init_default {"", "", "", {0}}
#define WantNodeNum_init_default {0, {0}} #define WantNodeNum_init_default {0, {0}}
@ -143,13 +137,12 @@ typedef struct _ToRadio {
#define SubPacket_init_default {0, {Position_init_default}} #define SubPacket_init_default {0, {Position_init_default}}
#define MeshPacket_init_default {0, 0, false, SubPacket_init_default} #define MeshPacket_init_default {0, 0, false, SubPacket_init_default}
#define RadioConfig_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0} #define RadioConfig_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0}
#define NodeInfo_init_default {0, false, User_init_default, false, Position_init_default, false, Time_init_default, 0} #define NodeInfo_init_default {0, false, User_init_default, false, Position_init_default, 0, 0}
#define DeviceState_init_default {false, RadioConfig_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}, 0} #define DeviceState_init_default {false, RadioConfig_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}, 0}
#define MyNodeInfo_init_default {0} #define MyNodeInfo_init_default {0}
#define FromRadio_init_default {0, 0, {MeshPacket_init_default}} #define FromRadio_init_default {0, 0, {MeshPacket_init_default}}
#define ToRadio_init_default {0, {MeshPacket_init_default}} #define ToRadio_init_default {0, {MeshPacket_init_default}}
#define Position_init_zero {0, 0, 0, 0, 0} #define Position_init_zero {0, 0, 0, 0, 0}
#define Time_init_zero {0}
#define Data_init_zero {_Data_Type_MIN, {0, {0}}} #define Data_init_zero {_Data_Type_MIN, {0, {0}}}
#define User_init_zero {"", "", "", {0}} #define User_init_zero {"", "", "", {0}}
#define WantNodeNum_init_zero {0, {0}} #define WantNodeNum_init_zero {0, {0}}
@ -157,7 +150,7 @@ typedef struct _ToRadio {
#define SubPacket_init_zero {0, {Position_init_zero}} #define SubPacket_init_zero {0, {Position_init_zero}}
#define MeshPacket_init_zero {0, 0, false, SubPacket_init_zero} #define MeshPacket_init_zero {0, 0, false, SubPacket_init_zero}
#define RadioConfig_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0} #define RadioConfig_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0}
#define NodeInfo_init_zero {0, false, User_init_zero, false, Position_init_zero, false, Time_init_zero, 0} #define NodeInfo_init_zero {0, false, User_init_zero, false, Position_init_zero, 0, 0}
#define DeviceState_init_zero {false, RadioConfig_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}, 0} #define DeviceState_init_zero {false, RadioConfig_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}, 0}
#define MyNodeInfo_init_zero {0} #define MyNodeInfo_init_zero {0}
#define FromRadio_init_zero {0, 0, {MeshPacket_init_zero}} #define FromRadio_init_zero {0, 0, {MeshPacket_init_zero}}
@ -182,7 +175,6 @@ typedef struct _ToRadio {
#define RadioConfig_coding_rate_tag 7 #define RadioConfig_coding_rate_tag 7
#define RadioConfig_keep_all_packets_tag 100 #define RadioConfig_keep_all_packets_tag 100
#define RadioConfig_promiscuous_mode_tag 101 #define RadioConfig_promiscuous_mode_tag 101
#define Time_msecs_tag 1
#define User_id_tag 1 #define User_id_tag 1
#define User_long_name_tag 2 #define User_long_name_tag 2
#define User_short_name_tag 3 #define User_short_name_tag 3
@ -191,9 +183,9 @@ typedef struct _ToRadio {
#define WantNodeNum_macaddr_tag 2 #define WantNodeNum_macaddr_tag 2
#define NodeInfo_num_tag 1 #define NodeInfo_num_tag 1
#define NodeInfo_user_tag 2 #define NodeInfo_user_tag 2
#define NodeInfo_position_tag 4 #define NodeInfo_position_tag 3
#define NodeInfo_last_seen_tag 5 #define NodeInfo_last_seen_tag 4
#define NodeInfo_rx_power_tag 6 #define NodeInfo_rx_power_tag 5
#define SubPacket_position_tag 1 #define SubPacket_position_tag 1
#define SubPacket_time_tag 2 #define SubPacket_time_tag 2
#define SubPacket_data_tag 3 #define SubPacket_data_tag 3
@ -221,11 +213,6 @@ X(a, STATIC, SINGULAR, BOOL, from_hardware, 5)
#define Position_CALLBACK NULL #define Position_CALLBACK NULL
#define Position_DEFAULT NULL #define Position_DEFAULT NULL
#define Time_FIELDLIST(X, a) \
X(a, STATIC, SINGULAR, UINT64, msecs, 1)
#define Time_CALLBACK NULL
#define Time_DEFAULT NULL
#define Data_FIELDLIST(X, a) \ #define Data_FIELDLIST(X, a) \
X(a, STATIC, SINGULAR, UENUM, typ, 1) \ X(a, STATIC, SINGULAR, UENUM, typ, 1) \
X(a, STATIC, SINGULAR, BYTES, payload, 2) X(a, STATIC, SINGULAR, BYTES, payload, 2)
@ -253,7 +240,7 @@ X(a, STATIC, SINGULAR, FIXED_LENGTH_BYTES, macaddr, 1)
#define SubPacket_FIELDLIST(X, a) \ #define SubPacket_FIELDLIST(X, a) \
X(a, STATIC, ONEOF, MESSAGE, (variant,position,variant.position), 1) \ X(a, STATIC, ONEOF, MESSAGE, (variant,position,variant.position), 1) \
X(a, STATIC, ONEOF, MESSAGE, (variant,time,variant.time), 2) \ X(a, STATIC, ONEOF, UINT64, (variant,time,variant.time), 2) \
X(a, STATIC, ONEOF, MESSAGE, (variant,data,variant.data), 3) \ X(a, STATIC, ONEOF, MESSAGE, (variant,data,variant.data), 3) \
X(a, STATIC, ONEOF, MESSAGE, (variant,user,variant.user), 4) \ X(a, STATIC, ONEOF, MESSAGE, (variant,user,variant.user), 4) \
X(a, STATIC, ONEOF, MESSAGE, (variant,want_node,variant.want_node), 5) \ X(a, STATIC, ONEOF, MESSAGE, (variant,want_node,variant.want_node), 5) \
@ -261,7 +248,6 @@ X(a, STATIC, ONEOF, MESSAGE, (variant,deny_node,variant.deny_node), 6)
#define SubPacket_CALLBACK NULL #define SubPacket_CALLBACK NULL
#define SubPacket_DEFAULT NULL #define SubPacket_DEFAULT NULL
#define SubPacket_variant_position_MSGTYPE Position #define SubPacket_variant_position_MSGTYPE Position
#define SubPacket_variant_time_MSGTYPE Time
#define SubPacket_variant_data_MSGTYPE Data #define SubPacket_variant_data_MSGTYPE Data
#define SubPacket_variant_user_MSGTYPE User #define SubPacket_variant_user_MSGTYPE User
#define SubPacket_variant_want_node_MSGTYPE WantNodeNum #define SubPacket_variant_want_node_MSGTYPE WantNodeNum
@ -291,14 +277,13 @@ X(a, STATIC, SINGULAR, BOOL, promiscuous_mode, 101)
#define NodeInfo_FIELDLIST(X, a) \ #define NodeInfo_FIELDLIST(X, a) \
X(a, STATIC, SINGULAR, INT32, num, 1) \ X(a, STATIC, SINGULAR, INT32, num, 1) \
X(a, STATIC, OPTIONAL, MESSAGE, user, 2) \ X(a, STATIC, OPTIONAL, MESSAGE, user, 2) \
X(a, STATIC, OPTIONAL, MESSAGE, position, 4) \ X(a, STATIC, OPTIONAL, MESSAGE, position, 3) \
X(a, STATIC, OPTIONAL, MESSAGE, last_seen, 5) \ X(a, STATIC, SINGULAR, UINT64, last_seen, 4) \
X(a, STATIC, SINGULAR, INT32, rx_power, 6) X(a, STATIC, SINGULAR, INT32, rx_power, 5)
#define NodeInfo_CALLBACK NULL #define NodeInfo_CALLBACK NULL
#define NodeInfo_DEFAULT NULL #define NodeInfo_DEFAULT NULL
#define NodeInfo_user_MSGTYPE User #define NodeInfo_user_MSGTYPE User
#define NodeInfo_position_MSGTYPE Position #define NodeInfo_position_MSGTYPE Position
#define NodeInfo_last_seen_MSGTYPE Time
#define DeviceState_FIELDLIST(X, a) \ #define DeviceState_FIELDLIST(X, a) \
X(a, STATIC, OPTIONAL, MESSAGE, radio, 1) \ X(a, STATIC, OPTIONAL, MESSAGE, radio, 1) \
@ -330,7 +315,6 @@ X(a, STATIC, ONEOF, MESSAGE, (variant,packet,variant.packet), 1)
#define ToRadio_variant_packet_MSGTYPE MeshPacket #define ToRadio_variant_packet_MSGTYPE MeshPacket
extern const pb_msgdesc_t Position_msg; extern const pb_msgdesc_t Position_msg;
extern const pb_msgdesc_t Time_msg;
extern const pb_msgdesc_t Data_msg; extern const pb_msgdesc_t Data_msg;
extern const pb_msgdesc_t User_msg; extern const pb_msgdesc_t User_msg;
extern const pb_msgdesc_t WantNodeNum_msg; extern const pb_msgdesc_t WantNodeNum_msg;
@ -346,7 +330,6 @@ extern const pb_msgdesc_t ToRadio_msg;
/* Defines for backwards compatibility with code written before nanopb-0.4.0 */ /* Defines for backwards compatibility with code written before nanopb-0.4.0 */
#define Position_fields &Position_msg #define Position_fields &Position_msg
#define Time_fields &Time_msg
#define Data_fields &Data_msg #define Data_fields &Data_msg
#define User_fields &User_msg #define User_fields &User_msg
#define WantNodeNum_fields &WantNodeNum_msg #define WantNodeNum_fields &WantNodeNum_msg
@ -362,16 +345,15 @@ extern const pb_msgdesc_t ToRadio_msg;
/* Maximum encoded size of messages (where known) */ /* Maximum encoded size of messages (where known) */
#define Position_size 42 #define Position_size 42
#define Time_size 11
#define Data_size 104 #define Data_size 104
#define User_size 71 #define User_size 72
#define WantNodeNum_size 14 #define WantNodeNum_size 14
#define DenyNodeNum_size 8 #define DenyNodeNum_size 8
#define SubPacket_size 106 #define SubPacket_size 106
#define MeshPacket_size 130 #define MeshPacket_size 130
#define RadioConfig_size 62 #define RadioConfig_size 62
#define NodeInfo_size 152 #define NodeInfo_size 151
#define DeviceState_size 9291 #define DeviceState_size 9259
#define MyNodeInfo_size 11 #define MyNodeInfo_size 11
#define FromRadio_size 139 #define FromRadio_size 139
#define ToRadio_size 133 #define ToRadio_size 133