For robots and stuff

Dependents:   Base Station

Committer:
jjones646
Date:
Sun Dec 28 06:27:18 2014 +0000
Revision:
0:c5afea7b9057
initial commit;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jjones646 0:c5afea7b9057 1 #ifndef RADIO_H
jjones646 0:c5afea7b9057 2 #define RADIO_H
jjones646 0:c5afea7b9057 3
jjones646 0:c5afea7b9057 4 #if 0
jjones646 0:c5afea7b9057 5
jjones646 0:c5afea7b9057 6 #include "mbed.h"
jjones646 0:c5afea7b9057 7 #include "rtos.h"
jjones646 0:c5afea7b9057 8
jjones646 0:c5afea7b9057 9 // THREAD SUPPORT SIGNALS
jjones646 0:c5afea7b9057 10 #define START_THREAD 0x01
jjones646 0:c5afea7b9057 11 #define NEW_DATA 0x02
jjones646 0:c5afea7b9057 12 #define SET_LED_TICK 0x04
jjones646 0:c5afea7b9057 13
jjones646 0:c5afea7b9057 14 typedef struct RTP_t {
jjones646 0:c5afea7b9057 15 uint8_t *payload;
jjones646 0:c5afea7b9057 16 uint8_t port;
jjones646 0:c5afea7b9057 17 bool ack;
jjones646 0:c5afea7b9057 18 uint8_t destination;
jjones646 0:c5afea7b9057 19 uint8_t source;
jjones646 0:c5afea7b9057 20 uint8_t size;
jjones646 0:c5afea7b9057 21 } RTP_t;
jjones646 0:c5afea7b9057 22
jjones646 0:c5afea7b9057 23
jjones646 0:c5afea7b9057 24 class Radio
jjones646 0:c5afea7b9057 25 {
jjones646 0:c5afea7b9057 26 public:
jjones646 0:c5afea7b9057 27 Radio();
jjones646 0:c5afea7b9057 28 Radio(PinName, PinName);
jjones646 0:c5afea7b9057 29 virtual ~Radio() {};
jjones646 0:c5afea7b9057 30
jjones646 0:c5afea7b9057 31 bool send(const RTP_t&);
jjones646 0:c5afea7b9057 32
jjones646 0:c5afea7b9057 33 virtual void address(uint8_t address) {};
jjones646 0:c5afea7b9057 34 uint8_t address(void) const {
jjones646 0:c5afea7b9057 35 return _addr;
jjones646 0:c5afea7b9057 36 }
jjones646 0:c5afea7b9057 37
jjones646 0:c5afea7b9057 38 virtual void freq(uint32_t) {};
jjones646 0:c5afea7b9057 39 uint32_t freq(void) const {
jjones646 0:c5afea7b9057 40 return _freq;
jjones646 0:c5afea7b9057 41 }
jjones646 0:c5afea7b9057 42
jjones646 0:c5afea7b9057 43 virtual void channel(uint8_t) {};
jjones646 0:c5afea7b9057 44 uint8_t channel(void) const {
jjones646 0:c5afea7b9057 45 return _channel;
jjones646 0:c5afea7b9057 46 }
jjones646 0:c5afea7b9057 47
jjones646 0:c5afea7b9057 48 virtual void powerUp(void) = 0;
jjones646 0:c5afea7b9057 49
jjones646 0:c5afea7b9057 50 void mailbox(const Mail<RTP_t, 6>*);
jjones646 0:c5afea7b9057 51
jjones646 0:c5afea7b9057 52 protected:
jjones646 0:c5afea7b9057 53 virtual void put_pck(uint8_t*, uint8_t) = 0;
jjones646 0:c5afea7b9057 54 virtual bool get_pck(uint8_t*, uint8_t*) = 0;
jjones646 0:c5afea7b9057 55
jjones646 0:c5afea7b9057 56 static const int BUFFER_SIZE = 70;
jjones646 0:c5afea7b9057 57 uint8_t buffer[BUFFER_SIZE];
jjones646 0:c5afea7b9057 58
jjones646 0:c5afea7b9057 59 Mail<RTP_t, 6> _rx_data;
jjones646 0:c5afea7b9057 60 Mail<RTP_t, 5> _tx_data;
jjones646 0:c5afea7b9057 61
jjones646 0:c5afea7b9057 62 bool _need_ack;
jjones646 0:c5afea7b9057 63 uint8_t _channel;
jjones646 0:c5afea7b9057 64 uint32_t _freq;
jjones646 0:c5afea7b9057 65 uint8_t _addr;
jjones646 0:c5afea7b9057 66 int8_t _rssi;
jjones646 0:c5afea7b9057 67
jjones646 0:c5afea7b9057 68 static void transmit_thread(void const*);
jjones646 0:c5afea7b9057 69 static void receive_thread(void const*);
jjones646 0:c5afea7b9057 70 SPI *_spi;
jjones646 0:c5afea7b9057 71
jjones646 0:c5afea7b9057 72 private:
jjones646 0:c5afea7b9057 73 void isr_receive(void);
jjones646 0:c5afea7b9057 74 InterruptIn *_rx_int;
jjones646 0:c5afea7b9057 75 DigitalOut _tx_led;
jjones646 0:c5afea7b9057 76 DigitalOut _rx_led;
jjones646 0:c5afea7b9057 77 static void led_tick(void const*);
jjones646 0:c5afea7b9057 78
jjones646 0:c5afea7b9057 79 Thread _receive_thread;
jjones646 0:c5afea7b9057 80 Thread _transmit_thread;
jjones646 0:c5afea7b9057 81 Thread _tx_led_thread;
jjones646 0:c5afea7b9057 82 Thread _rx_led_thread;
jjones646 0:c5afea7b9057 83 };
jjones646 0:c5afea7b9057 84
jjones646 0:c5afea7b9057 85 #endif // RADIO_H
jjones646 0:c5afea7b9057 86 #endif