daniel moser
/
program1
main.cpp@0:849cb182c518, 2010-01-28 (annotated)
- Committer:
- dancanada
- Date:
- Thu Jan 28 00:13:04 2010 +0000
- Revision:
- 0:849cb182c518
Who changed what in which revision?
User | Revision | Line number | New 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 | } |