STM32f4 Puerto a HAL: USB HID descargando paquetes

2

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í?

    
pregunta S Sreejit

1 respuesta

0

Chris te dio el punto de que la segunda llamada no tendrá efecto. En realidad no es necesario cambiar manualmente el estado ocupado. Será actualizado por USB ISRs. Así que solo necesitas una encuesta en el estado de hhid- > y esperar hasta que se vuelva inactivo. Sin embargo, no lo haga en USB ISR u otros ISR con prioridad igual o superior a USB. En tal caso, el identificador USB-TX nunca se servirá y su programa quedará bloqueado.

    
respondido por el user2686101

Lea otras preguntas en las etiquetas