diff options
| -rw-r--r-- | main.c | 35 | 
1 files changed, 16 insertions, 19 deletions
@@ -71,8 +71,8 @@ PROGMEM const char usbHidReportDescriptor[50] = {      0x09, 0x33,                    //     USAGE (Rx)      0x09, 0x34,                    //     USAGE (Ry)      0x09, 0x35,                    //     USAGE (Rz) -    0x15, 0x81,                    //     LOGICAL_MINIMUM (-127) -    0x25, 0x7F,                    //     LOGICAL_MAXIMUM (127) +    0x15, 0x00,                    //     LOGICAL_MINIMUM (0) +    0x25, 0xFF,                    //     LOGICAL_MAXIMUM (255)      0x75, 0x08,                    //     REPORT_SIZE (8)      0x95, 0x06,                    //     REPORT_COUNT (6)      0x81, 0x02,                    //     INPUT (Data,Var,Abs) @@ -81,12 +81,12 @@ PROGMEM const char usbHidReportDescriptor[50] = {  };  typedef struct { -    uchar   btn1; -    uchar   btn2; -    char    x; -    char    y; -    char    cx; -    char    cy; +    uchar   buttons; +    uchar   dpad; +    uchar    x; +    uchar    y; +    uchar    cx; +    uchar    cy;      uchar   ltrig;      uchar   rtrig;  } report_t; @@ -298,7 +298,6 @@ char decode_byte(char* bufptr)  int main (void)  {  	char rand=123; -	char gc_x=3, gc_y=3;  	unsigned char ltrig=0, rtrig=0;  	DDRC=0x00; @@ -347,8 +346,6 @@ debug(4);  		if(usbInterruptIsReady())  		{ -		    reportBuffer.x = gc_x; -		    reportBuffer.y = -gc_y;  		    usbSetInterrupt((void *)&reportBuffer, sizeof(reportBuffer)); @@ -394,24 +391,24 @@ debug(4);  		if (n_received == 64)  		{ -			gc_y=decode_byte(buffer+24); -			gc_x=decode_byte(buffer+16); +			reportBuffer.x=decode_byte(buffer+16); +			reportBuffer.y=~decode_byte(buffer+24);  			reportBuffer.cx=decode_byte(buffer+32); -			reportBuffer.cy=decode_byte(buffer+40); +			reportBuffer.cy=~decode_byte(buffer+40);  			reportBuffer.ltrig=decode_byte(buffer+48);  			reportBuffer.rtrig=decode_byte(buffer+56); -			reportBuffer.btn1=decode_byte(buffer+0); -			reportBuffer.btn2=decode_byte(buffer+8); +			char btn1=decode_byte(buffer+0); +			char btn2=decode_byte(buffer+8); + +			reportBuffer.buttons = (btn1 & 0x1F)  |  ((btn2 & 0x70) << 1); +			reportBuffer.dpad = (btn2 & 0x0F);  			ltrig=decode_byte(buffer+48);  			rtrig=decode_byte(buffer+56); -			gc_x = ((signed char)(((unsigned char) gc_x) - 128)); -			gc_y = ((signed char)(((unsigned char) gc_y) - 128)); -  		}  		else  		{  | 
