Описание проблемы
Программы геопозиционирования предназначенные для "плиточного" интерфейса работают, а большинство десктопных программ геопозиционирования - нет. Именно так дела обстоят на устройстве thinkpad tablet 2 (обладателем которого я и являюсь), а изучая соседние темы форума встречаю множество подобных случаев и на других устройствах. Думаю, будет не лишним собрать желающих решить проблему в одной теме.
Причина
Десктопные программы исторически берут данные gps с COM порта. Драйвер большинства встроенных gps приемников, которые сейчас устанавливаются на планшеты под уравлением windows 8, не имеет ком-порта. Для взаимодействия с gps-приемником реализован sensor and location API, который используется в основном в новом ПО (например, Maps в плиточном интерфейсе). Авторы десктопных программ геопозиционирования ещё не адаптировали свои продукты под новый API. Возможно в следующих версиях эта поддержка будет добавлена - пример тому oziExplorer, который уже сейчас поддерживает работу с сенсором через API, без использования КОМ-портов. Но что же делать с остальными программами геопозиционирования?
Идея
Раз программа ожидает данных от КОМ-порта - нужно ей эти данные дать. По умолчанию на моём планшете (thinkpad tablet 2) КОМ-порты отсутствуют. В интернете есть несколько программ которые позволяют создать пару виртуальных ком-портов. Обычно порты создаваемые программно связаны между собой, то есть любые данные которые записываются в порт КОМ1 могут быть прочитаны с порта КОМ2, и наоборот. Портов нужно именно два т.к. с каждым портом может работать одна программа. Читать данные с первого порта будет программа gps навигации, а записывать данные в связанный порт будет программа-посредник. Она будет читать данные о месторасположении с gps-приемника используя location API, на основании этих данных формировать сообщение NMEA (это такой общепринятый формат сообщений которым общаются gps устройства), а затем передавать это сообщение в ком-порт.
Реализация
Для начала создадим в системе пару виртуальных ком-портов. Я пользуюсь бесплатной программой com0com. Перед установкой на win8 необходимо отключить контроль цифровой подписи драйверов устройств. Это делается через параметры загрузки ОС, для нажатия f7 пришлось подключать к планшету клавиатуру. После установки в диспетчере устройств должно добавиться 3 устройства, одно: com0com - bus for serial port и два одинаковых: com0com - serial port emulator
В интерфейсе com0com можно добавлять\удалять произвольное число портов. При добавлении порта контроль подписи драйверов должен быть отключен.
В моём конкретном случае, после перезагрузки планшета, ОС блокирует неподписанные драйвера портов - пришлось отключить secure boot в опциях UEFI, в этом случае всё ок.
Для проверки работоспособности созданных портов я использую программу tera term.
При зупуске можно выбрать у какому порту подключится терминал. Если список портов пуст - значит либо драйверы ком-портов не были установлены при установке com0com, либо в нестроках портов com0com не установлена галка "use Ports class". Если порты доступны - нужно запустить 2 окна tera term, в настройках подключения указать разные порты (те два порта что мы создали через com0com). А теперь сама проверка - расположите окна терминала так чтобы можно было видеть оба окна одновременно. Теперь если сделать активным одно из окон и начать вводить символы с клавиатуры(на планшете можно с экранной), то текст должен появляться не в том окне которое активно, а в другом - это свидетельствует о том что передача данных из одного порта в другой работает корректно.
Теперь остаётся один из портов указывать в настройках программы геопозиционирования (я тестировал на sas planet последней версии).
Данные на второй порт будет передавать программа Sensor2COM. Она работает таким образом - при запуске отображается статус сенсора и (если сенсор передаёт данные - координаты текущего месторасположения).
Если статус сенсора initializing - возможно следует выбраться на открытый воздух, или хотябы подойти к окну - в помещениях gps обычно не работает.
На основании координат формируется строка NMEA, которая также отображается на форме. Чтобы начать передавать данные на КОМ-порт нужно указать номер порта, скорость передачи (baud rate (я использовал значения 9600 и с S2C и в SAS, но думаю будет работать с любым значением)) и нажать кнопку start sending data. Пока статус передачи отображается как Sending data - строка будет раз в секунду передаваться на ком-порт, а оттуда в программу геопозиционирования. Sensor2COM можно свернуть в трей. Пока она запущена - SAS будет отображать ваши координаты на карте.
Я уже выкладывал Sensor2COM в теме thinkpad tablet 2, где многие пользователи уже опробывали программу в дествии и поделились положительными отзывами. Надеюсь тема в общем разделе будет столь же полезна и пользователям других устройств. Также мне как разработчику было бы удобнее выкладывать новые версии, отвечать на вопросы и разбирать проблемные ситуации в отдельной теме. Надеюсь модераторы раздела одобрят такое начинание.
Sensor2COM распространяется бесплатно. Текущая версия 1.02, её и прикладываю к этому посту.
Кроме моего решения, существует такое
http://www.centrafuse.com/centrafuse-localizer Авторы просят за неё 15$. Насколько я понял из описания, драйвер ком-порта устанавливается вместе с самой программой.
Sensor2COM 1.02.exe ( 25.5 КБ )
Описание GnssDataInterface:
1,
2,
скачать.
Сообщение отредактировал komok1965 - 26.07.13, 09:31Причина редактирования: GnssDataInterface