From e7f12b62ba20a43a99c833256b66e48cbca64b71 Mon Sep 17 00:00:00 2001 From: geeksville Date: Mon, 3 Feb 2020 10:00:53 -0800 Subject: [PATCH] protobuf updates --- TODO.md | 3 ++ src/MemoryPool.h | 2 +- src/MeshBluetoothService.cpp | 2 +- src/mesh.pb.c | 3 ++ src/mesh.pb.h | 68 ++++++++++++++++++++++++++---------- 5 files changed, 58 insertions(+), 20 deletions(-) diff --git a/TODO.md b/TODO.md index c62d8749a..99ad6989b 100644 --- a/TODO.md +++ b/TODO.md @@ -4,6 +4,8 @@ * have meshservice send location data on mesh (if device has a GPS) * implement getCurrentTime() - set based off gps but then updated locally * confirm second device receives that gps message and updates device db +* pretty often send our position packet (but only if we've moved) +* very occasionally send our position and user packet (if for nothing else so that other nodes update last_seen) * switch to my gui layout manager * have a state machine return the correct FromRadio packet to the phone, it isn't always going to be a MeshPacket. Do a notify on fromnum to force the radio to read our state machine generated packets * send my_node_num when phone sends WantsNodes @@ -26,6 +28,7 @@ * fix the logo * do debug logging to android over bluetooth * break out my bluetooth OTA software as a seperate library so others can use it +* never enter deep sleep while connected to USB power (but still go to other low power modes) # Pre-beta priority diff --git a/src/MemoryPool.h b/src/MemoryPool.h index d41f5a0a9..d75581c10 100644 --- a/src/MemoryPool.h +++ b/src/MemoryPool.h @@ -43,7 +43,7 @@ public: T *p = dead.dequeuePtr(maxWait); if(p) - memcpy(p, &src, sizeof(T)); + *p = src; return p; } diff --git a/src/MeshBluetoothService.cpp b/src/MeshBluetoothService.cpp index d8887600b..0f463fb23 100644 --- a/src/MeshBluetoothService.cpp +++ b/src/MeshBluetoothService.cpp @@ -48,7 +48,7 @@ class BluetoothMeshCallbacks : public BLECharacteristicCallbacks // Encapsulate as a ToRadio packet memset(&fradio, 0, sizeof(fradio)); fradio.which_variant = FromRadio_packet_tag; - memcpy(&fradio.variant.packet, mp, sizeof(*mp)); + fradio.variant.packet = *mp; service.releaseToPool(mp); // we just copied the bytes, so don't need this buffer anymore diff --git a/src/mesh.pb.c b/src/mesh.pb.c index 82a3cd1b4..98c79fffc 100644 --- a/src/mesh.pb.c +++ b/src/mesh.pb.c @@ -39,6 +39,9 @@ PB_BIND(NodeInfo, NodeInfo, AUTO) PB_BIND(DeviceState, DeviceState, 2) +PB_BIND(MyNodeInfo, MyNodeInfo, AUTO) + + PB_BIND(FromRadio, FromRadio, AUTO) diff --git a/src/mesh.pb.h b/src/mesh.pb.h index 549827696..ec5bb7aa9 100644 --- a/src/mesh.pb.h +++ b/src/mesh.pb.h @@ -35,6 +35,10 @@ typedef struct _DenyNodeNum { char macaddr[6]; } DenyNodeNum; +typedef struct _MyNodeInfo { + int32_t my_node_num; +} MyNodeInfo; + typedef struct _Position { double latitude; double longitude; @@ -44,6 +48,13 @@ typedef struct _Position { } Position; typedef struct _RadioConfig { + uint32_t position_broadcast_msec; + uint32_t min_broadcast_msec; + int32_t tx_power; + float center_freq; + uint32_t bandwidth; + int32_t spread_factor; + int32_t coding_rate; bool keep_all_packets; bool promiscuous_mode; } RadioConfig; @@ -72,6 +83,7 @@ typedef struct _NodeInfo { Position position; bool has_last_seen; Time last_seen; + int32_t rx_power; } NodeInfo; typedef struct _SubPacket { @@ -108,8 +120,6 @@ typedef struct _FromRadio { pb_size_t which_variant; union { MeshPacket packet; - int32_t my_node_num; - NodeInfo node_info; } variant; } FromRadio; @@ -139,9 +149,10 @@ typedef struct _ToRadio { #define DenyNodeNum_init_default {""} #define SubPacket_init_default {0, {Position_init_default}} #define MeshPacket_init_default {0, 0, false, SubPacket_init_default} -#define RadioConfig_init_default {0, 0} -#define NodeInfo_init_default {0, false, User_init_default, false, Position_init_default, false, Time_init_default} +#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 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 FromRadio_init_default {0, 0, {MeshPacket_init_default}} #define ToRadio_init_default {0, {MeshPacket_init_default}} #define ToRadio_WantNodes_init_default {0} @@ -153,9 +164,10 @@ typedef struct _ToRadio { #define DenyNodeNum_init_zero {""} #define SubPacket_init_zero {0, {Position_init_zero}} #define MeshPacket_init_zero {0, 0, false, SubPacket_init_zero} -#define RadioConfig_init_zero {0, 0} -#define NodeInfo_init_zero {0, false, User_init_zero, false, Position_init_zero, false, Time_init_zero} +#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 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 FromRadio_init_zero {0, 0, {MeshPacket_init_zero}} #define ToRadio_init_zero {0, {MeshPacket_init_zero}} #define ToRadio_WantNodes_init_zero {0} @@ -164,11 +176,19 @@ typedef struct _ToRadio { #define Data_typ_tag 1 #define Data_payload_tag 2 #define DenyNodeNum_macaddr_tag 1 +#define MyNodeInfo_my_node_num_tag 1 #define Position_latitude_tag 1 #define Position_longitude_tag 2 #define Position_altitude_tag 3 #define Position_battery_level_tag 4 #define Position_from_hardware_tag 5 +#define RadioConfig_position_broadcast_msec_tag 1 +#define RadioConfig_min_broadcast_msec_tag 2 +#define RadioConfig_tx_power_tag 3 +#define RadioConfig_center_freq_tag 4 +#define RadioConfig_bandwidth_tag 5 +#define RadioConfig_spread_factor_tag 6 +#define RadioConfig_coding_rate_tag 7 #define RadioConfig_keep_all_packets_tag 100 #define RadioConfig_promiscuous_mode_tag 101 #define Time_msecs_tag 1 @@ -182,6 +202,7 @@ typedef struct _ToRadio { #define NodeInfo_user_tag 2 #define NodeInfo_position_tag 4 #define NodeInfo_last_seen_tag 5 +#define NodeInfo_rx_power_tag 6 #define SubPacket_position_tag 1 #define SubPacket_time_tag 2 #define SubPacket_data_tag 3 @@ -196,8 +217,6 @@ typedef struct _ToRadio { #define DeviceState_receive_queue_tag 3 #define DeviceState_my_node_num_tag 4 #define FromRadio_packet_tag 2 -#define FromRadio_my_node_num_tag 3 -#define FromRadio_node_info_tag 4 #define FromRadio_num_tag 1 #define ToRadio_packet_tag 1 #define ToRadio_want_nodes_tag 100 @@ -269,6 +288,13 @@ X(a, STATIC, OPTIONAL, MESSAGE, payload, 3) #define MeshPacket_payload_MSGTYPE SubPacket #define RadioConfig_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT32, position_broadcast_msec, 1) \ +X(a, STATIC, SINGULAR, UINT32, min_broadcast_msec, 2) \ +X(a, STATIC, SINGULAR, INT32, tx_power, 3) \ +X(a, STATIC, SINGULAR, FLOAT, center_freq, 4) \ +X(a, STATIC, SINGULAR, UINT32, bandwidth, 5) \ +X(a, STATIC, SINGULAR, INT32, spread_factor, 6) \ +X(a, STATIC, SINGULAR, INT32, coding_rate, 7) \ X(a, STATIC, SINGULAR, BOOL, keep_all_packets, 100) \ X(a, STATIC, SINGULAR, BOOL, promiscuous_mode, 101) #define RadioConfig_CALLBACK NULL @@ -278,7 +304,8 @@ X(a, STATIC, SINGULAR, BOOL, promiscuous_mode, 101) X(a, STATIC, SINGULAR, INT32, num, 1) \ X(a, STATIC, OPTIONAL, MESSAGE, user, 2) \ X(a, STATIC, OPTIONAL, MESSAGE, position, 4) \ -X(a, STATIC, OPTIONAL, MESSAGE, last_seen, 5) +X(a, STATIC, OPTIONAL, MESSAGE, last_seen, 5) \ +X(a, STATIC, SINGULAR, INT32, rx_power, 6) #define NodeInfo_CALLBACK NULL #define NodeInfo_DEFAULT NULL #define NodeInfo_user_MSGTYPE User @@ -289,22 +316,24 @@ X(a, STATIC, OPTIONAL, MESSAGE, last_seen, 5) X(a, STATIC, OPTIONAL, MESSAGE, radio, 1) \ X(a, STATIC, REPEATED, MESSAGE, node_db, 2) \ X(a, STATIC, REPEATED, MESSAGE, receive_queue, 3) \ -X(a, STATIC, SINGULAR, SINT32, my_node_num, 4) +X(a, STATIC, SINGULAR, INT32, my_node_num, 4) #define DeviceState_CALLBACK NULL #define DeviceState_DEFAULT NULL #define DeviceState_radio_MSGTYPE RadioConfig #define DeviceState_node_db_MSGTYPE NodeInfo #define DeviceState_receive_queue_MSGTYPE MeshPacket +#define MyNodeInfo_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, INT32, my_node_num, 1) +#define MyNodeInfo_CALLBACK NULL +#define MyNodeInfo_DEFAULT NULL + #define FromRadio_FIELDLIST(X, a) \ X(a, STATIC, SINGULAR, UINT32, num, 1) \ -X(a, STATIC, ONEOF, MESSAGE, (variant,packet,variant.packet), 2) \ -X(a, STATIC, ONEOF, SINT32, (variant,my_node_num,variant.my_node_num), 3) \ -X(a, STATIC, ONEOF, MESSAGE, (variant,node_info,variant.node_info), 4) +X(a, STATIC, ONEOF, MESSAGE, (variant,packet,variant.packet), 2) #define FromRadio_CALLBACK NULL #define FromRadio_DEFAULT NULL #define FromRadio_variant_packet_MSGTYPE MeshPacket -#define FromRadio_variant_node_info_MSGTYPE NodeInfo #define ToRadio_FIELDLIST(X, a) \ X(a, STATIC, ONEOF, MESSAGE, (variant,packet,variant.packet), 1) \ @@ -334,6 +363,7 @@ extern const pb_msgdesc_t MeshPacket_msg; extern const pb_msgdesc_t RadioConfig_msg; extern const pb_msgdesc_t NodeInfo_msg; extern const pb_msgdesc_t DeviceState_msg; +extern const pb_msgdesc_t MyNodeInfo_msg; extern const pb_msgdesc_t FromRadio_msg; extern const pb_msgdesc_t ToRadio_msg; extern const pb_msgdesc_t ToRadio_WantNodes_msg; @@ -350,6 +380,7 @@ extern const pb_msgdesc_t ToRadio_WantNodes_msg; #define RadioConfig_fields &RadioConfig_msg #define NodeInfo_fields &NodeInfo_msg #define DeviceState_fields &DeviceState_msg +#define MyNodeInfo_fields &MyNodeInfo_msg #define FromRadio_fields &FromRadio_msg #define ToRadio_fields &ToRadio_msg #define ToRadio_WantNodes_fields &ToRadio_WantNodes_msg @@ -363,10 +394,11 @@ extern const pb_msgdesc_t ToRadio_WantNodes_msg; #define DenyNodeNum_size 7 #define SubPacket_size 106 #define MeshPacket_size 130 -#define RadioConfig_size 6 -#define NodeInfo_size 140 -#define DeviceState_size 8846 -#define FromRadio_size 149 +#define RadioConfig_size 62 +#define NodeInfo_size 151 +#define DeviceState_size 9259 +#define MyNodeInfo_size 11 +#define FromRadio_size 139 #define ToRadio_size 133 #define ToRadio_WantNodes_size 0