/* * PackagerADT7310.h * * Created on: 27 сент. 2019 г. * Author: user */ #ifndef SOURCE_DRIVER_CHIPSET_PACKAGERADT7310_H_ #define SOURCE_DRIVER_CHIPSET_PACKAGERADT7310_H_ #include #include namespace driver { namespace chipset { struct PackagerADT7310 { struct ConfigPackager { typedef uint16_t Data; //!<Тип данных используемых пользователем для настроек. typedef uint16_t Frame; //!<Тип данных отправляемый и получаемый по линии связи. static const std::size_t FrameSize; //!<Фиксированный размер кадра передаваемого по линии связи. uint16_t reg_address; bool write_nread; static const uint16_t read_mock = 0xFFFFu; Frame pack( Data = 0xFFFFu ) const; Data unpack( Frame ) const; }; struct TemperaturePackager { typedef int16_t Data; typedef uint32_t Frame; static const std::size_t FrameSize; //!<Фиксированный размер кадра передаваемого по линии связи. static const uint16_t reg_address = 0x02; static const bool write_nread = false; static const uint16_t read_mock = 0xFFFFu; Frame pack( Data = 0xFFFFu ) const; Data unpack( Frame ) const; }; private: //!Структура адресного заголовка фрейма. union CommandByteForm { struct CommandByte { uint16_t data : 8; uint16_t C1C0 : 2; uint16_t CONT_MODE : 1; uint16_t REGISTER_ADDRESS : 3; uint16_t RW_FLAG : 1; uint16_t ZERO : 1; static CommandByte make( uint16_t reg_addr, bool read_nwrite, uint16_t data ) { const CommandByte cmd_byte = { .data = data, .C1C0 = 0, .CONT_MODE = 0, .REGISTER_ADDRESS = reg_addr, .RW_FLAG = read_nwrite, .ZERO = 0 }; return cmd_byte; } } command_byte; typedef uint16_t Frame; Frame frame; // для выполнения копирования и присвоения. CommandByteForm() = default; CommandByteForm & operator=( const CommandByteForm & ) = default; CommandByteForm( const CommandByteForm & ) = default; CommandByteForm( const Frame & frame ) : frame(frame) {} CommandByteForm( uint16_t reg_addr, bool read_nwrite, char msb_data_byte ) : command_byte( CommandByteForm::CommandByte::make(reg_addr, read_nwrite, msb_data_byte) ) {} }; static uint32_t expand( CommandByteForm command_byte, char lsb_data_byte ); }; } /* namespace chipset */ } /* namespace driver */ // #endif /* SOURCE_DRIVER_CHIPSET_PACKAGERADT7310_H_ */