Dependencies:   ChaNFSSD mbed ChaNFS

Committer:
okini3939
Date:
Thu Nov 10 03:20:42 2011 +0000
Revision:
1:efbcfbae4747
Parent:
0:02c293160df3

        

Who changed what in which revision?

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