APP3 / Mbed 2 deprecated com_xbee

Dependencies:   mbed mbed-rtos

main.cpp

Committer:
ShaolinPoutine
Date:
2017-02-13
Revision:
1:318ad4f36a90
Parent:
0:25f9d14d01bd
Child:
2:c6d623a30254
Child:
3:5010d20e681f

File content as of revision 1:318ad4f36a90:

#include "mbed.h"
#define FRAMEDELIMITER 0x7E
#include "rtos.h"

// 4269
DigitalOut resetswitch(p8);
Serial xbee(p13, p14);
Serial pc(USBTX, USBRX);
DigitalOut myled(LED1);

int StartAPIMode ()
{
    char reponse[4] = {42,42,42,'\0'};
    
    wait(1);
    xbee.putc('+');
    xbee.putc('+');
    xbee.putc('+');
    wait(0.5);
    
    int i = 0;
    
    while (i < 4)
    {
        reponse[i] = xbee.getc();
        pc.putc(reponse[i]);
        i++;
    }
    
    return reponse[1];
}

int CalculateChecksum()
{
    // Does not include frame delimiter and lenght
    return 1;
}

int CalculateLenght()
{
    // Calculate the number of bytes in the frame data
    return 1;
}

void printhexa(char c)
{
    char msb = c >> 4;
    char lsb = c & 0xF;
    
    if (msb < 10)
        msb += 0x30;
    else
        msb += 0x37;
        
    if (lsb < 10)
        lsb += 0x30;
    else
        lsb += 0x37;
    
    pc.putc('0');
    pc.putc('x');
    pc.putc(msb);
    pc.putc(lsb);
    pc.putc(' ');
}

void GetATResponse()
{
    char start = xbee.getc(); // = FRAMEDELIMITER
    //assert
    char len_msb = xbee.getc();
    char len_lsb = xbee.getc();
    
    int len = ((int) len_msb << 4) + (int) len_lsb;
    char frame_data[len];
    int i = 0;
    pc.printf("%d : ", len);
    while (i < len)
    {
        if (xbee.readable())
        {   
            frame_data[i] = xbee.getc();
            printhexa(frame_data[i]);
            i++;
        }
    }
    
    char checksum = xbee.getc();
    // Verify checksum
    pc.printf(" checksum = ");
    printhexa(checksum);
    pc.printf("\r\n");
}

void ReadSerial()
{
    // 00 13 A2 00 
    // 40 3E 09 63
    char cmdtosend[8];
    int i = 0;
    
    cmdtosend[0] = FRAMEDELIMITER;
    cmdtosend[1] = 0x00;
    cmdtosend[2] = 0x04;
    cmdtosend[3] = 0x08;
    cmdtosend[4] = 0x52;
    cmdtosend[5] = 'S'; // 0x53
    cmdtosend[6] = 'L'; // 0x48
    cmdtosend[7] = 0xFF - (cmdtosend[3]+cmdtosend[4]+cmdtosend[5]+cmdtosend[6]);
    
    while (i < 8)
    {
        xbee.putc(cmdtosend[i]);
        i++;
    }
    
    wait(0.5);
    i = 0;
    cmdtosend[0] = FRAMEDELIMITER;
    cmdtosend[1] = 0x00;
    cmdtosend[2] = 0x04;
    cmdtosend[3] = 0x08;
    cmdtosend[4] = 0x52;
    cmdtosend[5] = 'S'; // 0x53
    cmdtosend[6] = 'H'; // 0x48
    cmdtosend[7] = 0xFF - (cmdtosend[3]+cmdtosend[4]+cmdtosend[5]+cmdtosend[6]);
    
    while (i < 8)
    {
        xbee.putc(cmdtosend[i]);
        i++;
    }
}


void xbee_reader()
{
    while(1)
    {
        if (xbee.readable())
        {
            GetATResponse();
        }
        wait(0.001);   
    }
}

void tick()
{
    myled = !myled;   
}

int main() {
    Thread thread(xbee_reader);
    Ticker ticker;
    ticker.attach(&tick, 1);
    pc.printf("\r\n");
    resetswitch = 0;
    wait(0.4);
    resetswitch = 1;
    
    wait(3);

    ReadSerial();
    
    while(1) {
    }
}