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
IOW24: geschriebene Port- Daten wieder Einlesen
Moderator: Guido Körber
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;
}
-
- Site Admin
- Posts: 2879
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact: