Radio Structures in OOP

Dependencies:   mbed mbed-rtos

Committer:
jjones646
Date:
Sat Jan 03 04:35:32 2015 +0000
Revision:
3:dc7e9c6bc26c
Parent:
2:7d523bdd2f50
Child:
4:989d51f3e6ef
updating with threaded tasks for communication classes

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 3:dc7e9c6bc26c 4
jjones646 2:7d523bdd2f50 5 #include "mbed.h"
jjones646 2:7d523bdd2f50 6 #include "cmsis_os.h"
jjones646 2:7d523bdd2f50 7 #include "RTP.h"
jjones646 2:7d523bdd2f50 8 #include "ThreadHelper.h"
jjones646 3:dc7e9c6bc26c 9 #include "MailHelper.h"
jjones646 3:dc7e9c6bc26c 10
jjones646 3:dc7e9c6bc26c 11
jjones646 3:dc7e9c6bc26c 12 //#ifdef COMM_INCLUDES
jjones646 3:dc7e9c6bc26c 13 //#undef COMM_INCLUDES
jjones646 3:dc7e9c6bc26c 14 //class CommModule;
jjones646 3:dc7e9c6bc26c 15 //#else
jjones646 3:dc7e9c6bc26c 16 #include "CommModule.h"
jjones646 3:dc7e9c6bc26c 17 //#endif
jjones646 3:dc7e9c6bc26c 18
jjones646 2:7d523bdd2f50 19
jjones646 2:7d523bdd2f50 20 #define COMM_LINK_TX_QUEUE_SIZE 3
jjones646 2:7d523bdd2f50 21 #define COMM_LINK_RX_QUEUE_SIZE 3
jjones646 3:dc7e9c6bc26c 22 #define COMM_LINK_SIGNAL_START_THREAD 0x01
jjones646 3:dc7e9c6bc26c 23 #define COMM_LINK_SIGNAL_INTERRUPT_TRIGGER 0x02
jjones646 3:dc7e9c6bc26c 24 #define COMM_LINK_SIGNAL_MODULE_LINKED 0x04
jjones646 3:dc7e9c6bc26c 25 #define COMM_LINK_BUFFER_SIZE 64
jjones646 3:dc7e9c6bc26c 26
jjones646 2:7d523bdd2f50 27
jjones646 2:7d523bdd2f50 28 class CommLink
jjones646 2:7d523bdd2f50 29 {
jjones646 2:7d523bdd2f50 30 public:
jjones646 2:7d523bdd2f50 31 // Default constructor
jjones646 2:7d523bdd2f50 32 CommLink();
jjones646 2:7d523bdd2f50 33
jjones646 3:dc7e9c6bc26c 34 CommLink(PinName, PinName, PinName, PinName = NC, PinName = NC);
jjones646 3:dc7e9c6bc26c 35
jjones646 2:7d523bdd2f50 36 // Deconstructor
jjones646 3:dc7e9c6bc26c 37 virtual ~CommLink(){};
jjones646 2:7d523bdd2f50 38
jjones646 2:7d523bdd2f50 39 // Class constants for the data queue sizes
jjones646 2:7d523bdd2f50 40 static const int TX_QUEUE_SIZE;
jjones646 2:7d523bdd2f50 41 static const int RX_QUEUE_SIZE;
jjones646 2:7d523bdd2f50 42
jjones646 2:7d523bdd2f50 43 // The pure virtual methods for making CommLink an abstract class
jjones646 2:7d523bdd2f50 44 virtual uint32_t reset(void) = 0;
jjones646 2:7d523bdd2f50 45 virtual uint32_t selfTest(void) = 0;
jjones646 2:7d523bdd2f50 46 virtual bool isConnected(void) = 0;
jjones646 3:dc7e9c6bc26c 47
jjones646 3:dc7e9c6bc26c 48 void module(CommModule&);
jjones646 2:7d523bdd2f50 49
jjones646 3:dc7e9c6bc26c 50 void write_tx_queue(RTP_t*);
jjones646 2:7d523bdd2f50 51
jjones646 2:7d523bdd2f50 52 protected:
jjones646 3:dc7e9c6bc26c 53 virtual int32_t sendData(uint8_t*, uint8_t) = 0; // write data out to the radio device using SPI
jjones646 3:dc7e9c6bc26c 54 virtual int32_t getData(uint8_t*, uint8_t*) = 0; // read data in from the radio device using SPI
jjones646 2:7d523bdd2f50 55
jjones646 3:dc7e9c6bc26c 56 virtual void ISR(void);
jjones646 3:dc7e9c6bc26c 57 void toggle_cs(void);
jjones646 3:dc7e9c6bc26c 58 void ready(void);
jjones646 3:dc7e9c6bc26c 59
jjones646 2:7d523bdd2f50 60 // The data queues for temporarily holding received packets and packets that need to be transmitted
jjones646 2:7d523bdd2f50 61 osMailQId _txQueue;
jjones646 2:7d523bdd2f50 62 osMailQId _rxQueue;
jjones646 2:7d523bdd2f50 63
jjones646 3:dc7e9c6bc26c 64 // ============== PIN NAMES ==============
jjones646 3:dc7e9c6bc26c 65 // SPI bus pins
jjones646 3:dc7e9c6bc26c 66 PinName _miso_pin;
jjones646 3:dc7e9c6bc26c 67 PinName _mosi_pin;
jjones646 3:dc7e9c6bc26c 68 PinName _sck_pin;
jjones646 3:dc7e9c6bc26c 69 PinName _cs_pin; // CS pin
jjones646 3:dc7e9c6bc26c 70 PinName _int_pin; // Interrupt pin
jjones646 3:dc7e9c6bc26c 71
jjones646 3:dc7e9c6bc26c 72 // ============== PIN OBJECTS ==============
jjones646 3:dc7e9c6bc26c 73 SPI *_spi; // SPI pointer
jjones646 3:dc7e9c6bc26c 74 DigitalOut *_cs; // Chip Select pointer
jjones646 3:dc7e9c6bc26c 75 InterruptIn *_int_in; // Interrupt pin
jjones646 3:dc7e9c6bc26c 76
jjones646 2:7d523bdd2f50 77 private:
jjones646 2:7d523bdd2f50 78 // Used to help define the class's threads in the constructor
jjones646 2:7d523bdd2f50 79 friend void define_thread(osThreadDef_t&, void(*task)(void const *arg), osPriority, uint32_t, unsigned char*);
jjones646 3:dc7e9c6bc26c 80
jjones646 3:dc7e9c6bc26c 81 MailHelper<RTP_t, COMM_LINK_TX_QUEUE_SIZE> _txQueueHelper;
jjones646 3:dc7e9c6bc26c 82 MailHelper<RTP_t, COMM_LINK_RX_QUEUE_SIZE> _rxQueueHelper;
jjones646 2:7d523bdd2f50 83
jjones646 2:7d523bdd2f50 84 // The working threads for handeling rx and tx data queues
jjones646 2:7d523bdd2f50 85 static void txThread(void const*);
jjones646 2:7d523bdd2f50 86 static void rxThread(void const*);
jjones646 2:7d523bdd2f50 87
jjones646 3:dc7e9c6bc26c 88 // methods for initializing the pins
jjones646 3:dc7e9c6bc26c 89 void setup(void);
jjones646 3:dc7e9c6bc26c 90 void setup_pins(PinName = NC, PinName = NC, PinName = NC, PinName = NC, PinName = NC);
jjones646 3:dc7e9c6bc26c 91 void setup_spi(void);
jjones646 3:dc7e9c6bc26c 92 void setup_cs(void);
jjones646 3:dc7e9c6bc26c 93 void setup_interrupt(void);
jjones646 3:dc7e9c6bc26c 94
jjones646 3:dc7e9c6bc26c 95 typedef void(*func_p)(void const*);
jjones646 3:dc7e9c6bc26c 96 func_p _rx_handle;
jjones646 3:dc7e9c6bc26c 97
jjones646 3:dc7e9c6bc26c 98 uint8_t buf[COMM_LINK_BUFFER_SIZE];
jjones646 3:dc7e9c6bc26c 99
jjones646 3:dc7e9c6bc26c 100 static unsigned int _nbr_links;
jjones646 3:dc7e9c6bc26c 101
jjones646 2:7d523bdd2f50 102 // Thread definitions and IDs
jjones646 2:7d523bdd2f50 103 osThreadDef_t _txDef;
jjones646 2:7d523bdd2f50 104 osThreadDef_t _rxDef;
jjones646 2:7d523bdd2f50 105 osThreadId _txID;
jjones646 2:7d523bdd2f50 106 osThreadId _rxID;
jjones646 3:dc7e9c6bc26c 107
jjones646 3:dc7e9c6bc26c 108 //static CommModule *_comm_module;
jjones646 3:dc7e9c6bc26c 109
jjones646 3:dc7e9c6bc26c 110 public:
jjones646 3:dc7e9c6bc26c 111 void sendPacket(RTP_t*);
jjones646 3:dc7e9c6bc26c 112 void receivePacket(RTP_t*);
jjones646 2:7d523bdd2f50 113 };
jjones646 2:7d523bdd2f50 114
jjones646 2:7d523bdd2f50 115 #endif // COMMUNICATION_LINK_H