ENEL400 / L3PDU

Dependents:   LoRaBaseStation LoRaTerminal

Committer:
rba90
Date:
Thu Jun 30 09:14:54 2016 +0000
Revision:
2:f4f46b04ab8a
Parent:
1:dda08634a9be
Child:
3:35e5a721f198
Add unit test cases for each class

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 2:f4f46b04ab8a 5 #ifdef _DEBUG
rba90 2:f4f46b04ab8a 6 #include <cassert>
rba90 2:f4f46b04ab8a 7 #endif
rba90 2:f4f46b04ab8a 8
rba90 0:f32c0e562e9a 9 BasicPacket::BasicPacket()
rba90 0:f32c0e562e9a 10 {
rba90 0:f32c0e562e9a 11 // init variables
rba90 0:f32c0e562e9a 12 memset(_buffer, 0x0, sizeof(_buffer));
rba90 0:f32c0e562e9a 13 _isVerified = false;
rba90 0:f32c0e562e9a 14 }
rba90 0:f32c0e562e9a 15
rba90 0:f32c0e562e9a 16 BasicPacket::BasicPacket(uint8_t *data)
rba90 0:f32c0e562e9a 17 {
rba90 0:f32c0e562e9a 18 // the user takes the responsibility of making sure
rba90 0:f32c0e562e9a 19 // they have sufficient memory for data buffer
rba90 0:f32c0e562e9a 20
rba90 0:f32c0e562e9a 21 // copy data to internal buffer
rba90 0:f32c0e562e9a 22 memcpy(_buffer, data, sizeof(_buffer));
rba90 0:f32c0e562e9a 23
rba90 0:f32c0e562e9a 24 // set verify flag
rba90 0:f32c0e562e9a 25 _isVerified = false;
rba90 0:f32c0e562e9a 26 }
rba90 0:f32c0e562e9a 27
rba90 0:f32c0e562e9a 28 BasicPacket::~BasicPacket()
rba90 0:f32c0e562e9a 29 {
rba90 0:f32c0e562e9a 30
rba90 0:f32c0e562e9a 31 }
rba90 0:f32c0e562e9a 32
rba90 0:f32c0e562e9a 33 void BasicPacket::generateCrc()
rba90 0:f32c0e562e9a 34 {
rba90 0:f32c0e562e9a 35 _buffer[3] = crc8(_buffer, 3);
rba90 1:dda08634a9be 36
rba90 1:dda08634a9be 37 // set verify flag
rba90 1:dda08634a9be 38 _isVerified = true;
rba90 0:f32c0e562e9a 39 }
rba90 0:f32c0e562e9a 40
rba90 0:f32c0e562e9a 41 bool BasicPacket::verify()
rba90 0:f32c0e562e9a 42 {
rba90 2:f4f46b04ab8a 43 if (_isVerified)
rba90 2:f4f46b04ab8a 44 {
rba90 2:f4f46b04ab8a 45 return true;
rba90 2:f4f46b04ab8a 46 }
rba90 2:f4f46b04ab8a 47 else
rba90 2:f4f46b04ab8a 48 {
rba90 2:f4f46b04ab8a 49 return _buffer[3] == crc8(_buffer, 3);
rba90 2:f4f46b04ab8a 50 }
rba90 0:f32c0e562e9a 51 }
rba90 0:f32c0e562e9a 52
rba90 0:f32c0e562e9a 53 void BasicPacket::serialize(uint8_t *buffer)
rba90 0:f32c0e562e9a 54 {
rba90 0:f32c0e562e9a 55 memcpy(buffer, _buffer, sizeof(_buffer));
rba90 0:f32c0e562e9a 56 }
rba90 0:f32c0e562e9a 57
rba90 0:f32c0e562e9a 58 void BasicPacket::setFid(uint8_t fid)
rba90 0:f32c0e562e9a 59 {
rba90 0:f32c0e562e9a 60 // clear upper 4 bits
rba90 0:f32c0e562e9a 61 _buffer[0] &= 0x0f;
rba90 0:f32c0e562e9a 62
rba90 0:f32c0e562e9a 63 // set bits
rba90 0:f32c0e562e9a 64 _buffer[0] |= fid << 4;
rba90 1:dda08634a9be 65
rba90 1:dda08634a9be 66 // set verify flag
rba90 1:dda08634a9be 67 _isVerified = false;
rba90 0:f32c0e562e9a 68 }
rba90 0:f32c0e562e9a 69
rba90 0:f32c0e562e9a 70 void BasicPacket::setField1(uint8_t field)
rba90 0:f32c0e562e9a 71 {
rba90 0:f32c0e562e9a 72 // clear lower 4 bits
rba90 0:f32c0e562e9a 73 _buffer[0] &= 0xf0;
rba90 0:f32c0e562e9a 74
rba90 0:f32c0e562e9a 75 // set bits
rba90 0:f32c0e562e9a 76 _buffer[0] |= field & 0x0f;
rba90 1:dda08634a9be 77
rba90 1:dda08634a9be 78 // set verify flag
rba90 1:dda08634a9be 79 _isVerified = false;
rba90 0:f32c0e562e9a 80 }
rba90 0:f32c0e562e9a 81
rba90 0:f32c0e562e9a 82 void BasicPacket::setField2(uint8_t field)
rba90 0:f32c0e562e9a 83 {
rba90 0:f32c0e562e9a 84 _buffer[1] = field;
rba90 1:dda08634a9be 85
rba90 1:dda08634a9be 86 // set verify flag
rba90 1:dda08634a9be 87 _isVerified = false;
rba90 0:f32c0e562e9a 88 }
rba90 0:f32c0e562e9a 89
rba90 0:f32c0e562e9a 90 void BasicPacket::setField3(uint8_t field)
rba90 0:f32c0e562e9a 91 {
rba90 0:f32c0e562e9a 92 _buffer[2] = field;
rba90 1:dda08634a9be 93
rba90 1:dda08634a9be 94 // set verify flag
rba90 1:dda08634a9be 95 _isVerified = false;
rba90 0:f32c0e562e9a 96 }
rba90 0:f32c0e562e9a 97
rba90 0:f32c0e562e9a 98 uint8_t BasicPacket::getFid()
rba90 0:f32c0e562e9a 99 {
rba90 0:f32c0e562e9a 100 return (_buffer[0] & 0xf0) >> 4;
rba90 0:f32c0e562e9a 101 }
rba90 0:f32c0e562e9a 102
rba90 0:f32c0e562e9a 103 uint8_t BasicPacket::getField1()
rba90 0:f32c0e562e9a 104 {
rba90 0:f32c0e562e9a 105 return _buffer[0] & 0x0f;
rba90 0:f32c0e562e9a 106 }
rba90 0:f32c0e562e9a 107
rba90 0:f32c0e562e9a 108 uint8_t BasicPacket::getField2()
rba90 0:f32c0e562e9a 109 {
rba90 0:f32c0e562e9a 110 return _buffer[1];
rba90 0:f32c0e562e9a 111 }
rba90 0:f32c0e562e9a 112
rba90 0:f32c0e562e9a 113 uint8_t BasicPacket::getField3()
rba90 0:f32c0e562e9a 114 {
rba90 0:f32c0e562e9a 115 return _buffer[2];
rba90 0:f32c0e562e9a 116 }
rba90 0:f32c0e562e9a 117
rba90 0:f32c0e562e9a 118 uint8_t BasicPacket::getCrc()
rba90 0:f32c0e562e9a 119 {
rba90 2:f4f46b04ab8a 120 if (_isVerified)
rba90 2:f4f46b04ab8a 121 {
rba90 2:f4f46b04ab8a 122 return _buffer[3];
rba90 2:f4f46b04ab8a 123 }
rba90 2:f4f46b04ab8a 124 else
rba90 2:f4f46b04ab8a 125 {
rba90 2:f4f46b04ab8a 126 return crc8(_buffer, 3);
rba90 2:f4f46b04ab8a 127 }
rba90 0:f32c0e562e9a 128 }
rba90 2:f4f46b04ab8a 129
rba90 2:f4f46b04ab8a 130 #ifdef _DEBUG
rba90 2:f4f46b04ab8a 131 void BasicPacket::unit_test()
rba90 2:f4f46b04ab8a 132 {
rba90 2:f4f46b04ab8a 133 // value test
rba90 2:f4f46b04ab8a 134 BasicPacket testObject;
rba90 2:f4f46b04ab8a 135 testObject.setFid(0x1);
rba90 2:f4f46b04ab8a 136 testObject.setField1(0x2);
rba90 2:f4f46b04ab8a 137 testObject.setField2(0x34);
rba90 2:f4f46b04ab8a 138 testObject.setField3(0x67);
rba90 2:f4f46b04ab8a 139
rba90 2:f4f46b04ab8a 140 assert(0x1 == testObject.getFid());
rba90 2:f4f46b04ab8a 141 assert(0x2 == testObject.getField1());
rba90 2:f4f46b04ab8a 142 assert(0x34 == testObject.getField2());
rba90 2:f4f46b04ab8a 143 assert(0x67 == testObject.getField3());
rba90 2:f4f46b04ab8a 144
rba90 2:f4f46b04ab8a 145 assert(false == testObject.verify());
rba90 2:f4f46b04ab8a 146 testObject.generateCrc();
rba90 2:f4f46b04ab8a 147 assert(true == testObject.verify());
rba90 2:f4f46b04ab8a 148 assert(0xeb == testObject.getCrc());
rba90 2:f4f46b04ab8a 149
rba90 2:f4f46b04ab8a 150 // value test 2
rba90 2:f4f46b04ab8a 151 uint8_t testString[] = { 0x12, 0x34, 0x67, 0xeb };
rba90 2:f4f46b04ab8a 152 BasicPacket testObject2(testString);
rba90 2:f4f46b04ab8a 153
rba90 2:f4f46b04ab8a 154 assert(0x1 == testObject2.getFid());
rba90 2:f4f46b04ab8a 155 assert(0x2 == testObject2.getField1());
rba90 2:f4f46b04ab8a 156 assert(0x34 == testObject2.getField2());
rba90 2:f4f46b04ab8a 157 assert(0x67 == testObject2.getField3());
rba90 2:f4f46b04ab8a 158
rba90 2:f4f46b04ab8a 159 assert(true == testObject2.verify());
rba90 2:f4f46b04ab8a 160 testObject2.generateCrc();
rba90 2:f4f46b04ab8a 161 assert(true == testObject2.verify());
rba90 2:f4f46b04ab8a 162 assert(0xeb == testObject2.getCrc());
rba90 2:f4f46b04ab8a 163 }
rba90 2:f4f46b04ab8a 164 #endif