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 #include "Radio.h"
jjones646 0:c5afea7b9057 2
jjones646 0:c5afea7b9057 3 Radio::Radio() :
jjones646 0:c5afea7b9057 4 _tx_led(NC),
jjones646 0:c5afea7b9057 5 _rx_led(NC),
jjones646 2:c42a035d71ed 6 _err_led(NC),
jjones646 0:c5afea7b9057 7 _receive_thread(&Radio::receive_thread, this, osPriorityLow, 0),
jjones646 0:c5afea7b9057 8 _transmit_thread(&Radio::transmit_thread, this, osPriorityLow, 0),
jjones646 0:c5afea7b9057 9 _tx_led_thread(&Radio::led_tick, &_tx_led, osPriorityLow, 0),
jjones646 0:c5afea7b9057 10 _rx_led_thread(&Radio::led_tick, &_rx_led, osPriorityLow, 0)
jjones646 0:c5afea7b9057 11 {
jjones646 0:c5afea7b9057 12 _channel = 1;
jjones646 0:c5afea7b9057 13 _addr = 0;
jjones646 0:c5afea7b9057 14 _freq = 0;
jjones646 0:c5afea7b9057 15 _need_ack = false;
jjones646 2:c42a035d71ed 16 _p_count = 0;
jjones646 2:c42a035d71ed 17 _has_error = false;
jjones646 0:c5afea7b9057 18 }
jjones646 0:c5afea7b9057 19
jjones646 0:c5afea7b9057 20 Radio::Radio(PinName tx_led, PinName rx_led) :
jjones646 0:c5afea7b9057 21 _tx_led(tx_led),
jjones646 0:c5afea7b9057 22 _rx_led(rx_led),
jjones646 2:c42a035d71ed 23 _err_led(p29),
jjones646 0:c5afea7b9057 24 _receive_thread(&Radio::receive_thread, this, osPriorityRealtime, 2048),
jjones646 0:c5afea7b9057 25 _transmit_thread(&Radio::transmit_thread, this, osPriorityNormal, 1024),
jjones646 0:c5afea7b9057 26 _tx_led_thread(&Radio::led_tick, &_tx_led, osPriorityLow, 128),
jjones646 0:c5afea7b9057 27 _rx_led_thread(&Radio::led_tick, &_rx_led, osPriorityLow, 128)
jjones646 0:c5afea7b9057 28 {
jjones646 0:c5afea7b9057 29 _channel = 1;
jjones646 0:c5afea7b9057 30 _addr = 0;
jjones646 0:c5afea7b9057 31 _freq = 0;
jjones646 0:c5afea7b9057 32 _need_ack = false;
jjones646 2:c42a035d71ed 33 _p_count = 0;
jjones646 2:c42a035d71ed 34 _tx_led = 1;
jjones646 2:c42a035d71ed 35 _rx_led = 1;
jjones646 2:c42a035d71ed 36
jjones646 2:c42a035d71ed 37 // always off initially
jjones646 2:c42a035d71ed 38 _err_led = 1;
jjones646 2:c42a035d71ed 39
jjones646 2:c42a035d71ed 40 _has_error = false;
jjones646 0:c5afea7b9057 41 }
jjones646 0:c5afea7b9057 42
jjones646 0:c5afea7b9057 43 bool Radio::send(const RTP_t& packet)
jjones646 0:c5afea7b9057 44 {
jjones646 0:c5afea7b9057 45 _need_ack = packet.ack;
jjones646 0:c5afea7b9057 46 while (_need_ack) {
jjones646 0:c5afea7b9057 47 this->put_pck(packet.payload, packet.size);
jjones646 0:c5afea7b9057 48 }
jjones646 0:c5afea7b9057 49
jjones646 0:c5afea7b9057 50 }
jjones646 0:c5afea7b9057 51
jjones646 0:c5afea7b9057 52 // INTERRUPT ROUTINES
jjones646 0:c5afea7b9057 53 void Radio::isr_receive(void)
jjones646 0:c5afea7b9057 54 {
jjones646 0:c5afea7b9057 55 _receive_thread.signal_set(NEW_DATA);
jjones646 0:c5afea7b9057 56 }
jjones646 0:c5afea7b9057 57
jjones646 0:c5afea7b9057 58 void Radio::led_tick(void const *arg)
jjones646 0:c5afea7b9057 59 {
jjones646 0:c5afea7b9057 60 DigitalOut *led = (DigitalOut*)arg;
jjones646 2:c42a035d71ed 61
jjones646 2:c42a035d71ed 62 // initial LED state to OFF
jjones646 2:c42a035d71ed 63 *led = 1;
jjones646 0:c5afea7b9057 64
jjones646 0:c5afea7b9057 65 while(1) {
jjones646 0:c5afea7b9057 66 // wait for signal to be set before doing anything
jjones646 0:c5afea7b9057 67 osSignalWait(SET_LED_TICK, osWaitForever);
jjones646 0:c5afea7b9057 68
jjones646 0:c5afea7b9057 69 // blink the led once
jjones646 2:c42a035d71ed 70 *led = !*led;
jjones646 0:c5afea7b9057 71 Thread::wait(10); // ms
jjones646 2:c42a035d71ed 72 *led = !*led;
jjones646 0:c5afea7b9057 73 Thread::wait(60);
jjones646 0:c5afea7b9057 74 }
jjones646 2:c42a035d71ed 75 }
jjones646 2:c42a035d71ed 76
jjones646 2:c42a035d71ed 77 bool Radio::hasError(void){
jjones646 2:c42a035d71ed 78 return _has_error;
jjones646 2:c42a035d71ed 79 }