I use 52820 to do ble_usb+esb project, but I have encountered problems when adding USB.
I have added USBD_HID_COMPOSIT in the project of \ examples \ peripheral \ usbd_ble_uart,
Tune app_usbd_hid_kbd_modifier_state_set When sending data, return 0x08
How should I do to add USBD_HID_COMPOSITE?
void hid_kb_handle(void * p_context)
{
static uint8_t hid_count;
hid_count++;
NRF_LOG_INFO("hid_kb_handle hid_count:%x",hid_count);
uint32_t err;
err = app_usbd_hid_kbd_modifier_state_set(&m_app_hid_kbd, APP_USBD_HID_KBD_MODIFIER_LEFT_SHIFT, true);
NRF_LOG_INFO("true err:%x",err);
err = app_usbd_hid_kbd_modifier_state_set(&m_app_hid_kbd, APP_USBD_HID_KBD_MODIFIER_LEFT_SHIFT, false);
NRF_LOG_INFO("false err:%x",err);
}
static void timers_init(void)
{
ret_code_t err_code = app_timer_init();
APP_ERROR_CHECK(err_code);
err_code = app_timer_create(&m_blink_ble, APP_TIMER_MODE_REPEATED, blink_handler);
APP_ERROR_CHECK(err_code);
err_code = app_timer_create(&m_blink_cdc, APP_TIMER_MODE_REPEATED, blink_handler);
APP_ERROR_CHECK(err_code);
err_code = app_timer_create(&m_hid_kb, APP_TIMER_MODE_REPEATED, hid_kb_handle);
APP_ERROR_CHECK(err_code);
}
int main(void)
{
ret_code_t ret;
static const app_usbd_config_t usbd_config = {
.ev_state_proc = usbd_user_ev_handler
};
// Initialize.
log_init();
timers_init();
buttons_leds_init();
app_usbd_serial_num_generate();
ret = nrf_drv_clock_init();
APP_ERROR_CHECK(ret);
NRF_LOG_INFO("USBD BLE UART example started.");
ret = app_usbd_init(&usbd_config);
APP_ERROR_CHECK(ret);
app_usbd_class_inst_t const * class_cdc_acm = app_usbd_cdc_acm_class_inst_get(&m_app_cdc_acm);
ret = app_usbd_class_append(class_cdc_acm);
APP_ERROR_CHECK(ret);
app_usbd_class_inst_t const * class_inst_kbd;
#if CONFIG_HAS_KBD
class_inst_kbd = app_usbd_hid_kbd_class_inst_get(&m_app_hid_kbd);
#else
class_inst_kbd = app_usbd_dummy_class_inst_get(&m_app_kbd_dummy);
#endif
ble_stack_init();
gap_params_init();
gatt_init();
services_init();
advertising_init();
conn_params_init();
// Start execution.
// advertising_start();
// ret = app_usbd_power_events_enable();
// APP_ERROR_CHECK(ret);
ret = app_usbd_class_append(class_inst_kbd);
APP_ERROR_CHECK(ret);
if (USBD_POWER_DETECTION)
{
ret = app_usbd_power_events_enable();
APP_ERROR_CHECK(ret);
}
else
{
NRF_LOG_INFO("No USB power detection enabled\r\nStarting USB now");
app_usbd_enable();
app_usbd_start();
}
ret_code_t err_code = app_timer_start(m_hid_kb,APP_TIMER_TICKS(HID_KB_INTERVAL),NULL);
// Enter main loop.
for (;;)
{
while (app_usbd_event_queue_process())
{
/* Nothing to do */
}
idle_state_handle();
}
}