Jonathan Jones
/
Radios
Radio Structures in OOP
modules/CommLink/CommLink.h@2:7d523bdd2f50, 2014-12-28 (annotated)
- 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?
User | Revision | Line number | New 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 |