MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/driver/chipset/PackagerAMC1210.hh
2024-06-07 11:12:56 +03:00

85 lines
2.3 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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_ */