104 lines
3.1 KiB
C++
104 lines
3.1 KiB
C++
/*
|
||
* PackagerADT7310.h
|
||
*
|
||
* Created on: 27 сент. 2019 г.
|
||
* Author: user
|
||
*/
|
||
|
||
#ifndef SOURCE_DRIVER_CHIPSET_PACKAGERADT7310_H_
|
||
#define SOURCE_DRIVER_CHIPSET_PACKAGERADT7310_H_
|
||
|
||
#include <cstddef>
|
||
#include <stdint.h>
|
||
|
||
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_ */
|