/* Automatically generated nanopb header */ /* Generated by nanopb-0.4.5 */ #ifndef PB_CHANNEL_PB_H_INCLUDED #define PB_CHANNEL_PB_H_INCLUDED #include #if PB_PROTO_HEADER_VERSION != 40 #error Regenerate this file with the current version of nanopb generator. #endif /* Enum definitions */ typedef enum _ChannelSettings_ModemConfig { ChannelSettings_ModemConfig_VLongSlow = 0, ChannelSettings_ModemConfig_LongSlow = 1, ChannelSettings_ModemConfig_LongFast = 2, ChannelSettings_ModemConfig_MidSlow = 3, ChannelSettings_ModemConfig_MidFast = 4, ChannelSettings_ModemConfig_ShortSlow = 5, ChannelSettings_ModemConfig_ShortFast = 6 } ChannelSettings_ModemConfig; typedef enum _Channel_Role { Channel_Role_DISABLED = 0, Channel_Role_PRIMARY = 1, Channel_Role_SECONDARY = 2 } Channel_Role; /* Struct definitions */ typedef PB_BYTES_ARRAY_T(32) ChannelSettings_psk_t; /* Full settings (center freq, spread factor, pre-shared secret key etc...) needed to configure a radio for speaking on a particular channel This information can be encoded as a QRcode/url so that other users can configure their radio to join the same channel. A note about how channel names are shown to users: channelname-Xy poundsymbol is a prefix used to indicate this is a channel name (idea from @professr). Where X is a letter from A-Z (base 26) representing a hash of the PSK for this channel - so that if the user changes anything about the channel (which does force a new PSK) this letter will also change. Thus preventing user confusion if two friends try to type in a channel name of "BobsChan" and then can't talk because their PSKs will be different. The PSK is hashed into this letter by "0x41 + [xor all bytes of the psk ] modulo 26" This also allows the option of someday if people have the PSK off (zero), the users COULD type in a channel name and be able to talk. Y is a lower case letter from a-z that represents the channel 'speed' settings (for some future definition of speed) FIXME: Add description of multi-channel support and how primary vs secondary channels are used. FIXME: explain how apps use channels for security. explain how remote settings and remote gpio are managed as an example */ typedef struct _ChannelSettings { /* If zero then, use default max legal continuous power (ie. something that won't burn out the radio hardware) In most cases you should use zero here. Units are in dBm. */ int8_t tx_power; /* Note: This is the 'old' mechanism for specifying channel parameters. Either modem_config or bandwidth/spreading/coding will be specified - NOT BOTH. As a heuristic: If bandwidth is specified, do not use modem_config. Because protobufs take ZERO space when the value is zero this works out nicely. This value is replaced by bandwidth/spread_factor/coding_rate. If you'd like to experiment with other options add them to MeshRadio.cpp in the device code. */ ChannelSettings_ModemConfig modem_config; /* Bandwidth in MHz Certain bandwidth numbers are 'special' and will be converted to the appropriate floating point value: 31 -> 31.25MHz */ ChannelSettings_psk_t psk; /* A number from 7 to 12. Indicates number of chirps per symbol as 1<