2026-04-08 16:32:13 +08:00
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
|
|
#include "keyboard_hid_report_event.h"
|
|
|
|
|
|
|
|
|
|
#define KEYBOARD_HID_REPORT_EVENT_LOG_BUF_LEN 192
|
|
|
|
|
|
|
|
|
|
static const char *mode_name(enum mode_switch_mode mode)
|
|
|
|
|
{
|
|
|
|
|
switch (mode) {
|
|
|
|
|
case MODE_SWITCH_USB:
|
|
|
|
|
return "USB";
|
|
|
|
|
case MODE_SWITCH_24G:
|
|
|
|
|
return "2.4G";
|
|
|
|
|
case MODE_SWITCH_BLE:
|
|
|
|
|
return "BLE";
|
|
|
|
|
default:
|
|
|
|
|
return "?";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static const char *report_type_name(enum keyboard_report_type report_type)
|
|
|
|
|
{
|
|
|
|
|
switch (report_type) {
|
|
|
|
|
case KEYBOARD_REPORT_TYPE_KEYS:
|
|
|
|
|
return "keys";
|
|
|
|
|
case KEYBOARD_REPORT_TYPE_CONSUMER:
|
|
|
|
|
return "consumer";
|
|
|
|
|
default:
|
|
|
|
|
return "?";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static const char *protocol_mode_name(enum keyboard_protocol_mode protocol_mode)
|
|
|
|
|
{
|
|
|
|
|
switch (protocol_mode) {
|
|
|
|
|
case KEYBOARD_PROTOCOL_MODE_BOOT:
|
|
|
|
|
return "boot";
|
|
|
|
|
case KEYBOARD_PROTOCOL_MODE_REPORT:
|
|
|
|
|
return "report";
|
|
|
|
|
default:
|
|
|
|
|
return "?";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-10 13:46:50 +08:00
|
|
|
static const char *queue_policy_name(enum hid_queue_policy queue_policy)
|
|
|
|
|
{
|
|
|
|
|
switch (queue_policy) {
|
|
|
|
|
case HID_QUEUE_POLICY_LATEST:
|
|
|
|
|
return "latest";
|
|
|
|
|
case HID_QUEUE_POLICY_FIFO:
|
|
|
|
|
return "fifo";
|
|
|
|
|
default:
|
|
|
|
|
return "?";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-08 16:32:13 +08:00
|
|
|
static void log_keyboard_hid_report_event(const struct app_event_header *aeh)
|
|
|
|
|
{
|
|
|
|
|
const struct keyboard_hid_report_event *event =
|
|
|
|
|
cast_keyboard_hid_report_event(aeh);
|
|
|
|
|
char log_buf[KEYBOARD_HID_REPORT_EVENT_LOG_BUF_LEN];
|
|
|
|
|
int pos;
|
|
|
|
|
|
2026-04-10 13:46:50 +08:00
|
|
|
pos = snprintf(log_buf, sizeof(log_buf),
|
|
|
|
|
"mode:%s type:%s protocol:%s queue:%s len:%zu",
|
2026-04-08 16:32:13 +08:00
|
|
|
mode_name(event->mode),
|
|
|
|
|
report_type_name(event->report_type),
|
|
|
|
|
protocol_mode_name(event->protocol_mode),
|
2026-04-10 13:46:50 +08:00
|
|
|
queue_policy_name(event->queue_policy),
|
2026-04-08 16:32:13 +08:00
|
|
|
event->dyndata.size);
|
|
|
|
|
if ((pos > 0) && (pos < sizeof(log_buf))) {
|
|
|
|
|
for (size_t i = 0; i < event->dyndata.size; i++) {
|
|
|
|
|
int tmp = snprintf(&log_buf[pos], sizeof(log_buf) - pos,
|
|
|
|
|
" %02x", event->dyndata.data[i]);
|
|
|
|
|
|
|
|
|
|
if (tmp < 0) {
|
|
|
|
|
log_buf[sizeof(log_buf) - 2] = '~';
|
|
|
|
|
pos = tmp;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pos += tmp;
|
|
|
|
|
if (pos >= sizeof(log_buf)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pos < 0) {
|
|
|
|
|
APP_EVENT_MANAGER_LOG(aeh, "log message preparation failure");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
APP_EVENT_MANAGER_LOG(aeh, "%s", log_buf);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void profile_keyboard_hid_report_event(struct log_event_buf *buf,
|
|
|
|
|
const struct app_event_header *aeh)
|
|
|
|
|
{
|
|
|
|
|
const struct keyboard_hid_report_event *event =
|
|
|
|
|
cast_keyboard_hid_report_event(aeh);
|
|
|
|
|
|
|
|
|
|
nrf_profiler_log_encode_uint8(buf, event->mode);
|
|
|
|
|
nrf_profiler_log_encode_uint8(buf, event->report_type);
|
|
|
|
|
nrf_profiler_log_encode_uint8(buf, event->protocol_mode);
|
2026-04-10 13:46:50 +08:00
|
|
|
nrf_profiler_log_encode_uint8(buf, event->queue_policy);
|
2026-04-08 16:32:13 +08:00
|
|
|
nrf_profiler_log_encode_uint8(buf, (uint8_t)event->dyndata.size);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
APP_EVENT_INFO_DEFINE(keyboard_hid_report_event,
|
|
|
|
|
ENCODE(NRF_PROFILER_ARG_U8,
|
2026-04-10 13:46:50 +08:00
|
|
|
NRF_PROFILER_ARG_U8,
|
2026-04-08 16:32:13 +08:00
|
|
|
NRF_PROFILER_ARG_U8,
|
|
|
|
|
NRF_PROFILER_ARG_U8,
|
|
|
|
|
NRF_PROFILER_ARG_U8),
|
2026-04-10 13:46:50 +08:00
|
|
|
ENCODE("mode", "report_type", "protocol_mode", "queue_policy", "len"),
|
2026-04-08 16:32:13 +08:00
|
|
|
profile_keyboard_hid_report_event);
|
|
|
|
|
|
|
|
|
|
APP_EVENT_TYPE_DEFINE(keyboard_hid_report_event,
|
|
|
|
|
log_keyboard_hid_report_event,
|
|
|
|
|
&keyboard_hid_report_event_info,
|
|
|
|
|
APP_EVENT_FLAGS_CREATE(
|
|
|
|
|
APP_EVENT_TYPE_FLAGS_INIT_LOG_ENABLE));
|