Updated many functions and bugs from the previous version. This program can emulate the keyboard and mouse on another computer using serial input [PC1-USB-MBED-USB-PC2] Control using serial input to keyboard/mouse output like a regular keyboard and mouse.
Fork of KeyboardMouseSerialV2 by
Here is the windows vb.net source code for communicating with the mbed device with my KeyboardMouseSerialV2 Repository Program
Slave Driver Application & Source Code: /media/uploads/Elitism/slave_driver.zip
Slave Vector Plotting Tool (For Vector Mapping to 32767 HID_XY-Maximum Resolution: /media/uploads/Elitism/slave_vector_plotting_tool.zip
The drivers: /media/uploads/Elitism/mbed_serial_drivers.zip
Here is what the slave driver application looks like:
Here is what the slave vector plotting tool looks like:
When mapping, make sure your mouse is at its maximum vector on x and y axis then map the offset to 32767 :)
The connection is as follows:
main.cpp@3:86c5c710cdb3, 2012-06-14 (annotated)
- Committer:
- Elitism
- Date:
- Thu Jun 14 21:15:35 2012 +0000
- Revision:
- 3:86c5c710cdb3
- Parent:
- 2:81bb99a2a231
Added DRCmbed comment
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Elitism | 0:9ccba0f17329 | 1 | #include "mbed.h" |
Elitism | 0:9ccba0f17329 | 2 | #include "USBMouseKeyboard.h" |
Elitism | 0:9ccba0f17329 | 3 | |
Elitism | 0:9ccba0f17329 | 4 | USBMouseKeyboard key_mouse; |
Elitism | 0:9ccba0f17329 | 5 | Serial pc(USBTX, USBRX); |
Elitism | 0:9ccba0f17329 | 6 | |
Elitism | 0:9ccba0f17329 | 7 | #define NFIELDS (6) |
Elitism | 0:9ccba0f17329 | 8 | char* pFields[NFIELDS]; |
Elitism | 0:9ccba0f17329 | 9 | |
Elitism | 0:9ccba0f17329 | 10 | void ParseCommands(char* Buffer, char** pFields, uint32_t numFields, char* delimiter) { |
Elitism | 0:9ccba0f17329 | 11 | char* pString = Buffer; |
Elitism | 0:9ccba0f17329 | 12 | char* pField; |
Elitism | 0:9ccba0f17329 | 13 | |
Elitism | 0:9ccba0f17329 | 14 | for (uint32_t i=0; i<numFields; i++) { |
Elitism | 0:9ccba0f17329 | 15 | pField = strtok(pString, delimiter); |
Elitism | 0:9ccba0f17329 | 16 | if (pField != NULL) { |
Elitism | 0:9ccba0f17329 | 17 | pFields[i] = pField; |
Elitism | 0:9ccba0f17329 | 18 | } else { |
Elitism | 0:9ccba0f17329 | 19 | pFields[i] = ""; |
Elitism | 0:9ccba0f17329 | 20 | } |
Elitism | 0:9ccba0f17329 | 21 | pString = NULL; //parse next |
Elitism | 0:9ccba0f17329 | 22 | } |
Elitism | 2:81bb99a2a231 | 23 | //Connection to device atempted |
Elitism | 2:81bb99a2a231 | 24 | if (strcmp("DRCmbed", pFields[0]) == 0) { |
Elitism | 2:81bb99a2a231 | 25 | pc.printf("mbeddevice\r\n");//Validate correct port query (For Ext Application Port Chcking) |
Elitism | 2:81bb99a2a231 | 26 | } |
Elitism | 2:81bb99a2a231 | 27 | //////////////////////////////// |
Elitism | 2:81bb99a2a231 | 28 | |
Elitism | 0:9ccba0f17329 | 29 | if (strcmp("Vector", pFields[0]) == 0) { |
Elitism | 0:9ccba0f17329 | 30 | key_mouse.move(atoi(pFields[1]),atoi(pFields[2])); |
Elitism | 0:9ccba0f17329 | 31 | pc.printf("Vector Issued\r\n"); |
Elitism | 0:9ccba0f17329 | 32 | } |
Elitism | 0:9ccba0f17329 | 33 | |
Elitism | 0:9ccba0f17329 | 34 | if (strcmp("Click", pFields[0]) == 0) { |
Elitism | 0:9ccba0f17329 | 35 | if (strcmp("LPress", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 36 | key_mouse.press(MOUSE_LEFT); |
Elitism | 0:9ccba0f17329 | 37 | } |
Elitism | 0:9ccba0f17329 | 38 | if (strcmp("LRelease", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 39 | key_mouse.release(MOUSE_LEFT); |
Elitism | 0:9ccba0f17329 | 40 | } |
Elitism | 0:9ccba0f17329 | 41 | if (strcmp("LClick", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 42 | key_mouse.click(MOUSE_LEFT); |
Elitism | 0:9ccba0f17329 | 43 | } |
Elitism | 0:9ccba0f17329 | 44 | if (strcmp("LDClick", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 45 | key_mouse.doubleClick(); |
Elitism | 0:9ccba0f17329 | 46 | } |
Elitism | 0:9ccba0f17329 | 47 | if (strcmp("RPress", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 48 | key_mouse.press(MOUSE_RIGHT); |
Elitism | 0:9ccba0f17329 | 49 | } |
Elitism | 0:9ccba0f17329 | 50 | if (strcmp("RRelease", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 51 | key_mouse.release(MOUSE_RIGHT); |
Elitism | 0:9ccba0f17329 | 52 | } |
Elitism | 0:9ccba0f17329 | 53 | if (strcmp("RClick", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 54 | key_mouse.click(MOUSE_RIGHT); |
Elitism | 0:9ccba0f17329 | 55 | } |
Elitism | 0:9ccba0f17329 | 56 | pc.printf("Click Issued\r\n"); |
Elitism | 0:9ccba0f17329 | 57 | } |
Elitism | 0:9ccba0f17329 | 58 | |
Elitism | 0:9ccba0f17329 | 59 | if (strcmp("Type", pFields[0]) == 0) { |
Elitism | 0:9ccba0f17329 | 60 | key_mouse.printf(pFields[1]); |
Elitism | 0:9ccba0f17329 | 61 | pc.printf("Type Issued\r\n"); |
Elitism | 0:9ccba0f17329 | 62 | } |
Elitism | 0:9ccba0f17329 | 63 | |
Elitism | 0:9ccba0f17329 | 64 | if (strcmp("Keyboard", pFields[0]) == 0) { |
Elitism | 0:9ccba0f17329 | 65 | if (strcmp("Return", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 66 | key_mouse.printf("\n"); |
Elitism | 0:9ccba0f17329 | 67 | } |
Elitism | 0:9ccba0f17329 | 68 | if (strcmp("Backspace", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 69 | key_mouse.printf("\b"); |
Elitism | 0:9ccba0f17329 | 70 | } |
Elitism | 0:9ccba0f17329 | 71 | if (strcmp("Tab", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 72 | key_mouse.printf("\t"); |
Elitism | 0:9ccba0f17329 | 73 | } |
Elitism | 0:9ccba0f17329 | 74 | if (strcmp("Capslock", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 75 | key_mouse.keyCode(KEY_CAPS_LOCK); |
Elitism | 0:9ccba0f17329 | 76 | } |
Elitism | 0:9ccba0f17329 | 77 | if (strcmp("FKey1", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 78 | key_mouse.keyCode(KEY_F1); |
Elitism | 0:9ccba0f17329 | 79 | } |
Elitism | 0:9ccba0f17329 | 80 | if (strcmp("FKey2", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 81 | key_mouse.keyCode(KEY_F2); |
Elitism | 0:9ccba0f17329 | 82 | } |
Elitism | 0:9ccba0f17329 | 83 | if (strcmp("FKey3", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 84 | key_mouse.keyCode(KEY_F3); |
Elitism | 0:9ccba0f17329 | 85 | } |
Elitism | 0:9ccba0f17329 | 86 | if (strcmp("FKey4", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 87 | key_mouse.keyCode(KEY_F4); |
Elitism | 0:9ccba0f17329 | 88 | } |
Elitism | 0:9ccba0f17329 | 89 | if (strcmp("FKey5", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 90 | key_mouse.keyCode(KEY_F5); |
Elitism | 0:9ccba0f17329 | 91 | } |
Elitism | 0:9ccba0f17329 | 92 | if (strcmp("FKey6", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 93 | key_mouse.keyCode(KEY_F6); |
Elitism | 0:9ccba0f17329 | 94 | } |
Elitism | 0:9ccba0f17329 | 95 | if (strcmp("FKey7", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 96 | key_mouse.keyCode(KEY_F7); |
Elitism | 0:9ccba0f17329 | 97 | } |
Elitism | 0:9ccba0f17329 | 98 | if (strcmp("FKey8", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 99 | key_mouse.keyCode(KEY_F8); |
Elitism | 0:9ccba0f17329 | 100 | } |
Elitism | 0:9ccba0f17329 | 101 | if (strcmp("FKey9", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 102 | key_mouse.keyCode(KEY_F9); |
Elitism | 0:9ccba0f17329 | 103 | } |
Elitism | 0:9ccba0f17329 | 104 | if (strcmp("FKey10", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 105 | key_mouse.keyCode(KEY_F10); |
Elitism | 0:9ccba0f17329 | 106 | } |
Elitism | 0:9ccba0f17329 | 107 | if (strcmp("FKey11", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 108 | key_mouse.keyCode(KEY_F11); |
Elitism | 0:9ccba0f17329 | 109 | } |
Elitism | 0:9ccba0f17329 | 110 | if (strcmp("FKey12", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 111 | key_mouse.keyCode(KEY_F12); |
Elitism | 0:9ccba0f17329 | 112 | } |
Elitism | 0:9ccba0f17329 | 113 | pc.printf("Keyboard Issued\r\n"); |
Elitism | 0:9ccba0f17329 | 114 | } |
Elitism | 0:9ccba0f17329 | 115 | |
Elitism | 0:9ccba0f17329 | 116 | if (strcmp("Volume", pFields[0]) == 0) { |
Elitism | 0:9ccba0f17329 | 117 | if (strcmp("Up", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 118 | key_mouse.mediaControl(KEY_VOLUME_UP); |
Elitism | 0:9ccba0f17329 | 119 | } |
Elitism | 0:9ccba0f17329 | 120 | if (strcmp("Down", pFields[1]) == 0) { |
Elitism | 0:9ccba0f17329 | 121 | key_mouse.mediaControl(KEY_VOLUME_DOWN); |
Elitism | 0:9ccba0f17329 | 122 | } |
Elitism | 0:9ccba0f17329 | 123 | pc.printf("Volume Issued\r\n"); |
Elitism | 0:9ccba0f17329 | 124 | } |
Elitism | 0:9ccba0f17329 | 125 | |
Elitism | 0:9ccba0f17329 | 126 | if (strcmp("Scroll", pFields[0]) == 0) { |
Elitism | 0:9ccba0f17329 | 127 | key_mouse.scroll(atoi(pFields[1])); |
Elitism | 0:9ccba0f17329 | 128 | pc.printf("Scroll Issued\r\n"); |
Elitism | 0:9ccba0f17329 | 129 | } |
Elitism | 0:9ccba0f17329 | 130 | } |
Elitism | 0:9ccba0f17329 | 131 | |
Elitism | 0:9ccba0f17329 | 132 | int main(int argc, char* argv[]) { |
Elitism | 0:9ccba0f17329 | 133 | pc.baud(9600); |
Elitism | 0:9ccba0f17329 | 134 | char buf[256]; |
Elitism | 0:9ccba0f17329 | 135 | |
Elitism | 0:9ccba0f17329 | 136 | //List of avalable commands |
Elitism | 3:86c5c710cdb3 | 137 | //DRCmbed <-- Sends an auto response back to the computer host computer (Ext app com port validation event) |
Elitism | 0:9ccba0f17329 | 138 | //Type,Hello World <--Needs fix for spaces but can handle text the length how big the buffer is -1 = 255 bufferable characters |
Elitism | 0:9ccba0f17329 | 139 | //Vector,1000,6000 <--Vectors can be anything you specify |
Elitism | 0:9ccba0f17329 | 140 | //Click,LPress <--Holds the left mouse click down |
Elitism | 0:9ccba0f17329 | 141 | //Click,LClick <--Clicks the left mouse button |
Elitism | 0:9ccba0f17329 | 142 | //Click,LDClick <--Makes a left double click |
Elitism | 0:9ccba0f17329 | 143 | //Click,LRelease <--Releases the left mouse button |
Elitism | 0:9ccba0f17329 | 144 | //Click,RPress <--Holds the right mouse click down |
Elitism | 0:9ccba0f17329 | 145 | //Click,RRelease <--Releases the left mouse button |
Elitism | 0:9ccba0f17329 | 146 | //Click,RClick <--Clicks the right mouse button |
Elitism | 0:9ccba0f17329 | 147 | //Click,RDClick <--Makes a right double click |
Elitism | 0:9ccba0f17329 | 148 | //Scroll,10 <--Value can be anything you specify |
Elitism | 0:9ccba0f17329 | 149 | //Scroll,-10 <--Value can be anything you specify |
Elitism | 0:9ccba0f17329 | 150 | //Volume,Up <--Turns the system volume up 1 notch |
Elitism | 0:9ccba0f17329 | 151 | //Volume,Down <--Turns the sstem volume down 1 notch |
Elitism | 0:9ccba0f17329 | 152 | //Keyboard,Tab <--Emulates the system tab key |
Elitism | 0:9ccba0f17329 | 153 | //Keyboard,Capslock <--Emulates the system capslock key |
Elitism | 0:9ccba0f17329 | 154 | //Keyboard,Backspace <--Emulates the system backspace key |
Elitism | 0:9ccba0f17329 | 155 | //Keyboard,Return <--Emulates the system enter key |
Elitism | 0:9ccba0f17329 | 156 | //Keyboard,FKey1 <--Emulates the system F keys |
Elitism | 0:9ccba0f17329 | 157 | //Keyboard,FKey2 |
Elitism | 0:9ccba0f17329 | 158 | //Keyboard,FKey3 |
Elitism | 0:9ccba0f17329 | 159 | //Keyboard,FKey4 |
Elitism | 0:9ccba0f17329 | 160 | //Keyboard,FKey5 |
Elitism | 0:9ccba0f17329 | 161 | //Keyboard,FKey6 |
Elitism | 0:9ccba0f17329 | 162 | //Keyboard,FKey7 |
Elitism | 0:9ccba0f17329 | 163 | //Keyboard,FKey8 |
Elitism | 0:9ccba0f17329 | 164 | //Keyboard,FKey9 |
Elitism | 0:9ccba0f17329 | 165 | //Keyboard,FKey10 |
Elitism | 0:9ccba0f17329 | 166 | //Keyboard,FKey11 |
Elitism | 0:9ccba0f17329 | 167 | //Keyboard,FKey12 |
Elitism | 0:9ccba0f17329 | 168 | while (1) { |
Elitism | 0:9ccba0f17329 | 169 | pc.scanf("%s", buf); |
Elitism | 0:9ccba0f17329 | 170 | ParseCommands(buf, pFields, NFIELDS, ","); |
Elitism | 0:9ccba0f17329 | 171 | } |
Elitism | 0:9ccba0f17329 | 172 | } |