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.

Dependencies:   mbed

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:

/media/uploads/Elitism/slave_driver.jpg

Here is what the slave vector plotting tool looks like:

/media/uploads/Elitism/max32767vmappedresolution.jpg

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:

/media/uploads/Elitism/mbedslavehost.jpg

Committer:
Elitism
Date:
Thu Jun 14 08:55:57 2012 +0000
Revision:
0:9ccba0f17329
Child:
2:81bb99a2a231
Decent update to my previous entry, emulates the mouse,keyboard on using serial input from same computer or another.

Who changed what in which revision?

UserRevisionLine numberNew 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 0:9ccba0f17329 23
Elitism 0:9ccba0f17329 24 if (strcmp("Vector", pFields[0]) == 0) {
Elitism 0:9ccba0f17329 25 key_mouse.move(atoi(pFields[1]),atoi(pFields[2]));
Elitism 0:9ccba0f17329 26 pc.printf("Vector Issued\r\n");
Elitism 0:9ccba0f17329 27 }
Elitism 0:9ccba0f17329 28
Elitism 0:9ccba0f17329 29 if (strcmp("Click", pFields[0]) == 0) {
Elitism 0:9ccba0f17329 30 if (strcmp("LPress", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 31 key_mouse.press(MOUSE_LEFT);
Elitism 0:9ccba0f17329 32 }
Elitism 0:9ccba0f17329 33 if (strcmp("LRelease", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 34 key_mouse.release(MOUSE_LEFT);
Elitism 0:9ccba0f17329 35 }
Elitism 0:9ccba0f17329 36 if (strcmp("LClick", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 37 key_mouse.click(MOUSE_LEFT);
Elitism 0:9ccba0f17329 38 }
Elitism 0:9ccba0f17329 39 if (strcmp("LDClick", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 40 key_mouse.doubleClick();
Elitism 0:9ccba0f17329 41 }
Elitism 0:9ccba0f17329 42 if (strcmp("RPress", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 43 key_mouse.press(MOUSE_RIGHT);
Elitism 0:9ccba0f17329 44 }
Elitism 0:9ccba0f17329 45 if (strcmp("RRelease", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 46 key_mouse.release(MOUSE_RIGHT);
Elitism 0:9ccba0f17329 47 }
Elitism 0:9ccba0f17329 48 if (strcmp("RClick", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 49 key_mouse.click(MOUSE_RIGHT);
Elitism 0:9ccba0f17329 50 }
Elitism 0:9ccba0f17329 51 pc.printf("Click Issued\r\n");
Elitism 0:9ccba0f17329 52 }
Elitism 0:9ccba0f17329 53
Elitism 0:9ccba0f17329 54 if (strcmp("Type", pFields[0]) == 0) {
Elitism 0:9ccba0f17329 55 key_mouse.printf(pFields[1]);
Elitism 0:9ccba0f17329 56 pc.printf("Type Issued\r\n");
Elitism 0:9ccba0f17329 57 }
Elitism 0:9ccba0f17329 58
Elitism 0:9ccba0f17329 59 if (strcmp("Keyboard", pFields[0]) == 0) {
Elitism 0:9ccba0f17329 60 if (strcmp("Return", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 61 key_mouse.printf("\n");
Elitism 0:9ccba0f17329 62 }
Elitism 0:9ccba0f17329 63 if (strcmp("Backspace", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 64 key_mouse.printf("\b");
Elitism 0:9ccba0f17329 65 }
Elitism 0:9ccba0f17329 66 if (strcmp("Tab", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 67 key_mouse.printf("\t");
Elitism 0:9ccba0f17329 68 }
Elitism 0:9ccba0f17329 69 if (strcmp("Capslock", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 70 key_mouse.keyCode(KEY_CAPS_LOCK);
Elitism 0:9ccba0f17329 71 }
Elitism 0:9ccba0f17329 72 if (strcmp("FKey1", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 73 key_mouse.keyCode(KEY_F1);
Elitism 0:9ccba0f17329 74 }
Elitism 0:9ccba0f17329 75 if (strcmp("FKey2", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 76 key_mouse.keyCode(KEY_F2);
Elitism 0:9ccba0f17329 77 }
Elitism 0:9ccba0f17329 78 if (strcmp("FKey3", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 79 key_mouse.keyCode(KEY_F3);
Elitism 0:9ccba0f17329 80 }
Elitism 0:9ccba0f17329 81 if (strcmp("FKey4", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 82 key_mouse.keyCode(KEY_F4);
Elitism 0:9ccba0f17329 83 }
Elitism 0:9ccba0f17329 84 if (strcmp("FKey5", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 85 key_mouse.keyCode(KEY_F5);
Elitism 0:9ccba0f17329 86 }
Elitism 0:9ccba0f17329 87 if (strcmp("FKey6", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 88 key_mouse.keyCode(KEY_F6);
Elitism 0:9ccba0f17329 89 }
Elitism 0:9ccba0f17329 90 if (strcmp("FKey7", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 91 key_mouse.keyCode(KEY_F7);
Elitism 0:9ccba0f17329 92 }
Elitism 0:9ccba0f17329 93 if (strcmp("FKey8", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 94 key_mouse.keyCode(KEY_F8);
Elitism 0:9ccba0f17329 95 }
Elitism 0:9ccba0f17329 96 if (strcmp("FKey9", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 97 key_mouse.keyCode(KEY_F9);
Elitism 0:9ccba0f17329 98 }
Elitism 0:9ccba0f17329 99 if (strcmp("FKey10", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 100 key_mouse.keyCode(KEY_F10);
Elitism 0:9ccba0f17329 101 }
Elitism 0:9ccba0f17329 102 if (strcmp("FKey11", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 103 key_mouse.keyCode(KEY_F11);
Elitism 0:9ccba0f17329 104 }
Elitism 0:9ccba0f17329 105 if (strcmp("FKey12", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 106 key_mouse.keyCode(KEY_F12);
Elitism 0:9ccba0f17329 107 }
Elitism 0:9ccba0f17329 108 pc.printf("Keyboard Issued\r\n");
Elitism 0:9ccba0f17329 109 }
Elitism 0:9ccba0f17329 110
Elitism 0:9ccba0f17329 111 if (strcmp("Volume", pFields[0]) == 0) {
Elitism 0:9ccba0f17329 112 if (strcmp("Up", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 113 key_mouse.mediaControl(KEY_VOLUME_UP);
Elitism 0:9ccba0f17329 114 }
Elitism 0:9ccba0f17329 115 if (strcmp("Down", pFields[1]) == 0) {
Elitism 0:9ccba0f17329 116 key_mouse.mediaControl(KEY_VOLUME_DOWN);
Elitism 0:9ccba0f17329 117 }
Elitism 0:9ccba0f17329 118 pc.printf("Volume Issued\r\n");
Elitism 0:9ccba0f17329 119 }
Elitism 0:9ccba0f17329 120
Elitism 0:9ccba0f17329 121 if (strcmp("Scroll", pFields[0]) == 0) {
Elitism 0:9ccba0f17329 122 key_mouse.scroll(atoi(pFields[1]));
Elitism 0:9ccba0f17329 123 pc.printf("Scroll Issued\r\n");
Elitism 0:9ccba0f17329 124 }
Elitism 0:9ccba0f17329 125 }
Elitism 0:9ccba0f17329 126
Elitism 0:9ccba0f17329 127 int main(int argc, char* argv[]) {
Elitism 0:9ccba0f17329 128 pc.baud(9600);
Elitism 0:9ccba0f17329 129 char buf[256];
Elitism 0:9ccba0f17329 130
Elitism 0:9ccba0f17329 131 //List of avalable commands
Elitism 0:9ccba0f17329 132 //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 133 //Vector,1000,6000 <--Vectors can be anything you specify
Elitism 0:9ccba0f17329 134 //Click,LPress <--Holds the left mouse click down
Elitism 0:9ccba0f17329 135 //Click,LClick <--Clicks the left mouse button
Elitism 0:9ccba0f17329 136 //Click,LDClick <--Makes a left double click
Elitism 0:9ccba0f17329 137 //Click,LRelease <--Releases the left mouse button
Elitism 0:9ccba0f17329 138 //Click,RPress <--Holds the right mouse click down
Elitism 0:9ccba0f17329 139 //Click,RRelease <--Releases the left mouse button
Elitism 0:9ccba0f17329 140 //Click,RClick <--Clicks the right mouse button
Elitism 0:9ccba0f17329 141 //Click,RDClick <--Makes a right double click
Elitism 0:9ccba0f17329 142 //Scroll,10 <--Value can be anything you specify
Elitism 0:9ccba0f17329 143 //Scroll,-10 <--Value can be anything you specify
Elitism 0:9ccba0f17329 144 //Volume,Up <--Turns the system volume up 1 notch
Elitism 0:9ccba0f17329 145 //Volume,Down <--Turns the sstem volume down 1 notch
Elitism 0:9ccba0f17329 146 //Keyboard,Tab <--Emulates the system tab key
Elitism 0:9ccba0f17329 147 //Keyboard,Capslock <--Emulates the system capslock key
Elitism 0:9ccba0f17329 148 //Keyboard,Backspace <--Emulates the system backspace key
Elitism 0:9ccba0f17329 149 //Keyboard,Return <--Emulates the system enter key
Elitism 0:9ccba0f17329 150 //Keyboard,FKey1 <--Emulates the system F keys
Elitism 0:9ccba0f17329 151 //Keyboard,FKey2
Elitism 0:9ccba0f17329 152 //Keyboard,FKey3
Elitism 0:9ccba0f17329 153 //Keyboard,FKey4
Elitism 0:9ccba0f17329 154 //Keyboard,FKey5
Elitism 0:9ccba0f17329 155 //Keyboard,FKey6
Elitism 0:9ccba0f17329 156 //Keyboard,FKey7
Elitism 0:9ccba0f17329 157 //Keyboard,FKey8
Elitism 0:9ccba0f17329 158 //Keyboard,FKey9
Elitism 0:9ccba0f17329 159 //Keyboard,FKey10
Elitism 0:9ccba0f17329 160 //Keyboard,FKey11
Elitism 0:9ccba0f17329 161 //Keyboard,FKey12
Elitism 0:9ccba0f17329 162 while (1) {
Elitism 0:9ccba0f17329 163 pc.scanf("%s", buf);
Elitism 0:9ccba0f17329 164 ParseCommands(buf, pFields, NFIELDS, ",");
Elitism 0:9ccba0f17329 165 }
Elitism 0:9ccba0f17329 166 }