Как получить уровень сигнала 3G модем в Linux C ++?

без использования команд AT, как мы можем получить уровень сигнала 3G модема? объект gdbus для NetworkManager не имеет никакого метода, как getSignalStrength,
Сетевой менеджер блокирует файл устройства, не позволяя использовать AT-команды.

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

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

5

Решение

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

В 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

дает вам уровень сигнала 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. Происходит ли прокси-сигнал каждый раз, когда происходит изменение уровня сигнала асинхронно, или ModemManager периодически опрашивает модем, чтобы получить качество сигнала?

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

4

Другие решения

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

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

2

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

iwlist wlan0 scan

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

0
По вопросам рекламы [email protected]