Radio Structures in OOP

Dependencies:   mbed mbed-rtos

Committer:
jjones646
Date:
Thu Jan 15 07:15:33 2015 +0000
Revision:
6:4a3dbfbc30f1
Parent:
5:146523a0d1f4
socket interface confirmed working.

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