feat(usb_cdc): 添加USB CDC ACM控制台和日志后端支持
添加zephyr,console和zephyr,log-uart设备树配置,启用UART控制台和日志功能, 同时增加第二个CDC ACM UART实例用于控制台输出。在prj.conf中启用相关配置项。 refactor(protocol): 优化协议会话状态管理并增强日志记录 引入proto_session_set函数统一管理协议会话状态转换,添加详细的日志输出来跟踪 状态变化、消息处理和传输事件,提高系统的可调试性。 feat(usb_device): 增强USB设备模块状态跟踪和日志输出 为USB栈、总线和公共状态添加命名函数,实现详细的状态转换日志记录,包括USB 连接、断开、使能等关键事件的日志输出,便于系统调试和问题排查。
This commit is contained in:
@@ -100,6 +100,30 @@ static const char *proto_transport_name(enum proto_transport transport)
|
||||
}
|
||||
}
|
||||
|
||||
static void proto_session_set(enum proto_transport transport,
|
||||
enum proto_session_state new_state,
|
||||
const char *reason)
|
||||
{
|
||||
enum proto_session_state old_state;
|
||||
|
||||
if (transport >= PROTO_TRANSPORT_COUNT) {
|
||||
return;
|
||||
}
|
||||
|
||||
old_state = session_state[transport];
|
||||
if (old_state == new_state) {
|
||||
LOG_INF("Protocol session keep transport:%s state:%s reason:%s",
|
||||
proto_transport_name(transport),
|
||||
proto_session_name(new_state), reason);
|
||||
return;
|
||||
}
|
||||
|
||||
session_state[transport] = new_state;
|
||||
LOG_INF("Protocol session transport:%s %s -> %s reason:%s",
|
||||
proto_transport_name(transport), proto_session_name(old_state),
|
||||
proto_session_name(new_state), reason);
|
||||
}
|
||||
|
||||
static int decode_body(const uint8_t *payload, size_t payload_len,
|
||||
CdcPacketBody *body)
|
||||
{
|
||||
@@ -214,6 +238,8 @@ static int do_init(void)
|
||||
session_state[i] = PROTO_SESSION_DOWN;
|
||||
}
|
||||
|
||||
LOG_INF("Protocol init done");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -233,7 +259,8 @@ static int do_stop(void)
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < ARRAY_SIZE(session_state); i++) {
|
||||
session_state[i] = PROTO_SESSION_DOWN;
|
||||
proto_session_set((enum proto_transport)i, PROTO_SESSION_DOWN,
|
||||
"module_stop");
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -284,7 +311,7 @@ int protocol_module_process_message(enum proto_transport transport,
|
||||
body.body.hello_req.protocol_version);
|
||||
}
|
||||
|
||||
session_state[transport] = PROTO_SESSION_ACTIVE;
|
||||
proto_session_set(transport, PROTO_SESSION_ACTIVE, "hello_req");
|
||||
return encode_hello_rsp(rsp_payload, rsp_payload_buf_size, rsp_payload_len);
|
||||
|
||||
case CdcPacketBody_bitmap_tag:
|
||||
@@ -396,6 +423,9 @@ static bool handle_proto_rx_event(const struct proto_rx_event *event)
|
||||
return false;
|
||||
}
|
||||
|
||||
LOG_INF("Protocol response ready transport:%s rsp_len:%u session:%s",
|
||||
proto_transport_name(event->transport), (unsigned int)rsp_payload_len,
|
||||
proto_session_name(session_state[event->transport]));
|
||||
err = submit_proto_tx_event(event->transport, rsp_payload, rsp_payload_len);
|
||||
if (err) {
|
||||
LOG_WRN("Proto TX submit failed (%d)", err);
|
||||
@@ -413,11 +443,13 @@ static bool handle_proto_transport_state_event(
|
||||
|
||||
switch (event->state) {
|
||||
case PROTO_TRANSPORT_LINK_DOWN:
|
||||
session_state[event->transport] = PROTO_SESSION_DOWN;
|
||||
proto_session_set(event->transport, PROTO_SESSION_DOWN,
|
||||
"transport_link_down");
|
||||
break;
|
||||
|
||||
case PROTO_TRANSPORT_LINK_READY:
|
||||
session_state[event->transport] = PROTO_SESSION_WAIT_HELLO;
|
||||
proto_session_set(event->transport, PROTO_SESSION_WAIT_HELLO,
|
||||
"transport_link_ready");
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -441,6 +473,9 @@ static bool handle_function_bitmap_state_event(
|
||||
for (enum proto_transport transport = 0; transport < PROTO_TRANSPORT_COUNT;
|
||||
transport++) {
|
||||
if (session_state[transport] != PROTO_SESSION_ACTIVE) {
|
||||
LOG_INF("FunctionKeyEvent skip transport:%s session:%s",
|
||||
proto_transport_name(transport),
|
||||
proto_session_name(session_state[transport]));
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -454,6 +489,10 @@ static bool handle_function_bitmap_state_event(
|
||||
err = submit_proto_tx_event(transport, payload, payload_len);
|
||||
if (err) {
|
||||
LOG_WRN("FunctionKeyEvent submit failed (%d)", err);
|
||||
} else {
|
||||
LOG_INF("FunctionKeyEvent submit transport:%s len:%u",
|
||||
proto_transport_name(transport),
|
||||
(unsigned int)payload_len);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -476,6 +515,9 @@ static bool handle_hid_led_event(const struct hid_led_event *event)
|
||||
PROTO_TRANSPORT_BLE_NUS;
|
||||
|
||||
if (session_state[transport] != PROTO_SESSION_ACTIVE) {
|
||||
LOG_INF("LedState skip transport:%s session:%s led_mask:0x%02x",
|
||||
proto_transport_name(transport),
|
||||
proto_session_name(session_state[transport]), event->led_bm);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -488,6 +530,10 @@ static bool handle_hid_led_event(const struct hid_led_event *event)
|
||||
err = submit_proto_tx_event(transport, payload, payload_len);
|
||||
if (err) {
|
||||
LOG_WRN("LedState submit failed (%d)", err);
|
||||
} else {
|
||||
LOG_INF("LedState submit transport:%s len:%u led_mask:0x%02x",
|
||||
proto_transport_name(transport), (unsigned int)payload_len,
|
||||
event->led_bm);
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user