Radio Structures in OOP

Dependencies:   mbed mbed-rtos

Committer:
jjones646
Date:
Sun Dec 28 06:05:17 2014 +0000
Revision:
2:7d523bdd2f50
Child:
3:dc7e9c6bc26c
outlining communication implementations

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jjones646 2:7d523bdd2f50 1 #ifndef COMMUNICATION_LINK_H
jjones646 2:7d523bdd2f50 2 #define COMMUNICATION_LINK_H
jjones646 2:7d523bdd2f50 3
jjones646 2:7d523bdd2f50 4 #include "mbed.h"
jjones646 2:7d523bdd2f50 5 #include "cmsis_os.h"
jjones646 2:7d523bdd2f50 6 #include "RTP.h"
jjones646 2:7d523bdd2f50 7 #include "ThreadHelper.h"
jjones646 2:7d523bdd2f50 8
jjones646 2:7d523bdd2f50 9 #define COMM_LINK_TX_QUEUE_SIZE 3
jjones646 2:7d523bdd2f50 10 #define COMM_LINK_RX_QUEUE_SIZE 3
jjones646 2:7d523bdd2f50 11
jjones646 2:7d523bdd2f50 12 class CommLink
jjones646 2:7d523bdd2f50 13 {
jjones646 2:7d523bdd2f50 14 public:
jjones646 2:7d523bdd2f50 15 // Default constructor
jjones646 2:7d523bdd2f50 16 CommLink();
jjones646 2:7d523bdd2f50 17
jjones646 2:7d523bdd2f50 18 // Deconstructor
jjones646 2:7d523bdd2f50 19 virtual ~CommLink();
jjones646 2:7d523bdd2f50 20
jjones646 2:7d523bdd2f50 21 // Class constants for the data queue sizes
jjones646 2:7d523bdd2f50 22 static const int TX_QUEUE_SIZE;
jjones646 2:7d523bdd2f50 23 static const int RX_QUEUE_SIZE;
jjones646 2:7d523bdd2f50 24
jjones646 2:7d523bdd2f50 25 // Used to ensure only one (1) hardware link is communicating at any given time
jjones646 2:7d523bdd2f50 26 uint32_t enable(bool);
jjones646 2:7d523bdd2f50 27
jjones646 2:7d523bdd2f50 28 // The pure virtual methods for making CommLink an abstract class
jjones646 2:7d523bdd2f50 29 virtual uint32_t sendPacket(RTP_t*) = 0;
jjones646 2:7d523bdd2f50 30 virtual uint32_t receivePacket(void) = 0;
jjones646 2:7d523bdd2f50 31 virtual uint32_t reset(void) = 0;
jjones646 2:7d523bdd2f50 32 virtual uint32_t selfTest(void) = 0;
jjones646 2:7d523bdd2f50 33 virtual bool isConnected(void) = 0;
jjones646 2:7d523bdd2f50 34
jjones646 2:7d523bdd2f50 35 // Used for getting a reference to the current running communication object
jjones646 2:7d523bdd2f50 36 // This may not be needed?
jjones646 2:7d523bdd2f50 37 CommLink& getLink(void) {
jjones646 2:7d523bdd2f50 38 return *this;
jjones646 2:7d523bdd2f50 39 }
jjones646 2:7d523bdd2f50 40
jjones646 2:7d523bdd2f50 41 protected:
jjones646 2:7d523bdd2f50 42 // Used for keeping track of many physical communication links
jjones646 2:7d523bdd2f50 43 bool _enabled;
jjones646 2:7d523bdd2f50 44
jjones646 2:7d523bdd2f50 45 // Used for determining if a physical hardware link is initialized and the tx/rx task threads are ready to begin operation
jjones646 2:7d523bdd2f50 46 bool _isInit;
jjones646 2:7d523bdd2f50 47
jjones646 2:7d523bdd2f50 48 // The data queues for temporarily holding received packets and packets that need to be transmitted
jjones646 2:7d523bdd2f50 49 osMailQId _txQueue;
jjones646 2:7d523bdd2f50 50 osMailQId _rxQueue;
jjones646 2:7d523bdd2f50 51
jjones646 2:7d523bdd2f50 52 private:
jjones646 2:7d523bdd2f50 53 // Used to help define the class's threads in the constructor
jjones646 2:7d523bdd2f50 54 friend void define_thread(osThreadDef_t&, void(*task)(void const *arg), osPriority, uint32_t, unsigned char*);
jjones646 2:7d523bdd2f50 55
jjones646 2:7d523bdd2f50 56 // The working threads for handeling rx and tx data queues
jjones646 2:7d523bdd2f50 57 static void txThread(void const*);
jjones646 2:7d523bdd2f50 58 static void rxThread(void const*);
jjones646 2:7d523bdd2f50 59
jjones646 2:7d523bdd2f50 60 // Thread definitions and IDs
jjones646 2:7d523bdd2f50 61 osThreadDef_t _txDef;
jjones646 2:7d523bdd2f50 62 osThreadDef_t _rxDef;
jjones646 2:7d523bdd2f50 63 osThreadId _txID;
jjones646 2:7d523bdd2f50 64 osThreadId _rxID;
jjones646 2:7d523bdd2f50 65 };
jjones646 2:7d523bdd2f50 66
jjones646 2:7d523bdd2f50 67 #endif // COMMUNICATION_LINK_H