Проблемы с промежуточным драйвером GPS
У меня возникли некоторые проблемы с промежуточным драйвером GPS, я добавил виртуальный последовательный порт к нашему оборудованию Camera/GPS для предоставления необработанных данных NMEA, и теперь он работает без проблем, любое приложение, требующее необработанных данных NMEA, может подключиться к COM8 и получить Это.
Если задействован промежуточный драйвер GPS, т. Е. "Настройка | Внешний GPS" имеет аппаратный порт, установленный на COM8, и программный порт на COM7. Затем, когда приложения запрашивают данные из COM7, данные кажутся другими. Я только говорю, появляется, потому что я не могу проверить физический вывод, см. Примечание A ниже.
Разница, по-видимому, заключается в том, что он возвращается заметно медленнее, чем при прямом подключении к COM8, но и такие приложения, как visualGPS, пока они показывают заблокированные на 6 спутниках, не будут показывать 3D GPS. Только при подключении к COM8 я получу исправление 3D GPS, это для меня означает, что программное обеспечение Microsoft изменяет данные, а не просто обменивается ими, что создает проблемы для пользователей, которые хотят использовать драйвер для обмена данными между несколькими приложениями.
У любого есть идеи о том, почему промежуточный драйвер Microsoft вызывает у меня такие проблемы, кажется, что информации об этом очень мало.
Примечание A) - Похоже, что для WM6 professional нет диагностической программы, которая будет считывать COM-порты или, по крайней мере, перенаправлять трафик на COM-порт, подключенный к ПК. Если кто-то может порекомендовать программу для WM6 для подключения и просмотра данных с COM-портов, в идеале с отметками времени. Или программа для перенаправления трафика, то есть чтения с COM7, открытия COM6 и отправки данных через COM6. Я могу отправить данные в систему, но никакие программы, которые я могу найти, не вытеснят данные.
2 ответа
Я работал с производителем мобильных устройств, чтобы диагностировать это. Им пришлось использовать наше устройство и отладочную версию ОС, чтобы изолировать его, и даже тогда проблема не в строчке кода с обеих сторон (драйвер или ОС). Наш метод чтения не имеет тайм-аута, будучи портом программного обеспечения, это не имеет значения, но это необходимо.
Нечто подобное ДОЛЖНО быть добавлено.
if(WaitForSingleObject(driver->GPSDataAvailableThread, driver->GPSTimeouts.ReadTotalTimeoutConstant) != WAIT_OBJECT_0)
{
//debug message, no data to read
return 0; //return 0 bytes read
}
//otherwise carry on a normal read operation.
Даже с таймаутом 0, он позволяет потоку спать и другие процессы продолжаться. Проблема была в том, что без него приложения считывали COM-порт так сильно, что это вызывало перегрузку промежуточного драйвера, делая вызовы и создавая блокировки мьютекса. Приложения, которые выполняют много операций чтения по 1 байту, например pocketputty, вызывают эту проблему, но программное обеспечение SatNav, такое как чтение второго пилота 1024 раз в секунду, не имеет проблемы.
Изменение данных устройства - это то, что должен делать промежуточный драйвер GPS. Он изолирует ваше приложение от деталей реализации устройства GPS, чтобы ваш код мог работать с любым устройством GPS. Я не могу определить точную проблему, которая у вас возникла по вашему вопросу, я могу только рекомендовать документы.