+ overlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
+
+ for(;;) {
+ overlapped.Offset = 0;
+ overlapped.OffsetHigh = 0;
+ ResetEvent(overlapped.hEvent);
+
+ status = ReadFile(device_handle, packet.data, MTU, &len, &overlapped);
+
+ if(!status) {
+ if(GetLastError() == ERROR_IO_PENDING) {
+ WaitForSingleObject(overlapped.hEvent, INFINITE);
+ if(!GetOverlappedResult(device_handle, &overlapped, &len, FALSE))
+ continue;
+ } else {
+ logger(DEBUG_ALWAYS, LOG_ERR, "Error while reading from %s %s: %s", device_info,
+ device, strerror(errno));
+ return -1;
+ }
+ }
+
+ EnterCriticalSection(&mutex);
+ packet.len = len;
+ packet.priority = 0;
+ route(myself, &packet);
+ LeaveCriticalSection(&mutex);
+ }
+}
+
+static bool setup_device(void) {