Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: LoRaBaseStation LoRaTerminal
BasicPacket/BasicPacket.cpp@1:dda08634a9be, 2016-06-29 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |