sforkowany z mirror/meshtastic-firmware
				
			Merge pull request #2278 from meshtastic/metadata-phone-api
Add metadata to phone api want config messagesraspi-portduino
						commit
						5c72967aa5
					
				|  | @ -1 +1 @@ | ||||||
| Subproject commit 1d0b4dd242ae38b844510d4517cfdceeed294cce | Subproject commit ff26da70385fc067af3c0d2950e97f90d632f142 | ||||||
							
								
								
									
										15
									
								
								src/main.cpp
								
								
								
								
							
							
						
						
									
										15
									
								
								src/main.cpp
								
								
								
								
							|  | @ -537,6 +537,21 @@ uint32_t shutdownAtMsec; // If not zero we will shutdown at this time (used to s | ||||||
| // This will supress the current delay and instead try to run ASAP.
 | // This will supress the current delay and instead try to run ASAP.
 | ||||||
| bool runASAP; | bool runASAP; | ||||||
| 
 | 
 | ||||||
|  | extern meshtastic_DeviceMetadata getDeviceMetadata() | ||||||
|  | { | ||||||
|  |     meshtastic_DeviceMetadata deviceMetadata; | ||||||
|  |     strncpy(deviceMetadata.firmware_version, myNodeInfo.firmware_version, 18); | ||||||
|  |     deviceMetadata.device_state_version = DEVICESTATE_CUR_VER; | ||||||
|  |     deviceMetadata.canShutdown = pmu_found || HAS_CPU_SHUTDOWN; | ||||||
|  |     deviceMetadata.hasBluetooth = HAS_BLUETOOTH; | ||||||
|  |     deviceMetadata.hasWifi = HAS_WIFI; | ||||||
|  |     deviceMetadata.hasEthernet = HAS_ETHERNET; | ||||||
|  |     deviceMetadata.role = config.device.role; | ||||||
|  |     deviceMetadata.position_flags = config.position.position_flags; | ||||||
|  |     deviceMetadata.hw_model = HW_VENDOR; | ||||||
|  |     return deviceMetadata; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void loop() | void loop() | ||||||
| { | { | ||||||
|     runASAP = false; |     runASAP = false; | ||||||
|  |  | ||||||
|  | @ -61,3 +61,5 @@ extern uint32_t serialSinceMsec; | ||||||
| extern bool runASAP; | extern bool runASAP; | ||||||
| 
 | 
 | ||||||
| void nrf52Setup(), esp32Setup(), nrf52Loop(), esp32Loop(), clearBonds(); | void nrf52Setup(), esp32Setup(), nrf52Loop(), esp32Loop(), clearBonds(); | ||||||
|  | 
 | ||||||
|  | meshtastic_DeviceMetadata getDeviceMetadata(); | ||||||
|  |  | ||||||
|  | @ -6,6 +6,7 @@ | ||||||
| #include "PowerFSM.h" | #include "PowerFSM.h" | ||||||
| #include "RadioInterface.h" | #include "RadioInterface.h" | ||||||
| #include "configuration.h" | #include "configuration.h" | ||||||
|  | #include "main.h" | ||||||
| #include "xmodem.h" | #include "xmodem.h" | ||||||
| 
 | 
 | ||||||
| #if FromRadio_size > MAX_TO_FROM_RADIO_SIZE | #if FromRadio_size > MAX_TO_FROM_RADIO_SIZE | ||||||
|  | @ -120,6 +121,7 @@ bool PhoneAPI::handleToRadio(const uint8_t *buf, size_t bufLength) | ||||||
|  *      STATE_SEND_NODEINFO, // states progress in this order as the device sends to the client
 |  *      STATE_SEND_NODEINFO, // states progress in this order as the device sends to the client
 | ||||||
|         STATE_SEND_CONFIG, |         STATE_SEND_CONFIG, | ||||||
|         STATE_SEND_MODULE_CONFIG, |         STATE_SEND_MODULE_CONFIG, | ||||||
|  |         STATE_SEND_METADATA, | ||||||
|         STATE_SEND_COMPLETE_ID, |         STATE_SEND_COMPLETE_ID, | ||||||
|         STATE_SEND_PACKETS // send packets or debug strings
 |         STATE_SEND_PACKETS // send packets or debug strings
 | ||||||
|  */ |  */ | ||||||
|  | @ -277,11 +279,15 @@ size_t PhoneAPI::getFromRadio(uint8_t *buf) | ||||||
|         config_state++; |         config_state++; | ||||||
|         // Advance when we have sent all of our ModuleConfig objects
 |         // Advance when we have sent all of our ModuleConfig objects
 | ||||||
|         if (config_state > (_meshtastic_AdminMessage_ModuleConfigType_MAX + 1)) { |         if (config_state > (_meshtastic_AdminMessage_ModuleConfigType_MAX + 1)) { | ||||||
|             state = STATE_SEND_COMPLETE_ID; |             state = STATE_SEND_METADATA; | ||||||
|             config_state = 0; |             config_state = 0; | ||||||
|         } |         } | ||||||
|         break; |         break; | ||||||
| 
 |     case STATE_SEND_METADATA: | ||||||
|  |         fromRadioScratch.which_payload_variant = meshtastic_FromRadio_metadata_tag; | ||||||
|  |         fromRadioScratch.metadata = getDeviceMetadata(); | ||||||
|  |         state = STATE_SEND_COMPLETE_ID; | ||||||
|  |         break; | ||||||
|     case STATE_SEND_COMPLETE_ID: |     case STATE_SEND_COMPLETE_ID: | ||||||
|         LOG_INFO("getFromRadio=STATE_SEND_COMPLETE_ID\n"); |         LOG_INFO("getFromRadio=STATE_SEND_COMPLETE_ID\n"); | ||||||
|         fromRadioScratch.which_payload_variant = meshtastic_FromRadio_config_complete_id_tag; |         fromRadioScratch.which_payload_variant = meshtastic_FromRadio_config_complete_id_tag; | ||||||
|  | @ -361,6 +367,7 @@ bool PhoneAPI::available() | ||||||
|     case STATE_SEND_CHANNELS: |     case STATE_SEND_CHANNELS: | ||||||
|     case STATE_SEND_CONFIG: |     case STATE_SEND_CONFIG: | ||||||
|     case STATE_SEND_MODULECONFIG: |     case STATE_SEND_MODULECONFIG: | ||||||
|  |     case STATE_SEND_METADATA: | ||||||
|     case STATE_SEND_COMPLETE_ID: |     case STATE_SEND_COMPLETE_ID: | ||||||
|         return true; |         return true; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -26,6 +26,7 @@ class PhoneAPI | ||||||
|         STATE_SEND_CHANNELS,     // Send all channels
 |         STATE_SEND_CHANNELS,     // Send all channels
 | ||||||
|         STATE_SEND_CONFIG,       // Replacement for the old Radioconfig
 |         STATE_SEND_CONFIG,       // Replacement for the old Radioconfig
 | ||||||
|         STATE_SEND_MODULECONFIG, // Send Module specific config
 |         STATE_SEND_MODULECONFIG, // Send Module specific config
 | ||||||
|  |         STATE_SEND_METADATA, | ||||||
|         STATE_SEND_COMPLETE_ID, |         STATE_SEND_COMPLETE_ID, | ||||||
|         STATE_SEND_PACKETS // send packets or debug strings
 |         STATE_SEND_PACKETS // send packets or debug strings
 | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  | @ -6,7 +6,6 @@ | ||||||
| #include <pb.h> | #include <pb.h> | ||||||
| #include "meshtastic/channel.pb.h" | #include "meshtastic/channel.pb.h" | ||||||
| #include "meshtastic/config.pb.h" | #include "meshtastic/config.pb.h" | ||||||
| #include "meshtastic/device_metadata.pb.h" |  | ||||||
| #include "meshtastic/mesh.pb.h" | #include "meshtastic/mesh.pb.h" | ||||||
| #include "meshtastic/module_config.pb.h" | #include "meshtastic/module_config.pb.h" | ||||||
| #include "meshtastic/connection_status.pb.h" | #include "meshtastic/connection_status.pb.h" | ||||||
|  |  | ||||||
|  | @ -1,12 +0,0 @@ | ||||||
| /* Automatically generated nanopb constant definitions */ |  | ||||||
| /* Generated by nanopb-0.4.7 */ |  | ||||||
| 
 |  | ||||||
| #include "meshtastic/device_metadata.pb.h" |  | ||||||
| #if PB_PROTO_HEADER_VERSION != 40 |  | ||||||
| #error Regenerate this file with the current version of nanopb generator. |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| PB_BIND(meshtastic_DeviceMetadata, meshtastic_DeviceMetadata, AUTO) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|  | @ -1,83 +0,0 @@ | ||||||
| /* Automatically generated nanopb header */ |  | ||||||
| /* Generated by nanopb-0.4.7 */ |  | ||||||
| 
 |  | ||||||
| #ifndef PB_MESHTASTIC_MESHTASTIC_DEVICE_METADATA_PB_H_INCLUDED |  | ||||||
| #define PB_MESHTASTIC_MESHTASTIC_DEVICE_METADATA_PB_H_INCLUDED |  | ||||||
| #include <pb.h> |  | ||||||
| #include "meshtastic/config.pb.h" |  | ||||||
| #include "meshtastic/mesh.pb.h" |  | ||||||
| 
 |  | ||||||
| #if PB_PROTO_HEADER_VERSION != 40 |  | ||||||
| #error Regenerate this file with the current version of nanopb generator. |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| /* Struct definitions */ |  | ||||||
| /* Device metadata response */ |  | ||||||
| typedef struct _meshtastic_DeviceMetadata { |  | ||||||
|     /* Device firmware version string */ |  | ||||||
|     char firmware_version[18]; |  | ||||||
|     /* Device state version */ |  | ||||||
|     uint32_t device_state_version; |  | ||||||
|     /* Indicates whether the device can shutdown CPU natively or via power management chip */ |  | ||||||
|     bool canShutdown; |  | ||||||
|     /* Indicates that the device has native wifi capability */ |  | ||||||
|     bool hasWifi; |  | ||||||
|     /* Indicates that the device has native bluetooth capability */ |  | ||||||
|     bool hasBluetooth; |  | ||||||
|     /* Indicates that the device has an ethernet peripheral */ |  | ||||||
|     bool hasEthernet; |  | ||||||
|     /* Indicates that the device's role in the mesh */ |  | ||||||
|     meshtastic_Config_DeviceConfig_Role role; |  | ||||||
|     /* Indicates the device's current enabled position flags */ |  | ||||||
|     uint32_t position_flags; |  | ||||||
|     /* Device hardware model */ |  | ||||||
|     meshtastic_HardwareModel hw_model; |  | ||||||
| } meshtastic_DeviceMetadata; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| /* Initializer values for message structs */ |  | ||||||
| #define meshtastic_DeviceMetadata_init_default   {"", 0, 0, 0, 0, 0, _meshtastic_Config_DeviceConfig_Role_MIN, 0, _meshtastic_HardwareModel_MIN} |  | ||||||
| #define meshtastic_DeviceMetadata_init_zero      {"", 0, 0, 0, 0, 0, _meshtastic_Config_DeviceConfig_Role_MIN, 0, _meshtastic_HardwareModel_MIN} |  | ||||||
| 
 |  | ||||||
| /* Field tags (for use in manual encoding/decoding) */ |  | ||||||
| #define meshtastic_DeviceMetadata_firmware_version_tag 1 |  | ||||||
| #define meshtastic_DeviceMetadata_device_state_version_tag 2 |  | ||||||
| #define meshtastic_DeviceMetadata_canShutdown_tag 3 |  | ||||||
| #define meshtastic_DeviceMetadata_hasWifi_tag    4 |  | ||||||
| #define meshtastic_DeviceMetadata_hasBluetooth_tag 5 |  | ||||||
| #define meshtastic_DeviceMetadata_hasEthernet_tag 6 |  | ||||||
| #define meshtastic_DeviceMetadata_role_tag       7 |  | ||||||
| #define meshtastic_DeviceMetadata_position_flags_tag 8 |  | ||||||
| #define meshtastic_DeviceMetadata_hw_model_tag   9 |  | ||||||
| 
 |  | ||||||
| /* Struct field encoding specification for nanopb */ |  | ||||||
| #define meshtastic_DeviceMetadata_FIELDLIST(X, a) \ |  | ||||||
| X(a, STATIC,   SINGULAR, STRING,   firmware_version,   1) \ |  | ||||||
| X(a, STATIC,   SINGULAR, UINT32,   device_state_version,   2) \ |  | ||||||
| X(a, STATIC,   SINGULAR, BOOL,     canShutdown,       3) \ |  | ||||||
| X(a, STATIC,   SINGULAR, BOOL,     hasWifi,           4) \ |  | ||||||
| X(a, STATIC,   SINGULAR, BOOL,     hasBluetooth,      5) \ |  | ||||||
| X(a, STATIC,   SINGULAR, BOOL,     hasEthernet,       6) \ |  | ||||||
| X(a, STATIC,   SINGULAR, UENUM,    role,              7) \ |  | ||||||
| X(a, STATIC,   SINGULAR, UINT32,   position_flags,    8) \ |  | ||||||
| X(a, STATIC,   SINGULAR, UENUM,    hw_model,          9) |  | ||||||
| #define meshtastic_DeviceMetadata_CALLBACK NULL |  | ||||||
| #define meshtastic_DeviceMetadata_DEFAULT NULL |  | ||||||
| 
 |  | ||||||
| extern const pb_msgdesc_t meshtastic_DeviceMetadata_msg; |  | ||||||
| 
 |  | ||||||
| /* Defines for backwards compatibility with code written before nanopb-0.4.0 */ |  | ||||||
| #define meshtastic_DeviceMetadata_fields &meshtastic_DeviceMetadata_msg |  | ||||||
| 
 |  | ||||||
| /* Maximum encoded size of messages (where known) */ |  | ||||||
| #define meshtastic_DeviceMetadata_size           44 |  | ||||||
| 
 |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } /* extern "C" */ |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #endif |  | ||||||
|  | @ -48,6 +48,9 @@ PB_BIND(meshtastic_ToRadio, meshtastic_ToRadio, 2) | ||||||
| PB_BIND(meshtastic_Compressed, meshtastic_Compressed, AUTO) | PB_BIND(meshtastic_Compressed, meshtastic_Compressed, AUTO) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | PB_BIND(meshtastic_DeviceMetadata, meshtastic_DeviceMetadata, AUTO) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -87,6 +87,8 @@ typedef enum _meshtastic_HardwareModel { | ||||||
|     meshtastic_HardwareModel_HELTEC_WSL_V3 = 44, |     meshtastic_HardwareModel_HELTEC_WSL_V3 = 44, | ||||||
|     /* New BETAFPV ELRS Micro TX Module 2.4G with ESP32 CPU */ |     /* New BETAFPV ELRS Micro TX Module 2.4G with ESP32 CPU */ | ||||||
|     meshtastic_HardwareModel_BETAFPV_2400_TX = 45, |     meshtastic_HardwareModel_BETAFPV_2400_TX = 45, | ||||||
|  |     /* BetaFPV ExpressLRS "Nano" TX Module 900MHz with ESP32 CPU */ | ||||||
|  |     meshtastic_HardwareModel_BETAFPV_900_NANO_TX = 46, | ||||||
|     /* Reserved ID For developing private Ports. These will show up in live traffic sparsely, so we can use a high number. Keep it within 8 bits. */ |     /* Reserved ID For developing private Ports. These will show up in live traffic sparsely, so we can use a high number. Keep it within 8 bits. */ | ||||||
|     meshtastic_HardwareModel_PRIVATE_HW = 255 |     meshtastic_HardwareModel_PRIVATE_HW = 255 | ||||||
| } meshtastic_HardwareModel; | } meshtastic_HardwareModel; | ||||||
|  | @ -637,6 +639,61 @@ typedef struct _meshtastic_QueueStatus { | ||||||
|     uint32_t mesh_packet_id; |     uint32_t mesh_packet_id; | ||||||
| } meshtastic_QueueStatus; | } meshtastic_QueueStatus; | ||||||
| 
 | 
 | ||||||
|  | /* Packets/commands to the radio will be written (reliably) to the toRadio characteristic.
 | ||||||
|  |  Once the write completes the phone can assume it is handled. */ | ||||||
|  | typedef struct _meshtastic_ToRadio { | ||||||
|  |     pb_size_t which_payload_variant; | ||||||
|  |     union { | ||||||
|  |         /* Send this packet on the mesh */ | ||||||
|  |         meshtastic_MeshPacket packet; | ||||||
|  |         /* 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; | ||||||
|  |         /* 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; | ||||||
|  |         meshtastic_XModem xmodemPacket; | ||||||
|  |     }; | ||||||
|  | } meshtastic_ToRadio; | ||||||
|  | 
 | ||||||
|  | typedef PB_BYTES_ARRAY_T(237) meshtastic_Compressed_data_t; | ||||||
|  | /* Compressed message payload */ | ||||||
|  | typedef struct _meshtastic_Compressed { | ||||||
|  |     /* PortNum to determine the how to handle the compressed payload. */ | ||||||
|  |     meshtastic_PortNum portnum; | ||||||
|  |     /* Compressed data. */ | ||||||
|  |     meshtastic_Compressed_data_t data; | ||||||
|  | } meshtastic_Compressed; | ||||||
|  | 
 | ||||||
|  | /* Device metadata response */ | ||||||
|  | typedef struct _meshtastic_DeviceMetadata { | ||||||
|  |     /* Device firmware version string */ | ||||||
|  |     char firmware_version[18]; | ||||||
|  |     /* Device state version */ | ||||||
|  |     uint32_t device_state_version; | ||||||
|  |     /* Indicates whether the device can shutdown CPU natively or via power management chip */ | ||||||
|  |     bool canShutdown; | ||||||
|  |     /* Indicates that the device has native wifi capability */ | ||||||
|  |     bool hasWifi; | ||||||
|  |     /* Indicates that the device has native bluetooth capability */ | ||||||
|  |     bool hasBluetooth; | ||||||
|  |     /* Indicates that the device has an ethernet peripheral */ | ||||||
|  |     bool hasEthernet; | ||||||
|  |     /* Indicates that the device's role in the mesh */ | ||||||
|  |     meshtastic_Config_DeviceConfig_Role role; | ||||||
|  |     /* Indicates the device's current enabled position flags */ | ||||||
|  |     uint32_t position_flags; | ||||||
|  |     /* Device hardware model */ | ||||||
|  |     meshtastic_HardwareModel hw_model; | ||||||
|  | } meshtastic_DeviceMetadata; | ||||||
|  | 
 | ||||||
| /* 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.
 | ||||||
|  It will support READ and NOTIFY. When a new packet arrives the device will BLE notify? |  It will support READ and NOTIFY. When a new packet arrives the device will BLE notify? | ||||||
|  It will sit in that descriptor until consumed by the phone, |  It will sit in that descriptor until consumed by the phone, | ||||||
|  | @ -677,42 +734,11 @@ typedef struct _meshtastic_FromRadio { | ||||||
|         meshtastic_QueueStatus queueStatus; |         meshtastic_QueueStatus queueStatus; | ||||||
|         /* File Transfer Chunk */ |         /* File Transfer Chunk */ | ||||||
|         meshtastic_XModem xmodemPacket; |         meshtastic_XModem xmodemPacket; | ||||||
|  |         /* Device metadata message */ | ||||||
|  |         meshtastic_DeviceMetadata metadata; | ||||||
|     }; |     }; | ||||||
| } meshtastic_FromRadio; | } meshtastic_FromRadio; | ||||||
| 
 | 
 | ||||||
| /* Packets/commands to the radio will be written (reliably) to the toRadio characteristic.
 |  | ||||||
|  Once the write completes the phone can assume it is handled. */ |  | ||||||
| typedef struct _meshtastic_ToRadio { |  | ||||||
|     pb_size_t which_payload_variant; |  | ||||||
|     union { |  | ||||||
|         /* Send this packet on the mesh */ |  | ||||||
|         meshtastic_MeshPacket packet; |  | ||||||
|         /* 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; |  | ||||||
|         /* 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; |  | ||||||
|         meshtastic_XModem xmodemPacket; |  | ||||||
|     }; |  | ||||||
| } meshtastic_ToRadio; |  | ||||||
| 
 |  | ||||||
| typedef PB_BYTES_ARRAY_T(237) meshtastic_Compressed_data_t; |  | ||||||
| /* Compressed message payload */ |  | ||||||
| typedef struct _meshtastic_Compressed { |  | ||||||
|     /* PortNum to determine the how to handle the compressed payload. */ |  | ||||||
|     meshtastic_PortNum portnum; |  | ||||||
|     /* Compressed data. */ |  | ||||||
|     meshtastic_Compressed_data_t data; |  | ||||||
| } meshtastic_Compressed; |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| extern "C" { | extern "C" { | ||||||
|  | @ -779,6 +805,9 @@ extern "C" { | ||||||
| 
 | 
 | ||||||
| #define meshtastic_Compressed_portnum_ENUMTYPE meshtastic_PortNum | #define meshtastic_Compressed_portnum_ENUMTYPE meshtastic_PortNum | ||||||
| 
 | 
 | ||||||
|  | #define meshtastic_DeviceMetadata_role_ENUMTYPE meshtastic_Config_DeviceConfig_Role | ||||||
|  | #define meshtastic_DeviceMetadata_hw_model_ENUMTYPE meshtastic_HardwareModel | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| /* Initializer values for message structs */ | /* Initializer values for message structs */ | ||||||
| #define meshtastic_Position_init_default         {0, 0, 0, 0, _meshtastic_Position_LocSource_MIN, _meshtastic_Position_AltSource_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} | #define meshtastic_Position_init_default         {0, 0, 0, 0, _meshtastic_Position_LocSource_MIN, _meshtastic_Position_AltSource_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} | ||||||
|  | @ -795,6 +824,7 @@ extern "C" { | ||||||
| #define meshtastic_FromRadio_init_default        {0, 0, {meshtastic_MeshPacket_init_default}} | #define meshtastic_FromRadio_init_default        {0, 0, {meshtastic_MeshPacket_init_default}} | ||||||
| #define meshtastic_ToRadio_init_default          {0, {meshtastic_MeshPacket_init_default}} | #define meshtastic_ToRadio_init_default          {0, {meshtastic_MeshPacket_init_default}} | ||||||
| #define meshtastic_Compressed_init_default       {_meshtastic_PortNum_MIN, {0, {0}}} | #define meshtastic_Compressed_init_default       {_meshtastic_PortNum_MIN, {0, {0}}} | ||||||
|  | #define meshtastic_DeviceMetadata_init_default   {"", 0, 0, 0, 0, 0, _meshtastic_Config_DeviceConfig_Role_MIN, 0, _meshtastic_HardwareModel_MIN} | ||||||
| #define meshtastic_Position_init_zero            {0, 0, 0, 0, _meshtastic_Position_LocSource_MIN, _meshtastic_Position_AltSource_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} | #define meshtastic_Position_init_zero            {0, 0, 0, 0, _meshtastic_Position_LocSource_MIN, _meshtastic_Position_AltSource_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} | ||||||
| #define meshtastic_User_init_zero                {"", "", "", {0}, _meshtastic_HardwareModel_MIN, 0} | #define meshtastic_User_init_zero                {"", "", "", {0}, _meshtastic_HardwareModel_MIN, 0} | ||||||
| #define meshtastic_RouteDiscovery_init_zero      {0, {0, 0, 0, 0, 0, 0, 0, 0}} | #define meshtastic_RouteDiscovery_init_zero      {0, {0, 0, 0, 0, 0, 0, 0, 0}} | ||||||
|  | @ -809,6 +839,7 @@ extern "C" { | ||||||
| #define meshtastic_FromRadio_init_zero           {0, 0, {meshtastic_MeshPacket_init_zero}} | #define meshtastic_FromRadio_init_zero           {0, 0, {meshtastic_MeshPacket_init_zero}} | ||||||
| #define meshtastic_ToRadio_init_zero             {0, {meshtastic_MeshPacket_init_zero}} | #define meshtastic_ToRadio_init_zero             {0, {meshtastic_MeshPacket_init_zero}} | ||||||
| #define meshtastic_Compressed_init_zero          {_meshtastic_PortNum_MIN, {0, {0}}} | #define meshtastic_Compressed_init_zero          {_meshtastic_PortNum_MIN, {0, {0}}} | ||||||
|  | #define meshtastic_DeviceMetadata_init_zero      {"", 0, 0, 0, 0, 0, _meshtastic_Config_DeviceConfig_Role_MIN, 0, _meshtastic_HardwareModel_MIN} | ||||||
| 
 | 
 | ||||||
| /* Field tags (for use in manual encoding/decoding) */ | /* Field tags (for use in manual encoding/decoding) */ | ||||||
| #define meshtastic_Position_latitude_i_tag       1 | #define meshtastic_Position_latitude_i_tag       1 | ||||||
|  | @ -902,6 +933,21 @@ extern "C" { | ||||||
| #define meshtastic_QueueStatus_free_tag          2 | #define meshtastic_QueueStatus_free_tag          2 | ||||||
| #define meshtastic_QueueStatus_maxlen_tag        3 | #define meshtastic_QueueStatus_maxlen_tag        3 | ||||||
| #define meshtastic_QueueStatus_mesh_packet_id_tag 4 | #define meshtastic_QueueStatus_mesh_packet_id_tag 4 | ||||||
|  | #define meshtastic_ToRadio_packet_tag            1 | ||||||
|  | #define meshtastic_ToRadio_want_config_id_tag    3 | ||||||
|  | #define meshtastic_ToRadio_disconnect_tag        4 | ||||||
|  | #define meshtastic_ToRadio_xmodemPacket_tag      5 | ||||||
|  | #define meshtastic_Compressed_portnum_tag        1 | ||||||
|  | #define meshtastic_Compressed_data_tag           2 | ||||||
|  | #define meshtastic_DeviceMetadata_firmware_version_tag 1 | ||||||
|  | #define meshtastic_DeviceMetadata_device_state_version_tag 2 | ||||||
|  | #define meshtastic_DeviceMetadata_canShutdown_tag 3 | ||||||
|  | #define meshtastic_DeviceMetadata_hasWifi_tag    4 | ||||||
|  | #define meshtastic_DeviceMetadata_hasBluetooth_tag 5 | ||||||
|  | #define meshtastic_DeviceMetadata_hasEthernet_tag 6 | ||||||
|  | #define meshtastic_DeviceMetadata_role_tag       7 | ||||||
|  | #define meshtastic_DeviceMetadata_position_flags_tag 8 | ||||||
|  | #define meshtastic_DeviceMetadata_hw_model_tag   9 | ||||||
| #define meshtastic_FromRadio_id_tag              1 | #define meshtastic_FromRadio_id_tag              1 | ||||||
| #define meshtastic_FromRadio_packet_tag          2 | #define meshtastic_FromRadio_packet_tag          2 | ||||||
| #define meshtastic_FromRadio_my_info_tag         3 | #define meshtastic_FromRadio_my_info_tag         3 | ||||||
|  | @ -914,12 +960,7 @@ extern "C" { | ||||||
| #define meshtastic_FromRadio_channel_tag         10 | #define meshtastic_FromRadio_channel_tag         10 | ||||||
| #define meshtastic_FromRadio_queueStatus_tag     11 | #define meshtastic_FromRadio_queueStatus_tag     11 | ||||||
| #define meshtastic_FromRadio_xmodemPacket_tag    12 | #define meshtastic_FromRadio_xmodemPacket_tag    12 | ||||||
| #define meshtastic_ToRadio_packet_tag            1 | #define meshtastic_FromRadio_metadata_tag        13 | ||||||
| #define meshtastic_ToRadio_want_config_id_tag    3 |  | ||||||
| #define meshtastic_ToRadio_disconnect_tag        4 |  | ||||||
| #define meshtastic_ToRadio_xmodemPacket_tag      5 |  | ||||||
| #define meshtastic_Compressed_portnum_tag        1 |  | ||||||
| #define meshtastic_Compressed_data_tag           2 |  | ||||||
| 
 | 
 | ||||||
| /* Struct field encoding specification for nanopb */ | /* Struct field encoding specification for nanopb */ | ||||||
| #define meshtastic_Position_FIELDLIST(X, a) \ | #define meshtastic_Position_FIELDLIST(X, a) \ | ||||||
|  | @ -1075,7 +1116,8 @@ X(a, STATIC,   ONEOF,    BOOL,     (payload_variant,rebooted,rebooted),   8) \ | ||||||
| X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,moduleConfig,moduleConfig),   9) \ | X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,moduleConfig,moduleConfig),   9) \ | ||||||
| X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,channel,channel),  10) \ | X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,channel,channel),  10) \ | ||||||
| X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,queueStatus,queueStatus),  11) \ | X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,queueStatus,queueStatus),  11) \ | ||||||
| X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,xmodemPacket,xmodemPacket),  12) | X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,xmodemPacket,xmodemPacket),  12) \ | ||||||
|  | X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,metadata,metadata),  13) | ||||||
| #define meshtastic_FromRadio_CALLBACK NULL | #define meshtastic_FromRadio_CALLBACK NULL | ||||||
| #define meshtastic_FromRadio_DEFAULT NULL | #define meshtastic_FromRadio_DEFAULT NULL | ||||||
| #define meshtastic_FromRadio_payload_variant_packet_MSGTYPE meshtastic_MeshPacket | #define meshtastic_FromRadio_payload_variant_packet_MSGTYPE meshtastic_MeshPacket | ||||||
|  | @ -1087,6 +1129,7 @@ X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,xmodemPacket,xmodemPacket), | ||||||
| #define meshtastic_FromRadio_payload_variant_channel_MSGTYPE meshtastic_Channel | #define meshtastic_FromRadio_payload_variant_channel_MSGTYPE meshtastic_Channel | ||||||
| #define meshtastic_FromRadio_payload_variant_queueStatus_MSGTYPE meshtastic_QueueStatus | #define meshtastic_FromRadio_payload_variant_queueStatus_MSGTYPE meshtastic_QueueStatus | ||||||
| #define meshtastic_FromRadio_payload_variant_xmodemPacket_MSGTYPE meshtastic_XModem | #define meshtastic_FromRadio_payload_variant_xmodemPacket_MSGTYPE meshtastic_XModem | ||||||
|  | #define meshtastic_FromRadio_payload_variant_metadata_MSGTYPE meshtastic_DeviceMetadata | ||||||
| 
 | 
 | ||||||
| #define meshtastic_ToRadio_FIELDLIST(X, a) \ | #define meshtastic_ToRadio_FIELDLIST(X, a) \ | ||||||
| X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,packet,packet),   1) \ | X(a, STATIC,   ONEOF,    MESSAGE,  (payload_variant,packet,packet),   1) \ | ||||||
|  | @ -1104,6 +1147,19 @@ X(a, STATIC,   SINGULAR, BYTES,    data,              2) | ||||||
| #define meshtastic_Compressed_CALLBACK NULL | #define meshtastic_Compressed_CALLBACK NULL | ||||||
| #define meshtastic_Compressed_DEFAULT NULL | #define meshtastic_Compressed_DEFAULT NULL | ||||||
| 
 | 
 | ||||||
|  | #define meshtastic_DeviceMetadata_FIELDLIST(X, a) \ | ||||||
|  | X(a, STATIC,   SINGULAR, STRING,   firmware_version,   1) \ | ||||||
|  | X(a, STATIC,   SINGULAR, UINT32,   device_state_version,   2) \ | ||||||
|  | X(a, STATIC,   SINGULAR, BOOL,     canShutdown,       3) \ | ||||||
|  | X(a, STATIC,   SINGULAR, BOOL,     hasWifi,           4) \ | ||||||
|  | X(a, STATIC,   SINGULAR, BOOL,     hasBluetooth,      5) \ | ||||||
|  | X(a, STATIC,   SINGULAR, BOOL,     hasEthernet,       6) \ | ||||||
|  | X(a, STATIC,   SINGULAR, UENUM,    role,              7) \ | ||||||
|  | X(a, STATIC,   SINGULAR, UINT32,   position_flags,    8) \ | ||||||
|  | X(a, STATIC,   SINGULAR, UENUM,    hw_model,          9) | ||||||
|  | #define meshtastic_DeviceMetadata_CALLBACK NULL | ||||||
|  | #define meshtastic_DeviceMetadata_DEFAULT NULL | ||||||
|  | 
 | ||||||
| extern const pb_msgdesc_t meshtastic_Position_msg; | extern const pb_msgdesc_t meshtastic_Position_msg; | ||||||
| extern const pb_msgdesc_t meshtastic_User_msg; | extern const pb_msgdesc_t meshtastic_User_msg; | ||||||
| extern const pb_msgdesc_t meshtastic_RouteDiscovery_msg; | extern const pb_msgdesc_t meshtastic_RouteDiscovery_msg; | ||||||
|  | @ -1118,6 +1174,7 @@ extern const pb_msgdesc_t meshtastic_QueueStatus_msg; | ||||||
| extern const pb_msgdesc_t meshtastic_FromRadio_msg; | extern const pb_msgdesc_t meshtastic_FromRadio_msg; | ||||||
| extern const pb_msgdesc_t meshtastic_ToRadio_msg; | extern const pb_msgdesc_t meshtastic_ToRadio_msg; | ||||||
| extern const pb_msgdesc_t meshtastic_Compressed_msg; | extern const pb_msgdesc_t meshtastic_Compressed_msg; | ||||||
|  | extern const pb_msgdesc_t meshtastic_DeviceMetadata_msg; | ||||||
| 
 | 
 | ||||||
| /* Defines for backwards compatibility with code written before nanopb-0.4.0 */ | /* Defines for backwards compatibility with code written before nanopb-0.4.0 */ | ||||||
| #define meshtastic_Position_fields &meshtastic_Position_msg | #define meshtastic_Position_fields &meshtastic_Position_msg | ||||||
|  | @ -1134,10 +1191,12 @@ extern const pb_msgdesc_t meshtastic_Compressed_msg; | ||||||
| #define meshtastic_FromRadio_fields &meshtastic_FromRadio_msg | #define meshtastic_FromRadio_fields &meshtastic_FromRadio_msg | ||||||
| #define meshtastic_ToRadio_fields &meshtastic_ToRadio_msg | #define meshtastic_ToRadio_fields &meshtastic_ToRadio_msg | ||||||
| #define meshtastic_Compressed_fields &meshtastic_Compressed_msg | #define meshtastic_Compressed_fields &meshtastic_Compressed_msg | ||||||
|  | #define meshtastic_DeviceMetadata_fields &meshtastic_DeviceMetadata_msg | ||||||
| 
 | 
 | ||||||
| /* Maximum encoded size of messages (where known) */ | /* Maximum encoded size of messages (where known) */ | ||||||
| #define meshtastic_Compressed_size               243 | #define meshtastic_Compressed_size               243 | ||||||
| #define meshtastic_Data_size                     270 | #define meshtastic_Data_size                     270 | ||||||
|  | #define meshtastic_DeviceMetadata_size           44 | ||||||
| #define meshtastic_FromRadio_size                330 | #define meshtastic_FromRadio_size                330 | ||||||
| #define meshtastic_LogRecord_size                81 | #define meshtastic_LogRecord_size                81 | ||||||
| #define meshtastic_MeshPacket_size               321 | #define meshtastic_MeshPacket_size               321 | ||||||
|  |  | ||||||
|  | @ -490,19 +490,7 @@ void AdminModule::handleGetModuleConfig(const meshtastic_MeshPacket &req, const | ||||||
| void AdminModule::handleGetDeviceMetadata(const meshtastic_MeshPacket &req) | void AdminModule::handleGetDeviceMetadata(const meshtastic_MeshPacket &req) | ||||||
| { | { | ||||||
|     meshtastic_AdminMessage r = meshtastic_AdminMessage_init_default; |     meshtastic_AdminMessage r = meshtastic_AdminMessage_init_default; | ||||||
| 
 |     r.get_device_metadata_response = getDeviceMetadata(); | ||||||
|     meshtastic_DeviceMetadata deviceMetadata; |  | ||||||
|     strncpy(deviceMetadata.firmware_version, myNodeInfo.firmware_version, 18); |  | ||||||
|     deviceMetadata.device_state_version = DEVICESTATE_CUR_VER; |  | ||||||
|     deviceMetadata.canShutdown = pmu_found || HAS_CPU_SHUTDOWN; |  | ||||||
|     deviceMetadata.hasBluetooth = HAS_BLUETOOTH; |  | ||||||
|     deviceMetadata.hasWifi = HAS_WIFI; |  | ||||||
|     deviceMetadata.hasEthernet = HAS_ETHERNET; |  | ||||||
|     deviceMetadata.role = config.device.role; |  | ||||||
|     deviceMetadata.position_flags = config.position.position_flags; |  | ||||||
|     deviceMetadata.hw_model = HW_VENDOR; |  | ||||||
| 
 |  | ||||||
|     r.get_device_metadata_response = deviceMetadata; |  | ||||||
|     r.which_payload_variant = meshtastic_AdminMessage_get_device_metadata_response_tag; |     r.which_payload_variant = meshtastic_AdminMessage_get_device_metadata_response_tag; | ||||||
|     myReply = allocDataProtobuf(r); |     myReply = allocDataProtobuf(r); | ||||||
| } | } | ||||||
|  |  | ||||||
		Ładowanie…
	
		Reference in New Issue
	
	 Ben Meadors
						Ben Meadors