/* * 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 ); }