@@ -26,32 +26,34 @@ static void log_rpc_msg_handler(const struct nrf_rpc_group *group, struct nrf_rp
2626 void * handler_data )
2727{
2828 enum log_rpc_level level ;
29- struct zcbor_string message ;
30- bool decoded_ok ;
31-
32- decoded_ok = zcbor_uint_decode (ctx -> zs , & level , sizeof (level ));
33- decoded_ok = decoded_ok && zcbor_bstr_decode (ctx -> zs , & message );
34- nrf_rpc_cbor_decoding_done (group , ctx );
35-
36- if (!decoded_ok ) {
37- return ;
29+ const char * message ;
30+ size_t message_size ;
31+
32+ level = nrf_rpc_decode_uint (ctx );
33+ message = nrf_rpc_decode_buffer_ptr_and_size (ctx , & message_size );
34+
35+ if (message ) {
36+ switch (level ) {
37+ case LOG_RPC_LEVEL_ERR :
38+ LOG_ERR ("%.*s" , message_size , message );
39+ break ;
40+ case LOG_RPC_LEVEL_WRN :
41+ LOG_WRN ("%.*s" , message_size , message );
42+ break ;
43+ case LOG_RPC_LEVEL_INF :
44+ LOG_INF ("%.*s" , message_size , message );
45+ break ;
46+ case LOG_RPC_LEVEL_DBG :
47+ LOG_DBG ("%.*s" , message_size , message );
48+ break ;
49+ default :
50+ break ;
51+ }
3852 }
3953
40- switch (level ) {
41- case LOG_RPC_LEVEL_ERR :
42- LOG_ERR ("%.*s" , message .len , message .value );
43- break ;
44- case LOG_RPC_LEVEL_WRN :
45- LOG_WRN ("%.*s" , message .len , message .value );
46- break ;
47- case LOG_RPC_LEVEL_INF :
48- LOG_INF ("%.*s" , message .len , message .value );
49- break ;
50- case LOG_RPC_LEVEL_DBG :
51- LOG_DBG ("%.*s" , message .len , message .value );
52- break ;
53- default :
54- break ;
54+ if (!nrf_rpc_decoding_done_and_check (& log_rpc_group , ctx )) {
55+ nrf_rpc_err (- EBADMSG , NRF_RPC_ERR_SRC_RECV , & log_rpc_group , LOG_RPC_EVT_MSG ,
56+ NRF_RPC_PACKET_TYPE_EVT );
5557 }
5658}
5759
@@ -64,38 +66,35 @@ int log_rpc_set_stream_level(enum log_rpc_level level)
6466
6567 NRF_RPC_CBOR_ALLOC (& log_rpc_group , ctx , 1 + sizeof (level ));
6668 nrf_rpc_encode_uint (& ctx , level );
67- nrf_rpc_cbor_cmd_rsp_no_err (& log_rpc_group , LOG_RPC_CMD_SET_STREAM_LEVEL , & ctx );
68-
69- nrf_rpc_cbor_decoding_done (& log_rpc_group , & ctx );
69+ nrf_rpc_cbor_cmd_no_err (& log_rpc_group , LOG_RPC_CMD_SET_STREAM_LEVEL , & ctx ,
70+ nrf_rpc_rsp_decode_void , NULL );
7071
7172 return 0 ;
7273}
7374
7475int log_rpc_get_crash_log (size_t offset , char * buffer , size_t buffer_length )
7576{
7677 struct nrf_rpc_cbor_ctx ctx ;
77- struct zcbor_string log_chunk ;
78- bool decoded_ok ;
79-
80- NRF_RPC_CBOR_ALLOC (& log_rpc_group , ctx , 10 );
81-
82- if (!zcbor_uint32_put (ctx .zs , offset ) || !zcbor_uint32_put (ctx .zs , buffer_length )) {
83- NRF_RPC_CBOR_DISCARD (& log_rpc_group , ctx );
84- return - ENOBUFS ;
85- }
78+ const uint8_t * log_chunk ;
79+ size_t log_chunk_size = 0 ;
8680
81+ NRF_RPC_CBOR_ALLOC (& log_rpc_group , ctx , 2 + sizeof (offset ) + sizeof (buffer_length ));
82+ nrf_rpc_encode_uint (& ctx , offset );
83+ nrf_rpc_encode_uint (& ctx , buffer_length );
8784 nrf_rpc_cbor_cmd_rsp_no_err (& log_rpc_group , LOG_RPC_CMD_GET_CRASH_LOG , & ctx );
8885
8986 /* Parse response */
90- decoded_ok = zcbor_bstr_decode (ctx .zs , & log_chunk );
91- nrf_rpc_cbor_decoding_done (& log_rpc_group , & ctx );
87+ log_chunk = nrf_rpc_decode_buffer_ptr_and_size (& ctx , & log_chunk_size );
9288
93- if (!decoded_ok ) {
94- return - EINVAL ;
89+ if (log_chunk ) {
90+ log_chunk_size = MIN (log_chunk_size , buffer_length );
91+ memcpy (buffer , log_chunk , log_chunk_size );
9592 }
9693
97- log_chunk .len = MIN (log_chunk .len , buffer_length );
98- memcpy (buffer , log_chunk .value , log_chunk .len );
94+ if (!nrf_rpc_decoding_done_and_check (& log_rpc_group , & ctx )) {
95+ nrf_rpc_err (- EBADMSG , NRF_RPC_ERR_SRC_RECV , & log_rpc_group ,
96+ LOG_RPC_CMD_GET_CRASH_LOG , NRF_RPC_PACKET_TYPE_RSP );
97+ }
9998
100- return log_chunk . len ;
99+ return log_chunk_size ;
101100}
0 commit comments