Files
bds.mr.devmgr/src.devmgr/drv/usb/mr.drv.usb.pas
T
2026-01-08 19:04:51 +01:00

196 lines
8.5 KiB
ObjectPascal

unit mr.drv.usb;
interface
uses
WinApi.Windows,
System.Classes,
spring.Collections,
spring.Collections.Lists,
mr.drv.usb.types,
mr.drv;
type
TUsbDriver = class;
TUsbDriverClass= class of TUsbDriver;
TScanCallback = reference to procedure( DevicePath: string);
TUsbDeviceInfo = class
private
fDriverClass : TUsbDriverClass;
fDevicePath : string;
fVendorID : word;
fProductID : word;
fLocation : string;
fDescription : string;
public
property DriverClass : TUsbDriverClass read fDriverClass;
property DevicePath : string read fDevicePath;
property Location : string read fLocation;
property Description : string read fDescription;
property VendorID : word read fVendorID;
property ProductID : word read fProductID;
public
constructor Create( DevicePath: string; DriverClass: TUsbDriverClass);
destructor Destroy; override;
end;
IUsbDriverMap = IDictionary<string, TUsbDeviceInfo>;
TAnsiStringList = TList<AnsiString>;
TList = spring.Collections.IList<string>;
TUsbDriver = class abstract(TDriver)
public
class procedure Scan( ScanCallback: TScanCallback); virtual; abstract;
protected
fVendorID : word;
fProductID : word;
fLocation : string;
fDescription : string;
fDeviceSpeed : TusbDeviceSpeed;
fDeviceDescriptor : TUsbDeviceDescriptor;
public
function GetDescriptor( DescriptorType : byte;
Index : byte;
LanguageID : word;
Buffer : pointer;
BufferLength : cardinal;
var Transferred : cardinal) : boolean; virtual; abstract;
function GetAssociatedInterface( InterfaceIndex : byte;
var InterfaceHandle) : boolean; virtual; abstract;
function QueryInterfaceSettings( AlternateSettingNumber : byte;
var AlternateSettingDescriptor : TUsbAlternateSettingDescriptor): boolean; virtual; abstract;
function QueryPipe( AlternateInterfaceNumber : byte;
PipeIndex : byte;
var PipeInformation : TusbPipeInformation): boolean; virtual; abstract;
function ControlTransfer( SetupPacket : TUsbSetupPacket;
Buffer : pointer;
BufferLength : cardinal;
var Transferred : cardinal;
Overlapped : POverlapped = nil): boolean; virtual; abstract;
function AbortPipe( PipeID : byte): boolean; virtual; abstract;
function FlushPipe( PipeID : byte): boolean; virtual; abstract;
function ResetPipe( PipeID : byte): boolean; virtual; abstract;
function ReadPipe( PipeID : byte;
Buffer : pointer;
BufferLength : cardinal;
var Transferred : cardinal;
Overlapped : POverlapped = nil): boolean; virtual; abstract;
function WritePipe( PipeID : byte;
Buffer : pointer;
BufferLength : cardinal;
var Transferred : cardinal;
Overlapped : POverlapped = nil): boolean; virtual; abstract;
function GetOverlappedResult( Overlapped : POverlapped;
var Transferred : cardinal;
Wait : boolean): boolean; virtual; abstract;
public
constructor Create( DevicePath: string);
public
property VendorID : word read fVendorID;
property ProductID : word read fProductID;
property Location : string read fLocation;
property Description : string read fDescription;
property DeviceSpeed : TusbDeviceSpeed read fDeviceSpeed;
end;
// TUsbDriverClass = class of TUsbDriver;
implementation
uses
mr.dev.usb,
mr.dev.manager,
System.Win.Registry,
System.SysUtils;
{ TUsbDriver }
// @@@: Construction / destruction ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
// Construction / destruction
//
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ================================================================================================
// Create
// ================================================================================================
constructor TUsbDriver.Create( DevicePath: string);
begin
fDeviceHandle := INVALID_HANDLE_VALUE;
fDevicePath := DevicePath;
fDeviceSpeed := LowSpeed;
ParseDevicePath( fDevicePath, fVendorID, fProductID, fLocation, fDescription);
end;
// @@@: INTERNALS +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
// INTERNALS
//
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
{ TUsbDeviceInfo }
// @@@: construction / destruction ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
// construction / destruction
//
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ================================================================================================
// constructor
// ================================================================================================
constructor TUsbDeviceInfo.Create(DevicePath: string; DriverClass: TUsbDriverClass);
begin
fDevicePath := DevicePath;
fDriverClass := DriverClass;
ParseDevicePath( fDevicePath, fVendorID, fProductID, fLocation, fDescription)
end;
// ================================================================================================
// destructor
// ================================================================================================
destructor TUsbDeviceInfo.Destroy;
begin
inherited;
end;
end.