Importing without issues

Dependencies:   AES CRC DHT JSON MQTT UDAES WIZnetInterface mbed-src

Fork of Mbed_Prototype_copy_4_INNO_day_15_6_2017 by Irayya Mathad

Committer:
irayya
Date:
Tue Jun 20 05:35:14 2017 +0000
Revision:
1:903414009683
Parent:
0:c2a1e0a5d567
Child:
2:f390709f23e1
Modified

Who changed what in which revision?

UserRevisionLine numberNew contents of line
irayya 1:903414009683 1 #include "mbed.h" // this is the original copy of 13-6-2017 and today only modifying. date 15-6-2017
irayya 0:c2a1e0a5d567 2 #include "DHT.h"
irayya 0:c2a1e0a5d567 3 #include "AES.h"
irayya 0:c2a1e0a5d567 4 #include "MQTTEthernet.h"
irayya 0:c2a1e0a5d567 5 #include "MQTTClient.h"
irayya 0:c2a1e0a5d567 6 #include "string.h"
irayya 0:c2a1e0a5d567 7 #include "udaes.h"
irayya 0:c2a1e0a5d567 8 #include "crc.h"
irayya 0:c2a1e0a5d567 9 #define ECHO_SERVER_PORT 7
irayya 0:c2a1e0a5d567 10 char msg[16];
irayya 0:c2a1e0a5d567 11 char o_message[16];
irayya 1:903414009683 12 char send_message[19];
irayya 1:903414009683 13 char rec_message[18];
irayya 1:903414009683 14 char dataReceive[21];
irayya 0:c2a1e0a5d567 15 char encData[16];
irayya 0:c2a1e0a5d567 16 char decData[16];
irayya 0:c2a1e0a5d567 17 char message[16];
irayya 1:903414009683 18 int u1,u2;
irayya 0:c2a1e0a5d567 19 int h;
irayya 1:903414009683 20 char crc_failed[]="FCRC";
irayya 0:c2a1e0a5d567 21 char crc_check[3];
irayya 0:c2a1e0a5d567 22 int arrivedcount = 0;
irayya 0:c2a1e0a5d567 23 void crcCheck(int []);
irayya 0:c2a1e0a5d567 24 Serial out(USBTX,USBRX);
irayya 0:c2a1e0a5d567 25 Serial device(PA_13,PA_14);
irayya 0:c2a1e0a5d567 26 void bluetooth();
irayya 0:c2a1e0a5d567 27
irayya 0:c2a1e0a5d567 28
irayya 0:c2a1e0a5d567 29
irayya 0:c2a1e0a5d567 30
irayya 0:c2a1e0a5d567 31 void messageArrived(MQTT::MessageData& md)
irayya 0:c2a1e0a5d567 32 {
irayya 0:c2a1e0a5d567 33
irayya 0:c2a1e0a5d567 34 MQTT::Message &message = md.message;
irayya 1:903414009683 35 // printf("\nMessage arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id); //printing a message on console including qos,dup,retained,packetid
irayya 0:c2a1e0a5d567 36 printf("%s\n", message.payloadlen, (char*)message.payload);
irayya 0:c2a1e0a5d567 37 printf(" message arrived is : %.*s\n", message.payloadlen, message.payload);
irayya 0:c2a1e0a5d567 38 printf("%d\n", message.payloadlen);
irayya 0:c2a1e0a5d567 39
irayya 0:c2a1e0a5d567 40 memcpy(msg,message.payload, message.payloadlen); // copy the data from message payload to msg
irayya 1:903414009683 41 printf("Original message after subscription: %s", msg);
irayya 0:c2a1e0a5d567 42
irayya 1:903414009683 43 // printData(msg, 16);
irayya 0:c2a1e0a5d567 44
irayya 0:c2a1e0a5d567 45 printf("the msg is %s\n:", msg);
irayya 0:c2a1e0a5d567 46
irayya 1:903414009683 47
irayya 0:c2a1e0a5d567 48 char* encrypt = encryptData(msg); //encryptData() function for data encryption
irayya 0:c2a1e0a5d567 49 int x3,x4;
irayya 1:903414009683 50 memset(msg,'\0',sizeof(msg)); //clearing message
irayya 0:c2a1e0a5d567 51 //Print the encrypted message
irayya 0:c2a1e0a5d567 52 printf("Encrypted message: \"%s\"", encrypt);
irayya 1:903414009683 53 // printData(encrypt, sizeof(encrypt)); // printData() function for converting encrypted message to hex format
irayya 0:c2a1e0a5d567 54
irayya 0:c2a1e0a5d567 55 char* encrypt2 = encrypt; // crcCheck_transmit() for crc calculation
irayya 1:903414009683 56 char* crc_check2=crcCheck_transmit(encrypt2);
irayya 1:903414009683 57 out.printf("\n from transmit function");
irayya 1:903414009683 58 for(x3=0; x3<18; x3++) { // copy the encrypted data to another char array
irayya 1:903414009683 59 send_message[x3]=crc_check2[x3];
irayya 0:c2a1e0a5d567 60 }
irayya 0:c2a1e0a5d567 61
irayya 1:903414009683 62
irayya 0:c2a1e0a5d567 63 out.printf("\nThe final data to be sent is : %s",send_message);
irayya 1:903414009683 64 for(int k=0; k<19; k++) {
irayya 1:903414009683 65 wait_ms(50); //Wait for 20 milisecond
irayya 1:903414009683 66 //Print the character
irayya 1:903414009683 67 device.putc(send_message[k]); //Send the character via BLE
irayya 1:903414009683 68 }
irayya 1:903414009683 69 //device.printf(send_message);
irayya 0:c2a1e0a5d567 70
irayya 0:c2a1e0a5d567 71
irayya 0:c2a1e0a5d567 72 ++arrivedcount;
irayya 0:c2a1e0a5d567 73 }
irayya 0:c2a1e0a5d567 74 void baud(int baudrate)
irayya 0:c2a1e0a5d567 75 {
irayya 0:c2a1e0a5d567 76 Serial s(USBTX, USBRX);
irayya 0:c2a1e0a5d567 77 s.baud(baudrate);
irayya 0:c2a1e0a5d567 78 }
irayya 0:c2a1e0a5d567 79 int main (void)
irayya 0:c2a1e0a5d567 80 {
irayya 0:c2a1e0a5d567 81 //DHT sensor(D4, DHT11);
irayya 0:c2a1e0a5d567 82
irayya 1:903414009683 83 char* topic = "light"; //topic name for MQTT
irayya 0:c2a1e0a5d567 84 MQTTEthernet ipstack = MQTTEthernet();
irayya 0:c2a1e0a5d567 85 MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
irayya 1:903414009683 86 char* hostname = "172.16.73.4"; // MQTT broker address
irayya 0:c2a1e0a5d567 87 int port = 1883; //port no for broker
irayya 0:c2a1e0a5d567 88 int rc = ipstack.connect(hostname, port);
irayya 0:c2a1e0a5d567 89 if (rc == 0) // 0 means it ois connected (from TCP connect)
irayya 0:c2a1e0a5d567 90 printf("rc from TCP connect is %d\n", rc);
irayya 0:c2a1e0a5d567 91
irayya 0:c2a1e0a5d567 92
irayya 0:c2a1e0a5d567 93 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
irayya 0:c2a1e0a5d567 94 data.MQTTVersion = 3;
irayya 1:903414009683 95 data.clientID.cstring = "parents";
irayya 0:c2a1e0a5d567 96
irayya 0:c2a1e0a5d567 97 if ((rc = client.connect(data)) == 0) // 0 means it ois connected (from MQTT connect)
irayya 0:c2a1e0a5d567 98 out.printf("rc from MQTT connect is %d\n", rc);
irayya 0:c2a1e0a5d567 99
irayya 1:903414009683 100 if ((rc = client.subscribe(topic, MQTT::QOS0, messageArrived)) == 0) // subscribe to the topic by topic name
irayya 0:c2a1e0a5d567 101
irayya 0:c2a1e0a5d567 102 out.printf("rc from MQTT subscribe is %d\n", rc);
irayya 0:c2a1e0a5d567 103
irayya 0:c2a1e0a5d567 104
irayya 0:c2a1e0a5d567 105 MQTT::Message message;
irayya 0:c2a1e0a5d567 106 char buf[100];
irayya 0:c2a1e0a5d567 107 int error = 0;
irayya 0:c2a1e0a5d567 108
irayya 0:c2a1e0a5d567 109 h=0;
irayya 0:c2a1e0a5d567 110 int p=0;
irayya 0:c2a1e0a5d567 111 while (true) {
irayya 0:c2a1e0a5d567 112
irayya 0:c2a1e0a5d567 113 if(device.readable()) {
irayya 0:c2a1e0a5d567 114 p=0;
irayya 1:903414009683 115 bluetooth();
irayya 1:903414009683 116 //device.gets(dataReceive,19); // colling bluetooth() function for data reading from slave device
irayya 0:c2a1e0a5d567 117 out.printf("\nThe received message is : %s",dataReceive); // printing the message after data reading from slave device
irayya 0:c2a1e0a5d567 118
irayya 1:903414009683 119
irayya 1:903414009683 120 if(dataReceive[0]=='F' ) { // CRC failed message sending to the slave
irayya 1:903414009683 121 for(int q2=0; q2<19; q2++) {
irayya 1:903414009683 122 wait_ms(50);
irayya 1:903414009683 123 out.putc(send_message[q2]);
irayya 1:903414009683 124 device.putc(send_message[q2]);
irayya 1:903414009683 125 }
irayya 0:c2a1e0a5d567 126 }
irayya 0:c2a1e0a5d567 127
irayya 1:903414009683 128 else {
irayya 1:903414009683 129 for(int q1=0; q1<18; q1++) {
irayya 1:903414009683 130 rec_message[q1]=dataReceive[q1];
irayya 1:903414009683 131 p++;
irayya 1:903414009683 132 }
irayya 1:903414009683 133 out.printf("\nThe data to be CRC checked is : %s\n",rec_message);
irayya 1:903414009683 134 int flg=crcCheck_receive(rec_message); //calling crcCheck_receive() function for checking crc is ok or not
irayya 1:903414009683 135 memset(rec_message,'\0',sizeof(rec_message));
irayya 0:c2a1e0a5d567 136
irayya 1:903414009683 137 if(flg==0) { // checking flag for correct crc
irayya 1:903414009683 138 out.printf("\n CRC ok");
irayya 1:903414009683 139 for(int q=0; q<16; q++) { // for data storing in another char array by removing dummi start bits
irayya 1:903414009683 140 encData[q]=dataReceive[q];
irayya 1:903414009683 141 // out.printf("%c\n",dataReceive[q]);
irayya 1:903414009683 142 }
irayya 1:903414009683 143 out.printf("\nThe data to be decrypted is : %s",encData);
irayya 1:903414009683 144 char* decryptedData = decryptData(encData); // calling decryptData() function for decrypt the data
irayya 0:c2a1e0a5d567 145
irayya 1:903414009683 146 out.printf("\nThe final decrypted Data is: %s",decryptedData); // printing the decrypted data
irayya 1:903414009683 147 if(decryptedData[0]=='L' || decryptedData[0]=='0' || decryptedData[0]=='1' || decryptedData[0]=='2' || decryptedData[0]=='3' || decryptedData[0]=='4' || decryptedData[0]=='5' || decryptedData[0]=='6' || decryptedData[0]=='7' || decryptedData[0]=='8' || decryptedData[0]=='9' ) {
irayya 1:903414009683 148 message.qos = MQTT::QOS0;
irayya 1:903414009683 149 message.retained = false; //A retained message is a normal MQTT message with the retained flag set to true. The broker will store the last retained message and the corresponding QoS for that topic.
irayya 1:903414009683 150 // if it is false The broker will store the last retained message.
irayya 1:903414009683 151 message.dup = false; // the broker will not create duplicate message
irayya 1:903414009683 152 message.payload = (void*)decryptedData; // decrypting the message
irayya 0:c2a1e0a5d567 153
irayya 1:903414009683 154 message.payloadlen = strlen(decryptedData); // finding the length of the message
irayya 1:903414009683 155
irayya 1:903414009683 156 // rc = client.publish("/1/ON", message);
irayya 1:903414009683 157 rc = client.publish("/1/ON", message);
irayya 1:903414009683 158 //memset(send_message,'\0',sizeof(send_message));
irayya 0:c2a1e0a5d567 159
irayya 1:903414009683 160 } else {
irayya 1:903414009683 161 out.printf("\n Data is not correct");
irayya 1:903414009683 162 memset(dataReceive,'\0',sizeof(dataReceive));
irayya 1:903414009683 163 wait(5);
irayya 1:903414009683 164 for(int k3=0; k3<5; k3++) {
irayya 1:903414009683 165 wait_ms(50); //Wait for 20 milisecond
irayya 1:903414009683 166 //Print the character
irayya 1:903414009683 167 device.putc(crc_failed[k3]); //Send the character via BLE
irayya 1:903414009683 168 }
irayya 1:903414009683 169 }
irayya 1:903414009683 170 } else {
irayya 1:903414009683 171 memset(dataReceive,'\0',sizeof(dataReceive));
irayya 1:903414009683 172 memset(rec_message,'\0',sizeof(rec_message));
irayya 1:903414009683 173 out.printf("\n CRC failed");
irayya 1:903414009683 174 //device.printf("FCRC");
irayya 1:903414009683 175 wait(5);
irayya 1:903414009683 176 //device.printf(send_message);
irayya 1:903414009683 177 for(int k1=0; k1<5; k1++) {
irayya 1:903414009683 178 wait_ms(50); //Wait for 20 milisecond
irayya 1:903414009683 179 //Print the character
irayya 1:903414009683 180 device.putc(crc_failed[k1]); //Send the character via BLE
irayya 1:903414009683 181 }
irayya 1:903414009683 182 //device.printf("FCRC12435678901111!");
irayya 1:903414009683 183 //device.printf("CRC failed.......");
irayya 1:903414009683 184 /* if(send_message != NULL) //Condition for crc failed and sending ack or message
irayya 1:903414009683 185 {
irayya 1:903414009683 186 device.printf(send_message);
irayya 1:903414009683 187 }
irayya 1:903414009683 188 else
irayya 1:903414009683 189 {
irayya 1:903414009683 190 device.printf("FCRC");
irayya 1:903414009683 191 }*/
irayya 0:c2a1e0a5d567 192
irayya 1:903414009683 193 }
irayya 1:903414009683 194 }
irayya 0:c2a1e0a5d567 195 memset(dataReceive,'\0',sizeof(dataReceive)); // clearing the dataReceive buffer
irayya 0:c2a1e0a5d567 196 memset(msg,'\0',sizeof(msg)); // clearing the msg buffer
irayya 1:903414009683 197 memset(encData,'\0',sizeof(encData));
irayya 0:c2a1e0a5d567 198 }
irayya 0:c2a1e0a5d567 199 client.yield(20);
irayya 0:c2a1e0a5d567 200 }
irayya 0:c2a1e0a5d567 201 }
irayya 0:c2a1e0a5d567 202 void bluetooth() //bluetooth function for reading data from slave device
irayya 0:c2a1e0a5d567 203 {
irayya 0:c2a1e0a5d567 204 int z=0;
irayya 0:c2a1e0a5d567 205 while(1) {
irayya 0:c2a1e0a5d567 206 if(device.readable()) {
irayya 0:c2a1e0a5d567 207 char c=device.getc();
irayya 0:c2a1e0a5d567 208 if(c=='\0') { // if char is null then return to main function where it was called
irayya 0:c2a1e0a5d567 209 z=0;
irayya 0:c2a1e0a5d567 210 return;
irayya 0:c2a1e0a5d567 211 } else {
irayya 0:c2a1e0a5d567 212 dataReceive[z]=c; //
irayya 0:c2a1e0a5d567 213 printf("%c",c);
irayya 0:c2a1e0a5d567 214 z++;
irayya 0:c2a1e0a5d567 215 }
irayya 0:c2a1e0a5d567 216 }
irayya 0:c2a1e0a5d567 217 }
irayya 0:c2a1e0a5d567 218 }
irayya 0:c2a1e0a5d567 219