IowKitCloseDevice

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
Xanos
Posts: 8
Joined: Wed Jan 31, 2007 4:56 pm

IowKitCloseDevice

Post by Xanos »

hallo,

habe leider im Forum nichts gefunden, was mir bei meinem Problem
helfen könnte.

Ich öffne bei meinem Programm 3 IOW-Devices und kann auch
wunderbar mit ihnen arbeiten.

Rufe ich dann beim Beenden des Programmes die CloseDevice() aus der
dll auf, hängt sich das Programm hin und wieder genau in dieser Methode auf.

Nutze derzeit noch die 1.4, für die 1.5 müsste ich alle read-funktionen
umbauen, da dann die ReadImmediate nichtmehr funktioniert und im Download fehlt leider eine Docu zur 1.5.

Danke im Voraus
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Wie genau versagt denn IowKitReadImmediate bei der 1.5?
Xanos
Posts: 8
Joined: Wed Jan 31, 2007 4:56 pm

Post by Xanos »

ich bekomme nichts, was ich verwerten könnte zurück.
vielleicht liegt es dann auch an den write-methoden, die wir vorher aufrufen.
hab leider keine ahnung, was wirklich alles geändert wurde.

von anderer stelle habe ich auch erfahren, dass man da dann die ReadNonBlocking verwenden soll.

nur hab ich dazu nichts in der Docu finden können.

aber die eigentliche frage ist ja, warum bleibt er in der CloseDevice hängen.
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Kann ich die Sourcen des Programms bekommen? Ohne fleissige Debug-Sitzungen kann ich nicht sagen warum IowKitCloseDevice haengen bleibt. Bitte an marquardt att codemercs dott com schicken. Morgen bin ich allerdings nicht da.

IowKitReadNonBlocking wird in einigen Beispielen verwendet.
Wie IowKitRead, aber wenn nichts zu lesen ist, dann wird 0 geliefert und im Puffer nichts veraendert.
Xanos
Posts: 8
Joined: Wed Jan 31, 2007 4:56 pm

Post by Xanos »

danke für die hilfe bei der lösung des problems,


jetzt läuft alles ohne probleme

grüße
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Das scheint uebrigens ein interessantes Projekt zu sein. Wollen Sie nicht darueber hier ein bischen berichten? Ich bin sicher da gibt es einige Interessenten hier :-)
Xanos
Posts: 8
Joined: Wed Jan 31, 2007 4:56 pm

Post by Xanos »

im grunde wäre das kein problem.


Gibt es denn schon irgendeinen Teil vom Forum für soetwas, oder
einfach nur einen neuen Thread starten?
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Einfach einen neuen Thread starten. Der Traffic ist hier nicht so hoch das der Thread schnell verschwindet. Wir koennen auch den Thread bestimmt bei Bedarf in ein neues Forum umsetzen.
Guido Körber
Site Admin
Posts: 2876
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Einfach einen Link an: sales@codemercs.com schicken, bei der nächsten Änderung an der Site packen wir das dann mit rein.
hiasl
Posts: 26
Joined: Tue Jul 25, 2006 9:58 am

Post by hiasl »

Hallo,

was war denn die Ursache?
Bei mir tritt das Phänomen auch auf. Interessanterweise scheint es so zu sein, dass wenn über IowKitRead() nichts gelesen wurde, IowKitCloseDevice() zuverlässig funktioniert. Wenn aber was gelesen wurde, dann klappt es meistens nicht...

Ciao
Matthias
Xanos
Posts: 8
Joined: Wed Jan 31, 2007 4:56 pm

Post by Xanos »

Also, wenn ich micht recht erinner, dann lag es bei uns wohl daran, dass
wir die OpenDevice() und CloseDevice öfters aufgerufen haben.

Diese sollten nur einmal zu Beginn und am Ende des Programms
aufgerufen werden.
Der Zugriff auf die einzelnen Warriors funktioniert dann über
IowKitGetDeviceHandle().

Es könnte auch noch ein Fehler in unserer Read()-Funktion gewesen sein.
Hier ist der Lösungsansatz den uns Herr Marquardt zur Verfügung gestellt
hat:

Code: Select all

ret = IowKitReadNonBlocking(this->m_iow, IOW_PIPE_IO_PINS,
   &report, IOWKIT40_IO_REPORT_SIZE);
if (ret)
   while (IowKitReadNonBlocking(this->m_iow, IOW_PIPE_IO_PINS,
     &report, IOWKIT40_IO_REPORT_SIZE)
     ;
So genau kann ich das allerdings nichtmehr sagen, da ich nicht die
Zugriffe auf den IO-Warrior programmiert habe, sondern Hauptsächlich
die Auswertung der gelesenen Daten und die Generierung der Daten, die
gesendet werden sollten.

MfG

Xanos
Post Reply