Przeglądaj źródła

RPC: Add data field to ping request & response (#836)

* Update protobuf
* Send ping data back
* Add check for has_next, more readability
* Fix nullptr dereference

Co-authored-by: Tony Freeman <tonyfreeman@users.noreply.github.com>
Co-authored-by: Albert Kharisov <albkharisov@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
tonyfreeman 4 lat temu
rodzic
commit
e54e4a6d77

+ 14 - 1
applications/rpc/rpc_status.c

@@ -3,14 +3,27 @@
 #include "status.pb.h"
 
 void rpc_system_status_ping_process(const PB_Main* msg_request, void* context) {
+    if(msg_request->has_next) {
+        rpc_send_and_release_empty(
+            context, msg_request->command_id, PB_CommandStatus_ERROR_INVALID_PARAMETERS);
+        return;
+    }
+
     PB_Main msg_response = PB_Main_init_default;
     msg_response.has_next = false;
     msg_response.command_status = PB_CommandStatus_OK;
     msg_response.command_id = msg_request->command_id;
     msg_response.which_content = PB_Main_ping_response_tag;
 
+    const PB_Status_PingRequest* request = &msg_request->content.ping_request;
+    PB_Status_PingResponse* response = &msg_response.content.ping_response;
+    if(request->data && (request->data->size > 0)) {
+        response->data = furi_alloc(PB_BYTES_ARRAY_T_ALLOCSIZE(request->data->size));
+        memcpy(response->data->bytes, request->data->bytes, request->data->size);
+        response->data->size = request->data->size;
+    }
+
     rpc_send_and_release(context, &msg_response);
-    pb_release(&PB_Main_msg, &msg_response);
 }
 
 void* rpc_system_status_alloc(Rpc* rpc) {

+ 2 - 2
assets/compiled/flipper.pb.h

@@ -214,9 +214,9 @@ extern const pb_msgdesc_t PB_Main_msg;
 /* Maximum encoded size of messages (where known) */
 #define PB_Empty_size                            0
 #define PB_StopSession_size                      0
-#if defined(PB_Storage_ListRequest_size) && defined(PB_Storage_ListResponse_size) && defined(PB_Storage_ReadRequest_size) && defined(PB_Storage_ReadResponse_size) && defined(PB_Storage_WriteRequest_size) && defined(PB_Storage_DeleteRequest_size) && defined(PB_Storage_MkdirRequest_size) && defined(PB_Storage_Md5sumRequest_size) && defined(PB_App_StartRequest_size) && defined(PB_Gui_ScreenFrame_size) && defined(PB_Storage_StatRequest_size) && defined(PB_Storage_StatResponse_size)
+#if defined(PB_Status_PingRequest_size) && defined(PB_Status_PingResponse_size) && defined(PB_Storage_ListRequest_size) && defined(PB_Storage_ListResponse_size) && defined(PB_Storage_ReadRequest_size) && defined(PB_Storage_ReadResponse_size) && defined(PB_Storage_WriteRequest_size) && defined(PB_Storage_DeleteRequest_size) && defined(PB_Storage_MkdirRequest_size) && defined(PB_Storage_Md5sumRequest_size) && defined(PB_App_StartRequest_size) && defined(PB_Gui_ScreenFrame_size) && defined(PB_Storage_StatRequest_size) && defined(PB_Storage_StatResponse_size)
 #define PB_Main_size                             (10 + sizeof(union PB_Main_content_size_union))
-union PB_Main_content_size_union {char f7[(6 + PB_Storage_ListRequest_size)]; char f8[(6 + PB_Storage_ListResponse_size)]; char f9[(6 + PB_Storage_ReadRequest_size)]; char f10[(6 + PB_Storage_ReadResponse_size)]; char f11[(6 + PB_Storage_WriteRequest_size)]; char f12[(6 + PB_Storage_DeleteRequest_size)]; char f13[(6 + PB_Storage_MkdirRequest_size)]; char f14[(6 + PB_Storage_Md5sumRequest_size)]; char f16[(7 + PB_App_StartRequest_size)]; char f22[(7 + PB_Gui_ScreenFrame_size)]; char f24[(7 + PB_Storage_StatRequest_size)]; char f25[(7 + PB_Storage_StatResponse_size)]; char f0[36];};
+union PB_Main_content_size_union {char f5[(6 + PB_Status_PingRequest_size)]; char f6[(6 + PB_Status_PingResponse_size)]; char f7[(6 + PB_Storage_ListRequest_size)]; char f8[(6 + PB_Storage_ListResponse_size)]; char f9[(6 + PB_Storage_ReadRequest_size)]; char f10[(6 + PB_Storage_ReadResponse_size)]; char f11[(6 + PB_Storage_WriteRequest_size)]; char f12[(6 + PB_Storage_DeleteRequest_size)]; char f13[(6 + PB_Storage_MkdirRequest_size)]; char f14[(6 + PB_Storage_Md5sumRequest_size)]; char f16[(7 + PB_App_StartRequest_size)]; char f22[(7 + PB_Gui_ScreenFrame_size)]; char f24[(7 + PB_Storage_StatRequest_size)]; char f25[(7 + PB_Storage_StatResponse_size)]; char f0[36];};
 #endif
 
 #ifdef __cplusplus

+ 12 - 10
assets/compiled/status.pb.h

@@ -11,11 +11,11 @@
 
 /* Struct definitions */
 typedef struct _PB_Status_PingRequest { 
-    char dummy_field;
+    pb_bytes_array_t *data; 
 } PB_Status_PingRequest;
 
 typedef struct _PB_Status_PingResponse { 
-    char dummy_field;
+    pb_bytes_array_t *data; 
 } PB_Status_PingResponse;
 
 
@@ -24,21 +24,23 @@ extern "C" {
 #endif
 
 /* Initializer values for message structs */
-#define PB_Status_PingRequest_init_default       {0}
-#define PB_Status_PingResponse_init_default      {0}
-#define PB_Status_PingRequest_init_zero          {0}
-#define PB_Status_PingResponse_init_zero         {0}
+#define PB_Status_PingRequest_init_default       {NULL}
+#define PB_Status_PingResponse_init_default      {NULL}
+#define PB_Status_PingRequest_init_zero          {NULL}
+#define PB_Status_PingResponse_init_zero         {NULL}
 
 /* Field tags (for use in manual encoding/decoding) */
+#define PB_Status_PingRequest_data_tag           1
+#define PB_Status_PingResponse_data_tag          1
 
 /* Struct field encoding specification for nanopb */
 #define PB_Status_PingRequest_FIELDLIST(X, a) \
-
+X(a, POINTER,  SINGULAR, BYTES,    data,              1)
 #define PB_Status_PingRequest_CALLBACK NULL
 #define PB_Status_PingRequest_DEFAULT NULL
 
 #define PB_Status_PingResponse_FIELDLIST(X, a) \
-
+X(a, POINTER,  SINGULAR, BYTES,    data,              1)
 #define PB_Status_PingResponse_CALLBACK NULL
 #define PB_Status_PingResponse_DEFAULT NULL
 
@@ -50,8 +52,8 @@ extern const pb_msgdesc_t PB_Status_PingResponse_msg;
 #define PB_Status_PingResponse_fields &PB_Status_PingResponse_msg
 
 /* Maximum encoded size of messages (where known) */
-#define PB_Status_PingRequest_size               0
-#define PB_Status_PingResponse_size              0
+/* PB_Status_PingRequest_size depends on runtime parameters */
+/* PB_Status_PingResponse_size depends on runtime parameters */
 
 #ifdef __cplusplus
 } /* extern "C" */

+ 1 - 1
assets/protobuf

@@ -1 +1 @@
-Subproject commit 6be7def6087c4d277386381ff2792fa622933668
+Subproject commit 060aead10b80622975b14a077420354d26e0be38