USB HID Device that emulates a Gamecontroller

Dependencies:   mbed USBDevice

Committer:
rengro01
Date:
Thu Aug 25 07:22:28 2022 +0000
Revision:
1:018979eb4641
Parent:
0:5037d4be5b6d
Final Arcade Gamepad

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wim 0:5037d4be5b6d 1 #include "mbed.h"
wim 0:5037d4be5b6d 2 #include "USBMouse.h"
wim 0:5037d4be5b6d 3 #include "USBJoystick.h"
wim 0:5037d4be5b6d 4
rengro01 1:018979eb4641 5 USBJoystick joystick(0x046d, 0xc216);
rengro01 1:018979eb4641 6
rengro01 1:018979eb4641 7 // keys range: 288-303 0x120-0x134
wim 0:5037d4be5b6d 8
rengro01 1:018979eb4641 9 DigitalIn l_r(p17);
rengro01 1:018979eb4641 10 DigitalIn l_l(p18);
rengro01 1:018979eb4641 11 DigitalIn l_u(p20);
rengro01 1:018979eb4641 12 DigitalIn l_d(p19);
rengro01 1:018979eb4641 13 DigitalIn l_b1(p16);
rengro01 1:018979eb4641 14 DigitalIn l_b2(p10);
rengro01 1:018979eb4641 15 DigitalIn l_b3(p6);
rengro01 1:018979eb4641 16 DigitalIn l_b4(p7);
rengro01 1:018979eb4641 17 DigitalIn l_b5(p9);
rengro01 1:018979eb4641 18 DigitalIn l_b6(p5);
wim 0:5037d4be5b6d 19
rengro01 1:018979eb4641 20 DigitalIn r_r(p22);
rengro01 1:018979eb4641 21 DigitalIn r_l(p21);
rengro01 1:018979eb4641 22 DigitalIn r_u(p23);
rengro01 1:018979eb4641 23 DigitalIn r_d(p24);
rengro01 1:018979eb4641 24 DigitalIn r_b1(p11);
rengro01 1:018979eb4641 25 DigitalIn r_b2(p29);
rengro01 1:018979eb4641 26 DigitalIn r_b3(p13);
rengro01 1:018979eb4641 27 DigitalIn r_b4(p12);
rengro01 1:018979eb4641 28 DigitalIn r_b5(p15);
rengro01 1:018979eb4641 29 DigitalIn r_b6(p14);
wim 0:5037d4be5b6d 30
rengro01 1:018979eb4641 31 DigitalIn c_l(p25);
rengro01 1:018979eb4641 32 DigitalIn c_r(p26);
rengro01 1:018979eb4641 33 DigitalIn c_u(p27);
rengro01 1:018979eb4641 34 DigitalIn c_d(p28);
wim 0:5037d4be5b6d 35
wim 0:5037d4be5b6d 36 int main() {
rengro01 1:018979eb4641 37 int16_t x_l = 0;
rengro01 1:018979eb4641 38 int16_t y_l = 0;
rengro01 1:018979eb4641 39 uint8_t buttons_l = 0;
rengro01 1:018979eb4641 40 int16_t x_r = 0;
rengro01 1:018979eb4641 41 int16_t y_r = 0;
rengro01 1:018979eb4641 42 uint8_t buttons_r = 0;
rengro01 1:018979eb4641 43 uint8_t hat = 0;
wim 0:5037d4be5b6d 44
rengro01 1:018979eb4641 45 /*
rengro01 1:018979eb4641 46 120 a 121 x 122 y 123 b 124 l1 125 r1 126 l2 127 r2
rengro01 1:018979eb4641 47 128 slt 129 srt 12a tl 12b tr
rengro01 1:018979eb4641 48 00 x 01 y
rengro01 1:018979eb4641 49 02 z 03 rz
rengro01 1:018979eb4641 50 10 hx 11 hy
rengro01 1:018979eb4641 51 */
wim 0:5037d4be5b6d 52
wim 0:5037d4be5b6d 53 while (1) {
rengro01 1:018979eb4641 54 x_l = 0;
rengro01 1:018979eb4641 55 y_l = 0;
rengro01 1:018979eb4641 56 if(l_l) x_l = -127;
rengro01 1:018979eb4641 57 if(l_r) x_l = 127;
rengro01 1:018979eb4641 58 if(l_d) y_l = 127;
rengro01 1:018979eb4641 59 if(l_u) y_l = -127;
rengro01 1:018979eb4641 60 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;
rengro01 1:018979eb4641 61
rengro01 1:018979eb4641 62 x_r = 0;
rengro01 1:018979eb4641 63 y_r = 0;
rengro01 1:018979eb4641 64 if(r_l) x_r = -127;
rengro01 1:018979eb4641 65 if(r_r) x_r = 127;
rengro01 1:018979eb4641 66 if(r_d) y_r = 127;
rengro01 1:018979eb4641 67 if(r_u) y_r = -127;
rengro01 1:018979eb4641 68 buttons_r = r_b1 | r_b2 << 1 | r_b3 << 2 | r_b4 << 3 | 0 << 4 | 0 << 5 | 0 << 6 | 0 << 7;
wim 0:5037d4be5b6d 69
rengro01 1:018979eb4641 70 #define HATSWITCH_UP 0x00
rengro01 1:018979eb4641 71 #define HATSWITCH_UPRIGHT 0x01
rengro01 1:018979eb4641 72 #define HATSWITCH_RIGHT 0x02
rengro01 1:018979eb4641 73 #define HATSWITCH_DOWNRIGHT 0x03
rengro01 1:018979eb4641 74 #define HATSWITCH_DOWN 0x04
rengro01 1:018979eb4641 75 #define HATSWITCH_DOWNLEFT 0x05
rengro01 1:018979eb4641 76 #define HATSWITCH_LEFT 0x06
rengro01 1:018979eb4641 77 #define HATSWITCH_UPLEFT 0x07
rengro01 1:018979eb4641 78 #define HATSWITCH_NONE 0x0F
rengro01 1:018979eb4641 79 hat = HATSWITCH_NONE;
rengro01 1:018979eb4641 80
rengro01 1:018979eb4641 81 if(c_u) {
rengro01 1:018979eb4641 82 if(c_l) {hat = HATSWITCH_UPLEFT;} else if(c_r) {hat = HATSWITCH_UPRIGHT;} else {hat = HATSWITCH_UP;}
rengro01 1:018979eb4641 83 } else if(c_d) {
rengro01 1:018979eb4641 84 if(c_l) {hat = HATSWITCH_DOWNLEFT;} else if(c_r) {hat = HATSWITCH_DOWNRIGHT;} else {hat = HATSWITCH_DOWN;}
rengro01 1:018979eb4641 85 }
rengro01 1:018979eb4641 86 else if(c_l) {hat = HATSWITCH_LEFT;} else if(c_r) {hat = HATSWITCH_RIGHT;}
rengro01 1:018979eb4641 87
rengro01 1:018979eb4641 88 joystick.update(x_l, y_l, buttons_l, x_r, y_r, buttons_r, hat);
wim 0:5037d4be5b6d 89
wim 0:5037d4be5b6d 90 wait(0.001);
wim 0:5037d4be5b6d 91 }
wim 0:5037d4be5b6d 92 }