2017-11-30 67 views
1

ARM Debianでwpa_supplicant 2.4を使用する。接続されたWiFiネットワークの信号レベルを取得

現在接続している無線ネットワークの信号レベルをデシベルまたはパーセントで取得する方法はありますか?私は待って、その後のスキャンを実行することができBSSID、FREQ、SSID、ID、モード、pairwise_cipher、group_cipher、key_mgmt、wpa_state、IP_ADDRESS、P2P_DEVICE_ADDRESS、アドレス、UUID

STATUSコマンドは、以下の値のセットを返します。結果とSSIDで検索します。しかし、それは遅くてエラーが起こりやすいので、もっとうまくやりたいです。

ドライバーは情報を知っている必要があります(接続されているため、省エネルギーの送信レベルが調整されているため)。

この質問は、一般的なコンピューティングのハードウェアおよびソフトウェアに関するものではありません。私はwpa_supplicantをwpa_ctrl.hヘッダーに定義されているC APIを通じて使用しています。これは、unixドメインソケットのペア(コマンド用と非請求型イベント用)です。

私の現在のSCAN + SCAN_RESULTソリューションが気に入らない理由の1つとして、非表示のSSIDネットワークでは機能しません。スキャンでネットワークが見つからないため、このように信号レベルが上がっていません。別の問題は、アプリケーションの起動時の視覚的な不具合です。私のアプリはsystemdによって起動されます。After=multi-user.target最初の打ち上げでない限り、LinuxはすでにWi-Fiに接続されています。私のアプリのGUI(製品にはタッチスクリーンがあります)では、WiFi信号強度アイコンを含む電話のようなステータスバーを表示します。現在のところ、最初は最小レベルを示しています(STATUSコマンドでSSIDが表示されるため接続されています)。〜1秒後にwpa_supplicantからCTRL-EVENT-SCAN-RESULTSイベントが送信され、SCAN_RESULTコマンドが実行され、信号強度が正しい値に更新されます。

APIレベルでは、私のコードは簡単です。私はそのために2つのスレッドを持って、両方のwpa_ctrl_openを呼び出し、コマンドスレッドがイベントスレッドはpollwpa_ctrl_pendingwpa_ctrl_recv続いwpa_ctrl_get_fd()記述子とPOLLINイベントマスクを渡して呼び出す無限ループを持っている、wpa_ctrl_requestを呼び出します。

そして、ここではファイルのリストは、/ SYS /クラス/ネット/ wlan0である:iw compatible devicesについては

./mtu 
./type 
./phys_port_name 
./netdev_group 
./flags 
./power/control 
./power/async 
./power/runtime_enabled 
./power/runtime_active_kids 
./power/runtime_active_time 
./power/autosuspend_delay_ms 
./power/runtime_status 
./power/runtime_usage 
./power/runtime_suspended_time 
./speed 
./dormant 
./name_assign_type 
./proto_down 
./addr_assign_type 
./phys_switch_id 
./dev_id 
./duplex 
./gro_flush_timeout 
./iflink 
./phys_port_id 
./addr_len 
./address 
./operstate 
./carrier_changes 
./broadcast 
./queues/rx-0/rps_flow_cnt 
./queues/rx-0/rps_cpus 
./queues/rx-1/rps_flow_cnt 
./queues/rx-1/rps_cpus 
./queues/rx-2/rps_flow_cnt 
./queues/rx-2/rps_cpus 
./queues/rx-3/rps_flow_cnt 
./queues/rx-3/rps_cpus 
./queues/tx-0/xps_cpus 
./queues/tx-0/tx_maxrate 
./queues/tx-0/tx_timeout 
./queues/tx-0/byte_queue_limits/limit 
./queues/tx-0/byte_queue_limits/limit_max 
./queues/tx-0/byte_queue_limits/limit_min 
./queues/tx-0/byte_queue_limits/hold_time 
./queues/tx-0/byte_queue_limits/inflight 
./queues/tx-1/xps_cpus 
./queues/tx-1/tx_maxrate 
./queues/tx-1/tx_timeout 
./queues/tx-1/byte_queue_limits/limit 
./queues/tx-1/byte_queue_limits/limit_max 
./queues/tx-1/byte_queue_limits/limit_min 
./queues/tx-1/byte_queue_limits/hold_time 
./queues/tx-1/byte_queue_limits/inflight 
./queues/tx-2/xps_cpus 
./queues/tx-2/tx_maxrate 
./queues/tx-2/tx_timeout 
./queues/tx-2/byte_queue_limits/limit 
./queues/tx-2/byte_queue_limits/limit_max 
./queues/tx-2/byte_queue_limits/limit_min 
./queues/tx-2/byte_queue_limits/hold_time 
./queues/tx-2/byte_queue_limits/inflight 
./queues/tx-3/xps_cpus 
./queues/tx-3/tx_maxrate 
./queues/tx-3/tx_timeout 
./queues/tx-3/byte_queue_limits/limit 
./queues/tx-3/byte_queue_limits/limit_max 
./queues/tx-3/byte_queue_limits/limit_min 
./queues/tx-3/byte_queue_limits/hold_time 
./queues/tx-3/byte_queue_limits/inflight 
./tx_queue_len 
./uevent 
./statistics/rx_fifo_errors 
./statistics/collisions 
./statistics/rx_errors 
./statistics/rx_compressed 
./statistics/rx_dropped 
./statistics/tx_packets 
./statistics/tx_errors 
./statistics/rx_missed_errors 
./statistics/rx_over_errors 
./statistics/tx_carrier_errors 
./statistics/tx_heartbeat_errors 
./statistics/rx_crc_errors 
./statistics/multicast 
./statistics/tx_fifo_errors 
./statistics/tx_aborted_errors 
./statistics/rx_bytes 
./statistics/tx_compressed 
./statistics/tx_dropped 
./statistics/rx_packets 
./statistics/tx_bytes 
./statistics/tx_window_errors 
./statistics/rx_frame_errors 
./statistics/rx_length_errors 
./dev_port 
./ifalias 
./ifindex 
./link_mode 
./carrier 

答えて

1

コマンドに続いては、現在の駅(別名AP)の信号強度を与えます

iw dev wlp2s0 station dump -v 

C APIが必要な場合は、iwのsource codeを調べてください。

が一目た後、あなたが必要とする機能は、Broadcomのデバイスの場合here

で、BroadcomのWLを検索してみてください。それは近いソースです、C APIが提供されているかどうかわかりません。

+0

-bash:iw:コマンドが見つかりません 私はそれがBroadcomだとは思わない、私はカードがRealtek RTL8723BSだと思います。 – Soonts

+0

https://github.com/torvalds/linux/tree/master/drivers/staging/rtl8723bsはカーネル内のドライバがかなり新鮮だと思われます。 4.15カーネルで正式なiwサポートを受けることができることを願っています。または、vonder(別名Realtek)が提供する独自のソリューションを使用してください。 –

+0

カード自体は、カーネル4.4.71およびwpa_supplicantを使用して今まで完璧に動作します。 私は現在接続している無線ネットワークの信号レベルが必要です。 – Soonts

関連する問題