mirror of
https://github.com/meshtastic/firmware.git
synced 2025-12-22 18:52:30 +00:00
Upgrade to nanopb 0.4.6 (#1523)
This commit is contained in:
6
.github/workflows/update_protobufs.yml
vendored
6
.github/workflows/update_protobufs.yml
vendored
@@ -17,9 +17,9 @@ jobs:
|
|||||||
|
|
||||||
- name: Download nanopb
|
- name: Download nanopb
|
||||||
run: |
|
run: |
|
||||||
wget https://jpa.kapsi.fi/nanopb/download/nanopb-0.4.5-linux-x86.tar.gz
|
wget https://jpa.kapsi.fi/nanopb/download/nanopb-0.4.6-linux-x86.tar.gz
|
||||||
tar xvzf nanopb-0.4.5-linux-x86.tar.gz
|
tar xvzf nanopb-0.4.6-linux-x86.tar.gz
|
||||||
mv nanopb-0.4.5-linux-x86 nanopb-0.4.5
|
mv nanopb-0.4.6-linux-x86 nanopb-0.4.6
|
||||||
|
|
||||||
- name: Re-generate protocol buffers
|
- name: Re-generate protocol buffers
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
cd protobufs && ..\nanopb-0.4.5\generator-bin\protoc.exe --nanopb_out=-v:..\src\mesh\generated -I=..\protobufs *.proto
|
cd protobufs && ..\nanopb-0.4.6\generator-bin\protoc.exe --nanopb_out=-v:..\src\mesh\generated -I=..\protobufs *.proto
|
||||||
|
|||||||
@@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
echo "This script requires https://jpa.kapsi.fi/nanopb/download/ version 0.4.5 to be located in the"
|
echo "This script requires https://jpa.kapsi.fi/nanopb/download/ version 0.4.6 to be located in the"
|
||||||
echo "meshtastic-device root directory if the following step fails, you should download the correct"
|
echo "meshtastic-device root directory if the following step fails, you should download the correct"
|
||||||
echo "prebuilt binaries for your computer into nanopb-0.4.5"
|
echo "prebuilt binaries for your computer into nanopb-0.4.6"
|
||||||
|
|
||||||
# the nanopb tool seems to require that the .options file be in the current directory!
|
# the nanopb tool seems to require that the .options file be in the current directory!
|
||||||
cd protobufs
|
cd protobufs
|
||||||
../nanopb-0.4.5/generator-bin/protoc --nanopb_out=-v:../src/mesh/generated -I=../protobufs *.proto
|
../nanopb-0.4.6/generator-bin/protoc --nanopb_out=-v:../src/mesh/generated -I=../protobufs *.proto
|
||||||
|
|
||||||
#echo "Regenerating protobuf documentation - if you see an error message"
|
#echo "Regenerating protobuf documentation - if you see an error message"
|
||||||
#echo "you can ignore it unless doing a new protobuf release to github."
|
#echo "you can ignore it unless doing a new protobuf release to github."
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#include "admin.pb.h"
|
#include "admin.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#ifndef PB_ADMIN_PB_H_INCLUDED
|
#ifndef PB_ADMIN_PB_H_INCLUDED
|
||||||
#define PB_ADMIN_PB_H_INCLUDED
|
#define PB_ADMIN_PB_H_INCLUDED
|
||||||
@@ -38,41 +38,80 @@ typedef enum _AdminMessage_ModuleConfigType {
|
|||||||
This message is used to do settings operations to both remote AND local nodes.
|
This message is used to do settings operations to both remote AND local nodes.
|
||||||
(Prior to 1.2 these operations were done via special ToRadio operations) */
|
(Prior to 1.2 these operations were done via special ToRadio operations) */
|
||||||
typedef struct _AdminMessage {
|
typedef struct _AdminMessage {
|
||||||
/* Set the owner for this node */
|
|
||||||
pb_size_t which_variant;
|
pb_size_t which_variant;
|
||||||
union {
|
union {
|
||||||
|
/* Set the owner for this node */
|
||||||
User set_owner;
|
User set_owner;
|
||||||
|
/* Set channels (using the new API).
|
||||||
|
A special channel is the "primary channel".
|
||||||
|
The other records are secondary channels.
|
||||||
|
Note: only one channel can be marked as primary.
|
||||||
|
If the client sets a particular channel to be primary, the previous channel will be set to SECONDARY automatically. */
|
||||||
Channel set_channel;
|
Channel set_channel;
|
||||||
|
/* Send the specified channel in the response to this message
|
||||||
|
NOTE: This field is sent with the channel index + 1 (to ensure we never try to send 'zero' - which protobufs treats as not present) */
|
||||||
uint32_t get_channel_request;
|
uint32_t get_channel_request;
|
||||||
|
/* TODO: REPLACE */
|
||||||
Channel get_channel_response;
|
Channel get_channel_response;
|
||||||
|
/* Send the current owner data in the response to this message. */
|
||||||
bool get_owner_request;
|
bool get_owner_request;
|
||||||
|
/* TODO: REPLACE */
|
||||||
User get_owner_response;
|
User get_owner_response;
|
||||||
|
/* Ask for the following config data to be sent */
|
||||||
AdminMessage_ConfigType get_config_request;
|
AdminMessage_ConfigType get_config_request;
|
||||||
|
/* Send the current Config in the response to this message. */
|
||||||
Config get_config_response;
|
Config get_config_response;
|
||||||
|
/* Set the current Config */
|
||||||
Config set_config;
|
Config set_config;
|
||||||
|
/* Sent immediatly after a config change has been sent to ensure comms, if this is not recieved, the config will be reverted after 10 mins */
|
||||||
bool confirm_set_config;
|
bool confirm_set_config;
|
||||||
|
/* Ask for the following config data to be sent */
|
||||||
AdminMessage_ModuleConfigType get_module_config_request;
|
AdminMessage_ModuleConfigType get_module_config_request;
|
||||||
|
/* Send the current Config in the response to this message. */
|
||||||
ModuleConfig get_module_config_response;
|
ModuleConfig get_module_config_response;
|
||||||
|
/* Set the current Config */
|
||||||
ModuleConfig set_module_config;
|
ModuleConfig set_module_config;
|
||||||
|
/* Sent immediatly after a config change has been sent to ensure comms, if this is not recieved, the config will be reverted after 10 mins */
|
||||||
bool confirm_set_module_config;
|
bool confirm_set_module_config;
|
||||||
|
/* Setting channels/radio config remotely carries the risk that you might send an invalid config and the radio never talks to your mesh again.
|
||||||
|
Therefore if setting either of these properties remotely, you must send a confirm_xxx message within 10 minutes.
|
||||||
|
If you fail to do so, the radio will assume loss of comms and revert your changes.
|
||||||
|
These messages are optional when changing the local node. */
|
||||||
bool confirm_set_channel;
|
bool confirm_set_channel;
|
||||||
|
/* TODO: REPLACE */
|
||||||
bool confirm_set_radio;
|
bool confirm_set_radio;
|
||||||
|
/* This message is only supported for the simulator porduino build.
|
||||||
|
If received the simulator will exit successfully. */
|
||||||
bool exit_simulator;
|
bool exit_simulator;
|
||||||
|
/* Tell the node to reboot in this many seconds (or <0 to cancel reboot) */
|
||||||
int32_t reboot_seconds;
|
int32_t reboot_seconds;
|
||||||
|
/* Get the Canned Message Module message part1 in the response to this message. */
|
||||||
bool get_canned_message_module_part1_request;
|
bool get_canned_message_module_part1_request;
|
||||||
|
/* TODO: REPLACE */
|
||||||
char get_canned_message_module_part1_response[201];
|
char get_canned_message_module_part1_response[201];
|
||||||
|
/* Get the Canned Message Module message part2 in the response to this message. */
|
||||||
bool get_canned_message_module_part2_request;
|
bool get_canned_message_module_part2_request;
|
||||||
|
/* TODO: REPLACE */
|
||||||
char get_canned_message_module_part2_response[201];
|
char get_canned_message_module_part2_response[201];
|
||||||
|
/* Get the Canned Message Module message part3 in the response to this message. */
|
||||||
bool get_canned_message_module_part3_request;
|
bool get_canned_message_module_part3_request;
|
||||||
|
/* TODO: REPLACE */
|
||||||
char get_canned_message_module_part3_response[201];
|
char get_canned_message_module_part3_response[201];
|
||||||
|
/* Get the Canned Message Module message part4 in the response to this message. */
|
||||||
bool get_canned_message_module_part4_request;
|
bool get_canned_message_module_part4_request;
|
||||||
|
/* TODO: REPLACE */
|
||||||
char get_canned_message_module_part4_response[201];
|
char get_canned_message_module_part4_response[201];
|
||||||
|
/* Set the canned message module part 1 text. */
|
||||||
char set_canned_message_module_part1[201];
|
char set_canned_message_module_part1[201];
|
||||||
|
/* Set the canned message module part 2 text. */
|
||||||
char set_canned_message_module_part2[201];
|
char set_canned_message_module_part2[201];
|
||||||
|
/* Set the canned message module part 3 text. */
|
||||||
char set_canned_message_module_part3[201];
|
char set_canned_message_module_part3[201];
|
||||||
|
/* Set the canned message module part 4 text. */
|
||||||
char set_canned_message_module_part4[201];
|
char set_canned_message_module_part4[201];
|
||||||
|
/* Tell the node to shutdown in this many seconds (or <0 to cancel shutdown) */
|
||||||
int32_t shutdown_seconds;
|
int32_t shutdown_seconds;
|
||||||
};
|
};
|
||||||
} AdminMessage;
|
} AdminMessage;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#include "apponly.pb.h"
|
#include "apponly.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#ifndef PB_APPONLY_PB_H_INCLUDED
|
#ifndef PB_APPONLY_PB_H_INCLUDED
|
||||||
#define PB_APPONLY_PB_H_INCLUDED
|
#define PB_APPONLY_PB_H_INCLUDED
|
||||||
@@ -20,10 +20,10 @@
|
|||||||
typedef struct _ChannelSet {
|
typedef struct _ChannelSet {
|
||||||
/* Channel list with settings */
|
/* Channel list with settings */
|
||||||
pb_size_t settings_count;
|
pb_size_t settings_count;
|
||||||
ChannelSettings settings[8];
|
ChannelSettings settings[8];
|
||||||
/* LoRa config */
|
/* LoRa config */
|
||||||
bool has_lora_config;
|
bool has_lora_config;
|
||||||
Config_LoRaConfig lora_config;
|
Config_LoRaConfig lora_config;
|
||||||
} ChannelSet;
|
} ChannelSet;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#include "cannedmessages.pb.h"
|
#include "cannedmessages.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#ifndef PB_CANNEDMESSAGES_PB_H_INCLUDED
|
#ifndef PB_CANNEDMESSAGES_PB_H_INCLUDED
|
||||||
#define PB_CANNEDMESSAGES_PB_H_INCLUDED
|
#define PB_CANNEDMESSAGES_PB_H_INCLUDED
|
||||||
@@ -13,13 +13,13 @@
|
|||||||
/* Canned message module configuration. */
|
/* Canned message module configuration. */
|
||||||
typedef struct _CannedMessageModuleConfig {
|
typedef struct _CannedMessageModuleConfig {
|
||||||
/* Predefined messages for canned message module separated by '|' characters. */
|
/* Predefined messages for canned message module separated by '|' characters. */
|
||||||
char messagesPart1[201];
|
char messagesPart1[201];
|
||||||
/* TODO: REPLACE */
|
/* TODO: REPLACE */
|
||||||
char messagesPart2[201];
|
char messagesPart2[201];
|
||||||
/* TODO: REPLACE */
|
/* TODO: REPLACE */
|
||||||
char messagesPart3[201];
|
char messagesPart3[201];
|
||||||
/* TODO: REPLACE */
|
/* TODO: REPLACE */
|
||||||
char messagesPart4[201];
|
char messagesPart4[201];
|
||||||
} CannedMessageModuleConfig;
|
} CannedMessageModuleConfig;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#include "channel.pb.h"
|
#include "channel.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#ifndef PB_CHANNEL_PB_H_INCLUDED
|
#ifndef PB_CHANNEL_PB_H_INCLUDED
|
||||||
#define PB_CHANNEL_PB_H_INCLUDED
|
#define PB_CHANNEL_PB_H_INCLUDED
|
||||||
@@ -38,6 +38,26 @@ typedef PB_BYTES_ARRAY_T(32) ChannelSettings_psk_t;
|
|||||||
FIXME: explain how apps use channels for security.
|
FIXME: explain how apps use channels for security.
|
||||||
explain how remote settings and remote gpio are managed as an example */
|
explain how remote settings and remote gpio are managed as an example */
|
||||||
typedef struct _ChannelSettings {
|
typedef struct _ChannelSettings {
|
||||||
|
/* A simple pre-shared key for now for crypto.
|
||||||
|
Must be either 0 bytes (no crypto), 16 bytes (AES128), or 32 bytes (AES256).
|
||||||
|
A special shorthand is used for 1 byte long psks.
|
||||||
|
These psks should be treated as only minimally secure,
|
||||||
|
because they are listed in this source code.
|
||||||
|
Those bytes are mapped using the following scheme:
|
||||||
|
`0` = No crypto
|
||||||
|
`1` = The special "default" channel key: {0xd4, 0xf1, 0xbb, 0x3a, 0x20, 0x29, 0x07, 0x59, 0xf0, 0xbc, 0xff, 0xab, 0xcf, 0x4e, 0x69, 0xbf}
|
||||||
|
`2` through 10 = The default channel key, except with 1 through 9 added to the last byte.
|
||||||
|
Shown to user as simple1 through 10 */
|
||||||
|
ChannelSettings_psk_t psk;
|
||||||
|
/* A SHORT name that will be packed into the URL.
|
||||||
|
Less than 12 bytes.
|
||||||
|
Something for end users to call the channel
|
||||||
|
If this is the empty string it is assumed that this channel
|
||||||
|
is the special (minimally secure) "Default"channel.
|
||||||
|
In user interfaces it should be rendered as a local language translation of "X".
|
||||||
|
For channel_num hashing empty string will be treated as "X".
|
||||||
|
Where "X" is selected based on the English words listed above for ModemPreset */
|
||||||
|
char name[12];
|
||||||
/* NOTE: this field is _independent_ and unrelated to the concepts in channel.proto.
|
/* NOTE: this field is _independent_ and unrelated to the concepts in channel.proto.
|
||||||
this is controlling the actual hardware frequency the radio is transmitting on.
|
this is controlling the actual hardware frequency the radio is transmitting on.
|
||||||
In a perfect world we would have called it something else (band?) but I forgot to make this change during the big 1.2 renaming.
|
In a perfect world we would have called it something else (band?) but I forgot to make this change during the big 1.2 renaming.
|
||||||
@@ -56,27 +76,7 @@ typedef struct _ChannelSettings {
|
|||||||
hash = ((hash << 5) + hash) + (unsigned char) c;
|
hash = ((hash << 5) + hash) + (unsigned char) c;
|
||||||
return hash;
|
return hash;
|
||||||
} */
|
} */
|
||||||
ChannelSettings_psk_t psk;
|
uint8_t channel_num;
|
||||||
/* A simple pre-shared key for now for crypto.
|
|
||||||
Must be either 0 bytes (no crypto), 16 bytes (AES128), or 32 bytes (AES256).
|
|
||||||
A special shorthand is used for 1 byte long psks.
|
|
||||||
These psks should be treated as only minimally secure,
|
|
||||||
because they are listed in this source code.
|
|
||||||
Those bytes are mapped using the following scheme:
|
|
||||||
`0` = No crypto
|
|
||||||
`1` = The special "default" channel key: {0xd4, 0xf1, 0xbb, 0x3a, 0x20, 0x29, 0x07, 0x59, 0xf0, 0xbc, 0xff, 0xab, 0xcf, 0x4e, 0x69, 0xbf}
|
|
||||||
`2` through 10 = The default channel key, except with 1 through 9 added to the last byte.
|
|
||||||
Shown to user as simple1 through 10 */
|
|
||||||
char name[12];
|
|
||||||
/* A SHORT name that will be packed into the URL.
|
|
||||||
Less than 12 bytes.
|
|
||||||
Something for end users to call the channel
|
|
||||||
If this is the empty string it is assumed that this channel
|
|
||||||
is the special (minimally secure) "Default"channel.
|
|
||||||
In user interfaces it should be rendered as a local language translation of "X".
|
|
||||||
For channel_num hashing empty string will be treated as "X".
|
|
||||||
Where "X" is selected based on the English words listed above for ModemPreset */
|
|
||||||
uint8_t channel_num;
|
|
||||||
/* Used to construct a globally unique channel ID.
|
/* Used to construct a globally unique channel ID.
|
||||||
The full globally unique ID will be: "name.id" where ID is shown as base36.
|
The full globally unique ID will be: "name.id" where ID is shown as base36.
|
||||||
Assuming that the number of meshtastic users is below 20K (true for a long time)
|
Assuming that the number of meshtastic users is below 20K (true for a long time)
|
||||||
@@ -88,11 +88,11 @@ typedef struct _ChannelSettings {
|
|||||||
Those channels do not have a numeric id included in the settings, but instead it is pulled from
|
Those channels do not have a numeric id included in the settings, but instead it is pulled from
|
||||||
a table of well known IDs.
|
a table of well known IDs.
|
||||||
(see Well Known Channels FIXME) */
|
(see Well Known Channels FIXME) */
|
||||||
uint32_t id;
|
uint32_t id;
|
||||||
/* If true, messages on the mesh will be sent to the *public* internet by any gateway ndoe */
|
/* If true, messages on the mesh will be sent to the *public* internet by any gateway ndoe */
|
||||||
bool uplink_enabled;
|
bool uplink_enabled;
|
||||||
/* If true, messages seen on the internet will be forwarded to the local mesh. */
|
/* If true, messages seen on the internet will be forwarded to the local mesh. */
|
||||||
bool downlink_enabled;
|
bool downlink_enabled;
|
||||||
} ChannelSettings;
|
} ChannelSettings;
|
||||||
|
|
||||||
/* A pair of a channel number, mode and the (sharable) settings for that channel */
|
/* A pair of a channel number, mode and the (sharable) settings for that channel */
|
||||||
@@ -100,12 +100,12 @@ typedef struct _Channel {
|
|||||||
/* The index of this channel in the channel table (from 0 to MAX_NUM_CHANNELS-1)
|
/* The index of this channel in the channel table (from 0 to MAX_NUM_CHANNELS-1)
|
||||||
(Someday - not currently implemented) An index of -1 could be used to mean "set by name",
|
(Someday - not currently implemented) An index of -1 could be used to mean "set by name",
|
||||||
in which case the target node will find and set the channel by settings.name. */
|
in which case the target node will find and set the channel by settings.name. */
|
||||||
int8_t index;
|
int8_t index;
|
||||||
/* The new settings, or NULL to disable that channel */
|
/* The new settings, or NULL to disable that channel */
|
||||||
bool has_settings;
|
bool has_settings;
|
||||||
ChannelSettings settings;
|
ChannelSettings settings;
|
||||||
/* TODO: REPLACE */
|
/* TODO: REPLACE */
|
||||||
Channel_Role role;
|
Channel_Role role;
|
||||||
} Channel;
|
} Channel;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#include "config.pb.h"
|
#include "config.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#ifndef PB_CONFIG_PB_H_INCLUDED
|
#ifndef PB_CONFIG_PB_H_INCLUDED
|
||||||
#define PB_CONFIG_PB_H_INCLUDED
|
#define PB_CONFIG_PB_H_INCLUDED
|
||||||
@@ -86,74 +86,79 @@ typedef enum _Config_LoRaConfig_ModemPreset {
|
|||||||
|
|
||||||
/* Struct definitions */
|
/* Struct definitions */
|
||||||
typedef struct _Config_DeviceConfig {
|
typedef struct _Config_DeviceConfig {
|
||||||
Config_DeviceConfig_Role role;
|
Config_DeviceConfig_Role role;
|
||||||
bool serial_disabled;
|
bool serial_disabled;
|
||||||
bool factory_reset;
|
bool factory_reset;
|
||||||
bool debug_log_enabled;
|
bool debug_log_enabled;
|
||||||
char ntp_server[33];
|
char ntp_server[33];
|
||||||
} Config_DeviceConfig;
|
} Config_DeviceConfig;
|
||||||
|
|
||||||
typedef struct _Config_DisplayConfig {
|
typedef struct _Config_DisplayConfig {
|
||||||
uint32_t screen_on_secs;
|
uint32_t screen_on_secs;
|
||||||
Config_DisplayConfig_GpsCoordinateFormat gps_format;
|
Config_DisplayConfig_GpsCoordinateFormat gps_format;
|
||||||
uint32_t auto_screen_carousel_secs;
|
uint32_t auto_screen_carousel_secs;
|
||||||
} Config_DisplayConfig;
|
} Config_DisplayConfig;
|
||||||
|
|
||||||
typedef struct _Config_LoRaConfig {
|
typedef struct _Config_LoRaConfig {
|
||||||
int32_t tx_power;
|
int32_t tx_power;
|
||||||
Config_LoRaConfig_ModemPreset modem_preset;
|
Config_LoRaConfig_ModemPreset modem_preset;
|
||||||
uint32_t bandwidth;
|
uint32_t bandwidth;
|
||||||
uint32_t spread_factor;
|
uint32_t spread_factor;
|
||||||
uint32_t coding_rate;
|
uint32_t coding_rate;
|
||||||
float frequency_offset;
|
float frequency_offset;
|
||||||
Config_LoRaConfig_RegionCode region;
|
Config_LoRaConfig_RegionCode region;
|
||||||
uint32_t hop_limit;
|
uint32_t hop_limit;
|
||||||
bool tx_disabled;
|
bool tx_disabled;
|
||||||
pb_size_t ignore_incoming_count;
|
pb_size_t ignore_incoming_count;
|
||||||
uint32_t ignore_incoming[3];
|
uint32_t ignore_incoming[3];
|
||||||
} Config_LoRaConfig;
|
} Config_LoRaConfig;
|
||||||
|
|
||||||
typedef struct _Config_PositionConfig {
|
typedef struct _Config_PositionConfig {
|
||||||
uint32_t position_broadcast_secs;
|
uint32_t position_broadcast_secs;
|
||||||
bool position_broadcast_smart_disabled;
|
bool position_broadcast_smart_disabled;
|
||||||
bool fixed_position;
|
bool fixed_position;
|
||||||
bool gps_disabled;
|
bool gps_disabled;
|
||||||
uint32_t gps_update_interval;
|
uint32_t gps_update_interval;
|
||||||
uint32_t gps_attempt_time;
|
uint32_t gps_attempt_time;
|
||||||
uint32_t position_flags;
|
uint32_t position_flags;
|
||||||
} Config_PositionConfig;
|
} Config_PositionConfig;
|
||||||
|
|
||||||
typedef struct _Config_PowerConfig {
|
typedef struct _Config_PowerConfig {
|
||||||
Config_PowerConfig_ChargeCurrent charge_current;
|
Config_PowerConfig_ChargeCurrent charge_current;
|
||||||
bool is_power_saving;
|
bool is_power_saving;
|
||||||
bool is_always_powered;
|
bool is_always_powered;
|
||||||
uint32_t on_battery_shutdown_after_secs;
|
uint32_t on_battery_shutdown_after_secs;
|
||||||
float adc_multiplier_override;
|
float adc_multiplier_override;
|
||||||
uint32_t wait_bluetooth_secs;
|
uint32_t wait_bluetooth_secs;
|
||||||
uint32_t mesh_sds_timeout_secs;
|
uint32_t mesh_sds_timeout_secs;
|
||||||
uint32_t sds_secs;
|
uint32_t sds_secs;
|
||||||
uint32_t ls_secs;
|
uint32_t ls_secs;
|
||||||
uint32_t min_wake_secs;
|
uint32_t min_wake_secs;
|
||||||
} Config_PowerConfig;
|
} Config_PowerConfig;
|
||||||
|
|
||||||
typedef struct _Config_WiFiConfig {
|
typedef struct _Config_WiFiConfig {
|
||||||
char ssid[33];
|
char ssid[33];
|
||||||
char psk[64];
|
char psk[64];
|
||||||
bool ap_mode;
|
bool ap_mode;
|
||||||
bool ap_hidden;
|
bool ap_hidden;
|
||||||
} Config_WiFiConfig;
|
} Config_WiFiConfig;
|
||||||
|
|
||||||
typedef struct _Config {
|
typedef struct _Config {
|
||||||
/* TODO: REPLACE */
|
|
||||||
pb_size_t which_payloadVariant;
|
pb_size_t which_payloadVariant;
|
||||||
union {
|
union {
|
||||||
|
/* TODO: REPLACE */
|
||||||
Config_DeviceConfig device;
|
Config_DeviceConfig device;
|
||||||
|
/* TODO: REPLACE */
|
||||||
Config_PositionConfig position;
|
Config_PositionConfig position;
|
||||||
|
/* TODO: REPLACE */
|
||||||
Config_PowerConfig power;
|
Config_PowerConfig power;
|
||||||
|
/* TODO: REPLACE */
|
||||||
Config_WiFiConfig wifi;
|
Config_WiFiConfig wifi;
|
||||||
|
/* TODO: REPLACE */
|
||||||
Config_DisplayConfig display;
|
Config_DisplayConfig display;
|
||||||
|
/* TODO: REPLACE */
|
||||||
Config_LoRaConfig lora;
|
Config_LoRaConfig lora;
|
||||||
} payloadVariant;
|
} payloadVariant;
|
||||||
} Config;
|
} Config;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#include "deviceonly.pb.h"
|
#include "deviceonly.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#ifndef PB_DEVICEONLY_PB_H_INCLUDED
|
#ifndef PB_DEVICEONLY_PB_H_INCLUDED
|
||||||
#define PB_DEVICEONLY_PB_H_INCLUDED
|
#define PB_DEVICEONLY_PB_H_INCLUDED
|
||||||
@@ -27,11 +27,11 @@ typedef enum _ScreenFonts {
|
|||||||
typedef struct _ChannelFile {
|
typedef struct _ChannelFile {
|
||||||
/* The channels our node knows about */
|
/* The channels our node knows about */
|
||||||
pb_size_t channels_count;
|
pb_size_t channels_count;
|
||||||
Channel channels[8];
|
Channel channels[8];
|
||||||
/* A version integer used to invalidate old save files when we make
|
/* A version integer used to invalidate old save files when we make
|
||||||
incompatible changes This integer is set at build time and is private to
|
incompatible changes This integer is set at build time and is private to
|
||||||
NodeDB.cpp in the device code. */
|
NodeDB.cpp in the device code. */
|
||||||
uint32_t version;
|
uint32_t version;
|
||||||
} ChannelFile;
|
} ChannelFile;
|
||||||
|
|
||||||
/* This message is never sent over the wire, but it is used for serializing DB
|
/* This message is never sent over the wire, but it is used for serializing DB
|
||||||
@@ -42,30 +42,30 @@ typedef struct _ChannelFile {
|
|||||||
typedef struct _DeviceState {
|
typedef struct _DeviceState {
|
||||||
/* Read only settings/info about this node */
|
/* Read only settings/info about this node */
|
||||||
bool has_my_node;
|
bool has_my_node;
|
||||||
MyNodeInfo my_node;
|
MyNodeInfo my_node;
|
||||||
/* My owner info */
|
/* My owner info */
|
||||||
bool has_owner;
|
bool has_owner;
|
||||||
User owner;
|
User owner;
|
||||||
/* TODO: REPLACE */
|
/* TODO: REPLACE */
|
||||||
pb_size_t node_db_count;
|
pb_size_t node_db_count;
|
||||||
NodeInfo node_db[80];
|
NodeInfo node_db[80];
|
||||||
/* Received packets saved for delivery to the phone */
|
/* Received packets saved for delivery to the phone */
|
||||||
pb_size_t receive_queue_count;
|
pb_size_t receive_queue_count;
|
||||||
MeshPacket receive_queue[1];
|
MeshPacket receive_queue[1];
|
||||||
/* A version integer used to invalidate old save files when we make
|
|
||||||
incompatible changes This integer is set at build time and is private to
|
|
||||||
NodeDB.cpp in the device code. */
|
|
||||||
bool has_rx_text_message;
|
|
||||||
MeshPacket rx_text_message;
|
|
||||||
/* We keep the last received text message (only) stored in the device flash,
|
/* We keep the last received text message (only) stored in the device flash,
|
||||||
so we can show it on the screen.
|
so we can show it on the screen.
|
||||||
Might be null */
|
Might be null */
|
||||||
uint32_t version;
|
bool has_rx_text_message;
|
||||||
|
MeshPacket rx_text_message;
|
||||||
|
/* A version integer used to invalidate old save files when we make
|
||||||
|
incompatible changes This integer is set at build time and is private to
|
||||||
|
NodeDB.cpp in the device code. */
|
||||||
|
uint32_t version;
|
||||||
/* Used only during development.
|
/* Used only during development.
|
||||||
Indicates developer is testing and changes should never be saved to flash. */
|
Indicates developer is testing and changes should never be saved to flash. */
|
||||||
bool no_save;
|
bool no_save;
|
||||||
/* Some GPSes seem to have bogus settings from the factory, so we always do one factory reset. */
|
/* Some GPSes seem to have bogus settings from the factory, so we always do one factory reset. */
|
||||||
bool did_gps_reset;
|
bool did_gps_reset;
|
||||||
} DeviceState;
|
} DeviceState;
|
||||||
|
|
||||||
typedef PB_BYTES_ARRAY_T(2048) OEMStore_oem_icon_bits_t;
|
typedef PB_BYTES_ARRAY_T(2048) OEMStore_oem_icon_bits_t;
|
||||||
@@ -73,15 +73,15 @@ typedef PB_BYTES_ARRAY_T(2048) OEMStore_oem_icon_bits_t;
|
|||||||
show a secondary bootup screen with cuatom logo and text for 2.5 seconds. */
|
show a secondary bootup screen with cuatom logo and text for 2.5 seconds. */
|
||||||
typedef struct _OEMStore {
|
typedef struct _OEMStore {
|
||||||
/* The Logo width in Px */
|
/* The Logo width in Px */
|
||||||
uint32_t oem_icon_width;
|
uint32_t oem_icon_width;
|
||||||
/* The Logo height in Px */
|
/* The Logo height in Px */
|
||||||
uint32_t oem_icon_height;
|
uint32_t oem_icon_height;
|
||||||
/* The Logo in xbm bytechar format */
|
/* The Logo in xbm bytechar format */
|
||||||
OEMStore_oem_icon_bits_t oem_icon_bits;
|
OEMStore_oem_icon_bits_t oem_icon_bits;
|
||||||
/* Use this font for the OEM text. */
|
/* Use this font for the OEM text. */
|
||||||
ScreenFonts oem_font;
|
ScreenFonts oem_font;
|
||||||
/* Use this font for the OEM text. */
|
/* Use this font for the OEM text. */
|
||||||
char oem_text[40];
|
char oem_text[40];
|
||||||
} OEMStore;
|
} OEMStore;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#include "localonly.pb.h"
|
#include "localonly.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#ifndef PB_LOCALONLY_PB_H_INCLUDED
|
#ifndef PB_LOCALONLY_PB_H_INCLUDED
|
||||||
#define PB_LOCALONLY_PB_H_INCLUDED
|
#define PB_LOCALONLY_PB_H_INCLUDED
|
||||||
@@ -15,54 +15,54 @@
|
|||||||
typedef struct _LocalConfig {
|
typedef struct _LocalConfig {
|
||||||
/* The part of the config that is specific to the Device */
|
/* The part of the config that is specific to the Device */
|
||||||
bool has_device;
|
bool has_device;
|
||||||
Config_DeviceConfig device;
|
Config_DeviceConfig device;
|
||||||
/* The part of the config that is specific to the GPS Position */
|
/* The part of the config that is specific to the GPS Position */
|
||||||
bool has_position;
|
bool has_position;
|
||||||
Config_PositionConfig position;
|
Config_PositionConfig position;
|
||||||
/* The part of the config that is specific to the Power settings */
|
/* The part of the config that is specific to the Power settings */
|
||||||
bool has_power;
|
bool has_power;
|
||||||
Config_PowerConfig power;
|
Config_PowerConfig power;
|
||||||
/* The part of the config that is specific to the Wifi Settings */
|
/* The part of the config that is specific to the Wifi Settings */
|
||||||
bool has_wifi;
|
bool has_wifi;
|
||||||
Config_WiFiConfig wifi;
|
Config_WiFiConfig wifi;
|
||||||
/* The part of the config that is specific to the Display */
|
/* The part of the config that is specific to the Display */
|
||||||
bool has_display;
|
bool has_display;
|
||||||
Config_DisplayConfig display;
|
Config_DisplayConfig display;
|
||||||
/* The part of the config that is specific to the Lora Radio */
|
/* The part of the config that is specific to the Lora Radio */
|
||||||
bool has_lora;
|
bool has_lora;
|
||||||
Config_LoRaConfig lora;
|
Config_LoRaConfig lora;
|
||||||
/* A version integer used to invalidate old save files when we make
|
/* A version integer used to invalidate old save files when we make
|
||||||
incompatible changes This integer is set at build time and is private to
|
incompatible changes This integer is set at build time and is private to
|
||||||
NodeDB.cpp in the device code. */
|
NodeDB.cpp in the device code. */
|
||||||
uint32_t version;
|
uint32_t version;
|
||||||
} LocalConfig;
|
} LocalConfig;
|
||||||
|
|
||||||
typedef struct _LocalModuleConfig {
|
typedef struct _LocalModuleConfig {
|
||||||
/* The part of the config that is specific to the MQTT module */
|
/* The part of the config that is specific to the MQTT module */
|
||||||
bool has_mqtt;
|
bool has_mqtt;
|
||||||
ModuleConfig_MQTTConfig mqtt;
|
ModuleConfig_MQTTConfig mqtt;
|
||||||
/* The part of the config that is specific to the Serial module */
|
/* The part of the config that is specific to the Serial module */
|
||||||
bool has_serial;
|
bool has_serial;
|
||||||
ModuleConfig_SerialConfig serial;
|
ModuleConfig_SerialConfig serial;
|
||||||
/* The part of the config that is specific to the ExternalNotification module */
|
/* The part of the config that is specific to the ExternalNotification module */
|
||||||
bool has_external_notification;
|
bool has_external_notification;
|
||||||
ModuleConfig_ExternalNotificationConfig external_notification;
|
ModuleConfig_ExternalNotificationConfig external_notification;
|
||||||
/* The part of the config that is specific to the Store & Forward module */
|
/* The part of the config that is specific to the Store & Forward module */
|
||||||
bool has_store_forward;
|
bool has_store_forward;
|
||||||
ModuleConfig_StoreForwardConfig store_forward;
|
ModuleConfig_StoreForwardConfig store_forward;
|
||||||
/* The part of the config that is specific to the RangeTest module */
|
/* The part of the config that is specific to the RangeTest module */
|
||||||
bool has_range_test;
|
bool has_range_test;
|
||||||
ModuleConfig_RangeTestConfig range_test;
|
ModuleConfig_RangeTestConfig range_test;
|
||||||
/* The part of the config that is specific to the Telemetry module */
|
/* The part of the config that is specific to the Telemetry module */
|
||||||
bool has_telemetry;
|
bool has_telemetry;
|
||||||
ModuleConfig_TelemetryConfig telemetry;
|
ModuleConfig_TelemetryConfig telemetry;
|
||||||
/* The part of the config that is specific to the Canned Message module */
|
/* The part of the config that is specific to the Canned Message module */
|
||||||
bool has_canned_message;
|
bool has_canned_message;
|
||||||
ModuleConfig_CannedMessageConfig canned_message;
|
ModuleConfig_CannedMessageConfig canned_message;
|
||||||
/* A version integer used to invalidate old save files when we make
|
/* A version integer used to invalidate old save files when we make
|
||||||
incompatible changes This integer is set at build time and is private to
|
incompatible changes This integer is set at build time and is private to
|
||||||
NodeDB.cpp in the device code. */
|
NodeDB.cpp in the device code. */
|
||||||
uint32_t version;
|
uint32_t version;
|
||||||
} LocalModuleConfig;
|
} LocalModuleConfig;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#include "mesh.pb.h"
|
#include "mesh.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#ifndef PB_MESH_PB_H_INCLUDED
|
#ifndef PB_MESH_PB_H_INCLUDED
|
||||||
#define PB_MESH_PB_H_INCLUDED
|
#define PB_MESH_PB_H_INCLUDED
|
||||||
@@ -238,22 +238,22 @@ typedef enum _LogRecord_Level {
|
|||||||
/* Struct definitions */
|
/* Struct definitions */
|
||||||
typedef PB_BYTES_ARRAY_T(237) Compressed_data_t;
|
typedef PB_BYTES_ARRAY_T(237) Compressed_data_t;
|
||||||
typedef struct _Compressed {
|
typedef struct _Compressed {
|
||||||
PortNum portnum;
|
PortNum portnum;
|
||||||
Compressed_data_t data;
|
Compressed_data_t data;
|
||||||
} Compressed;
|
} Compressed;
|
||||||
|
|
||||||
/* Location of a waypoint to associate with a message */
|
/* Location of a waypoint to associate with a message */
|
||||||
typedef struct _Location {
|
typedef struct _Location {
|
||||||
/* Id of the location */
|
/* Id of the location */
|
||||||
uint32_t id;
|
uint32_t id;
|
||||||
/* latitude_i */
|
/* latitude_i */
|
||||||
int32_t latitude_i;
|
int32_t latitude_i;
|
||||||
/* longitude_i */
|
/* longitude_i */
|
||||||
int32_t longitude_i;
|
int32_t longitude_i;
|
||||||
/* Time the location is to expire (epoch) */
|
/* Time the location is to expire (epoch) */
|
||||||
uint32_t expire;
|
uint32_t expire;
|
||||||
/* If true, only allow the original sender to update the location. */
|
/* If true, only allow the original sender to update the location. */
|
||||||
bool locked;
|
bool locked;
|
||||||
} Location;
|
} Location;
|
||||||
|
|
||||||
/* Debug output from the device.
|
/* Debug output from the device.
|
||||||
@@ -263,13 +263,13 @@ typedef struct _Location {
|
|||||||
and then extend as needed by emitting multiple records. */
|
and then extend as needed by emitting multiple records. */
|
||||||
typedef struct _LogRecord {
|
typedef struct _LogRecord {
|
||||||
/* Log levels, chosen to match python logging conventions. */
|
/* Log levels, chosen to match python logging conventions. */
|
||||||
char message[64];
|
char message[64];
|
||||||
/* Seconds since 1970 - or 0 for unknown/unset */
|
/* Seconds since 1970 - or 0 for unknown/unset */
|
||||||
uint32_t time;
|
uint32_t time;
|
||||||
/* Usually based on thread name - if known */
|
/* Usually based on thread name - if known */
|
||||||
char source[8];
|
char source[8];
|
||||||
/* Not yet set */
|
/* Not yet set */
|
||||||
LogRecord_Level level;
|
LogRecord_Level level;
|
||||||
} LogRecord;
|
} LogRecord;
|
||||||
|
|
||||||
/* Unique local debugging info for this node
|
/* Unique local debugging info for this node
|
||||||
@@ -278,134 +278,134 @@ typedef struct _LogRecord {
|
|||||||
typedef struct _MyNodeInfo {
|
typedef struct _MyNodeInfo {
|
||||||
/* Tells the phone what our node number is, default starting value is
|
/* Tells the phone what our node number is, default starting value is
|
||||||
lowbyte of macaddr, but it will be fixed if that is already in use */
|
lowbyte of macaddr, but it will be fixed if that is already in use */
|
||||||
uint32_t my_node_num;
|
uint32_t my_node_num;
|
||||||
/* Note: This flag merely means we detected a hardware GPS in our node.
|
/* Note: This flag merely means we detected a hardware GPS in our node.
|
||||||
Not the same as UserPreferences.location_sharing */
|
Not the same as UserPreferences.location_sharing */
|
||||||
bool has_gps;
|
bool has_gps;
|
||||||
/* The maximum number of 'software' channels that can be set on this node. */
|
|
||||||
char firmware_version[18];
|
|
||||||
/* 0.0.5 etc... */
|
/* 0.0.5 etc... */
|
||||||
CriticalErrorCode error_code;
|
char firmware_version[18];
|
||||||
/* An error message we'd like to report back to the mothership through analytics.
|
/* An error message we'd like to report back to the mothership through analytics.
|
||||||
It indicates a serious bug occurred on the device, the device coped with it,
|
It indicates a serious bug occurred on the device, the device coped with it,
|
||||||
but we still want to tell the devs about the bug.
|
but we still want to tell the devs about the bug.
|
||||||
This field will be cleared after the phone reads MyNodeInfo
|
This field will be cleared after the phone reads MyNodeInfo
|
||||||
(i.e. it will only be reported once)
|
(i.e. it will only be reported once)
|
||||||
a numeric error code to go with error message, zero means no error */
|
a numeric error code to go with error message, zero means no error */
|
||||||
uint32_t error_address;
|
CriticalErrorCode error_code;
|
||||||
/* A numeric error address (nonzero if available) */
|
/* A numeric error address (nonzero if available) */
|
||||||
uint32_t error_count;
|
uint32_t error_address;
|
||||||
/* The total number of errors this node has ever encountered
|
/* The total number of errors this node has ever encountered
|
||||||
(well - since the last time we discarded preferences) */
|
(well - since the last time we discarded preferences) */
|
||||||
uint32_t reboot_count;
|
uint32_t error_count;
|
||||||
/* The total number of reboots this node has ever encountered
|
/* The total number of reboots this node has ever encountered
|
||||||
(well - since the last time we discarded preferences) */
|
(well - since the last time we discarded preferences) */
|
||||||
float bitrate;
|
uint32_t reboot_count;
|
||||||
/* Calculated bitrate of the current channel (in Bytes Per Second) */
|
/* Calculated bitrate of the current channel (in Bytes Per Second) */
|
||||||
uint32_t message_timeout_msec;
|
float bitrate;
|
||||||
/* How long before we consider a message abandoned and we can clear our
|
/* How long before we consider a message abandoned and we can clear our
|
||||||
caches of any messages in flight Normally quite large to handle the worst case
|
caches of any messages in flight Normally quite large to handle the worst case
|
||||||
message delivery time, 5 minutes.
|
message delivery time, 5 minutes.
|
||||||
Formerly called FLOOD_EXPIRE_TIME in the device code */
|
Formerly called FLOOD_EXPIRE_TIME in the device code */
|
||||||
uint32_t min_app_version;
|
uint32_t message_timeout_msec;
|
||||||
/* The minimum app version that can talk to this device.
|
/* The minimum app version that can talk to this device.
|
||||||
Phone/PC apps should compare this to their build number and if too low tell the user they must update their app */
|
Phone/PC apps should compare this to their build number and if too low tell the user they must update their app */
|
||||||
uint32_t max_channels;
|
uint32_t min_app_version;
|
||||||
|
/* The maximum number of 'software' channels that can be set on this node. */
|
||||||
|
uint32_t max_channels;
|
||||||
/* 24 time windows of 1hr each with the airtime transmitted out of the device per hour. */
|
/* 24 time windows of 1hr each with the airtime transmitted out of the device per hour. */
|
||||||
pb_size_t air_period_tx_count;
|
pb_size_t air_period_tx_count;
|
||||||
uint32_t air_period_tx[8];
|
uint32_t air_period_tx[8];
|
||||||
/* 24 time windows of 1hr each with the airtime of valid packets for your mesh. */
|
/* 24 time windows of 1hr each with the airtime of valid packets for your mesh. */
|
||||||
pb_size_t air_period_rx_count;
|
pb_size_t air_period_rx_count;
|
||||||
uint32_t air_period_rx[8];
|
uint32_t air_period_rx[8];
|
||||||
/* Is the device wifi capable? */
|
/* Is the device wifi capable? */
|
||||||
bool has_wifi;
|
bool has_wifi;
|
||||||
/* Utilization for the current channel, including well formed TX, RX and malformed RX (aka noise). */
|
/* Utilization for the current channel, including well formed TX, RX and malformed RX (aka noise). */
|
||||||
float channel_utilization;
|
float channel_utilization;
|
||||||
/* Percent of airtime for transmission used within the last hour. */
|
/* Percent of airtime for transmission used within the last hour. */
|
||||||
float air_util_tx;
|
float air_util_tx;
|
||||||
} MyNodeInfo;
|
} MyNodeInfo;
|
||||||
|
|
||||||
/* a gps position */
|
/* a gps position */
|
||||||
typedef struct _Position {
|
typedef struct _Position {
|
||||||
/* The new preferred location encoding, divide by 1e-7 to get degrees
|
/* The new preferred location encoding, divide by 1e-7 to get degrees
|
||||||
in floating point */
|
in floating point */
|
||||||
int32_t latitude_i;
|
int32_t latitude_i;
|
||||||
/* TODO: REPLACE */
|
/* TODO: REPLACE */
|
||||||
int32_t longitude_i;
|
int32_t longitude_i;
|
||||||
/* In meters above MSL (but see issue #359) */
|
/* In meters above MSL (but see issue #359) */
|
||||||
int32_t altitude;
|
int32_t altitude;
|
||||||
/* This is usually not sent over the mesh (to save space), but it is sent
|
/* This is usually not sent over the mesh (to save space), but it is sent
|
||||||
from the phone so that the local device can set its RTC If it is sent over
|
from the phone so that the local device can set its RTC If it is sent over
|
||||||
the mesh (because there are devices on the mesh without GPS), it will only
|
the mesh (because there are devices on the mesh without GPS), it will only
|
||||||
be sent by devices which has a hardware GPS clock.
|
be sent by devices which has a hardware GPS clock.
|
||||||
seconds since 1970 */
|
seconds since 1970 */
|
||||||
uint32_t time;
|
uint32_t time;
|
||||||
/* TODO: REPLACE */
|
/* TODO: REPLACE */
|
||||||
Position_LocSource location_source;
|
Position_LocSource location_source;
|
||||||
/* TODO: REPLACE */
|
/* TODO: REPLACE */
|
||||||
Position_AltSource altitude_source;
|
Position_AltSource altitude_source;
|
||||||
/* Positional timestamp (actual timestamp of GPS solution) in integer epoch seconds */
|
/* Positional timestamp (actual timestamp of GPS solution) in integer epoch seconds */
|
||||||
uint32_t pos_timestamp;
|
uint32_t pos_timestamp;
|
||||||
/* Pos. timestamp milliseconds adjustment (rarely available or required) */
|
/* Pos. timestamp milliseconds adjustment (rarely available or required) */
|
||||||
int32_t pos_time_millis;
|
int32_t pos_time_millis;
|
||||||
/* HAE altitude in meters - can be used instead of MSL altitude */
|
/* HAE altitude in meters - can be used instead of MSL altitude */
|
||||||
int32_t altitude_hae;
|
int32_t altitude_hae;
|
||||||
/* Geoidal separation in meters */
|
/* Geoidal separation in meters */
|
||||||
int32_t alt_geoid_sep;
|
int32_t alt_geoid_sep;
|
||||||
/* Horizontal, Vertical and Position Dilution of Precision, in 1/100 units
|
/* Horizontal, Vertical and Position Dilution of Precision, in 1/100 units
|
||||||
- PDOP is sufficient for most cases
|
- PDOP is sufficient for most cases
|
||||||
- for higher precision scenarios, HDOP and VDOP can be used instead,
|
- for higher precision scenarios, HDOP and VDOP can be used instead,
|
||||||
in which case PDOP becomes redundant (PDOP=sqrt(HDOP^2 + VDOP^2))
|
in which case PDOP becomes redundant (PDOP=sqrt(HDOP^2 + VDOP^2))
|
||||||
TODO: REMOVE/INTEGRATE */
|
TODO: REMOVE/INTEGRATE */
|
||||||
uint32_t PDOP;
|
uint32_t PDOP;
|
||||||
/* TODO: REPLACE */
|
/* TODO: REPLACE */
|
||||||
uint32_t HDOP;
|
uint32_t HDOP;
|
||||||
/* TODO: REPLACE */
|
/* TODO: REPLACE */
|
||||||
uint32_t VDOP;
|
uint32_t VDOP;
|
||||||
/* GPS accuracy (a hardware specific constant) in mm
|
/* GPS accuracy (a hardware specific constant) in mm
|
||||||
multiplied with DOP to calculate positional accuracy
|
multiplied with DOP to calculate positional accuracy
|
||||||
Default: "'bout three meters-ish" :) */
|
Default: "'bout three meters-ish" :) */
|
||||||
uint32_t gps_accuracy;
|
uint32_t gps_accuracy;
|
||||||
/* Ground speed in m/s and True North TRACK in 1/100 degrees
|
/* Ground speed in m/s and True North TRACK in 1/100 degrees
|
||||||
Clarification of terms:
|
Clarification of terms:
|
||||||
- "track" is the direction of motion (measured in horizontal plane)
|
- "track" is the direction of motion (measured in horizontal plane)
|
||||||
- "heading" is where the fuselage points (measured in horizontal plane)
|
- "heading" is where the fuselage points (measured in horizontal plane)
|
||||||
- "yaw" indicates a relative rotation about the vertical axis
|
- "yaw" indicates a relative rotation about the vertical axis
|
||||||
TODO: REMOVE/INTEGRATE */
|
TODO: REMOVE/INTEGRATE */
|
||||||
uint32_t ground_speed;
|
uint32_t ground_speed;
|
||||||
/* TODO: REPLACE */
|
/* TODO: REPLACE */
|
||||||
uint32_t ground_track;
|
uint32_t ground_track;
|
||||||
/* GPS fix quality (from NMEA GxGGA statement or similar) */
|
/* GPS fix quality (from NMEA GxGGA statement or similar) */
|
||||||
uint32_t fix_quality;
|
uint32_t fix_quality;
|
||||||
/* GPS fix type 2D/3D (from NMEA GxGSA statement) */
|
/* GPS fix type 2D/3D (from NMEA GxGSA statement) */
|
||||||
uint32_t fix_type;
|
uint32_t fix_type;
|
||||||
/* GPS "Satellites in View" number */
|
/* GPS "Satellites in View" number */
|
||||||
uint32_t sats_in_view;
|
uint32_t sats_in_view;
|
||||||
/* Sensor ID - in case multiple positioning sensors are being used */
|
/* Sensor ID - in case multiple positioning sensors are being used */
|
||||||
uint32_t sensor_id;
|
uint32_t sensor_id;
|
||||||
/* Estimated/expected time (in seconds) until next update:
|
/* Estimated/expected time (in seconds) until next update:
|
||||||
- if we update at fixed intervals of X seconds, use X
|
- if we update at fixed intervals of X seconds, use X
|
||||||
- if we update at dynamic intervals (based on relative movement etc),
|
- if we update at dynamic intervals (based on relative movement etc),
|
||||||
but "AT LEAST every Y seconds", use Y */
|
but "AT LEAST every Y seconds", use Y */
|
||||||
uint32_t pos_next_update;
|
uint32_t pos_next_update;
|
||||||
/* A sequence number, incremented with each Position message to help
|
/* A sequence number, incremented with each Position message to help
|
||||||
detect lost updates if needed */
|
detect lost updates if needed */
|
||||||
uint32_t pos_seq_number;
|
uint32_t pos_seq_number;
|
||||||
} Position;
|
} Position;
|
||||||
|
|
||||||
/* A message used in our Dynamic Source Routing protocol (RFC 4728 based) */
|
/* A message used in our Dynamic Source Routing protocol (RFC 4728 based) */
|
||||||
typedef struct _RouteDiscovery {
|
typedef struct _RouteDiscovery {
|
||||||
/* The list of nodenums this packet has visited so far */
|
/* The list of nodenums this packet has visited so far */
|
||||||
pb_size_t route_count;
|
pb_size_t route_count;
|
||||||
uint32_t route[8];
|
uint32_t route[8];
|
||||||
} RouteDiscovery;
|
} RouteDiscovery;
|
||||||
|
|
||||||
/* Compressed message payload */
|
/* Compressed message payload */
|
||||||
typedef struct _ToRadio_PeerInfo {
|
typedef struct _ToRadio_PeerInfo {
|
||||||
/* PortNum to determine the how to handle the compressed payload. */
|
/* PortNum to determine the how to handle the compressed payload. */
|
||||||
uint32_t app_version;
|
uint32_t app_version;
|
||||||
/* Compressed data. */
|
/* Compressed data. */
|
||||||
bool mqtt_gateway;
|
bool mqtt_gateway;
|
||||||
} ToRadio_PeerInfo;
|
} ToRadio_PeerInfo;
|
||||||
|
|
||||||
/* Broadcast when a newly powered mesh node wants to find a node num it can use
|
/* Broadcast when a newly powered mesh node wants to find a node num it can use
|
||||||
@@ -433,35 +433,35 @@ typedef struct _User {
|
|||||||
In the case of Signal that would mean +16504442323, for the default macaddr derived id it would be !<8 hexidecimal bytes>.
|
In the case of Signal that would mean +16504442323, for the default macaddr derived id it would be !<8 hexidecimal bytes>.
|
||||||
Note: app developers are encouraged to also use the following standard
|
Note: app developers are encouraged to also use the following standard
|
||||||
node IDs "^all" (for broadcast), "^local" (for the locally connected node) */
|
node IDs "^all" (for broadcast), "^local" (for the locally connected node) */
|
||||||
char id[16];
|
char id[16];
|
||||||
/* A full name for this user, i.e. "Kevin Hester" */
|
/* A full name for this user, i.e. "Kevin Hester" */
|
||||||
char long_name[40];
|
char long_name[40];
|
||||||
/* A VERY short name, ideally two characters.
|
/* A VERY short name, ideally two characters.
|
||||||
Suitable for a tiny OLED screen */
|
Suitable for a tiny OLED screen */
|
||||||
char short_name[5];
|
char short_name[5];
|
||||||
/* This is the addr of the radio.
|
/* This is the addr of the radio.
|
||||||
Not populated by the phone, but added by the esp32 when broadcasting */
|
Not populated by the phone, but added by the esp32 when broadcasting */
|
||||||
pb_byte_t macaddr[6];
|
pb_byte_t macaddr[6];
|
||||||
/* TBEAM, HELTEC, etc...
|
/* TBEAM, HELTEC, etc...
|
||||||
Starting in 1.2.11 moved to hw_model enum in the NodeInfo object.
|
Starting in 1.2.11 moved to hw_model enum in the NodeInfo object.
|
||||||
Apps will still need the string here for older builds
|
Apps will still need the string here for older builds
|
||||||
(so OTA update can find the right image), but if the enum is available it will be used instead. */
|
(so OTA update can find the right image), but if the enum is available it will be used instead. */
|
||||||
HardwareModel hw_model;
|
HardwareModel hw_model;
|
||||||
/* In some regions Ham radio operators have different bandwidth limitations than others.
|
/* In some regions Ham radio operators have different bandwidth limitations than others.
|
||||||
If this user is a licensed operator, set this flag.
|
If this user is a licensed operator, set this flag.
|
||||||
Also, "long_name" should be their licence number. */
|
Also, "long_name" should be their licence number. */
|
||||||
bool is_licensed;
|
bool is_licensed;
|
||||||
/* Transmit power at antenna connector, in decibel-milliwatt
|
/* Transmit power at antenna connector, in decibel-milliwatt
|
||||||
An optional self-reported value useful in network planning, discovery
|
An optional self-reported value useful in network planning, discovery
|
||||||
and positioning - along with ant_gain_dbi and ant_azimuth below */
|
and positioning - along with ant_gain_dbi and ant_azimuth below */
|
||||||
uint32_t tx_power_dbm;
|
uint32_t tx_power_dbm;
|
||||||
/* Antenna gain (applicable to both Tx and Rx), in decibel-isotropic */
|
/* Antenna gain (applicable to both Tx and Rx), in decibel-isotropic */
|
||||||
uint32_t ant_gain_dbi;
|
uint32_t ant_gain_dbi;
|
||||||
/* Directional antenna true azimuth *if applicable*, in degrees (0-360)
|
/* Directional antenna true azimuth *if applicable*, in degrees (0-360)
|
||||||
Only applicable in case of stationary nodes with a directional antenna
|
Only applicable in case of stationary nodes with a directional antenna
|
||||||
Zero = not applicable (mobile or omni) or not specified
|
Zero = not applicable (mobile or omni) or not specified
|
||||||
(use a value of 360 to indicate an antenna azimuth of zero degrees) */
|
(use a value of 360 to indicate an antenna azimuth of zero degrees) */
|
||||||
uint32_t ant_azimuth;
|
uint32_t ant_azimuth;
|
||||||
} User;
|
} User;
|
||||||
|
|
||||||
typedef PB_BYTES_ARRAY_T(237) Data_payload_t;
|
typedef PB_BYTES_ARRAY_T(237) Data_payload_t;
|
||||||
@@ -470,34 +470,34 @@ typedef PB_BYTES_ARRAY_T(237) Data_payload_t;
|
|||||||
inside a radio packet (because from/to are broken out by the comms library) */
|
inside a radio packet (because from/to are broken out by the comms library) */
|
||||||
typedef struct _Data {
|
typedef struct _Data {
|
||||||
/* Formerly named typ and of type Type */
|
/* Formerly named typ and of type Type */
|
||||||
PortNum portnum;
|
PortNum portnum;
|
||||||
/* TODO: REPLACE */
|
/* TODO: REPLACE */
|
||||||
Data_payload_t payload;
|
Data_payload_t payload;
|
||||||
/* Not normally used, but for testing a sender can request that recipient
|
/* Not normally used, but for testing a sender can request that recipient
|
||||||
responds in kind (i.e. if it received a position, it should unicast back it's position).
|
responds in kind (i.e. if it received a position, it should unicast back it's position).
|
||||||
Note: that if you set this on a broadcast you will receive many replies. */
|
Note: that if you set this on a broadcast you will receive many replies. */
|
||||||
bool want_response;
|
bool want_response;
|
||||||
/* The address of the destination node.
|
/* The address of the destination node.
|
||||||
This field is is filled in by the mesh radio device software, application
|
This field is is filled in by the mesh radio device software, application
|
||||||
layer software should never need it.
|
layer software should never need it.
|
||||||
RouteDiscovery messages _must_ populate this.
|
RouteDiscovery messages _must_ populate this.
|
||||||
Other message types might need to if they are doing multihop routing. */
|
Other message types might need to if they are doing multihop routing. */
|
||||||
uint32_t dest;
|
uint32_t dest;
|
||||||
/* The address of the original sender for this message.
|
/* The address of the original sender for this message.
|
||||||
This field should _only_ be populated for reliable multihop packets (to keep
|
This field should _only_ be populated for reliable multihop packets (to keep
|
||||||
packets small). */
|
packets small). */
|
||||||
uint32_t source;
|
uint32_t source;
|
||||||
/* Only used in routing or response messages.
|
/* Only used in routing or response messages.
|
||||||
Indicates the original message ID that this message is reporting failure on. (formerly called original_id) */
|
Indicates the original message ID that this message is reporting failure on. (formerly called original_id) */
|
||||||
uint32_t request_id;
|
uint32_t request_id;
|
||||||
/* If set, this message is intened to be a reply to a previously sent message with the defined id. */
|
/* If set, this message is intened to be a reply to a previously sent message with the defined id. */
|
||||||
uint32_t reply_id;
|
uint32_t reply_id;
|
||||||
/* Defaults to false. If true, then what is in the payload should be treated as an emoji like giving
|
/* Defaults to false. If true, then what is in the payload should be treated as an emoji like giving
|
||||||
a message a heart or poop emoji. */
|
a message a heart or poop emoji. */
|
||||||
uint32_t emoji;
|
uint32_t emoji;
|
||||||
/* Location structure */
|
/* Location structure */
|
||||||
bool has_location;
|
bool has_location;
|
||||||
Location location;
|
Location location;
|
||||||
} Data;
|
} Data;
|
||||||
|
|
||||||
/* The bluetooth to device link:
|
/* The bluetooth to device link:
|
||||||
@@ -518,33 +518,36 @@ typedef struct _Data {
|
|||||||
Full information about a node on the mesh */
|
Full information about a node on the mesh */
|
||||||
typedef struct _NodeInfo {
|
typedef struct _NodeInfo {
|
||||||
/* The node number */
|
/* The node number */
|
||||||
uint32_t num;
|
uint32_t num;
|
||||||
/* The user info for this node */
|
/* The user info for this node */
|
||||||
bool has_user;
|
bool has_user;
|
||||||
User user;
|
User user;
|
||||||
/* This position data. Note: before 1.2.14 we would also store the last time we've heard from this node in position.time, that is no longer true.
|
/* This position data. Note: before 1.2.14 we would also store the last time we've heard from this node in position.time, that is no longer true.
|
||||||
Position.time now indicates the last time we received a POSITION from that node. */
|
Position.time now indicates the last time we received a POSITION from that node. */
|
||||||
bool has_position;
|
bool has_position;
|
||||||
Position position;
|
Position position;
|
||||||
/* Returns the Signal-to-noise ratio (SNR) of the last received message,
|
/* Returns the Signal-to-noise ratio (SNR) of the last received message,
|
||||||
as measured by the receiver. Return SNR of the last received message in dB */
|
as measured by the receiver. Return SNR of the last received message in dB */
|
||||||
float snr;
|
float snr;
|
||||||
/* Set to indicate the last time we received a packet from this node */
|
/* Set to indicate the last time we received a packet from this node */
|
||||||
uint32_t last_heard;
|
uint32_t last_heard;
|
||||||
/* The latest device metrics for the node. */
|
/* The latest device metrics for the node. */
|
||||||
bool has_device_metrics;
|
bool has_device_metrics;
|
||||||
DeviceMetrics device_metrics;
|
DeviceMetrics device_metrics;
|
||||||
} NodeInfo;
|
} NodeInfo;
|
||||||
|
|
||||||
/* A Routing control Data packet handled by the routing module */
|
/* A Routing control Data packet handled by the routing module */
|
||||||
typedef struct _Routing {
|
typedef struct _Routing {
|
||||||
/* A route request going from the requester */
|
|
||||||
pb_size_t which_variant;
|
pb_size_t which_variant;
|
||||||
union {
|
union {
|
||||||
|
/* A route request going from the requester */
|
||||||
RouteDiscovery route_request;
|
RouteDiscovery route_request;
|
||||||
|
/* A route reply */
|
||||||
RouteDiscovery route_reply;
|
RouteDiscovery route_reply;
|
||||||
|
/* A failure in delivering a message (usually used for routing control messages, but might be provided
|
||||||
|
in addition to ack.fail_id to provide details on the type of failure). */
|
||||||
Routing_Error error_reason;
|
Routing_Error error_reason;
|
||||||
};
|
};
|
||||||
} Routing;
|
} Routing;
|
||||||
|
|
||||||
typedef PB_BYTES_ARRAY_T(256) MeshPacket_encrypted_t;
|
typedef PB_BYTES_ARRAY_T(256) MeshPacket_encrypted_t;
|
||||||
@@ -556,10 +559,10 @@ typedef struct _MeshPacket {
|
|||||||
Note: Our crypto implementation uses this field as well.
|
Note: Our crypto implementation uses this field as well.
|
||||||
See [crypto](/docs/developers/firmware/encryption) for details.
|
See [crypto](/docs/developers/firmware/encryption) for details.
|
||||||
FIXME - really should be fixed32 instead, this encoding only hurts the ble link though. */
|
FIXME - really should be fixed32 instead, this encoding only hurts the ble link though. */
|
||||||
uint32_t from;
|
uint32_t from;
|
||||||
/* The (immediatSee Priority description for more details.y should be fixed32 instead, this encoding only
|
/* The (immediatSee Priority description for more details.y should be fixed32 instead, this encoding only
|
||||||
hurts the ble link though. */
|
hurts the ble link though. */
|
||||||
uint32_t to;
|
uint32_t to;
|
||||||
/* (Usually) If set, this indicates the index in the secondary_channels table that this packet was sent/received on.
|
/* (Usually) If set, this indicates the index in the secondary_channels table that this packet was sent/received on.
|
||||||
If unset, packet was on the primary channel.
|
If unset, packet was on the primary channel.
|
||||||
A particular node might know only a subset of channels in use on the mesh.
|
A particular node might know only a subset of channels in use on the mesh.
|
||||||
@@ -567,15 +570,14 @@ typedef struct _MeshPacket {
|
|||||||
Very briefly, while sending and receiving deep inside the device Router code, this field instead
|
Very briefly, while sending and receiving deep inside the device Router code, this field instead
|
||||||
contains the 'channel hash' instead of the index.
|
contains the 'channel hash' instead of the index.
|
||||||
This 'trick' is only used while the payloadVariant is an 'encrypted'. */
|
This 'trick' is only used while the payloadVariant is an 'encrypted'. */
|
||||||
uint8_t channel;
|
uint8_t channel;
|
||||||
/* TODO: REPLACE */
|
|
||||||
pb_size_t which_payloadVariant;
|
pb_size_t which_payloadVariant;
|
||||||
union {
|
union {
|
||||||
|
/* TODO: REPLACE */
|
||||||
Data decoded;
|
Data decoded;
|
||||||
|
/* TODO: REPLACE */
|
||||||
MeshPacket_encrypted_t encrypted;
|
MeshPacket_encrypted_t encrypted;
|
||||||
};
|
};
|
||||||
/* TODO: REPLACE */
|
|
||||||
uint32_t id;
|
|
||||||
/* A unique ID for this packet.
|
/* A unique ID for this packet.
|
||||||
Always 0 for no-ack packets or non broadcast packets (and therefore take zero bytes of space).
|
Always 0 for no-ack packets or non broadcast packets (and therefore take zero bytes of space).
|
||||||
Otherwise a unique ID for this packet, useful for flooding algorithms.
|
Otherwise a unique ID for this packet, useful for flooding algorithms.
|
||||||
@@ -586,21 +588,21 @@ typedef struct _MeshPacket {
|
|||||||
See [crypto](/docs/developers/firmware/encryption) for details.
|
See [crypto](/docs/developers/firmware/encryption) for details.
|
||||||
FIXME - really should be fixed32 instead, this encoding only
|
FIXME - really should be fixed32 instead, this encoding only
|
||||||
hurts the ble link though. */
|
hurts the ble link though. */
|
||||||
uint32_t rx_time;
|
uint32_t id;
|
||||||
/* The time this message was received by the esp32 (secs since 1970).
|
/* The time this message was received by the esp32 (secs since 1970).
|
||||||
Note: this field is _never_ sent on the radio link itself (to save space) Times
|
Note: this field is _never_ sent on the radio link itself (to save space) Times
|
||||||
are typically not sent over the mesh, but they will be added to any Packet
|
are typically not sent over the mesh, but they will be added to any Packet
|
||||||
(chain of SubPacket) sent to the phone (so the phone can know exact time of reception) */
|
(chain of SubPacket) sent to the phone (so the phone can know exact time of reception) */
|
||||||
float rx_snr;
|
uint32_t rx_time;
|
||||||
/* *Never* sent over the radio links.
|
/* *Never* sent over the radio links.
|
||||||
Set during reception to indicate the SNR of this packet.
|
Set during reception to indicate the SNR of this packet.
|
||||||
Used to collect statistics on current link quality. */
|
Used to collect statistics on current link quality. */
|
||||||
uint8_t hop_limit;
|
float rx_snr;
|
||||||
/* If unset treated as zero (no forwarding, send to adjacent nodes only)
|
/* If unset treated as zero (no forwarding, send to adjacent nodes only)
|
||||||
if 1, allow hopping through one node, etc...
|
if 1, allow hopping through one node, etc...
|
||||||
For our usecase real world topologies probably have a max of about 3.
|
For our usecase real world topologies probably have a max of about 3.
|
||||||
This field is normally placed into a few of bits in the header. */
|
This field is normally placed into a few of bits in the header. */
|
||||||
bool want_ack;
|
uint8_t hop_limit;
|
||||||
/* This packet is being sent as a reliable message, we would prefer it to arrive at the destination.
|
/* This packet is being sent as a reliable message, we would prefer it to arrive at the destination.
|
||||||
We would like to receive a ack packet in response.
|
We would like to receive a ack packet in response.
|
||||||
Broadcasts messages treat this flag specially: Since acks for broadcasts would
|
Broadcasts messages treat this flag specially: Since acks for broadcasts would
|
||||||
@@ -610,12 +612,14 @@ typedef struct _MeshPacket {
|
|||||||
So FloodingRouter.cpp generates an implicit ack which is delivered to the original sender.
|
So FloodingRouter.cpp generates an implicit ack which is delivered to the original sender.
|
||||||
If after some time we don't hear anyone rebroadcast our packet, we will timeout and retransmit, using the regular resend logic.
|
If after some time we don't hear anyone rebroadcast our packet, we will timeout and retransmit, using the regular resend logic.
|
||||||
Note: This flag is normally sent in a flag bit in the header when sent over the wire */
|
Note: This flag is normally sent in a flag bit in the header when sent over the wire */
|
||||||
MeshPacket_Priority priority;
|
bool want_ack;
|
||||||
/* The priority of this message for sending.
|
/* The priority of this message for sending.
|
||||||
See MeshPacket.Priority description for more details. */
|
See MeshPacket.Priority description for more details. */
|
||||||
int32_t rx_rssi;
|
MeshPacket_Priority priority;
|
||||||
/* rssi of received packet. Only sent to phone for dispay purposes. */
|
/* rssi of received packet. Only sent to phone for dispay purposes. */
|
||||||
MeshPacket_Delayed delayed;
|
int32_t rx_rssi;
|
||||||
|
/* Describe if this message is delayed */
|
||||||
|
MeshPacket_Delayed delayed;
|
||||||
} MeshPacket;
|
} MeshPacket;
|
||||||
|
|
||||||
/* Packets from the radio to the phone will appear on the fromRadio characteristic.
|
/* Packets from the radio to the phone will appear on the fromRadio characteristic.
|
||||||
@@ -625,31 +629,58 @@ typedef struct _MeshPacket {
|
|||||||
typedef struct _FromRadio {
|
typedef struct _FromRadio {
|
||||||
/* The packet id, used to allow the phone to request missing read packets from the FIFO,
|
/* The packet id, used to allow the phone to request missing read packets from the FIFO,
|
||||||
see our bluetooth docs */
|
see our bluetooth docs */
|
||||||
uint32_t id;
|
uint32_t id;
|
||||||
/* Log levels, chosen to match python logging conventions. */
|
|
||||||
pb_size_t which_payloadVariant;
|
pb_size_t which_payloadVariant;
|
||||||
union {
|
union {
|
||||||
|
/* Tells the phone what our node number is, can be -1 if we've not yet joined a mesh.
|
||||||
|
NOTE: This ID must not change - to keep (minimal) compatibility with <1.2 version of android apps. */
|
||||||
MyNodeInfo my_info;
|
MyNodeInfo my_info;
|
||||||
|
/* One packet is sent for each node in the on radio DB
|
||||||
|
starts over with the first node in our DB */
|
||||||
NodeInfo node_info;
|
NodeInfo node_info;
|
||||||
|
/* Include a part of the config (was: RadioConfig radio) */
|
||||||
Config config;
|
Config config;
|
||||||
|
/* Set to send debug console output over our protobuf stream */
|
||||||
LogRecord log_record;
|
LogRecord log_record;
|
||||||
|
/* Sent as true once the device has finished sending all of the responses to want_config
|
||||||
|
recipient should check if this ID matches our original request nonce, if
|
||||||
|
not, it means your config responses haven't started yet.
|
||||||
|
NOTE: This ID must not change - to keep (minimal) compatibility with <1.2 version of android apps. */
|
||||||
uint32_t config_complete_id;
|
uint32_t config_complete_id;
|
||||||
|
/* Sent to tell clients the radio has just rebooted.
|
||||||
|
Set to true if present.
|
||||||
|
Not used on all transports, currently just used for the serial console.
|
||||||
|
NOTE: This ID must not change - to keep (minimal) compatibility with <1.2 version of android apps. */
|
||||||
bool rebooted;
|
bool rebooted;
|
||||||
|
/* Log levels, chosen to match python logging conventions. */
|
||||||
MeshPacket packet;
|
MeshPacket packet;
|
||||||
};
|
};
|
||||||
} FromRadio;
|
} FromRadio;
|
||||||
|
|
||||||
/* Packets/commands to the radio will be written (reliably) to the toRadio characteristic.
|
/* Packets/commands to the radio will be written (reliably) to the toRadio characteristic.
|
||||||
Once the write completes the phone can assume it is handled. */
|
Once the write completes the phone can assume it is handled. */
|
||||||
typedef struct _ToRadio {
|
typedef struct _ToRadio {
|
||||||
/* Send this packet on the mesh */
|
|
||||||
pb_size_t which_payloadVariant;
|
pb_size_t which_payloadVariant;
|
||||||
union {
|
union {
|
||||||
|
/* Send this packet on the mesh */
|
||||||
MeshPacket packet;
|
MeshPacket packet;
|
||||||
|
/* Information about the peer, sent after the phone sneds want_config_id.
|
||||||
|
Old clients do not send this, which is fine. */
|
||||||
ToRadio_PeerInfo peer_info;
|
ToRadio_PeerInfo peer_info;
|
||||||
|
/* Phone wants radio to send full node db to the phone, This is
|
||||||
|
typically the first packet sent to the radio when the phone gets a
|
||||||
|
bluetooth connection. The radio will respond by sending back a
|
||||||
|
MyNodeInfo, a owner, a radio config and a series of
|
||||||
|
FromRadio.node_infos, and config_complete
|
||||||
|
the integer you write into this field will be reported back in the
|
||||||
|
config_complete_id response this allows clients to never be confused by
|
||||||
|
a stale old partially sent config. */
|
||||||
uint32_t want_config_id;
|
uint32_t want_config_id;
|
||||||
|
/* Tell API server we are disconnecting now.
|
||||||
|
This is useful for serial links where there is no hardware/protocol based notification that the client has dropped the link.
|
||||||
|
(Sending this message is optional for clients) */
|
||||||
bool disconnect;
|
bool disconnect;
|
||||||
};
|
};
|
||||||
} ToRadio;
|
} ToRadio;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#include "module_config.pb.h"
|
#include "module_config.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#ifndef PB_MODULE_CONFIG_PB_H_INCLUDED
|
#ifndef PB_MODULE_CONFIG_PB_H_INCLUDED
|
||||||
#define PB_MODULE_CONFIG_PB_H_INCLUDED
|
#define PB_MODULE_CONFIG_PB_H_INCLUDED
|
||||||
@@ -49,85 +49,91 @@ typedef enum _ModuleConfig_CannedMessageConfig_InputEventChar {
|
|||||||
|
|
||||||
/* Struct definitions */
|
/* Struct definitions */
|
||||||
typedef struct _ModuleConfig_CannedMessageConfig {
|
typedef struct _ModuleConfig_CannedMessageConfig {
|
||||||
bool rotary1_enabled;
|
bool rotary1_enabled;
|
||||||
uint32_t inputbroker_pin_a;
|
uint32_t inputbroker_pin_a;
|
||||||
uint32_t inputbroker_pin_b;
|
uint32_t inputbroker_pin_b;
|
||||||
uint32_t inputbroker_pin_press;
|
uint32_t inputbroker_pin_press;
|
||||||
ModuleConfig_CannedMessageConfig_InputEventChar inputbroker_event_cw;
|
ModuleConfig_CannedMessageConfig_InputEventChar inputbroker_event_cw;
|
||||||
ModuleConfig_CannedMessageConfig_InputEventChar inputbroker_event_ccw;
|
ModuleConfig_CannedMessageConfig_InputEventChar inputbroker_event_ccw;
|
||||||
ModuleConfig_CannedMessageConfig_InputEventChar inputbroker_event_press;
|
ModuleConfig_CannedMessageConfig_InputEventChar inputbroker_event_press;
|
||||||
bool updown1_enabled;
|
bool updown1_enabled;
|
||||||
bool enabled;
|
bool enabled;
|
||||||
char allow_input_source[16];
|
char allow_input_source[16];
|
||||||
bool send_bell;
|
bool send_bell;
|
||||||
} ModuleConfig_CannedMessageConfig;
|
} ModuleConfig_CannedMessageConfig;
|
||||||
|
|
||||||
typedef struct _ModuleConfig_ExternalNotificationConfig {
|
typedef struct _ModuleConfig_ExternalNotificationConfig {
|
||||||
bool enabled;
|
bool enabled;
|
||||||
uint32_t output_ms;
|
uint32_t output_ms;
|
||||||
uint32_t output;
|
uint32_t output;
|
||||||
bool active;
|
bool active;
|
||||||
bool alert_message;
|
bool alert_message;
|
||||||
bool alert_bell;
|
bool alert_bell;
|
||||||
} ModuleConfig_ExternalNotificationConfig;
|
} ModuleConfig_ExternalNotificationConfig;
|
||||||
|
|
||||||
typedef struct _ModuleConfig_MQTTConfig {
|
typedef struct _ModuleConfig_MQTTConfig {
|
||||||
bool disabled;
|
bool disabled;
|
||||||
char address[32];
|
char address[32];
|
||||||
char username[32];
|
char username[32];
|
||||||
char password[32];
|
char password[32];
|
||||||
bool encryption_enabled;
|
bool encryption_enabled;
|
||||||
} ModuleConfig_MQTTConfig;
|
} ModuleConfig_MQTTConfig;
|
||||||
|
|
||||||
typedef struct _ModuleConfig_RangeTestConfig {
|
typedef struct _ModuleConfig_RangeTestConfig {
|
||||||
bool enabled;
|
bool enabled;
|
||||||
uint32_t sender;
|
uint32_t sender;
|
||||||
bool save;
|
bool save;
|
||||||
} ModuleConfig_RangeTestConfig;
|
} ModuleConfig_RangeTestConfig;
|
||||||
|
|
||||||
typedef struct _ModuleConfig_SerialConfig {
|
typedef struct _ModuleConfig_SerialConfig {
|
||||||
bool enabled;
|
bool enabled;
|
||||||
bool echo;
|
bool echo;
|
||||||
uint32_t rxd;
|
uint32_t rxd;
|
||||||
uint32_t txd;
|
uint32_t txd;
|
||||||
ModuleConfig_SerialConfig_Serial_Baud baud;
|
ModuleConfig_SerialConfig_Serial_Baud baud;
|
||||||
uint32_t timeout;
|
uint32_t timeout;
|
||||||
ModuleConfig_SerialConfig_Serial_Mode mode;
|
ModuleConfig_SerialConfig_Serial_Mode mode;
|
||||||
} ModuleConfig_SerialConfig;
|
} ModuleConfig_SerialConfig;
|
||||||
|
|
||||||
typedef struct _ModuleConfig_StoreForwardConfig {
|
typedef struct _ModuleConfig_StoreForwardConfig {
|
||||||
bool enabled;
|
bool enabled;
|
||||||
bool heartbeat;
|
bool heartbeat;
|
||||||
uint32_t records;
|
uint32_t records;
|
||||||
uint32_t history_return_max;
|
uint32_t history_return_max;
|
||||||
uint32_t history_return_window;
|
uint32_t history_return_window;
|
||||||
} ModuleConfig_StoreForwardConfig;
|
} ModuleConfig_StoreForwardConfig;
|
||||||
|
|
||||||
typedef struct _ModuleConfig_TelemetryConfig {
|
typedef struct _ModuleConfig_TelemetryConfig {
|
||||||
uint32_t device_update_interval;
|
uint32_t device_update_interval;
|
||||||
uint32_t environment_update_interval;
|
uint32_t environment_update_interval;
|
||||||
bool environment_measurement_enabled;
|
bool environment_measurement_enabled;
|
||||||
bool environment_screen_enabled;
|
bool environment_screen_enabled;
|
||||||
uint32_t environment_read_error_count_threshold;
|
uint32_t environment_read_error_count_threshold;
|
||||||
uint32_t environment_recovery_interval;
|
uint32_t environment_recovery_interval;
|
||||||
bool environment_display_fahrenheit;
|
bool environment_display_fahrenheit;
|
||||||
TelemetrySensorType environment_sensor_type;
|
TelemetrySensorType environment_sensor_type;
|
||||||
uint32_t environment_sensor_pin;
|
uint32_t environment_sensor_pin;
|
||||||
} ModuleConfig_TelemetryConfig;
|
} ModuleConfig_TelemetryConfig;
|
||||||
|
|
||||||
/* Module Config */
|
/* Module Config */
|
||||||
typedef struct _ModuleConfig {
|
typedef struct _ModuleConfig {
|
||||||
/* TODO: REPLACE */
|
|
||||||
pb_size_t which_payloadVariant;
|
pb_size_t which_payloadVariant;
|
||||||
union {
|
union {
|
||||||
|
/* TODO: REPLACE */
|
||||||
ModuleConfig_MQTTConfig mqtt;
|
ModuleConfig_MQTTConfig mqtt;
|
||||||
|
/* TODO: REPLACE */
|
||||||
ModuleConfig_SerialConfig serial;
|
ModuleConfig_SerialConfig serial;
|
||||||
|
/* TODO: REPLACE */
|
||||||
ModuleConfig_ExternalNotificationConfig external_notification;
|
ModuleConfig_ExternalNotificationConfig external_notification;
|
||||||
|
/* TODO: REPLACE */
|
||||||
ModuleConfig_StoreForwardConfig store_forward;
|
ModuleConfig_StoreForwardConfig store_forward;
|
||||||
|
/* TODO: REPLACE */
|
||||||
ModuleConfig_RangeTestConfig range_test;
|
ModuleConfig_RangeTestConfig range_test;
|
||||||
|
/* TODO: REPLACE */
|
||||||
ModuleConfig_TelemetryConfig telemetry;
|
ModuleConfig_TelemetryConfig telemetry;
|
||||||
|
/* TODO: REPLACE */
|
||||||
ModuleConfig_CannedMessageConfig canned_message;
|
ModuleConfig_CannedMessageConfig canned_message;
|
||||||
} payloadVariant;
|
} payloadVariant;
|
||||||
} ModuleConfig;
|
} ModuleConfig;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#include "mqtt.pb.h"
|
#include "mqtt.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#ifndef PB_MQTT_PB_H_INCLUDED
|
#ifndef PB_MQTT_PB_H_INCLUDED
|
||||||
#define PB_MQTT_PB_H_INCLUDED
|
#define PB_MQTT_PB_H_INCLUDED
|
||||||
@@ -14,13 +14,13 @@
|
|||||||
/* This message wraps a MeshPacket with extra metadata about the sender and how it arrived. */
|
/* This message wraps a MeshPacket with extra metadata about the sender and how it arrived. */
|
||||||
typedef struct _ServiceEnvelope {
|
typedef struct _ServiceEnvelope {
|
||||||
/* The (probably encrypted) packet */
|
/* The (probably encrypted) packet */
|
||||||
struct _MeshPacket *packet;
|
struct _MeshPacket *packet;
|
||||||
/* The global channel ID it was sent on */
|
/* The global channel ID it was sent on */
|
||||||
char *channel_id;
|
char *channel_id;
|
||||||
/* The sending gateway node ID. Can we use this to authenticate/prevent fake
|
/* The sending gateway node ID. Can we use this to authenticate/prevent fake
|
||||||
nodeid impersonation for senders? - i.e. use gateway/mesh id (which is authenticated) + local node id as
|
nodeid impersonation for senders? - i.e. use gateway/mesh id (which is authenticated) + local node id as
|
||||||
the globally trusted nodenum */
|
the globally trusted nodenum */
|
||||||
char *gateway_id;
|
char *gateway_id;
|
||||||
} ServiceEnvelope;
|
} ServiceEnvelope;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#include "portnums.pb.h"
|
#include "portnums.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#ifndef PB_PORTNUMS_PB_H_INCLUDED
|
#ifndef PB_PORTNUMS_PB_H_INCLUDED
|
||||||
#define PB_PORTNUMS_PB_H_INCLUDED
|
#define PB_PORTNUMS_PB_H_INCLUDED
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#include "remote_hardware.pb.h"
|
#include "remote_hardware.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#ifndef PB_REMOTE_HARDWARE_PB_H_INCLUDED
|
#ifndef PB_REMOTE_HARDWARE_PB_H_INCLUDED
|
||||||
#define PB_REMOTE_HARDWARE_PB_H_INCLUDED
|
#define PB_REMOTE_HARDWARE_PB_H_INCLUDED
|
||||||
@@ -31,12 +31,12 @@ typedef enum _HardwareMessage_Type {
|
|||||||
(a special channel once multichannel support is included?) */
|
(a special channel once multichannel support is included?) */
|
||||||
typedef struct _HardwareMessage {
|
typedef struct _HardwareMessage {
|
||||||
/* What type of HardwareMessage is this? */
|
/* What type of HardwareMessage is this? */
|
||||||
HardwareMessage_Type typ;
|
HardwareMessage_Type typ;
|
||||||
/* What gpios are we changing. Not used for all MessageTypes, see MessageType for details */
|
/* What gpios are we changing. Not used for all MessageTypes, see MessageType for details */
|
||||||
uint64_t gpio_mask;
|
uint64_t gpio_mask;
|
||||||
/* For gpios that were listed in gpio_mask as valid, what are the signal levels for those gpios.
|
/* For gpios that were listed in gpio_mask as valid, what are the signal levels for those gpios.
|
||||||
Not used for all MessageTypes, see MessageType for details */
|
Not used for all MessageTypes, see MessageType for details */
|
||||||
uint64_t gpio_value;
|
uint64_t gpio_value;
|
||||||
} HardwareMessage;
|
} HardwareMessage;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#include "storeforward.pb.h"
|
#include "storeforward.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#ifndef PB_STOREFORWARD_PB_H_INCLUDED
|
#ifndef PB_STOREFORWARD_PB_H_INCLUDED
|
||||||
#define PB_STOREFORWARD_PB_H_INCLUDED
|
#define PB_STOREFORWARD_PB_H_INCLUDED
|
||||||
@@ -28,41 +28,41 @@ typedef enum _StoreAndForward_RequestResponse {
|
|||||||
|
|
||||||
/* Struct definitions */
|
/* Struct definitions */
|
||||||
typedef struct _StoreAndForward_Heartbeat {
|
typedef struct _StoreAndForward_Heartbeat {
|
||||||
uint32_t period;
|
uint32_t period;
|
||||||
uint32_t secondary;
|
uint32_t secondary;
|
||||||
} StoreAndForward_Heartbeat;
|
} StoreAndForward_Heartbeat;
|
||||||
|
|
||||||
typedef struct _StoreAndForward_History {
|
typedef struct _StoreAndForward_History {
|
||||||
uint32_t history_messages;
|
uint32_t history_messages;
|
||||||
uint32_t window;
|
uint32_t window;
|
||||||
uint32_t last_request;
|
uint32_t last_request;
|
||||||
} StoreAndForward_History;
|
} StoreAndForward_History;
|
||||||
|
|
||||||
typedef struct _StoreAndForward_Statistics {
|
typedef struct _StoreAndForward_Statistics {
|
||||||
uint32_t messages_total;
|
uint32_t messages_total;
|
||||||
uint32_t messages_saved;
|
uint32_t messages_saved;
|
||||||
uint32_t messages_max;
|
uint32_t messages_max;
|
||||||
uint32_t up_time;
|
uint32_t up_time;
|
||||||
uint32_t requests;
|
uint32_t requests;
|
||||||
uint32_t requests_history;
|
uint32_t requests_history;
|
||||||
bool heartbeat;
|
bool heartbeat;
|
||||||
uint32_t return_max;
|
uint32_t return_max;
|
||||||
uint32_t return_window;
|
uint32_t return_window;
|
||||||
} StoreAndForward_Statistics;
|
} StoreAndForward_Statistics;
|
||||||
|
|
||||||
/* TODO: REPLACE */
|
/* TODO: REPLACE */
|
||||||
typedef struct _StoreAndForward {
|
typedef struct _StoreAndForward {
|
||||||
/* TODO: REPLACE */
|
/* TODO: REPLACE */
|
||||||
StoreAndForward_RequestResponse rr;
|
StoreAndForward_RequestResponse rr;
|
||||||
/* TODO: REPLACE */
|
/* TODO: REPLACE */
|
||||||
bool has_stats;
|
bool has_stats;
|
||||||
StoreAndForward_Statistics stats;
|
StoreAndForward_Statistics stats;
|
||||||
/* TODO: REPLACE */
|
/* TODO: REPLACE */
|
||||||
bool has_history;
|
bool has_history;
|
||||||
StoreAndForward_History history;
|
StoreAndForward_History history;
|
||||||
/* TODO: REPLACE */
|
/* TODO: REPLACE */
|
||||||
bool has_heartbeat;
|
bool has_heartbeat;
|
||||||
StoreAndForward_Heartbeat heartbeat;
|
StoreAndForward_Heartbeat heartbeat;
|
||||||
} StoreAndForward;
|
} StoreAndForward;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#include "telemetry.pb.h"
|
#include "telemetry.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.5 */
|
/* Generated by nanopb-0.4.6 */
|
||||||
|
|
||||||
#ifndef PB_TELEMETRY_PB_H_INCLUDED
|
#ifndef PB_TELEMETRY_PB_H_INCLUDED
|
||||||
#define PB_TELEMETRY_PB_H_INCLUDED
|
#define PB_TELEMETRY_PB_H_INCLUDED
|
||||||
@@ -42,29 +42,29 @@ typedef enum _TelemetrySensorType {
|
|||||||
/* Key native device metrics such as battery level */
|
/* Key native device metrics such as battery level */
|
||||||
typedef struct _DeviceMetrics {
|
typedef struct _DeviceMetrics {
|
||||||
/* 1-100 (0 means powered) */
|
/* 1-100 (0 means powered) */
|
||||||
uint32_t battery_level;
|
uint32_t battery_level;
|
||||||
/* Voltage measured */
|
/* Voltage measured */
|
||||||
float voltage;
|
float voltage;
|
||||||
/* Utilization for the current channel, including well formed TX, RX and malformed RX (aka noise). */
|
/* Utilization for the current channel, including well formed TX, RX and malformed RX (aka noise). */
|
||||||
float channel_utilization;
|
float channel_utilization;
|
||||||
/* Percent of airtime for transmission used within the last hour. */
|
/* Percent of airtime for transmission used within the last hour. */
|
||||||
float air_util_tx;
|
float air_util_tx;
|
||||||
} DeviceMetrics;
|
} DeviceMetrics;
|
||||||
|
|
||||||
/* Weather station or other environmental metrics */
|
/* Weather station or other environmental metrics */
|
||||||
typedef struct _EnvironmentMetrics {
|
typedef struct _EnvironmentMetrics {
|
||||||
/* Temperature measured */
|
/* Temperature measured */
|
||||||
float temperature;
|
float temperature;
|
||||||
/* Relative humidity percent measured */
|
/* Relative humidity percent measured */
|
||||||
float relative_humidity;
|
float relative_humidity;
|
||||||
/* Barometric pressure in hPA measured */
|
/* Barometric pressure in hPA measured */
|
||||||
float barometric_pressure;
|
float barometric_pressure;
|
||||||
/* Gas resistance in mOhm measured */
|
/* Gas resistance in mOhm measured */
|
||||||
float gas_resistance;
|
float gas_resistance;
|
||||||
/* Voltage measured */
|
/* Voltage measured */
|
||||||
float voltage;
|
float voltage;
|
||||||
/* Current measured */
|
/* Current measured */
|
||||||
float current;
|
float current;
|
||||||
} EnvironmentMetrics;
|
} EnvironmentMetrics;
|
||||||
|
|
||||||
/* Types of Measurements the telemetry module is equipped to handle */
|
/* Types of Measurements the telemetry module is equipped to handle */
|
||||||
@@ -74,13 +74,14 @@ typedef struct _Telemetry {
|
|||||||
the mesh (because there are devices on the mesh without GPS), it will only
|
the mesh (because there are devices on the mesh without GPS), it will only
|
||||||
be sent by devices which has a hardware GPS clock (IE Mobile Phone).
|
be sent by devices which has a hardware GPS clock (IE Mobile Phone).
|
||||||
seconds since 1970 */
|
seconds since 1970 */
|
||||||
uint32_t time;
|
uint32_t time;
|
||||||
/* Key native device metrics such as battery level */
|
|
||||||
pb_size_t which_variant;
|
pb_size_t which_variant;
|
||||||
union {
|
union {
|
||||||
|
/* Key native device metrics such as battery level */
|
||||||
DeviceMetrics device_metrics;
|
DeviceMetrics device_metrics;
|
||||||
|
/* Weather station or other environmental metrics */
|
||||||
EnvironmentMetrics environment_metrics;
|
EnvironmentMetrics environment_metrics;
|
||||||
} variant;
|
} variant;
|
||||||
} Telemetry;
|
} Telemetry;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user