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:
2026-04-21 16:40:37 +08:00
parent 0a1357c62d
commit a11f4c0110
5 changed files with 265 additions and 6 deletions

View File

@@ -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;