Final Project for ECE 4180. Morse Code Encoder and Transmission

Dependencies:   4DGL-uLCD-SE EthernetInterface mbed-rtos mbed

Committer:
doubster
Date:
Tue Dec 08 09:15:15 2015 +0000
Revision:
0:50e84db663a3
Final Push for Morse Code Encoder

Who changed what in which revision?

UserRevisionLine numberNew contents of line
doubster 0:50e84db663a3 1 #include "mbed.h"
doubster 0:50e84db663a3 2 #include "uLCD_4DGL.h"
doubster 0:50e84db663a3 3 #include <time.h>
doubster 0:50e84db663a3 4 #include <string>
doubster 0:50e84db663a3 5 #include "EthernetInterface.h"
doubster 0:50e84db663a3 6
doubster 0:50e84db663a3 7 // Definitions for networking
doubster 0:50e84db663a3 8 const char* ECHO_SERVER_ADDRESS = "10.0.0.32";
doubster 0:50e84db663a3 9 const int ECHO_SERVER_PORT = 7;
doubster 0:50e84db663a3 10
doubster 0:50e84db663a3 11 // uLCD
doubster 0:50e84db663a3 12 uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
doubster 0:50e84db663a3 13
doubster 0:50e84db663a3 14 // Mbed Leds
doubster 0:50e84db663a3 15 DigitalOut myled1(LED1);
doubster 0:50e84db663a3 16 DigitalOut myled2(LED2);
doubster 0:50e84db663a3 17 DigitalOut myled3(LED3);
doubster 0:50e84db663a3 18 DigitalOut myled4(LED4);
doubster 0:50e84db663a3 19
doubster 0:50e84db663a3 20 // Push Buttons
doubster 0:50e84db663a3 21 DigitalIn pb1(p23);
doubster 0:50e84db663a3 22 DigitalIn pb2(p22);
doubster 0:50e84db663a3 23 DigitalIn pb3(p21);
doubster 0:50e84db663a3 24
doubster 0:50e84db663a3 25 // Function declarations
doubster 0:50e84db663a3 26 // Screen Declarations
doubster 0:50e84db663a3 27 void StartScreen();
doubster 0:50e84db663a3 28 void ClientServerScreen();
doubster 0:50e84db663a3 29 void HelpScreen();
doubster 0:50e84db663a3 30 void InputScreen();
doubster 0:50e84db663a3 31 void EncryptionScreen();
doubster 0:50e84db663a3 32 void DecryptionScreen();
doubster 0:50e84db663a3 33 void CaesarShiftScreen();
doubster 0:50e84db663a3 34 // Actual Functions
doubster 0:50e84db663a3 35 string MorseCode(string a);
doubster 0:50e84db663a3 36
doubster 0:50e84db663a3 37 // UDP Transmission Functions
doubster 0:50e84db663a3 38 void Client(string message);
doubster 0:50e84db663a3 39 string Server();
doubster 0:50e84db663a3 40 // Cipher declarations
doubster 0:50e84db663a3 41 // opt => 0 Encrypt opt => 1 Decrypt
doubster 0:50e84db663a3 42 string CaesarCipher(string word,int opt, int shift);
doubster 0:50e84db663a3 43 string PolybiusSquareCipher(string a,int opt);
doubster 0:50e84db663a3 44 string PolybiusTableTranslation(char letter);
doubster 0:50e84db663a3 45 string PolybiusTableLookup(string number);
doubster 0:50e84db663a3 46
doubster 0:50e84db663a3 47 int main() {
doubster 0:50e84db663a3 48
doubster 0:50e84db663a3 49 // Create pullups
doubster 0:50e84db663a3 50 pb1.mode(PullUp);
doubster 0:50e84db663a3 51 pb2.mode(PullUp);
doubster 0:50e84db663a3 52 pb3.mode(PullUp);
doubster 0:50e84db663a3 53
doubster 0:50e84db663a3 54 // Constants
doubster 0:50e84db663a3 55 time_t start,end;
doubster 0:50e84db663a3 56 double dif;
doubster 0:50e84db663a3 57 string morseinput = "";
doubster 0:50e84db663a3 58 string morsetranslation = "";
doubster 0:50e84db663a3 59 string cipheredinput;
doubster 0:50e84db663a3 60 string morsereceived = "";
doubster 0:50e84db663a3 61 string cipherreceived = "";
doubster 0:50e84db663a3 62 int clientserver;
doubster 0:50e84db663a3 63 int firsttime = 0;
doubster 0:50e84db663a3 64 int firsttimeserver = 0;
doubster 0:50e84db663a3 65 string chosencipher = "";
doubster 0:50e84db663a3 66 int shiftvalue = 0;
doubster 0:50e84db663a3 67 bool inserting = true;
doubster 0:50e84db663a3 68 EthernetInterface ethclient;
doubster 0:50e84db663a3 69 EthernetInterface ethserver;
doubster 0:50e84db663a3 70 const char * IPaddress = "10.0.0.32"; // 10.10.0.65
doubster 0:50e84db663a3 71 const char * NetworkMask = "255.255.255.0";
doubster 0:50e84db663a3 72 const char * Gateway = "10.0.0.1"; // 10.10.0.1
doubster 0:50e84db663a3 73
doubster 0:50e84db663a3 74 // Welcome Screen
doubster 0:50e84db663a3 75 StartScreen();
doubster 0:50e84db663a3 76
doubster 0:50e84db663a3 77 // pb1 => up
doubster 0:50e84db663a3 78 // pb2 => down
doubster 0:50e84db663a3 79 // pb3 => right
doubster 0:50e84db663a3 80 // 0 - Client
doubster 0:50e84db663a3 81 // 1 - Server
doubster 0:50e84db663a3 82 while(true) // Infinite Loop. Restart at ClientServerScreen.
doubster 0:50e84db663a3 83 {
doubster 0:50e84db663a3 84 morseinput = "";
doubster 0:50e84db663a3 85 morsetranslation = "";
doubster 0:50e84db663a3 86 morsereceived = "";
doubster 0:50e84db663a3 87 cipherreceived = "";
doubster 0:50e84db663a3 88 clientserver = 0;
doubster 0:50e84db663a3 89 uLCD.cls();
doubster 0:50e84db663a3 90 ClientServerScreen();
doubster 0:50e84db663a3 91 shiftvalue = 0;
doubster 0:50e84db663a3 92 while(pb2 && pb1)
doubster 0:50e84db663a3 93 {
doubster 0:50e84db663a3 94 }
doubster 0:50e84db663a3 95
doubster 0:50e84db663a3 96 if(!pb1) // pb1 was pressed, do Client Network
doubster 0:50e84db663a3 97 {
doubster 0:50e84db663a3 98 clientserver = 0;
doubster 0:50e84db663a3 99 }
doubster 0:50e84db663a3 100 else if(!pb2)
doubster 0:50e84db663a3 101 {
doubster 0:50e84db663a3 102 clientserver = 1; // pb2 was pressed, do Server Network
doubster 0:50e84db663a3 103 }
doubster 0:50e84db663a3 104
doubster 0:50e84db663a3 105 if(clientserver == 0)
doubster 0:50e84db663a3 106 {
doubster 0:50e84db663a3 107 uLCD.cls();
doubster 0:50e84db663a3 108 if(firsttime==0)
doubster 0:50e84db663a3 109 {
doubster 0:50e84db663a3 110 HelpScreen();
doubster 0:50e84db663a3 111 }
doubster 0:50e84db663a3 112 uLCD.cls();
doubster 0:50e84db663a3 113 InputScreen();
doubster 0:50e84db663a3 114 // Input Morse Code below. pb1 to input.
doubster 0:50e84db663a3 115 // pb2 to move to the next step
doubster 0:50e84db663a3 116 start = 0;
doubster 0:50e84db663a3 117 end = 0;
doubster 0:50e84db663a3 118 while(pb3)
doubster 0:50e84db663a3 119 {
doubster 0:50e84db663a3 120
doubster 0:50e84db663a3 121 if(!pb1) // Means a dot was inserted
doubster 0:50e84db663a3 122 {
doubster 0:50e84db663a3 123 while(!pb1) // Need to wait until the button is released
doubster 0:50e84db663a3 124 {
doubster 0:50e84db663a3 125 }
doubster 0:50e84db663a3 126 morseinput.append(".");
doubster 0:50e84db663a3 127 inserting = true;
doubster 0:50e84db663a3 128 time(&start);
doubster 0:50e84db663a3 129 }
doubster 0:50e84db663a3 130 else if(!pb2)
doubster 0:50e84db663a3 131 {
doubster 0:50e84db663a3 132 while(!pb2) // Need to wait till release
doubster 0:50e84db663a3 133 {
doubster 0:50e84db663a3 134 }
doubster 0:50e84db663a3 135 morseinput.append("-");
doubster 0:50e84db663a3 136 inserting = true;
doubster 0:50e84db663a3 137 time(&start);
doubster 0:50e84db663a3 138 }
doubster 0:50e84db663a3 139
doubster 0:50e84db663a3 140 if(start !=0.0)
doubster 0:50e84db663a3 141 {
doubster 0:50e84db663a3 142 time(&end);
doubster 0:50e84db663a3 143 dif = difftime(end,start);
doubster 0:50e84db663a3 144 if(dif>1)
doubster 0:50e84db663a3 145 {
doubster 0:50e84db663a3 146 string e = MorseCode(morseinput);
doubster 0:50e84db663a3 147 if(e!="error")
doubster 0:50e84db663a3 148 {
doubster 0:50e84db663a3 149 morsetranslation.append(e);
doubster 0:50e84db663a3 150 uLCD.printf("%s",e);
doubster 0:50e84db663a3 151 }
doubster 0:50e84db663a3 152 start = 0;
doubster 0:50e84db663a3 153 end = 0;
doubster 0:50e84db663a3 154 morseinput = "";
doubster 0:50e84db663a3 155 }
doubster 0:50e84db663a3 156 }
doubster 0:50e84db663a3 157 }
doubster 0:50e84db663a3 158
doubster 0:50e84db663a3 159 uLCD.cls();
doubster 0:50e84db663a3 160 EncryptionScreen();
doubster 0:50e84db663a3 161
doubster 0:50e84db663a3 162 while(pb2 && pb1 && pb3)
doubster 0:50e84db663a3 163 {
doubster 0:50e84db663a3 164 }
doubster 0:50e84db663a3 165
doubster 0:50e84db663a3 166 if(!pb1) // pb1 was pressed, do caesar cipher
doubster 0:50e84db663a3 167 {
doubster 0:50e84db663a3 168 uLCD.cls();
doubster 0:50e84db663a3 169 CaesarShiftScreen();
doubster 0:50e84db663a3 170 shiftvalue = 0;
doubster 0:50e84db663a3 171 uLCD.locate(0,4);
doubster 0:50e84db663a3 172 uLCD.printf("%02d",shiftvalue);
doubster 0:50e84db663a3 173 while(pb3)
doubster 0:50e84db663a3 174 {
doubster 0:50e84db663a3 175 if(!pb1) // Means go up one value
doubster 0:50e84db663a3 176 {
doubster 0:50e84db663a3 177 while(!pb1) // Need to wait until the button is released
doubster 0:50e84db663a3 178 {
doubster 0:50e84db663a3 179 }
doubster 0:50e84db663a3 180 shiftvalue = shiftvalue + 1;
doubster 0:50e84db663a3 181 if(shiftvalue>25)
doubster 0:50e84db663a3 182 {
doubster 0:50e84db663a3 183 shiftvalue = 25;
doubster 0:50e84db663a3 184 }
doubster 0:50e84db663a3 185 uLCD.locate(0,4);
doubster 0:50e84db663a3 186 uLCD.printf("%02d",shiftvalue);
doubster 0:50e84db663a3 187 }
doubster 0:50e84db663a3 188 if(!pb2) // Means go up one value
doubster 0:50e84db663a3 189 {
doubster 0:50e84db663a3 190 while(!pb2) // Need to wait until the button is released
doubster 0:50e84db663a3 191 {
doubster 0:50e84db663a3 192 }
doubster 0:50e84db663a3 193 shiftvalue = shiftvalue - 1;
doubster 0:50e84db663a3 194 if(shiftvalue<0)
doubster 0:50e84db663a3 195 {
doubster 0:50e84db663a3 196 shiftvalue = 0;
doubster 0:50e84db663a3 197 }
doubster 0:50e84db663a3 198 uLCD.locate(0,4);
doubster 0:50e84db663a3 199 uLCD.printf("%02d",shiftvalue);
doubster 0:50e84db663a3 200 }
doubster 0:50e84db663a3 201 }
doubster 0:50e84db663a3 202 cipheredinput = CaesarCipher(morsetranslation,0,shiftvalue);
doubster 0:50e84db663a3 203 chosencipher = "Caesar Cipher";
doubster 0:50e84db663a3 204 }
doubster 0:50e84db663a3 205 else if(!pb2) // pb2 was pressed, do Polybius Square cipher
doubster 0:50e84db663a3 206 {
doubster 0:50e84db663a3 207 cipheredinput = PolybiusSquareCipher(morsetranslation,0);
doubster 0:50e84db663a3 208 chosencipher = "Polybius Sqre";
doubster 0:50e84db663a3 209 }
doubster 0:50e84db663a3 210 else if(!pb3) // No Cipher
doubster 0:50e84db663a3 211 {
doubster 0:50e84db663a3 212 cipheredinput = morsetranslation;
doubster 0:50e84db663a3 213 chosencipher = "No Cipher";
doubster 0:50e84db663a3 214 }
doubster 0:50e84db663a3 215 wait(2);
doubster 0:50e84db663a3 216
doubster 0:50e84db663a3 217 // Once the morse input comes in through here.
doubster 0:50e84db663a3 218 // Tell the user that we are about to send it all.
doubster 0:50e84db663a3 219 uLCD.cls();
doubster 0:50e84db663a3 220 uLCD.printf("%s\n",chosencipher);
doubster 0:50e84db663a3 221 uLCD.printf("Sending Value\n\n");
doubster 0:50e84db663a3 222 uLCD.printf("\n%s\n",morsetranslation);
doubster 0:50e84db663a3 223 uLCD.printf("\n%s\n",cipheredinput);
doubster 0:50e84db663a3 224 wait(3);
doubster 0:50e84db663a3 225
doubster 0:50e84db663a3 226 if(firsttime == 0)
doubster 0:50e84db663a3 227 {
doubster 0:50e84db663a3 228 ethclient.init();
doubster 0:50e84db663a3 229 firsttime = 1;
doubster 0:50e84db663a3 230 }
doubster 0:50e84db663a3 231
doubster 0:50e84db663a3 232 ethclient.connect();
doubster 0:50e84db663a3 233 UDPSocket sock;
doubster 0:50e84db663a3 234 sock.init();
doubster 0:50e84db663a3 235 Endpoint echo_server;
doubster 0:50e84db663a3 236 echo_server.set_address(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT);
doubster 0:50e84db663a3 237 char out_buffer[1024];
doubster 0:50e84db663a3 238 strncpy(out_buffer, cipheredinput.c_str(), sizeof(out_buffer));
doubster 0:50e84db663a3 239 out_buffer[sizeof(out_buffer) - 1] = 0;
doubster 0:50e84db663a3 240 //uLCD.printf("\Client IP Address is %s\n", ethclient.getIPAddress());
doubster 0:50e84db663a3 241 //wait(4);
doubster 0:50e84db663a3 242 sock.sendTo(echo_server, out_buffer, sizeof(out_buffer));
doubster 0:50e84db663a3 243 sock.close();
doubster 0:50e84db663a3 244 ethclient.disconnect();
doubster 0:50e84db663a3 245 // technically the eth should still be connected
doubster 0:50e84db663a3 246 uLCD.cls();
doubster 0:50e84db663a3 247 uLCD.printf("Message has been sent");
doubster 0:50e84db663a3 248 wait(2);
doubster 0:50e84db663a3 249 }
doubster 0:50e84db663a3 250 else
doubster 0:50e84db663a3 251 {
doubster 0:50e84db663a3 252 uLCD.cls();
doubster 0:50e84db663a3 253 uLCD.printf("Receiving...");
doubster 0:50e84db663a3 254
doubster 0:50e84db663a3 255 if(firsttimeserver == 0)
doubster 0:50e84db663a3 256 {
doubster 0:50e84db663a3 257 //uLCD.printf("first time server");
doubster 0:50e84db663a3 258 ethserver.init(IPaddress, NetworkMask, Gateway);
doubster 0:50e84db663a3 259 firsttimeserver = 1;
doubster 0:50e84db663a3 260 }
doubster 0:50e84db663a3 261 //uLCD.printf("initialized");
doubster 0:50e84db663a3 262 ethserver.connect();
doubster 0:50e84db663a3 263 UDPSocket server;
doubster 0:50e84db663a3 264 server.bind(ECHO_SERVER_PORT);
doubster 0:50e84db663a3 265 Endpoint client;
doubster 0:50e84db663a3 266 char buffer[256];
doubster 0:50e84db663a3 267 //uLCD.printf("\Server IP Address is %s\n", ethserver.getIPAddress());
doubster 0:50e84db663a3 268 string message;
doubster 0:50e84db663a3 269 int n = server.receiveFrom(client, buffer, sizeof(buffer));
doubster 0:50e84db663a3 270 buffer[n] = '\0';
doubster 0:50e84db663a3 271
doubster 0:50e84db663a3 272 string message2(buffer);
doubster 0:50e84db663a3 273 server.close();
doubster 0:50e84db663a3 274 ethserver.disconnect();
doubster 0:50e84db663a3 275 uLCD.cls();
doubster 0:50e84db663a3 276 uLCD.printf("Message %s",message2);
doubster 0:50e84db663a3 277 wait(3);
doubster 0:50e84db663a3 278 morsereceived = message2;
doubster 0:50e84db663a3 279 // string morsereceived = "";
doubster 0:50e84db663a3 280 // string cipherreceived = "";
doubster 0:50e84db663a3 281
doubster 0:50e84db663a3 282 // After Reception, User will have 2 options to decipher
doubster 0:50e84db663a3 283 // Engima or Caesar.
doubster 0:50e84db663a3 284 uLCD.cls();
doubster 0:50e84db663a3 285 DecryptionScreen();
doubster 0:50e84db663a3 286 while(pb2 && pb1 && pb3)
doubster 0:50e84db663a3 287 {
doubster 0:50e84db663a3 288 }
doubster 0:50e84db663a3 289
doubster 0:50e84db663a3 290 if(!pb1) // pb1 was pressed, do caesar cipher
doubster 0:50e84db663a3 291 {
doubster 0:50e84db663a3 292 uLCD.cls();
doubster 0:50e84db663a3 293 CaesarShiftScreen();
doubster 0:50e84db663a3 294 shiftvalue = 0;
doubster 0:50e84db663a3 295 uLCD.locate(0,4);
doubster 0:50e84db663a3 296 uLCD.printf("%02d",shiftvalue);
doubster 0:50e84db663a3 297 while(pb3)
doubster 0:50e84db663a3 298 {
doubster 0:50e84db663a3 299 if(!pb1) // Means go up one value
doubster 0:50e84db663a3 300 {
doubster 0:50e84db663a3 301 while(!pb1) // Need to wait until the button is released
doubster 0:50e84db663a3 302 {
doubster 0:50e84db663a3 303 }
doubster 0:50e84db663a3 304 shiftvalue = shiftvalue + 1;
doubster 0:50e84db663a3 305 if(shiftvalue>25)
doubster 0:50e84db663a3 306 {
doubster 0:50e84db663a3 307 shiftvalue = 25;
doubster 0:50e84db663a3 308 }
doubster 0:50e84db663a3 309 uLCD.locate(0,4);
doubster 0:50e84db663a3 310 uLCD.printf("%02d",shiftvalue);
doubster 0:50e84db663a3 311 }
doubster 0:50e84db663a3 312 if(!pb2) // Means go up one value
doubster 0:50e84db663a3 313 {
doubster 0:50e84db663a3 314 while(!pb2) // Need to wait until the button is released
doubster 0:50e84db663a3 315 {
doubster 0:50e84db663a3 316 }
doubster 0:50e84db663a3 317 shiftvalue = shiftvalue - 1;
doubster 0:50e84db663a3 318 if(shiftvalue<0)
doubster 0:50e84db663a3 319 {
doubster 0:50e84db663a3 320 shiftvalue = 0;
doubster 0:50e84db663a3 321 }
doubster 0:50e84db663a3 322 uLCD.locate(0,4);
doubster 0:50e84db663a3 323 uLCD.printf("%02d",shiftvalue);
doubster 0:50e84db663a3 324 }
doubster 0:50e84db663a3 325 }
doubster 0:50e84db663a3 326 cipherreceived = CaesarCipher(morsereceived,1,shiftvalue); // Second input = 1, for decryption
doubster 0:50e84db663a3 327 }
doubster 0:50e84db663a3 328 else if(!pb2) // pb2 was pressed, do Polybius Square Cipher
doubster 0:50e84db663a3 329 {
doubster 0:50e84db663a3 330 cipherreceived = PolybiusSquareCipher(morsereceived,1); // Second input = 1, for decryption
doubster 0:50e84db663a3 331 }
doubster 0:50e84db663a3 332 else if(!pb3)
doubster 0:50e84db663a3 333 {
doubster 0:50e84db663a3 334 cipherreceived = morsereceived;
doubster 0:50e84db663a3 335 }
doubster 0:50e84db663a3 336 uLCD.cls();
doubster 0:50e84db663a3 337 uLCD.printf("Decryption\n\n");
doubster 0:50e84db663a3 338 uLCD.printf("%s\n",morsereceived);
doubster 0:50e84db663a3 339 uLCD.printf("%s\n",cipherreceived);
doubster 0:50e84db663a3 340 wait(5);
doubster 0:50e84db663a3 341 }
doubster 0:50e84db663a3 342 }
doubster 0:50e84db663a3 343 }
doubster 0:50e84db663a3 344
doubster 0:50e84db663a3 345
doubster 0:50e84db663a3 346 // Start Screen to show Welcome Page
doubster 0:50e84db663a3 347 void StartScreen()
doubster 0:50e84db663a3 348 {
doubster 0:50e84db663a3 349 uLCD.printf("Welcome to the Morse Code Enconder and Transmitter.\n\n\n");
doubster 0:50e84db663a3 350 wait(4);
doubster 0:50e84db663a3 351 }
doubster 0:50e84db663a3 352
doubster 0:50e84db663a3 353 // Screen to choose between Client and Servers
doubster 0:50e84db663a3 354 void ClientServerScreen()
doubster 0:50e84db663a3 355 {
doubster 0:50e84db663a3 356 uLCD.printf("Choose an option:\n\n");
doubster 0:50e84db663a3 357 uLCD.printf("1 - Transmit\n");
doubster 0:50e84db663a3 358 uLCD.printf("2 - Receive\n");
doubster 0:50e84db663a3 359 //uLCD.printf("3 - Checkers\n");
doubster 0:50e84db663a3 360 }
doubster 0:50e84db663a3 361
doubster 0:50e84db663a3 362 // Screen 2
doubster 0:50e84db663a3 363 void HelpScreen()
doubster 0:50e84db663a3 364 {
doubster 0:50e84db663a3 365 uLCD.printf("Up => . \n\n");
doubster 0:50e84db663a3 366 uLCD.printf("Down => - \n\n");
doubster 0:50e84db663a3 367 uLCD.printf("Right => Submit\n");
doubster 0:50e84db663a3 368 wait(2);
doubster 0:50e84db663a3 369 }
doubster 0:50e84db663a3 370
doubster 0:50e84db663a3 371 // Screen 3
doubster 0:50e84db663a3 372 void InputScreen()
doubster 0:50e84db663a3 373 {
doubster 0:50e84db663a3 374 uLCD.printf("Input Morse Code\n");
doubster 0:50e84db663a3 375 }
doubster 0:50e84db663a3 376
doubster 0:50e84db663a3 377 // Screen 4
doubster 0:50e84db663a3 378 void EncryptionScreen()
doubster 0:50e84db663a3 379 {
doubster 0:50e84db663a3 380 uLCD.printf("Choose encryption:\n\n");
doubster 0:50e84db663a3 381 uLCD.printf("1 - Caesar Cipher\n");
doubster 0:50e84db663a3 382 uLCD.printf("2 - Polybius Sqre\n");
doubster 0:50e84db663a3 383 uLCD.printf("3 - No cipher\n");
doubster 0:50e84db663a3 384 }
doubster 0:50e84db663a3 385
doubster 0:50e84db663a3 386 void DecryptionScreen()
doubster 0:50e84db663a3 387 {
doubster 0:50e84db663a3 388 uLCD.printf("Choose decryption:\n\n");
doubster 0:50e84db663a3 389 uLCD.printf("1 - Caesar Cipher\n");
doubster 0:50e84db663a3 390 uLCD.printf("2 - Polybius Sqre\n");
doubster 0:50e84db663a3 391 uLCD.printf("3 - No cipher\n");
doubster 0:50e84db663a3 392 }
doubster 0:50e84db663a3 393
doubster 0:50e84db663a3 394 void CaesarShiftScreen() {
doubster 0:50e84db663a3 395 uLCD.printf("Choose a shift value\n");
doubster 0:50e84db663a3 396 uLCD.printf("UP and DOWN");
doubster 0:50e84db663a3 397 }
doubster 0:50e84db663a3 398
doubster 0:50e84db663a3 399 // Returns the proper character based on the inputed morse code
doubster 0:50e84db663a3 400 string MorseCode(string a)
doubster 0:50e84db663a3 401 {
doubster 0:50e84db663a3 402 //uLCD.printf("%s",a);
doubster 0:50e84db663a3 403 if(a == ".-") { return "A";}
doubster 0:50e84db663a3 404 if(a == "-...") { return "B";}
doubster 0:50e84db663a3 405 if(a == "-.-.") { return "C";}
doubster 0:50e84db663a3 406 if(a == "-..") { return "D";}
doubster 0:50e84db663a3 407 if(a == ".") { return "E";}
doubster 0:50e84db663a3 408 if(a == "..-.") { return "F";}
doubster 0:50e84db663a3 409 if(a == "--.") { return "G";}
doubster 0:50e84db663a3 410 if(a == "....") { return "H";}
doubster 0:50e84db663a3 411 if(a == "..") { return "I";}
doubster 0:50e84db663a3 412 if(a == ".---") { return "J";}
doubster 0:50e84db663a3 413 if(a == "-.-") { return "K";}
doubster 0:50e84db663a3 414 if(a == ".-..") { return "L";}
doubster 0:50e84db663a3 415 if(a == "--") { return "M";}
doubster 0:50e84db663a3 416 if(a == "-.") { return "N";}
doubster 0:50e84db663a3 417 if(a == "---") { return "O";}
doubster 0:50e84db663a3 418 if(a == ".--.") { return "P";}
doubster 0:50e84db663a3 419 if(a == "--.-") { return "Q";}
doubster 0:50e84db663a3 420 if(a == ".-.") { return "R";}
doubster 0:50e84db663a3 421 if(a == "...") { return "S";}
doubster 0:50e84db663a3 422 if(a == "-") { return "T";}
doubster 0:50e84db663a3 423 if(a == "..-") { return "U";}
doubster 0:50e84db663a3 424 if(a == "...-") { return "V";}
doubster 0:50e84db663a3 425 if(a == ".--") { return "W";}
doubster 0:50e84db663a3 426 if(a == "-..-") { return "X";}
doubster 0:50e84db663a3 427 if(a == "-.--") { return "Y";}
doubster 0:50e84db663a3 428 if(a == "--..") { return "Z";}
doubster 0:50e84db663a3 429 if(a == ".----") { return "1";}
doubster 0:50e84db663a3 430 if(a == "..---") { return "2";}
doubster 0:50e84db663a3 431 if(a == "...--") { return "3";}
doubster 0:50e84db663a3 432 if(a == "....-") { return "4";}
doubster 0:50e84db663a3 433 if(a == ".....") { return "5";}
doubster 0:50e84db663a3 434 if(a == "-....") { return "6";}
doubster 0:50e84db663a3 435 if(a == "--...") { return "7";}
doubster 0:50e84db663a3 436 if(a == "---..") { return "8";}
doubster 0:50e84db663a3 437 if(a == "----.") { return "9";}
doubster 0:50e84db663a3 438 if(a == "-----") { return "0";}
doubster 0:50e84db663a3 439 return "error";
doubster 0:50e84db663a3 440 }
doubster 0:50e84db663a3 441
doubster 0:50e84db663a3 442 // Cipher Codes by Ishita
doubster 0:50e84db663a3 443
doubster 0:50e84db663a3 444
doubster 0:50e84db663a3 445
doubster 0:50e84db663a3 446 // Find the length of the string
doubster 0:50e84db663a3 447 // Loop through it, and replace each a[i] with its equivalent that is 3 letters later.
doubster 0:50e84db663a3 448 // For that will have to loop through Alphabet and find the position of said letter.
doubster 0:50e84db663a3 449 // Then increment. So hopefully there is a isin(alphabet,"A) -> that returns the index, position etc.
doubster 0:50e84db663a3 450 string CaesarCipher(string word, int opt, int shift)
doubster 0:50e84db663a3 451 {
doubster 0:50e84db663a3 452 string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
doubster 0:50e84db663a3 453 if(opt == 0) // Encrypt
doubster 0:50e84db663a3 454 {
doubster 0:50e84db663a3 455 string encrypted = "";
doubster 0:50e84db663a3 456 for (int x = 0; x < word.length(); x++) {
doubster 0:50e84db663a3 457 char c = word[x];
doubster 0:50e84db663a3 458 int ind = alphabet.find(c);
doubster 0:50e84db663a3 459 ind = (ind + shift) % 26;
doubster 0:50e84db663a3 460 encrypted += alphabet[ind];
doubster 0:50e84db663a3 461 }
doubster 0:50e84db663a3 462 return encrypted;
doubster 0:50e84db663a3 463 } else if (opt == 1) { //Decrypt
doubster 0:50e84db663a3 464 string decrypted = "";
doubster 0:50e84db663a3 465 for (int x = 0; x < word.length(); x++) {
doubster 0:50e84db663a3 466 char c = word[x];
doubster 0:50e84db663a3 467 int ind = alphabet.find(c);
doubster 0:50e84db663a3 468 ind = (ind - shift) % 26;
doubster 0:50e84db663a3 469 decrypted += alphabet[ind];
doubster 0:50e84db663a3 470 }
doubster 0:50e84db663a3 471 return decrypted;
doubster 0:50e84db663a3 472 } else {
doubster 0:50e84db663a3 473 return "Error";
doubster 0:50e84db663a3 474 }
doubster 0:50e84db663a3 475 }
doubster 0:50e84db663a3 476
doubster 0:50e84db663a3 477 //Polybius Square cipher
doubster 0:50e84db663a3 478 string PolybiusSquareCipher(string word,int opt)
doubster 0:50e84db663a3 479 {
doubster 0:50e84db663a3 480 string number = "";
doubster 0:50e84db663a3 481 string numbers = "";
doubster 0:50e84db663a3 482 if(opt == 0) // Encrypt
doubster 0:50e84db663a3 483 {
doubster 0:50e84db663a3 484 string encrypted = "";
doubster 0:50e84db663a3 485 string rows = "";
doubster 0:50e84db663a3 486 string cols = "";
doubster 0:50e84db663a3 487 for (int x = 0; x < word.length(); x++) {
doubster 0:50e84db663a3 488 char c = word[x];
doubster 0:50e84db663a3 489 number = PolybiusTableTranslation(c);
doubster 0:50e84db663a3 490 rows += number[0];
doubster 0:50e84db663a3 491 cols += number[1];
doubster 0:50e84db663a3 492 }
doubster 0:50e84db663a3 493 numbers = rows + cols;
doubster 0:50e84db663a3 494 for (int y = 0; y < numbers.length(); y = y + 2) {
doubster 0:50e84db663a3 495 encrypted += PolybiusTableLookup(numbers.substr(y,2));
doubster 0:50e84db663a3 496 }
doubster 0:50e84db663a3 497 return encrypted;
doubster 0:50e84db663a3 498 } else if (opt == 1) { //Decrypt
doubster 0:50e84db663a3 499 string decrypted = "";
doubster 0:50e84db663a3 500 for (int x = 0; x < word.length(); x++) {
doubster 0:50e84db663a3 501 char c = word[x];
doubster 0:50e84db663a3 502 number = PolybiusTableTranslation(c);
doubster 0:50e84db663a3 503 numbers += number;
doubster 0:50e84db663a3 504 }
doubster 0:50e84db663a3 505 int length = numbers.length()/2;
doubster 0:50e84db663a3 506 for (int y = 0; y < length; y++) {
doubster 0:50e84db663a3 507 string newNum = "";
doubster 0:50e84db663a3 508 newNum += numbers[y];
doubster 0:50e84db663a3 509 newNum += numbers[y + length];
doubster 0:50e84db663a3 510 decrypted += PolybiusTableLookup(newNum);
doubster 0:50e84db663a3 511 }
doubster 0:50e84db663a3 512 return decrypted;
doubster 0:50e84db663a3 513 } else {
doubster 0:50e84db663a3 514 return "Error";
doubster 0:50e84db663a3 515 }
doubster 0:50e84db663a3 516 }
doubster 0:50e84db663a3 517
doubster 0:50e84db663a3 518
doubster 0:50e84db663a3 519
doubster 0:50e84db663a3 520 string PolybiusTableTranslation(char letter) {
doubster 0:50e84db663a3 521 if (letter == 'A') {return "11";}
doubster 0:50e84db663a3 522 if (letter == 'B') {return "12";}
doubster 0:50e84db663a3 523 if (letter == 'C') {return "13";}
doubster 0:50e84db663a3 524 if (letter == 'D') {return "14";}
doubster 0:50e84db663a3 525 if (letter == 'E') {return "15";}
doubster 0:50e84db663a3 526 if (letter == 'F') {return "21";}
doubster 0:50e84db663a3 527 if (letter == 'G') {return "22";}
doubster 0:50e84db663a3 528 if (letter == 'H') {return "23";}
doubster 0:50e84db663a3 529 if (letter == 'I') {return "24";}
doubster 0:50e84db663a3 530 if (letter == 'J') {return "24";}
doubster 0:50e84db663a3 531 if (letter == 'K') {return "25";}
doubster 0:50e84db663a3 532 if (letter == 'L') {return "31";}
doubster 0:50e84db663a3 533 if (letter == 'M') {return "32";}
doubster 0:50e84db663a3 534 if (letter == 'N') {return "33";}
doubster 0:50e84db663a3 535 if (letter == 'O') {return "34";}
doubster 0:50e84db663a3 536 if (letter == 'P') {return "35";}
doubster 0:50e84db663a3 537 if (letter == 'Q') {return "41";}
doubster 0:50e84db663a3 538 if (letter == 'R') {return "42";}
doubster 0:50e84db663a3 539 if (letter == 'S') {return "43";}
doubster 0:50e84db663a3 540 if (letter == 'T') {return "44";}
doubster 0:50e84db663a3 541 if (letter == 'U') {return "45";}
doubster 0:50e84db663a3 542 if (letter == 'V') {return "51";}
doubster 0:50e84db663a3 543 if (letter == 'W') {return "52";}
doubster 0:50e84db663a3 544 if (letter == 'X') {return "53";}
doubster 0:50e84db663a3 545 if (letter == 'Y') {return "54";}
doubster 0:50e84db663a3 546 if (letter == 'Z') {return "55";}
doubster 0:50e84db663a3 547
doubster 0:50e84db663a3 548 return "error";
doubster 0:50e84db663a3 549 }
doubster 0:50e84db663a3 550
doubster 0:50e84db663a3 551 string PolybiusTableLookup(string number) {
doubster 0:50e84db663a3 552 if (number == "11") {return "A";}
doubster 0:50e84db663a3 553 if (number == "12") {return "B";}
doubster 0:50e84db663a3 554 if (number == "13") {return "C";}
doubster 0:50e84db663a3 555 if (number == "14") {return "D";}
doubster 0:50e84db663a3 556 if (number == "15") {return "E";}
doubster 0:50e84db663a3 557 if (number == "21") {return "F";}
doubster 0:50e84db663a3 558 if (number == "22") {return "G";}
doubster 0:50e84db663a3 559 if (number == "23") {return "H";}
doubster 0:50e84db663a3 560 if (number == "24") {return "I/J";}
doubster 0:50e84db663a3 561 if (number == "25") {return "K";}
doubster 0:50e84db663a3 562 if (number == "31") {return "L";}
doubster 0:50e84db663a3 563 if (number == "32") {return "M";}
doubster 0:50e84db663a3 564 if (number == "33") {return "N";}
doubster 0:50e84db663a3 565 if (number == "34") {return "O";}
doubster 0:50e84db663a3 566 if (number =="35") {return "P";}
doubster 0:50e84db663a3 567 if (number == "41") {return "Q";}
doubster 0:50e84db663a3 568 if (number == "42") {return "R";}
doubster 0:50e84db663a3 569 if (number == "43") {return "S";}
doubster 0:50e84db663a3 570 if (number == "44") {return "T";}
doubster 0:50e84db663a3 571 if (number == "45") {return "U";}
doubster 0:50e84db663a3 572 if (number == "51") {return "V";}
doubster 0:50e84db663a3 573 if (number == "52") {return "W";}
doubster 0:50e84db663a3 574 if (number == "53") {return "X";}
doubster 0:50e84db663a3 575 if (number == "54") {return "Y";}
doubster 0:50e84db663a3 576 if (number == "55") {return "Z";}
doubster 0:50e84db663a3 577
doubster 0:50e84db663a3 578 return "error";
doubster 0:50e84db663a3 579 }
doubster 0:50e84db663a3 580
doubster 0:50e84db663a3 581
doubster 0:50e84db663a3 582
doubster 0:50e84db663a3 583