50 lines
1.2 KiB
C++
50 lines
1.2 KiB
C++
/*
|
||
* PackagerAMC1210.cpp
|
||
*
|
||
* Created on: 28 авг. 2019 г.
|
||
* Author: user
|
||
*/
|
||
|
||
#include "PackagerAMC1210.hh"
|
||
#include <cstring>
|
||
|
||
const std::size_t driver::chipset::PackagerAMC1210::FrameSize = 128;
|
||
|
||
driver::chipset::PackagerAMC1210::Frame driver::chipset::PackagerAMC1210::encode(RegAddress rg_address, Data data,
|
||
bool write_nread) {
|
||
|
||
RegisterAddressAndData frame = {
|
||
.address = AddressingRegisterForm(rg_address, write_nread),
|
||
.data = data
|
||
};
|
||
|
||
Frame pack;
|
||
|
||
std::memcpy( &pack, &frame, sizeof(Frame) );
|
||
|
||
return pack;
|
||
|
||
}
|
||
|
||
driver::chipset::PackagerAMC1210::Data driver::chipset::PackagerAMC1210::decode(Frame frame) {
|
||
|
||
Data data = {
|
||
frame.frame[0] << 8 | frame.frame[1] >> 8,
|
||
frame.frame[1] << 8 | frame.frame[2] >> 8,
|
||
frame.frame[2] << 8 | frame.frame[3] >> 8,
|
||
};
|
||
|
||
return data;
|
||
|
||
}
|
||
|
||
bool driver::chipset::PackagerAMC1210::Frame::operator !=(const Frame& other) {
|
||
|
||
//todo: сделать сравнение через cmp
|
||
bool result = true;
|
||
for(unsigned short n = sizeof(frame) / sizeof(*frame); n and result; n--) {
|
||
result = (this->frame[n] == other.frame[n]);
|
||
} return result;
|
||
|
||
}
|