Ich rufe daher zuerst special mode 0xFF aus und danach versuche ich, zu lesen. Leider funktioniert das bei mir nicht - ich bekomme NUR bei einer Zustandsänderung einen Input. Auch beim ersten Auslesen nach Anstecken an USB kommt nix.
Was mir auch aufgefallen ist, dass entgegen zur Spezifikation beim Special Mode 0xFF die Bytes==0xFF sein müssen, anstatt 0x00?! (bei memset 0x00 .... kommt res != IOWKIT56_IO_REPORT_SIZE, sehr seltsam!)
Mein Codeauszug:
Code: Select all
/* lese test-iow-schalter aus. dafür muss zuerst special mode 0xFF gemacht werden. */
while(TRUE)
{
usleep(100000);
IOWKIT56_IO_REPORT report;
ULONG res;
// pins jetzt mal sofort auslesen - modus
memset(&report, 0xFF, IOWKIT56_IO_REPORT_SIZE); // entgegen der spezifikation!
report.ReportID = 0xFF;
res = IowKitWrite(iowHandle, IOW_PIPE_IO_PINS, (PCHAR) &report, IOWKIT56_IO_REPORT_SIZE);
if (res != IOWKIT56_IO_REPORT_SIZE){
printf("XXXXXX");
} else {
printf(".");
}
report.ReportID = 0xFF;
res = IowKitReadNonBlocking(iowHandle, IOW_PIPE_IO_PINS, (PCHAR) &report, IOWKIT56_IO_REPORT_SIZE);
if (res != IOWKIT56_IO_REPORT_SIZE)
{
printf("?");
} else {
int schalter = report.Bytes[1] & (1<<0); // Byte 1, Bit 0
printf("%s", (schalter==0x01) ? "1" : "0");
}
fflush(stdout);
}