ENEL400 / L3PDU

Dependents:   LoRaBaseStation LoRaTerminal

Revision:
5:dcf7271595af
Parent:
3:35e5a721f198
Child:
6:7c719bcd3047
--- a/BasicPacket/BasicPacket.cpp	Wed Jul 13 11:55:37 2016 +0000
+++ b/BasicPacket/BasicPacket.cpp	Mon Aug 08 11:10:00 2016 +0000
@@ -6,6 +6,8 @@
 #include <cassert>
 #endif
 
+#define CRC_BASE_IDX 2
+
 BasicPacket::BasicPacket()
 {
     // init variables
@@ -46,7 +48,7 @@
     }
     else
     {
-        return _buffer[3] == crc8(_buffer, 3);
+        return _buffer[7] == crc8(_buffer, 7);
     }
 }
 
@@ -67,29 +69,46 @@
     _isVerified = false;
 }
 
-void BasicPacket::setField1(uint8_t field)
+void BasicPacket::setSequenceID(uint8_t seqid)
 {
     // clear lower 4 bits
     _buffer[0] &= 0xf0;
 
     // set bits
-    _buffer[0] |= field & 0x0f;
+    _buffer[0] |= seqid & 0x0f;
 
     // set verify flag
     _isVerified = false;
 }
 
-void BasicPacket::setField2(uint8_t field)
+void BasicPacket::setSourceID(uint8_t sid)
 {
-    _buffer[1] = field;
+    // clear upper 4 bits
+    _buffer[1] &= 0x0f;
+    
+    // set bits
+    _buffer[1] |= sid << 4;
 
     // set verify flag
     _isVerified = false;
 }
 
-void BasicPacket::setField3(uint8_t field)
+void BasicPacket::setDestinationID(uint8_t did)
 {
-    _buffer[2] = field;
+    // clear lower 4 bits
+    _buffer[1] = 0xf0;
+    
+    // set bits
+    _buffer[1] |= did & 0x0f;
+
+    // set verify flag
+    _isVerified = false;
+}
+
+void BasicPacket::setField(uint8_t idx, uint8_t data)
+{
+    // set payload based on index
+    _buffer[CRC_BASE_IDX + idx] = data;
 
     // set verify flag
     _isVerified = false;
@@ -100,30 +119,35 @@
     return (_buffer[0] & 0xf0) >> 4;
 }
 
-uint8_t BasicPacket::getField1()
+uint8_t BasicPacket::getSequenceID()
 {
     return _buffer[0] & 0x0f;
 }
 
-uint8_t BasicPacket::getField2()
+uint8_t BasicPacket::getSourceID()
 {
-    return _buffer[1];
+    return (_buffer[1] & 0xf0) >> 4;    
 }
 
-uint8_t BasicPacket::getField3()
+uint8_t BasicPacket::getDestinationID()
 {
-    return _buffer[2];
+    return _buffer[1] & 0x0f;
+}
+
+uint8_t BasicPacket::getField(uint8_t idx)
+{
+    return _buffer[CRC_BASE_IDX + idx];
 }
 
 uint8_t BasicPacket::getCrc()
 {
     if (_isVerified)
     {
-        return _buffer[3];
+        return _buffer[7];
     }
     else
     {
-        return crc8(_buffer, 3);
+        return crc8(_buffer, 7);
     }
 }