113 lines
4.4 KiB
C++
113 lines
4.4 KiB
C++
/*!\file
|
||
* \brief \todo Описание файла.
|
||
*/
|
||
/*
|
||
* II2c.h
|
||
*
|
||
* Created on: 3 июл. 2019 г.
|
||
* Author: titov
|
||
*/
|
||
|
||
#ifndef SOURCE_PERIPHERAL_II2C_H_
|
||
#define SOURCE_PERIPHERAL_II2C_H_
|
||
|
||
#include <cstddef>
|
||
#include <stdint.h>
|
||
|
||
namespace peripheral {
|
||
|
||
struct II2c {
|
||
|
||
typedef uint32_t Frequency; //!<Частота тактов в Гц.
|
||
typedef uint16_t FrameSize; //!<Размер фрейма в битах.
|
||
|
||
//!Интерфейс формирования транзакции на шине I2c.
|
||
struct ITransaction {
|
||
|
||
typedef uint16_t Address;
|
||
typedef uint16_t Quantity;
|
||
|
||
//!Функция добавляет запрос на запись n фреймов данных.
|
||
/*!Функция добавляет запрос на запись n фреймов данных.
|
||
* Фрейм данных от 1 до 8 бит, выравнены по правому краю.
|
||
* \param[in] address Адрес устройства на шине.
|
||
* \param[in] data Массив данных по 8-1 бит данных в char.
|
||
* \param[in] n Количество данных.
|
||
* \return Признак валидости запроса записи.
|
||
*/
|
||
virtual bool addWriteRequest( Address address, const void * data, Quantity n ) = 0;
|
||
|
||
//!Функция добавляет запрос на чтение n фреймов данных.
|
||
/*!Функция добавляет запрос на чтение n фреймов данных.
|
||
* Фрейм данных от 1 до 8 бит, выравнены по правому краю.
|
||
* \param[in] address Адрес устройства на шине.
|
||
* \param[in] data Массив данных по 8-1 бит данных в char.
|
||
* \param[in] n Количество данных.
|
||
* \return Признак валидости запроса записи.
|
||
*/
|
||
virtual bool addReadRequest( Address address, Quantity n ) = 0;
|
||
|
||
//!Функция добавляет событие СТОП.
|
||
virtual void addStopCondition() = 0;
|
||
|
||
//!Функция добавляет автоматический повтор предыдущей операции в случае отсутсвия подтверждения.
|
||
virtual bool addPollingAcknowledge() = 0;
|
||
|
||
virtual ~ITransaction() = default;
|
||
};
|
||
|
||
struct IResult {
|
||
//!Транзакция выполнена успешно.
|
||
virtual bool isComplete() const noexcept = 0;
|
||
//!Транзакция выполнена с ошибкой.
|
||
virtual bool isError() const noexcept = 0;
|
||
//!Получить данные транзакции.
|
||
/*!Функция возвращает следующую порцию запрощенных данных.
|
||
* Функция возвращает данные порциями того же размера, что и были запрошенны, последовательно в соотвествии с порядком запросов в транзакции.
|
||
* \param[in] data Указатель на буфер для данных полученных в отвен на запрос.
|
||
* \return Количество полученных данных или 0.
|
||
*/
|
||
virtual ITransaction::Quantity getRequestedData( void * data ) = 0;
|
||
|
||
virtual ~IResult() = default;
|
||
};
|
||
|
||
//!Запрос на выполнения транзакции.
|
||
/*!Функция осуществляет запрос на выполнение транзакции.
|
||
* Возвращаемый интерфейс необходимо вернуть модулю путем вызова функции perform, либо reset.
|
||
* \param[in] freq Частота тактового сигнала для транзакции.
|
||
* \param[in] frame_size Размер фрейма данных.
|
||
* \return Интерфейс управления транзакцией, либо nullptr.
|
||
*/
|
||
virtual ITransaction * request( Frequency freq, FrameSize frame_size ) = 0;
|
||
//!Выполнение транзакции.
|
||
/*!Подготовленная транзакция проходит валидацию на возможность выполнения и, в случае успеха, гарантированно будет обработана.
|
||
* После вызова этой функции интерфейс транзакции считается не валидным.
|
||
* Возвращаемый функцией интерфейс получения результата транзакции необходимо вернуть модулю путем вызова функции discard.
|
||
* \param[in] transaction Интерфейс транзакции подлжешей выполнению.
|
||
* \return Интерфейс управления результатом транзакции, в случае успешной валидации транзакции, либо nullptr.
|
||
*/
|
||
virtual IResult * perform( ITransaction * & transaction ) = 0;
|
||
//!Отброс результата.
|
||
/*!Функция отбрасывает результат выполнения транзакции и освобождает выделенные ресурсы.
|
||
* После вызова этой функции интерфейс получения результатов транзакции считается не валидным.
|
||
* \param[in] result Интерфейс получения результата выполнения транзакции, подлежащий возврату.
|
||
*/
|
||
virtual void discard( IResult * & result ) noexcept = 0;
|
||
//!Отмена и сброс транзакции.
|
||
/*!Функция возвращает интерфейс транзакции и освобождает выделенные ресурсы.
|
||
* \param[in] transaction Интерфейс транзакции подлежащий возврату без выполнения.
|
||
*/
|
||
virtual void reset( ITransaction * & transaction ) noexcept = 0;
|
||
|
||
virtual void reset() noexcept = 0;
|
||
|
||
virtual ~II2c() = default;
|
||
|
||
};
|
||
|
||
}
|
||
|
||
|
||
#endif /* SOURCE_PERIPHERAL_II2C_H_ */
|