Все операции, которые может выполнять драйвер устройства, разбиты на группы (функциональности).
Для добавления поддержки в устройство (главное или дочернее) каких-либо операций, нужно
Создать класс, унаследованный от класса нужно функциональности.
Например, Управление электропитанием.
Перекрыть в созданном классе методы, реализующие нужные операции.
Например, ExecutePower
Создать объект этого класса в конструкторе нужного устройства
Пример.
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;В устройстве может быть реализовано несколько разных функциональностей.