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
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 2:c42a035d71ed 49
jjones646 2:c42a035d71ed 50 osSignalWait(START_THREAD, osWaitForever);
jjones646 2:c42a035d71ed 51
jjones646 2:c42a035d71ed 52 /* osEvent evt = instance->_tx_data.get();
jjones646 0:c5afea7b9057 53 if (evt.status == osEventMail) {
jjones646 0:c5afea7b9057 54 RTP_t *mail = (RTP_t*)evt.value.p;
jjones646 0:c5afea7b9057 55
jjones646 0:c5afea7b9057 56 instance->put_pck(mail->payload, mail->size); // send the packet over air
jjones646 0:c5afea7b9057 57 }
jjones646 2:c42a035d71ed 58 */
jjones646 0:c5afea7b9057 59 }
jjones646 0:c5afea7b9057 60 }
jjones646 0:c5afea7b9057 61
jjones646 0:c5afea7b9057 62
jjones646 0:c5afea7b9057 63 // RECEIVING THREAD
jjones646 0:c5afea7b9057 64 void Radio::receive_thread(void const *arg)
jjones646 0:c5afea7b9057 65 {
jjones646 0:c5afea7b9057 66 Radio *instance = (Radio*)arg;
jjones646 0:c5afea7b9057 67 osSignalWait(START_THREAD, osWaitForever);
jjones646 0:c5afea7b9057 68
jjones646 0:c5afea7b9057 69 // receiving operations
jjones646 0:c5afea7b9057 70 while(1) {
jjones646 2:c42a035d71ed 71
jjones646 2:c42a035d71ed 72 osSignalWait(START_THREAD, osWaitForever);
jjones646 2:c42a035d71ed 73
jjones646 2:c42a035d71ed 74
jjones646 2:c42a035d71ed 75 /*
jjones646 0:c5afea7b9057 76 osSignalWait(NEW_DATA, osWaitForever);
jjones646 0:c5afea7b9057 77
jjones646 0:c5afea7b9057 78 // set the limit for max bytes to put in the buffer every time
jjones646 0:c5afea7b9057 79 uint8_t rxlength = BUFFER_SIZE;
jjones646 0:c5afea7b9057 80
jjones646 0:c5afea7b9057 81 instance->_spi->frequency(8500000);
jjones646 0:c5afea7b9057 82 if (instance->get_pck(instance->buffer, &rxlength) ) {
jjones646 0:c5afea7b9057 83
jjones646 0:c5afea7b9057 84 if (instance->buffer[0] == 0x02) {
jjones646 0:c5afea7b9057 85 instance->_need_ack = false;
jjones646 0:c5afea7b9057 86 } else {
jjones646 0:c5afea7b9057 87
jjones646 0:c5afea7b9057 88 RTP_t *data = instance->_rx_data.alloc();
jjones646 0:c5afea7b9057 89 data->payload = instance->buffer;
jjones646 0:c5afea7b9057 90 instance->_rx_data.put(data);
jjones646 0:c5afea7b9057 91
jjones646 0:c5afea7b9057 92 // send the data over the serial connection
jjones646 2:c42a035d71ed 93 #if DEBUG_MODE > 0
jjones646 0:c5afea7b9057 94 std::printf(" ==============\r\n");
jjones646 0:c5afea7b9057 95 for (int i=0; i < rxlength; i++) {
jjones646 0:c5afea7b9057 96 std::printf(" | 0x%02X |\r\n", instance->buffer[i]);
jjones646 0:c5afea7b9057 97 }
jjones646 0:c5afea7b9057 98 std::printf(" ==============\r\n");
jjones646 2:c42a035d71ed 99 #endif
jjones646 0:c5afea7b9057 100
jjones646 0:c5afea7b9057 101 }
jjones646 0:c5afea7b9057 102 } else {
jjones646 0:c5afea7b9057 103 std::printf("Receiving packet failure\r\n");
jjones646 0:c5afea7b9057 104 }
jjones646 0:c5afea7b9057 105 instance->_spi->frequency(5000000);
jjones646 2:c42a035d71ed 106 */
jjones646 0:c5afea7b9057 107 }
jjones646 0:c5afea7b9057 108 }