Renato Grottesi
/
MaliUSBJoystick
USB HID Device that emulates a Gamecontroller
main.cpp@1:018979eb4641, 2022-08-25 (annotated)
- 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?
User | Revision | Line number | New 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 | } |