Part One of my Project Course. Implementation of simple I/O and a custom defined protocol over UDP/IP.

Dependencies:   C12832 LM75B mbed EthernetInterface mbed-rtos

Revision:
2:6bfe732ba6bc
Parent:
1:b5c534165dfe
Child:
3:538e17979246
--- a/slave.cpp	Wed Mar 14 07:59:21 2018 +0000
+++ b/slave.cpp	Mon Mar 19 11:32:54 2018 +0000
@@ -27,8 +27,9 @@
     
     void Slave::handleIncomingFrame(void){
         char in_buffer[MAX_PACKET_SIZE];
-        char *command_info[3];
-        char ip_address[] = {'1','9','2','.','1','6','8','.','0','.','x','x','x'};
+        //char *command_info[3];
+        //char ip_address[] = {'1','9','2','.','1','6','8','.','0','.','x','x','x'};
+        char ack_id[3];
         switch(CurrentSlaveState){
             case STATE_INIT:
             {
@@ -36,6 +37,19 @@
                 printf("Initiating slave\r\n");
                 printf("----------------\r\n");
                 
+                memset(&ip_address[0], 0, sizeof(ip_address));
+                
+                ip_address[0] = '1';
+                ip_address[1] = '9';
+                ip_address[2] = '2';
+                ip_address[3] = '.';
+                ip_address[4] = '1';
+                ip_address[5] = '6';
+                ip_address[6] = '8';
+                ip_address[7] = '.';
+                ip_address[8] = '0';
+                ip_address[9] = '.';
+                
                 int temp[3];
                 int i = 0;
                 do{
@@ -46,17 +60,21 @@
                 
                 char tempi[4];
                 sprintf(tempi, "%ld", temp[2]);
-                ip_address[10] = *tempi;
+                ip_address[10] = *tempi; 
                 sprintf(tempi, "%ld", temp[1]);
-                ip_address[11] = *tempi;
+                ip_address[11] = *tempi; 
                 sprintf(tempi, "%ld", temp[0]);
-                ip_address[12] = *tempi;
-
+                ip_address[12] = *tempi; 
+                
+                ip_address[13] = '\0';
+                
                 eth_slave.init(ip_address, MASK, GATEWAY);
                 eth_slave.connect();
                 
                 sock_slave.bind(4000);
                 
+                command_info[0] = 0;
+                
                 CurrentSlaveState = STATE_WAIT_FOR_FRAME;
                 break;
             }
@@ -71,14 +89,21 @@
             case STATE_HANDLE_FRAME:
             {
                 printf("Received message from server: '%s'\r\n", in_buffer);
-
-                int i = 0;
-                char *p = strtok (in_buffer, " ");
-                while (p != NULL)
-                {
-                    command_info[i++] = p;
-                    p = strtok (NULL, " ");
-                }
+                
+                char *p = strtok(in_buffer, " ");
+                command_info[0] = p;
+                printf("Eerste strtok: '%s'\r\n", command_info[0]);
+                char *q = strtok(NULL, " ");
+                command_info[1] = q;
+                printf("Tweede strtok: '%s'\r\n", command_info[1]);
+                char *s = strtok(NULL, '\0');
+                command_info[2] = s;
+                printf("Derde strtok: '%s'\r\n", command_info[2]);
+                
+                
+                ack_id[0] = ip_address[10];
+                ack_id[1] = ip_address[11];
+                ack_id[2] = ip_address[12];
                 
                 CurrentSlaveState = STATE_HANDLE_REQUEST;
                 break;
@@ -92,46 +117,46 @@
                 
                 response = "";
                 
-                if(strcmp(command_info[0], "/PUT") == 0){
-                    if(strcmp(command_info[1], "LCD") == 0){
+                if(strcmp(command_info[0], "PUT") == 0){
+                    if(strcmp(command_info[1], "/LCD") == 0){
                         slaveLcd->displayChars(command_info[2]); 
-                        response.append("ACK").append(" ").append("2.04").append(" ").append("101").append("");
+                        response.append("ACK").append(" ").append("2.04").append(" ").append(ack_id).append("");
                     }
-                    else if(strcmp(command_info[1], "LED") == 0){
+                    else if(strcmp(command_info[1], "/LED") == 0){
                         string kleurtje(command_info[2]);
                         slaveRgb->turnOnLed(kleurtje);
-                        response.append("ACK").append(" ").append("2.04").append(" ").append("101").append("");
+                        response.append("ACK").append(" ").append("2.04").append(" ").append(ack_id).append("");
                     }
-                    else if(strcmp(command_info[1], "BUZZER") == 0){
+                    else if(strcmp(command_info[1], "/BUZZER") == 0){
                         string indexes(command_info[2]);
                         slaveBuzzerMusic->playMusic(indexes);
-                        response.append("ACK").append(" ").append("2.04").append(" ").append("101").append("");
+                        response.append("ACK").append(" ").append("2.04").append(" ").append(ack_id).append("");
                     }
                     else
                     {
-                    response.append("ACK").append(" ").append("4.0").append(" ").append("101");
+                    response.append("ACK").append(" ").append("4.0").append("").append(ack_id);
                     }
 
                 }
-                else if(strcmp(command_info[0], "/GET") == 0){
-                    if(strcmp(command_info[1], "temperature") == 0){
+                else if(strcmp(command_info[0], "GET") == 0){
+                    if(strcmp(command_info[1], "/temperature") == 0){
                         temperatureValue = slaveTemp->readTemperature();
                         char temp[] = "";
                         sprintf(temp, "%.3f", temperatureValue);
-                        response.append("ACK").append(" ").append("2.5").append(" ").append("101").append(" ").append(temp);
+                        response.append("ACK").append(" ").append("2.05").append(" ").append(ack_id).append(" ").append(temp);
                     }
-                    else if(strcmp(command_info[1], "potentiometer") == 0){
+                    else if(strcmp(command_info[1], "/potentiometer") == 0){
                          potentiometerValue = slavePot->getPotValue();
                          char temp[] = "";
                          sprintf(temp, "%.3f", potentiometerValue);
-                         response.append("ACK").append(" ").append("2.5").append(" ").append("101").append(" ").append(temp);
+                         response.append("ACK").append(" ").append("2.05").append(" ").append(ack_id).append(" ").append(temp);
                     }
                     else{
-                        response.append("ACK").append(" ").append("4.0").append(" ").append("101");
+                        response.append("ACK").append(" ").append("4.0").append(" ").append(ack_id);
                     }
                 }
                 else{
-                    response.append("ACK").append(" ").append("4.0").append(" ").append("101");
+                    response.append("ACK").append(" ").append("4.0").append(" ").append(ack_id);
                 }
                 CurrentSlaveState = STATE_SEND_ACKNOWLEDGEMENT;
                 break;