Не так давно я решил узнать, где находятся открытые wifi-точки в моём районе. Для этого мне потребовался ноутбук и GPS-приёмник. Ноутбук благо нашёлся довольно быстро. А вот с GPS пришлось помучаться.
Из арсенала моих гаджетов нашёлся только один, умеющий определять местоположение, и это был HTC Hero. Работающих программ, позволяющих превратить свой КПК в приёмник я не нашёл, да и все они хотели, чтобы телефон подключался по Bluetooth, что съедало бы зарядку мобильного за несколько минут.
К сожалению, Android не позволяет телефонам с официальной прошивкой работать с USB, зато он разрешает посылать логи через кабель в debugger. Я решил воспользоваться именно этим.
Первым делом я прикрутил к своей уже написанной программе на Дройд ведение логов ( Log.i(«DroidGPS», (NMEA + "\n"));), важно было посылать логи именно в NMEA-строке. Для её формирования я вытянул класс из нерабочей программы, найденной на просторах Интернета.
Следующим шагом стало получение логов на компе, благо SDK Гугла есть и под Linux. Получаем их благодаря программе adb из папки tools:
Параметр raw позволяет получать только строку лога без лишней информации типа PID-процесса. Также мы задаем получение только логов с тегом DroidGPS.
К сожалению GPSD умеет получать координаты только с устройств типа /dev/rfcomm0 и т. п., поэтому нужно наладить обмен с помощью fifo:
Все логи кидаем туда:
Ну и наконец включим GPSD:
Благодаря всему этому танцу с бубнами мой демон начал получать координаты, которыми я не замедлил воспользоваться.
P. S. Приложение для телефона я выложил сюда: 7ion.ru/uploads/GPSlog.apk, а SDK можно скачать с официального сайта Android.
Из арсенала моих гаджетов нашёлся только один, умеющий определять местоположение, и это был HTC Hero. Работающих программ, позволяющих превратить свой КПК в приёмник я не нашёл, да и все они хотели, чтобы телефон подключался по Bluetooth, что съедало бы зарядку мобильного за несколько минут.
Идея
К сожалению, Android не позволяет телефонам с официальной прошивкой работать с USB, зато он разрешает посылать логи через кабель в debugger. Я решил воспользоваться именно этим.
Реализация
Первым делом я прикрутил к своей уже написанной программе на Дройд ведение логов ( Log.i(«DroidGPS», (NMEA + "\n"));), важно было посылать логи именно в NMEA-строке. Для её формирования я вытянул класс из нерабочей программы, найденной на просторах Интернета.
Следующим шагом стало получение логов на компе, благо SDK Гугла есть и под Linux. Получаем их благодаря программе adb из папки tools:
spin@~$ ./androidSDK/tools/adb -s MYSERIALNUMBER -v raw DroidGPS:I *:S
Параметр raw позволяет получать только строку лога без лишней информации типа PID-процесса. Также мы задаем получение только логов с тегом DroidGPS.
Подключение
К сожалению GPSD умеет получать координаты только с устройств типа /dev/rfcomm0 и т. п., поэтому нужно наладить обмен с помощью fifo:
spin@~$ mkfifo /tmp/fifo
Все логи кидаем туда:
spin@~$ ./androidSDK/tools/adb -s MYSERIALNUMBER -v raw DroidGPS:I *:S &> /tmp/fifo
Ну и наконец включим GPSD:
spin@~$ gpsd /tmp/fifo
Результат
Благодаря всему этому танцу с бубнами мой демон начал получать координаты, которыми я не замедлил воспользоваться.
P. S. Приложение для телефона я выложил сюда: 7ion.ru/uploads/GPSlog.apk, а SDK можно скачать с официального сайта Android.