ENEL400 / L3PDU

Dependents:   LoRaBaseStation LoRaTerminal

Revision:
0:f32c0e562e9a
Child:
1:dda08634a9be
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BasicPacket/BasicPacket.cpp	Wed Jun 29 01:37:59 2016 +0000
@@ -0,0 +1,95 @@
+#include "BasicPacket.h"
+#include "crc.h"
+#include <string>
+
+BasicPacket::BasicPacket()
+{
+    // init variables
+    memset(_buffer, 0x0, sizeof(_buffer));
+    _isVerified = false;
+}
+
+BasicPacket::BasicPacket(uint8_t *data)
+{
+    // the user takes the responsibility of making sure
+    // they have sufficient memory for data buffer
+    
+    // copy data to internal buffer
+    memcpy(_buffer, data, sizeof(_buffer));
+
+    // set verify flag
+    _isVerified = false;
+}
+
+BasicPacket::~BasicPacket()
+{
+
+}
+
+void BasicPacket::generateCrc()
+{
+    _buffer[3] = crc8(_buffer, 3);
+}
+
+bool BasicPacket::verify()
+{
+    return _buffer[3] == crc8(_buffer, 3);
+}
+
+void BasicPacket::serialize(uint8_t *buffer)
+{
+    memcpy(buffer, _buffer, sizeof(_buffer));
+}
+
+void BasicPacket::setFid(uint8_t fid)
+{
+    // clear upper 4 bits
+    _buffer[0] &= 0x0f;
+    
+    // set bits
+    _buffer[0] |= fid << 4;
+}
+
+void BasicPacket::setField1(uint8_t field)
+{
+    // clear lower 4 bits
+    _buffer[0] &= 0xf0;
+
+    // set bits
+    _buffer[0] |= field & 0x0f;
+}
+
+void BasicPacket::setField2(uint8_t field)
+{
+    _buffer[1] = field;
+}
+
+void BasicPacket::setField3(uint8_t field)
+{
+    _buffer[2] = field;
+}
+
+uint8_t BasicPacket::getFid()
+{
+    return (_buffer[0] & 0xf0) >> 4;
+}
+
+uint8_t BasicPacket::getField1()
+{
+    return _buffer[0] & 0x0f;
+}
+
+uint8_t BasicPacket::getField2()
+{
+    return _buffer[1];
+}
+
+uint8_t BasicPacket::getField3()
+{
+    return _buffer[2];
+}
+
+uint8_t BasicPacket::getCrc()
+{
+    return _buffer[3];
+}