2010-11-19 5 views
0

У меня есть некоторые проблемы с промежуточным драйвером GPS, я добавил виртуальный последовательный порт для нашего оборудования Camera/GPS, чтобы разоблачить необработанные данные NMEA, и теперь это работает без проблем, любое приложение, требующее сырой NMEA данные могут подключаться к COM8 и принимать его.Проблемы с промежуточным драйвером GPS

Если используется промежуточный драйвер GPS, то есть «Настройка | Внешний GPS» имеет аппаратный порт, установленный на COM8 и программный порт для COM7. Затем, когда приложения запрашивают данные из COM7, данные кажутся разными. Я только говорю, как я не могу проверить физически выходной, см. Примечание А ниже.

Разница, похоже, заметно медленнее, чем подключение к COM8 напрямую, но также такие приложения, как visualGPS, пока они показывают, что заблокированы на 6 спутниках, не будут отображаться 3D-GPS-исправление. Только когда я подключусь к COM8, я получу 3D-исправление GPS, это означает, что программное обеспечение Microsoft меняет данные, а не просто передает их и тем самым вызывают проблемы для пользователей, которые хотят использовать драйвер для обмена данными по нескольким приложениям.

У кого-нибудь есть идеи по поводу того, почему промежуточный драйвер Microsoft вызывает у меня такие проблемы, похоже, очень мало информации об этом.

Примечание A) - Кажется, нет никакой программы диагностики для профессионала WM6, которая будет читать COM-порты или, по крайней мере, перенаправлять трафик на COM-порт, подключенный к ПК. Если кто-то может рекомендовать программу для WM6 для подключения и просмотра данных с COM-портов, в идеале с отметками времени. Или программа для перенаправления трафика, то есть чтения из COM7, Open COM6 и отправки данных по COM6. Я могу вставлять данные в систему, просто никакие программы, которые я могу найти, будут вытеснять данные.

ответ

0

Я работал с производителем мобильных устройств, чтобы диагностировать это. Они должны были использовать наше устройство и отладочную версию ОС, чтобы изолировать его, и даже тогда это не строка кода с обеих сторон (драйвер и ОС), которая является проблемой. Наш метод чтения не имеет тайм-аута, будучи программным портом, это не имеет большого значения, но это необходимо.

Что-то вроде этого ДОЛЖНО быть добавлено.

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 байт, как карманные, вызывают эту проблему, но программное обеспечение SatNav, такое как копирование 1024 1024 раз, не имеет проблемы.

1

Изменение данных устройства - это то, что должен делать GPS-драйвер промежуточного уровня. Он изолирует ваше приложение от деталей реализации устройства GPS, чтобы ваш код мог работать с любым устройством GPS. Я не могу диагностировать точную проблему, которую вы испытываете по своему вопросу, я могу только рекомендовать the docs.

+0

Привет, я думал, что диагностировать проблему может быть сложно через Интернет. Я дал другим документам прочитать, и он дал мне некоторые идеи о том, что еще я могу добавить в драйвер/реестр, чтобы узнать, помогает ли он решить проблему. – JonWillis

+0

http://stackoverflow.com/questions/4245971/gps-intermediate-driver-slowing-down-the-data-from-a-virtual-serial-port-driver Я несколько сократил эту проблему. – JonWillis

Смежные вопросы