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
Diff: slave.cpp
- 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;