MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/driver/chipset/PackagerADT7310.hh

104 lines
2.8 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_ */