Если позволите, начну ответ с исторической преамбулы.
По старой памяти погуглил на предмет связи GPS с COM-портом: на память, чипсет самого GPS-модуля, который меня интересовал, был SiRF-Star III, работавший через COM2: на скорости 4800 bps на моём ASUS P535 под управлением WM5/WM6.
И вот смотрите, какие прекрасные вещи нашёл.
- Упоминание вот тут что-то про GPS через COM-порт (программный, разумеется, если это монолитный гаджет). Бросившийся в глаза кусок лога:
18:08:44.178 GpsHalPlatfTTYOpen("/dev/ttyS2",115200)
По моему скромному мнению, в терминологии стандарта RS232, основная част гаджета будет называться DTE, а модуль GPRS будет называться DCE.
С этим разобрались: модуль GPS может работать через последовательное терминальное устройство — например, как обычный модем.
- Теперь о протоколе обмена, пример его описания можно посмотреть например в man 8 gpsd
Там недвусмысленно написано, что для разных программных моделей различного железа протокол низкого уровня — разный, но gpsd умеет скрывать различия, предоставляя унифицированный протокол для общения с приёмником спутникового сигнала. Здесь же упоминается, что для связи с модемом могут использоваться не только COM-порты, но и шина USB.
- Убеждаетмся, что этот самый gpsd работает в Android, и нам не надо шаманить с байтами и битами, ни изучать внутренности конкретного нашего GPS-приёмника.
Вот тут есть косвенное подтверждение нашей гипотезы: что gpsd работает не только на настольном Ubuntu, но и на гаджетном Android.
Под рукой нет железа, чтобы проверить, но я бы копал в этом направлении.
Практически. я бы начал с того, что подключился бы телнетом к localhost на TCP-порт, номер которого по умолчанию упомянут в вышеупомянутом man-е
-S Set TCP/IP port on which to listen for GPSD clients (default is
2947).
и из того же man-а погонял бы командочки
Every gpsd reply will start with the string «GPSD» followed by the
replies. Examples:
query: «p\n»
reply: «GPSD,P=36.000000 123.000000\r\n»
query: «d\n»
reply: «GPSD,D=2002-11-16T02:45:05.12Z\r\n»
query: «va\n»
reply: «GPSD,V=0.000000,A=37.900000\r\n»
Надеюсь, вы рассмотрите мой ответ не как готовое решение проблемы, а как некий намёк, куда, с точки зрения обычной логики, вполне можно рыть.
Спасибо за внимание.