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

82 lines
2.8 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.

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