2013-06-26 11 views
5

bez użycia komend AT, jak możemy uzyskać siłę sygnału modemu 3G? Model gdbus object for NetworkManager nie ma żadnej metody, takiej jak getSignalStrength. Menedżer sieci to plik urządzenia blokującego, który uniemożliwia korzystanie z poleceń AT.jak uzyskać siłę sygnału modemu 3g w języku C++?

nm-applet był w stanie wyświetlić siłę sygnału w zasobniku systemowym. więc powinien istnieć sposób na zdobycie siły sygnału od zarządcy sieci!

nmcli to część licznika wiersza poleceń programu nm-applet. Czy mogę uzyskać siłę sygnału za pomocą nmcli? nic na temat siły sygnału nie jest wymienione na jego stronach podręcznika.

Odpowiedz

0

Pracowałem nad zadaniem domowym, w którym musiałem określić położenie w pomieszczeniu za pomocą siły sygnału punktów dostępowych w budynku. Używałem

iwlist wlan0 skanowania

polecenie, aby zobaczyć uzyskać siłę sygnału w pobliżu punktów dostępowych. Następnie przetwarzałem jego wynik w Bashu i przekierowywano go do pliku wykonywalnego C++, co jest łatwe w Bash. Mam nadzieję, że ci to pomoże.

+0

Moje urządzenie to modem 3G. czy mogę użyć 'iwlist ppp0 scanning'? spróbuję. – neckTwi

+0

Czy to działa? Szukałem biblioteki C++, aby zrobić to samo, ale nie byłem w stanie. Znalazłem jednak w Androidzie. W ten sposób Bash + C++ skutecznie rozwiązał mój problem. Mam nadzieję, że to działa również dla ciebie. – Tlos

+0

jeszcze tego nie wypróbowałem. śledzę to [link] (http://arachnoid.com/linux/linux_mobile_internet_access.html). to też może ci pomóc. – neckTwi

4

Wreszcie dostałem odpowiedź!

W języku C++ użyj libnm-glib, aby działać na proxy dbus. Z poziomu wiersza poleceń użyj ..

gdbus call --system --dest org.freedesktop.ModemManager --object-path /org/freedesktop/ModemManager/Modems/0 --method org.freedesktop.ModemManager.Modem.Gsm.Network.GetSignalQuality 

daje siłę sygnału modemu GSM.

Jeśli MM mówi, że nie może uzyskać jakości sygnału podczas połączenia, to dlatego, że jest tylko jeden port AT dla wszystkich poleceń i danych. Zatem gdy podłączony jest port AT , żadne polecenia AT nie mogą być wysyłane w celu uzyskania jakości sygnału. Musisz albo uzyskać lepszy modem z większą liczbą portów AT, albo przełączyć na modem inny niż AT, taki jak QMI lub MBIM. - Aleksander Morgado

Można słuchać org.freedesktop.ModemManager.Modem.Gsm.Network.GetSignalQuality sygnału z wykorzystaniem

gdbus monitor --system --dest org.freedesktop.NetworkManager --object-path /org/freedesktop/NetworkManager/Modems/0 

P. Czy sygnały proxy za każdym razem gdy następuje zmiana w sile sygnału asynchonously lub ModemManager ankiety modem okresowo, aby uzyskać jakość sygnału ?

A. Zależy to od używanego modemu; jeśli modem obsługuje niezapowiedziane wskaźniki zmiany jakości, użyjemy ich; w przeciwnym razie MM będzie odpytywać co 30-sekundowe wartości jakości sygnału. Wartości właściwości w interfejsie zostaną zaktualizowane, gdy otrzymamy nowe wartości (mniej więcej). - Aleksander Morgado

2

NetworkManager wykorzystuje ModemManager do kontroli modemu mobilnego dostępu szerokopasmowego. Zamiast patrzenia na interfejsy API DBus NetworkManager, można spojrzeć na te, które w rzeczywistości ujawniają szczegóły połączenia/rejestracji, w tym jakość sygnału.

Jeśli w celu opracowania aplikacji używającej C++ do zbierania informacji z modemu, proponuję użyć libmm-glib (biblioteki opartej na GLib), aby uzyskać przejrzysty dostęp do interfejsu API ModemManager DBus (tj.bez konieczności znajomości DBus).

Powiązane problemy