USB HID Device that emulates a Gamecontroller

Dependencies:   mbed USBDevice

Revision:
1:018979eb4641
Parent:
0:5037d4be5b6d
--- a/main.cpp	Sat Jan 07 21:03:54 2012 +0000
+++ b/main.cpp	Thu Aug 25 07:22:28 2022 +0000
@@ -2,64 +2,91 @@
 #include "USBMouse.h"
 #include "USBJoystick.h"
 
-//USBMouse mouse;
-USBJoystick joystick;
+USBJoystick joystick(0x046d, 0xc216);
+
+// keys range: 288-303   0x120-0x134
 
-// Variables for Heartbeat and Status monitoring
-DigitalOut myled1(LED1);
-DigitalOut myled2(LED2);
-DigitalOut myled3(LED3);
-DigitalOut heartbeatLED(LED4);
-
-Ticker heartbeat;
-Serial pc(USBTX, USBRX); // tx, rx
+DigitalIn l_r(p17);
+DigitalIn l_l(p18);
+DigitalIn l_u(p20);
+DigitalIn l_d(p19);
+DigitalIn l_b1(p16);
+DigitalIn l_b2(p10);
+DigitalIn l_b3(p6);
+DigitalIn l_b4(p7);
+DigitalIn l_b5(p9);
+DigitalIn l_b6(p5);
 
-// Heartbeat monitor
-void pulse() {
-  heartbeatLED = !heartbeatLED;
-}
+DigitalIn r_r(p22);
+DigitalIn r_l(p21);
+DigitalIn r_u(p23);
+DigitalIn r_d(p24);
+DigitalIn r_b1(p11);
+DigitalIn r_b2(p29);
+DigitalIn r_b3(p13);
+DigitalIn r_b4(p12);
+DigitalIn r_b5(p15);
+DigitalIn r_b6(p14);
 
-void heartbeat_start() {
-  heartbeat.attach(&pulse, 0.5);
-}
-
-void heartbeat_stop() {
-  heartbeat.detach();
-}
-
+DigitalIn c_l(p25);
+DigitalIn c_r(p26);
+DigitalIn c_u(p27);
+DigitalIn c_d(p28);
 
 int main() {
-    int16_t i = 0;
-    int16_t throttle = 0;
-    int16_t rudder = 0;    
-    int16_t x = 0;
-    int16_t y = 0;
-    int32_t radius = 120;
-    int32_t angle = 0;
-    int8_t button = 0;    
-    int8_t hat = 0;    
-    
-    pc.printf("Hello World!\n\r");
+    int16_t x_l = 0;
+    int16_t y_l = 0;
+    uint8_t buttons_l = 0;
+    int16_t x_r = 0;
+    int16_t y_r = 0;
+    uint8_t buttons_r = 0;
+    uint8_t hat = 0;
 
-    heartbeat_start();
+/*
+120 a   121 x   122 y   123 b  124 l1  125 r1  126 l2  127 r2
+128 slt 129 srt 12a tl  12b tr
+00 x  01 y
+02 z  03 rz
+10 hx 11 hy
+*/
 
     while (1) {
-        // Basic Joystick
-        throttle = (i >> 8) & 0xFF; // value -127 .. 128
-        rudder = (i >> 8) & 0xFF;   // value -127 .. 128        
-        button = (i >> 8) & 0x0F;   // value    0 .. 15, one bit per button     
-//        hat    = (i >> 8) & 0x03;   // value 0, 1, 2, 3 or 4 for neutral 
-        hat    = (i >> 8) & 0x07;   // value 0..7 or 8 for neutral         
-        i++;        
-        
-        x = cos((double)angle*3.14/180.0)*radius;  // value -127 .. 128
-        y = sin((double)angle*3.14/180.0)*radius;  // value -127 .. 128
-        angle += 3;        
+        x_l = 0;
+        y_l = 0;
+        if(l_l) x_l = -127;
+        if(l_r) x_l = 127;
+        if(l_d) y_l = 127;
+        if(l_u) y_l = -127;
+        buttons_l = l_b6 | l_b4 << 1 | l_b3 << 2 | l_b5 << 3 | l_b1 << 4 | l_b2 << 5 | r_b5 << 6 | r_b6 << 7;
+
+        x_r = 0;
+        y_r = 0;
+        if(r_l) x_r = -127;
+        if(r_r) x_r = 127;
+        if(r_d) y_r = 127;
+        if(r_u) y_r = -127;
+        buttons_r = r_b1 | r_b2 << 1 | r_b3 << 2 | r_b4 << 3 | 0 << 4 | 0 << 5 | 0 << 6 | 0 << 7;
 
-        joystick.update(throttle, rudder, x, y, button, hat);
+#define HATSWITCH_UP            0x00
+#define HATSWITCH_UPRIGHT       0x01
+#define HATSWITCH_RIGHT         0x02
+#define HATSWITCH_DOWNRIGHT     0x03
+#define HATSWITCH_DOWN          0x04
+#define HATSWITCH_DOWNLEFT      0x05
+#define HATSWITCH_LEFT          0x06
+#define HATSWITCH_UPLEFT        0x07
+#define HATSWITCH_NONE          0x0F
+        hat = HATSWITCH_NONE;
+                
+        if(c_u) {
+            if(c_l) {hat = HATSWITCH_UPLEFT;} else if(c_r) {hat = HATSWITCH_UPRIGHT;} else {hat = HATSWITCH_UP;}
+        } else if(c_d) {
+             if(c_l) {hat = HATSWITCH_DOWNLEFT;} else if(c_r) {hat = HATSWITCH_DOWNRIGHT;} else {hat = HATSWITCH_DOWN;}
+        }
+        else if(c_l) {hat = HATSWITCH_LEFT;} else if(c_r) {hat = HATSWITCH_RIGHT;}
+
+        joystick.update(x_l, y_l, buttons_l, x_r, y_r, buttons_r, hat);
 
         wait(0.001);
     }
-    
-    pc.printf("Bye World!\n\r");                           
 }
\ No newline at end of file