Skocz do zawartości
_Arecki_

Czy da się zmodyfikować informacje o satelitach GPS?

    Rekomendowane odpowiedzi

    Witam,

    Mam urządzenie (stacja multimedialna w samochodzie), które posiada Androida 2.2.

    Jest w nim problem ze słabym sygnałem GPS (mało satelit, problem ze złapaniem fixa).

    Myślałem, że to problem hardware'owy więc rozebrałem urządzenie i dobrałem się bezpośrednio do modułu GPS.

    Gdy podpiąłem się do niego to zauważyłem, że działa on prawidłowo, widzi satelity, łapie szybko fixa.

    Odczyt informacji w androidzie z com1 (/dev/ttymxc0) daje dane bezpośrednio z modułu GPS (protokół NMEA), ale info o satelitach do fixa z NMEA (ramka GSA) nie odpowiada temu, co pokazują aplikacje (czyli API androida: getSatellites() z android.location.GpsStatus).

    Pozostałe dane jak pozycja, prędkość itd są prawidłowe. Problem jest tylko z info o satelitach i usedInFix()

    W rzeczywistości GPS złapał fixa (ikonka GPS na belce sygnalizuje złapanie pozycji).

    Natomiast aplikacje do nawigacji, które używają getSatellites() (np. Sygic), mimo że mają prawidłową pozycję, to wyświetlają brak sygnału GPS, gdy ilość satelit jest niewystarczająca.

    Czy da się jakoś zmodyfikować to co zwraca getSatellites(), aby oszukać ilość satelit użytych do złapania fixa? Praktycznie chodzi o samą zmianę stanu usedInFix().

    Standardowe aplikacje do oszukiwania pozycji (fake GPS, itp) podmieniają pozycję urządzenia, a ja chciałbym aby pozycja została ta sama, a tylko zmienić ilość satelit użytych do fixa (najlepiej na prawidłową) :)

    Jako ciekawostkę dodam, że getSatellites() zwraca info, że satelity o numerach 12-30 nigdy nie są używane do złapania fixa, co oczywiście jest nieprawdą potwierdzoną danymi bezpośrednio z GPS.

    Będę wdzięczny za wszelkie pomysły.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    pavloasto

    Skoro apki typu "fake GPS" potrafią to zrobić, to trzeba napisać własną, która podmieni tylko wartość znalezionych satelit(ów?).

    Z drugiej strony nie wiem czy to zadziała, bo skoro nawigacja potrzebuje X fixów aby poprawnie coś narysować, to musi dostać sygnał dokładnie z tylu, a nie np. z X-2.

    W swojej inżynierce pisałem o GPSie w telefonach i z tego co pamiętam, aby określić lokalizację potrzeba sygnału z 3 satelitów, ale żeby jeszcze wyznaczyć pozycję "nad poziom morza", to wymagany jest jeden satelita więcej. Z tego co wiem, to nawigacje wymagają tego dodatkowego satelity.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    pavloasto, jak pisałem, moduł GPS łapie prawidłowo pozycję, to API "oszukuje".

    getSatellites() oszukuje w ten sposób, że wyświetla info o satelitach, ale oznacza je jako niewykorzystane do fixa (usedInFix() = false), więc tą informację tylko przydałoby się zmienić. Ilość satelit widocznych jest wystarczająca do złapania fixa (5 i więcej).

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Dzakus

    Xposed? Jeśli zależy ci tylko na mockowaniu funkcji.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Dzięki Dzakus, to byłoby dobre rozwiązanie gdyby nie pewien problem. Info ze strony xposed:

    Note that this only works with root access on Android 4.0.3 or later.

    O ile roota mam to Android jest tu w wersji 2.2.

    Jest xposed na tą wersję systemu?

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x