From 35c30c7220fb9bf5e2faa2d06fb86e5d14bf886d Mon Sep 17 00:00:00 2001 From: tuxphone <67556506+tuxphone@users.noreply.github.com> Date: Sun, 27 Sep 2020 17:17:07 +0200 Subject: [PATCH] platform.io --- src/config.h | 74 ++++++ src/mesh.pb.h | 652 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 726 insertions(+) create mode 100644 src/config.h create mode 100644 src/mesh.pb.h diff --git a/src/config.h b/src/config.h new file mode 100644 index 0000000..0b48159 --- /dev/null +++ b/src/config.h @@ -0,0 +1,74 @@ +#include "mesh.pb.h" +// CONFIGURATION HERE: +#define REGION RegionCode_EU865 // define your region here. For US, RegionCode_US, CN RegionCode_Cn etc. +char MESHTASTIC_NAME[12] = {"Default"}; // Channel Name, but without "-Xy" suffix , e.g. use "Test" instead of "Test-A" +#define MESHTASTIC_SPEED 3 // 0 = short range, 1 = medium range, 2 = long range, 3 = very long range + +#define TX_MAX_POWER 22 // max output power in dB, keep in mind the maximums set by law and the hardware +#define MESHTASTIC_PSK { 0x10, 0xd4, 0xf1, 0xbb, 0x3a, 0x20, 0x29, 0x07, 0x59, 0xf0, 0xbc, 0xff, 0xab, 0xcf, 0x4e, 0x69, 0xbf } + +#define RGB_GREEN 0x000300 // receive mode --- not longer used (save energy) +#define RGB_RED 0x030000 // send mode + +#define LORA_PREAMBLE_LENGTH 32 // Same for Tx and Rx +#define LORA_SYMBOL_TIMEOUT 0 // Symbols +#define RX_TIMEOUT_VALUE 1000 +#define MAX_PAYLOAD_LENGTH 0xFF // max payload (see \cores\asr650x\device\asr6501_lrwan\radio.c --> MaxPayloadLength) + +/* possible RegionCodes, from mesh.pb.h: +typedef enum _RegionCode { + RegionCode_Unset = 0, + RegionCode_US = 1, + RegionCode_EU433 = 2, + RegionCode_EU865 = 3, + RegionCode_CN = 4, + RegionCode_JP = 5, + RegionCode_ANZ = 6, + RegionCode_KR = 7, + RegionCode_TW = 8 +} RegionCode; +*/ + +typedef struct { + uint32_t to, from, id; + uint8_t flags; // The bottom three bits of flags are used to store hop_limit, bit 4 is the WANT_ACK flag +} PacketHeader; + +#define MSG(...) Serial.printf(__VA_ARGS__) +#define HEXMSG(...) Serial.print (__VA_ARGS__ , HEX) + +void TxDone( void ); +void TxTimeout( void ); +void RxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr ); +void ConfigureRadio( ChannelSettings ChanSet ); +unsigned long hash(char *str); + + +// from Meshtastic project: MeshRadio.h , RadioInterface.cpp +#define RDEF(name, freq, spacing, num_ch, power_limit) \ + { \ + RegionCode_##name, num_ch, power_limit, freq, spacing, #name \ + } +struct RegionInfo { + RegionCode code; + uint8_t numChannels; + uint8_t powerLimit; // Or zero for not set + float freq; + float spacing; + const char *name; // EU433 etc +}; + +const RegionInfo regions[] = { + RDEF(US, 903.08f, 2.16f, 13, 0), + RDEF(EU433, 433.175f, 0.2f, 8, 0), + RDEF(EU865, 865.2f, 0.3f, 10, 0), + RDEF(CN, 470.0f, 2.0f, 20, 0), + RDEF(JP, 920.0f, 0.5f, 10, 13), // See https://github.com/meshtastic/Meshtastic-device/issues/346 power level 13 + RDEF(ANZ, 916.0f, 0.5f, 20, 0), // AU/NZ channel settings 915-928MHz + RDEF(KR, 921.9f, 0.2f, 8, 0), // KR channel settings (KR920-923) Start from TTN download channel + // freq. (921.9f is for download, others are for uplink) + RDEF(TW, 923.0f, 0.2f, 10, 0), // TW channel settings (AS2 bandplan 923-925MHz) + RDEF(Unset, 903.08f, 2.16f, 13, 0) // Assume US freqs if unset, Must be last +}; + +static const RegionInfo *myRegion; diff --git a/src/mesh.pb.h b/src/mesh.pb.h new file mode 100644 index 0000000..3ebda88 --- /dev/null +++ b/src/mesh.pb.h @@ -0,0 +1,652 @@ +/* Automatically generated nanopb header */ +/* Generated by nanopb-0.4.1 */ + +#ifndef PB_MESH_PB_H_INCLUDED +#define PB_MESH_PB_H_INCLUDED +#include + +#if PB_PROTO_HEADER_VERSION != 40 +#error Regenerate this file with the current version of nanopb generator. +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Enum definitions */ +typedef enum _RouteError { + RouteError_NONE = 0, + RouteError_NO_ROUTE = 1, + RouteError_GOT_NAK = 2, + RouteError_TIMEOUT = 3 +} RouteError; + +typedef enum _Constants { + Constants_Unused = 0 +} Constants; + +typedef enum _RegionCode { + RegionCode_Unset = 0, + RegionCode_US = 1, + RegionCode_EU433 = 2, + RegionCode_EU865 = 3, + RegionCode_CN = 4, + RegionCode_JP = 5, + RegionCode_ANZ = 6, + RegionCode_KR = 7, + RegionCode_TW = 8 +} RegionCode; + +typedef enum _Data_Type { + Data_Type_OPAQUE = 0, + Data_Type_CLEAR_TEXT = 1, + Data_Type_CLEAR_READACK = 2 +} Data_Type; + +typedef enum _ChannelSettings_ModemConfig { + ChannelSettings_ModemConfig_Bw125Cr45Sf128 = 0, + ChannelSettings_ModemConfig_Bw500Cr45Sf128 = 1, + ChannelSettings_ModemConfig_Bw31_25Cr48Sf512 = 2, + ChannelSettings_ModemConfig_Bw125Cr48Sf4096 = 3 +} ChannelSettings_ModemConfig; + +/* Struct definitions */ +typedef PB_BYTES_ARRAY_T(32) ChannelSettings_psk_t; +typedef struct _ChannelSettings { + int32_t tx_power; + ChannelSettings_ModemConfig modem_config; + ChannelSettings_psk_t psk; + char name[12]; + uint32_t bandwidth; + uint32_t spread_factor; + uint32_t coding_rate; + uint32_t channel_num; +} ChannelSettings; + +typedef PB_BYTES_ARRAY_T(240) Data_payload_t; +typedef struct _Data { + Data_Type typ; + Data_payload_t payload; +} Data; + +typedef struct _DebugString { + char message[256]; +} DebugString; + +typedef struct _ManufacturingData { + uint32_t fradioFreq; + pb_callback_t hw_model; + pb_callback_t hw_version; + int32_t selftest_result; +} ManufacturingData; + +typedef struct _MyNodeInfo { + uint32_t my_node_num; + bool has_gps; + int32_t num_channels; + char region[12]; + char hw_model[16]; + char firmware_version[12]; + uint32_t error_code; + uint32_t error_address; + uint32_t error_count; + uint32_t packet_id_bits; + uint32_t current_packet_id; + uint32_t node_num_bits; + uint32_t message_timeout_msec; + uint32_t min_app_version; +} MyNodeInfo; + +typedef struct _Position { + int32_t altitude; + int32_t battery_level; + int32_t latitude_i; + int32_t longitude_i; + uint32_t time; +} Position; + +typedef struct _RadioConfig_UserPreferences { + uint32_t position_broadcast_secs; + uint32_t send_owner_interval; + uint32_t num_missed_to_fail; + uint32_t wait_bluetooth_secs; + uint32_t screen_on_secs; + uint32_t phone_timeout_secs; + uint32_t phone_sds_timeout_sec; + uint32_t mesh_sds_timeout_secs; + uint32_t sds_secs; + uint32_t ls_secs; + uint32_t min_wake_secs; + char wifi_ssid[33]; + char wifi_password[64]; + bool wifi_ap_mode; + RegionCode region; + bool factory_reset; + pb_size_t ignore_incoming_count; + uint32_t ignore_incoming[3]; +} RadioConfig_UserPreferences; + +typedef struct _RouteDiscovery { + pb_size_t route_count; + int32_t route[8]; +} RouteDiscovery; + +typedef struct _User { + char id[16]; + char long_name[40]; + char short_name[5]; + pb_byte_t macaddr[6]; +} User; + +typedef struct _NodeInfo { + uint32_t num; + bool has_user; + User user; + bool has_position; + Position position; + uint32_t next_hop; + float snr; +} NodeInfo; + +typedef struct _RadioConfig { + bool has_preferences; + RadioConfig_UserPreferences preferences; + bool has_channel_settings; + ChannelSettings channel_settings; +} RadioConfig; + +typedef struct _SubPacket { + pb_size_t which_payload; + union { + Position position; + Data data; + User user; + RouteDiscovery route_request; + RouteDiscovery route_reply; + RouteError route_error; + }; + uint32_t original_id; + bool want_response; + uint32_t dest; + pb_size_t which_ack; + union { + uint32_t success_id; + uint32_t fail_id; + } ack; + uint32_t source; +} SubPacket; + +typedef PB_BYTES_ARRAY_T(256) MeshPacket_encrypted_t; +typedef struct _MeshPacket { + uint32_t from; + uint32_t to; + pb_size_t which_payload; + union { + SubPacket decoded; + MeshPacket_encrypted_t encrypted; + }; + uint32_t id; + float rx_snr; + uint32_t rx_time; + uint32_t hop_limit; + bool want_ack; +} MeshPacket; + +typedef struct _DeviceState { + bool has_radio; + RadioConfig radio; + bool has_my_node; + MyNodeInfo my_node; + bool has_owner; + User owner; + pb_size_t node_db_count; + NodeInfo node_db[32]; + pb_size_t receive_queue_count; + MeshPacket receive_queue[1]; + bool has_rx_text_message; + MeshPacket rx_text_message; + uint32_t version; + bool no_save; + bool did_gps_reset; +} DeviceState; + +typedef struct _FromRadio { + uint32_t num; + pb_size_t which_variant; + union { + MeshPacket packet; + MyNodeInfo my_info; + NodeInfo node_info; + RadioConfig radio; + DebugString debug_string; + uint32_t config_complete_id; + bool rebooted; + } variant; +} FromRadio; + +typedef struct _ToRadio { + pb_size_t which_variant; + union { + MeshPacket packet; + uint32_t want_config_id; + RadioConfig set_radio; + User set_owner; + } variant; +} ToRadio; + + +/* Helper constants for enums */ +#define _RouteError_MIN RouteError_NONE +#define _RouteError_MAX RouteError_TIMEOUT +#define _RouteError_ARRAYSIZE ((RouteError)(RouteError_TIMEOUT+1)) + +#define _Constants_MIN Constants_Unused +#define _Constants_MAX Constants_Unused +#define _Constants_ARRAYSIZE ((Constants)(Constants_Unused+1)) + +#define _RegionCode_MIN RegionCode_Unset +#define _RegionCode_MAX RegionCode_TW +#define _RegionCode_ARRAYSIZE ((RegionCode)(RegionCode_TW+1)) + +#define _Data_Type_MIN Data_Type_OPAQUE +#define _Data_Type_MAX Data_Type_CLEAR_READACK +#define _Data_Type_ARRAYSIZE ((Data_Type)(Data_Type_CLEAR_READACK+1)) + +#define _ChannelSettings_ModemConfig_MIN ChannelSettings_ModemConfig_Bw125Cr45Sf128 +#define _ChannelSettings_ModemConfig_MAX ChannelSettings_ModemConfig_Bw125Cr48Sf4096 +#define _ChannelSettings_ModemConfig_ARRAYSIZE ((ChannelSettings_ModemConfig)(ChannelSettings_ModemConfig_Bw125Cr48Sf4096+1)) + + +/* Initializer values for message structs */ +#define Position_init_default {0, 0, 0, 0, 0} +#define Data_init_default {_Data_Type_MIN, {0, {0}}} +#define User_init_default {"", "", "", {0}} +#define RouteDiscovery_init_default {0, {0, 0, 0, 0, 0, 0, 0, 0}} +#define SubPacket_init_default {0, {Position_init_default}, 0, 0, 0, 0, {0}, 0} +#define MeshPacket_init_default {0, 0, 0, {SubPacket_init_default}, 0, 0, 0, 0, 0} +#define ChannelSettings_init_default {0, _ChannelSettings_ModemConfig_MIN, {0, {0}}, "", 0, 0, 0, 0} +#define RadioConfig_init_default {false, RadioConfig_UserPreferences_init_default, false, ChannelSettings_init_default} +#define RadioConfig_UserPreferences_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "", "", 0, _RegionCode_MIN, 0, 0, {0, 0, 0}} +#define NodeInfo_init_default {0, false, User_init_default, false, Position_init_default, 0, 0} +#define MyNodeInfo_init_default {0, 0, 0, "", "", "", 0, 0, 0, 0, 0, 0, 0, 0} +#define DeviceState_init_default {false, RadioConfig_init_default, false, MyNodeInfo_init_default, false, User_init_default, 0, {NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default}, 0, {MeshPacket_init_default}, false, MeshPacket_init_default, 0, 0, 0} +#define DebugString_init_default {""} +#define FromRadio_init_default {0, 0, {MeshPacket_init_default}} +#define ToRadio_init_default {0, {MeshPacket_init_default}} +#define ManufacturingData_init_default {0, {{NULL}, NULL}, {{NULL}, NULL}, 0} +#define Position_init_zero {0, 0, 0, 0, 0} +#define Data_init_zero {_Data_Type_MIN, {0, {0}}} +#define User_init_zero {"", "", "", {0}} +#define RouteDiscovery_init_zero {0, {0, 0, 0, 0, 0, 0, 0, 0}} +#define SubPacket_init_zero {0, {Position_init_zero}, 0, 0, 0, 0, {0}, 0} +#define MeshPacket_init_zero {0, 0, 0, {SubPacket_init_zero}, 0, 0, 0, 0, 0} +#define ChannelSettings_init_zero {0, _ChannelSettings_ModemConfig_MIN, {0, {0}}, "", 0, 0, 0, 0} +#define RadioConfig_init_zero {false, RadioConfig_UserPreferences_init_zero, false, ChannelSettings_init_zero} +#define RadioConfig_UserPreferences_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "", "", 0, _RegionCode_MIN, 0, 0, {0, 0, 0}} +#define NodeInfo_init_zero {0, false, User_init_zero, false, Position_init_zero, 0, 0} +#define MyNodeInfo_init_zero {0, 0, 0, "", "", "", 0, 0, 0, 0, 0, 0, 0, 0} +#define DeviceState_init_zero {false, RadioConfig_init_zero, false, MyNodeInfo_init_zero, false, User_init_zero, 0, {NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero}, 0, {MeshPacket_init_zero}, false, MeshPacket_init_zero, 0, 0, 0} +#define DebugString_init_zero {""} +#define FromRadio_init_zero {0, 0, {MeshPacket_init_zero}} +#define ToRadio_init_zero {0, {MeshPacket_init_zero}} +#define ManufacturingData_init_zero {0, {{NULL}, NULL}, {{NULL}, NULL}, 0} + +/* Field tags (for use in manual encoding/decoding) */ +#define ChannelSettings_tx_power_tag 1 +#define ChannelSettings_modem_config_tag 3 +#define ChannelSettings_bandwidth_tag 6 +#define ChannelSettings_spread_factor_tag 7 +#define ChannelSettings_coding_rate_tag 8 +#define ChannelSettings_channel_num_tag 9 +#define ChannelSettings_psk_tag 4 +#define ChannelSettings_name_tag 5 +#define Data_typ_tag 1 +#define Data_payload_tag 2 +#define DebugString_message_tag 1 +#define ManufacturingData_fradioFreq_tag 1 +#define ManufacturingData_hw_model_tag 2 +#define ManufacturingData_hw_version_tag 3 +#define ManufacturingData_selftest_result_tag 4 +#define MyNodeInfo_my_node_num_tag 1 +#define MyNodeInfo_has_gps_tag 2 +#define MyNodeInfo_num_channels_tag 3 +#define MyNodeInfo_region_tag 4 +#define MyNodeInfo_hw_model_tag 5 +#define MyNodeInfo_firmware_version_tag 6 +#define MyNodeInfo_error_code_tag 7 +#define MyNodeInfo_error_address_tag 8 +#define MyNodeInfo_error_count_tag 9 +#define MyNodeInfo_packet_id_bits_tag 10 +#define MyNodeInfo_current_packet_id_tag 11 +#define MyNodeInfo_node_num_bits_tag 12 +#define MyNodeInfo_message_timeout_msec_tag 13 +#define MyNodeInfo_min_app_version_tag 14 +#define Position_latitude_i_tag 7 +#define Position_longitude_i_tag 8 +#define Position_altitude_tag 3 +#define Position_battery_level_tag 4 +#define Position_time_tag 9 +#define RadioConfig_UserPreferences_position_broadcast_secs_tag 1 +#define RadioConfig_UserPreferences_send_owner_interval_tag 2 +#define RadioConfig_UserPreferences_num_missed_to_fail_tag 3 +#define RadioConfig_UserPreferences_wait_bluetooth_secs_tag 4 +#define RadioConfig_UserPreferences_screen_on_secs_tag 5 +#define RadioConfig_UserPreferences_phone_timeout_secs_tag 6 +#define RadioConfig_UserPreferences_phone_sds_timeout_sec_tag 7 +#define RadioConfig_UserPreferences_mesh_sds_timeout_secs_tag 8 +#define RadioConfig_UserPreferences_sds_secs_tag 9 +#define RadioConfig_UserPreferences_ls_secs_tag 10 +#define RadioConfig_UserPreferences_min_wake_secs_tag 11 +#define RadioConfig_UserPreferences_wifi_ssid_tag 12 +#define RadioConfig_UserPreferences_wifi_password_tag 13 +#define RadioConfig_UserPreferences_wifi_ap_mode_tag 14 +#define RadioConfig_UserPreferences_region_tag 15 +#define RadioConfig_UserPreferences_factory_reset_tag 100 +#define RadioConfig_UserPreferences_ignore_incoming_tag 103 +#define RouteDiscovery_route_tag 2 +#define User_id_tag 1 +#define User_long_name_tag 2 +#define User_short_name_tag 3 +#define User_macaddr_tag 4 +#define NodeInfo_num_tag 1 +#define NodeInfo_user_tag 2 +#define NodeInfo_position_tag 3 +#define NodeInfo_snr_tag 7 +#define NodeInfo_next_hop_tag 5 +#define RadioConfig_preferences_tag 1 +#define RadioConfig_channel_settings_tag 2 +#define SubPacket_position_tag 1 +#define SubPacket_data_tag 3 +#define SubPacket_user_tag 4 +#define SubPacket_route_request_tag 6 +#define SubPacket_route_reply_tag 7 +#define SubPacket_route_error_tag 13 +#define SubPacket_success_id_tag 10 +#define SubPacket_fail_id_tag 11 +#define SubPacket_want_response_tag 5 +#define SubPacket_dest_tag 9 +#define SubPacket_source_tag 12 +#define SubPacket_original_id_tag 2 +#define MeshPacket_decoded_tag 3 +#define MeshPacket_encrypted_tag 8 +#define MeshPacket_from_tag 1 +#define MeshPacket_to_tag 2 +#define MeshPacket_id_tag 6 +#define MeshPacket_rx_time_tag 9 +#define MeshPacket_rx_snr_tag 7 +#define MeshPacket_hop_limit_tag 10 +#define MeshPacket_want_ack_tag 11 +#define DeviceState_radio_tag 1 +#define DeviceState_my_node_tag 2 +#define DeviceState_owner_tag 3 +#define DeviceState_node_db_tag 4 +#define DeviceState_receive_queue_tag 5 +#define DeviceState_version_tag 8 +#define DeviceState_rx_text_message_tag 7 +#define DeviceState_no_save_tag 9 +#define DeviceState_did_gps_reset_tag 11 +#define FromRadio_packet_tag 2 +#define FromRadio_my_info_tag 3 +#define FromRadio_node_info_tag 4 +#define FromRadio_radio_tag 6 +#define FromRadio_debug_string_tag 7 +#define FromRadio_config_complete_id_tag 8 +#define FromRadio_rebooted_tag 9 +#define FromRadio_num_tag 1 +#define ToRadio_packet_tag 1 +#define ToRadio_want_config_id_tag 100 +#define ToRadio_set_radio_tag 101 +#define ToRadio_set_owner_tag 102 + +/* Struct field encoding specification for nanopb */ +#define Position_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, INT32, altitude, 3) \ +X(a, STATIC, SINGULAR, INT32, battery_level, 4) \ +X(a, STATIC, SINGULAR, SINT32, latitude_i, 7) \ +X(a, STATIC, SINGULAR, SINT32, longitude_i, 8) \ +X(a, STATIC, SINGULAR, FIXED32, time, 9) +#define Position_CALLBACK NULL +#define Position_DEFAULT NULL + +#define Data_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UENUM, typ, 1) \ +X(a, STATIC, SINGULAR, BYTES, payload, 2) +#define Data_CALLBACK NULL +#define Data_DEFAULT NULL + +#define User_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, STRING, id, 1) \ +X(a, STATIC, SINGULAR, STRING, long_name, 2) \ +X(a, STATIC, SINGULAR, STRING, short_name, 3) \ +X(a, STATIC, SINGULAR, FIXED_LENGTH_BYTES, macaddr, 4) +#define User_CALLBACK NULL +#define User_DEFAULT NULL + +#define RouteDiscovery_FIELDLIST(X, a) \ +X(a, STATIC, REPEATED, INT32, route, 2) +#define RouteDiscovery_CALLBACK NULL +#define RouteDiscovery_DEFAULT NULL + +#define SubPacket_FIELDLIST(X, a) \ +X(a, STATIC, ONEOF, MESSAGE, (payload,position,position), 1) \ +X(a, STATIC, ONEOF, MESSAGE, (payload,data,data), 3) \ +X(a, STATIC, ONEOF, MESSAGE, (payload,user,user), 4) \ +X(a, STATIC, ONEOF, MESSAGE, (payload,route_request,route_request), 6) \ +X(a, STATIC, ONEOF, MESSAGE, (payload,route_reply,route_reply), 7) \ +X(a, STATIC, ONEOF, ENUM, (payload,route_error,route_error), 13) \ +X(a, STATIC, SINGULAR, UINT32, original_id, 2) \ +X(a, STATIC, SINGULAR, BOOL, want_response, 5) \ +X(a, STATIC, SINGULAR, UINT32, dest, 9) \ +X(a, STATIC, ONEOF, UINT32, (ack,success_id,ack.success_id), 10) \ +X(a, STATIC, ONEOF, UINT32, (ack,fail_id,ack.fail_id), 11) \ +X(a, STATIC, SINGULAR, UINT32, source, 12) +#define SubPacket_CALLBACK NULL +#define SubPacket_DEFAULT NULL +#define SubPacket_payload_position_MSGTYPE Position +#define SubPacket_payload_data_MSGTYPE Data +#define SubPacket_payload_user_MSGTYPE User +#define SubPacket_payload_route_request_MSGTYPE RouteDiscovery +#define SubPacket_payload_route_reply_MSGTYPE RouteDiscovery + +#define MeshPacket_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT32, from, 1) \ +X(a, STATIC, SINGULAR, UINT32, to, 2) \ +X(a, STATIC, ONEOF, MESSAGE, (payload,decoded,decoded), 3) \ +X(a, STATIC, ONEOF, BYTES, (payload,encrypted,encrypted), 8) \ +X(a, STATIC, SINGULAR, UINT32, id, 6) \ +X(a, STATIC, SINGULAR, FLOAT, rx_snr, 7) \ +X(a, STATIC, SINGULAR, FIXED32, rx_time, 9) \ +X(a, STATIC, SINGULAR, UINT32, hop_limit, 10) \ +X(a, STATIC, SINGULAR, BOOL, want_ack, 11) +#define MeshPacket_CALLBACK NULL +#define MeshPacket_DEFAULT NULL +#define MeshPacket_payload_decoded_MSGTYPE SubPacket + +#define ChannelSettings_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, INT32, tx_power, 1) \ +X(a, STATIC, SINGULAR, UENUM, modem_config, 3) \ +X(a, STATIC, SINGULAR, BYTES, psk, 4) \ +X(a, STATIC, SINGULAR, STRING, name, 5) \ +X(a, STATIC, SINGULAR, UINT32, bandwidth, 6) \ +X(a, STATIC, SINGULAR, UINT32, spread_factor, 7) \ +X(a, STATIC, SINGULAR, UINT32, coding_rate, 8) \ +X(a, STATIC, SINGULAR, UINT32, channel_num, 9) +#define ChannelSettings_CALLBACK NULL +#define ChannelSettings_DEFAULT NULL + +#define RadioConfig_FIELDLIST(X, a) \ +X(a, STATIC, OPTIONAL, MESSAGE, preferences, 1) \ +X(a, STATIC, OPTIONAL, MESSAGE, channel_settings, 2) +#define RadioConfig_CALLBACK NULL +#define RadioConfig_DEFAULT NULL +#define RadioConfig_preferences_MSGTYPE RadioConfig_UserPreferences +#define RadioConfig_channel_settings_MSGTYPE ChannelSettings + +#define RadioConfig_UserPreferences_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT32, position_broadcast_secs, 1) \ +X(a, STATIC, SINGULAR, UINT32, send_owner_interval, 2) \ +X(a, STATIC, SINGULAR, UINT32, num_missed_to_fail, 3) \ +X(a, STATIC, SINGULAR, UINT32, wait_bluetooth_secs, 4) \ +X(a, STATIC, SINGULAR, UINT32, screen_on_secs, 5) \ +X(a, STATIC, SINGULAR, UINT32, phone_timeout_secs, 6) \ +X(a, STATIC, SINGULAR, UINT32, phone_sds_timeout_sec, 7) \ +X(a, STATIC, SINGULAR, UINT32, mesh_sds_timeout_secs, 8) \ +X(a, STATIC, SINGULAR, UINT32, sds_secs, 9) \ +X(a, STATIC, SINGULAR, UINT32, ls_secs, 10) \ +X(a, STATIC, SINGULAR, UINT32, min_wake_secs, 11) \ +X(a, STATIC, SINGULAR, STRING, wifi_ssid, 12) \ +X(a, STATIC, SINGULAR, STRING, wifi_password, 13) \ +X(a, STATIC, SINGULAR, BOOL, wifi_ap_mode, 14) \ +X(a, STATIC, SINGULAR, UENUM, region, 15) \ +X(a, STATIC, SINGULAR, BOOL, factory_reset, 100) \ +X(a, STATIC, REPEATED, UINT32, ignore_incoming, 103) +#define RadioConfig_UserPreferences_CALLBACK NULL +#define RadioConfig_UserPreferences_DEFAULT NULL + +#define NodeInfo_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT32, num, 1) \ +X(a, STATIC, OPTIONAL, MESSAGE, user, 2) \ +X(a, STATIC, OPTIONAL, MESSAGE, position, 3) \ +X(a, STATIC, SINGULAR, UINT32, next_hop, 5) \ +X(a, STATIC, SINGULAR, FLOAT, snr, 7) +#define NodeInfo_CALLBACK NULL +#define NodeInfo_DEFAULT NULL +#define NodeInfo_user_MSGTYPE User +#define NodeInfo_position_MSGTYPE Position + +#define MyNodeInfo_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT32, my_node_num, 1) \ +X(a, STATIC, SINGULAR, BOOL, has_gps, 2) \ +X(a, STATIC, SINGULAR, INT32, num_channels, 3) \ +X(a, STATIC, SINGULAR, STRING, region, 4) \ +X(a, STATIC, SINGULAR, STRING, hw_model, 5) \ +X(a, STATIC, SINGULAR, STRING, firmware_version, 6) \ +X(a, STATIC, SINGULAR, UINT32, error_code, 7) \ +X(a, STATIC, SINGULAR, UINT32, error_address, 8) \ +X(a, STATIC, SINGULAR, UINT32, error_count, 9) \ +X(a, STATIC, SINGULAR, UINT32, packet_id_bits, 10) \ +X(a, STATIC, SINGULAR, UINT32, current_packet_id, 11) \ +X(a, STATIC, SINGULAR, UINT32, node_num_bits, 12) \ +X(a, STATIC, SINGULAR, UINT32, message_timeout_msec, 13) \ +X(a, STATIC, SINGULAR, UINT32, min_app_version, 14) +#define MyNodeInfo_CALLBACK NULL +#define MyNodeInfo_DEFAULT NULL + +#define DeviceState_FIELDLIST(X, a) \ +X(a, STATIC, OPTIONAL, MESSAGE, radio, 1) \ +X(a, STATIC, OPTIONAL, MESSAGE, my_node, 2) \ +X(a, STATIC, OPTIONAL, MESSAGE, owner, 3) \ +X(a, STATIC, REPEATED, MESSAGE, node_db, 4) \ +X(a, STATIC, REPEATED, MESSAGE, receive_queue, 5) \ +X(a, STATIC, OPTIONAL, MESSAGE, rx_text_message, 7) \ +X(a, STATIC, SINGULAR, UINT32, version, 8) \ +X(a, STATIC, SINGULAR, BOOL, no_save, 9) \ +X(a, STATIC, SINGULAR, BOOL, did_gps_reset, 11) +#define DeviceState_CALLBACK NULL +#define DeviceState_DEFAULT NULL +#define DeviceState_radio_MSGTYPE RadioConfig +#define DeviceState_my_node_MSGTYPE MyNodeInfo +#define DeviceState_owner_MSGTYPE User +#define DeviceState_node_db_MSGTYPE NodeInfo +#define DeviceState_receive_queue_MSGTYPE MeshPacket +#define DeviceState_rx_text_message_MSGTYPE MeshPacket + +#define DebugString_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, STRING, message, 1) +#define DebugString_CALLBACK NULL +#define DebugString_DEFAULT NULL + +#define FromRadio_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT32, num, 1) \ +X(a, STATIC, ONEOF, MESSAGE, (variant,packet,variant.packet), 2) \ +X(a, STATIC, ONEOF, MESSAGE, (variant,my_info,variant.my_info), 3) \ +X(a, STATIC, ONEOF, MESSAGE, (variant,node_info,variant.node_info), 4) \ +X(a, STATIC, ONEOF, MESSAGE, (variant,radio,variant.radio), 6) \ +X(a, STATIC, ONEOF, MESSAGE, (variant,debug_string,variant.debug_string), 7) \ +X(a, STATIC, ONEOF, UINT32, (variant,config_complete_id,variant.config_complete_id), 8) \ +X(a, STATIC, ONEOF, BOOL, (variant,rebooted,variant.rebooted), 9) +#define FromRadio_CALLBACK NULL +#define FromRadio_DEFAULT NULL +#define FromRadio_variant_packet_MSGTYPE MeshPacket +#define FromRadio_variant_my_info_MSGTYPE MyNodeInfo +#define FromRadio_variant_node_info_MSGTYPE NodeInfo +#define FromRadio_variant_radio_MSGTYPE RadioConfig +#define FromRadio_variant_debug_string_MSGTYPE DebugString + +#define ToRadio_FIELDLIST(X, a) \ +X(a, STATIC, ONEOF, MESSAGE, (variant,packet,variant.packet), 1) \ +X(a, STATIC, ONEOF, UINT32, (variant,want_config_id,variant.want_config_id), 100) \ +X(a, STATIC, ONEOF, MESSAGE, (variant,set_radio,variant.set_radio), 101) \ +X(a, STATIC, ONEOF, MESSAGE, (variant,set_owner,variant.set_owner), 102) +#define ToRadio_CALLBACK NULL +#define ToRadio_DEFAULT NULL +#define ToRadio_variant_packet_MSGTYPE MeshPacket +#define ToRadio_variant_set_radio_MSGTYPE RadioConfig +#define ToRadio_variant_set_owner_MSGTYPE User + +#define ManufacturingData_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT32, fradioFreq, 1) \ +X(a, CALLBACK, SINGULAR, STRING, hw_model, 2) \ +X(a, CALLBACK, SINGULAR, STRING, hw_version, 3) \ +X(a, STATIC, SINGULAR, SINT32, selftest_result, 4) +#define ManufacturingData_CALLBACK pb_default_field_callback +#define ManufacturingData_DEFAULT NULL + +extern const pb_msgdesc_t Position_msg; +extern const pb_msgdesc_t Data_msg; +extern const pb_msgdesc_t User_msg; +extern const pb_msgdesc_t RouteDiscovery_msg; +extern const pb_msgdesc_t SubPacket_msg; +extern const pb_msgdesc_t MeshPacket_msg; +extern const pb_msgdesc_t ChannelSettings_msg; +extern const pb_msgdesc_t RadioConfig_msg; +extern const pb_msgdesc_t RadioConfig_UserPreferences_msg; +extern const pb_msgdesc_t NodeInfo_msg; +extern const pb_msgdesc_t MyNodeInfo_msg; +extern const pb_msgdesc_t DeviceState_msg; +extern const pb_msgdesc_t DebugString_msg; +extern const pb_msgdesc_t FromRadio_msg; +extern const pb_msgdesc_t ToRadio_msg; +extern const pb_msgdesc_t ManufacturingData_msg; + +/* Defines for backwards compatibility with code written before nanopb-0.4.0 */ +#define Position_fields &Position_msg +#define Data_fields &Data_msg +#define User_fields &User_msg +#define RouteDiscovery_fields &RouteDiscovery_msg +#define SubPacket_fields &SubPacket_msg +#define MeshPacket_fields &MeshPacket_msg +#define ChannelSettings_fields &ChannelSettings_msg +#define RadioConfig_fields &RadioConfig_msg +#define RadioConfig_UserPreferences_fields &RadioConfig_UserPreferences_msg +#define NodeInfo_fields &NodeInfo_msg +#define MyNodeInfo_fields &MyNodeInfo_msg +#define DeviceState_fields &DeviceState_msg +#define DebugString_fields &DebugString_msg +#define FromRadio_fields &FromRadio_msg +#define ToRadio_fields &ToRadio_msg +#define ManufacturingData_fields &ManufacturingData_msg + +/* Maximum encoded size of messages (where known) */ +#define Position_size 39 +#define Data_size 245 +#define User_size 72 +#define RouteDiscovery_size 88 +#define SubPacket_size 274 +#define MeshPacket_size 313 +#define ChannelSettings_size 84 +#define RadioConfig_size 282 +#define RadioConfig_UserPreferences_size 193 +#define NodeInfo_size 132 +#define MyNodeInfo_size 110 +#define DeviceState_size 5434 +#define DebugString_size 258 +#define FromRadio_size 322 +#define ToRadio_size 316 +/* ManufacturingData_size depends on runtime parameters */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif \ No newline at end of file