protobuf updates

pull/1/head
geeksville 2020-02-03 10:00:53 -08:00
rodzic d11b023c85
commit e7f12b62ba
5 zmienionych plików z 58 dodań i 20 usunięć

Wyświetl plik

@ -4,6 +4,8 @@
* have meshservice send location data on mesh (if device has a GPS) * have meshservice send location data on mesh (if device has a GPS)
* implement getCurrentTime() - set based off gps but then updated locally * implement getCurrentTime() - set based off gps but then updated locally
* confirm second device receives that gps message and updates device db * 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 * 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 * 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 * send my_node_num when phone sends WantsNodes
@ -26,6 +28,7 @@
* fix the logo * fix the logo
* do debug logging to android over bluetooth * do debug logging to android over bluetooth
* break out my bluetooth OTA software as a seperate library so others can use it * 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 # Pre-beta priority

Wyświetl plik

@ -43,7 +43,7 @@ public:
T *p = dead.dequeuePtr(maxWait); T *p = dead.dequeuePtr(maxWait);
if(p) if(p)
memcpy(p, &src, sizeof(T)); *p = src;
return p; return p;
} }

Wyświetl plik

@ -48,7 +48,7 @@ class BluetoothMeshCallbacks : public BLECharacteristicCallbacks
// Encapsulate as a ToRadio packet // Encapsulate as a ToRadio packet
memset(&fradio, 0, sizeof(fradio)); memset(&fradio, 0, sizeof(fradio));
fradio.which_variant = FromRadio_packet_tag; 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 service.releaseToPool(mp); // we just copied the bytes, so don't need this buffer anymore

Wyświetl plik

@ -39,6 +39,9 @@ PB_BIND(NodeInfo, NodeInfo, AUTO)
PB_BIND(DeviceState, DeviceState, 2) PB_BIND(DeviceState, DeviceState, 2)
PB_BIND(MyNodeInfo, MyNodeInfo, AUTO)
PB_BIND(FromRadio, FromRadio, AUTO) PB_BIND(FromRadio, FromRadio, AUTO)

Wyświetl plik

@ -35,6 +35,10 @@ typedef struct _DenyNodeNum {
char macaddr[6]; char macaddr[6];
} DenyNodeNum; } DenyNodeNum;
typedef struct _MyNodeInfo {
int32_t my_node_num;
} MyNodeInfo;
typedef struct _Position { typedef struct _Position {
double latitude; double latitude;
double longitude; double longitude;
@ -44,6 +48,13 @@ typedef struct _Position {
} Position; } Position;
typedef struct _RadioConfig { 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 keep_all_packets;
bool promiscuous_mode; bool promiscuous_mode;
} RadioConfig; } RadioConfig;
@ -72,6 +83,7 @@ typedef struct _NodeInfo {
Position position; Position position;
bool has_last_seen; bool has_last_seen;
Time last_seen; Time last_seen;
int32_t rx_power;
} NodeInfo; } NodeInfo;
typedef struct _SubPacket { typedef struct _SubPacket {
@ -108,8 +120,6 @@ typedef struct _FromRadio {
pb_size_t which_variant; pb_size_t which_variant;
union { union {
MeshPacket packet; MeshPacket packet;
int32_t my_node_num;
NodeInfo node_info;
} variant; } variant;
} FromRadio; } FromRadio;
@ -139,9 +149,10 @@ typedef struct _ToRadio {
#define DenyNodeNum_init_default {""} #define DenyNodeNum_init_default {""}
#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} #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} #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 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 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 ToRadio_WantNodes_init_default {0} #define ToRadio_WantNodes_init_default {0}
@ -153,9 +164,10 @@ typedef struct _ToRadio {
#define DenyNodeNum_init_zero {""} #define DenyNodeNum_init_zero {""}
#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} #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} #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 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 FromRadio_init_zero {0, 0, {MeshPacket_init_zero}}
#define ToRadio_init_zero {0, {MeshPacket_init_zero}} #define ToRadio_init_zero {0, {MeshPacket_init_zero}}
#define ToRadio_WantNodes_init_zero {0} #define ToRadio_WantNodes_init_zero {0}
@ -164,11 +176,19 @@ typedef struct _ToRadio {
#define Data_typ_tag 1 #define Data_typ_tag 1
#define Data_payload_tag 2 #define Data_payload_tag 2
#define DenyNodeNum_macaddr_tag 1 #define DenyNodeNum_macaddr_tag 1
#define MyNodeInfo_my_node_num_tag 1
#define Position_latitude_tag 1 #define Position_latitude_tag 1
#define Position_longitude_tag 2 #define Position_longitude_tag 2
#define Position_altitude_tag 3 #define Position_altitude_tag 3
#define Position_battery_level_tag 4 #define Position_battery_level_tag 4
#define Position_from_hardware_tag 5 #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_keep_all_packets_tag 100
#define RadioConfig_promiscuous_mode_tag 101 #define RadioConfig_promiscuous_mode_tag 101
#define Time_msecs_tag 1 #define Time_msecs_tag 1
@ -182,6 +202,7 @@ typedef struct _ToRadio {
#define NodeInfo_user_tag 2 #define NodeInfo_user_tag 2
#define NodeInfo_position_tag 4 #define NodeInfo_position_tag 4
#define NodeInfo_last_seen_tag 5 #define NodeInfo_last_seen_tag 5
#define NodeInfo_rx_power_tag 6
#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
@ -196,8 +217,6 @@ typedef struct _ToRadio {
#define DeviceState_receive_queue_tag 3 #define DeviceState_receive_queue_tag 3
#define DeviceState_my_node_num_tag 4 #define DeviceState_my_node_num_tag 4
#define FromRadio_packet_tag 2 #define FromRadio_packet_tag 2
#define FromRadio_my_node_num_tag 3
#define FromRadio_node_info_tag 4
#define FromRadio_num_tag 1 #define FromRadio_num_tag 1
#define ToRadio_packet_tag 1 #define ToRadio_packet_tag 1
#define ToRadio_want_nodes_tag 100 #define ToRadio_want_nodes_tag 100
@ -269,6 +288,13 @@ X(a, STATIC, OPTIONAL, MESSAGE, payload, 3)
#define MeshPacket_payload_MSGTYPE SubPacket #define MeshPacket_payload_MSGTYPE SubPacket
#define RadioConfig_FIELDLIST(X, a) \ #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, keep_all_packets, 100) \
X(a, STATIC, SINGULAR, BOOL, promiscuous_mode, 101) X(a, STATIC, SINGULAR, BOOL, promiscuous_mode, 101)
#define RadioConfig_CALLBACK NULL #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, 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, 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_CALLBACK NULL
#define NodeInfo_DEFAULT NULL #define NodeInfo_DEFAULT NULL
#define NodeInfo_user_MSGTYPE User #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, OPTIONAL, MESSAGE, radio, 1) \
X(a, STATIC, REPEATED, MESSAGE, node_db, 2) \ X(a, STATIC, REPEATED, MESSAGE, node_db, 2) \
X(a, STATIC, REPEATED, MESSAGE, receive_queue, 3) \ 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_CALLBACK NULL
#define DeviceState_DEFAULT NULL #define DeviceState_DEFAULT NULL
#define DeviceState_radio_MSGTYPE RadioConfig #define DeviceState_radio_MSGTYPE RadioConfig
#define DeviceState_node_db_MSGTYPE NodeInfo #define DeviceState_node_db_MSGTYPE NodeInfo
#define DeviceState_receive_queue_MSGTYPE MeshPacket #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) \ #define FromRadio_FIELDLIST(X, a) \
X(a, STATIC, SINGULAR, UINT32, num, 1) \ X(a, STATIC, SINGULAR, UINT32, num, 1) \
X(a, STATIC, ONEOF, MESSAGE, (variant,packet,variant.packet), 2) \ 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)
#define FromRadio_CALLBACK NULL #define FromRadio_CALLBACK NULL
#define FromRadio_DEFAULT NULL #define FromRadio_DEFAULT NULL
#define FromRadio_variant_packet_MSGTYPE MeshPacket #define FromRadio_variant_packet_MSGTYPE MeshPacket
#define FromRadio_variant_node_info_MSGTYPE NodeInfo
#define ToRadio_FIELDLIST(X, a) \ #define ToRadio_FIELDLIST(X, a) \
X(a, STATIC, ONEOF, MESSAGE, (variant,packet,variant.packet), 1) \ 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 RadioConfig_msg;
extern const pb_msgdesc_t NodeInfo_msg; extern const pb_msgdesc_t NodeInfo_msg;
extern const pb_msgdesc_t DeviceState_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 FromRadio_msg;
extern const pb_msgdesc_t ToRadio_msg; extern const pb_msgdesc_t ToRadio_msg;
extern const pb_msgdesc_t ToRadio_WantNodes_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 RadioConfig_fields &RadioConfig_msg
#define NodeInfo_fields &NodeInfo_msg #define NodeInfo_fields &NodeInfo_msg
#define DeviceState_fields &DeviceState_msg #define DeviceState_fields &DeviceState_msg
#define MyNodeInfo_fields &MyNodeInfo_msg
#define FromRadio_fields &FromRadio_msg #define FromRadio_fields &FromRadio_msg
#define ToRadio_fields &ToRadio_msg #define ToRadio_fields &ToRadio_msg
#define ToRadio_WantNodes_fields &ToRadio_WantNodes_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 DenyNodeNum_size 7
#define SubPacket_size 106 #define SubPacket_size 106
#define MeshPacket_size 130 #define MeshPacket_size 130
#define RadioConfig_size 6 #define RadioConfig_size 62
#define NodeInfo_size 140 #define NodeInfo_size 151
#define DeviceState_size 8846 #define DeviceState_size 9259
#define FromRadio_size 149 #define MyNodeInfo_size 11
#define FromRadio_size 139
#define ToRadio_size 133 #define ToRadio_size 133
#define ToRadio_WantNodes_size 0 #define ToRadio_WantNodes_size 0