Slave

Slave.cpp

Committer:
williequesada
Date:
2019-06-04
Revision:
0:cb801dad3124

File content as of revision 0:cb801dad3124:

#include "Slave.h"
#include "mbed.h"
#include "stdio.h"

#define     NEXT_STEP           0x85
#define     NEXT_SLEEP          0x86
#define     NO_DATA             0x87


char Slave_Buffer[255];
int  Slave_Counter=0;

SLAVE::SLAVE(PinName TX, PinName RX,PinName AWAKE):Uart(TX,RX),_AWAKE(AWAKE)
{
    _AWAKE=0;
    Uart.attach(this,&SLAVE::UartInterruption);
}

bool SLAVE::Available()
{
    if(Slave_Counter>0) {
        return 1;
    } else {
        return 0;
    }
}

bool SLAVE::Mensaje()
{
    if(Slave_Counter>4) {
        return 1;
    } else {
        return 0;
    }
}


void SLAVE::Command(uint8_t _Command)
{
    if(Uart.writeable()) {
        Uart.putc(_Command);
    } else {
        wait_ms(500);
        if(Uart.writeable()) {
            Uart.putc(_Command);
        }
    }
}

void SLAVE::Send_Hosting(char Parquimetro[],char Municipio[],char Estado[])
{
    if(Uart.writeable()) {
        Uart.printf("%s",Municipio);
        Uart.printf("%s",Estado);
        Uart.printf("%s",Parquimetro);
    } else {
        wait_ms(500);
        if(Uart.writeable()) {
            Uart.printf("%s",Municipio);
            Uart.printf("%s",Estado);
            Uart.printf("%s",Parquimetro);
        }
    }
}

void SLAVE::Send_User(char Parquimetro[],char Municipio[],int Tiempo,char Espacio[],char Track2[])
{
    if(Uart.writeable()) {
        Uart.printf("%s",Municipio);
        Uart.printf("%s",Espacio);
        Uart.printf("%s",Parquimetro);
        if(Tiempo<100) {
            Uart.putc('0');
            Uart.printf("%i",Tiempo);
        } else {
            Uart.printf("%i",Tiempo);
        }
        Uart.printf("%s",Track2);
    } else {
        wait_ms(500);
        if(Uart.writeable()) {
            Uart.printf("%s",Municipio);
            Uart.printf("%s",Espacio);
            Uart.printf("%s",Parquimetro);
            if(Tiempo<100) {
                Uart.putc('0');
                Uart.printf("%i",Tiempo);
            } else {
                Uart.printf("%i",Tiempo);
            }
            Uart.printf("%s",Track2);
        }
    }
}

char SLAVE::Recibe()
{
    if(Slave_Counter>0) {
        Slave_Counter--;
        return Slave_Buffer[Slave_Counter];
    } else {
        return NO_DATA;
    }
}

bool SLAVE::Answer()
{
    if(Slave_Counter>0) {
        Slave_Counter--;
        if(Slave_Buffer[Slave_Counter]==NEXT_STEP) {
            return 1;
        } else {
            return 0;
        }
    }
    return 0;
}

void SLAVE::Awake()
{
    _AWAKE=1;
    wait_us(50);
    _AWAKE=0;
}

void SLAVE::Sleep()
{
    if(Uart.writeable()) {
        Uart.putc(NEXT_SLEEP);
    } else {
        wait_ms(500);
        if(Uart.writeable()) {
            Uart.putc(NEXT_SLEEP);
        }
    }

}

void SLAVE::UartInterruption()
{
    if(Uart.readable()) {
        Slave_Buffer[Slave_Counter]=Uart.getc();
        Slave_Counter++;
    }
}