ntg

Dependents:   AESslave_modified_test_27-9-2017 AESslave_modified_test_copy AESslave_modified_test_27-9-2017

Committer:
ajeet3004
Date:
Wed Sep 27 10:16:49 2017 +0000
Revision:
0:ffa9fb6be9a1
ntg

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ajeet3004 0:ffa9fb6be9a1 1 #include "mbed.h"
ajeet3004 0:ffa9fb6be9a1 2 #include "crc.h"
ajeet3004 0:ffa9fb6be9a1 3 Serial output(USBTX,USBRX); //USB serial to print the data in the console
ajeet3004 0:ffa9fb6be9a1 4 char result1[18]; //To store the character format of the CRC bit
ajeet3004 0:ffa9fb6be9a1 5 int binary1[256]; //To store the binary data in integer type
ajeet3004 0:ffa9fb6be9a1 6 char binary2[256]; //To store the binary data in chracter type
ajeet3004 0:ffa9fb6be9a1 7 int generator[]= {1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0}; //CRC generator
ajeet3004 0:ffa9fb6be9a1 8 int v,v1;
ajeet3004 0:ffa9fb6be9a1 9
ajeet3004 0:ffa9fb6be9a1 10
ajeet3004 0:ffa9fb6be9a1 11 //Function for generating CRC and transmitting it
ajeet3004 0:ffa9fb6be9a1 12 char* crcCheck_transmit(char* targetChar) //for transmission the data from gateway to slave device with crc
ajeet3004 0:ffa9fb6be9a1 13 {
ajeet3004 0:ffa9fb6be9a1 14 int i1,j1,k1,l1,h1;
ajeet3004 0:ffa9fb6be9a1 15
ajeet3004 0:ffa9fb6be9a1 16
ajeet3004 0:ffa9fb6be9a1 17
ajeet3004 0:ffa9fb6be9a1 18 v=0,v1=0;
ajeet3004 0:ffa9fb6be9a1 19 for(h1=0; h1<16; h1++) { //loop for binary printing
ajeet3004 0:ffa9fb6be9a1 20 printBinary(targetChar[h1]);
ajeet3004 0:ffa9fb6be9a1 21 output.printf(" - ");
ajeet3004 0:ffa9fb6be9a1 22 }
ajeet3004 0:ffa9fb6be9a1 23 //output.printf("%d",sizeof(f));
ajeet3004 0:ffa9fb6be9a1 24 // output.printf("\n The data to be analyzed is : ");
ajeet3004 0:ffa9fb6be9a1 25 int frame[v+16];
ajeet3004 0:ffa9fb6be9a1 26 for(h1=0; h1<v; h1++) { //storing the binary data in frame array
ajeet3004 0:ffa9fb6be9a1 27 // output.printf("%d",binary1[h1]);
ajeet3004 0:ffa9fb6be9a1 28 frame[h1]=binary1[h1];
ajeet3004 0:ffa9fb6be9a1 29 }
ajeet3004 0:ffa9fb6be9a1 30 //frame[2]=0;
ajeet3004 0:ffa9fb6be9a1 31 /* output.printf("\n The value of v is : %d ",v); //Printing the value of V i.e total binary no.
ajeet3004 0:ffa9fb6be9a1 32
ajeet3004 0:ffa9fb6be9a1 33 output.printf("\n Sender Side:");
ajeet3004 0:ffa9fb6be9a1 34 output.printf("\n Frame: ");*/
ajeet3004 0:ffa9fb6be9a1 35 /* for(i1=0; i1<v; i1++) { // total binary stream printing
ajeet3004 0:ffa9fb6be9a1 36 output.printf("%d",frame[i1]);
ajeet3004 0:ffa9fb6be9a1 37 }
ajeet3004 0:ffa9fb6be9a1 38 output.printf("\n Generator : "); */ // generator for CRC checking
ajeet3004 0:ffa9fb6be9a1 39 /* for(i1=0; i1<16; i1++) {
ajeet3004 0:ffa9fb6be9a1 40 output.printf("%d",generator[i1]);
ajeet3004 0:ffa9fb6be9a1 41 }*/
ajeet3004 0:ffa9fb6be9a1 42
ajeet3004 0:ffa9fb6be9a1 43 //Append 0's
ajeet3004 0:ffa9fb6be9a1 44 int rs1=16-1;
ajeet3004 0:ffa9fb6be9a1 45 for (i1=v; i1<v+rs1; i1++) { //appending the zeros to the data for calculating the crc
ajeet3004 0:ffa9fb6be9a1 46 frame[i1]=0;
ajeet3004 0:ffa9fb6be9a1 47 }
ajeet3004 0:ffa9fb6be9a1 48
ajeet3004 0:ffa9fb6be9a1 49 int temp2[v+16];
ajeet3004 0:ffa9fb6be9a1 50 for(i1=0; i1<v+16; i1++) { // copying the data from one array to another array
ajeet3004 0:ffa9fb6be9a1 51 temp2[i1]=frame[i1];
ajeet3004 0:ffa9fb6be9a1 52 }
ajeet3004 0:ffa9fb6be9a1 53
ajeet3004 0:ffa9fb6be9a1 54 /* output.printf("\n Message after appending 0's :");
ajeet3004 0:ffa9fb6be9a1 55 for(i1=0; i1<v+rs1; i1++) { //printing the data after appending zeros
ajeet3004 0:ffa9fb6be9a1 56 output.printf("%d",temp2[i1]);
ajeet3004 0:ffa9fb6be9a1 57 }*/
ajeet3004 0:ffa9fb6be9a1 58
ajeet3004 0:ffa9fb6be9a1 59 //Division
ajeet3004 0:ffa9fb6be9a1 60 for(i1=0; i1<v; i1++) { //CRC generating through division operation
ajeet3004 0:ffa9fb6be9a1 61 j1=0;
ajeet3004 0:ffa9fb6be9a1 62 k1=i1;
ajeet3004 0:ffa9fb6be9a1 63 //check whether it is divisible or not
ajeet3004 0:ffa9fb6be9a1 64 if (temp2[k1]>=generator[j1]) {
ajeet3004 0:ffa9fb6be9a1 65 for(j1=0,k1=i1; j1<16; j1++,k1++) {
ajeet3004 0:ffa9fb6be9a1 66 if((temp2[k1]==1 && generator[j1]==1) || (temp2[k1]==0 && generator[j1]==0)) {
ajeet3004 0:ffa9fb6be9a1 67 temp2[k1]=0;
ajeet3004 0:ffa9fb6be9a1 68 } else {
ajeet3004 0:ffa9fb6be9a1 69 temp2[k1]=1;
ajeet3004 0:ffa9fb6be9a1 70 }
ajeet3004 0:ffa9fb6be9a1 71 }
ajeet3004 0:ffa9fb6be9a1 72 }
ajeet3004 0:ffa9fb6be9a1 73 }
ajeet3004 0:ffa9fb6be9a1 74
ajeet3004 0:ffa9fb6be9a1 75 //CRC
ajeet3004 0:ffa9fb6be9a1 76 int crc[16];
ajeet3004 0:ffa9fb6be9a1 77 for(i1=0,j1=v; i1<rs1; i1++,j1++) { // storing CRC bits in CRC array
ajeet3004 0:ffa9fb6be9a1 78 crc[i1]=temp2[j1];
ajeet3004 0:ffa9fb6be9a1 79 }
ajeet3004 0:ffa9fb6be9a1 80
ajeet3004 0:ffa9fb6be9a1 81 /*output.printf("\n CRC bits: ");
ajeet3004 0:ffa9fb6be9a1 82 for(i1=0; i1<rs1; i1++) { //printing CRC bits
ajeet3004 0:ffa9fb6be9a1 83 output.printf("%d",crc[i1]);
ajeet3004 0:ffa9fb6be9a1 84 }*/
ajeet3004 0:ffa9fb6be9a1 85
ajeet3004 0:ffa9fb6be9a1 86 //output.printf("\n Transmitted Frame: ");
ajeet3004 0:ffa9fb6be9a1 87 int tf2[v+16];
ajeet3004 0:ffa9fb6be9a1 88 char tf3[v+16];
ajeet3004 0:ffa9fb6be9a1 89 for(i1=0; i1<v; i1++) { // copying the data from one to another
ajeet3004 0:ffa9fb6be9a1 90 tf2[i1]=frame[i1];
ajeet3004 0:ffa9fb6be9a1 91 }
ajeet3004 0:ffa9fb6be9a1 92 for(i1=v,j1=0; i1<v+rs1; i1++,j1++) { // Adding CRC bits to the data
ajeet3004 0:ffa9fb6be9a1 93 tf2[i1]=crc[j1];
ajeet3004 0:ffa9fb6be9a1 94 }
ajeet3004 0:ffa9fb6be9a1 95 /* for(i1=0; i1<v+rs1; i1++) { // printing the data after adding the CRC bits to the data
ajeet3004 0:ffa9fb6be9a1 96 output.printf("%d",tf2[i1]);
ajeet3004 0:ffa9fb6be9a1 97 }*/
ajeet3004 0:ffa9fb6be9a1 98
ajeet3004 0:ffa9fb6be9a1 99 tf2[v+rs1]=0;
ajeet3004 0:ffa9fb6be9a1 100
ajeet3004 0:ffa9fb6be9a1 101 /* output.printf("\n The final data to be sent is : "); // printing the Final data
ajeet3004 0:ffa9fb6be9a1 102 for(i1=0; i1<=v+rs1; i1++) {
ajeet3004 0:ffa9fb6be9a1 103 output.printf("%d",tf2[i1]);
ajeet3004 0:ffa9fb6be9a1 104 }*/
ajeet3004 0:ffa9fb6be9a1 105
ajeet3004 0:ffa9fb6be9a1 106 /* for(i1=0;i1<7;i1++)
ajeet3004 0:ffa9fb6be9a1 107 {
ajeet3004 0:ffa9fb6be9a1 108 tf2[i1]=1;
ajeet3004 0:ffa9fb6be9a1 109 }
ajeet3004 0:ffa9fb6be9a1 110 for(i1=136;i1<144;i1++)
ajeet3004 0:ffa9fb6be9a1 111 {
ajeet3004 0:ffa9fb6be9a1 112 tf2[i1]=1;
ajeet3004 0:ffa9fb6be9a1 113 }*/
ajeet3004 0:ffa9fb6be9a1 114 output.printf("\n The final data to be sent is : "); // printing the Final data
ajeet3004 0:ffa9fb6be9a1 115 for(i1=0; i1<=v+rs1; i1++) {
ajeet3004 0:ffa9fb6be9a1 116 output.printf("%d",tf2[i1]);
ajeet3004 0:ffa9fb6be9a1 117 }
ajeet3004 0:ffa9fb6be9a1 118 for(i1=0; i1<=v+rs1; i1++) {
ajeet3004 0:ffa9fb6be9a1 119 charBinary(tf2[i1]);
ajeet3004 0:ffa9fb6be9a1 120 }
ajeet3004 0:ffa9fb6be9a1 121 /* output.printf("\n The final data to be sent is : ");
ajeet3004 0:ffa9fb6be9a1 122 for(i1=0; i1<=v+rs1; i1++) {
ajeet3004 0:ffa9fb6be9a1 123 output.printf("%c",binary2[i1]);
ajeet3004 0:ffa9fb6be9a1 124 }*/
ajeet3004 0:ffa9fb6be9a1 125 printChar(binary2);
ajeet3004 0:ffa9fb6be9a1 126
ajeet3004 0:ffa9fb6be9a1 127 char* str=result1;
ajeet3004 0:ffa9fb6be9a1 128 //result1[18]='!';
ajeet3004 0:ffa9fb6be9a1 129 output.printf("\n check %s ", str);
ajeet3004 0:ffa9fb6be9a1 130 v=0,v1=0;
ajeet3004 0:ffa9fb6be9a1 131 return result1;
ajeet3004 0:ffa9fb6be9a1 132 }
ajeet3004 0:ffa9fb6be9a1 133
ajeet3004 0:ffa9fb6be9a1 134
ajeet3004 0:ffa9fb6be9a1 135
ajeet3004 0:ffa9fb6be9a1 136 //Function for CRC Checksum
ajeet3004 0:ffa9fb6be9a1 137 int crcCheck_receive(char a1[])
ajeet3004 0:ffa9fb6be9a1 138 {
ajeet3004 0:ffa9fb6be9a1 139 int i,j,k,l; //Variable required for CRC checksum
ajeet3004 0:ffa9fb6be9a1 140 int rs=15; //Value of should be N - 1 if the generator is of N bits
ajeet3004 0:ffa9fb6be9a1 141 v=0;
ajeet3004 0:ffa9fb6be9a1 142 /*output.printf("\n Receiver side : ");
ajeet3004 0:ffa9fb6be9a1 143 output.printf("\n Received Frame: ");*/
ajeet3004 0:ffa9fb6be9a1 144
ajeet3004 0:ffa9fb6be9a1 145 //For loop to convert the given data to binary form
ajeet3004 0:ffa9fb6be9a1 146 for(int m=0; m<18; m++) {
ajeet3004 0:ffa9fb6be9a1 147 printBinary(a1[m]);
ajeet3004 0:ffa9fb6be9a1 148 output.printf("-");
ajeet3004 0:ffa9fb6be9a1 149 }
ajeet3004 0:ffa9fb6be9a1 150
ajeet3004 0:ffa9fb6be9a1 151 //For loop to print the binary form of the data
ajeet3004 0:ffa9fb6be9a1 152 /* for(i=0; i<v; i++) {
ajeet3004 0:ffa9fb6be9a1 153 output.printf("%d",binary1[i]);
ajeet3004 0:ffa9fb6be9a1 154 }*/
ajeet3004 0:ffa9fb6be9a1 155 v=v-16;
ajeet3004 0:ffa9fb6be9a1 156 int tf[v+16]; //Variable to store the binsry form of the data
ajeet3004 0:ffa9fb6be9a1 157
ajeet3004 0:ffa9fb6be9a1 158 //For loop to store the bianry form of data into tf
ajeet3004 0:ffa9fb6be9a1 159 for(i=0; i<v+rs; i++) {
ajeet3004 0:ffa9fb6be9a1 160 tf[i]=binary1[i];
ajeet3004 0:ffa9fb6be9a1 161 }
ajeet3004 0:ffa9fb6be9a1 162
ajeet3004 0:ffa9fb6be9a1 163 /* output.printf("\n");
ajeet3004 0:ffa9fb6be9a1 164 output.printf("The data to be Analyzed on the receiving side : ");*/
ajeet3004 0:ffa9fb6be9a1 165
ajeet3004 0:ffa9fb6be9a1 166 //For loop to print the data to be analyzed
ajeet3004 0:ffa9fb6be9a1 167 /*for(i=0; i<v+rs; i++) {
ajeet3004 0:ffa9fb6be9a1 168 output.printf("%d",tf[i]);
ajeet3004 0:ffa9fb6be9a1 169 }*/
ajeet3004 0:ffa9fb6be9a1 170
ajeet3004 0:ffa9fb6be9a1 171 int temp[v+16];
ajeet3004 0:ffa9fb6be9a1 172 int temp2[v+16];
ajeet3004 0:ffa9fb6be9a1 173 for(i=0; i<v+rs; i++) {
ajeet3004 0:ffa9fb6be9a1 174 temp[i]=tf[i];
ajeet3004 0:ffa9fb6be9a1 175 }
ajeet3004 0:ffa9fb6be9a1 176 output.printf("\n The value before operation is :");
ajeet3004 0:ffa9fb6be9a1 177 for(i=0; i<v+rs; i++) {
ajeet3004 0:ffa9fb6be9a1 178 output.printf("%d",temp[i]);
ajeet3004 0:ffa9fb6be9a1 179 }
ajeet3004 0:ffa9fb6be9a1 180 //Division
ajeet3004 0:ffa9fb6be9a1 181 for(i=0; i<v; i++) {
ajeet3004 0:ffa9fb6be9a1 182 j=0;
ajeet3004 0:ffa9fb6be9a1 183 k=i;
ajeet3004 0:ffa9fb6be9a1 184 if (temp[k]>=generator[j]) {
ajeet3004 0:ffa9fb6be9a1 185 for(j=0,k=i; j<16; j++,k++) {
ajeet3004 0:ffa9fb6be9a1 186 if(temp[k] == generator[j]) { //If the data bit and generator bit are same
ajeet3004 0:ffa9fb6be9a1 187 temp[k]=0; //Result is 0
ajeet3004 0:ffa9fb6be9a1 188 } else { //If the data bit and generator bit are not same
ajeet3004 0:ffa9fb6be9a1 189 temp[k]=1; //Result is 1
ajeet3004 0:ffa9fb6be9a1 190 }
ajeet3004 0:ffa9fb6be9a1 191 }
ajeet3004 0:ffa9fb6be9a1 192 }
ajeet3004 0:ffa9fb6be9a1 193 }
ajeet3004 0:ffa9fb6be9a1 194 output.printf("\n The value after operation is :");
ajeet3004 0:ffa9fb6be9a1 195 for(i=0; i<v+rs; i++) {
ajeet3004 0:ffa9fb6be9a1 196 output.printf("%d",temp[i]);
ajeet3004 0:ffa9fb6be9a1 197 }
ajeet3004 0:ffa9fb6be9a1 198 output.printf("\n Reaminder: ");
ajeet3004 0:ffa9fb6be9a1 199 int rrem[16]; //Char array to store the remainder of the CRC checksum
ajeet3004 0:ffa9fb6be9a1 200
ajeet3004 0:ffa9fb6be9a1 201 //For loop to store the remainder
ajeet3004 0:ffa9fb6be9a1 202 for (i=v,j=0; i<v+rs; i++,j++) {
ajeet3004 0:ffa9fb6be9a1 203 rrem[j]= temp[i];
ajeet3004 0:ffa9fb6be9a1 204 }
ajeet3004 0:ffa9fb6be9a1 205
ajeet3004 0:ffa9fb6be9a1 206 //For loop to print the remainder
ajeet3004 0:ffa9fb6be9a1 207 for(i=0; i<rs; i++) {
ajeet3004 0:ffa9fb6be9a1 208 output.printf("%d",rrem[i]);
ajeet3004 0:ffa9fb6be9a1 209 }
ajeet3004 0:ffa9fb6be9a1 210
ajeet3004 0:ffa9fb6be9a1 211 int flag=0; //Variable to store the status of the flag
ajeet3004 0:ffa9fb6be9a1 212
ajeet3004 0:ffa9fb6be9a1 213 //For loop to check the remainder
ajeet3004 0:ffa9fb6be9a1 214 for(i=0; i<rs; i++) {
ajeet3004 0:ffa9fb6be9a1 215 if(rrem[i]!=0) { //If remainder bit is not equal to 0
ajeet3004 0:ffa9fb6be9a1 216 flag=1; //Set the flag value as 1
ajeet3004 0:ffa9fb6be9a1 217 break;
ajeet3004 0:ffa9fb6be9a1 218 }
ajeet3004 0:ffa9fb6be9a1 219 }
ajeet3004 0:ffa9fb6be9a1 220
ajeet3004 0:ffa9fb6be9a1 221 if(flag==0) { //if flag value is 0
ajeet3004 0:ffa9fb6be9a1 222 //output.printf("\n Since Remainder Is 0 Hence Message Transmitted From Sender To Receriver Is Correct");
ajeet3004 0:ffa9fb6be9a1 223 return 0; //Return 0
ajeet3004 0:ffa9fb6be9a1 224
ajeet3004 0:ffa9fb6be9a1 225
ajeet3004 0:ffa9fb6be9a1 226 } else { //if flag value is not zero
ajeet3004 0:ffa9fb6be9a1 227 // output.printf(" \n Since Remainder Is Not 0 Hence Message Transmitted From Sender To Receriver Contains Error");
ajeet3004 0:ffa9fb6be9a1 228 return 1; //return 1
ajeet3004 0:ffa9fb6be9a1 229 }
ajeet3004 0:ffa9fb6be9a1 230 v=0;
ajeet3004 0:ffa9fb6be9a1 231 }
ajeet3004 0:ffa9fb6be9a1 232
ajeet3004 0:ffa9fb6be9a1 233 //Function to print the binary format of the data which takes char c as a parameter
ajeet3004 0:ffa9fb6be9a1 234 void printBinary(char c)
ajeet3004 0:ffa9fb6be9a1 235 {
ajeet3004 0:ffa9fb6be9a1 236
ajeet3004 0:ffa9fb6be9a1 237 for (int i = 7; i >= 0; --i) {
ajeet3004 0:ffa9fb6be9a1 238 int x = ((c & (1 << i))? 1 : 0);
ajeet3004 0:ffa9fb6be9a1 239 output.printf("%d",x);
ajeet3004 0:ffa9fb6be9a1 240 binary1[v]=x;
ajeet3004 0:ffa9fb6be9a1 241 v++;
ajeet3004 0:ffa9fb6be9a1 242 }
ajeet3004 0:ffa9fb6be9a1 243 }
ajeet3004 0:ffa9fb6be9a1 244
ajeet3004 0:ffa9fb6be9a1 245 //Function to convertthe data from integer form to binary form which takes int c1 as parameter
ajeet3004 0:ffa9fb6be9a1 246 void charBinary(int c1)
ajeet3004 0:ffa9fb6be9a1 247 {
ajeet3004 0:ffa9fb6be9a1 248 char x1 = ((c1 & 1)? '1' : '0');
ajeet3004 0:ffa9fb6be9a1 249 // output.printf("%c",x1);
ajeet3004 0:ffa9fb6be9a1 250 binary2[v1]=x1;
ajeet3004 0:ffa9fb6be9a1 251 v1++;
ajeet3004 0:ffa9fb6be9a1 252 }
ajeet3004 0:ffa9fb6be9a1 253
ajeet3004 0:ffa9fb6be9a1 254
ajeet3004 0:ffa9fb6be9a1 255 /* ####### printChar function to convert the binary value into the respective character ########## */
ajeet3004 0:ffa9fb6be9a1 256
ajeet3004 0:ffa9fb6be9a1 257 void printChar(char x2[])
ajeet3004 0:ffa9fb6be9a1 258 {
ajeet3004 0:ffa9fb6be9a1 259
ajeet3004 0:ffa9fb6be9a1 260 //memcpy(a, b, sizeof(a));
ajeet3004 0:ffa9fb6be9a1 261 char *ON = x2 ;
ajeet3004 0:ffa9fb6be9a1 262 output.printf("\n");
ajeet3004 0:ffa9fb6be9a1 263 output.printf("%c",x2);
ajeet3004 0:ffa9fb6be9a1 264 char subbuff[9];
ajeet3004 0:ffa9fb6be9a1 265 for(int j=0; j<sizeof(result1); j++) {
ajeet3004 0:ffa9fb6be9a1 266 result1[j]='\0';
ajeet3004 0:ffa9fb6be9a1 267 }
ajeet3004 0:ffa9fb6be9a1 268 unsigned char c3;
ajeet3004 0:ffa9fb6be9a1 269 int k1;
ajeet3004 0:ffa9fb6be9a1 270 int index = 0;
ajeet3004 0:ffa9fb6be9a1 271 int fichero_len = (int)strlen(ON);
ajeet3004 0:ffa9fb6be9a1 272
ajeet3004 0:ffa9fb6be9a1 273 for(k1 = 0; k1 < fichero_len; k1 += 8) {
ajeet3004 0:ffa9fb6be9a1 274 memcpy(subbuff, &ON[k1], 8); // <--- copy 8 butes only
ajeet3004 0:ffa9fb6be9a1 275 subbuff[8] = '\0';
ajeet3004 0:ffa9fb6be9a1 276 c3 = (unsigned char)strtol(subbuff, 0, 2);
ajeet3004 0:ffa9fb6be9a1 277 //printf("\%s = %c = %d = 0x%.2X\n", subbuff, c3, c3, c3);
ajeet3004 0:ffa9fb6be9a1 278 result1[index++] = c3;
ajeet3004 0:ffa9fb6be9a1 279 result1[index] = '\0';
ajeet3004 0:ffa9fb6be9a1 280 }
ajeet3004 0:ffa9fb6be9a1 281 printf("\nResult = %s\n", result1);
ajeet3004 0:ffa9fb6be9a1 282
ajeet3004 0:ffa9fb6be9a1 283 }
ajeet3004 0:ffa9fb6be9a1 284