62 lines
1.5 KiB
C++
62 lines
1.5 KiB
C++
/*
|
||
* PackagerADS1259Extended.cpp
|
||
*
|
||
* Created on: 8 июл. 2020 г.
|
||
* Author: krugliy
|
||
*/
|
||
|
||
#include "PackagerADS1259Extended.hh"
|
||
|
||
//todo: из-за несоответствий порядков бит в байте (байт в слове) на принимающей и отправляющей стороне.
|
||
static uint16_t swapWord(uint16_t word) { return (word << 8) | ((word >> 8) & 0xFF); }
|
||
|
||
const std::size_t driver::chipset::PackagerADS1259Extended::FrameSize = 48;
|
||
|
||
driver::chipset::PackagerADS1259Extended::Frame driver::chipset::PackagerADS1259Extended::encode() {
|
||
|
||
union {
|
||
Frame frame;
|
||
char words[sizeof(Frame)] = { Packager::RDATA };
|
||
};
|
||
|
||
frame = 0;
|
||
words[0] = Packager::RDATA;
|
||
|
||
for(unsigned short n = 0; n < sizeof(Frame); n++) {
|
||
words[n] = swapWord(words[n]);
|
||
}
|
||
|
||
return frame;
|
||
|
||
}
|
||
|
||
driver::chipset::PackagerADS1259Extended::Data driver::chipset::PackagerADS1259Extended::decode( Frame frame ) {
|
||
|
||
union {
|
||
Frame uframe;
|
||
char words[sizeof(Frame)];
|
||
};
|
||
|
||
uframe = frame;
|
||
|
||
for(unsigned short n = 0; n < sizeof(Frame); n++) {
|
||
words[n] = swapWord(words[n]);
|
||
}
|
||
|
||
return uframe >> 8;
|
||
|
||
}
|
||
|
||
driver::chipset::PackagerADS1259Extended::Frame driver::chipset::PackagerADS1259Extended::Packager::pack() const {
|
||
|
||
return encode();
|
||
|
||
}
|
||
|
||
driver::chipset::PackagerADS1259Extended::Data driver::chipset::PackagerADS1259Extended::Packager::unpack(
|
||
Frame frame ) const {
|
||
|
||
return decode( frame );
|
||
|
||
}
|