For robots and stuff

Dependents:   Base Station

Committer:
jjones646
Date:
Wed Dec 31 22:16:01 2014 +0000
Revision:
2:c42a035d71ed
Parent:
1:05a48c038381
adding dummy cc1101 support

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