Verwenden von wpa_supplicant 2.4 auf ARM Debian.Ermitteln des Signalpegels des verbundenen WiFi-Netzwerks
Gibt es eine Möglichkeit, den Signalpegel des drahtlosen Netzwerks, mit dem ich momentan verbunden bin, in Dezibel oder Prozent zu erhalten?
STATUS Befehl nur gibt den folgenden Satz von Werten: bssid, Freq, ssid, id, Modus, pairwise_cipher, group_cipher, key_mgmt, wpa_state, ip_adresse, p2p_device_address, Adresse, UUID
I SCAN anschließend ausgeführt werden kann, warten für Ergebnisse und Suche nach SSID. Aber das ist langsam und fehleranfällig, ich würde es gerne besser machen.
Der Treiber sollte diese Information bereits kennen (weil verbunden und Anpassung der Übertragungsstufen für die Energieeinsparung), gibt es eine Möglichkeit, nur dafür zu fragen?
Bei dieser Frage geht es nicht um allgemeine Computerhardware und -software. Ich benutze wpa_supplicant durch eine C-API definiert in wpa_ctrl.h
Header, die Interaktion mit dem Dienst durch ein Paar von Unix-Domain-Sockets (eine für Befehle, eine andere für unerwünschte Ereignisse).
Ein Grund, warum ich meine aktuelle SCAN
+ SCAN_RESULT
Lösung nicht mag, funktioniert es nicht für versteckte SSID-Netzwerke. Scan findet das Netzwerk nicht, daher bekomme ich auf diese Weise keine Signalpegel. Ein weiteres Problem ist ein geringfügiger visueller Fehler beim Start der Anwendung. Meine App wird von Systemd, After=multi-user.target
gestartet. Sofern es nicht der allererste Start ist, ist Linux bis dahin bereits mit WLAN verbunden. In der GUI meiner App (das Produkt verfügt über einen Touchscreen) rendere ich eine telefonähnliche Statusleiste, die das Signal für die WLAN-Signalstärke enthält. Derzeit zeigt es zunächst minimale Ebene (ich weiß, es ist verbunden, weil STATUS
Befehl zeigt SSID), nur nach ~ 1 Sekunde Ich bekomme CTRL-EVENT-SCAN-RESULTS
Ereignis von wpa_supplicant, führen SCAN_RESULT
Befehl und Update Signalstärke auf den richtigen Wert.
Auf der API-Ebene ist mein Code einfach. Ich habe zwei Threads, dass sowohl wpa_ctrl_open
nennen, der Befehl Thread ruft wpa_ctrl_request
, das Ereignis Faden hat eine endlose Schleife, die durch wpa_ctrl_pending
und wpa_ctrl_recv
poll
vorbei wpa_ctrl_get_fd()
Deskriptors und POLLIN
Ereignismaske, gefolgt aufruft.
Und hier ist die Liste der Dateien in/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
-bash: iw: Befehl nicht gefunden Ich denke nicht, dass es Broadcom ist, denke ich, die Karte ist Realtek RTL8723BS. – Soonts
https://github.com/torvalds/linux/tree/master/drivers/staging/rtl8723bs scheint seine In-Kernel-Treiber ist ziemlich frisch. Hoffe, Sie können offizielle iw Unterstützung in 4.15 Kernel bekommen.Oder verwenden Sie proprietäre Lösung von vonder (alias Realtek) –
Die Karte selbst funktioniert bisher einwandfrei, mit Kernel 4.4.71 und wpa_supplicant. Ich brauche nur den Signalpegel des drahtlosen Netzwerks, mit dem ich gerade verbunden bin. – Soonts