Pt. 2 | Encryption encrypt program
Dependencies: mbed 4DGL-uLCD-SE SDFileSystem PinDetect
main.cpp
- Committer:
- sralph3
- Date:
- 2019-01-03
- Revision:
- 0:35bd4a705079
File content as of revision 0:35bd4a705079:
#include "mbed.h" #include "PinDetect.h" #include "uLCD_4DGL.h" #include "SDFileSystem.h" #include "Letter.h" uLCD_4DGL uLCD(p28, p27, p29); // serial tx, serial rx, reset pin; SDFileSystem sd(p5, p6, p7, p8, "sd"); //declare objects for pins used with pushbuttons PinDetect pb1(p18); PinDetect pb2(p17); PinDetect pb3(p16); //Populate arrayCipher from cipher on SD char arrayCipher [1001]; enum InputType {FWD,BACK,ENC,NON}; enum StateType {Q0, Q1, Q2, Q3}; Letter currLetter; int position=0; FILE *fp2; InputType input = NON; StateType state = Q0; //Encrypt char encrypt (char inp, char arrayCipher[], int startPt) { int sum = (arrayCipher[startPt]-65) + (inp-65); sum = sum % 26; char sumC = sum; return sumC+65; } // Callback routine is interrupt activated by a debounced pb3 hit void pb3_hit_callback (void) { if (state==Q0){ uLCD.cls(); uLCD.printf("ENCRYPTING"); wait(1.0); char inC = currLetter.getChar(); char outC=encrypt(inC, arrayCipher, position); uLCD.cls(); uLCD.locate(0,0); uLCD.text_width(5); uLCD.text_height(5); uLCD.printf("%c", outC); position++; //update position in txt doc fp2 = fopen("/sd/mydir/positionCipherSender.txt", "w"); if(fp2 == NULL) { uLCD.printf("Error Open \n"); } else{ fprintf(fp2, "%i",position); fclose(fp2); } wait(1.0); uLCD.cls(); input = ENC; } else{ input=ENC; } } // Callback routine is interrupt activated by a debounced pb1 hit void pb1_hit_callback (void) { // ADD CODE HERE THAT YOU WHAT TO RUN WHEN INTERUPT IS GENERATED currLetter.inc(); } // Callback routine is interrupt activated by a debounced pb2 hit void pb2_hit_callback (void) { currLetter.dec(); } int main() { FILE *fp = fopen("/sd/mydir/OTP.txt", "r"); if(fp == NULL){ uLCD.printf("Open Error!!!\n"); } else{ fscanf(fp, "%s", arrayCipher); fclose(fp); } FILE *fp2 = fopen("/sd/mydir/positionCipherSender.txt", "r"); if(fp2 == NULL) { uLCD.printf("Open Error!!!\n"); } else{ fscanf(fp2, "%i",&position); fclose(fp2); } // int sizeIn = sizeof(inChars)/sizeof(*inChars); pb1.mode(PullUp); pb2.mode(PullUp); pb3.mode(PullUp); // Delay for initial pullup to take effect wait(.01); // Setup Interrupt callback functions for a pb hit pb1.attach_deasserted(&pb1_hit_callback); pb2.attach_deasserted(&pb2_hit_callback); pb3.attach_deasserted(&pb3_hit_callback); // Start sampling pb inputs using interrupts pb1.setSampleFrequency(); //default is 20KHz sampling pb2.setSampleFrequency(); pb3.setSampleFrequency(); // pushbuttons now setup and running while(1) { switch(state){ case(Q0): //Produce output for this state uLCD.locate(0,0); uLCD.text_width(5); uLCD.text_height(5); uLCD.printf("%c",currLetter.getChar()); wait(.5); //calculate next state if (input == ENC){ state = Q1; input=NON; } else{ //input should be stay state = Q0; } break; case (Q1): //Produce output for this state uLCD.locate(0,0); uLCD.text_width(1); uLCD.text_height(1); uLCD.printf("Press Again To Encrypt More"); //calculate next state if (input == ENC){ state = Q0; input = NON; uLCD.cls(); } else //input should be stay state = Q1; break; } //end switch wait (0.1); } }