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?