Cleanup report descriptor a bit.

- No longer an extra button 0 in linux
This commit is contained in:
Raphael Assenat 2015-08-18 23:24:23 -04:00
parent d4a16f9ddb
commit bc55a51cf7
4 changed files with 40 additions and 40 deletions

View File

@ -16,6 +16,9 @@ all: $(HEXFILE)
clean: clean:
rm -f $(PROGNAME).elf $(PROGNAME).hex $(PROGNAME).map $(OBJS) rm -f $(PROGNAME).elf $(PROGNAME).hex $(PROGNAME).map $(OBJS)
main.o: main.c reportdesc.c dataHidReport.c
$(CC) $(CFLAGS) -c $< -o $@
%.o: %.S %.o: %.S
$(CC) $(CFLAGS) -c $< -o $@ $(CC) $(CFLAGS) -c $< -o $@

8
main.c
View File

@ -215,9 +215,11 @@ static unsigned char gamepad_report0[32];
// Output Report IDs for various functions // Output Report IDs for various functions
#define REPORT_SET_EFFECT 0x01 #define REPORT_SET_EFFECT 0x01
#define REPORT_SET_STATUS 0x02
#define REPORT_SET_PERIODIC 0x04 #define REPORT_SET_PERIODIC 0x04
#define REPORT_SET_CONSTANT_FORCE 0x05 #define REPORT_SET_CONSTANT_FORCE 0x05
#define REPORT_EFFECT_OPERATION 0x0A #define REPORT_EFFECT_OPERATION 0x0A
#define REPORT_EFFECT_BLOCK_IDX 0x0B
#define REPORT_DISABLE_ACTUATORS 0x0C #define REPORT_DISABLE_ACTUATORS 0x0C
#define REPORT_PID_POOL 0x0D #define REPORT_PID_POOL 0x0D
@ -350,6 +352,12 @@ uint8_t hid_set_report_main(const struct usb_request *rq, const uint8_t *data, u
switch(data[0]) switch(data[0])
{ {
case REPORT_SET_STATUS:
printf_P(PSTR("eff. set stat\r\n"));
break;
case REPORT_EFFECT_BLOCK_IDX:
printf_P(PSTR("eff. blk. idx\r\n"));
break;
case REPORT_DISABLE_ACTUATORS: case REPORT_DISABLE_ACTUATORS:
printf_P(PSTR("disable actuators\r\n")); printf_P(PSTR("disable actuators\r\n"));
break; break;

4
n64.c
View File

@ -132,8 +132,10 @@ static char n64Update(void)
} }
#ifdef BUTTON_A_RUMBLE_TEST #ifdef BUTTON_A_RUMBLE_TEST
must_rumble = force_rumble; must_rumble = force_rumble;
//printf("Caps: %02x %02x %02x\r\n", caps[0], caps[1], caps[2]);
#endif #endif
switch (n64_rumble_state) switch (n64_rumble_state)
{ {
case RSTATE_INIT: case RSTATE_INIT:
@ -257,8 +259,6 @@ static char n64Update(void)
xval += 16000; xval += 16000;
yval += 16000; yval += 16000;
printf("x: 0x%04x -> ", xval, yval);
last_built_report[1] = ((uint8_t*)&xval)[0]; last_built_report[1] = ((uint8_t*)&xval)[0];
last_built_report[2] = ((uint8_t*)&xval)[1]; last_built_report[2] = ((uint8_t*)&xval)[1];

View File

@ -30,22 +30,17 @@ const uint8_t gcn64_usbHidReportDescriptor[] PROGMEM = {
0x09,0x05, // Usage Joystick 0x09,0x05, // Usage Joystick
0xA1,0x01, // Collection Application 0xA1,0x01, // Collection Application
//axis //axis
0x85,0x01, // Report ID 1 //
// not sure how this is to work?
// 0x05, 0x02, //USAGE_PAGE (Simulation Controls)
//0x09, 0xBB, //USAGE (Throttle)
0x09, 0x01, // usage pointer 0x09, 0x01, // usage pointer
0xA1, 0x00, // COLLECTION (phys) 0xA1, 0x00, // COLLECTION (phys)
0x05, 0x01, // USAGE_PAGE (Generic desktop) 0x85,0x01, // Report ID 1
0x05, 0x01, // USAGE_PAGE (Generic desktop)
0x75, 0x10, // REPORT_SIZE (16) 0x75, 0x10, // REPORT_SIZE (16)
0x95, 0x06, // REPORT_COUNT (6) 0x95, 0x06, // REPORT_COUNT (6)
0x15, 0x00, // LOGICAL_MINIMUM (0) 0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0x00, 0x7D, // LOGICAL_MAXIMUM (32000) 0x26, 0x00, 0x7D, // LOGICAL_MAXIMUM (32000)
// 0x16, 0x00, // Physical Minimum (0)
// 0x46, 0x00, 0x7D, // Physical Maximum (32000)
0x09, 0x30, // USAGE (X) 0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y) 0x09, 0x31, // USAGE (Y)
0x09, 0x33, // USAGE (Rx) 0x09, 0x33, // USAGE (Rx)
@ -53,32 +48,23 @@ const uint8_t gcn64_usbHidReportDescriptor[] PROGMEM = {
0x09, 0x35, // USAGE (Rz) 0x09, 0x35, // USAGE (Rz)
0x09, 0x36, // USAGE (Slider) 0x09, 0x36, // USAGE (Slider)
0x81, 0x02, // INPUT 0x81, 0x02, // INPUT
0xc0, // END COLLECTION
#define NUM_BUTTONS 16 #define NUM_BUTTONS 16
//buttons //buttons
0x05, 0x09, // USAGE_PAGE (Button) 0xA1, 0x00, // COLLECTION (phys)
0x15, 0x00, // LOGICAL_MINIMUM (0) 0x05, 0x09, // USAGE_PAGE (Button)
0x25, 0x01, // LOGICAL_MAXIMUM (1) 0x15, 0x00, // LOGICAL_MINIMUM (0)
0x75, 0x01, // REPORT_SIZE (1) 0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x95, NUM_BUTTONS, // REPORT_COUNT (14) 0x75, 0x01, // REPORT_SIZE (1)
0x19, 0x01, // USAGE_MINIMUM (Button 1) 0x95, NUM_BUTTONS, // REPORT_COUNT (14)
0x29, NUM_BUTTONS, // USAGE_MAXIMUM (Button 14) 0x19, 0x01, // USAGE_MINIMUM (Button 1)
0x75, 0x01, // REPORT_SIZE (1) 0x29, NUM_BUTTONS, // USAGE_MAXIMUM (Button 14)
0x95, NUM_BUTTONS, // REPORT_COUNT (16) 0x75, 0x01, // REPORT_SIZE (1)
0x81, 0x02, // INPUT 0x95, NUM_BUTTONS, // REPORT_COUNT (16)
0x81, 0x02, // INPUT
0xc0, // END COLLECTION 0xc0, // END COLLECTION
#if 0
//???
0x06,0x01,0xFF, // Usage Page Generic Desktop
0x09,0x49, // Usage Undefined
0x75,0x01, // Report Size 1
0x95,0x01, // Report Count 1
0x81,0x02, // Input (Variable)
0x75,0x07, // Report Size 7
0x81,0x03, // Input (Constant, Variable)
#endif
0x05,0x0F, // Usage Page Physical Interface 0x05,0x0F, // Usage Page Physical Interface
@ -87,7 +73,11 @@ const uint8_t gcn64_usbHidReportDescriptor[] PROGMEM = {
0x85,0x02, // Report ID 2 0x85,0x02, // Report ID 2
0x09,0x9F, // Usage DS Device is Reset 0x09,0x9F, // Usage DS Device is Reset
0x09,0xA0, // Usage DS Device is Pause 0x09,0xA0, // Usage DS Device is Pause
0x09,0xA4, // Usage Actuator Power // RA: 2015-08-18: Removed this bit since it gets
// mapped to BTN_DEAD in linux's hid-input.c and this
// makes the adapter appear to have 17 buttons.
//
// 0x09,0xA4, // Usage Actuator Power
0x09,0xA5, // Usage Undefined 0x09,0xA5, // Usage Undefined
0x09,0xA6, // Usage Undefined 0x09,0xA6, // Usage Undefined
0x15,0x00, // Logical Minimum 0 0x15,0x00, // Logical Minimum 0
@ -95,19 +85,19 @@ const uint8_t gcn64_usbHidReportDescriptor[] PROGMEM = {
0x35,0x00, // Physical Minimum 0 0x35,0x00, // Physical Minimum 0
0x45,0x01, // Physical Maximum 1 0x45,0x01, // Physical Maximum 1
0x75,0x01, // Report Size 1 0x75,0x01, // Report Size 1
0x95,0x05, // Report Count 5 0x95,0x04, // Report Count 4
0x81,0x02, // Input (Variable) 0x81,0x02, // Input (Variable)
0x95,0x03, // Report Count 3 0x95,0x04, // Report Count 4
0x75,0x01, // Report Size 1 0x75,0x01, // Report Size 1
0x81,0x03, // Input (Constant, Variable) 0x81,0x03, // Input (Constant, Variable)
0x09,0x94, // Usage PID Device Control 0x09,0x94, // Usage PID Device Control
0x15,0x00, // Logical Minimum 0 0x15,0x00, // Logical Minimum 0
0x25,0x01, // Logical Maximum 1 0x25,0x01, // Logical Maximum 1
0x35,0x00, // Physical Minimum 0 0x35,0x00, // Physical Minimum 0
0x45,0x01, // Physical Maximum 1 0x45,0x01, // Physical Maximum 1
0x75,0x01, // Report Size 1 0x75,0x01, // Report Size 1
0x95,0x01, // Report Count 1 0x95,0x01, // Report Count 1
0x81,0x02, // Input (Variable) 0x81,0x02, // Input (Variable)
0x09,0x22, // Usage Effect Block Index 0x09,0x22, // Usage Effect Block Index
0x15,0x01, // Logical Minimum 1 0x15,0x01, // Logical Minimum 1
0x25,0x28, // Logical Maximum 28h (40d) 0x25,0x28, // Logical Maximum 28h (40d)
@ -115,10 +105,9 @@ const uint8_t gcn64_usbHidReportDescriptor[] PROGMEM = {
0x45,0x28, // Physical Maximum 28h (40d) 0x45,0x28, // Physical Maximum 28h (40d)
0x75,0x07, // Report Size 7 0x75,0x07, // Report Size 7
0x95,0x01, // Report Count 1 0x95,0x01, // Report Count 1
0x81,0x02, // Input (Variable) 0x81,0x02, // Input (Variable)
0xC0 , // End Collection 0xC0 , // End Collection
0x09,0x21, // Usage Set Effect Report 0x09,0x21, // Usage Set Effect Report
0xA1,0x02, // Collection Datalink 0xA1,0x02, // Collection Datalink
0x85,0x01, // Report ID 1 0x85,0x01, // Report ID 1