ENEL400 / L3PDU

Dependents:   LoRaBaseStation LoRaTerminal

Committer:
rba90
Date:
Wed Jun 29 01:49:03 2016 +0000
Revision:
1:dda08634a9be
Parent:
0:f32c0e562e9a
Child:
2:f4f46b04ab8a
Toggle _verified flag on changing internal properties.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rba90 0:f32c0e562e9a 1 #include "BasicPacket.h"
rba90 0:f32c0e562e9a 2 #include "crc.h"
rba90 0:f32c0e562e9a 3 #include <string>
rba90 0:f32c0e562e9a 4
rba90 0:f32c0e562e9a 5 BasicPacket::BasicPacket()
rba90 0:f32c0e562e9a 6 {
rba90 0:f32c0e562e9a 7 // init variables
rba90 0:f32c0e562e9a 8 memset(_buffer, 0x0, sizeof(_buffer));
rba90 0:f32c0e562e9a 9 _isVerified = false;
rba90 0:f32c0e562e9a 10 }
rba90 0:f32c0e562e9a 11
rba90 0:f32c0e562e9a 12 BasicPacket::BasicPacket(uint8_t *data)
rba90 0:f32c0e562e9a 13 {
rba90 0:f32c0e562e9a 14 // the user takes the responsibility of making sure
rba90 0:f32c0e562e9a 15 // they have sufficient memory for data buffer
rba90 0:f32c0e562e9a 16
rba90 0:f32c0e562e9a 17 // copy data to internal buffer
rba90 0:f32c0e562e9a 18 memcpy(_buffer, data, sizeof(_buffer));
rba90 0:f32c0e562e9a 19
rba90 0:f32c0e562e9a 20 // set verify flag
rba90 0:f32c0e562e9a 21 _isVerified = false;
rba90 0:f32c0e562e9a 22 }
rba90 0:f32c0e562e9a 23
rba90 0:f32c0e562e9a 24 BasicPacket::~BasicPacket()
rba90 0:f32c0e562e9a 25 {
rba90 0:f32c0e562e9a 26
rba90 0:f32c0e562e9a 27 }
rba90 0:f32c0e562e9a 28
rba90 0:f32c0e562e9a 29 void BasicPacket::generateCrc()
rba90 0:f32c0e562e9a 30 {
rba90 0:f32c0e562e9a 31 _buffer[3] = crc8(_buffer, 3);
rba90 1:dda08634a9be 32
rba90 1:dda08634a9be 33 // set verify flag
rba90 1:dda08634a9be 34 _isVerified = true;
rba90 0:f32c0e562e9a 35 }
rba90 0:f32c0e562e9a 36
rba90 0:f32c0e562e9a 37 bool BasicPacket::verify()
rba90 0:f32c0e562e9a 38 {
rba90 0:f32c0e562e9a 39 return _buffer[3] == crc8(_buffer, 3);
rba90 0:f32c0e562e9a 40 }
rba90 0:f32c0e562e9a 41
rba90 0:f32c0e562e9a 42 void BasicPacket::serialize(uint8_t *buffer)
rba90 0:f32c0e562e9a 43 {
rba90 0:f32c0e562e9a 44 memcpy(buffer, _buffer, sizeof(_buffer));
rba90 0:f32c0e562e9a 45 }
rba90 0:f32c0e562e9a 46
rba90 0:f32c0e562e9a 47 void BasicPacket::setFid(uint8_t fid)
rba90 0:f32c0e562e9a 48 {
rba90 0:f32c0e562e9a 49 // clear upper 4 bits
rba90 0:f32c0e562e9a 50 _buffer[0] &= 0x0f;
rba90 0:f32c0e562e9a 51
rba90 0:f32c0e562e9a 52 // set bits
rba90 0:f32c0e562e9a 53 _buffer[0] |= fid << 4;
rba90 1:dda08634a9be 54
rba90 1:dda08634a9be 55 // set verify flag
rba90 1:dda08634a9be 56 _isVerified = false;
rba90 0:f32c0e562e9a 57 }
rba90 0:f32c0e562e9a 58
rba90 0:f32c0e562e9a 59 void BasicPacket::setField1(uint8_t field)
rba90 0:f32c0e562e9a 60 {
rba90 0:f32c0e562e9a 61 // clear lower 4 bits
rba90 0:f32c0e562e9a 62 _buffer[0] &= 0xf0;
rba90 0:f32c0e562e9a 63
rba90 0:f32c0e562e9a 64 // set bits
rba90 0:f32c0e562e9a 65 _buffer[0] |= field & 0x0f;
rba90 1:dda08634a9be 66
rba90 1:dda08634a9be 67 // set verify flag
rba90 1:dda08634a9be 68 _isVerified = false;
rba90 0:f32c0e562e9a 69 }
rba90 0:f32c0e562e9a 70
rba90 0:f32c0e562e9a 71 void BasicPacket::setField2(uint8_t field)
rba90 0:f32c0e562e9a 72 {
rba90 0:f32c0e562e9a 73 _buffer[1] = field;
rba90 1:dda08634a9be 74
rba90 1:dda08634a9be 75 // set verify flag
rba90 1:dda08634a9be 76 _isVerified = false;
rba90 0:f32c0e562e9a 77 }
rba90 0:f32c0e562e9a 78
rba90 0:f32c0e562e9a 79 void BasicPacket::setField3(uint8_t field)
rba90 0:f32c0e562e9a 80 {
rba90 0:f32c0e562e9a 81 _buffer[2] = field;
rba90 1:dda08634a9be 82
rba90 1:dda08634a9be 83 // set verify flag
rba90 1:dda08634a9be 84 _isVerified = false;
rba90 0:f32c0e562e9a 85 }
rba90 0:f32c0e562e9a 86
rba90 0:f32c0e562e9a 87 uint8_t BasicPacket::getFid()
rba90 0:f32c0e562e9a 88 {
rba90 0:f32c0e562e9a 89 return (_buffer[0] & 0xf0) >> 4;
rba90 0:f32c0e562e9a 90 }
rba90 0:f32c0e562e9a 91
rba90 0:f32c0e562e9a 92 uint8_t BasicPacket::getField1()
rba90 0:f32c0e562e9a 93 {
rba90 0:f32c0e562e9a 94 return _buffer[0] & 0x0f;
rba90 0:f32c0e562e9a 95 }
rba90 0:f32c0e562e9a 96
rba90 0:f32c0e562e9a 97 uint8_t BasicPacket::getField2()
rba90 0:f32c0e562e9a 98 {
rba90 0:f32c0e562e9a 99 return _buffer[1];
rba90 0:f32c0e562e9a 100 }
rba90 0:f32c0e562e9a 101
rba90 0:f32c0e562e9a 102 uint8_t BasicPacket::getField3()
rba90 0:f32c0e562e9a 103 {
rba90 0:f32c0e562e9a 104 return _buffer[2];
rba90 0:f32c0e562e9a 105 }
rba90 0:f32c0e562e9a 106
rba90 0:f32c0e562e9a 107 uint8_t BasicPacket::getCrc()
rba90 0:f32c0e562e9a 108 {
rba90 0:f32c0e562e9a 109 return _buffer[3];
rba90 0:f32c0e562e9a 110 }