2013-06-26 29 views
5

mà không sử dụng lệnh AT làm thế nào chúng ta có thể nhận được cường độ tín hiệu của modem 3G? gdbus object for NetworkManager không có bất kỳ phương pháp nào như getSignalStrength. Trình quản lý mạng đang khóa tập tin thiết bị ngăn không cho sử dụng các lệnh AT.làm thế nào để có được cường độ tín hiệu modem 3g trong c + + linux?

nm-applet có thể hiển thị cường độ tín hiệu trong khay hệ thống. do đó, cần có một cách để có được sức mạnh tín hiệu hình thức quản lý mạng!

nmcli là bộ đếm dòng lệnh của nm-applet. Tôi có thể nhận được cường độ tín hiệu bằng cách sử dụng nmcli không? không có gì về cường độ tín hiệu được đề cập trong các trang của nó.

Trả lời

0

Tôi đang làm bài tập về nhà, trong đó tôi phải xác định vị trí trong nhà bằng cường độ tín hiệu của các điểm truy cập trong một tòa nhà. Tôi đã sử dụng

quét iwlist wlan0

lệnh để xem cường độ tín hiệu của các điểm truy cập gần đó. Sau đó, tôi đã xử lý đầu ra của nó trong Bash và chuyển hướng nó tới tệp thực thi C++, dễ dàng trong Bash. Tôi hy vọng nó sẽ giúp bạn.

+0

thiết bị của tôi là modem 3g. tôi có thể sử dụng 'quét iwlist ppp0' không? tôi sẽ thử. – neckTwi

+0

Ứng dụng có hoạt động không? Tôi đã tìm kiếm một thư viện C++ để làm điều tương tự nhưng tôi đã không thể. Tôi đã tìm thấy trong Android mặc dù. Sau đó, cách này Bash + C++ đã giải quyết vấn đề của tôi một cách hiệu quả. Hy vọng nó cũng phù hợp với bạn. – Tlos

+0

nhưng tôi không thử. Tôi đang theo [link] này (http://arachnoid.com/linux/linux_mobile_internet_access.html). nó cũng có thể giúp bạn. – neckTwi

4

Cuối cùng cũng có câu trả lời!

Trong C++ sử dụng libnm-glib để hoạt động trên proxy dbus. Từ sử dụng dòng lệnh ..

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

cho u cường độ tín hiệu của modem GSM.

Nếu MM nói nó không thể nhận được chất lượng tín hiệu trong khi kết nối, đó là vì chỉ có một cổng AT cho tất cả lệnh và dữ liệu. Vì vậy, khi cổng AT được kết nối, không có lệnh AT nào có thể được gửi để thu thập chất lượng tín hiệu. Bạn sẽ cần phải có modem tốt hơn với nhiều cổng AT hơn hoặc chuyển đổi thành modem không phải AT, chẳng hạn như modem QMI hoặc MBIM. - Aleksander Morgado

Người ta có thể nghe org.freedesktop.ModemManager.Modem.Gsm.Network.GetSignalQuality tín hiệu sử dụng

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

Q. Liệu các tín hiệu Proxy mọi có được một sự thay đổi trong cường độ tín hiệu asynchonously hoặc ModemManager các cuộc thăm dò modem theo định kỳ để có được chất lượng tín hiệu ?

A. Điều đó phụ thuộc vào modem đang được sử dụng; nếu modem hỗ trợ các chỉ dẫn thay đổi chất lượng không yêu cầu , chúng tôi sẽ sử dụng chúng; nếu không, MM sẽ thăm dò mỗi 30 để biết giá trị chất lượng tín hiệu. Các giá trị thuộc tính trong giao diện sẽ được cập nhật khi chúng tôi nhận được các giá trị mới (nhiều hơn hoặc ít hơn). - Aleksander Morgado

2

NetworkManager sử dụng ModemManager để điều khiển modem băng rộng di động. Thay vì xem xét các API DBS của NetworkManager, bạn có thể xem các số ModemManager, thực tế sẽ hiển thị chi tiết kết nối/đăng ký, bao gồm cả chất lượng tín hiệu.

Nếu nhắm mục tiêu phát triển ứng dụng sử dụng C++ để thu thập thông tin từ modem, tôi khuyên bạn nên sử dụng libmm-glib (thư viện dựa trên GLib) để truy cập API ModemManager DBus một cách minh bạch (tức làmà không cần biết DBus).