26.02.2015, 15:52 | #651 | |
Banned
Регистрация: 26.06.2010
Регион: 52
Машина: duster
Сообщений: 113
|
Цитата:
|
|
26.02.2015, 16:02 | #652 | |
Новый Пользователь
Регистрация: 15.05.2014
Город: Москва
Регион: 77, 97, 99, 177
Машина: Opel Astra H
Сообщений: 12
|
Цитата:
Но посмотрев исходники, я предполагаю, что эта либа тоже про Глонасс ничего не знает и вести себя будет так же. Исходники нашей либы раздобыть не удалось. Поэтому вопрос новой либы остается открытым... |
|
26.02.2015, 16:04 | #653 | |
Новый Пользователь
Регистрация: 15.05.2014
Город: Москва
Регион: 77, 97, 99, 177
Машина: Opel Astra H
Сообщений: 12
|
Цитата:
Дело в том, что чип продолжает слать сообщение GPGSV (для GPS) или GLGSV (для GLONASS), но с нулевым количеством спутников. Это сбивает либу с толку. |
|
26.02.2015, 16:51 | #654 |
Banned
Регистрация: 06.11.2009
Возраст: 38
Город: Nizhniy Novgorod
Регион: 52
Машина: Ford Focus III
Сообщений: 1,776
|
Тогда брать свежую либу андройда с поддержкой глонасса и патчить по аналогии на предмет возможности выбора источника и скорости.
В /etc/gps.conf можно еще добавить Код:
XTRA_SERVER_1=http://gllto.glpals.com/7day/glo/v2/latest/lto2.dat XTRA_SERVER_2=http://gllto.glpals.com/4day/glo/v2/latest/lto2.dat XTRA_SERVER_3=http://gllto.glpals.com/2day/glo/v2/latest/lto2.dat SUPL_HOST=supl.google.com SUPL_PORT=7276 https://android.googlesource.com/dev...aster/gps.conf |
26.02.2015, 17:03 | #655 |
Banned
Регистрация: 26.06.2010
Регион: 52
Машина: duster
Сообщений: 113
|
|
26.02.2015, 17:08 | #656 |
Новый Пользователь
Регистрация: 15.05.2014
Город: Москва
Регион: 77, 97, 99, 177
Машина: Opel Astra H
Сообщений: 12
|
Итак, представляю свое обещанное временное решение проблемы моргания спутников.
Вдохновила меня на это программа pl2303drv автора с 4pda и доработанная уже на данном форуме. Оттуда взял саму идею и пример реализации виртуального "устройства" tty. Моя программа читает NMEA поток от приемника, парсит его и формирует новый "исправленный" (хотя на самом деле наоборот) поток - такой, чтобы либа его правильно переваривала и предоставляла андроиду на выходе по возможности правильные данные. Программа создает виртуальное "устройство" tty и выдает туда сгенерированный поток. Для либы в качестве GPS-приемника нужно указывать уже данное созданное устройство. Название (путь) к входному (настоящему) и выходному (которое она создаст) устройствам программа принимает в качестве аргументов командной строки. Программу условно назовем nmeafix (хотя на самом деле она не fix-ит, а "ломает" NMEA-поток ) Соответственно нужно модифицировать скрипт автозапуска GPS, добавив после загрузки модуля ядра виртуального порта (или запуска pl2303drv) и после настройки прав доступа ис корости, но ПЕРЕД командой "setprop ro.kernel.android.gps ttyUSB0" запуск nmeafix, а уже после него сделать setprop ro.kernel.android.gps с другим новым именем устройства (которое задается программе в качестве второго аргумента). На первом этапе целесообразно просто убрать из скрипта setprop, а заупск nmeafix и последующий setprop делать в консоли вручную (в разных окнах). nmeafix можно при необходимости остановить нажатием Ctrl-C. В случае запуска из скрипта нужно в конце команды добавить символ &, чтобы скрипт выполнялся дальше. При запуске без параметров nmeafix выдает краткую справку по использовниаю, при запуске с неверными параметрами - сообщение об ошибке и ту же справку. Запускать так: Код:
nmeafix /dev/ttyUSB0 /dev/ttyNMEA [опции] где /dev/ttyUSB0 - физическое устройство /dev/ttyNMEA (виртуальное "устройство", создается программой) Допустимые опции такие: --gps-only обрабатывать только GSV и GSA сообщения со спутниками GPS (нельзя испольсовать совместно с --glonass-only) --glonass-only обрабатывать только GSV и GSA сообщения со спутниками GLONASS (нельзя испольсовать совместно с --gps-only) --nonzero-snr-only убрать спутники с нулевым сигналом (SNR) из сообщений GSV --filter TXT1 [TXT2] ... [TXT10] убрать из NMEA-потока сообщения, в которых встречаются вхождения любого текста из TXT1 ... TXT10 (фильтр) Без указания данных опций в наивгационных программах будут корректно отображаться видимые спутники GPS+GLONASS, но с отображением активных (использованных для рассчета позиции) спутников будут глюки - могут ложно отмечаться как активные спутники (как GPS, так и GLONASS), которые на самом деле не использованы для расчета. И наоборот - использованные для расчета спутники (особенно Глонасс) могут не отмечаться как активные, из-за ограничения в либе (или используемом либой API андроида) на 12 активных спутников (на самом деле навигационные проги могут показывать и несколько большее число активных спутников из-за вышеописанного глюка с ложной отметкой активных спутников). Причина ложной отметки в том, что для передачи инфы об активных спутниках андроиду используется битовая маска в 32 бита (unsigned int), где каждый бит соответствует спутнику (от 1 до 32). Спутники GPS имеют нумерацию от 1 до 32, Глонасс - от 65 до 96. Спутники Гонасс могут быть помечены активными, только если сместить их нумерацию на 64. Но в таком случает пометится и спутник GPS с таким номером, если он есть в списке видимых. И наоборот. Короче, если в списке видимых спутников, который шлет приемник, пристутсвуют 2 спутника - GPS (с номером N) и Глонасс (с номером N+64), и один из них помечается приемником, как активный, в навигационных прогах оба эти спутника отобразятся как активные. И ничего с этим сделать нельзя, не пересобирая либу (и то я не знаю, что там править надо). Опция --nonzero-snr-only влияет на отображение видимых спутников с нулевым сигналом (столбики с нулевой высотой). Мне показалось, что это слишком громоздко, и я добавил такой фильтр. Неоктрые навигационные проги и так не отображают такие спутники. Использовать или нет - дело вкуса. Может использоваться совместо с опциями --gps-only или --glonass-only. Опция --filter нужна для исключения из NMEA-потока от приемника некоторых сообщений, в которых содержатся вхождения последовательностей символов из спика (от 1 до 10), указанного после --filter. Такие сообщения не обрабатываются и не передаются дальше в созданое виртуальное "устройство". Опция --filter может быть указана только последней в списке опций, после нее может быть только список последовательностей символов для фильтрации (от 1 до 10). Добавил эту опцию для исключения сообщений GLL и RMC. С ними у меня либа глючила - в нави-прогах "моргало" отображение высоты и курса (азимута) - показывались то правильные цифры, то 0. Поскольку данная информация содержится не только в этих сообщениях - их отключение достаточно безвредно и помогает вылечить глюк либы. Единственное что - теряем инофрмацию о текущем времени, поэтому надо спец-коммандой включить в чипе вывод сообщений ZDA (в моем приемнике на базе MTK3333 вывод этого сообщения изначально отключен). Сообщения GLL и RMC тоже можно отключить этой спец-коммандой, я так и сделал, дополнительно для надежности использую опцию --filter в nmeafix. Возможно глюк либы c GLL и RMC будет не у всех, а зависит от приемника и чипа, на базе которого он сделан. Для удобства nmeafix поддерживает также передачу конфигурацонных спец-комманд в GPS-чип, т.е. все символы, отправленные в /dev/ttyNMEA передаются в физическое устройство (например, /dev/ttyUSB0). Прикладываю скомпилированный бинарник вместе с исходниками. Возможно, бинарник у всех не заработает, я не гуру компиляции. Сорри за может быть неидельный стиль кодинга и отстутсвие комментов. |
26.02.2015, 18:09 | #657 |
Banned
Регистрация: 26.06.2010
Регион: 52
Машина: duster
Сообщений: 113
|
SanchSanch
Поподробнее, напиши пожалуйста конкретно команду для запуска nmeafix с параметром gps-only. Так будет проще понять что где указывать и менять. И раз пошла такая пьянка, то как думаешь, если взять либу от устройства которое нормально работает одновременно с глонасс и gps и ей подсовывать эти данные. У меня на sony z3 компакт глонасс и гпс отлично вместе работают. Либа тоже находится в lib/hw и называется gps.default.so. Подсовывал в radxa, не работает, но и не виснет. |
26.02.2015, 18:44 | #658 | |
Новый Пользователь
Регистрация: 15.05.2014
Город: Москва
Регион: 77, 97, 99, 177
Машина: Opel Astra H
Сообщений: 12
|
Цитата:
Либо убрать ro.kernel.android.gps из файла build.prop, если прописывал туда. Потом перезагрузить устройство. После перезагрузки либа не будет цепляться к GPS приемнику, т.к. не прописан setprop. Дальше делаем все подготовительные операции (грузим модуль ядра, выставляем права, скорость и тд), все как обычно - если это не делает скрипт. Теперь запускаем прогу (под рутом, сначала без скрипта, вручную в терминале): nmeafix /dev/ttyUSB0 /dev/ttyNMEA --gps-only Прога должна выдать приветствие и дальше молча работать, ничего не выводя на экран. Если выдает список опций, примеры команды запуска и сразу завершается - значит неправильно что-то написали в команде. Потом в другом окне терминала (не закрывая старое, где запустили прогу): setprop "ro.kernel.android.gps" "ttyNMEA" Можно еще проверить, идут ли данные: cat /dev/ttyNMEA (посмотрели и остановили нажатием Ctrl-C) И не закрывая окно терминала, где запущен nmeafix идем в навигационную прогу смотреть результат. |
|
26.02.2015, 20:19 | #659 |
Banned
Регистрация: 26.06.2010
Регион: 52
Машина: duster
Сообщений: 113
|
Эх теперь придется скрипт создавать, у меня все вшито было в самосборную прошивку. Спасибо, попробуем...
Может есть какие мысли по созданию новой либы??? Какие интересные ссылки? |
26.02.2015, 20:24 | #660 |
Banned
Регистрация: 26.06.2010
Регион: 52
Машина: duster
Сообщений: 113
|
|
Здесь присутствуют: 4 (пользователей: 0 , гостей: 4) | |
|
|