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

104 lines
3.1 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.

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