InputReport lesen wenn er sich verändert

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
Xenar
Posts: 8
Joined: Sun Feb 13, 2005 5:03 pm

InputReport lesen wenn er sich verändert

Post by Xenar »

Hallo,
vorweg die Kontrolle, ob ich alles richtig verstanden habe:"Ich benutze Delphi zum Programmieren für den IOW40. Procedure TForm1.HidCtlDeviceData wird ja immer ausgelöst wenn ein ReportByte vom Warrior bei Windows ankommt. Der Vorteil ist, dass die procedure if IOWarrior.ReadFile... siehe unten nicht den Prozess blockiert, weil die if-schleife wartet bis ein byte ankommt.

Code: Select all

procedure TForm1.HidCtlDeviceData(HidDev: TJvHidDevice; ReportID: Byte;
  const Data: Pointer; Size: Word);
  var
  IOWarriorInputReport: TIOWarriorIOReport;
  BytesRead: Cardinal;
  ByteX: integer;  
   begin
    if IOWarrior.ReadFile(IOWarriorInputReport,
      IOWarrior.Caps.InputReportByteLength, BytesRead) then
      begin
         ByteX:= IOWarriorInputReport.IOBits[0];
         {Auswertung des Byte}
      end;
Mein Problem ich Zähle mehrere Ports, immer wenn sie von low auf high wechseln und das im grenzbereich vom IOWarriror ca. 10 ms, hier von Byte 0, siehe oben. Wenn ich nur ein Port zähle Funktoniert alles perfekt, jedoch sobald ich noch ein Port anschließe mit einer anderen taktung von z.B. 15 ms werden beide impulse falsch gezählt, bzw. es werden zu wenig impulse gezählt. Habe meine obige prozedur mal in en thread ausgelagert, da passiert das verwunderliche das zu viele impulse gezählt werden. Wie würdet ihr impulse zählen? Oder seht ihr ein Fehler oder ist das technisch nicht möglich was ich mache? Für Eure Tips schon mal im voraus Danke.

Ciao Xenar :?
Guido Körber
Site Admin
Posts: 2876
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Ein Signal mit 10msec Zyklus und ein weiteres mit 15msec Zyklus haben eine gute Chance zu viele Änderungen pro Sekunde zu erzeugen, so dass einige verloren gehen.
Xenar
Posts: 8
Joined: Sun Feb 13, 2005 5:03 pm

Post by Xenar »

Der Report kommt ja ca. alle 8 ms vom Chip, sendet er nur dann den aktuellen zustand, oder kann er wenn ca. nach 4 ms ein Portwechsel von statten geht das speichern und dann 4 ms später senden?

Vermute nach 8 ms überprüft er ob sich etwas geändert hat und sendet dann den report. Was dazwischen liegt geht verloren...
Guido Körber
Site Admin
Posts: 2876
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Die IO-Warrior haben einen Buffer für einen Report. Also kann ein Report in der USB SIE darauf warten gesendet zu werden und ein zweiter kann schon im Buffer dahinter sitzen. Wenn dann aber noch eine Änderung kommt wird der Buffer überschrieben, nur der Report in der SIE kann nicht mehr überschrieben werden.
Post Reply