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 #include "Radio.h"
jjones646 0:c5afea7b9057 2
jjones646 0:c5afea7b9057 3
jjones646 0:c5afea7b9057 4 /*
jjones646 0:c5afea7b9057 5
jjones646 0:c5afea7b9057 6 // SERIAL THREAD
jjones646 0:c5afea7b9057 7 void CC1101::get_serial_data_thread(void const *arg)
jjones646 0:c5afea7b9057 8 {
jjones646 0:c5afea7b9057 9 CC1101 *instance = (CC1101*)arg;
jjones646 0:c5afea7b9057 10 osSignalWait(START_THREAD, osWaitForever);
jjones646 0:c5afea7b9057 11 Timer t;
jjones646 0:c5afea7b9057 12
jjones646 0:c5afea7b9057 13 while(1) {
jjones646 0:c5afea7b9057 14
jjones646 0:c5afea7b9057 15 if (instance->_pc.readable()) {
jjones646 0:c5afea7b9057 16
jjones646 0:c5afea7b9057 17 if (t.read_us()) {
jjones646 0:c5afea7b9057 18 t.reset();
jjones646 0:c5afea7b9057 19 } else {
jjones646 0:c5afea7b9057 20 t.start();
jjones646 0:c5afea7b9057 21 }
jjones646 0:c5afea7b9057 22
jjones646 0:c5afea7b9057 23 instance->_rx_int->disable_irq();
jjones646 0:c5afea7b9057 24 instance->rxBuf.putc(instance->_pc.getc());
jjones646 0:c5afea7b9057 25 instance->_rx_int->enable_irq();
jjones646 0:c5afea7b9057 26 }
jjones646 0:c5afea7b9057 27
jjones646 0:c5afea7b9057 28 if ( (instance->rxBuf.use() > 20) | (t.read_ms() > 50)) { // if more than 20 bytes received then tx the packet in RF
jjones646 0:c5afea7b9057 29 // set the signal for sending data
jjones646 0:c5afea7b9057 30 instance->_transmit_thread.signal_set(NEW_DATA);
jjones646 0:c5afea7b9057 31 t.stop();
jjones646 0:c5afea7b9057 32 t.reset();
jjones646 0:c5afea7b9057 33 }
jjones646 0:c5afea7b9057 34
jjones646 0:c5afea7b9057 35 Thread::wait(50);
jjones646 0:c5afea7b9057 36
jjones646 0:c5afea7b9057 37 }
jjones646 0:c5afea7b9057 38 }
jjones646 0:c5afea7b9057 39
jjones646 0:c5afea7b9057 40 */
jjones646 0:c5afea7b9057 41
jjones646 0:c5afea7b9057 42 // TRANSMITTING THREAD
jjones646 0:c5afea7b9057 43 void Radio::transmit_thread(void const *arg)
jjones646 0:c5afea7b9057 44 {
jjones646 0:c5afea7b9057 45 Radio *instance = (Radio*)arg;
jjones646 0:c5afea7b9057 46 osSignalWait(START_THREAD, osWaitForever);
jjones646 0:c5afea7b9057 47
jjones646 0:c5afea7b9057 48 while(1) {
jjones646 0:c5afea7b9057 49 osEvent evt = instance->_tx_data.get();
jjones646 0:c5afea7b9057 50 if (evt.status == osEventMail) {
jjones646 0:c5afea7b9057 51 RTP_t *mail = (RTP_t*)evt.value.p;
jjones646 0:c5afea7b9057 52
jjones646 0:c5afea7b9057 53 instance->put_pck(mail->payload, mail->size); // send the packet over air
jjones646 0:c5afea7b9057 54 }
jjones646 0:c5afea7b9057 55 }
jjones646 0:c5afea7b9057 56 }
jjones646 0:c5afea7b9057 57
jjones646 0:c5afea7b9057 58
jjones646 0:c5afea7b9057 59 // RECEIVING THREAD
jjones646 0:c5afea7b9057 60 void Radio::receive_thread(void const *arg)
jjones646 0:c5afea7b9057 61 {
jjones646 0:c5afea7b9057 62 Radio *instance = (Radio*)arg;
jjones646 0:c5afea7b9057 63 osSignalWait(START_THREAD, osWaitForever);
jjones646 0:c5afea7b9057 64
jjones646 0:c5afea7b9057 65 // receiving operations
jjones646 0:c5afea7b9057 66 while(1) {
jjones646 0:c5afea7b9057 67 osSignalWait(NEW_DATA, osWaitForever);
jjones646 0:c5afea7b9057 68
jjones646 0:c5afea7b9057 69 // set the limit for max bytes to put in the buffer every time
jjones646 0:c5afea7b9057 70 uint8_t rxlength = BUFFER_SIZE;
jjones646 0:c5afea7b9057 71
jjones646 0:c5afea7b9057 72 instance->_spi->frequency(8500000);
jjones646 0:c5afea7b9057 73 if (instance->get_pck(instance->buffer, &rxlength) ) {
jjones646 0:c5afea7b9057 74
jjones646 0:c5afea7b9057 75 if (instance->buffer[0] == 0x02) {
jjones646 0:c5afea7b9057 76 instance->_need_ack = false;
jjones646 0:c5afea7b9057 77 } else {
jjones646 0:c5afea7b9057 78
jjones646 0:c5afea7b9057 79 RTP_t *data = instance->_rx_data.alloc();
jjones646 0:c5afea7b9057 80 data->payload = instance->buffer;
jjones646 0:c5afea7b9057 81 instance->_rx_data.put(data);
jjones646 0:c5afea7b9057 82
jjones646 0:c5afea7b9057 83 // send the data over the serial connection
jjones646 0:c5afea7b9057 84 #if DEBUG_MODE > 0
jjones646 0:c5afea7b9057 85 std::printf(" ==============\r\n");
jjones646 0:c5afea7b9057 86 for (int i=0; i < rxlength; i++) {
jjones646 0:c5afea7b9057 87 std::printf(" | 0x%02X |\r\n", instance->buffer[i]);
jjones646 0:c5afea7b9057 88 }
jjones646 0:c5afea7b9057 89 std::printf(" ==============\r\n");
jjones646 0:c5afea7b9057 90 #endif
jjones646 0:c5afea7b9057 91
jjones646 0:c5afea7b9057 92 }
jjones646 0:c5afea7b9057 93 } else {
jjones646 0:c5afea7b9057 94 std::printf("Receiving packet failure\r\n");
jjones646 0:c5afea7b9057 95 }
jjones646 0:c5afea7b9057 96 instance->_spi->frequency(5000000);
jjones646 0:c5afea7b9057 97 }
jjones646 0:c5afea7b9057 98 }