GamePortAdapter
Dependencies: mbed-rtos mbed USBDevice USBJoystick
Revision 3:20f3136e49fa, committed 2017-12-13
- Comitter:
- obsoleet37
- Date:
- Wed Dec 13 04:39:26 2017 +0000
- Parent:
- 2:c7f76dac3723
- Child:
- 4:17b8ede8063a
- Commit message:
- Added basic output thread
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/USBDevice.lib Wed Dec 13 04:39:26 2017 +0000 @@ -0,0 +1,1 @@ +http://os.mbed.com/users/mbed_official/code/USBDevice/#53949e6131f6
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/USBJoystick.lib Wed Dec 13 04:39:26 2017 +0000 @@ -0,0 +1,1 @@ +http://os.mbed.com/users/wim/code/USBJoystick/#e086541742c3
--- a/main.cpp Mon Dec 11 22:30:59 2017 +0000
+++ b/main.cpp Wed Dec 13 04:39:26 2017 +0000
@@ -1,11 +1,16 @@
#include "mbed.h"
+//#include "USBSerial.h"
+#include "USBMouseKeyboard.h"
+#include "USBJoystick.h"
#include "rtos.h"
+#include "string.h"
+
Serial pc(USBTX, USBRX);
//macOS: screen /dev/tty.usbmodem{num} {baud rate}
//Windows: Realterm lol
-
-Thread analogThread;
+USBMouseKeyboard key_mouse;
+//USBJoystick joystick;
Timer y1_t;
Timer x1_t;
@@ -21,11 +26,21 @@
volatile int x1_pulse;
volatile int y2_pulse;
volatile int x2_pulse;
-volatile int buts;
+volatile int buttons;
DigitalOut trig(p19);
-BusIn buttons(p21, p22, p23, p24);
+BusIn buttons_raw(p21, p22, p23, p24);
+
+//output, min, max, value
+int bindings[8][4] = {{10, 0, 100, (int)'a'},
+ {10, 0, 100, (int)'w'},
+ {10, 255, 0, 0},
+ {10, 255, 0, 0},
+ {10, 128, 255, (int)'1'},
+ {10, 128, 255, (int)'2'},
+ {10, 128, 255, (int)'3'},
+ {10, 128, 255, (int)'4'}};
void start_y1() {
y1_t.reset();
@@ -68,6 +83,9 @@
void analog_thread() {
+
+ buttons_raw.mode(PullUp);
+
trig = 1;
y1_pulse = 0;
x1_pulse = 0;
@@ -85,27 +103,85 @@
x2.rise(&start_x2);
x2.fall(&stop_x2);
-
- buttons.mode(PullUp);
while(1) {
trig = 0;
trig = 1;
- buts = ~buttons&0xF;
- wait(.1);
+ buttons = ~buttons_raw&0xF;
+ Thread::wait(1);
}
}
-int main() {
+
+void debug_thread() {
pc.printf("Beginning Joystick Test...\r\n");
pc.printf("---------------------------------\r\n");
- analogThread.start(analog_thread);
-
while(1) {
- pc.printf("Joystick 1 - %d, %d, %X \r\n", x1_pulse, y1_pulse, buts&0x3);
- pc.printf("Joystick 2 - %d, %d, %X \r\n", x2_pulse, y2_pulse, (buts>>2)&0x3);
+ pc.printf("Joystick 1 - %d, %d, %X \r\n", x1_pulse, y1_pulse, buttons&0x3);
+ pc.printf("Joystick 2 - %d, %d, %X \r\n", x2_pulse, y2_pulse, (buttons>>2)&0x3);
pc.printf("\r\n");
- wait(.5);
+ Thread::wait(500);
}
}
+
+
+void output_thread() {
+ int joy[6];
+ int mouse[4];
+ int value, trigval;
+
+ while(true) {
+ memset(joy, 0, sizeof(joy));
+ memset(mouse, 0, sizeof(mouse));
+
+ for (int i=0; i<8; i++) {
+ //pc.printf("Checking %d: ", i);
+ switch (i) {
+ case 0: value = x1_pulse; trigval = x1_pulse; break;
+ case 1: value = y1_pulse; trigval = y1_pulse; break;
+ case 2: value = x2_pulse; trigval = x2_pulse; break;
+ case 3: value = y2_pulse; trigval = y2_pulse; break;
+ case 4: trigval = (buttons & 0x1)*255; value = bindings[i][3]; break;
+ case 5: trigval = ((buttons>>1) & 0x1)*255; value = bindings[i][3]; break;
+ case 6: trigval = ((buttons>>2) & 0x1)*255; value = bindings[i][3]; break;
+ case 7: trigval = ((buttons>>3) & 0x1)*255; value = bindings[i][3]; break;
+ }
+
+ if (trigval >= bindings[i][1] && trigval <= bindings[i][2]) {
+ //pc.printf("Triggered : %d, %d, %d\r\n", i, trigval, value);
+ switch (bindings[i][0]) {
+ case 0: joy[2] = value; break;//Joy X
+ case 1: joy[3] = value; break; //Joy Y
+ case 2: joy[0] = value; break; //Joy throttle
+ case 3: joy[1] = value; break; //Joy rudder
+ case 4: joy[4] |= bindings[i][3]; break; //Joy buttons
+ case 5: joy[5] |= bindings[i][3]; break; //Joy hat
+ case 6: mouse[0] = value/10; break; //Mouse X
+ case 7: mouse[1] = value/10; break; //Mouse Y
+ case 8: mouse[2] |= bindings[i][3]; break; //Mouse buttons
+ case 9: mouse[3] = value/10; break; //Mouse scroll
+ case 10: key_mouse.keyCode(bindings[i][3]); break; //Keypress
+ }
+ }
+ }
+ //key_mouse.update(mouse[0], mouse[1], mouse[2], mouse[3]);
+ //joystick.update(joy[0], joy[1], joy[2], joy[3], joy[4], joy[5]);
+ Thread::wait(20);
+ }
+}
+
+
+int main() {
+ Thread analogThread;
+ Thread outputThread;
+
+ analogThread.start(analog_thread);
+ Thread::wait(100);
+ outputThread.start(output_thread);
+
+ //Thread debugThread;
+ //debugThread.start(debug_thread);
+
+ while(1) Thread::yield();
+}
