A program to show the use of a wireless xbox 360 controller. Has details on what data is given out from the controller as well as normalized values for the triggers and sticks
Dependencies: USBHost USBHostXpad mbed
Fork of USBHostXpad_HelloWorld by
Diff: main.cpp
- Revision:
- 13:015ec003c063
- Parent:
- 11:f76e120a8520
- Child:
- 14:9a82555f7a3b
--- a/main.cpp Sat Feb 01 08:14:26 2014 +0000 +++ b/main.cpp Wed Mar 09 11:03:36 2016 +0000 @@ -4,9 +4,130 @@ Serial pc(USBTX, USBRX); DigitalOut led(LED1); volatile int poll = 0; +/** +@namespace AXYB +@brief Integer for storing the hex of the A X Y B buttons +@brief XPad returns a 4 digit hex for all buttons- AXYB buttons are stored in first value +@param A - given as a 1 +@param B - given as a 2 +@param X - given as a 4 +@param Y - given as a 8 +*/ +uint8_t AXYB=0x0; +/** +@namespace XLBRB +@brief Integer for storing the hex of the LB,RB and center X buttons +@brief XPad returns a 4 digit hex for all buttons- AXYB buttons are stored in second value +@param LB - given as a 1 +@param R - given as a 2 +@param X - given as a 4 -void onXpadEvent (int buttons, int stick_lx, int stick_ly, int stick_rx, int stick_ry, int trigger_l, int trigger_r) { - std::printf("Xpad: %04x %-5d %-5d %-5d %-5d %02x %02x\r\n", buttons, stick_lx, stick_ly, stick_rx, stick_ry, trigger_l, trigger_r); +*/ +uint8_t XLBRB=0x0; + +/** +@namespace bkStrtLCRC +@brief Integer for storing the hex of the Left analog button,Right analog button,back and start buttons +@brief XPad returns a 4 digit hex for all buttons- AXYB buttons are stored in third value +@param start - given as a 1 +@param back - given as a 2 +@param LC - given as a 4 +@param RC - given as a 8 +*/ +uint8_t bkStrtLCRC=0x0; +/** +@namespace DPad +@brief Integer for storing the hex of the Directional buttons +@brief XPad returns a 4 digit hex for all buttons- AXYB buttons are stored in fourth value +@param Up - given as a 1 +@param Down - given as a 2 +@param Left - given as a 4 +@param Right - given as a 8 +*/ +uint8_t DPad=0x0; +/** +@namespace LSY +@brief float for storing the value of the Left Analogue Stick's Y axis +@brief XPad returns a value between -32768(down) and 32767(up) +@there is a deadzone between around -4000 and 4000 where the value returned is not consistent when in the fixed position(assummed 0,0 point) +*/ +float LSY=0x0; +/** +@namespace LSX +@brief float for storing the value of the Left Analogue Stick's X axis +@brief XPad returns a value between -32768(down) and 32767(up) +@there is a deadzone between around -4000 and 4000 where the value returned is not consistent when in the fixed position(assummed 0,0 point) +*/ +float LSX=0x0; +/** +@namespace RSY +@brief float for storing the value of the Right Analogue Stick's Y axis +@brief XPad returns a value between -32768(down) and 32767(up) +@there is a deadzone between around -4000 and 4000 where the value returned is not consistent when in the fixed position(assummed 0,0 point) +*/ +float RSY=0x0; +/** +@namespace RSX +@brief float for storing the value of the Right Analogue Stick's X axis +@brief XPad returns a value between -32768(down) and 32767(up) +@there is a deadzone between around -4000 and 4000 where the value returned is not consistent when in the fixed position(assummed 0,0 point) +*/ +float RSX=0x0; +/** +@namespace sN +@brief float for storing the stick Normalising value +@brief makes the range of the sticks -10 to 10 +*/ +const float sN=0.000305175781;//(10/32768) +/** +@namespace Lt +@brief float for storing the value of the Left trigger +@brief XPad returns a value between 0(not pressed) and 255(fully pressed) +@ +*/ +float Lt=0x0; +/** +@namespace Rt +@brief float for storing the value of the Left trigger +@brief XPad returns a value between 0(not pressed) and 255(fully pressed) +@ +*/ +float Rt=0x0; +/** +@namespace tN +@brief float for storing the trigger Normalising value +@brief makes the range of the triggers 0 to 10 +*/ +const float tN=0.03921568627;//(10/255) + +void XpadValues(int buttons, int stick_lx, int stick_ly, int stick_rx, int stick_ry, int trigger_l, int trigger_r){ + std::printf("Xpad: %04x %-5d %-5d %-5d %-5d %d %d\r\n", buttons, stick_lx, stick_ly, stick_rx, stick_ry, trigger_l, trigger_r);//%04x makes it display (hex) 0 as 0000 %02x + std::printf("buttons: %04x\r\n",buttons); + std::printf("AXYB: %x\r\n",AXYB); + std::printf("XLBRB: %x\r\n",XLBRB); + std::printf("bkStrtLCRC: %x\r\n",bkStrtLCRC); + std::printf("Dpad: %x\r\n",DPad); + std::printf("LSY: %.2f\r\n",LSY); + std::printf("LSX: %.2f\r\n",LSX); + std::printf("RSY: %.2f\r\n",RSY); + std::printf("RSX: %.2f\r\n",RSX); + std::printf("Lt: %.2f\r\n",Lt); + std::printf("Rt: %.2f\r\n",Rt); +} + + +void onXpadEvent (int buttons, int stick_lx, int stick_ly, int stick_rx, int stick_ry, int trigger_l, int trigger_r) { + AXYB=buttons>>12; + XLBRB=(buttons&0x0f00)>>8; + bkStrtLCRC=(buttons&0x00f0)>>4; + DPad=buttons&0x000f; + LSY=stick_ly*sN; + LSX=stick_lx*sN; + RSY=stick_ry*sN; + RSX=stick_rx*sN; + Lt=trigger_l*tN; + Rt=trigger_r*tN; + //XpadValues(buttons, stick_lx, stick_ly, stick_rx, stick_ry, trigger_l, trigger_r); poll = 0; } @@ -45,12 +166,12 @@ int main() { - pc.baud(115200); + pc.baud(9600); pc.printf("----------\r\n"); Thread xpadTask(xpad_task, NULL, osPriorityNormal, 1024 * 4); while(1) { - led=!led; - Thread::wait(500); + // led=!led; + // Thread::wait(500); } }