Newbiefragen zur Programmierung der IO-Warrior 40 mit C

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

Moderator: Guido Körber

PeeDee
Posts: 38
Joined: Sun Dec 18, 2005 7:30 pm

Post by PeeDee »

Habs schon gefunden
Danke für die Hilfe
PeeDee
Posts: 38
Joined: Sun Dec 18, 2005 7:30 pm

Post by PeeDee »

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?
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Das ist richtig. Man sollte den aktuellen IO-Pin-Status bekommen ohne das sich dazu etwas an den Pins aendert.
Bitte ueberpruefen ob erstens das IowKitRead gelingt und ob die ReportID des gelesenen Reports auch $FF ist.
wayoda
Posts: 362
Joined: Fri Dec 19, 2003 12:00 pm
Location: Wuppertal/Germany

Post by wayoda »

Nein in

Code: Select all

IowKitWrite(ioHandle, IOW_PIPE_SPECIAL_MODE, (PCHAR)&report,IOWKIT40_IO_REPORT_SIZE);
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:

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); 
Eberhard
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Autsch. Danke fuer den Weckruf.
PeeDee
Posts: 38
Joined: Sun Dec 18, 2005 7:30 pm

Post by PeeDee »

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:

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);
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...
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

C lernen.

Code: Select all

printf("%02x %02x %02x %02x\n", report.Bytes[0], report.Bytes[1], report.Bytes[2], report.Bytes[3]);
PeeDee
Posts: 38
Joined: Sun Dec 18, 2005 7:30 pm

Post by PeeDee »

Jepp, das hab ich nu auch grad eben selber rausbekommen :roll:
Trotzdem vielen lieben Dank!!
Tasm-Devil
Posts: 38
Joined: Tue Oct 18, 2005 4:52 pm
Contact:

Post by Tasm-Devil »

Übrigends finde ich die goto-Anweisung ziemlich uncool. Statt dessen kann man auch return -1 oder was ähnliches hinschreiben.
Post Reply