@@ -8,6 +8,7 @@ use bluer::{
8
8
} ;
9
9
use futures:: StreamExt ;
10
10
use simplelog:: * ;
11
+ use simple_config_parser:: Config ;
11
12
use std:: sync:: Arc ;
12
13
use std:: time:: { Duration , Instant } ;
13
14
use tokio:: io:: AsyncReadExt ;
@@ -36,10 +37,10 @@ const HSP_HS_UUID: Uuid = Uuid::from_u128(0x0000110800001000800000805f9b34fb);
36
37
const HSP_AG_UUID : Uuid = Uuid :: from_u128 ( 0x0000111200001000800000805f9b34fb ) ;
37
38
const BT_ALIAS : & str = "WirelessAADongle" ;
38
39
39
- const WLAN_IFACE : & str = "wlan0" ;
40
- const WLAN_IP_ADDR : & str = "10.0.0.1" ;
41
- const WLAN_SSID : & str = "AAWirelessDongle" ;
42
- const WLAN_WPA_KEY : & str = "ConnectAAWirelessDongle " ;
40
+ const DEFAULT_WLAN_IFACE : & str = "wlan0" ;
41
+ const DEFAULT_WLAN_ADDR : & str = "10.0.0.1" ;
42
+
43
+ const HOSTAPD_FILE : & str = "/etc/hostapd/hostapd.conf " ;
43
44
44
45
#[ derive( Debug , Clone , PartialEq ) ]
45
46
#[ repr( u16 ) ]
@@ -345,21 +346,52 @@ pub async fn bluetooth_setup_connection(
345
346
let mut stage = 1 ;
346
347
let mut started;
347
348
349
+ let mut wlan_iface = String :: from ( DEFAULT_WLAN_IFACE ) ;
350
+ let mut wlan_ip_addr = String :: from ( DEFAULT_WLAN_ADDR ) ;
351
+
348
352
let ( state, mut stream) = power_up_and_wait_for_connection ( advertise, connect) . await ?;
349
353
354
+ // Get UP interface and IP
355
+ for ifa in netif:: up ( ) . unwrap ( ) {
356
+ match ifa. name ( ) {
357
+ DEFAULT_WLAN_IFACE => {
358
+ debug ! ( "Found WLAN interface: {:?}" , ifa) ;
359
+ // IPv4 Address contains None scope_id, while IPv6 contains Some
360
+ match ifa. scope_id ( ) { None => {
361
+ wlan_ip_addr = ifa. address ( ) . to_string ( ) ;
362
+ break ;
363
+ }
364
+ _ => ( ) ,
365
+ }
366
+ }
367
+ _ => ( ) ,
368
+ }
369
+ }
370
+
371
+ // Create a new config from hostapd.conf
372
+ let hostapd = Config :: new ( )
373
+ . file ( HOSTAPD_FILE )
374
+ . unwrap ( ) ;
375
+
376
+ // read SSID and WPA_KEY
377
+ let wlan_ssid = & hostapd. get_str ( "ssid" ) . unwrap ( ) ;
378
+ let wlan_wpa_key = & hostapd. get_str ( "wpa_passphrase" ) . unwrap ( ) ;
379
+
350
380
info ! ( "{} 📲 Sending parameters via bluetooth to phone..." , NAME ) ;
351
381
let mut start_req = WifiStartRequest :: new ( ) ;
352
- start_req. set_ip_address ( String :: from ( WLAN_IP_ADDR ) ) ;
382
+ info ! ( "{} 🛜 Sending Host IP Address: {}" , NAME , wlan_ip_addr) ;
383
+ start_req. set_ip_address ( String :: from ( wlan_ip_addr) ) ;
353
384
start_req. set_port ( TCP_SERVER_PORT ) ;
354
385
send_message ( & mut stream, stage, MessageId :: WifiStartRequest , start_req) . await ?;
355
386
stage += 1 ;
356
387
started = Instant :: now ( ) ;
357
388
read_message ( & mut stream, stage, MessageId :: WifiInfoRequest , started) . await ?;
358
389
359
390
let mut info = WifiInfoResponse :: new ( ) ;
360
- info. set_ssid ( String :: from ( WLAN_SSID ) ) ;
361
- info. set_key ( String :: from ( WLAN_WPA_KEY ) ) ;
362
- let bssid = mac_address:: mac_address_by_name ( WLAN_IFACE )
391
+ info. set_ssid ( String :: from ( wlan_ssid) ) ;
392
+ info. set_key ( String :: from ( wlan_wpa_key) ) ;
393
+ info ! ( "{} 🛜 Sending Host SSID and Password: {}, {}" , NAME , wlan_ssid, wlan_wpa_key) ;
394
+ let bssid = mac_address:: mac_address_by_name ( & wlan_iface)
363
395
. unwrap ( )
364
396
. unwrap ( )
365
397
. to_string ( ) ;
0 commit comments