USBDevice

Dependents:   QEI_X1_LCD_test3 macnica_test

Committer:
toucyy
Date:
Thu Apr 18 07:49:37 2013 +0000
Revision:
0:2d8d0b73e1ff
[mbed] converted /QEI_HelloWorld/USBDevice

Who changed what in which revision?

UserRevisionLine numberNew contents of line
toucyy 0:2d8d0b73e1ff 1 /* USBMouse.h */
toucyy 0:2d8d0b73e1ff 2 /* USB device example: relative mouse */
toucyy 0:2d8d0b73e1ff 3 /* Copyright (c) 2011 ARM Limited. All rights reserved. */
toucyy 0:2d8d0b73e1ff 4
toucyy 0:2d8d0b73e1ff 5 #ifndef USBMOUSE_H
toucyy 0:2d8d0b73e1ff 6 #define USBMOUSE_H
toucyy 0:2d8d0b73e1ff 7
toucyy 0:2d8d0b73e1ff 8 #include "USBHID.h"
toucyy 0:2d8d0b73e1ff 9
toucyy 0:2d8d0b73e1ff 10 #define REPORT_ID_MOUSE 2
toucyy 0:2d8d0b73e1ff 11
toucyy 0:2d8d0b73e1ff 12 /* Common usage */
toucyy 0:2d8d0b73e1ff 13
toucyy 0:2d8d0b73e1ff 14 enum MOUSE_BUTTON
toucyy 0:2d8d0b73e1ff 15 {
toucyy 0:2d8d0b73e1ff 16 MOUSE_LEFT = 1,
toucyy 0:2d8d0b73e1ff 17 MOUSE_RIGHT = 2,
toucyy 0:2d8d0b73e1ff 18 MOUSE_MIDDLE = 4,
toucyy 0:2d8d0b73e1ff 19 };
toucyy 0:2d8d0b73e1ff 20
toucyy 0:2d8d0b73e1ff 21 /* X and Y limits */
toucyy 0:2d8d0b73e1ff 22 /* These values do not directly map to screen pixels */
toucyy 0:2d8d0b73e1ff 23 /* Zero may be interpreted as meaning 'no movement' */
toucyy 0:2d8d0b73e1ff 24 #define X_MIN_ABS (1) /*!< Minimum value on x-axis */
toucyy 0:2d8d0b73e1ff 25 #define Y_MIN_ABS (1) /*!< Minimum value on y-axis */
toucyy 0:2d8d0b73e1ff 26 #define X_MAX_ABS (0x7fff) /*!< Maximum value on x-axis */
toucyy 0:2d8d0b73e1ff 27 #define Y_MAX_ABS (0x7fff) /*!< Maximum value on y-axis */
toucyy 0:2d8d0b73e1ff 28
toucyy 0:2d8d0b73e1ff 29 #define X_MIN_REL (-127) /*!< The maximum value that we can move to the left on the x-axis */
toucyy 0:2d8d0b73e1ff 30 #define Y_MIN_REL (-127) /*!< The maximum value that we can move up on the y-axis */
toucyy 0:2d8d0b73e1ff 31 #define X_MAX_REL (127) /*!< The maximum value that we can move to the right on the x-axis */
toucyy 0:2d8d0b73e1ff 32 #define Y_MAX_REL (127) /*!< The maximum value that we can move down on the y-axis */
toucyy 0:2d8d0b73e1ff 33
toucyy 0:2d8d0b73e1ff 34 enum MOUSE_TYPE
toucyy 0:2d8d0b73e1ff 35 {
toucyy 0:2d8d0b73e1ff 36 ABS_MOUSE,
toucyy 0:2d8d0b73e1ff 37 REL_MOUSE,
toucyy 0:2d8d0b73e1ff 38 };
toucyy 0:2d8d0b73e1ff 39
toucyy 0:2d8d0b73e1ff 40 /**
toucyy 0:2d8d0b73e1ff 41 *
toucyy 0:2d8d0b73e1ff 42 * USBMouse example
toucyy 0:2d8d0b73e1ff 43 * @code
toucyy 0:2d8d0b73e1ff 44 * #include "mbed.h"
toucyy 0:2d8d0b73e1ff 45 * #include "USBMouse.h"
toucyy 0:2d8d0b73e1ff 46 *
toucyy 0:2d8d0b73e1ff 47 * USBMouse mouse;
toucyy 0:2d8d0b73e1ff 48 *
toucyy 0:2d8d0b73e1ff 49 * int main(void)
toucyy 0:2d8d0b73e1ff 50 * {
toucyy 0:2d8d0b73e1ff 51 * while (1)
toucyy 0:2d8d0b73e1ff 52 * {
toucyy 0:2d8d0b73e1ff 53 * mouse.move(20, 0);
toucyy 0:2d8d0b73e1ff 54 * wait(0.5);
toucyy 0:2d8d0b73e1ff 55 * }
toucyy 0:2d8d0b73e1ff 56 * }
toucyy 0:2d8d0b73e1ff 57 *
toucyy 0:2d8d0b73e1ff 58 * @endcode
toucyy 0:2d8d0b73e1ff 59 *
toucyy 0:2d8d0b73e1ff 60 *
toucyy 0:2d8d0b73e1ff 61 * @code
toucyy 0:2d8d0b73e1ff 62 * #include "mbed.h"
toucyy 0:2d8d0b73e1ff 63 * #include "USBMouse.h"
toucyy 0:2d8d0b73e1ff 64 * #include <math.h>
toucyy 0:2d8d0b73e1ff 65 *
toucyy 0:2d8d0b73e1ff 66 * USBMouse mouse(ABS_MOUSE);
toucyy 0:2d8d0b73e1ff 67 *
toucyy 0:2d8d0b73e1ff 68 * int main(void)
toucyy 0:2d8d0b73e1ff 69 * {
toucyy 0:2d8d0b73e1ff 70 * uint16_t x_center = (X_MAX_ABS - X_MIN_ABS)/2;
toucyy 0:2d8d0b73e1ff 71 * uint16_t y_center = (Y_MAX_ABS - Y_MIN_ABS)/2;
toucyy 0:2d8d0b73e1ff 72 * uint16_t x_screen = 0;
toucyy 0:2d8d0b73e1ff 73 * uint16_t y_screen = 0;
toucyy 0:2d8d0b73e1ff 74 *
toucyy 0:2d8d0b73e1ff 75 * uint32_t x_origin = x_center;
toucyy 0:2d8d0b73e1ff 76 * uint32_t y_origin = y_center;
toucyy 0:2d8d0b73e1ff 77 * uint32_t radius = 5000;
toucyy 0:2d8d0b73e1ff 78 * uint32_t angle = 0;
toucyy 0:2d8d0b73e1ff 79 *
toucyy 0:2d8d0b73e1ff 80 * while (1)
toucyy 0:2d8d0b73e1ff 81 * {
toucyy 0:2d8d0b73e1ff 82 * x_screen = x_origin + cos((double)angle*3.14/180.0)*radius;
toucyy 0:2d8d0b73e1ff 83 * y_screen = y_origin + sin((double)angle*3.14/180.0)*radius;
toucyy 0:2d8d0b73e1ff 84 *
toucyy 0:2d8d0b73e1ff 85 * mouse.move(x_screen, y_screen);
toucyy 0:2d8d0b73e1ff 86 * angle += 3;
toucyy 0:2d8d0b73e1ff 87 * wait(0.01);
toucyy 0:2d8d0b73e1ff 88 * }
toucyy 0:2d8d0b73e1ff 89 * }
toucyy 0:2d8d0b73e1ff 90 *
toucyy 0:2d8d0b73e1ff 91 * @endcode
toucyy 0:2d8d0b73e1ff 92 */
toucyy 0:2d8d0b73e1ff 93 class USBMouse: public USBHID
toucyy 0:2d8d0b73e1ff 94 {
toucyy 0:2d8d0b73e1ff 95 public:
toucyy 0:2d8d0b73e1ff 96
toucyy 0:2d8d0b73e1ff 97 /**
toucyy 0:2d8d0b73e1ff 98 * Constructor
toucyy 0:2d8d0b73e1ff 99 *
toucyy 0:2d8d0b73e1ff 100 * @param mouse_type Mouse type: ABS_MOUSE (absolute mouse) or REL_MOUSE (relative mouse) (default: REL_MOUSE)
toucyy 0:2d8d0b73e1ff 101 * @param vendor_id Your vendor_id (default: 0x1234)
toucyy 0:2d8d0b73e1ff 102 * @param product_id Your product_id (default: 0x0001)
toucyy 0:2d8d0b73e1ff 103 * @param product_release Your preoduct_release (default: 0x0001)
toucyy 0:2d8d0b73e1ff 104 *
toucyy 0:2d8d0b73e1ff 105 */
toucyy 0:2d8d0b73e1ff 106 USBMouse(MOUSE_TYPE mouse_type = REL_MOUSE, uint16_t vendor_id = 0x1234, uint16_t product_id = 0x0001, uint16_t product_release = 0x0001):
toucyy 0:2d8d0b73e1ff 107 USBHID(0, 0, vendor_id, product_id, product_release, false)
toucyy 0:2d8d0b73e1ff 108 {
toucyy 0:2d8d0b73e1ff 109 button = 0;
toucyy 0:2d8d0b73e1ff 110 this->mouse_type = mouse_type;
toucyy 0:2d8d0b73e1ff 111 connect();
toucyy 0:2d8d0b73e1ff 112 };
toucyy 0:2d8d0b73e1ff 113
toucyy 0:2d8d0b73e1ff 114 /**
toucyy 0:2d8d0b73e1ff 115 * Write a state of the mouse
toucyy 0:2d8d0b73e1ff 116 *
toucyy 0:2d8d0b73e1ff 117 * @param x x-axis position
toucyy 0:2d8d0b73e1ff 118 * @param y y-axis position
toucyy 0:2d8d0b73e1ff 119 * @param buttons buttons state (first bit represents MOUSE_LEFT, second bit MOUSE_RIGHT and third bit MOUSE_MIDDLE)
toucyy 0:2d8d0b73e1ff 120 * @param z wheel state (>0 to scroll down, <0 to scroll up)
toucyy 0:2d8d0b73e1ff 121 * @returns true if there is no error, false otherwise
toucyy 0:2d8d0b73e1ff 122 */
toucyy 0:2d8d0b73e1ff 123 bool update(int16_t x, int16_t y, uint8_t buttons, int8_t z);
toucyy 0:2d8d0b73e1ff 124
toucyy 0:2d8d0b73e1ff 125
toucyy 0:2d8d0b73e1ff 126 /**
toucyy 0:2d8d0b73e1ff 127 * Move the cursor to (x, y)
toucyy 0:2d8d0b73e1ff 128 *
toucyy 0:2d8d0b73e1ff 129 * @param x-axis position
toucyy 0:2d8d0b73e1ff 130 * @param y-axis position
toucyy 0:2d8d0b73e1ff 131 * @returns true if there is no error, false otherwise
toucyy 0:2d8d0b73e1ff 132 */
toucyy 0:2d8d0b73e1ff 133 bool move(int16_t x, int16_t y);
toucyy 0:2d8d0b73e1ff 134
toucyy 0:2d8d0b73e1ff 135 /**
toucyy 0:2d8d0b73e1ff 136 * Press one or several buttons
toucyy 0:2d8d0b73e1ff 137 *
toucyy 0:2d8d0b73e1ff 138 * @param button button state (ex: press(MOUSE_LEFT))
toucyy 0:2d8d0b73e1ff 139 * @returns true if there is no error, false otherwise
toucyy 0:2d8d0b73e1ff 140 */
toucyy 0:2d8d0b73e1ff 141 bool press(uint8_t button);
toucyy 0:2d8d0b73e1ff 142
toucyy 0:2d8d0b73e1ff 143 /**
toucyy 0:2d8d0b73e1ff 144 * Release one or several buttons
toucyy 0:2d8d0b73e1ff 145 *
toucyy 0:2d8d0b73e1ff 146 * @param button button state (ex: release(MOUSE_LEFT))
toucyy 0:2d8d0b73e1ff 147 * @returns true if there is no error, false otherwise
toucyy 0:2d8d0b73e1ff 148 */
toucyy 0:2d8d0b73e1ff 149 bool release(uint8_t button);
toucyy 0:2d8d0b73e1ff 150
toucyy 0:2d8d0b73e1ff 151 /**
toucyy 0:2d8d0b73e1ff 152 * Double click (MOUSE_LEFT)
toucyy 0:2d8d0b73e1ff 153 *
toucyy 0:2d8d0b73e1ff 154 * @returns true if there is no error, false otherwise
toucyy 0:2d8d0b73e1ff 155 */
toucyy 0:2d8d0b73e1ff 156 bool doubleClick();
toucyy 0:2d8d0b73e1ff 157
toucyy 0:2d8d0b73e1ff 158 /**
toucyy 0:2d8d0b73e1ff 159 * Click
toucyy 0:2d8d0b73e1ff 160 *
toucyy 0:2d8d0b73e1ff 161 * @param button state of the buttons ( ex: clic(MOUSE_LEFT))
toucyy 0:2d8d0b73e1ff 162 * @returns true if there is no error, false otherwise
toucyy 0:2d8d0b73e1ff 163 */
toucyy 0:2d8d0b73e1ff 164 bool click(uint8_t button);
toucyy 0:2d8d0b73e1ff 165
toucyy 0:2d8d0b73e1ff 166 /**
toucyy 0:2d8d0b73e1ff 167 * Scrolling
toucyy 0:2d8d0b73e1ff 168 *
toucyy 0:2d8d0b73e1ff 169 * @param z value of the wheel (>0 to go down, <0 to go up)
toucyy 0:2d8d0b73e1ff 170 * @returns true if there is no error, false otherwise
toucyy 0:2d8d0b73e1ff 171 */
toucyy 0:2d8d0b73e1ff 172 bool scroll(int8_t z);
toucyy 0:2d8d0b73e1ff 173
toucyy 0:2d8d0b73e1ff 174 /*
toucyy 0:2d8d0b73e1ff 175 * To define the report descriptor. Warning: this method has to store the length of the report descriptor in reportLength.
toucyy 0:2d8d0b73e1ff 176 *
toucyy 0:2d8d0b73e1ff 177 * @returns pointer to the report descriptor
toucyy 0:2d8d0b73e1ff 178 */
toucyy 0:2d8d0b73e1ff 179 virtual uint8_t * reportDesc();
toucyy 0:2d8d0b73e1ff 180
toucyy 0:2d8d0b73e1ff 181 private:
toucyy 0:2d8d0b73e1ff 182 MOUSE_TYPE mouse_type;
toucyy 0:2d8d0b73e1ff 183 uint8_t button;
toucyy 0:2d8d0b73e1ff 184 bool mouseSend(int8_t x, int8_t y, uint8_t buttons, int8_t z);
toucyy 0:2d8d0b73e1ff 185 };
toucyy 0:2d8d0b73e1ff 186
toucyy 0:2d8d0b73e1ff 187 #endif