Koncentrator

Dependencies:   SX127x mbed-rtos mbed

Committer:
MrSteel
Date:
Wed Jun 03 13:50:55 2015 +0000
Revision:
0:dd55179403eb
Koncentrator

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MrSteel 0:dd55179403eb 1 #include "mbed.h"
MrSteel 0:dd55179403eb 2 #include "stdlib.h"
MrSteel 0:dd55179403eb 3 #include "rtos.h"
MrSteel 0:dd55179403eb 4 #include "sx127x_lora.h"
MrSteel 0:dd55179403eb 5 #include "comm.h"
MrSteel 0:dd55179403eb 6 #include "fun.h"
MrSteel 0:dd55179403eb 7 #include "application.h"
MrSteel 0:dd55179403eb 8
MrSteel 0:dd55179403eb 9 queueStruct queue[5];
MrSteel 0:dd55179403eb 10 uartBufferStructure pcBuffer;
MrSteel 0:dd55179403eb 11 uartBufferStructure fiberOpticBuffer;
MrSteel 0:dd55179403eb 12 uartBufferStructure loraBuffer;
MrSteel 0:dd55179403eb 13
MrSteel 0:dd55179403eb 14 Mutex pc_mutex; // Mutex for RTOS system - USB serial port
MrSteel 0:dd55179403eb 15 Mutex fiberOptic_mutex; // Mutex for RTOS system - Fiber optic port
MrSteel 0:dd55179403eb 16 Mutex lora_mutex;
MrSteel 0:dd55179403eb 17
MrSteel 0:dd55179403eb 18 Timer txFiberOpticTmr;
MrSteel 0:dd55179403eb 19 Timer rxFiberOpticTmr;
MrSteel 0:dd55179403eb 20 Timer pcTmr;
MrSteel 0:dd55179403eb 21
MrSteel 0:dd55179403eb 22 void pc_thread(void const *argument) {
MrSteel 0:dd55179403eb 23 pcBuffer.buf = (unsigned char *)malloc(sizeof(char)*PC_RX_BUFFER);
MrSteel 0:dd55179403eb 24 pc.baud(PC_BAUD);
MrSteel 0:dd55179403eb 25 pc.attach(&pc_handle);
MrSteel 0:dd55179403eb 26 pc_mutex.lock();
MrSteel 0:dd55179403eb 27 pc.printf("\n#: Application %s \n#: Source ID: %d \n#: Destination ID: %d \n#: PC thread Started with BAUD(%d)", APP,SOURCE_ID,DESTINATION_ID,PC_BAUD);
MrSteel 0:dd55179403eb 28 pc_mutex.unlock();
MrSteel 0:dd55179403eb 29 while(true){
MrSteel 0:dd55179403eb 30 wait_ms(1);
MrSteel 0:dd55179403eb 31 }
MrSteel 0:dd55179403eb 32 }
MrSteel 0:dd55179403eb 33
MrSteel 0:dd55179403eb 34 void lora_thread(void const *argument){
MrSteel 0:dd55179403eb 35 Timer txLoraTmr;
MrSteel 0:dd55179403eb 36
MrSteel 0:dd55179403eb 37 // Initialize lora
MrSteel 0:dd55179403eb 38 kom.init();
MrSteel 0:dd55179403eb 39 Lora.enable();
MrSteel 0:dd55179403eb 40 Lora.setSf(8);
MrSteel 0:dd55179403eb 41 Lora.setBw(250);
MrSteel 0:dd55179403eb 42
MrSteel 0:dd55179403eb 43 kom.set_frf_MHz(868);
MrSteel 0:dd55179403eb 44 Lora.start_rx();
MrSteel 0:dd55179403eb 45
MrSteel 0:dd55179403eb 46 pc_mutex.lock();
MrSteel 0:dd55179403eb 47 pc.printf("\n#: LoRa thread started");
MrSteel 0:dd55179403eb 48 pc_mutex.unlock();
MrSteel 0:dd55179403eb 49 loraBuffer.buf = (unsigned char *)malloc(sizeof(char)*LORA_RX_BUFFER);
MrSteel 0:dd55179403eb 50
MrSteel 0:dd55179403eb 51 txLoraTmr.stop();
MrSteel 0:dd55179403eb 52 txLoraTmr.reset();
MrSteel 0:dd55179403eb 53 txLoraTmr.start();
MrSteel 0:dd55179403eb 54
MrSteel 0:dd55179403eb 55 int step = 0;
MrSteel 0:dd55179403eb 56 while(true){
MrSteel 0:dd55179403eb 57 // PING rutine
MrSteel 0:dd55179403eb 58
MrSteel 0:dd55179403eb 59 if(txLoraTmr.read_ms()>=500 && step==0) {
MrSteel 0:dd55179403eb 60 unsigned char tmpStr[] = {pSTX, sys.last_ppe_id[0], 0, SOURCE_ID, 0, 1, 0, 1, pBEL, pETX};
MrSteel 0:dd55179403eb 61 //lora_mutex.lock();
MrSteel 0:dd55179403eb 62 printStr(LORA_TARGET,tmpStr,sizeof(tmpStr));
MrSteel 0:dd55179403eb 63 //lora_mutex.unlock();
MrSteel 0:dd55179403eb 64 sys.last_ppe_id[0] = sys.last_ppe_id[0] + 1;
MrSteel 0:dd55179403eb 65 txLoraTmr.reset();
MrSteel 0:dd55179403eb 66 step++;
MrSteel 0:dd55179403eb 67
MrSteel 0:dd55179403eb 68 pc_mutex.lock();
MrSteel 0:dd55179403eb 69 pc.printf("\n<:");
MrSteel 0:dd55179403eb 70 pc_mutex.unlock();
MrSteel 0:dd55179403eb 71 TX_LED = SetLed;
MrSteel 0:dd55179403eb 72 }
MrSteel 0:dd55179403eb 73 if(txLoraTmr.read_ms()>=500 && step==1) {
MrSteel 0:dd55179403eb 74 unsigned char tmpStr[] = {pSTX, sys.last_ppe_id[1], 0, SOURCE_ID, 0, 2, 0, 1, pBEL, pETX};
MrSteel 0:dd55179403eb 75 //lora_mutex.lock();
MrSteel 0:dd55179403eb 76 printStr(LORA_TARGET,tmpStr,sizeof(tmpStr));
MrSteel 0:dd55179403eb 77 //lora_mutex.unlock();
MrSteel 0:dd55179403eb 78 sys.last_ppe_id[1] = sys.last_ppe_id[1] + 1;
MrSteel 0:dd55179403eb 79 txLoraTmr.reset();
MrSteel 0:dd55179403eb 80 step++;
MrSteel 0:dd55179403eb 81 TX_LED = SetLed;
MrSteel 0:dd55179403eb 82 }
MrSteel 0:dd55179403eb 83 if(txLoraTmr.read_ms()>=500 && step==2) {
MrSteel 0:dd55179403eb 84 unsigned char tmpStr[] = {pSTX, sys.last_ppe_id[2], 0, SOURCE_ID, 0, 3, 0, 1, pBEL, pETX};
MrSteel 0:dd55179403eb 85 //lora_mutex.lock();
MrSteel 0:dd55179403eb 86 printStr(LORA_TARGET,tmpStr,sizeof(tmpStr));
MrSteel 0:dd55179403eb 87 //lora_mutex.unlock();
MrSteel 0:dd55179403eb 88 sys.last_ppe_id[2] = sys.last_ppe_id[2] + 1;
MrSteel 0:dd55179403eb 89 txLoraTmr.reset();
MrSteel 0:dd55179403eb 90 step=0;
MrSteel 0:dd55179403eb 91 TX_LED = SetLed;
MrSteel 0:dd55179403eb 92 }
MrSteel 0:dd55179403eb 93 if(Lora.service() == SERVICE_READ_FIFO) {
MrSteel 0:dd55179403eb 94 unsigned int pyloadSize = kom.read_reg(REG_LR_RXNBBYTES);
MrSteel 0:dd55179403eb 95 float rssi = Lora.get_pkt_rssi();
MrSteel 0:dd55179403eb 96 unsigned int i;
MrSteel 0:dd55179403eb 97 for(i=0;i<pyloadSize;i++){
MrSteel 0:dd55179403eb 98 loraBuffer.buf[i] = kom.rx_buf[i];
MrSteel 0:dd55179403eb 99 loraBuffer.lenght = loraBuffer.lenght++;
MrSteel 0:dd55179403eb 100 }
MrSteel 0:dd55179403eb 101 pc_mutex.lock();
MrSteel 0:dd55179403eb 102 pc.printf("[%d,%2.1f]",loraBuffer.buf[3],rssi);
MrSteel 0:dd55179403eb 103 pc_mutex.unlock();
MrSteel 0:dd55179403eb 104 }
MrSteel 0:dd55179403eb 105
MrSteel 0:dd55179403eb 106 }
MrSteel 0:dd55179403eb 107 }
MrSteel 0:dd55179403eb 108
MrSteel 0:dd55179403eb 109 void fiberOptic_thread(void const *argument){
MrSteel 0:dd55179403eb 110 OperationMode.mode(PullUp);
MrSteel 0:dd55179403eb 111 fiberOpticBuffer.buf = (unsigned char *)malloc(sizeof(char)*FIBER_OPTIC_RX_BUFFER);
MrSteel 0:dd55179403eb 112 fiberOptic.baud(FIBER_OPTIC_BAUD);
MrSteel 0:dd55179403eb 113 fiberOptic.attach(&fiberOptic_handle);
MrSteel 0:dd55179403eb 114 if(!OperationMode.read()) {
MrSteel 0:dd55179403eb 115 pc_mutex.lock();
MrSteel 0:dd55179403eb 116 pc.printf("\n#: Fiber Optic thread started with BAUD(%d)",FIBER_OPTIC_BAUD);
MrSteel 0:dd55179403eb 117 pc_mutex.unlock();
MrSteel 0:dd55179403eb 118 //FIBER_OPTIC_TX = 1;
MrSteel 0:dd55179403eb 119 sys.fiberOpticEnable = true;
MrSteel 0:dd55179403eb 120 FIBER_OPTIC_TX_PWR = 0;
MrSteel 0:dd55179403eb 121 FIBER_OPTIC_RX_PWR = 0;
MrSteel 0:dd55179403eb 122
MrSteel 0:dd55179403eb 123 txFiberOpticTmr.start();
MrSteel 0:dd55179403eb 124
MrSteel 0:dd55179403eb 125 while(true) {
MrSteel 0:dd55179403eb 126 // PING rutine
MrSteel 0:dd55179403eb 127 if(txFiberOpticTmr.read()>FIBER_OPTIC_INTERVAL) {
MrSteel 0:dd55179403eb 128 if(sys.last_ppe_id_fo==0)
MrSteel 0:dd55179403eb 129 sys.last_ppe_id_fo = 1;
MrSteel 0:dd55179403eb 130 pc_mutex.lock();
MrSteel 0:dd55179403eb 131 pc.printf("\n>: PPE_ID_FO: %d, NODE: 1", sys.last_ppe_id_fo);
MrSteel 0:dd55179403eb 132 pc_mutex.unlock();
MrSteel 0:dd55179403eb 133 fiberOptic_mutex.lock();
MrSteel 0:dd55179403eb 134 fiberOptic.printf("%c%c%c%c%c%c%c%c%c%c",pSTX,sys.last_ppe_id_fo,0,SOURCE_ID,0,1,0,1,pACK,pETX);
MrSteel 0:dd55179403eb 135 fiberOptic_mutex.unlock();
MrSteel 0:dd55179403eb 136 sys.last_ppe_id_fo = sys.last_ppe_id_fo + 1;
MrSteel 0:dd55179403eb 137 txFiberOpticTmr.reset();
MrSteel 0:dd55179403eb 138 }
MrSteel 0:dd55179403eb 139 if(fiberOpticBuffer.flg) {
MrSteel 0:dd55179403eb 140 if(fiberOpticBuffer.lenght >= 5){
MrSteel 0:dd55179403eb 141 pc_mutex.lock();
MrSteel 0:dd55179403eb 142 pc.printf("\n>: Received shitty payload");
MrSteel 0:dd55179403eb 143 pc_mutex.unlock();
MrSteel 0:dd55179403eb 144 fiberOpticBuffer.flg = false;
MrSteel 0:dd55179403eb 145 fiberOpticBuffer.lenght = false;
MrSteel 0:dd55179403eb 146 }
MrSteel 0:dd55179403eb 147 if(fiberOpticBuffer.buf[0]==pSTX && fiberOpticBuffer.buf[fiberOpticBuffer.lenght-1]==pETX ) {
MrSteel 0:dd55179403eb 148 pc_mutex.lock();
MrSteel 0:dd55179403eb 149 pc.printf("\n>: Received shitty payload");
MrSteel 0:dd55179403eb 150 pc_mutex.unlock();
MrSteel 0:dd55179403eb 151 fiberOpticBuffer.flg = false;
MrSteel 0:dd55179403eb 152 fiberOpticBuffer.lenght = false;
MrSteel 0:dd55179403eb 153 }
MrSteel 0:dd55179403eb 154
MrSteel 0:dd55179403eb 155 }
MrSteel 0:dd55179403eb 156 }
MrSteel 0:dd55179403eb 157 }
MrSteel 0:dd55179403eb 158 else {
MrSteel 0:dd55179403eb 159 sys.fiberOpticEnable = false;
MrSteel 0:dd55179403eb 160 pc_mutex.lock();
MrSteel 0:dd55179403eb 161 pc.printf("\n#: Fiber Optic thread disabled!\n");
MrSteel 0:dd55179403eb 162 pc_mutex.unlock();
MrSteel 0:dd55179403eb 163 //FIBER_OPTIC_TX = 0;
MrSteel 0:dd55179403eb 164 FIBER_OPTIC_TX_PWR = 1;
MrSteel 0:dd55179403eb 165 FIBER_OPTIC_RX_PWR = 1;
MrSteel 0:dd55179403eb 166 }
MrSteel 0:dd55179403eb 167 }
MrSteel 0:dd55179403eb 168
MrSteel 0:dd55179403eb 169 void pc_handle(void) {
MrSteel 0:dd55179403eb 170 //LEDG = SetLed;
MrSteel 0:dd55179403eb 171 pc_mutex.lock();
MrSteel 0:dd55179403eb 172 unsigned char c = pc.getc();
MrSteel 0:dd55179403eb 173 pc_mutex.unlock();
MrSteel 0:dd55179403eb 174 sys.RXCharCounter[pc_com] = sys.RXCharCounter[pc_com]+1;
MrSteel 0:dd55179403eb 175 if(pcBuffer.lenght < PC_RX_BUFFER) {
MrSteel 0:dd55179403eb 176 pcBuffer.buf[pcBuffer.lenght] = c;
MrSteel 0:dd55179403eb 177 pcBuffer.lenght = pcBuffer.lenght + 1;
MrSteel 0:dd55179403eb 178 pcBuffer.flg = true;
MrSteel 0:dd55179403eb 179 }
MrSteel 0:dd55179403eb 180 }
MrSteel 0:dd55179403eb 181
MrSteel 0:dd55179403eb 182 void fiberOptic_handle(void) {
MrSteel 0:dd55179403eb 183 //LEDB = SetLed;
MrSteel 0:dd55179403eb 184 fiberOptic_mutex.lock();
MrSteel 0:dd55179403eb 185 unsigned char c = fiberOptic.getc();
MrSteel 0:dd55179403eb 186 fiberOptic_mutex.unlock();
MrSteel 0:dd55179403eb 187
MrSteel 0:dd55179403eb 188 if(fiberOpticBuffer.lenght < FIBER_OPTIC_RX_BUFFER) {
MrSteel 0:dd55179403eb 189 fiberOpticBuffer.buf[fiberOpticBuffer.lenght] = c;
MrSteel 0:dd55179403eb 190 fiberOpticBuffer.lenght = fiberOpticBuffer.lenght + 1;
MrSteel 0:dd55179403eb 191 fiberOpticBuffer.flg = true;
MrSteel 0:dd55179403eb 192 }
MrSteel 0:dd55179403eb 193 }
MrSteel 0:dd55179403eb 194
MrSteel 0:dd55179403eb 195 void printBuffer(uartBufferStructure buffer) {
MrSteel 0:dd55179403eb 196 if(buffer.flg) {
MrSteel 0:dd55179403eb 197 unsigned int i;
MrSteel 0:dd55179403eb 198 pc_mutex.lock();
MrSteel 0:dd55179403eb 199 pc.printf("\n<: ");
MrSteel 0:dd55179403eb 200 pc_mutex.unlock();
MrSteel 0:dd55179403eb 201 for(i=0;i<buffer.lenght-1;i++){
MrSteel 0:dd55179403eb 202 pc_mutex.lock();
MrSteel 0:dd55179403eb 203 pc.printf("%02x ",buffer.buf[i]);
MrSteel 0:dd55179403eb 204 pc_mutex.unlock();
MrSteel 0:dd55179403eb 205 }
MrSteel 0:dd55179403eb 206 }
MrSteel 0:dd55179403eb 207
MrSteel 0:dd55179403eb 208 }
MrSteel 0:dd55179403eb 209
MrSteel 0:dd55179403eb 210
MrSteel 0:dd55179403eb 211
MrSteel 0:dd55179403eb 212 void lora_rx_thread(void const *argument) {
MrSteel 0:dd55179403eb 213 /*
MrSteel 0:dd55179403eb 214 unsigned int i;
MrSteel 0:dd55179403eb 215 while(true) {
MrSteel 0:dd55179403eb 216 lora_mutex.lock();
MrSteel 0:dd55179403eb 217 if(Lora.service() == SERVICE_READ_FIFO) {
MrSteel 0:dd55179403eb 218 lora_mutex.unlock();
MrSteel 0:dd55179403eb 219
MrSteel 0:dd55179403eb 220 pc_mutex.lock();
MrSteel 0:dd55179403eb 221 pc.printf(".");
MrSteel 0:dd55179403eb 222 pc_mutex.unlock();
MrSteel 0:dd55179403eb 223 unsigned int pyloadSize = kom.read_reg(REG_LR_RXNBBYTES);
MrSteel 0:dd55179403eb 224 float rssi = Lora.get_pkt_rssi();
MrSteel 0:dd55179403eb 225
MrSteel 0:dd55179403eb 226 while(Lora.service() == SERVICE_READ_FIFO) {
MrSteel 0:dd55179403eb 227 loraBuffer.buf[i] = kom.rx_buf[i];
MrSteel 0:dd55179403eb 228 loraBuffer.lenght = loraBuffer.lenght++;
MrSteel 0:dd55179403eb 229 }
MrSteel 0:dd55179403eb 230
MrSteel 0:dd55179403eb 231 pc_mutex.lock();
MrSteel 0:dd55179403eb 232 pc.printf(".");
MrSteel 0:dd55179403eb 233 pc_mutex.unlock();
MrSteel 0:dd55179403eb 234 while(Lora.service() == SERVICE_READ_FIFO) {
MrSteel 0:dd55179403eb 235 loraBuffer.buf[i] = kom.rx_buf[i];
MrSteel 0:dd55179403eb 236 loraBuffer.lenght = loraBuffer.lenght++;
MrSteel 0:dd55179403eb 237 pc_mutex.lock();
MrSteel 0:dd55179403eb 238 pc.printf("Tukaj");
MrSteel 0:dd55179403eb 239 pc_mutex.unlock();
MrSteel 0:dd55179403eb 240 // }
MrSteel 0:dd55179403eb 241 }
MrSteel 0:dd55179403eb 242 }
MrSteel 0:dd55179403eb 243 */
MrSteel 0:dd55179403eb 244 }