Penn Electric Racing / Mbed 2 deprecated SystemManagement

Dependencies:   mbed CANBuffer Watchdog MODSERIAL mbed-rtos xbeeRelay IAP

Fork of SystemManagement by Martin Deng

Libs/XbeeManager/XbeeManager.cpp

Committer:
pspatel321
Date:
2015-01-07
Revision:
34:18bcf276d3bf
Parent:
33:6bc82b6b62e5
Child:
38:8efacce315ae

File content as of revision 34:18bcf276d3bf:

#include "XbeeManager.h"

XbeeManager::XbeeManager(PinName tx1, PinName rx1, PinName tx2, PinName rx2, int baud, int txSize, int rxSize) :
                        x1(tx1, rx1, baud, txSize, rxSize), x2(tx2, rx2, baud, txSize, rxSize)
{
    
    alternate = false;
    extraAvail = false;
    counterX1in = 0;
    counterX2in = 0;
    counterX1out = 0;
    counterX2out = 0;
}

bool XbeeManager::send(CANMessage &msg)
{
    alternate = !alternate;
    if (alternate) {
        if (x1.send(msg)) {
            counterX1out++;
            return true;   
        }
    } else {
        if (x2.send(msg)) {
            counterX2out++;
            return true;   
        }
    }
    return false;
}

bool XbeeManager::receive(CANMessage &msg)
{
    if (extraAvail) {
        extraAvail = false;
        memcpy((void*)&msg, (void*)&extra, sizeof(CANMessage));
        counterX2in++;
        return true;
    }
    if (x1.receive(msg)) {
        if (x2.receive(extra)) {
            extraAvail = true;
        }
        counterX1in++;
        return true;
    } else {
        if (x2.receive(msg)) {
            counterX2in++;
            return true;   
        }
    }
    return false;
}