IOW24: geschriebene Port- Daten wieder Einlesen

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
muesing7
Posts: 21
Joined: Thu Jul 21, 2005 1:57 pm

IOW24: geschriebene Port- Daten wieder Einlesen

Post by muesing7 »

Hallo,
kann mir mal bitte jemand erklären wie ich Daten, die ich einfach nur auf die beiden Ports geschrieben habe wieder Einlesen kann? Ich verstehe irgendwie anscheinend nicht so ganz wie man die Funktion IowKitReadImmediate() effektiv benutzt... In der Library Erklärung steht: "Until the first report has been read the function returns 0xFFFFFFFF because the I/O pins are initially
high." welchen Report muss ich denn vorher Lesen? Und warum sind die Portpins initially high? wenn ich von extern Daten einspeise, dann können doch auch Low Pegel am Port sein! oder??
Gruß
muesing7
muesing7
Posts: 21
Joined: Thu Jul 21, 2005 1:57 pm

Post by muesing7 »

Ich poste hier doch noch mal zum besseren Verständnis den Code. Also ich habe 2 IOWs und möchte über den Pin 4 (P0.3) eine HW- Erkennung machen, um festzustellen welcher IOW welcher ist. Der eine IOW hat an dem Pin nichts, der andere hat den Pin auf Masse. Ich habe jetzt mal die Experimentierelemente entfernt. Es fehlt also noch etwas um den richtigen Wert am Port einzulesen (es wird im Moment nur 0xFFFFFFFF, wie in der Beschreibung, eingelesen).

Code: Select all

DLLIMPORT int IfmInit()
{      
  int rc;
  DWORD buffer = 0;
  
  hIowHandles[0] = hIowHandles[1] = NULL;
  if ((hIowHandles[0] = IowKitOpenDevice()) == NULL)
    rc = -2;             //no IOW could be opened
  else if ((hIowHandles[1] = IowKitGetDeviceHandle(2)) == NULL)
    rc = -1;             //only one IOW could be opened
  else
    rc = 0;              //both IOWs successfull opened

  memset(&Report, 0, sizeof(Report));
  Report.ReportID = 0; 
  Report.Bytes[0] = 0x08;
  Report.Bytes[1] = 0x00;     
  IowKitWrite(hIowHandles[0], IOW_PIPE_IO_PINS, (PCHAR) &Report, 
                                                        sizeof(Report));              
  printf("Ret: %d\t", IowKitReadImmediate(hIowHandles[0], &buffer));
  printf("buffer: 0x%x\n", buffer);

  if (!(buffer & 0x08))
  {
    hIowHandles[2] = hIowHandles[0];
    hIowHandles[0] = hIowHandles[1];
    hIowHandles[1] = hIowHandles[2];
  }  
  return rc;        
}
Guido Körber
Site Admin
Posts: 2879
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

In der aktuellen V1.4 des SDK ist ReadImmediate leider fehlerhaft. Um den aktuellen Portstatus zu bekommen muss man den SpecialMode Command GetStatus senden und dann die Antwort lesen.
muesing7
Posts: 21
Joined: Thu Jul 21, 2005 1:57 pm

Post by muesing7 »

und wer bezahlt mir die letzten 2 tage :roll: oh man.... naja danke
Post Reply