MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/driver/chipset/PackagerAMC1210.hh

85 lines
2.3 KiB
C++
Raw Permalink Normal View History

2024-06-07 11:12:56 +03:00
/*
* PackagerAMC1210.h
*
* Created on: 28 авг. 2019 г.
* Author: user
*/
#ifndef SOURCE_DRIVER_CHIPSET_PACKAGERAMC1210_H_
#define SOURCE_DRIVER_CHIPSET_PACKAGERAMC1210_H_
#include <cstddef>
#include <stdint.h>
namespace driver { namespace chipset {
struct PackagerAMC1210 {
static const std::size_t FrameSize; //!<Фиксированный размер кадра передаваемого по линии связи для данного типа пакеджера.
typedef uint16_t RegAddress; //!<Тип адреса регистра в устройстве.
struct Frame {
uint16_t frame[8];
bool operator!=( const Frame & other );
};
struct Data {
int16_t data[7];
};
static Frame encode( RegAddress rg_address, Data data, bool write_nread );
static Data decode( Frame frame );
struct Packager {
typedef PackagerAMC1210::Frame Frame;
typedef PackagerAMC1210::Data Data;
RegAddress rg_address;
bool write_nread;
Frame pack( Data ) const;
Data unpack( Frame ) const;
};
private:
static const uint16_t READ_OP_CODE = 0x01;
static const uint16_t WRITE_OP_CODE = 0x00;
//!Структура адресного заголовка фрейма.
struct AddressingRegisterForm {
uint16_t : 8;
uint16_t REGISTER_ADDRESS : 7;
uint16_t READ_WRITE_OP : 1;
AddressingRegisterForm(uint16_t reg_addr, bool write_nread) :
REGISTER_ADDRESS(reg_addr),
READ_WRITE_OP(write_nread ? WRITE_OP_CODE : READ_OP_CODE) {}
};
//!Структура компановки адресного заголовка и СЛОВА данных.
struct RegisterAddressAndData {
AddressingRegisterForm address;
Data data;
};
};
inline driver::chipset::PackagerAMC1210::Frame driver::chipset::PackagerAMC1210::Packager::pack(Data data) const {
return encode( rg_address, data, write_nread );
}
inline driver::chipset::PackagerAMC1210::Data driver::chipset::PackagerAMC1210::Packager::unpack(
Frame frame) const {
return decode( frame );
}
} /* namespace chipset */
} /* namespace driver */
#endif /* SOURCE_DRIVER_CHIPSET_PACKAGERAMC1210_H_ */