5
5
*/
6
6
7
7
#include <zephyr/logging/log.h>
8
- LOG_MODULE_REGISTER (modem_cmux , CONFIG_MODEM_MODULES_LOG_LEVEL );
8
+ LOG_MODULE_REGISTER (modem_cmux , CONFIG_MODEM_CMUX_LOG_LEVEL );
9
9
10
10
#include <zephyr/kernel.h>
11
11
#include <zephyr/sys/crc.h>
@@ -96,26 +96,91 @@ static int modem_cmux_wrap_command(struct modem_cmux_command **command, const ui
96
96
return 0 ;
97
97
}
98
98
99
- static struct modem_cmux_command * modem_cmux_command_wrap (uint8_t * data )
99
+ static struct modem_cmux_command * modem_cmux_command_wrap (const uint8_t * data )
100
100
{
101
101
return (struct modem_cmux_command * )data ;
102
102
}
103
103
104
- static void modem_cmux_log_unknown_frame ( struct modem_cmux * cmux )
104
+ static const char * modem_cmux_frame_type_to_str ( enum modem_cmux_frame_types frame_type )
105
105
{
106
- char data [24 ];
107
- uint8_t data_cnt = (cmux -> frame .data_len < 8 ) ? cmux -> frame .data_len : 8 ;
108
-
109
- for (uint8_t i = 0 ; i < data_cnt ; i ++ ) {
110
- snprintk (& data [i * 3 ], sizeof (data ) - (i * 3 ), "%02X," , cmux -> frame .data [i ]);
106
+ switch (frame_type ) {
107
+ case MODEM_CMUX_FRAME_TYPE_RR :
108
+ return "RR" ;
109
+ case MODEM_CMUX_FRAME_TYPE_UI :
110
+ return "UI" ;
111
+ case MODEM_CMUX_FRAME_TYPE_RNR :
112
+ return "RNR" ;
113
+ case MODEM_CMUX_FRAME_TYPE_REJ :
114
+ return "REJ" ;
115
+ case MODEM_CMUX_FRAME_TYPE_DM :
116
+ return "DM" ;
117
+ case MODEM_CMUX_FRAME_TYPE_SABM :
118
+ return "SABM" ;
119
+ case MODEM_CMUX_FRAME_TYPE_DISC :
120
+ return "DISC" ;
121
+ case MODEM_CMUX_FRAME_TYPE_UA :
122
+ return "UA" ;
123
+ case MODEM_CMUX_FRAME_TYPE_UIH :
124
+ return "UIH" ;
111
125
}
126
+ return "" ;
127
+ }
128
+
129
+ static void modem_cmux_log_transmit_frame (const struct modem_cmux_frame * frame )
130
+ {
131
+ LOG_DBG ("ch:%u,cr:%u,pf:%u,type:%s" , frame -> dlci_address , frame -> cr , frame -> pf ,
132
+ modem_cmux_frame_type_to_str (frame -> type ));
133
+ LOG_HEXDUMP_DBG (frame -> data , frame -> data_len , "data:" );
134
+ }
112
135
113
- /* Remove trailing */
114
- if (data_cnt > 0 ) {
115
- data [(data_cnt * 3 ) - 1 ] = '\0' ;
136
+ static void modem_cmux_log_received_frame (const struct modem_cmux_frame * frame )
137
+ {
138
+ LOG_DBG ("ch:%u,cr:%u,pf:%u,type:%s" , frame -> dlci_address , frame -> cr , frame -> pf ,
139
+ modem_cmux_frame_type_to_str (frame -> type ));
140
+ LOG_HEXDUMP_DBG (frame -> data , frame -> data_len , "data:" );
141
+ }
142
+
143
+ static const char * modem_cmux_command_type_to_str (enum modem_cmux_command_types command_type )
144
+ {
145
+ switch (command_type ) {
146
+ case MODEM_CMUX_COMMAND_NSC :
147
+ return "NSC" ;
148
+ case MODEM_CMUX_COMMAND_TEST :
149
+ return "TEST" ;
150
+ case MODEM_CMUX_COMMAND_PSC :
151
+ return "PSC" ;
152
+ case MODEM_CMUX_COMMAND_RLS :
153
+ return "RLS" ;
154
+ case MODEM_CMUX_COMMAND_FCOFF :
155
+ return "FCOFF" ;
156
+ case MODEM_CMUX_COMMAND_PN :
157
+ return "PN" ;
158
+ case MODEM_CMUX_COMMAND_RPN :
159
+ return "RPN" ;
160
+ case MODEM_CMUX_COMMAND_FCON :
161
+ return "FCON" ;
162
+ case MODEM_CMUX_COMMAND_CLD :
163
+ return "CLD" ;
164
+ case MODEM_CMUX_COMMAND_SNC :
165
+ return "SNC" ;
166
+ case MODEM_CMUX_COMMAND_MSC :
167
+ return "MSC" ;
116
168
}
169
+ return "" ;
170
+ }
117
171
118
- LOG_DBG ("ch:%u, type:%u, data:%s" , cmux -> frame .dlci_address , cmux -> frame .type , data );
172
+ static void modem_cmux_log_transmit_command (const struct modem_cmux_command * command )
173
+ {
174
+ LOG_DBG ("ea:%u,cr:%u,type:%s" , command -> type .ea , command -> type .cr ,
175
+ modem_cmux_command_type_to_str (command -> type .value ));
176
+ LOG_HEXDUMP_DBG (command -> value , command -> length .value , "data:" );
177
+ }
178
+
179
+ static void modem_cmux_log_received_command (const struct modem_cmux_command * command )
180
+ {
181
+ LOG_DBG ("ea:%u,cr:%u,type:%s" , command -> type .ea , command -> type .cr ,
182
+ modem_cmux_command_type_to_str (command -> type .value ));
183
+ LOG_HEXDUMP_DBG (command -> value , command -> length .value , "data:" );
119
184
}
120
185
121
186
static void modem_cmux_raise_event (struct modem_cmux * cmux , enum modem_cmux_event event )
@@ -199,6 +264,7 @@ static bool modem_cmux_transmit_cmd_frame(struct modem_cmux *cmux,
199
264
const struct modem_cmux_frame * frame )
200
265
{
201
266
uint16_t space ;
267
+ struct modem_cmux_command * command ;
202
268
203
269
k_mutex_lock (& cmux -> transmit_rb_lock , K_FOREVER );
204
270
space = ring_buf_space_get (& cmux -> transmit_rb );
@@ -208,6 +274,11 @@ static bool modem_cmux_transmit_cmd_frame(struct modem_cmux *cmux,
208
274
return false;
209
275
}
210
276
277
+ modem_cmux_log_transmit_frame (frame );
278
+ if (modem_cmux_wrap_command (& command , frame -> data , frame -> data_len ) == 0 ) {
279
+ modem_cmux_log_transmit_command (command );
280
+ }
281
+
211
282
modem_cmux_transmit_frame (cmux , frame );
212
283
k_mutex_unlock (& cmux -> transmit_rb_lock );
213
284
return true;
@@ -240,6 +311,7 @@ static int16_t modem_cmux_transmit_data_frame(struct modem_cmux *cmux,
240
311
return - ENOMEM ;
241
312
}
242
313
314
+ modem_cmux_log_transmit_frame (frame );
243
315
ret = modem_cmux_transmit_frame (cmux , frame );
244
316
k_mutex_unlock (& cmux -> transmit_rb_lock );
245
317
return ret ;
@@ -338,6 +410,8 @@ static void modem_cmux_on_control_frame_uih(struct modem_cmux *cmux)
338
410
return ;
339
411
}
340
412
413
+ modem_cmux_log_received_command (command );
414
+
341
415
switch (command -> type .value ) {
342
416
case MODEM_CMUX_COMMAND_CLD :
343
417
modem_cmux_on_cld_command (cmux );
@@ -356,13 +430,15 @@ static void modem_cmux_on_control_frame_uih(struct modem_cmux *cmux)
356
430
break ;
357
431
358
432
default :
359
- LOG_DBG ("Unknown command" );
433
+ LOG_DBG ("Unknown control command" );
360
434
break ;
361
435
}
362
436
}
363
437
364
438
static void modem_cmux_on_control_frame (struct modem_cmux * cmux )
365
439
{
440
+ modem_cmux_log_received_frame (& cmux -> frame );
441
+
366
442
switch (cmux -> frame .type ) {
367
443
case MODEM_CMUX_FRAME_TYPE_UA :
368
444
modem_cmux_on_control_frame_ua (cmux );
@@ -373,7 +449,7 @@ static void modem_cmux_on_control_frame(struct modem_cmux *cmux)
373
449
break ;
374
450
375
451
default :
376
- modem_cmux_log_unknown_frame ( cmux );
452
+ LOG_WRN ( "Unknown control frame type" );
377
453
break ;
378
454
}
379
455
}
@@ -445,6 +521,8 @@ static void modem_cmux_on_dlci_frame(struct modem_cmux *cmux)
445
521
return ;
446
522
}
447
523
524
+ modem_cmux_log_received_frame (& cmux -> frame );
525
+
448
526
switch (cmux -> frame .type ) {
449
527
case MODEM_CMUX_FRAME_TYPE_UA :
450
528
modem_cmux_on_dlci_frame_ua (dlci );
@@ -455,7 +533,7 @@ static void modem_cmux_on_dlci_frame(struct modem_cmux *cmux)
455
533
break ;
456
534
457
535
default :
458
- modem_cmux_log_unknown_frame ( cmux );
536
+ LOG_WRN ( "Unknown DLCI frame type" );
459
537
break ;
460
538
}
461
539
}
@@ -605,7 +683,7 @@ static void modem_cmux_process_received_byte(struct modem_cmux *cmux, uint8_t by
605
683
606
684
/* Check if receive buffer overrun */
607
685
if (cmux -> receive_buf_len == cmux -> receive_buf_size ) {
608
- LOG_DBG ("Receive buf overrun" );
686
+ LOG_WRN ("Receive buf overrun" );
609
687
610
688
/* Drop frame */
611
689
cmux -> receive_state = MODEM_CMUX_RECEIVE_STATE_EOF ;
@@ -653,8 +731,6 @@ static void modem_cmux_process_received_byte(struct modem_cmux *cmux, uint8_t by
653
731
break ;
654
732
}
655
733
656
- LOG_DBG ("Received frame" );
657
-
658
734
/* Process frame */
659
735
cmux -> frame .data = cmux -> receive_buf ;
660
736
modem_cmux_on_frame (cmux );
0 commit comments