May not work well

Dependencies:   USBDevice_edit mbed

Committer:
Ugly_Kid
Date:
Thu May 04 13:37:26 2017 +0000
Revision:
0:7e061992d951
Teste de USB_HID

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ugly_Kid 0:7e061992d951 1 /* USBJoystick.h */
Ugly_Kid 0:7e061992d951 2 /* USB device example: Joystick*/
Ugly_Kid 0:7e061992d951 3 /* Copyright (c) 2011 ARM Limited. All rights reserved. */
Ugly_Kid 0:7e061992d951 4 /* Modified Mouse code for Joystick - WH 2012 */
Ugly_Kid 0:7e061992d951 5
Ugly_Kid 0:7e061992d951 6 #ifndef USBJOYSTICK_H
Ugly_Kid 0:7e061992d951 7 #define USBJOYSTICK_H
Ugly_Kid 0:7e061992d951 8
Ugly_Kid 0:7e061992d951 9 #include "USBHID.h"
Ugly_Kid 0:7e061992d951 10
Ugly_Kid 0:7e061992d951 11 #define REPORT_ID_JOYSTICK 4
Ugly_Kid 0:7e061992d951 12
Ugly_Kid 0:7e061992d951 13 /* Common usage */
Ugly_Kid 0:7e061992d951 14 enum JOY_BUTTON {
Ugly_Kid 0:7e061992d951 15 JOY_B0 = 1,
Ugly_Kid 0:7e061992d951 16 JOY_B1 = 2,
Ugly_Kid 0:7e061992d951 17 JOY_B2 = 4,
Ugly_Kid 0:7e061992d951 18 JOY_B3 = 8,
Ugly_Kid 0:7e061992d951 19 };
Ugly_Kid 0:7e061992d951 20
Ugly_Kid 0:7e061992d951 21 #if(0)
Ugly_Kid 0:7e061992d951 22 enum JOY_HAT {
Ugly_Kid 0:7e061992d951 23 JOY_HAT_UP = 0,
Ugly_Kid 0:7e061992d951 24 JOY_HAT_RIGHT = 1,
Ugly_Kid 0:7e061992d951 25 JOY_HAT_DOWN = 2,
Ugly_Kid 0:7e061992d951 26 JOY_HAT_LEFT = 3,
Ugly_Kid 0:7e061992d951 27 JOY_HAT_NEUTRAL = 4,
Ugly_Kid 0:7e061992d951 28 };
Ugly_Kid 0:7e061992d951 29 #else
Ugly_Kid 0:7e061992d951 30 enum JOY_HAT {
Ugly_Kid 0:7e061992d951 31 JOY_HAT_UP = 0,
Ugly_Kid 0:7e061992d951 32 JOY_HAT_UP_RIGHT = 1,
Ugly_Kid 0:7e061992d951 33 JOY_HAT_RIGHT = 2,
Ugly_Kid 0:7e061992d951 34 JOY_HAT_RIGHT_DOWN = 3,
Ugly_Kid 0:7e061992d951 35 JOY_HAT_DOWN = 4,
Ugly_Kid 0:7e061992d951 36 JOY_HAT_DOWN_LEFT = 5,
Ugly_Kid 0:7e061992d951 37 JOY_HAT_LEFT = 6,
Ugly_Kid 0:7e061992d951 38 JOY_HAT_LEFT_UP = 7,
Ugly_Kid 0:7e061992d951 39 JOY_HAT_NEUTRAL = 8,
Ugly_Kid 0:7e061992d951 40 };
Ugly_Kid 0:7e061992d951 41 #endif
Ugly_Kid 0:7e061992d951 42
Ugly_Kid 0:7e061992d951 43 /* X, Y and T limits */
Ugly_Kid 0:7e061992d951 44 /* These values do not directly map to screen pixels */
Ugly_Kid 0:7e061992d951 45 /* Zero may be interpreted as meaning 'no movement' */
Ugly_Kid 0:7e061992d951 46 #define JX_MIN_ABS (-127) /*!< The maximum value that we can move to the left on the x-axis */
Ugly_Kid 0:7e061992d951 47 #define JY_MIN_ABS (-127) /*!< The maximum value that we can move up on the y-axis */
Ugly_Kid 0:7e061992d951 48 #define JT_MIN_ABS (-127) /*!< The minimum value for the throttle */
Ugly_Kid 0:7e061992d951 49 #define JX_MAX_ABS (127) /*!< The maximum value that we can move to the right on the x-axis */
Ugly_Kid 0:7e061992d951 50 #define JY_MAX_ABS (127) /*!< The maximum value that we can move down on the y-axis */
Ugly_Kid 0:7e061992d951 51 #define JT_MAX_ABS (127) /*!< The maximum value for the throttle */
Ugly_Kid 0:7e061992d951 52
Ugly_Kid 0:7e061992d951 53 /**
Ugly_Kid 0:7e061992d951 54 *
Ugly_Kid 0:7e061992d951 55 * USBJoystick example
Ugly_Kid 0:7e061992d951 56 * @code
Ugly_Kid 0:7e061992d951 57 * #include "mbed.h"
Ugly_Kid 0:7e061992d951 58 * #include "USBJoystick.h"
Ugly_Kid 0:7e061992d951 59 *
Ugly_Kid 0:7e061992d951 60 * USBJoystick joystick;
Ugly_Kid 0:7e061992d951 61 *
Ugly_Kid 0:7e061992d951 62 * int main(void)
Ugly_Kid 0:7e061992d951 63 * {
Ugly_Kid 0:7e061992d951 64 * while (1)
Ugly_Kid 0:7e061992d951 65 * {
Ugly_Kid 0:7e061992d951 66 * joystick.move(20, 0);
Ugly_Kid 0:7e061992d951 67 * wait(0.5);
Ugly_Kid 0:7e061992d951 68 * }
Ugly_Kid 0:7e061992d951 69 * }
Ugly_Kid 0:7e061992d951 70 *
Ugly_Kid 0:7e061992d951 71 * @endcode
Ugly_Kid 0:7e061992d951 72 *
Ugly_Kid 0:7e061992d951 73 *
Ugly_Kid 0:7e061992d951 74 * @code
Ugly_Kid 0:7e061992d951 75 * #include "mbed.h"
Ugly_Kid 0:7e061992d951 76 * #include "USBJoystick.h"
Ugly_Kid 0:7e061992d951 77 * #include <math.h>
Ugly_Kid 0:7e061992d951 78 *
Ugly_Kid 0:7e061992d951 79 * USBJoystick joystick;
Ugly_Kid 0:7e061992d951 80 *
Ugly_Kid 0:7e061992d951 81 * int main(void)
Ugly_Kid 0:7e061992d951 82 * {
Ugly_Kid 0:7e061992d951 83 * int16_t i = 0;
Ugly_Kid 0:7e061992d951 84 * int16_t throttle = 0;
Ugly_Kid 0:7e061992d951 85 * int16_t rudder = 0;
Ugly_Kid 0:7e061992d951 86 * int16_t x = 0;
Ugly_Kid 0:7e061992d951 87 * int16_t y = 0;
Ugly_Kid 0:7e061992d951 88 * int32_t radius = 120;
Ugly_Kid 0:7e061992d951 89 * int32_t angle = 0;
Ugly_Kid 0:7e061992d951 90 * int8_t button = 0;
Ugly_Kid 0:7e061992d951 91 * int8_t hat = 0;
Ugly_Kid 0:7e061992d951 92 *
Ugly_Kid 0:7e061992d951 93 * while (1) {
Ugly_Kid 0:7e061992d951 94 * // Basic Joystick
Ugly_Kid 0:7e061992d951 95 * throttle = (i >> 8) & 0xFF; // value -127 .. 128
Ugly_Kid 0:7e061992d951 96 * rudder = (i >> 8) & 0xFF; // value -127 .. 128
Ugly_Kid 0:7e061992d951 97 * button = (i >> 8) & 0x0F; // value 0 .. 15, one bit per button
Ugly_Kid 0:7e061992d951 98 * hat = (i >> 8) & 0x07; // value 0..7 or 8 for neutral
Ugly_Kid 0:7e061992d951 99 * i++;
Ugly_Kid 0:7e061992d951 100 *
Ugly_Kid 0:7e061992d951 101 * x = cos((double)angle*3.14/180.0)*radius; // value -127 .. 128
Ugly_Kid 0:7e061992d951 102 * y = sin((double)angle*3.14/180.0)*radius; // value -127 .. 128
Ugly_Kid 0:7e061992d951 103 * angle += 3;
Ugly_Kid 0:7e061992d951 104 *
Ugly_Kid 0:7e061992d951 105 * joystick.update(throttle, rudder, x, y, button, hat);
Ugly_Kid 0:7e061992d951 106 *
Ugly_Kid 0:7e061992d951 107 * wait(0.001);
Ugly_Kid 0:7e061992d951 108 * }
Ugly_Kid 0:7e061992d951 109 * }
Ugly_Kid 0:7e061992d951 110 * @endcode
Ugly_Kid 0:7e061992d951 111 */
Ugly_Kid 0:7e061992d951 112
Ugly_Kid 0:7e061992d951 113
Ugly_Kid 0:7e061992d951 114 class USBJoystick: public USBHID {
Ugly_Kid 0:7e061992d951 115 public:
Ugly_Kid 0:7e061992d951 116
Ugly_Kid 0:7e061992d951 117 /**
Ugly_Kid 0:7e061992d951 118 * Constructor
Ugly_Kid 0:7e061992d951 119 *
Ugly_Kid 0:7e061992d951 120 * @param vendor_id Your vendor_id (default: 0x1234)
Ugly_Kid 0:7e061992d951 121 * @param product_id Your product_id (default: 0x0002)
Ugly_Kid 0:7e061992d951 122 * @param product_release Your product_release (default: 0x0001)
Ugly_Kid 0:7e061992d951 123 */
Ugly_Kid 0:7e061992d951 124 USBJoystick(uint16_t vendor_id = 0x1233, uint16_t product_id = 0x003, uint16_t product_release = 0x0001):
Ugly_Kid 0:7e061992d951 125 USBHID(0, 0, vendor_id, product_id, product_release, false)
Ugly_Kid 0:7e061992d951 126 {
Ugly_Kid 0:7e061992d951 127 _init();
Ugly_Kid 0:7e061992d951 128 connect();
Ugly_Kid 0:7e061992d951 129 };
Ugly_Kid 0:7e061992d951 130
Ugly_Kid 0:7e061992d951 131 /**
Ugly_Kid 0:7e061992d951 132 * Write a state of the mouse
Ugly_Kid 0:7e061992d951 133 *
Ugly_Kid 0:7e061992d951 134 * @param t throttle position
Ugly_Kid 0:7e061992d951 135 * @param r rudder position
Ugly_Kid 0:7e061992d951 136 * @param x x-axis position
Ugly_Kid 0:7e061992d951 137 * @param y y-axis position
Ugly_Kid 0:7e061992d951 138 * @param buttons buttons state
Ugly_Kid 0:7e061992d951 139 * @param hat hat state 0 (up), 1 (right, 2 (down), 3 (left) or 4 (neutral)
Ugly_Kid 0:7e061992d951 140 * @returns true if there is no error, false otherwise
Ugly_Kid 0:7e061992d951 141 */
Ugly_Kid 0:7e061992d951 142 bool update(int16_t t, int16_t r, int16_t x, int16_t y, uint8_t buttons, uint8_t hat);
Ugly_Kid 0:7e061992d951 143
Ugly_Kid 0:7e061992d951 144 /**
Ugly_Kid 0:7e061992d951 145 * Write a state of the mouse
Ugly_Kid 0:7e061992d951 146 *
Ugly_Kid 0:7e061992d951 147 * @returns true if there is no error, false otherwise
Ugly_Kid 0:7e061992d951 148 */
Ugly_Kid 0:7e061992d951 149 bool update();
Ugly_Kid 0:7e061992d951 150
Ugly_Kid 0:7e061992d951 151 /**
Ugly_Kid 0:7e061992d951 152 * Move the throttle position
Ugly_Kid 0:7e061992d951 153 *
Ugly_Kid 0:7e061992d951 154 * @param t throttle position
Ugly_Kid 0:7e061992d951 155 * @returns true if there is no error, false otherwise
Ugly_Kid 0:7e061992d951 156 */
Ugly_Kid 0:7e061992d951 157 bool throttle(int16_t t);
Ugly_Kid 0:7e061992d951 158
Ugly_Kid 0:7e061992d951 159 /**
Ugly_Kid 0:7e061992d951 160 * Move the rudder position
Ugly_Kid 0:7e061992d951 161 *
Ugly_Kid 0:7e061992d951 162 * @param r rudder position
Ugly_Kid 0:7e061992d951 163 * @returns true if there is no error, false otherwise
Ugly_Kid 0:7e061992d951 164 */
Ugly_Kid 0:7e061992d951 165 bool rudder(int16_t r);
Ugly_Kid 0:7e061992d951 166
Ugly_Kid 0:7e061992d951 167 /**
Ugly_Kid 0:7e061992d951 168 * Move the cursor to (x, y)
Ugly_Kid 0:7e061992d951 169 *
Ugly_Kid 0:7e061992d951 170 * @param x-axis position
Ugly_Kid 0:7e061992d951 171 * @param y-axis position
Ugly_Kid 0:7e061992d951 172 * @returns true if there is no error, false otherwise
Ugly_Kid 0:7e061992d951 173 */
Ugly_Kid 0:7e061992d951 174 bool move(int16_t x, int16_t y);
Ugly_Kid 0:7e061992d951 175
Ugly_Kid 0:7e061992d951 176 /**
Ugly_Kid 0:7e061992d951 177 * Press one or several buttons
Ugly_Kid 0:7e061992d951 178 *
Ugly_Kid 0:7e061992d951 179 * @param button button state
Ugly_Kid 0:7e061992d951 180 * @returns true if there is no error, false otherwise
Ugly_Kid 0:7e061992d951 181 */
Ugly_Kid 0:7e061992d951 182 bool button(uint8_t button);
Ugly_Kid 0:7e061992d951 183
Ugly_Kid 0:7e061992d951 184 /**
Ugly_Kid 0:7e061992d951 185 * Press hat
Ugly_Kid 0:7e061992d951 186 *
Ugly_Kid 0:7e061992d951 187 * @param hat hat state
Ugly_Kid 0:7e061992d951 188 * @returns true if there is no error, false otherwise
Ugly_Kid 0:7e061992d951 189 */
Ugly_Kid 0:7e061992d951 190 bool hat(uint8_t hat);
Ugly_Kid 0:7e061992d951 191
Ugly_Kid 0:7e061992d951 192 /*
Ugly_Kid 0:7e061992d951 193 * To define the report descriptor. Warning: this method has to store the length of the report descriptor in reportLength.
Ugly_Kid 0:7e061992d951 194 *
Ugly_Kid 0:7e061992d951 195 * @returns pointer to the report descriptor
Ugly_Kid 0:7e061992d951 196 */
Ugly_Kid 0:7e061992d951 197 virtual uint8_t * reportDesc();
Ugly_Kid 0:7e061992d951 198
Ugly_Kid 0:7e061992d951 199 private:
Ugly_Kid 0:7e061992d951 200 int8_t _t;
Ugly_Kid 0:7e061992d951 201 int8_t _r;
Ugly_Kid 0:7e061992d951 202 int8_t _x;
Ugly_Kid 0:7e061992d951 203 int8_t _y;
Ugly_Kid 0:7e061992d951 204 uint8_t _button;
Ugly_Kid 0:7e061992d951 205 uint8_t _hat;
Ugly_Kid 0:7e061992d951 206
Ugly_Kid 0:7e061992d951 207 void _init();
Ugly_Kid 0:7e061992d951 208 };
Ugly_Kid 0:7e061992d951 209
Ugly_Kid 0:7e061992d951 210 #endif