Mamecontroller/joystick device wrapper library

Dependencies:   USBDevice mbed

Committer:
uswickra
Date:
Wed Dec 10 05:51:13 2014 +0000
Revision:
4:4f6e38b6c07e
my controller;

Who changed what in which revision?

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