For robots and stuff
Radio/Radio.h@2:c42a035d71ed, 2014-12-31 (annotated)
- 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?
User | Revision | Line number | New 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 |