Обратные вызовы в C++ | страница 85



• класс для работы с датчиком;

• контейнер для хранения указанных классов;

• драйвер, обеспечивающий низкоуровневое взаимодействие с аппаратурой;

• очередь для выполнения асинхронных запросов;

• класс для отслеживания пороговых значений;

• интерфейсный класс, который будет взаимодействовать с приложением для вызовов соответствующих функций модуля.

Обобщенная диаграмма классов модуля представлена на Рис. 2735.


Рис. 27. Обобщенная диаграмма классов


Класс ISensorControl объявляет интерфейс модуля, класс SensorControl реализует указанный интерфейс. SensorControl содержит классы Observer (отслеживает пороговые значения), CommandQueue (очередь комманд для асинхронных запросов), SensorContainer (реализует контейнер для хранения классов для работы с датчиком).

Интерфейс для работы с датчиками объявлен в классе ISensor, обощенная реализация интерфейса осуществляется в классе SensorAbstract. Указанный класс хранит указатель на IDriver, который используется для получения значений датчиков. В классе IDriver объявляется интерфейс для взаимодействия с аппаратурой.

6.2. Реализация классов

6.2.1. Общие определения

В Листинг 86 представлены общие объявления типов.

Листинг 86. Общие объявления типов (SensorDef.h)

>namespace sensor

>{

>class ISensor;

>class IDriver;


>using SensorNumber = unsigned int;       // (1)

>using SensorValue = double;              // (2)

>using CheckAlertTimeout = unsigned int;  // (3)


>enum class SensorType : uint32_t  // (4)

>{

>  Spot = 0,

>  Smooth = 1,

>  Derivative = 2,

>};


>enum class DriverType : uint32_t  // (5)

>{

>  Simulation = 0,

>  Usb = 1,

>  Ethernet = 2

>};


>enum class AlertRule : uint32_t // (6)

>{

>  More = 0,

>  Less = 1

>};


>using SensorPointer = std::shared_ptr;  // (7)

>using DriverPointer = std::shared_ptr;  // (8)

>using SensorValueCallback = std::function;               // (9)

>using SensorAlertCallback = std::function;  // (10)


>}; //namespace sensor


В строке 1 объявлен тип для номера датчика, в строке 2 объявлен тип значения, возвращаемого датчиком. В строке 3 объявлен тип значения интервала опроса датчиков для сигнализации пороговых значений.

В строке 4 объявлены идентификаторы типов датчиков, в строке 5 объявлены идентификаторы драйверов. В строке 6 объявлены идентификаторы правил для задания пороговых значений (сигнализация превышения или опускания ниже заданного значения).

В строке 7 объявлен тип для хранения указателей классов датчиков, в строке 8 – тип для хранения указателей классов драйверов. В строке 9 объявлен тип обратного вызова, в который передается значение датчика, в строке 10 – тип обратного вызова, в который передается значение датчика в случае срабатывания сигнализации порогового значения.