Committer:
dancanada
Date:
Thu Jan 28 00:13:04 2010 +0000
Revision:
0:849cb182c518

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dancanada 0:849cb182c518 1 #include "mbed.h"
dancanada 0:849cb182c518 2 #include <string>
dancanada 0:849cb182c518 3
dancanada 0:849cb182c518 4 DigitalOut myled1(LED1);
dancanada 0:849cb182c518 5 DigitalOut myled2(LED2);
dancanada 0:849cb182c518 6 DigitalOut myled3(LED3);
dancanada 0:849cb182c518 7 DigitalOut myled4(LED4);
dancanada 0:849cb182c518 8
dancanada 0:849cb182c518 9 LocalFileSystem local("local"); // Create the local filesystem under the name "local"
dancanada 0:849cb182c518 10
dancanada 0:849cb182c518 11 //function protypes
dancanada 0:849cb182c518 12 char encrypt(char c);
dancanada 0:849cb182c518 13 void flashLights();
dancanada 0:849cb182c518 14
dancanada 0:849cb182c518 15 int main() {
dancanada 0:849cb182c518 16 flashLights();
dancanada 0:849cb182c518 17 //print to a file saved on the mbed mass storage device
dancanada 0:849cb182c518 18 FILE *fp = fopen("/local/out.txt", "w"); // Open "out.txt" on the local file system for writing
dancanada 0:849cb182c518 19 fprintf(fp, "Hello text doc World!");
dancanada 0:849cb182c518 20 fclose(fp);
dancanada 0:849cb182c518 21
dancanada 0:849cb182c518 22 //print some more
dancanada 0:849cb182c518 23 fp = fopen("/local/out.txt", "a"); // Open "out.txt" on the local file system for writing, appending
dancanada 0:849cb182c518 24 fprintf(fp, " log begins here: /n");
dancanada 0:849cb182c518 25 fclose(fp);
dancanada 0:849cb182c518 26
dancanada 0:849cb182c518 27 //print to the serial port, that requres an extra driver for xp
dancanada 0:849cb182c518 28 Serial pc(USBTX, USBRX); // tx, rx
dancanada 0:849cb182c518 29 pc.printf("Hello serial comms World!\n");
dancanada 0:849cb182c518 30
dancanada 0:849cb182c518 31 bool commandIncoming=false; //using a singal char to then expect a command char
dancanada 0:849cb182c518 32 bool echoOn=true; //echo will eventually be output to the other USB port, and will be renamed pass through
dancanada 0:849cb182c518 33 bool loggingOn=true; //log all the chars pressed to a text file
dancanada 0:849cb182c518 34 bool encrypting=false; //encrypting using the one time pad - exclude output chars * and others(todo: make a output map)
dancanada 0:849cb182c518 35 char cOut; //the char being echod (or put out to the PC), is the cyphertext if encrypting is true
dancanada 0:849cb182c518 36 char c; //the char coming in from the keyboard
dancanada 0:849cb182c518 37
dancanada 0:849cb182c518 38 while (1) {
dancanada 0:849cb182c518 39
dancanada 0:849cb182c518 40 //get a char from the keyboard (USB input)
dancanada 0:849cb182c518 41 c = pc.getc();
dancanada 0:849cb182c518 42
dancanada 0:849cb182c518 43 if (loggingOn) {
dancanada 0:849cb182c518 44 fp = fopen("/local/out.txt", "a"); // Open "out.txt" on the local file system for writing, appending
dancanada 0:849cb182c518 45 //todo: find a nicer way of doing this
dancanada 0:849cb182c518 46 string s;
dancanada 0:849cb182c518 47 s = c;
dancanada 0:849cb182c518 48 fprintf(fp,"%s",s);
dancanada 0:849cb182c518 49 fclose(fp);
dancanada 0:849cb182c518 50 }
dancanada 0:849cb182c518 51 //responsible for the output (at the moment to the serial comms, but eventually to the PC (USB output))
dancanada 0:849cb182c518 52 if (c!='*'&&!commandIncoming && echoOn) {
dancanada 0:849cb182c518 53 if (encrypting) {
dancanada 0:849cb182c518 54 cOut = encrypt(c);
dancanada 0:849cb182c518 55 } else {
dancanada 0:849cb182c518 56 cOut = c;
dancanada 0:849cb182c518 57 }
dancanada 0:849cb182c518 58 pc.putc(cOut);
dancanada 0:849cb182c518 59 }
dancanada 0:849cb182c518 60 if (commandIncoming) {
dancanada 0:849cb182c518 61 commandIncoming = false;
dancanada 0:849cb182c518 62 //password recall
dancanada 0:849cb182c518 63 if (c=='p') {
dancanada 0:849cb182c518 64 pc.puts("default password");
dancanada 0:849cb182c518 65 }
dancanada 0:849cb182c518 66 //username recall
dancanada 0:849cb182c518 67 if (c=='u') {
dancanada 0:849cb182c518 68 pc.puts("default username");
dancanada 0:849cb182c518 69 }
dancanada 0:849cb182c518 70 //echo on/ off - debug (should be on all the time)
dancanada 0:849cb182c518 71 if (c=='e') {
dancanada 0:849cb182c518 72 if (echoOn==true) {
dancanada 0:849cb182c518 73 pc.puts("key echo off");
dancanada 0:849cb182c518 74 echoOn=false;
dancanada 0:849cb182c518 75 myled1 = 1;
dancanada 0:849cb182c518 76 } else {
dancanada 0:849cb182c518 77 //when passing through myled1 is dim
dancanada 0:849cb182c518 78 pc.puts("key echo on");
dancanada 0:849cb182c518 79 echoOn=true;
dancanada 0:849cb182c518 80 myled1 = 0;
dancanada 0:849cb182c518 81 }
dancanada 0:849cb182c518 82 }
dancanada 0:849cb182c518 83 //dump keylogged data (paste anywhere functionality)
dancanada 0:849cb182c518 84 if (c=='d') {
dancanada 0:849cb182c518 85 pc.puts("the data");
dancanada 0:849cb182c518 86 //recall the last x keys pressed or pull data from the txt file
dancanada 0:849cb182c518 87 }
dancanada 0:849cb182c518 88 if (c=='l') {
dancanada 0:849cb182c518 89 if (loggingOn==true) {
dancanada 0:849cb182c518 90 pc.puts("key logging off");
dancanada 0:849cb182c518 91 loggingOn=false;
dancanada 0:849cb182c518 92 //when loggingOn myled1 is dim
dancanada 0:849cb182c518 93 myled2 = 1;
dancanada 0:849cb182c518 94 } else {
dancanada 0:849cb182c518 95 pc.puts("key logging on");
dancanada 0:849cb182c518 96 loggingOn=true;
dancanada 0:849cb182c518 97 myled2 = 0;
dancanada 0:849cb182c518 98 }
dancanada 0:849cb182c518 99 }
dancanada 0:849cb182c518 100 if (c=='c') {
dancanada 0:849cb182c518 101 if (encrypting==true) {
dancanada 0:849cb182c518 102 pc.puts("exiting the encryption mode");
dancanada 0:849cb182c518 103 encrypting = false;
dancanada 0:849cb182c518 104 //when encrypting myled3 is bright
dancanada 0:849cb182c518 105 myled3 = 0;
dancanada 0:849cb182c518 106 } else {
dancanada 0:849cb182c518 107 pc.puts("entering the encryption mode - command keys are the same as before");
dancanada 0:849cb182c518 108 encrypting = true;
dancanada 0:849cb182c518 109 myled3 = 1;
dancanada 0:849cb182c518 110 }
dancanada 0:849cb182c518 111 }
dancanada 0:849cb182c518 112 }
dancanada 0:849cb182c518 113 //if the key is the start of a command, read the next key as a command (ie *p means output password)
dancanada 0:849cb182c518 114 if (c== '*') {
dancanada 0:849cb182c518 115 commandIncoming = true;
dancanada 0:849cb182c518 116 }
dancanada 0:849cb182c518 117 }
dancanada 0:849cb182c518 118 }
dancanada 0:849cb182c518 119
dancanada 0:849cb182c518 120 //eventually have this a one time pad, drawing chars from another file,
dancanada 0:849cb182c518 121 //deleting them as they go, and somehow having them not readable while in storage
dancanada 0:849cb182c518 122 char encrypt(char c) {
dancanada 0:849cb182c518 123 return (c+1);
dancanada 0:849cb182c518 124 }
dancanada 0:849cb182c518 125
dancanada 0:849cb182c518 126 void flashLights() {
dancanada 0:849cb182c518 127 //blink some lights
dancanada 0:849cb182c518 128 myled1 = 1;
dancanada 0:849cb182c518 129 wait(0.2);
dancanada 0:849cb182c518 130 myled1 = 0;
dancanada 0:849cb182c518 131 wait(0.2);
dancanada 0:849cb182c518 132
dancanada 0:849cb182c518 133 myled1 = 1;
dancanada 0:849cb182c518 134 myled2 = 1;
dancanada 0:849cb182c518 135 myled3 = 1;
dancanada 0:849cb182c518 136 myled4 = 1;
dancanada 0:849cb182c518 137
dancanada 0:849cb182c518 138 wait(0.2);
dancanada 0:849cb182c518 139 myled1 = 0;
dancanada 0:849cb182c518 140 myled2 = 0;
dancanada 0:849cb182c518 141 myled3 = 0;
dancanada 0:849cb182c518 142 myled4 = 0;
dancanada 0:849cb182c518 143 }