ich arbeite seit einer Weile an einem kleinen Projekt, mit dem ich meinen PC fernsteuern kann. Der Aufbau ist in etwa so wie im IOW24 Starterkit. Mein Programm ruft alle 100ms die Werte vom IR-Empfänger ab. Der Code ist größtenteils aus dem IR Beispiel.
Code: Select all
try {
// Read the data bytes from IOWarrior
if (IowKitReadNonBlocking(iow, IOW_PIPE_SPECIAL_MODE, (char *) &report, IOWKIT_SPECIAL_REPORT_SIZE) &&
report.ReportID == 0x0C )
{
// Prevent same inserts one behind the other
if(m_save != report.Bytes[1] || report.Bytes[0] == 16 || report.Bytes[0] == 17)
{
// Save the last received byte
m_save = report.Bytes[1];
return report.Bytes[0];
}
}
}
catch(...) {
MessageBox(0, "Fehler beim lesen", "Error", MB_OK);
IowKitCloseDevice(iow);
iow = 0;
}
Einen anderen Ansatz den ich probiert habe, ist die Idee mit dem WM_DeviceChange Messages. Das funktioniert auch ganz gut, aber eben nur unter Windows, und ich wollte das auch unter Linux verwenden. (Ich habe es noch gar nicht probiert, aber ich wollte wenn möglich systemabhängigen Code vermeiden). Aber zu der Methode habe ich trotzdem eine Frage: ist es von Windows garantiert, dass die WM_DeviceChange notification immer rechtzeitig kommt, oder kann es passieren, dass nach dem Trennen erst der Timer und dann die Notification kommt? Beim wieder anschließen ist es zum Beispiel so, dass ich die Notification bekomme, dass das Gerät verbunden ist, aber IowKitOpenDevice() schlägt trotzdem fehl.
Vielen Dank für alle hilfreichen Vorschläge.
MfG Kai