Wireless interface using LoRa technology

Dependencies:   AlohaTransceiver RingBuffer SX1276Lib SerialInterfaceProtocol mbed L3PDU

Revision:
2:ae85337d4ca7
Parent:
0:1e42d79b42e1
Child:
3:a4f6abad9378
--- a/main.cpp	Thu Jul 14 04:59:41 2016 +0000
+++ b/main.cpp	Thu Jul 14 11:48:52 2016 +0000
@@ -52,34 +52,9 @@
     return 0;
 }
 
-int sendMessage(uint8_t *payload, uint8_t payload_length, uint8_t *response, uint8_t *response_length)
-{
-    static uint8_t seqid = 0;
-    
-    txFrame.setType(AlohaFrame::Aloha_Data);
-    txFrame.setPayloadLength(0x2);
-    txFrame.setSourceAddress(0x1);
-    txFrame.setDestinationAddress(0x2);
-    txFrame.setFullMessageFlag(0x1);
-    txFrame.setSequenceID(seqid);
-    txFrame.setPayload(0xff, 0);
-    txFrame.setPayload(0xfe, 1);
-    txFrame.generateCrc();
-    
-    
-    uint8_t buffer[20];
-    memset(buffer, 0x0, sizeof(buffer));
-    txFrame.serialize(buffer);
-    
-    aloha.send(buffer, 20);
-    
-    seqid += 1;
-    
-    return 0;   
-}
-
-void AlohaDataHandler(AlohaFrame *frame)
-{
+void AlohaDataEcho(AlohaFrame *frame)
+{    
+    // print received message
     printf("AlohaDataHandler invoked\r\n");
     printf("    Type: 0x%x, PayloadLength: 0x%x\r\n", frame->getType(), frame->getPayloadLength());
     printf("    SrcAddr: 0x%x, DestAddr: 0x%x\r\n", frame->getSourceAddress(), frame->getDestinationAddress());
@@ -90,6 +65,32 @@
     }
     printf("    CRC: 0x%x\r\n", frame->getCrc());
     
+    // get rssi and snr
+    uint16_t rssi = aloha.getRssi();
+    uint8_t snr = aloha.getSnr();
+    
+    uint8_t rssi_h = (rssi & 0xff00) >> 8;
+    uint8_t rssi_l = rssi & 0xff;
+    
+    // Transmit RSSI and SNR back to sender
+    txFrame.setType(AlohaFrame::Aloha_Data);
+    txFrame.setPayloadLength(3);
+    txFrame.setSourceAddress(frame->getDestinationAddress());
+    txFrame.setDestinationAddress(frame->getSourceAddress());
+    txFrame.setFullMessageFlag(frame->getFullMessageFlag());
+    txFrame.setSequenceID(frame->getSequenceID() + 1);
+    txFrame.setPayload(snr, 0);
+    txFrame.setPayload(rssi_h, 1);
+    txFrame.setPayload(rssi_l, 2);
+    txFrame.generateCrc();
+    
+    
+    uint8_t buffer[20];
+    memset(buffer, 0x0, sizeof(buffer));
+    txFrame.serialize(buffer);
+    
+    aloha.send(buffer, 20);
+    
 }
 
 int main() {
@@ -101,10 +102,9 @@
     
     // register callback functions for SIP
     SIP.registerCommand(0x00, toggleChecksum);
-    SIP.registerCommand(0x01, sendMessage);
     
     // register callback functions for aloha transceiver
-    aloha.registerType(AlohaFrame::Aloha_Data, AlohaDataHandler);
+    aloha.registerType(AlohaFrame::Aloha_Data, AlohaDataEcho);
     
     while(1) {
         SIP.poll();