Skip to content

Commit b495fda

Browse files
Bjarki Arge Andreasenfabiobaltieri
authored andcommitted
modem: modem_cmux: Improve logging
This commit adds logging for CMUX frames and commands and their data, for both transmit and receive. It also removes the superseded LOG_DBG() lines like "Received frame". Signed-off-by: Bjarki Arge Andreasen <[email protected]>
1 parent 0f38136 commit b495fda

File tree

2 files changed

+102
-18
lines changed

2 files changed

+102
-18
lines changed

subsys/modem/Kconfig

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@ config MODEM_CMUX
2626
select EVENTS
2727
select CRC
2828

29+
if MODEM_CMUX
30+
31+
module = MODEM_CMUX
32+
module-str = modem_cmux
33+
source "subsys/logging/Kconfig.template.log_config"
34+
35+
endif
36+
2937
config MODEM_PIPE
3038
bool "Modem pipe module"
3139

subsys/modem/modem_cmux.c

Lines changed: 94 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66

77
#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);
99

1010
#include <zephyr/kernel.h>
1111
#include <zephyr/sys/crc.h>
@@ -96,26 +96,91 @@ static int modem_cmux_wrap_command(struct modem_cmux_command **command, const ui
9696
return 0;
9797
}
9898

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)
100100
{
101101
return (struct modem_cmux_command *)data;
102102
}
103103

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)
105105
{
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";
111125
}
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+
}
112135

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";
116168
}
169+
return "";
170+
}
117171

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:");
119184
}
120185

121186
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,
199264
const struct modem_cmux_frame *frame)
200265
{
201266
uint16_t space;
267+
struct modem_cmux_command *command;
202268

203269
k_mutex_lock(&cmux->transmit_rb_lock, K_FOREVER);
204270
space = ring_buf_space_get(&cmux->transmit_rb);
@@ -208,6 +274,11 @@ static bool modem_cmux_transmit_cmd_frame(struct modem_cmux *cmux,
208274
return false;
209275
}
210276

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+
211282
modem_cmux_transmit_frame(cmux, frame);
212283
k_mutex_unlock(&cmux->transmit_rb_lock);
213284
return true;
@@ -240,6 +311,7 @@ static int16_t modem_cmux_transmit_data_frame(struct modem_cmux *cmux,
240311
return -ENOMEM;
241312
}
242313

314+
modem_cmux_log_transmit_frame(frame);
243315
ret = modem_cmux_transmit_frame(cmux, frame);
244316
k_mutex_unlock(&cmux->transmit_rb_lock);
245317
return ret;
@@ -338,6 +410,8 @@ static void modem_cmux_on_control_frame_uih(struct modem_cmux *cmux)
338410
return;
339411
}
340412

413+
modem_cmux_log_received_command(command);
414+
341415
switch (command->type.value) {
342416
case MODEM_CMUX_COMMAND_CLD:
343417
modem_cmux_on_cld_command(cmux);
@@ -356,13 +430,15 @@ static void modem_cmux_on_control_frame_uih(struct modem_cmux *cmux)
356430
break;
357431

358432
default:
359-
LOG_DBG("Unknown command");
433+
LOG_DBG("Unknown control command");
360434
break;
361435
}
362436
}
363437

364438
static void modem_cmux_on_control_frame(struct modem_cmux *cmux)
365439
{
440+
modem_cmux_log_received_frame(&cmux->frame);
441+
366442
switch (cmux->frame.type) {
367443
case MODEM_CMUX_FRAME_TYPE_UA:
368444
modem_cmux_on_control_frame_ua(cmux);
@@ -373,7 +449,7 @@ static void modem_cmux_on_control_frame(struct modem_cmux *cmux)
373449
break;
374450

375451
default:
376-
modem_cmux_log_unknown_frame(cmux);
452+
LOG_WRN("Unknown control frame type");
377453
break;
378454
}
379455
}
@@ -445,6 +521,8 @@ static void modem_cmux_on_dlci_frame(struct modem_cmux *cmux)
445521
return;
446522
}
447523

524+
modem_cmux_log_received_frame(&cmux->frame);
525+
448526
switch (cmux->frame.type) {
449527
case MODEM_CMUX_FRAME_TYPE_UA:
450528
modem_cmux_on_dlci_frame_ua(dlci);
@@ -455,7 +533,7 @@ static void modem_cmux_on_dlci_frame(struct modem_cmux *cmux)
455533
break;
456534

457535
default:
458-
modem_cmux_log_unknown_frame(cmux);
536+
LOG_WRN("Unknown DLCI frame type");
459537
break;
460538
}
461539
}
@@ -605,7 +683,7 @@ static void modem_cmux_process_received_byte(struct modem_cmux *cmux, uint8_t by
605683

606684
/* Check if receive buffer overrun */
607685
if (cmux->receive_buf_len == cmux->receive_buf_size) {
608-
LOG_DBG("Receive buf overrun");
686+
LOG_WRN("Receive buf overrun");
609687

610688
/* Drop frame */
611689
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
653731
break;
654732
}
655733

656-
LOG_DBG("Received frame");
657-
658734
/* Process frame */
659735
cmux->frame.data = cmux->receive_buf;
660736
modem_cmux_on_frame(cmux);

0 commit comments

Comments
 (0)