Fork of the official USBDevice library

Fork of USBDevice by mbed official

Committer:
screamer
Date:
Fri Apr 28 17:01:10 2017 +0000
Branch:
device-files
Revision:
76:f0fd8d911b24
Parent:
73:8d28a0cb7b43
Changed the layout of USBDevice implementation for various targets to match mbed-os/targets. This also reduces the amount of files being compiled as USBDevice code for other targets is not compiled.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
screamer 73:8d28a0cb7b43 1 /* Copyright (c) 2010-2011 mbed.org, MIT License
screamer 73:8d28a0cb7b43 2 *
screamer 73:8d28a0cb7b43 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
screamer 73:8d28a0cb7b43 4 * and associated documentation files (the "Software"), to deal in the Software without
screamer 73:8d28a0cb7b43 5 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
screamer 73:8d28a0cb7b43 6 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
screamer 73:8d28a0cb7b43 7 * Software is furnished to do so, subject to the following conditions:
screamer 73:8d28a0cb7b43 8 *
screamer 73:8d28a0cb7b43 9 * The above copyright notice and this permission notice shall be included in all copies or
screamer 73:8d28a0cb7b43 10 * substantial portions of the Software.
screamer 73:8d28a0cb7b43 11 *
screamer 73:8d28a0cb7b43 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
screamer 73:8d28a0cb7b43 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
screamer 73:8d28a0cb7b43 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
screamer 73:8d28a0cb7b43 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
screamer 73:8d28a0cb7b43 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
screamer 73:8d28a0cb7b43 17 */
screamer 73:8d28a0cb7b43 18
screamer 73:8d28a0cb7b43 19 #ifndef USBMOUSE_H
screamer 73:8d28a0cb7b43 20 #define USBMOUSE_H
screamer 73:8d28a0cb7b43 21
screamer 73:8d28a0cb7b43 22 #include "USBHID.h"
screamer 73:8d28a0cb7b43 23
screamer 73:8d28a0cb7b43 24 #define REPORT_ID_MOUSE 2
screamer 73:8d28a0cb7b43 25
screamer 73:8d28a0cb7b43 26 /* Common usage */
screamer 73:8d28a0cb7b43 27
screamer 73:8d28a0cb7b43 28 enum MOUSE_BUTTON
screamer 73:8d28a0cb7b43 29 {
screamer 73:8d28a0cb7b43 30 MOUSE_LEFT = 1,
screamer 73:8d28a0cb7b43 31 MOUSE_RIGHT = 2,
screamer 73:8d28a0cb7b43 32 MOUSE_MIDDLE = 4,
screamer 73:8d28a0cb7b43 33 };
screamer 73:8d28a0cb7b43 34
screamer 73:8d28a0cb7b43 35 /* X and Y limits */
screamer 73:8d28a0cb7b43 36 /* These values do not directly map to screen pixels */
screamer 73:8d28a0cb7b43 37 /* Zero may be interpreted as meaning 'no movement' */
screamer 73:8d28a0cb7b43 38 #define X_MIN_ABS (1) /*!< Minimum value on x-axis */
screamer 73:8d28a0cb7b43 39 #define Y_MIN_ABS (1) /*!< Minimum value on y-axis */
screamer 73:8d28a0cb7b43 40 #define X_MAX_ABS (0x7fff) /*!< Maximum value on x-axis */
screamer 73:8d28a0cb7b43 41 #define Y_MAX_ABS (0x7fff) /*!< Maximum value on y-axis */
screamer 73:8d28a0cb7b43 42
screamer 73:8d28a0cb7b43 43 #define X_MIN_REL (-127) /*!< The maximum value that we can move to the left on the x-axis */
screamer 73:8d28a0cb7b43 44 #define Y_MIN_REL (-127) /*!< The maximum value that we can move up on the y-axis */
screamer 73:8d28a0cb7b43 45 #define X_MAX_REL (127) /*!< The maximum value that we can move to the right on the x-axis */
screamer 73:8d28a0cb7b43 46 #define Y_MAX_REL (127) /*!< The maximum value that we can move down on the y-axis */
screamer 73:8d28a0cb7b43 47
screamer 73:8d28a0cb7b43 48 enum MOUSE_TYPE
screamer 73:8d28a0cb7b43 49 {
screamer 73:8d28a0cb7b43 50 ABS_MOUSE,
screamer 73:8d28a0cb7b43 51 REL_MOUSE,
screamer 73:8d28a0cb7b43 52 };
screamer 73:8d28a0cb7b43 53
screamer 73:8d28a0cb7b43 54 /**
screamer 73:8d28a0cb7b43 55 *
screamer 73:8d28a0cb7b43 56 * USBMouse example
screamer 73:8d28a0cb7b43 57 * @code
screamer 73:8d28a0cb7b43 58 * #include "mbed.h"
screamer 73:8d28a0cb7b43 59 * #include "USBMouse.h"
screamer 73:8d28a0cb7b43 60 *
screamer 73:8d28a0cb7b43 61 * USBMouse mouse;
screamer 73:8d28a0cb7b43 62 *
screamer 73:8d28a0cb7b43 63 * int main(void)
screamer 73:8d28a0cb7b43 64 * {
screamer 73:8d28a0cb7b43 65 * while (1)
screamer 73:8d28a0cb7b43 66 * {
screamer 73:8d28a0cb7b43 67 * mouse.move(20, 0);
screamer 73:8d28a0cb7b43 68 * wait(0.5);
screamer 73:8d28a0cb7b43 69 * }
screamer 73:8d28a0cb7b43 70 * }
screamer 73:8d28a0cb7b43 71 *
screamer 73:8d28a0cb7b43 72 * @endcode
screamer 73:8d28a0cb7b43 73 *
screamer 73:8d28a0cb7b43 74 *
screamer 73:8d28a0cb7b43 75 * @code
screamer 73:8d28a0cb7b43 76 * #include "mbed.h"
screamer 73:8d28a0cb7b43 77 * #include "USBMouse.h"
screamer 73:8d28a0cb7b43 78 * #include <math.h>
screamer 73:8d28a0cb7b43 79 *
screamer 73:8d28a0cb7b43 80 * USBMouse mouse(ABS_MOUSE);
screamer 73:8d28a0cb7b43 81 *
screamer 73:8d28a0cb7b43 82 * int main(void)
screamer 73:8d28a0cb7b43 83 * {
screamer 73:8d28a0cb7b43 84 * uint16_t x_center = (X_MAX_ABS - X_MIN_ABS)/2;
screamer 73:8d28a0cb7b43 85 * uint16_t y_center = (Y_MAX_ABS - Y_MIN_ABS)/2;
screamer 73:8d28a0cb7b43 86 * uint16_t x_screen = 0;
screamer 73:8d28a0cb7b43 87 * uint16_t y_screen = 0;
screamer 73:8d28a0cb7b43 88 *
screamer 73:8d28a0cb7b43 89 * uint32_t x_origin = x_center;
screamer 73:8d28a0cb7b43 90 * uint32_t y_origin = y_center;
screamer 73:8d28a0cb7b43 91 * uint32_t radius = 5000;
screamer 73:8d28a0cb7b43 92 * uint32_t angle = 0;
screamer 73:8d28a0cb7b43 93 *
screamer 73:8d28a0cb7b43 94 * while (1)
screamer 73:8d28a0cb7b43 95 * {
screamer 73:8d28a0cb7b43 96 * x_screen = x_origin + cos((double)angle*3.14/180.0)*radius;
screamer 73:8d28a0cb7b43 97 * y_screen = y_origin + sin((double)angle*3.14/180.0)*radius;
screamer 73:8d28a0cb7b43 98 *
screamer 73:8d28a0cb7b43 99 * mouse.move(x_screen, y_screen);
screamer 73:8d28a0cb7b43 100 * angle += 3;
screamer 73:8d28a0cb7b43 101 * wait(0.01);
screamer 73:8d28a0cb7b43 102 * }
screamer 73:8d28a0cb7b43 103 * }
screamer 73:8d28a0cb7b43 104 *
screamer 73:8d28a0cb7b43 105 * @endcode
screamer 73:8d28a0cb7b43 106 */
screamer 73:8d28a0cb7b43 107 class USBMouse: public USBHID
screamer 73:8d28a0cb7b43 108 {
screamer 73:8d28a0cb7b43 109 public:
screamer 73:8d28a0cb7b43 110
screamer 73:8d28a0cb7b43 111 /**
screamer 73:8d28a0cb7b43 112 * Constructor
screamer 73:8d28a0cb7b43 113 *
screamer 73:8d28a0cb7b43 114 * @param mouse_type Mouse type: ABS_MOUSE (absolute mouse) or REL_MOUSE (relative mouse) (default: REL_MOUSE)
screamer 73:8d28a0cb7b43 115 * @param vendor_id Your vendor_id (default: 0x1234)
screamer 73:8d28a0cb7b43 116 * @param product_id Your product_id (default: 0x0001)
screamer 73:8d28a0cb7b43 117 * @param product_release Your preoduct_release (default: 0x0001)
screamer 73:8d28a0cb7b43 118 *
screamer 73:8d28a0cb7b43 119 */
screamer 73:8d28a0cb7b43 120 USBMouse(MOUSE_TYPE mouse_type = REL_MOUSE, uint16_t vendor_id = 0x1234, uint16_t product_id = 0x0001, uint16_t product_release = 0x0001):
screamer 73:8d28a0cb7b43 121 USBHID(0, 0, vendor_id, product_id, product_release, false)
screamer 73:8d28a0cb7b43 122 {
screamer 73:8d28a0cb7b43 123 button = 0;
screamer 73:8d28a0cb7b43 124 this->mouse_type = mouse_type;
screamer 73:8d28a0cb7b43 125 connect();
screamer 73:8d28a0cb7b43 126 };
screamer 73:8d28a0cb7b43 127
screamer 73:8d28a0cb7b43 128 /**
screamer 73:8d28a0cb7b43 129 * Write a state of the mouse
screamer 73:8d28a0cb7b43 130 *
screamer 73:8d28a0cb7b43 131 * @param x x-axis position
screamer 73:8d28a0cb7b43 132 * @param y y-axis position
screamer 73:8d28a0cb7b43 133 * @param buttons buttons state (first bit represents MOUSE_LEFT, second bit MOUSE_RIGHT and third bit MOUSE_MIDDLE)
screamer 73:8d28a0cb7b43 134 * @param z wheel state (>0 to scroll down, <0 to scroll up)
screamer 73:8d28a0cb7b43 135 * @returns true if there is no error, false otherwise
screamer 73:8d28a0cb7b43 136 */
screamer 73:8d28a0cb7b43 137 bool update(int16_t x, int16_t y, uint8_t buttons, int8_t z);
screamer 73:8d28a0cb7b43 138
screamer 73:8d28a0cb7b43 139
screamer 73:8d28a0cb7b43 140 /**
screamer 73:8d28a0cb7b43 141 * Move the cursor to (x, y)
screamer 73:8d28a0cb7b43 142 *
screamer 73:8d28a0cb7b43 143 * @param x-axis position
screamer 73:8d28a0cb7b43 144 * @param y-axis position
screamer 73:8d28a0cb7b43 145 * @returns true if there is no error, false otherwise
screamer 73:8d28a0cb7b43 146 */
screamer 73:8d28a0cb7b43 147 bool move(int16_t x, int16_t y);
screamer 73:8d28a0cb7b43 148
screamer 73:8d28a0cb7b43 149 /**
screamer 73:8d28a0cb7b43 150 * Press one or several buttons
screamer 73:8d28a0cb7b43 151 *
screamer 73:8d28a0cb7b43 152 * @param button button state (ex: press(MOUSE_LEFT))
screamer 73:8d28a0cb7b43 153 * @returns true if there is no error, false otherwise
screamer 73:8d28a0cb7b43 154 */
screamer 73:8d28a0cb7b43 155 bool press(uint8_t button);
screamer 73:8d28a0cb7b43 156
screamer 73:8d28a0cb7b43 157 /**
screamer 73:8d28a0cb7b43 158 * Release one or several buttons
screamer 73:8d28a0cb7b43 159 *
screamer 73:8d28a0cb7b43 160 * @param button button state (ex: release(MOUSE_LEFT))
screamer 73:8d28a0cb7b43 161 * @returns true if there is no error, false otherwise
screamer 73:8d28a0cb7b43 162 */
screamer 73:8d28a0cb7b43 163 bool release(uint8_t button);
screamer 73:8d28a0cb7b43 164
screamer 73:8d28a0cb7b43 165 /**
screamer 73:8d28a0cb7b43 166 * Double click (MOUSE_LEFT)
screamer 73:8d28a0cb7b43 167 *
screamer 73:8d28a0cb7b43 168 * @returns true if there is no error, false otherwise
screamer 73:8d28a0cb7b43 169 */
screamer 73:8d28a0cb7b43 170 bool doubleClick();
screamer 73:8d28a0cb7b43 171
screamer 73:8d28a0cb7b43 172 /**
screamer 73:8d28a0cb7b43 173 * Click
screamer 73:8d28a0cb7b43 174 *
screamer 73:8d28a0cb7b43 175 * @param button state of the buttons ( ex: clic(MOUSE_LEFT))
screamer 73:8d28a0cb7b43 176 * @returns true if there is no error, false otherwise
screamer 73:8d28a0cb7b43 177 */
screamer 73:8d28a0cb7b43 178 bool click(uint8_t button);
screamer 73:8d28a0cb7b43 179
screamer 73:8d28a0cb7b43 180 /**
screamer 73:8d28a0cb7b43 181 * Scrolling
screamer 73:8d28a0cb7b43 182 *
screamer 73:8d28a0cb7b43 183 * @param z value of the wheel (>0 to go down, <0 to go up)
screamer 73:8d28a0cb7b43 184 * @returns true if there is no error, false otherwise
screamer 73:8d28a0cb7b43 185 */
screamer 73:8d28a0cb7b43 186 bool scroll(int8_t z);
screamer 73:8d28a0cb7b43 187
screamer 73:8d28a0cb7b43 188 /*
screamer 73:8d28a0cb7b43 189 * To define the report descriptor. Warning: this method has to store the length of the report descriptor in reportLength.
screamer 73:8d28a0cb7b43 190 *
screamer 73:8d28a0cb7b43 191 * @returns pointer to the report descriptor
screamer 73:8d28a0cb7b43 192 */
screamer 73:8d28a0cb7b43 193 virtual uint8_t * reportDesc();
screamer 73:8d28a0cb7b43 194
screamer 73:8d28a0cb7b43 195 protected:
screamer 73:8d28a0cb7b43 196 /*
screamer 73:8d28a0cb7b43 197 * Get configuration descriptor
screamer 73:8d28a0cb7b43 198 *
screamer 73:8d28a0cb7b43 199 * @returns pointer to the configuration descriptor
screamer 73:8d28a0cb7b43 200 */
screamer 73:8d28a0cb7b43 201 virtual uint8_t * configurationDesc();
screamer 73:8d28a0cb7b43 202
screamer 73:8d28a0cb7b43 203 private:
screamer 73:8d28a0cb7b43 204 MOUSE_TYPE mouse_type;
screamer 73:8d28a0cb7b43 205 uint8_t button;
screamer 73:8d28a0cb7b43 206 bool mouseSend(int8_t x, int8_t y, uint8_t buttons, int8_t z);
screamer 73:8d28a0cb7b43 207 };
screamer 73:8d28a0cb7b43 208
screamer 73:8d28a0cb7b43 209 #endif