Probleme mit IowKitReadNonBlocking

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
ivolein
Posts: 4
Joined: Mon Mar 20, 2006 3:29 pm

Probleme mit IowKitReadNonBlocking

Post by ivolein »

Hallo Zusammen,

ich habe einen IOW24 habe daran ein Funkmodul angeschlosen. Ich will über den IO-Port P1.0 eine Statusleitung des Funkmoduls überprüfen.
Ich habe versucht die Leitung mit dem Befehlt "IowKitReadNonBlocking " zu lesen, doch hier bekomme ich nicht den aktuellen Status der IO-Leiste.

Wie kann ich dauernd abfragen, wie der Status an einem IO-Port ist ?

Die Beispielprogramme benützen auch den IowKitReadNonBlocking und auch hier wird mir erste 40 mal der alte Status des Ports und dann wird erst auf Veränderungen regiert auch wenn ich den Port schon längst testweise mit einem Kabel auf GND geleget habe.

Hier mal mein aktueller Code:

Code: Select all

IOWKIT24_IO_REPORT rep24;
 ULONG res=  0;
 // Read IO pins of IO-Warrior 40
 while (res != 0)
 {
  res = IowKitReadNonBlocking(m_iowHandle, IOW_PIPE_IO_PINS,(PCHAR) &rep24, IOWKIT24_IO_REPORT_SIZE);
 }
 
int value = (rep24.Bytes[1] & 0x1 != 0);
    
}

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

Re: Probleme mit IowKitReadNonBlocking

Post by Guido Körber »

IowKitReadNonBlocking liest jeweils den ältesten Report aus dem Buffer, wenn man einige Reports nicht abgeholt hat, dann muss man erst mal die lesen bevor man den aktuellen Status bekommt.
ivolein
Posts: 4
Joined: Mon Mar 20, 2006 3:29 pm

Re: Probleme mit IowKitReadNonBlocking

Post by ivolein »

Jetzt ist mir diese Funktion klar - das Auslesen klappt jetzt auch.
Ich hab jetzt nur noch das Problem, wie ich den Status VOR der ersten Veränderung auslesen kann.

Ich bneütze jetzt folgenden Code:

Code: Select all

    IOWKIT24_IO_REPORT rep24;
    ULONG rc =  0;
     
    memset(&rep24, 0, IOWKIT24_IO_REPORT_SIZE);
    rc = IowKitReadNonBlocking(m_iowHandle, IOW_PIPE_IO_PINS,(PCHAR) &rep24, IOWKIT24_IO_REPORT_SIZE);
    if (rc !=IOWKIT24_IO_REPORT_SIZE)
        return -1;
    else
        return  (rep24.Bytes[1] & 0x08);  
Jetzt wird mir aber solange eine "-1" zurückgegeben, bis ich einmal an den IO-Ports was ändere.
Ich möchte aber jetzt beim ersten Aufruf von der Funktion den aktuellen Status der IO-Ports auslesen.

Gruß,

Michael
User avatar
Christoph Jung
Posts: 673
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Probleme mit IowKitReadNonBlocking

Post by Christoph Jung »

Naja einfach beim ersten durchlauf ReadImmediate oder ReportID 0xFF nutzen.
Das ganze mit if() und einer Boolschen Variable verbinden und schon sollte das kein Problem sein.
Software developer
Post Reply