Estoy tratando de portar un código HID personalizado de trabajo desde un periférico estándar a HAL. Estoy enviando dos informes consecutivos en un solo bucle while. En el código de Periférico estándar se llama dos veces para enviar informes alternativos al host (Arch-linux):
uint8_t USBD_HID_SendReport(USB_OTG_CORE_HANDLE *pdev, uint8_t *report, uint16_t len)
{
if (pdev->dev.device_status == USB_OTG_CONFIGURED )
{
DCD_EP_Tx (pdev, HID_IN_EP, report, len);
}
return USBD_OK;
}
Pero, intentando lo mismo con HAL, es decir,
uint8_t USBD_HID_SendReport (USBD_HandleTypeDef *pdev, uint8_t *report, uint16_t len)
{
USBD_HID_HandleTypeDef *hhid = (USBD_HID_HandleTypeDef*)pdev->pClassData;
if (pdev->dev_state == USBD_STATE_CONFIGURED )
{
if(hhid->state == HID_IDLE)
{
hhid->state = HID_BUSY;
USBD_LL_Transmit (pdev,
HID_EPIN_ADDR,
report,
len);
}
}
return USBD_OK;
}
lleva a los paquetes que faltan en el lado del host y no se reciben como informes alternativos.
¿Podría alguien señalar cuál podría ser el problema? ¿Es un problema relacionado con el búfer o algo así?