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 /* USBMouseKeyboard.h */
okini3939 0:02c293160df3 2 /* USB device example: Keyboard with a relative mouse */
okini3939 0:02c293160df3 3 /* Copyright (c) 2011 ARM Limited. All rights reserved. */
okini3939 0:02c293160df3 4
okini3939 0:02c293160df3 5 #ifndef USBMOUSEKEYBOARD_H
okini3939 0:02c293160df3 6 #define USBMOUSEKEYBOARD_H
okini3939 0:02c293160df3 7
okini3939 0:02c293160df3 8 #define REPORT_ID_KEYBOARD 1
okini3939 0:02c293160df3 9 #define REPORT_ID_MOUSE 2
okini3939 0:02c293160df3 10 #define REPORT_ID_VOLUME 3
okini3939 0:02c293160df3 11
okini3939 0:02c293160df3 12 #include "USBMouse.h"
okini3939 0:02c293160df3 13 #include "USBKeyboard.h"
okini3939 0:02c293160df3 14 #include "Stream.h"
okini3939 0:02c293160df3 15 #include "USBHID.h"
okini3939 0:02c293160df3 16
okini3939 0:02c293160df3 17 /**
okini3939 0:02c293160df3 18 * USBMouseKeyboard example
okini3939 0:02c293160df3 19 * @code
okini3939 0:02c293160df3 20 *
okini3939 0:02c293160df3 21 * #include "mbed.h"
okini3939 0:02c293160df3 22 * #include "USBMouseKeyboard.h"
okini3939 0:02c293160df3 23 *
okini3939 0:02c293160df3 24 * USBMouseKeyboard key_mouse;
okini3939 0:02c293160df3 25 *
okini3939 0:02c293160df3 26 * int main(void)
okini3939 0:02c293160df3 27 * {
okini3939 0:02c293160df3 28 * while(1)
okini3939 0:02c293160df3 29 * {
okini3939 0:02c293160df3 30 * key_mouse.move(20, 0);
okini3939 0:02c293160df3 31 * key_mouse.printf("Hello From MBED\r\n");
okini3939 0:02c293160df3 32 * wait(1);
okini3939 0:02c293160df3 33 * }
okini3939 0:02c293160df3 34 * }
okini3939 0:02c293160df3 35 * @endcode
okini3939 0:02c293160df3 36 *
okini3939 0:02c293160df3 37 *
okini3939 0:02c293160df3 38 * @code
okini3939 0:02c293160df3 39 *
okini3939 0:02c293160df3 40 * #include "mbed.h"
okini3939 0:02c293160df3 41 * #include "USBMouseKeyboard.h"
okini3939 0:02c293160df3 42 *
okini3939 0:02c293160df3 43 * USBMouseKeyboard key_mouse(ABS_MOUSE);
okini3939 0:02c293160df3 44 *
okini3939 0:02c293160df3 45 * int main(void)
okini3939 0:02c293160df3 46 * {
okini3939 0:02c293160df3 47 * while(1)
okini3939 0:02c293160df3 48 * {
okini3939 0:02c293160df3 49 * key_mouse.move(X_MAX_ABS/2, Y_MAX_ABS/2);
okini3939 0:02c293160df3 50 * key_mouse.printf("Hello from MBED\r\n");
okini3939 0:02c293160df3 51 * wait(1);
okini3939 0:02c293160df3 52 * }
okini3939 0:02c293160df3 53 * }
okini3939 0:02c293160df3 54 * @endcode
okini3939 0:02c293160df3 55 */
okini3939 0:02c293160df3 56 class USBMouseKeyboard: public USBHID, public Stream
okini3939 0:02c293160df3 57 {
okini3939 0:02c293160df3 58 public:
okini3939 0:02c293160df3 59
okini3939 0:02c293160df3 60 /**
okini3939 0:02c293160df3 61 * Constructor
okini3939 0:02c293160df3 62 *
okini3939 0:02c293160df3 63 * @param mouse_type Mouse type: ABS_MOUSE (absolute mouse) or REL_MOUSE (relative mouse) (default: REL_MOUSE)
okini3939 0:02c293160df3 64 * @param vendor_id Your vendor_id (default: 0x1234)
okini3939 0:02c293160df3 65 * @param product_id Your product_id (default: 0x0001)
okini3939 0:02c293160df3 66 * @param product_release Your preoduct_release (default: 0x0001)
okini3939 0:02c293160df3 67 *
okini3939 0:02c293160df3 68 */
okini3939 0:02c293160df3 69 USBMouseKeyboard(MOUSE_TYPE mouse_type = REL_MOUSE, uint16_t vendor_id = 0x0021, uint16_t product_id = 0x0011, uint16_t product_release = 0x0001):
okini3939 0:02c293160df3 70 USBHID(0, 0, vendor_id, product_id, product_release)
okini3939 0:02c293160df3 71 {
okini3939 0:02c293160df3 72 button = 0;
okini3939 0:02c293160df3 73 this->mouse_type = mouse_type;
okini3939 0:02c293160df3 74 };
okini3939 0:02c293160df3 75
okini3939 0:02c293160df3 76
okini3939 0:02c293160df3 77 /**
okini3939 0:02c293160df3 78 * Write a state of the mouse
okini3939 0:02c293160df3 79 *
okini3939 0:02c293160df3 80 * @param x x-axis position
okini3939 0:02c293160df3 81 * @param y y-axis position
okini3939 0:02c293160df3 82 * @param buttons buttons state (first bit represents MOUSE_LEFT, second bit MOUSE_RIGHT and third bit MOUSE_MIDDLE)
okini3939 0:02c293160df3 83 * @param z wheel state (>0 to scroll down, <0 to scroll up)
okini3939 0:02c293160df3 84 * @returns true if there is no error, false otherwise
okini3939 0:02c293160df3 85 */
okini3939 0:02c293160df3 86 bool update(int16_t x, int16_t y, uint8_t buttons, int8_t z);
okini3939 0:02c293160df3 87
okini3939 0:02c293160df3 88
okini3939 0:02c293160df3 89 /**
okini3939 0:02c293160df3 90 * Move the cursor to (x, y)
okini3939 0:02c293160df3 91 *
okini3939 0:02c293160df3 92 * @param x x-axis position
okini3939 0:02c293160df3 93 * @param y y-axis position
okini3939 0:02c293160df3 94 * @returns true if there is no error, false otherwise
okini3939 0:02c293160df3 95 */
okini3939 0:02c293160df3 96 bool move(int16_t x, int16_t y);
okini3939 0:02c293160df3 97
okini3939 0:02c293160df3 98 /**
okini3939 0:02c293160df3 99 * Press one or several buttons
okini3939 0:02c293160df3 100 *
okini3939 0:02c293160df3 101 * @param button button state (ex: press(MOUSE_LEFT))
okini3939 0:02c293160df3 102 * @returns true if there is no error, false otherwise
okini3939 0:02c293160df3 103 */
okini3939 0:02c293160df3 104 bool press(uint8_t button);
okini3939 0:02c293160df3 105
okini3939 0:02c293160df3 106 /**
okini3939 0:02c293160df3 107 * Release one or several buttons
okini3939 0:02c293160df3 108 *
okini3939 0:02c293160df3 109 * @param button button state (ex: release(MOUSE_LEFT))
okini3939 0:02c293160df3 110 * @returns true if there is no error, false otherwise
okini3939 0:02c293160df3 111 */
okini3939 0:02c293160df3 112 bool release(uint8_t button);
okini3939 0:02c293160df3 113
okini3939 0:02c293160df3 114 /**
okini3939 0:02c293160df3 115 * Double click (MOUSE_LEFT)
okini3939 0:02c293160df3 116 *
okini3939 0:02c293160df3 117 * @returns true if there is no error, false otherwise
okini3939 0:02c293160df3 118 */
okini3939 0:02c293160df3 119 bool doubleClick();
okini3939 0:02c293160df3 120
okini3939 0:02c293160df3 121 /**
okini3939 0:02c293160df3 122 * Click
okini3939 0:02c293160df3 123 *
okini3939 0:02c293160df3 124 * @param button state of the buttons ( ex: clic(MOUSE_LEFT))
okini3939 0:02c293160df3 125 * @returns true if there is no error, false otherwise
okini3939 0:02c293160df3 126 */
okini3939 0:02c293160df3 127 bool click(uint8_t button);
okini3939 0:02c293160df3 128
okini3939 0:02c293160df3 129 /**
okini3939 0:02c293160df3 130 * Scrolling
okini3939 0:02c293160df3 131 *
okini3939 0:02c293160df3 132 * @param z value of the wheel (>0 to go down, <0 to go up)
okini3939 0:02c293160df3 133 * @returns true if there is no error, false otherwise
okini3939 0:02c293160df3 134 */
okini3939 0:02c293160df3 135 bool scroll(int8_t z);
okini3939 0:02c293160df3 136
okini3939 0:02c293160df3 137 /**
okini3939 0:02c293160df3 138 * To send a character defined by a modifier(CTRL, SHIFT, ALT) and the key
okini3939 0:02c293160df3 139 *
okini3939 0:02c293160df3 140 * @code
okini3939 0:02c293160df3 141 * //To send CTRL + s (save)
okini3939 0:02c293160df3 142 * keyboard.keyCode('s', KEY_CTRL);
okini3939 0:02c293160df3 143 * @endcode
okini3939 0:02c293160df3 144 *
okini3939 0:02c293160df3 145 * @param modifier bit 0: KEY_CTRL, bit 1: KEY_SHIFT, bit 2: KEY_ALT (default: 0)
okini3939 0:02c293160df3 146 * @param key character to send
okini3939 0:02c293160df3 147 * @returns true if there is no error, false otherwise
okini3939 0:02c293160df3 148 */
okini3939 0:02c293160df3 149 bool keyCode(uint8_t key, uint8_t modifier = 0);
okini3939 0:02c293160df3 150
okini3939 0:02c293160df3 151 /**
okini3939 0:02c293160df3 152 * Send a character
okini3939 0:02c293160df3 153 *
okini3939 0:02c293160df3 154 * @param c character to be sent
okini3939 0:02c293160df3 155 * @returns true if there is no error, false otherwise
okini3939 0:02c293160df3 156 */
okini3939 0:02c293160df3 157 virtual int _putc(int c);
okini3939 0:02c293160df3 158
okini3939 0:02c293160df3 159 /**
okini3939 0:02c293160df3 160 * Control media keys
okini3939 0:02c293160df3 161 *
okini3939 0:02c293160df3 162 * @param key media key pressed (KEY_NEXT_TRACK, KEY_PREVIOUS_TRACK, KEY_STOP, KEY_PLAY_PAUSE, KEY_MUTE, KEY_VOLUME_UP, KEY_VOLUME_DOWN)
okini3939 0:02c293160df3 163 * @returns true if there is no error, false otherwise
okini3939 0:02c293160df3 164 */
okini3939 0:02c293160df3 165 bool mediaControl(MEDIA_KEY key);
okini3939 0:02c293160df3 166
okini3939 0:02c293160df3 167 /*
okini3939 0:02c293160df3 168 * To define the report descriptor. Warning: this method has to store the length of the report descriptor in reportLength.
okini3939 0:02c293160df3 169 *
okini3939 0:02c293160df3 170 * @returns pointer to the report descriptor
okini3939 0:02c293160df3 171 */
okini3939 0:02c293160df3 172 virtual uint8_t * reportDesc();
okini3939 0:02c293160df3 173
okini3939 0:02c293160df3 174
okini3939 0:02c293160df3 175 private:
okini3939 0:02c293160df3 176 bool mouseWrite(int8_t x, int8_t y, uint8_t buttons, int8_t z);
okini3939 0:02c293160df3 177 MOUSE_TYPE mouse_type;
okini3939 0:02c293160df3 178 uint8_t button;
okini3939 0:02c293160df3 179 bool mouseSend(int8_t x, int8_t y, uint8_t buttons, int8_t z);
okini3939 0:02c293160df3 180
okini3939 0:02c293160df3 181 //dummy otherwise it doesn,t compile (we must define all methods of an abstract class)
okini3939 0:02c293160df3 182 virtual int _getc() { return -1;}
okini3939 0:02c293160df3 183 };
okini3939 0:02c293160df3 184
okini3939 0:02c293160df3 185 #endif