No se puede leer desde el dispositivo HID STM32f042

0

Estoy configurando un dispositivo HID personalizado en el STM3240f2. He estado siguiendo principalmente el ejemplo de CustomHID de STM.

El descriptor de mi informe tiene este aspecto:

const uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] =
{
    0x05, 0x01,           // Global  USAGE PAGE (Medical Device)
    0x09, 0x05,           // Local   USAGE (Undefined: Cautery Board)
    0xA1, 0x01,           // Main    COLLECTION (application)
    // 6 bytes 

    // Output message 1 (sent from host to device)
    // One bit per cautery control

    0x85, 0x01,           //    REPORT_ID (1)              
    0x09, 0x05,           //    USAGE (Undefined: Set Cautery)
    0x19, 0x01,           //    USAGE_MINIMUM (Ctrl 1)
    0x29, 0x03,           //    USAGE_MAXIMUM (Ctrl 3)        
    0x15, 0x00,           //    LOGICAL_MINIMUM (0)        
    0x25, 0x01,           //    LOGICAL_MAXIMUM (1)        
    0x75, 0x08,           //    REPORT_SIZE (1)            
    0x95, 0x01,           //    REPORT_COUNT (3)           
    0x91, 0x82,           //    OUTPUT (Data,Var,Abs,Vol)  
    // 24 bytes

    // Reserved for board control
    0x75, 0x08,           //    REPORT_SIZE (8)            
    0x95, 0x01,           //    REPORT_COUNT (1)           
    0x91, 0x82,           //    OUTPUT (Data,Var,Abs,Vol)
    // 30 bytes

    // Input message 1 (sent from device to host)
    0x85, 0x02,           //    REPORT_ID (2)
    0x09, 0x05,           //    USAGE (Push Button)
    0x15, 0x00,           //    LOGICAL_MINIMUM (0)
    0x25, 0x01,           //    LOGICAL_MAXIMUM (1)
    0x75, 0x01,           //    REPORT_SIZE (1)
    0x81, 0x82,           //    INPUT (Data,Var,Abs,Vol)
    // 42 bytes

    // End
    0xC0                  // Main END COLLECTION
    //43 bytes

};

Mi usbd_conf.h tiene este aspecto:

/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
#define USBD_CFG_MAX_NUM             1
#define USBD_ITF_MAX_NUM             1
#define USB_MAX_STR_DESC_SIZ         64 
#define USBD_SELF_POWERED               

#define CUSTOMHID_SIZ_REPORT_DESC    43
#define CUSTOMHID_SIZ_CONFIG_DESC    41

#define HID_IN_EP                    0x81
#define HID_OUT_EP                   0x01

#define HID_IN_PACKET                2
#define HID_OUT_PACKET               2

Y mi USBD DataIn y se ve así:

    uint8_t  USBD_HID_DataIn (void  *pdev, 
                                     uint8_t epnum)
    {
      if (epnum == 1) PrevXferDone = 1;

      return USBD_OK;
    }

Envio datos en systick como este:

    uint8_t Send_Buffer[4];
    Send_Buffer[0] = 'b\x0d';
    Send_Buffer[1] = 'b\x0e';
    Send_Buffer[2] = 'b\x0a';
    Send_Buffer[3] = 'b\x0d';

    USBD_HID_SendReport (&USB_Device_dev, Send_Buffer, 4);

Para intentar leer los datos, estoy usando la biblioteca de python hid con los siguientes comandos:

import hid
devbrd = hid.Device(0xffff,0x0001)
devbrd.read(64, 1000)

mi problema es que la lectura siempre se agota y devuelve b''

Mis dos intentos de resolver esto han sido para verlo en gdb y wireshark. En gdb pongo puntos de interrupción en todo el lugar, pero nada se dispara cuando llamo a devbrd.read (). En Wireshark, tampoco veo actividad cuando devbrd.read (). Si llamo a devbrd.write () veo actividad en Wireshark y golpeo puntos de interrupción.

¿Es este un problema de la biblioteca HID de Python? ¿O un problema con mi descriptor de dispositivo? ¿O algo completamente distinto?

    
pregunta Indigo

0 respuestas

Lea otras preguntas en las etiquetas