mirror of https://github.com/EspoTek/Labrador.git
137 lines
4.5 KiB
ObjectPascal
137 lines
4.5 KiB
ObjectPascal
program opendevice;
|
|
|
|
{$APPTYPE CONSOLE}
|
|
|
|
uses
|
|
SysUtils, Classes,
|
|
libusbK in '..\libusbK.pas',
|
|
UExampleHelpers;
|
|
var
|
|
VID, PID : Integer;
|
|
procedure EvaluateCommandLine;
|
|
var
|
|
i : Integer;
|
|
s, s0,s1 : String;
|
|
n : Integer;
|
|
begin
|
|
for i := 1 to ParamCount do
|
|
begin
|
|
s := Uppercase(ParamStr(i)); //copy the whole current param string and convert to upper cases
|
|
s0 := Copy(s,1,4); // copy the first 4 signs
|
|
if (s0 = 'VID=') or
|
|
(s0 = 'PID=') then
|
|
begin // we got a vid or pid parm
|
|
s1 := Copy(s,5,MaxInt); // copy everything behind the '='
|
|
if Copy(s1,1,2) = '0X' then // check the c-style hex notation
|
|
s1 := '$'+ Copy(s1,3,MaxInt); // replace by delphi hex-notation
|
|
n := StrToIntDef(s1,-1); // convert, place -1 on any convert error
|
|
if (s0 = 'VID=') then
|
|
VID := n
|
|
else if (s0 = 'PID=') then
|
|
PID := n;
|
|
end;
|
|
end;
|
|
end;
|
|
const
|
|
UsbPipeTypeString : array[USBD_PIPE_TYPE] of String = (
|
|
'Control',
|
|
'Isochronous',
|
|
'Bulk,',
|
|
'Interrupt'
|
|
);
|
|
|
|
var
|
|
devlist : TStringList;
|
|
i,j,k : Integer;
|
|
devhandle : KUSB_HANDLE;
|
|
pipeinfo : WINUSB_PIPE_INFORMATION;
|
|
begin
|
|
WriteLn('OpenDevice test for LibusbK');
|
|
WriteLn('Returns Pipe info for all devices, or limited to a given VID/PID pair');
|
|
WriteLn('usage:');
|
|
WriteLn('opendevice [VID=nnnn] [PID=nnnn]');
|
|
WriteLn('VID and PID may use decimal or hexadecimal notation');
|
|
VID := -1;
|
|
PID := -1;
|
|
EvaluateCommandLine;
|
|
if VID < 0 then
|
|
WriteLn('VID is not used!')
|
|
else
|
|
WriteLn('VID used '+Format('%d (0x%x',[VID,VID]));
|
|
if VID < 0 then
|
|
WriteLn('PID is not used!')
|
|
else
|
|
WriteLn('PID used '+Format('%d (0x%x',[PID,PID]));
|
|
devlist := TStringList.Create;
|
|
try
|
|
ListLibusbKDevices(devlist,VID,PID);
|
|
if devlist.Count <= 0 then
|
|
begin
|
|
WriteLn('Error: No device found!');
|
|
Exit;
|
|
end;
|
|
for i := 0 to devlist.Count-1 do
|
|
begin
|
|
if UsbK_InitFromDevicePath(devlist[i],devhandle) then
|
|
begin
|
|
try
|
|
WriteLn('Opened device "'+devlist[i]+'"');
|
|
j := 0;
|
|
while UsbK_SetCurrentAlternateSetting(devhandle,j) do
|
|
begin
|
|
WriteLn('Using AlternateSetting ',j);
|
|
k := 0;
|
|
while UsbK_QueryPipe(devhandle,j,k,pipeinfo) do
|
|
begin
|
|
WriteLn(Format(' PipeId=0x%2.2x PipeType=0x%2.2x ("%s") Interval=%u MaximumPacketSize=%u',
|
|
[pipeInfo.PipeId, Byte(pipeInfo.PipeType),UsbPipeTypeString[pipeInfo.PipeType], pipeInfo.Interval, pipeInfo.MaximumPacketSize]));
|
|
Inc(k);
|
|
end;
|
|
Inc(j);
|
|
end;
|
|
finally
|
|
UsbK_Free(devhandle);
|
|
end;
|
|
end
|
|
else
|
|
WriteLn('Error: can not open device "'+devlist[i]+'"');
|
|
end;
|
|
finally
|
|
devlist.Free;
|
|
end;
|
|
(* Example output
|
|
OpenDevice test for LibusbK
|
|
Returns Pipe info for all devices, or limited to a given VID/PID pair
|
|
usage:
|
|
opendevice [VID=nnnn] [PID=nnnn]
|
|
VID and PID may use decimal or hexadecimal notation
|
|
VID is not used!
|
|
PID is not used!
|
|
Opened device "\\?\USB#Vid_04b4&Pid_8613#6&1b8c4f52&0&1#{53373f62-b5e4-d526-b292
|
|
-f86533b3e7df}"
|
|
Using AlternateSetting 0
|
|
Using AlternateSetting 1
|
|
PipeId=0x01 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512
|
|
PipeId=0x81 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512
|
|
PipeId=0x02 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512
|
|
PipeId=0x04 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512
|
|
PipeId=0x86 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512
|
|
PipeId=0x88 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512
|
|
Using AlternateSetting 2
|
|
PipeId=0x01 PipeType=0x03 ("Interrupt") Interval=1 MaximumPacketSize=64
|
|
PipeId=0x81 PipeType=0x03 ("Interrupt") Interval=1 MaximumPacketSize=64
|
|
PipeId=0x02 PipeType=0x03 ("Interrupt") Interval=1 MaximumPacketSize=512
|
|
PipeId=0x04 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512
|
|
PipeId=0x86 PipeType=0x03 ("Interrupt") Interval=1 MaximumPacketSize=512
|
|
PipeId=0x88 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512
|
|
Using AlternateSetting 3
|
|
PipeId=0x01 PipeType=0x03 ("Interrupt") Interval=1 MaximumPacketSize=64
|
|
PipeId=0x81 PipeType=0x03 ("Interrupt") Interval=1 MaximumPacketSize=64
|
|
PipeId=0x02 PipeType=0x01 ("Isochronous") Interval=1 MaximumPacketSize=512
|
|
PipeId=0x04 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512
|
|
PipeId=0x86 PipeType=0x01 ("Isochronous") Interval=1 MaximumPacketSize=512
|
|
PipeId=0x88 PipeType=0x02 ("Bulk,") Interval=0 MaximumPacketSize=512}
|
|
*)
|
|
|
|
end.
|