Newbiefragen zur Programmierung der IO-Warrior 40 mit C
Moderator: Guido Körber
Also irgendwie komme ich mit dem "Getting current pin status" nicht weiter...
In dem Datenblatt steht ja "to geht the port status just send a report with ID $FF to interface 1"
Heißt das jetzt, daß ich report.ReportID=0xFF (meine Report-Variable) laden muss und dann diesen erstmal per "IowKitWrite(ioHandle, IOW_PIPE_SPECIAL_MODE, (PCHAR)&report, IOWKIT40_IO_REPORT_SIZE);" schreiben muss?
....um dann zu lesen?
Habe dann anschliessend gelesen:
IowKitRead(ioHandle, IOW_PIPE_SPECIAL_MODE, (PCHAR) &report, IOWKIT40_IO_REPORT_SIZE);
aber in den report.Bytes standen nix drinn.
Oder lieg ich da auf dem völlig falschen Weg?
In dem Datenblatt steht ja "to geht the port status just send a report with ID $FF to interface 1"
Heißt das jetzt, daß ich report.ReportID=0xFF (meine Report-Variable) laden muss und dann diesen erstmal per "IowKitWrite(ioHandle, IOW_PIPE_SPECIAL_MODE, (PCHAR)&report, IOWKIT40_IO_REPORT_SIZE);" schreiben muss?
....um dann zu lesen?
Habe dann anschliessend gelesen:
IowKitRead(ioHandle, IOW_PIPE_SPECIAL_MODE, (PCHAR) &report, IOWKIT40_IO_REPORT_SIZE);
aber in den report.Bytes standen nix drinn.
Oder lieg ich da auf dem völlig falschen Weg?
-
- Posts: 543
- Joined: Mon Dec 01, 2003 6:09 pm
Nein in
ist die richtige Länge anzugeben. GetCurrentPinStatus ist eine SpecialMode-Funktion und daher muss report vom Typ IOWKIT_SPECIAL_REPORT sein und die zu schreibende Länge ist IOWKIT_SPECIAL_REPORT_SIZE.
Das gleiche gilt fürs lesen.
Richtig wäre also:
Eberhard
Code: Select all
IowKitWrite(ioHandle, IOW_PIPE_SPECIAL_MODE, (PCHAR)&report,IOWKIT40_IO_REPORT_SIZE);
Das gleiche gilt fürs lesen.
Richtig wäre also:
Code: Select all
IowKitWrite(ioHandle, IOW_PIPE_SPECIAL_MODE, (PCHAR)&report,IOWKIT_SPECIAL_REPORT_SIZE);
IowKitRead(ioHandle, IOW_PIPE_SPECIAL_MODE, (PCHAR) &report, IOWKIT_SPECIAL_REPORT_SIZE);
Jau, zumindest ein Teilerfolg ist nun zu verzeichnen :D
Die report-Variable ist bei mir vom Typ IOWKIT_SPECIAL_REPORT und wenn das hier ausgeführt wird:
Dann bekomme ich eine etwas, was ich eigentlich nicht so erwartet habe,
Beispiel:
Ausgabe = e3c7cfff
Wobei e3 der Port2, c7 der Port 1 und cf der Port0 ist, ff ist hierbei dann wohl die report-ID, aber wo ist der Port 3?
Warum ist die Anzeige nicht in der, laut Datenblatt angegebenen Reihenfolge (Port0, 1, 2,3...)???
Und warum bekomme ich einen völlig anderen Wert angezeigt, wenn ich statt der Variable "report" speziell "report.Bytes" ausgeben lasse, die ja doch eigentlich direkt die Prtzustände enthalten sollten oder?
Ach Fragen über Fragen...
Die report-Variable ist bei mir vom Typ IOWKIT_SPECIAL_REPORT und wenn das hier ausgeführt wird:
Code: Select all
report.ReportID=0xFF;
IowKitWrite(ioHandle, IOW_PIPE_SPECIAL_MODE, (PCHAR)&report, IOWKIT_SPECIAL_REPORT_SIZE);
IowKitRead(ioHandle, IOW_PIPE_SPECIAL_MODE, (PCHAR) &report, IOWKIT_SPECIAL_REPORT_SIZE);
printf("Read: %x\n",report);
Beispiel:
Ausgabe = e3c7cfff
Wobei e3 der Port2, c7 der Port 1 und cf der Port0 ist, ff ist hierbei dann wohl die report-ID, aber wo ist der Port 3?
Warum ist die Anzeige nicht in der, laut Datenblatt angegebenen Reihenfolge (Port0, 1, 2,3...)???
Und warum bekomme ich einen völlig anderen Wert angezeigt, wenn ich statt der Variable "report" speziell "report.Bytes" ausgeben lasse, die ja doch eigentlich direkt die Prtzustände enthalten sollten oder?
Ach Fragen über Fragen...
-
- Posts: 543
- Joined: Mon Dec 01, 2003 6:09 pm
C lernen.
Code: Select all
printf("%02x %02x %02x %02x\n", report.Bytes[0], report.Bytes[1], report.Bytes[2], report.Bytes[3]);
-
- Posts: 38
- Joined: Tue Oct 18, 2005 4:52 pm
- Contact: