Moin,
ich bin gerade dabei, unsere in D5 geschriebenen USB Anwendungen auf den CyUSB Treiber von Cypress zu portieren. Dazu will ich das IOCTL Interface des Treibers nutzen.
Leider laufen die C-Code Beispiele nicht, die ich für Delphi umgeschrieben habe nicht richtig. Da mir der Code aus
diesem Beitrag über Device Descriptoren weitergeholfen hat, versuche ich es hier nochmal, in der Hoffnung, hier weiterzukommen. Die EP0-Transfers laufen jetzt vernünftig, nur mit den bulk-Transfers, die ich noch brauche, habe ich schwierigkeiten.
Delphi-Quellcode:
procedure NonEP0TransferOut(
handle:THandle;endPointAddress:Byte; pBuffer:PBuffer; bufferSize:Word);
const cBufSize = 512;
var
singleTransfer:SINGLE_TRANSFER;
buffer :
array[0..cBufSize+SizeOf(SINGLE_TRANSFER)-1]
of Byte;
i : Integer;
dwBytes: DWORD;
begin
ZeroMemory(@singleTransfer, SizeOf(SINGLE_TRANSFER));
SingleTransfer.SetupPacket.ulTimeOut := 1000;
singleTransfer.ucEndpointAddress := endPointAddress;
singleTransfer.IsoPacketLength := 0;
singleTransfer.BufferOffset := SizeOf(SINGLE_TRANSFER);
singleTransfer.BufferLength := bufferSize;
dwBytes := 0;
Move(SingleTransfer,Buffer,SizeOf(SINGLE_TRANSFER));
for i := 0
to bufferSize-1
do begin
buffer[i+SizeOf(TSingleTransfernEP0)] := pBuffer^[i];
// zu übertragende Daten direkt hinter den SINGLE_TRANFER record schreiben
end;
if not DeviceIoControl(
handle,IOCTL_ADAPT_SEND_NON_EP0_TRANSFER,
@buffer, bufferSize+SizeOf(SINGLE_TRANSFER),
@buffer, bufferSize+SizeOf(SINGLE_TRANSFER),
dwBytes,
nil)
then
raise ECyUSBException.Create('
Error #17 during nonEP0 control Transfer : ' + IntToStr(getLastError()));
end;
Delphi-Quellcode:
const cBufSize = 512;
TBuffer = array[0..cBufSize] of UCHAR;
PBuffer = ^TBuffer;
GetLastError() gibt in der
Exception 87 ERROR_INVALID_PARAMETER zurück.
Hat jemand ne Idee, welcher Parameter das ist und was falsch ist ?
gruss
Simon Koops