Почему в ваших кастомах плохо работает GPS

Это перевод исследования формучанина WangChung с форума http://rootzwiki.com о настройках, твиках GPS. Человек занялся исследованием ситуации и откопал кучу информации. Оригинал вы можете прочесть здесь http://rootzwiki.com/topic/28989-the-end-all-be-all-guide-to-your-gps/

Постараюсь описать все это максимально кратко. Я исследовал несколько файлов gps.conf, которые в своих релизах ROM'ов используют разные разработчики, а также скрипты для модификаций, твиков, которые обычно описывают как "ЛУЧШИЙ ФИКС GPS!!!111стоодиннадцать". В этих файлах, на самом деле, много НЕВЕРНОЙ, НЕВЕРНОЙ, НЕВЕРНОЙ информации. И вот почему.

Первое, что обнаруживается - подавляющее большинство "твиков", которые вы можете найти, берут свое начало с XDA, но по мере распространения по форумам и сайтам, вбирали в себя все больше мусора. Не используйте этот пример, он содержит ошибки настроек!

NTP_SERVER=COUNTRY.pool.ntp.org

NTP_SERVER=0.COUNTRY.pool.ntp.org

NTP_SERVER=1.COUNTRY.pool.ntp.org

NTP_SERVER=2.COUNTRY.pool.ntp.org

NTP_SERVER=3.COUNTRY.pool.ntp.org

NTP_SERVER=0.REGION.pool.ntp.org

NTP_SERVER=1.REGION.pool.ntp.org

NTP_SERVER=2.REGION.pool.ntp.org

NTP_SERVER=3.REGION.pool.ntp.org

XTRA_SERVER_1=http://xtra1.gpsonextra.net/xtra.bin

XTRA_SERVER_2=http://xtra2.gpsonextra.net/xtra.bin

XTRA_SERVER_3=http://xtra3.gpsonextra.net/xtra.bin

# DEBUG LEVELS: 0 - none, 1 - Error, 2 - Warning, 3 - Info

# 4 - Debug, 5 - Verbose

DEBUG_LEVEL =0

# Intermediate position report, 1=enable, 0=disable

INTERMEDIATE_POS=0

# Accuracy threshold for intermediate positions

# less accurate positions are ignored, 0 for passing all positions

ACCURACY_THRES=0

# Report supl ref location as position, 1=enable, 0=disable

REPORT_POSITION_USE_SUPL_REFLOC=1

# Wiper (wifi positioning), 1=enable, 0=disable

ENABLE_WIPER=1

################################

##### AGPS server settings #####

################################

# FOR SUPL SUPPORT, set the following

SUPL_HOST=supl.google.com

SUPL_PORT=7276

SUPL_NO_SECURE_PORT=3425

SUPL_SECURE_PORT=7275

SUPL_TLS_HOST=FQDN

SUPL_TLS_CERT=/etc/SuplRootCert

# FOR C2K PDE SUPPORT, set the following

C2K_HOST=c2k.pde.com

C2K_PORT=1234

CURRENT_CARRIER=common

DEFAULT_AGPS_ENABLE=TRUE

DEFAULT_SSL_ENABLE=FALSE

# TRUE for "User Plane", FALSE for "Control Plane"

DEFAULT_USER_PLANE=TRUE

Объяснение, почему этот конфиг неправильный

Вначале вы видите множество серверов. Некоторые авторы кастомов и твикоделы пошли так далеко, что даже скопировали все NTP серверы США/мира (в буквальном смысле) и вставили их в конфигурационный файл. Проблема в том, что смартфон пытается подключиться ко всем этим серверам. И если "*.pool.ntp.org" почти никогда не бывает в дауне, то некоторые хосты в бизнес доменах и .edu, обычно мертвы уже в момент создания кастома. Смартфон ждет ответа от них... и ждет... и ждет... до тех пор, пока не получит отлуп о невозможности подключиться к сервису. Умножьте эти ожидания на 15 и более - все это куча впустую потраченного времени. А ведь достаточно было прописать ТОЛЬКО пул Северной Америки.

Нужен пруф?

http://gitorious.org/android-eeepc/base/blobs/fd9f42a6967370490cd2c66e628ccbf2eacc4a4b/location/java/com/android/internal/location/GpsLocationProvider.java

Этот код показывает, как на самом деле Android использует файл gps.conf. Прокрутите чуть вниз и посмотрите на уровне строки 161. "Сколько ждать, если имеется сетевая проблемы получения данных с NTP или XTRA; текущее значение - 5 минут." Похоже на время, необходимое для синхронизации при фиговом GPS, правда? И запомните, что это относится НА КАЖДОЕ СОЕДИНЕНИЕ/К КАЖДОМУ СЕРВЕРУ, перечисленным к конфигурационном файле.

Далее SUPL_HOST. На самом деле в примере значение параметра корректно, хотя существует и другие значения для ввода. Гугл - один из лучших. Свои параметры используют Nokia (supl.nokia.com), Sony (supl.sonyericcson.com), T-Mobile (10.176.29.225) и некоторые другие. Учтите, что вы можете прописать только ОДИН сервер для SUPL_HOST. Если вы видите что-то вроде этого, то знайте - это мусор:

SUPL_HOST=FQDN

Вот это (все такие классы) НЕПРАВИЛЬНО, НЕПРАВИЛЬНО, НЕПРАВИЛЬНО!!! В конфиге говорят = FQDN, то есть у вас спрашивают HOST=ЗДЕСЬ САМ ХОСТ. FQDN - это Fully Qualified Domain Name (полностью определенное имя домена), то есть вас просят в этом поле ВПИСАТЬ его; запрашивают это имя. А так как код не закомментирован, он выполняется; производятся попытки подключения к несуществующему "FQDN". Соединение, само-собою, подвиснет, а затем отвалится по таймату. Такое мусорное значение намного хуже пустого. Это как кричать "Эй, ты!" в толпе из миллиардов человек.

Хотите сказать спасибо сайту и поддержать нас?

Как вам это? Видели эту строку? SUPL_TLS_HOST=ЭЙ, ТЫ! М-дааааа...

Касаемо этого SUPL_TLS_HOST - обычно этот параметр определяется оператором. Для T-Mobile, мы увидим "lbs .geo.t-mobile.com" и это значение корректро для сертификата. И снова, тут может быть только ОДИН КОНКРЕТНЫЙ сервер. Если у вас все равно остаются проблемы подключения, попробуйте удалить/закомментировать эту строку полностью.

Далее поддержка C2K PDE. Здесь кроется небольшая заковырка, ведь полянка ВЫГЛЯДИТ совершенно нормально (в конце-концов, у нее ведь есть имя, верно?), но это не так. Первый показатель, что здесь что-то не так - это странный номер порта "1234". Хмммм, у меня такой же код был на чемодане. Не вдаваясь в детали, это значение для проверки GPS антенны в стенах производителя и значение "c2k .pde.com"  не валидно. Оно актуально только для тестирования в лабораторном окружении.

Я уверен, что владельцы сайта "pde.com" ради возросшему мобильному трафигу, но они не помогут людям получить нужные данные A-GPS. ЭТО ПОЛЕ ДОЛЖНО БЫТЬ УДАЛЕНО ИЗ ВАШЕГО КОНФИГУРАЦИОННОГО ФАЙЛА. ВЫ НЕ ИСПОЛЬЗУЕТЕ ЕГО, ВЫ И НЕ СМОЖЕТЕ ЕГО ИСПОЛЬЗОВАТЬ. НЕ ТРАТЬТЕ БУКВЫ. :)

Раз уж заговорили об этом. SUPL_SECURE_PORT и SUPL_NO_SECURE_PORT по умолчанию вообще отсутствуют в нормальных конфигах. Не знаю, кто впервые вписал их в конфиги кастомных прошивок, но делать им там нечего.

Вообще, в конфиге еще есть ошибки, но не вижу смысла переводить их все. Читателям уже очевидно, что во многих кастомах просто мусор, который значительно ухудшает работу GPS. Автор текста привел пример нормальной конфигурации, для Америки, конечно. Посмотрите, как одно должно выглядеть.

NTP_SERVER=north-america.pool.ntp.org

XTRA_SERVER_1=http://xtra1.gpsonextra.net/xtra.bin

XTRA_SERVER_2=http://xtra2.gpsonextra.net/xtra.bin

XTRA_SERVER_3=http://xtra3.gpsonextra.net/xtra.bin

SUPL_HOST=10.176.29.225

SUPL_PORT=7275

SUPL_TLS_HOST=lbs.geo.t-mobile.com

SUPL_TLS_CERT=/etc/SuplRootCert

PHONE_TYPE=UMTS

Если вам интересны новости мира ИТ также сильно, как нам, подписывайтесь на наши материалы в Telegram.

Поделиться:

Ещё сегодня было:

    Комментарии:


    АватарVasya: промт?


    АватарFrozenSE: Не, роботы столько орфографических ошибок допустить не могут. А тут они в каждом предложении.


    АватарUmnik: Делал перевод с очень большим перерывом и уже и забыл, что сначала переводил почти дословно для ускорения :(

    В общем, поправил перевод, сделал его более понятным, поправил очевидные ошибки.


    АватарDreamer...: Очень интересно.
    Надо свой файлик проверить))) Хотя спутники за 15 сек находит...


    АватарАлександр: Ну а для России как будет? Вместо america прописать ru и все или пойдем дальше. SUPL_HOST=10.176.29.225 Оставляем?
    SUPL_TLS_HOST=lbs.geo.t-mobile.com (почему mobile.com) а не google.com
    Для чего эти два пункта :
    SUPL_TLS_CERT=/etc/SuplRootCert
    PHONE_TYPE=UMTS
    И вообще нужен ли этот конфиг если андроид выше 4.1


    Оставить комментарий?

    Почему в ваших кастомах плохо работает GPS

    Отправляя сообщение, вы подтверждаете, что принимаете наше соглашение об обработке персональных данных.