Robin Mechele / Mbed 2 deprecated Project_mbed

Dependencies:   EthernetInterface LM75B mbed-rtos mbed

Slave.cpp

Committer:
RobinMechele
Date:
2018-03-16
Revision:
2:ecc0c5c14bc1
Parent:
1:db9b9bec0133
Child:
3:fbf3c92f10ee

File content as of revision 2:ecc0c5c14bc1:

#include "slave.h"
#include "string.h"
#include "temperature.h"
#include "potentiometer.h"
#include "lcdcontrol.h"
#include "led.h"
#include "buzzer.h"

Temperature temperature;
Potentiometer potentiometer;
LcdControl screen;
Led led;
Buzzer buzzer;

Slave::Slave()
    :answer()
{
    //Constructor
}

void Slave::slaveRun(const char* ip)
{
    EthernetInterface ethernet;
    ethernet.init(ip,"255.255.255.0", "192.168.0.1");
    ethernet.connect();
    printf("Your ip is: %s", ethernet.getIPAddress());
    
    UDPSocket slave;
    slave.bind(4000);
    Endpoint master;
    
    while(1){
        char buffer[512] = {0};
        printf("\nWaiting for UDP packet...\n\r");
        
        int n = slave.receiveFrom(master, buffer, sizeof(buffer));
        buffer[n] = '\0';
        
        printf("Received packet from: %s\n\r", master.get_address());
        printf("Received: '%s'\r\n", buffer);
        actionSlave(buffer);
        
        slave.sendTo(master, answer, 50);
        answerReset();
    }
}

void Slave::actionSlave(const char* bufferke){
    char* command = strtok((char*)bufferke, " ");
    char* action = strtok(NULL, " ");
    if(strcmp(command, "GET") == 0)
    {
        getRequest(action);
    }
    else 
    if(strcmp(command, "PUT") == 0)
    {
        putRequest(action);
    }
    else
    {
        answerAppend("ACK 4.0 ID");
    }
}

void Slave::getRequest(char* action)
{
    char temp[8];
    if(strcmp(action, "/temperature") == 0)
    {
        sprintf(temp, "%.3f", temperature.getTemperature());
        answerAppend("ACK 2.05 ID ");
        answerAppend(temp);
    }
    else 
    if(strcmp(action, "/potentiometer") == 0)
    {
        sprintf(temp, "%.0f", potentiometer.getPotentiometer()*255);
        answerAppend("ACK 2.05 ID ");
        answerAppend(temp);
    }
    else
    {
       answerAppend("ACK 4.0 ID");
    }
}

void Slave::putRequest(char* action)
{
    if(strcmp(action, "/lcd") == 0)
    {
        answerAppend("ACK 2.04 ID");
        screen.lcdSlave(strtok(NULL, "\0"));
    }
    else 
    if(strcmp(action, "/led") == 0)
    {
        answerAppend("ACK 2.04 ID");
        led.setColor(strtok(NULL, " "));
    }
    else
    if(strcmp(action, "/buzzer") == 0)
    {
        answerAppend("ACK 2.04 ID");
        int one = atoi(strtok(NULL, " -"));
        int two = atoi(strtok(NULL, " -"));
        printf("%d %d", one,two);
        buzzer.playBuzzer(one, two);
    }
    else
    {
       answerAppend("ACK 4.0 ID");
    }
}

void Slave::answerAppend(char* append)
{
    strcat(answer, append);
}

void Slave::answerReset(){
    for(int i = 0; i < 512; i++)
    {
        answer[i] = NULL;
    }
}