IowRead() - Statusänderung verdoppelt sich
Moderator: Guido Körber
-
- Posts: 32
- Joined: Tue Feb 15, 2005 10:22 pm
- Location: irgendwo zwischen Osnabrück und Bremen
- Contact:
Schade, dann wirds Zeit für einen Kernel-Modul-Update, damit unter Linux auch endlich Kontaktprellen ein Thema wird.Robert Marquardt wrote:Wenn Linux-Treiber oder Linux-Lib bei gleichen Reports einen verwirft, dann ist das ein Bug.
Gibt es eigentlich auch einen guten Grund, warum man sich mit Eingangswerten herumschlagen muss, die ausserhalb der Übertragungsrate des IOWarriors liegen?
Eberhard
-
- Posts: 543
- Joined: Mon Dec 01, 2003 6:09 pm
Da gibt es lustige Effekte besonders unter Windows. Man kann naemlich HID-Geraete anweisen immer mal wieder einen Report zu senden.
Der IO-Warrior macht das auch brav ohne das sich etwas an den Pins tut.
Das passiert ueblicherweise nur wenn man einen irregeleiteten Filtertreiber installiert hat der sich auch am IO-Warrior vergreift, aber vorgekommen ist das schon.
Der IO-Warrior macht das auch brav ohne das sich etwas an den Pins tut.
Das passiert ueblicherweise nur wenn man einen irregeleiteten Filtertreiber installiert hat der sich auch am IO-Warrior vergreift, aber vorgekommen ist das schon.
-
- Posts: 32
- Joined: Tue Feb 15, 2005 10:22 pm
- Location: irgendwo zwischen Osnabrück und Bremen
- Contact:
D.h. mein obiges Phänomen könnte auch soetwas sein? Was für Filtertreiber sind das denn? Wie kann ich die ausfindig machen?Robert Marquardt wrote:...
Der IO-Warrior macht das auch brav ohne das sich etwas an den Pins tut.
Das passiert ueblicherweise nur wenn man einen irregeleiteten Filtertreiber installiert hat der sich auch am IO-Warrior vergreift, aber vorgekommen ist das schon.
Martin
-
- Site Admin
- Posts: 2876
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Die Library auf MacOS macht das routinemässig (also das Ausfiltern von identischen Reports). Da das MacOS die IdleTime des IO-Warrior nicht auf 0 setzt wie Windows, wiederholt der IO-Warrior den letzten Report in einem gewissen Intervall. Der Vorteil dabei ist natürlich, dass der Anfangswert beim Starten der Lib ganz leicht zu haben ist.[/i]
-
- Posts: 543
- Joined: Mon Dec 01, 2003 6:09 pm
Na dann werde ich das fuer die IowKit V2.0 in die Windows-Version einbauen, statt es aus der Linuxversion auszubauen.
Vermutlich setzt Linux auch die Idle-Time nicht auf 0.
Dabei ergibt sich aber eben das das Hardware-Problem Prellen maskiert wird und durch das Problem ersetzt wird das der IO-Warrior nur noch halb so schnell reagiert.
Das koennte fuer die Fehlersuche bei Anwendungen im Bereich unter 20 msec problematisch sein.
Vermutlich setzt Linux auch die Idle-Time nicht auf 0.
Dabei ergibt sich aber eben das das Hardware-Problem Prellen maskiert wird und durch das Problem ersetzt wird das der IO-Warrior nur noch halb so schnell reagiert.
Das koennte fuer die Fehlersuche bei Anwendungen im Bereich unter 20 msec problematisch sein.
-
- Site Admin
- Posts: 2876
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
-
- Posts: 32
- Joined: Tue Feb 15, 2005 10:22 pm
- Location: irgendwo zwischen Osnabrück und Bremen
- Contact:
Ähh, das ist aus meiner Sicht der falsche Weg! Wenn Leute Schalter benutzen, die prellen, dann sollte das nicht durch den IOW gelöst werden, schon garnicht auf Kosten der zeitlichen Auflösung.Robert Marquardt wrote:...
Dabei ergibt sich aber eben das das Hardware-Problem Prellen maskiert wird und durch das Problem ersetzt wird das der IO-Warrior nur noch halb so schnell reagiert.
Das koennte fuer die Fehlersuche bei Anwendungen im Bereich unter 20 msec problematisch sein.
Ich finde, das der IOW und die dll in diesem Falle unter Windows völlig korrekt arbeiten. Wenn ein Schalter prellt, dann muss der Schalter eben entprellt werden. Dafür gibts ja nun entsprechende Schalter bzw. Schaltungen.
Ich wäre eher dafür, dieses Verhalten auch unter Linux und Mac OS einzubauen, damit alle drei Plattformen gleich reagieren.
Martin
-
- Site Admin
- Posts: 2876
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Habe gerade noch mal nachgeschaut, ist leider nicht ganz so trivial:Robert Marquardt wrote:Na dann werde ich das fuer die IowKit V2.0 in die Windows-Version einbauen, statt es aus der Linuxversion auszubauen.
Auch unter Linux gibt es Bedingungen, unter denen das Ausfiltern identischer Reports fehlschlägt:
Die Applikation hat gerade den Puffer Leergelesen und dann kommt ein identischer Report rein. Hier kann Treiber nichts mehr vergleichen und liefert also auch 2 Reports mit gleichen Zuständen. Vielleicht ist die Diskussion ja auch zu akademisch. Programme laufen ja doch meistens nach dem Prinzip:
Code: Select all
if(lastvalue!=newvalue)
tuwas()
Code: Select all
if(newvalue==0x??)
tuwas()
Doch Idle_time ist 0Robert Marquardt wrote: Vermutlich setzt Linux auch die Idle-Time nicht auf 0.
Verstehe ich nicht. Änderungen an den Pins, die länger als 10 (bzw.8) Millisekunden anstehen, führen zu einem neuen Report mit dem geänderten Status.Robert Marquardt wrote: Dabei ergibt sich aber eben das das Hardware-Problem Prellen maskiert wird und durch das Problem ersetzt wird das der IO-Warrior nur noch halb so schnell reagiert.
Das koennte fuer die Fehlersuche bei Anwendungen im Bereich unter 20 msec problematisch sein.
-
- Posts: 543
- Joined: Mon Dec 01, 2003 6:09 pm
Wir haben uns gerade intern darauf geeinigt das alles so bleibt wie es ist.
Fuer Linux und MacOS muss man gleiche Reports ausfiltern, da dort die Idle Time des USB offensichtlich standardmaessig nicht auf 0 steht. Der IO-Warrior stoesst also in regelmaessigen Intervallen gleiche Reports aus. Da das API aber nur Reports bei Aenderungen ausweist, muss man halt ausfiltern.
Bei Windows werden Reports in der Standardeinstellung des OS nicht wiederholt. Das maskieren ist also nicht noetig und unterbleibt daher.
Beknackte Treiber sind unwahrscheinlicher als Hardwareprobleme wie prellende Schalter.
Es koennte sich aber eine interne Aenderung bei Linux ergeben, da das Ausfiltern eigentlich nichts im Treiber zu suchen hat. Es gehoert logisch in die iowkit Library.
Solange dies aber keine Probleme ergibt, bleibt es erst mal wie es ist.
Das wird erst relevant wenn wir den Treiber zur Aufnahme in den Kernel einreichen und das wird noch ein bischen dauern.
Fuer Linux und MacOS muss man gleiche Reports ausfiltern, da dort die Idle Time des USB offensichtlich standardmaessig nicht auf 0 steht. Der IO-Warrior stoesst also in regelmaessigen Intervallen gleiche Reports aus. Da das API aber nur Reports bei Aenderungen ausweist, muss man halt ausfiltern.
Bei Windows werden Reports in der Standardeinstellung des OS nicht wiederholt. Das maskieren ist also nicht noetig und unterbleibt daher.
Beknackte Treiber sind unwahrscheinlicher als Hardwareprobleme wie prellende Schalter.
Es koennte sich aber eine interne Aenderung bei Linux ergeben, da das Ausfiltern eigentlich nichts im Treiber zu suchen hat. Es gehoert logisch in die iowkit Library.
Solange dies aber keine Probleme ergibt, bleibt es erst mal wie es ist.
Das wird erst relevant wenn wir den Treiber zur Aufnahme in den Kernel einreichen und das wird noch ein bischen dauern.
-
- Site Admin
- Posts: 2876
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
-
- Posts: 543
- Joined: Mon Dec 01, 2003 6:09 pm
Ich habe den Treiber nicht geschrieben und vermute nur anhand des Vorhandenseins dieses Filters das die idle_time nicht 0 ist.wayoda wrote: Doch Idle_time ist 0
Ich werde mal den Treiber ohne Filter implementieren und sehen was passiert. Wenn es weggelassen werden kann, dann wird es natuerlich auch entfernt, denn das erlaubt die Erkennung des Hardwareproblems prellen.
Ich dachte an eine Anwendung die oefter als alle 20 msec eine Aenderung verursacht und Prellen hat. Diese wuerde nur alle 20 msec einen Report produzieren, da der Prellreport weggefiltert wird.wayoda wrote: Verstehe ich nicht. Änderungen an den Pins, die länger als 10 (bzw.8) Millisekunden anstehen, führen zu einem neuen Report mit dem geänderten Status.
Der User wuerde vermuten das der IO-Warrior nicht 100 Reports pro Sekunde bringt, da ja seine Schaltung in Ordnung ist (das glauben die User immer).