75 lines
2.1 KiB
ObjectPascal
75 lines
2.1 KiB
ObjectPascal
unit mr.dev.usb.pipe0;
|
|
|
|
interface
|
|
uses
|
|
mr.drv.usb,
|
|
mr.drv.usb.types,
|
|
mr.dev.usb.pipebase;
|
|
|
|
const
|
|
bmDirIn = $80; // bit 7: data transfer direction
|
|
bmDirOut = $00;
|
|
|
|
bmTypeStandrad = $00; // bit 6..5: data transfer type
|
|
bmTypeClass = $20;
|
|
bmTypeVendor = $40;
|
|
|
|
bmRecDevice = $00; // bit 4..0: Recipient
|
|
bmRecInterface = $01;
|
|
bmRecEndpoint = $02;
|
|
bmRecOther = $03;
|
|
|
|
type
|
|
TPipe0 = class( TPipeBase)
|
|
public
|
|
function Transfer( RequestType : byte;
|
|
Request : byte;
|
|
Value : word;
|
|
Index : word;
|
|
Length : word;
|
|
Buffer : pointer;
|
|
BufferLength: cardinal;
|
|
var Transferred : cardinal;
|
|
Overlapped : pointer=nil): boolean;
|
|
|
|
end;
|
|
|
|
TPipe0Class = class of TPipe0;
|
|
|
|
|
|
implementation
|
|
|
|
{ TPipe0 }
|
|
|
|
// ================================================================================================
|
|
// Transfer
|
|
// ================================================================================================
|
|
function TPipe0.Transfer( RequestType : byte;
|
|
Request : byte;
|
|
Value : word;
|
|
Index : word;
|
|
Length : word;
|
|
Buffer : pointer;
|
|
BufferLength: cardinal;
|
|
var Transferred : cardinal;
|
|
Overlapped : pointer): boolean;
|
|
var
|
|
sud: TUsbSetupPacket;
|
|
|
|
begin
|
|
result := false;
|
|
|
|
if Assigned( fDriver) then
|
|
begin
|
|
sud.RequestType := RequestType;
|
|
sud.Request := Request;
|
|
sud.Value := Value;
|
|
sud.Index := Index;
|
|
sud.Length := Length;
|
|
|
|
result := fDriver.ControlTransfer( sud, Buffer, BufferLength, Transferred, Overlapped)
|
|
end
|
|
end;
|
|
|
|
end.
|