Actualmente estoy haciendo un controlador Playstaion 2 a convertidor USB usando un Arduino Uno, y está funcionando muy bien, pero estoy atascado en un problema específico.
Estoy intentando admitir los botones sensibles a la presión, pero no sé qué descriptor de HID usar para el USB. Actualmente tengo lo siguiente, pero mi computadora no parece estar registrando los estados de los botones correctamente, y jstest muestra que los botones parecen "pegarse" en un estado activado. Además, no estoy muy seguro de que el uso de Rx y Ry para el segundo stick analógico sea correcto.
¿Qué áreas del descriptor debo cambiar para que todo funcione correctamente?
Aquí está mi descriptor actual:
const PROGMEM USB_Descriptor_HIDReport_Datatype_t hidDescriptor[] =
{
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x05, // USAGE (Game Pad)
0xa1, 0x01, // COLLECTION (Application)
0x09, 0x01, // USAGE (Pointer)
0xa1, 0x00, // COLLECTION (Physical)
// ; Right stick
0x09, 0x33, // USAGE (Rx)
0x09, 0x34, // USAGE (Ry)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x02, // INPUT (Data,Var,Abs)
// ; Left stick
0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0, // END_COLLECTION
0x05, 0x09, // USAGE_PAGE (Button)
// ; Pressure sensitive buttons
0x19, 0x01, // USAGE_MINIMUM (Button 1)
0x29, 0x0c, // USAGE_MAXIMUM (Button 12)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x0c, // REPORT_COUNT (12)
0x81, 0x02, // INPUT (Data,Var,Abs)
// ; Other buttons (L3, R3, Select, Start)
0x19, 0x0d, // USAGE_MINIMUM (Button 13)
0x29, 0x10, // USAGE_MAXIMUM (Button 16)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x04, // REPORT_COUNT (4)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0 // END_COLLECTION
};
PS. Estoy usando LUFA y actualizando el firmware del controlador USB de Uno