MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/driver/chipset/PackagerMCP23S17.hpp

82 lines
2.3 KiB
C++

/*
* PackagerMCP23S17.hpp
*
* Created on: 17 èþë. 2019 ã.
* Author: titov
*/
#ifndef SOURCE_DRIVER_CHIPSET_PACKAGERMCP23S17_HPP_
#define SOURCE_DRIVER_CHIPSET_PACKAGERMCP23S17_HPP_
#include <cstddef>
#include <stdint.h>
namespace driver { namespace chipset {
struct PackagerMCP23S17 {
typedef uint16_t HardwareAddress; //!<Òèï àäðåñà ìèêðîñõåìû.
typedef uint16_t Data; //!<Òèï äàííûõ èñïîëüçóåìûõ ïîëüçîâàòåëåì äëÿ õðàíåíèÿ ïîëåçíîé èíôîðìàöèè.
typedef uint32_t Frame; //!<Òèï äàííûõ îòïðàâëÿåìûé è ïîëó÷àåìûé ïî ëèíèè ñâÿçè.
static const std::size_t FrameSize; //!<Ôèêñèðîâàííàÿ äëèíà êàäðà äàííûõ ïåðåäàâàåìàÿ ïî ëèíèè ñâÿçè äëÿ ðàñøèðèòåëÿ ïîðòîâ.
typedef uint16_t RegAddress; //!<Òèï àäðåñà ðåãèñòðà â óñòðîéñòâå.
/*! \brief Óïàêîâàòü ïîëüçîâàòåëüñêèå äàííûå äëÿ ïåðåäà÷å ïî ëèíèè ñâÿçè.
* \param [in] Àäðåñ ðåãèñòðà
* \param [in] Äàííûå ðåãèñòðà
* \param [in] Ïðèçíàê ÷òåíèÿ(true) èëè çàïèñè(false)
* \return Ïîäãîòîâëåííûé êàäð äëÿ ïåðåäà÷è ïî ëèíèè ñâÿçè.
*/
static Frame encode( RegAddress rg_address, Data data, bool write_nread, HardwareAddress hw_address );
static Data decode( Frame frame );
struct Packager {
typedef PackagerMCP23S17::Frame Frame;
typedef PackagerMCP23S17::Data Data;
HardwareAddress hw_address;
RegAddress rg_address;
bool write_nread;
Frame pack( Data ) const;
Data unpack( Frame ) const;
};
private:
//!Ñòðóêòóðà àäðåñíîãî çàãîëîâêà ôðåéìà.
struct AddressingRegisterForm {
uint16_t REGISTER_ADDRESS : 8;
uint16_t RW_FLAG : 1;
uint16_t ADDRESS_CODE : 3;
uint16_t FIXED_CODE : 4;
};
//!Ñòðóêòóðà êîìïàíîâêè àäðåñíîãî çàãîëîâêà è ÑËÎÂÀ äàííûõ.
struct RegisterAddressAndData {
AddressingRegisterForm address;
Data data;
};
};
}
}
inline driver::chipset::PackagerMCP23S17::Packager::Frame driver::chipset::PackagerMCP23S17::Packager::pack(
Data data ) const {
return encode( rg_address, data, write_nread, hw_address );
}
inline driver::chipset::PackagerMCP23S17::Packager::Data driver::chipset::PackagerMCP23S17::Packager::unpack(
Frame frame ) const {
return decode( frame );
}
#endif /* SOURCE_DRIVER_CHIPSET_PACKAGERMCP23S17_HPP_ */