hab den fehler gefunden:
Code: Select all
IowKitReadNonBlocking(iow_handle, IOW_PIPE_IO_PINS,(char*) &report, IOWKIT40_IO_REPORT_SIZE)
nun habe ich aber eine andere Frage. Ich verwende den folgenden Code für die Initialisierung des IOW's:
Code: Select all
// set timeout to 2 seconds
IowKitSetWriteTimeout(iow_handle,2000);
// set initial (pins to be read)
ULONG res;
initial.ReportID = 0;
initial.Value = 0xFFFFFFFF;
res = IowKitWrite(iow_handle, IOW_PIPE_IO_PINS,(char*) &initial, IOWKIT40_IO_REPORT_SIZE);
if (res != IOWKIT40_IO_REPORT_SIZE)
{
printf("[%s] Write error: %d\n", panel_name.c_str(),GetLastError());
}
// empty the buffer
IOWKIT40_IO_REPORT report;
while (IowKitReadNonBlocking(iow_handle, IOW_PIPE_IO_PINS,(char*) &report, IOWKIT40_IO_REPORT_SIZE) != 0) {
// empty buffer
printf("[%s] Empty buffer...\n", panel_name.c_str());
//printf("REPORT: id %d value %x bytes %d %d %d %d", report.ReportID,report.Value,report.Bytes[1],report.Bytes[2],report.Bytes[3],report.Bytes[4]);
}
printf("[%s] Buffer empty.\n", panel_name.c_str());
// get current pin status
DWORD bits;
if (IowKitReadImmediate(iow_handle, &bits))
{
printf("[%s] Current pin status: 0x%x\n",panel_name.c_str(),bits);
currentReport.ReportID = 0;
currentReport.Value = bits;
}
der Code wird am Anfang meines Programmes ausgeführt und soll den Buffer leeren und den aktuellen Status der Pins speichern. Gemäss API soll die Funktion IowKitReadImmediate() den Wert true zurückgeben, falls ein neuer Report anliegt. Da ich zuvor aber den Buffer entleere, müsste die Funktion doch false zurückgeben, was aber nicht der Fall ist.