SDK ver:15.2.0
demo:usbd
i want to use the 52840 usb function ,the pc is the host ,the 52840 is device。
i cant use respond_setup_data to send data to pc。
but how to get data from pc?
source:
static void usbd_event_handler(nrf_drv_usbd_evt_t const * const p_event)
{
switch (p_event->type)
{
......
case NRF_DRV_USBD_EVT_SETUP:
{
nrf_drv_usbd_setup_t setup;
nrf_drv_usbd_setup_get(&setup);
switch (setup.bmRequest)
{
......
case 0xFE: // send data to pc
send_data_to_pc(&setup); // useful
break;
case 0xFF: // get data from pc
get_data_from_pc(&setup); //unusefu
break;
default:
NRF_LOG_ERROR("Unknown request: 0x%2x", setup.bmRequest);
nrf_drv_usbd_setup_stall();
return;
}
break;
}
default:
break;
}
}
static void send_data_to_pc(nrf_drv_usbd_setup_t const * const p_setup)
{
respond_setup_data(
p_setup,
get_descriptor_report_interface_0,
p_setup->wLength);
}
static void get_data_from_pc(nrf_drv_usbd_setup_t const * const p_setup)
{
respond_get_data(
p_setup,
get_data,
p_setup->wLength);
}
static void respond_setup_data(
nrf_drv_usbd_setup_t const * const p_setup,
void const * p_data, size_t size)
{
/* Check the size against required response size */
if (size > p_setup->wLength)
{
size = p_setup->wLength;
}
ret_code_t ret;
nrf_drv_usbd_transfer_t transfer =
{
.p_data = {.tx = p_data},
.size = size
};
ret = nrf_drv_usbd_ep_transfer(NRF_DRV_USBD_EPIN0, &transfer);
if (ret != NRF_SUCCESS)
{
NRF_LOG_ERROR("Transfer starting failed: %d", (uint32_t)ret);
}
ASSERT(ret == NRF_SUCCESS);
UNUSED_VARIABLE(ret);
}
static void respond_get_data(
nrf_drv_usbd_setup_t const * const p_setup,
void * data, size_t size)
{
/* Check the size against required response size */
if (size > p_setup->wLength)
{
size = p_setup->wLength;
}
ret_code_t ret;
nrf_drv_usbd_transfer_t transfer =
{
.p_data = {.rx = data},
.size = size,
};
ret = nrf_drv_usbd_ep_transfer(NRF_DRV_USBD_EPOUT0, &transfer);
if (ret != NRF_SUCCESS)
{
NRF_LOG_ERROR("Transfer starting failed: %d", (uint32_t)ret);
}
ASSERT(ret == NRF_SUCCESS);
UNUSED_VARIABLE(ret);
}
pc usb drive is good ,i can use it to communicate with other evaluation boards.
in 52840DK ,send data to pc is ok, failed to get data from pc .
how to get data from pc by usb ep0?
thanks.