109 lines
3.9 KiB
ObjectPascal
109 lines
3.9 KiB
ObjectPascal
unit mr.dev.usb.pipe;
|
|
|
|
interface
|
|
uses
|
|
Windows,
|
|
mr.drv.usb,
|
|
mr.dev.usb.pipebase;
|
|
|
|
type
|
|
TPipe = class( TPipeBase)
|
|
|
|
public
|
|
function Read( var Buffer;
|
|
BufferLength : cardinal;
|
|
var Transferred : cardinal;
|
|
Overlapped : POverlapped = nil) : boolean;
|
|
|
|
function Write( var Buffer;
|
|
BufferLength : cardinal;
|
|
var Transferred : cardinal;
|
|
Overlapped : POverlapped = nil) : boolean;
|
|
|
|
public
|
|
function Abort : boolean;
|
|
function Flush : boolean;
|
|
function Reset : boolean;
|
|
end;
|
|
implementation
|
|
|
|
{ TPipe }
|
|
|
|
// @@@: Construction / destruction ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
//
|
|
// Construction / destruction
|
|
//
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
// ================================================================================================
|
|
// Abort
|
|
// ================================================================================================
|
|
function TPipe.Abort: boolean;
|
|
begin
|
|
if Assigned( fDriver)
|
|
then result := fDriver.AbortPipe( fPipeInfo.PipeID)
|
|
else result := false
|
|
end;
|
|
|
|
// ================================================================================================
|
|
// Flush
|
|
// ================================================================================================
|
|
function TPipe.Flush: boolean;
|
|
begin
|
|
if Assigned( fDriver)
|
|
then result := fDriver.FlushPipe( fPipeInfo.PipeID)
|
|
else result := false
|
|
end;
|
|
|
|
// ================================================================================================
|
|
// Reset
|
|
// ================================================================================================
|
|
function TPipe.Reset: boolean;
|
|
begin
|
|
if Assigned( fDriver)
|
|
then result := fDriver.ResetPipe( fPipeInfo.PipeID)
|
|
else result := false
|
|
end;
|
|
|
|
// ================================================================================================
|
|
// Read
|
|
// ================================================================================================
|
|
function TPipe.Read(var Buffer;
|
|
BufferLength : cardinal;
|
|
var Transferred : cardinal;
|
|
Overlapped : POverlapped): boolean;
|
|
begin
|
|
if Assigned( fDriver) then
|
|
result := fDriver.ReadPipe( fPipeInfo.PipeId,
|
|
@Buffer,
|
|
BufferLength,
|
|
Transferred,
|
|
Overlapped)
|
|
else
|
|
result := false;
|
|
end;
|
|
|
|
// ================================================================================================
|
|
// Write
|
|
// ================================================================================================
|
|
function TPipe.Write( var Buffer;
|
|
BufferLength : cardinal;
|
|
var Transferred : cardinal;
|
|
Overlapped : POverlapped): boolean;
|
|
begin
|
|
if Assigned( fDriver) then
|
|
result := fDriver.WritePipe( fPipeInfo.PipeId,
|
|
@Buffer,
|
|
BufferLength,
|
|
Transferred,
|
|
Overlapped)
|
|
else
|
|
result := false;
|
|
end;
|
|
|
|
end.
|