2013-06-26 3 views
5

без использования команд AT, как мы можем получить уровень сигнала модема 3g? У gdbus object for NetworkManager нет способа, например getSignalStrength. Сетевой менеджер - это файл блокирующего устройства, предотвращающий использование AT-команд.Как получить уровень сигнала модема 3g в C++ linux?

nm-applet смог отображать уровень сигнала в системном трее. поэтому должен быть способ получить силу сигнала от сетевого менеджера!

nmcli - это счетчик командной строки части nm-апплета. Могу ли я получить силу сигнала, используя nmcli? ничто о силе сигнала не упоминается в его страницах руководства.

ответ

0

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

iwlist wlan0 сканирования

команду для того, чтобы увидеть, получить мощность сигнала точек доступа поблизости. Затем я обрабатывал его вывод в Bash и перенаправлял его в исполняемый файл C++, что легко в Bash. Надеюсь, это поможет вам.

+0

Мое устройство - 3g-модем. Могу ли я использовать 'iwlist ppp0 scan'? я попробую. – neckTwi

+0

Это работает? Я искал библиотеку C++, чтобы делать то же самое, но я не мог. Однако я нашел в Android. Тогда таким образом Bash + C++ решила мою проблему эффективно. Надеюсь, это сработает и для вас. – Tlos

+0

пока я не пробовал. Я следую этому [link] (http://arachnoid.com/linux/linux_mobile_internet_access.html). это тоже может вам помочь. – neckTwi

4

Наконец-то получил ответ!

В C++ используйте libnm-glib для работы с dbus-прокси. Из командной строки используйте ..

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

дает u силу сигнала gsm-модема.

Если MM говорит, что он не может получить качество сигнала при подключении, это потому, что есть только один AT-порт для всех команд и данных. Поэтому, когда подключен порт AT , никакие команды AT не могут быть отправлены для сбора качества сигнала. Вам понадобится либо получить лучший модем с большим количеством портов AT, либо переключить на не-AT-модем, например, на QMI или MBIM. - Александр Моргадо

можно слушать org.freedesktop.ModemManager.Modem.Gsm.Network.GetSignalQuality сигнала с использованием

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

Q. Есть ли прокси-сигналы каждый раз, когда есть изменение в силе сигнала asynchonously или ModemManager опрашивает модем периодически, чтобы получить качество сигнала ?

A. Это зависит от используемого модема; если модем поддерживает незапрашиваемые показания изменения качества, мы их будем использовать; иначе MM будет опросить каждые 30 секунд для значений качества сигнала. Значения свойств в интерфейсе будут обновляться после получения новых значений (более или менее). - Александр Моргадо

2

NetworkManager использует ModemManager для управления мобильного широкополосного модема. Вместо того, чтобы смотреть на API-интерфейсы NetworkManager DBus, вы можете посмотреть на ModemManager, которые фактически отображают сведения о подключении/регистрации, включая качество сигнала.

Если вы планируете разрабатывать приложение с использованием C++ для сбора информации от модема, я бы предложил использовать libmm-glib (библиотека на основе GLib) для прозрачного доступа к DBus API ModemManager (т.без необходимости знать DBus).