1.3.1.2.2. Поддержка операций в драйвере устройства

Все операции, которые может выполнять драйвер устройства, разбиты на группы (функциональности).

Для добавления поддержки в устройство (главное или дочернее) каких-либо операций, нужно

  1. Создать класс, унаследованный от класса нужно функциональности.

    Например, Управление электропитанием.

  2. Перекрыть в созданном классе методы, реализующие нужные операции.

    Например, ExecutePower

  3. Создать объект этого класса в конструкторе нужного устройства

Пример. 

interface
type
  TTestPowerDeviceEngine = class(TPowerDeviceEngine)

  private
    procedure SetPowerOn(NewPowerOn: Boolean);

  public
    procedure ExecutePower(InputParams: TPowerInputParams; OutputParams: TPowerOutputParams; CancelHandle: THandle); override;

  end;

  TTestPowerMainDeviceInterface = class(TMainDeviceInterface)
  public
    constructor Create(DeviceHandle: TDeviceHandle; IniParams: TIniParams); override;
  end;

implementation

procedure TTestPowerDeviceEngine.ExecutePower(InputParams: TPowerInputParams; OutputParams: TPowerOutputParams; CancelHandle: THandle);
begin
  SetPowerOn(InputParams.PowerOn);
end;

procedure TTestPowerDeviceEngine.SetPowerOn(Value: Boolean);
begin
  with Device.BeginUpdateDeviceState(True) do
  begin
    try
      PowerOn := Value;
    finally
      EndUpdateDeviceState;
    end;
  end;
end;

constructor TTestPowerMainDeviceInterface.Create(DeviceHandle: TDeviceHandle; IniParams: TIniParams);
begin
  inherited Create(DeviceHandle, IniParams);
  TTestPowerDeviceEngine.Create(Self, IniParams);
  // Некоторый код пропущен

end;

В устройстве может быть реализовано несколько разных функциональностей.