Penn Electric Racing / Mbed 2 deprecated SystemManagement

Dependencies:   mbed CANBuffer Watchdog MODSERIAL mbed-rtos xbeeRelay IAP

Fork of SystemManagement by Martin Deng

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers XbeeManager.cpp Source File

XbeeManager.cpp

00001 #include "XbeeManager.h"
00002 
00003 XbeeManager::XbeeManager(PinName tx1, PinName rx1, PinName tx2, PinName rx2, int baud, int txSize, int rxSize) :
00004                         x1(tx1, rx1, baud, txSize, rxSize), x2(tx2, rx2, baud, txSize, rxSize)
00005 {
00006     alternate = false;
00007     extraAvail = false;
00008     counterX1in = 0;
00009     counterX2in = 0;
00010     counterX1out = 0;
00011     counterX2out = 0;
00012     bytesX1out = 0;
00013     bytesX2out = 0;
00014 }
00015 
00016 bool XbeeManager::send(CANMessage &msg)
00017 {
00018     alternate = !alternate;
00019     unsigned int length;
00020     if (alternate) {
00021         if (x1.send(msg, &length)) {
00022             counterX1out++;
00023             bytesX1out += length;
00024             return true;   
00025         }
00026     } else {
00027         if (x2.send(msg, &length)) {
00028             counterX2out++;
00029             bytesX2out += length;
00030             return true;
00031         }
00032     }
00033     return false;
00034 }
00035 
00036 bool XbeeManager::receive(CANMessage &msg)
00037 {
00038     if (extraAvail) {
00039         extraAvail = false;
00040         memcpy((void*)&msg, (void*)&extra, sizeof(CANMessage));
00041         counterX2in++;
00042         return true;
00043     }
00044     if (x1.receive(msg)) {
00045         if (x2.receive(extra)) {
00046             extraAvail = true;
00047         }
00048         counterX1in++;
00049         return true;
00050     } else {
00051         if (x2.receive(msg)) {
00052             counterX2in++;
00053             return true;   
00054         }
00055     }
00056     return false;
00057 }