@@ -118,6 +118,8 @@ uint8_t listen_addr_len = 0;
118
118
char * ListenFields = NULL ; // ptr to string: field1,field2,... max 5 field now
119
119
bool ListenNew ;
120
120
FuriHalRtcDateTime ListenLastTime = { 0 };
121
+ uint32_t ListenPrev = 0 ;
122
+ uint32_t ListenLast = 0 ;
121
123
FuriString * * Read_cmd = NULL ; // Names of read cmd
122
124
uint16_t Read_cmd_Total = 0 ;
123
125
FuriString * * Log = NULL ; // Strings: var=n
@@ -209,12 +211,12 @@ static void add_to_str_hex_bytes(char *out, uint8_t *arr, int bytes)
209
211
} while (-- bytes );
210
212
}
211
213
212
- int32_t get_payload_receive_field (uint8_t size )
214
+ int32_t get_payload_receive_field (uint8_t * var , uint8_t size )
213
215
{
214
- if (size <= 1 ) return * payload_receive ;
215
- else if (size == 2 ) return * (int16_t * )payload_receive ;
216
- else if (size == 3 ) return (* (uint32_t * )payload_receive ) & 0xFFFFFF ;
217
- else return * (int32_t * )payload_receive ;
216
+ if (size <= 1 ) return * var ;
217
+ else if (size == 2 ) return * (int16_t * )var ;
218
+ else if (size == 3 ) return (* (uint32_t * )var ) & 0xFFFFFF ;
219
+ else return * (int32_t * )var ;
218
220
}
219
221
220
222
void free_Log ()
@@ -404,7 +406,7 @@ bool nrf24_read_newpacket() {
404
406
if (size > 4 ) size = 0 ;
405
407
}
406
408
}
407
- int32_t var = get_payload_receive_field (size );
409
+ int32_t var = get_payload_receive_field (payload_receive , size );
408
410
//FURI_LOG_D(TAG, "VAR(%d): %ld", size, var);
409
411
if (size == 0 ) furi_string_cat_printf (str , "%c" , (char )var );
410
412
else {
@@ -1034,8 +1036,10 @@ static void render_callback(Canvas* const canvas, void* ctx) {
1034
1036
canvas_set_font (canvas , FontSecondary ); // 8x10 font, 6 lines
1035
1037
strcpy (screen_buf , "Listen: " );
1036
1038
if (NRF_ERROR ) strcat (screen_buf , "nRF24 ERROR!" );
1037
- else if (ListenNew ) snprintf (screen_buf + strlen (screen_buf ), 16 , "%02d:%02d:%02d" , ListenLastTime .hour , ListenLastTime .minute , ListenLastTime .second );
1038
- else strcat (screen_buf , "receiving" );
1039
+ else if (ListenNew ) {
1040
+ snprintf (screen_buf + strlen (screen_buf ), 16 , "%02d:%02d:%02d" , ListenLastTime .hour , ListenLastTime .minute , ListenLastTime .second );
1041
+ if (ListenPrev ) snprintf (screen_buf + strlen (screen_buf ), 16 , " (%lu)" , ListenLast - ListenPrev );
1042
+ } else strcat (screen_buf , "receiving" );
1039
1043
canvas_draw_str (canvas , 0 , 10 , screen_buf );
1040
1044
if (ListenFields ) {
1041
1045
char * p2 , * p = ListenFields ;
@@ -1049,10 +1053,18 @@ static void render_callback(Canvas* const canvas, void* ctx) {
1049
1053
strcpy (screen_buf + len , ": " );
1050
1054
if (ListenNew ) {
1051
1055
len = payload_struct [i ];
1052
- if (hex ) strcat (screen_buf , "0x" );
1053
- else snprintf (screen_buf , strlen (screen_buf ), "%ld (" , get_payload_receive_field (len ));
1054
- add_to_str_hex_bytes (screen_buf , pld , len );
1055
- if (!hex ) strcat (screen_buf , ")" );
1056
+ int32_t n = get_payload_receive_field (pld , len );
1057
+ if (hex ) {
1058
+ strcat (screen_buf , "0x" );
1059
+ add_to_str_hex_bytes (screen_buf , pld , len );
1060
+ } else {
1061
+ snprintf (screen_buf + strlen (screen_buf ), 20 , "%ld" , n );
1062
+ if (n > 9 ) {
1063
+ strcat (screen_buf , " (" );
1064
+ add_to_str_hex_bytes (screen_buf , pld , len );
1065
+ strcat (screen_buf , ")" );
1066
+ }
1067
+ }
1056
1068
pld += len ;
1057
1069
}
1058
1070
canvas_draw_str (canvas , 0 , 20 + i * 10 , screen_buf );
@@ -1155,7 +1167,9 @@ void work_timer_callback(void* ctx)
1155
1167
bool new = nrf24_read_newpacket ();
1156
1168
if (new ) {
1157
1169
if (rw_type == rwt_listen ) {
1170
+ ListenPrev = ListenLast ;
1158
1171
furi_hal_rtc_get_datetime (& ListenLastTime );
1172
+ ListenLast = furi_hal_rtc_datetime_to_timestamp (& ListenLastTime );
1159
1173
ListenNew = true;
1160
1174
} else if (send_status != sst_receiving ) break ;
1161
1175
} else if (rw_type != rwt_listen && furi_get_tick () - NRF_time > NRF_READ_TIMEOUT ) {
0 commit comments