Ho lavorato molto su questo problema ed ecco le risposte che ho trovato:
- Risposta 1.1 Ci sono molte possibilità e quella corretta dipende da ciò che stai cercando di ottenere. Puoi trovare le varie possibilità qui:http://processors.wiki.ti.com/index.php/OMAP_Wireless_Connectivity_NLCP_WiFi_Direct_Configuration_Scripts
Volevo Linux come GO e Android come client, quindi ciò che ha funzionato per me in Linux è:
// Kill current supplicant and avoid its automatic recreation
system("mv /usr/share/dbus-1/system-services/fi.* .");
system("killall udhcpd");
system("wpa_cli -i wlan0 terminate -B");
usleep(300000);
// Start new supplicant
system("wpa_supplicant -Dnl80211 -iwlan0 -c /etc/p2p_supplicant.conf -B");
system("wpa_cli -iwlan0 p2p_group_add");
system("ifconfig p2p-wlan0-0 192.168.1.2");
// Connect with a peer
for (;;) {
system("wpa_cli -ip2p-wlan0-0 wps_pbc");
system("udhcpd /etc/udhcpd.conf");
// Here start your TCP server on a port
Server server([port]);
server.startServer();
}
N.B. Per distruggere la connessione P2P e riavviare quella normale utilizzo questo script:
#!/bin/bash
wpa_cli -i wlan0 terminate -B
wpa_cli -i p2p-wlan0-0 terminate -B
cp ./fi.* /usr/share/dbus-1/system-services/
service network-manager restart
Qui il server ascolta una connessione e il client Android si connette ad essa. Ho usato un server TCP molto semplice trovato sul primo sito Web e ha funzionato a meraviglia. È importante avviare udhcpd o non otterrai l'icona "connesso" in Android. Per il lato Android, ho seguito ciò che ho visto su http://developer.android.com/training/connect-devices-wireless/wifi-direct.html e ha funzionato perfettamente.
-
Risposta 1.2 Da wpa_cli puoi ottenere molti avvisi ed errori diversi. Ho visto che semplicemente chiamando la funzione (come ho fatto nel frammento precedente) ha fatto funzionare tutto nonostante gli avvertimenti. Li ho ignorati.
-
Risposta 1.3 La connessione tramite PIN funziona, quando l'ho provata non stavo avviando udhcpd e questo ha bloccato la mia connessione ogni volta. Non era dovuto a PIN o PBC.
-
Risposta 2.1 Sia il server che il client stanno cambiando interfaccia. È un comportamento molto simile a quello che fai di solito con i socket. Crei un socket in ascolto, qualcuno si connette, crei un nuovo socket per gestire quel client in un thread separato mentre il socket in ascolto è ancora lì, in attesa di altri utenti. Fai lo stesso con le interfacce. L'avvio di un wpa_cli che monitora l'interfaccia wlan0 e uno che monitora l'interfaccia p2p-wlan0-0 dà una buona idea di cosa sta succedendo durante il cambiamento.
-
Risposta 2.2 Il client "è passato" all'altra interfaccia ed è ora pronto a ricevere un IP. Avvia i server DHCP e TCP!
-
Risposta 2.3 Non usare IP statico. Solo solo per il server va bene, il client dovrebbe usare un IP DHCP. Forse c'è un modo per gestire gli IP statici, ma non è stato utile per i miei obiettivi.
-
Risposta 2.4 Fatto. Questo è sempre stato il problema
-
Risposta 1.4 Funziona perfettamente anche con Android/linux.
Scusa se ho commesso qualche errore nella mia risposta, non ho ancora il quadro completo delle connessioni WiFi-Direct, spero semplicemente che questo possa aiutare qualcun altro.
(Potrebbe non essere una risposta completa, ma la giusta direzione)
Il problema è sul lato Linux. Sto riscontrando problemi simili tra Cyanogenmod (Android 5) e Fedora 22, nel tentativo di utilizzare Wifi Direct (Wifi P2P) per il software Intel Wireless Display per sistema operativo Linux (WDS).
Nello specifico, il connman di Intel si è discostato (scritto da zero) nel 2009 da quello che era stato lo standard in Linux, NetworkManager. Connman sembra essere l'unica implementazione di Wifi Direct (Wifi P2P) per Linux ed è stato scritto per il mercato embedded (mobile).
A causa di un problema di RPM, connman rimane non testato sul mio sistema, ma il software dovrebbe fornire le comunicazioni dbus di cui Linux ha bisogno.
Sito web:https://01.org/connman