- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 ARM Debian 上使用 wpa_supplicant 2.4。
有没有办法获取我当前连接的无线网络的信号电平(以分贝或百分比为单位)?
STATUS 命令仅返回以下一组值:bssid、freq、ssid、id、mode、pairwise_cipher、group_cipher、key_mgmt、wpa_state、ip_address、p2p_device_address、address、uuid
之后我可以运行 SCAN,等待结果并通过 SSID 进行搜索。但这很慢而且容易出错,我想做得更好。
驱动程序应该已经知道该信息(因为已连接,并为节能调整了传输级别),是否有一种方法可以查询该信息?
这个问题与一般计算硬件和软件无关。我通过 wpa_ctrl.h
header 中定义的 C API 使用 wpa_supplicant,通过一对 unix 域套接字(一个用于命令,另一个用于未经请求的事件)。
我不喜欢我当前的 SCAN
+ SCAN_RESULT
解决方案的一个原因是,它不适用于隐藏的 SSID 网络。扫描未找到网络,因此我无法通过这种方式获得信号电平。另一个问题是应用程序启动时的轻微视觉故障。我的应用程序由 systemd After=multi-user.target
启动。除非是第一次发布,否则 Linux 那时已经连接到 Wi-Fi。在我的应用程序的 GUI(该产品将配备触摸屏)中,我呈现了一个类似电话的状态栏,其中包括 WiFi 信号强度图标。目前,它最初显示最低级别(我知道它已连接,因为 STATUS
命令显示 SSID),仅在约 1 秒后我收到 CTRL-EVENT-SCAN-RESULTS
事件从 wpa_supplicant,运行 SCAN_RESULT
命令并将信号强度更新为正确的值。
在 API 级别,我的代码很简单。为此我有两个线程,都调用wpa_ctrl_open
,命令线程调用wpa_ctrl_request
,事件线程有一个无限循环调用poll
传递 wpa_ctrl_get_fd()
描述符和 POLLIN
事件掩码,然后是 wpa_ctrl_pending
和 wpa_ctrl_recv
。
这是/sys/class/net/wlan0 中的文件列表:
./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
最佳答案
可以通过wpa_supplicant cmd SIGNAL_POLL
获取连接wifi的信号强度
wpa_supplicant 将返回:
RSSI=-60
LINKSPEED=867
NOISE=9999
FREQUENCY=5745
RSSI 的值就是信号电平。
可以通过wpa_supplicant cmd BSS <bssid>
获取连接wifi的信号强度.关于连接wifi的bssid,可以从wpa_supplicant cmd STATUS
获取.
关于c - 获取连接的 WiFi 网络的信号电平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47581814/
我的音频分析功能在 iPad (2) 上的响应比在 iPhone (4) 上的响应更好。它似乎对 iPad 上更柔和的声音很敏感,而 iPhone 需要更大声的输入才能正确响应。无论这是因为麦克风放置
我试图像这样在 Android 上获取麦克风的振幅电平: MediaRecorder recorder = new MediaRecorder(); recorder.setAudioSource(M
我想知道我的手机的tx level。我有一个 AT 命令终端,我只想要 AT 命令来获取 tx level。 我尝试了这个命令: AT*PSENGI=2 但是调制解调器返回: Error 此命令还返回
我真的很想看到一个独占模式音频应用程序的明确示例,该应用程序在一定的输入电平(音量)下从线路输入(不是麦克风)获取输入,并尽最大努力实现这一目标。 (首选 C++,但有总比没有好) 这听起来应该很简单
我正在构建一个 dB 计作为我正在创建的应用程序的一部分,我已经从我的 iPhone 上的麦克风接收峰值和平均功率(值范围从 -60 到 0.4),现在我需要弄清楚如何将这些功率级别转换为类似于此图表
我是一名优秀的程序员,十分优秀!