AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit CyUSB und IOCTL

Ein Thema von SKoops · begonnen am 27. Okt 2011 · letzter Beitrag vom 10. Apr 2012
Antwort Antwort
SKoops

Registriert seit: 27. Okt 2011
1 Beiträge
 
#1

Probleme mit CyUSB und IOCTL

  Alt 27. Okt 2011, 15:59
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

Geändert von SKoops (28. Okt 2011 um 09:31 Uhr) Grund: kleine Fehler im code geändert (falsche Typen im SizeOf), aber keine verbesserung
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#2

AW: Probleme mit CyUSB und IOCTL

  Alt 10. Apr 2012, 22:59
Benutze mal MSDN-Library durchsuchenNtDeviceIoControlFile statt MSDN-Library durchsuchenDeviceIoControl und gucke dir den IoStatusBlock an. Übersetzungen der Funktion finden sich in der JEDI-Apilib.

Hättest du vielleicht das exakte C-Beispiel zur Hand? Dürfte schneller sein zu überprüfen wo deine Übersetzung nicht stimmt ...
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz