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