Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
USBJoystick.h
00001 /* USBJoystick.h */ 00002 /* USB device example: Joystick*/ 00003 /* Copyright (c) 2011 ARM Limited. All rights reserved. */ 00004 /* Modified Mouse code for Joystick - WH 2012 */ 00005 00006 #ifndef USBJOYSTICK_H 00007 #define USBJOYSTICK_H 00008 00009 #include "USBHID.h" 00010 00011 #define REPORT_ID_JOYSTICK 4 00012 00013 /* Common usage */ 00014 enum JOY_BUTTON { 00015 JOY_B0 = 1, 00016 JOY_B1 = 2, 00017 JOY_B2 = 4, 00018 JOY_B3 = 8, 00019 }; 00020 00021 #if(0) 00022 enum JOY_HAT { 00023 JOY_HAT_UP = 0, 00024 JOY_HAT_RIGHT = 1, 00025 JOY_HAT_DOWN = 2, 00026 JOY_HAT_LEFT = 3, 00027 JOY_HAT_NEUTRAL = 4, 00028 }; 00029 #else 00030 enum JOY_HAT { 00031 JOY_HAT_UP = 0, 00032 JOY_HAT_UP_RIGHT = 1, 00033 JOY_HAT_RIGHT = 2, 00034 JOY_HAT_RIGHT_DOWN = 3, 00035 JOY_HAT_DOWN = 4, 00036 JOY_HAT_DOWN_LEFT = 5, 00037 JOY_HAT_LEFT = 6, 00038 JOY_HAT_LEFT_UP = 7, 00039 JOY_HAT_NEUTRAL = 8, 00040 }; 00041 #endif 00042 00043 /* X, Y and T limits */ 00044 /* These values do not directly map to screen pixels */ 00045 /* Zero may be interpreted as meaning 'no movement' */ 00046 #define JX_MIN_ABS (-127) /*!< The maximum value that we can move to the left on the x-axis */ 00047 #define JY_MIN_ABS (-127) /*!< The maximum value that we can move up on the y-axis */ 00048 #define JT_MIN_ABS (-127) /*!< The minimum value for the throttle */ 00049 #define JX_MAX_ABS (127) /*!< The maximum value that we can move to the right on the x-axis */ 00050 #define JY_MAX_ABS (127) /*!< The maximum value that we can move down on the y-axis */ 00051 #define JT_MAX_ABS (127) /*!< The maximum value for the throttle */ 00052 00053 /** 00054 * 00055 * USBJoystick example 00056 * @code 00057 * #include "mbed.h" 00058 * #include "USBJoystick.h" 00059 * 00060 * USBJoystick joystick; 00061 * 00062 * int main(void) 00063 * { 00064 * while (1) 00065 * { 00066 * joystick.move(20, 0); 00067 * wait(0.5); 00068 * } 00069 * } 00070 * 00071 * @endcode 00072 * 00073 * 00074 * @code 00075 * #include "mbed.h" 00076 * #include "USBJoystick.h" 00077 * #include <math.h> 00078 * 00079 * USBJoystick joystick; 00080 * 00081 * int main(void) 00082 * { 00083 * int16_t i = 0; 00084 * int16_t throttle = 0; 00085 * int16_t rudder = 0; 00086 * int16_t x = 0; 00087 * int16_t y = 0; 00088 * int32_t radius = 120; 00089 * int32_t angle = 0; 00090 * int8_t button = 0; 00091 * int8_t hat = 0; 00092 * 00093 * while (1) { 00094 * // Basic Joystick 00095 * throttle = (i >> 8) & 0xFF; // value -127 .. 128 00096 * rudder = (i >> 8) & 0xFF; // value -127 .. 128 00097 * button = (i >> 8) & 0x0F; // value 0 .. 15, one bit per button 00098 * hat = (i >> 8) & 0x07; // value 0..7 or 8 for neutral 00099 * i++; 00100 * 00101 * x = cos((double)angle*3.14/180.0)*radius; // value -127 .. 128 00102 * y = sin((double)angle*3.14/180.0)*radius; // value -127 .. 128 00103 * angle += 3; 00104 * 00105 * joystick.update(throttle, rudder, x, y, button, hat); 00106 * 00107 * wait(0.001); 00108 * } 00109 * } 00110 * @endcode 00111 */ 00112 00113 00114 class USBJoystick: public USBHID { 00115 public: 00116 00117 /** 00118 * Constructor 00119 * 00120 * @param vendor_id Your vendor_id (default: 0x1234) 00121 * @param product_id Your product_id (default: 0x0002) 00122 * @param product_release Your product_release (default: 0x0001) 00123 */ 00124 USBJoystick(uint16_t vendor_id = 0x1234, uint16_t product_id = 0x0100, uint16_t product_release = 0x0001): 00125 USBHID(0, 0, vendor_id, product_id, product_release, false) 00126 { 00127 _init(); 00128 connect(); 00129 }; 00130 00131 /** 00132 * Write a state of the mouse 00133 * 00134 * @param t throttle position 00135 * @param r rudder position 00136 * @param x x-axis position 00137 * @param y y-axis position 00138 * @param buttons buttons state 00139 * @param hat hat state 0 (up), 1 (right, 2 (down), 3 (left) or 4 (neutral) 00140 * @returns true if there is no error, false otherwise 00141 */ 00142 bool update(int16_t t, int16_t r, int16_t x, int16_t y, uint8_t buttons, uint8_t hat); 00143 00144 /** 00145 * Write a state of the mouse 00146 * 00147 * @returns true if there is no error, false otherwise 00148 */ 00149 bool update(); 00150 00151 /** 00152 * Move the throttle position 00153 * 00154 * @param t throttle position 00155 * @returns true if there is no error, false otherwise 00156 */ 00157 bool throttle(int16_t t); 00158 00159 /** 00160 * Move the rudder position 00161 * 00162 * @param r rudder position 00163 * @returns true if there is no error, false otherwise 00164 */ 00165 bool rudder(int16_t r); 00166 00167 /** 00168 * Move the cursor to (x, y) 00169 * 00170 * @param x-axis position 00171 * @param y-axis position 00172 * @returns true if there is no error, false otherwise 00173 */ 00174 bool move(int16_t x, int16_t y); 00175 00176 /** 00177 * Press one or several buttons 00178 * 00179 * @param button button state 00180 * @returns true if there is no error, false otherwise 00181 */ 00182 bool button(uint8_t button); 00183 00184 /** 00185 * Press hat 00186 * 00187 * @param hat hat state 00188 * @returns true if there is no error, false otherwise 00189 */ 00190 bool hat(uint8_t hat); 00191 00192 /* 00193 * To define the report descriptor. Warning: this method has to store the length of the report descriptor in reportLength. 00194 * 00195 * @returns pointer to the report descriptor 00196 */ 00197 virtual uint8_t * reportDesc(); 00198 00199 private: 00200 int8_t _t; 00201 int8_t _r; 00202 int8_t _x; 00203 int8_t _y; 00204 uint8_t _button; 00205 uint8_t _hat; 00206 00207 void _init(); 00208 }; 00209 00210 #endif
Generated on Thu Jul 14 2022 05:16:23 by
1.7.2
USB Joystick Device