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



Листинг 97. Интерфейсный класс (ControlInterface.h)

>namespace sensor

>{


>  class ISensorControl

>  {

>  public:

>    virtual ~ ISensorControl () = default;


>    virtual void initialize() = 0;  // (1)

>    virtual void shutDown() = 0;    // (2)

>    virtual void assignDriver(DriverPointer driver) = 0;  // (3)

>    virtual DriverPointer getAssignedDriver() = 0;        // (4)

>    virtual DriverPointer getSensorDriver(SensorNumber number) = 0;    // (5)

>    virtual void addSensor(SensorType type, SensorNumber number) = 0;  // (6)

>    virtual void deleteSensor(SensorNumber number) = 0;           // (7)

>    virtual bool isSensorExist(SensorNumber number) = 0;          // (8)

>    virtual bool isSensorOperable(SensorNumber number) = 0;       // (9)

>    virtual SensorValue getSensorValue(SensorNumber number) = 0;  // (10)

>    virtual void querySensorValue(SensorNumber number, SensorValueCallback callback) = 0;  // (11)

>    virtual void readSensorValues(SensorValueCallback callback) = 0;                       // (12)

>    virtual SensorValue getMinValue(SensorNumber first, SensorNumber last) = 0;  // (13)

>    virtual SensorValue getMaxValue(SensorNumber first, SensorNumber last) = 0;  // (14)

>    virtual void setAlert(SensorNumber number, SensorAlertCallback callback, SensorValue alertValue, AlertRule alertRule, CheckAlertTimeout checkTimeoutSeс = 1) = 0;  // (15)

>      virtual void resetAlert(SensorNumber number) = 0;  // (16)


>      static ISensorControl* createControl();            // (17)

>  };

>};


В строке 1 и 2 объявлены методы для запуска и останова. В строках 3 и 4 объявлены методы для назначения и получения драйвера. Этот драйвер должен быть создан и назначен в самом начале работы, поскольку он будет передаваться новым создаваемым датчикам. Узнать назначенный драйвер для соответствующего датчика можно в методе 5.

В строках 6 и 7 объявлены методы для добавления и удаления датчика. В методе 8 можно проверить, существует ли датчик с переданным номером, в методе 9 можно проверить, является ли датчик работоспособным.

В строке 10 объявлен метод для чтения текущего показания датчика. В методе 11 осуществляется асинхронный запрос показания датчика, значение будет возвращаться через передаваемый обратный вызов. В строке 12 осуществляется опрос показаний всех работоспособных датчиков, значения также возвращаются через обратный вызов. С помощью методов, объявленных в строках 13 и 14, можно получить минимальное и максимальное значение для набора датчиков с номерами из указанного диапазона.