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 21:15:35 2012 +0000
Revision:
3:86c5c710cdb3
Parent:
2:81bb99a2a231
Added DRCmbed comment

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 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 }