WiFiDirect Legacy AP (for Windows)

This is a loose Rust adaptation of Microsoft's C++ WiFi Direct Legacy AP sample code, adapted for my purposes with Flying Carpet, and written with Microsoft's Rust bindings for the Windows API. It is a library exposing one struct, WlanHostedNetworkHelper.

Example Use

Provide WlanHostedNetworkHelper::new() with an SSID, a password, a message Sender channel that will be used to write messages back to your code from the Windows Runtime, and a success Sender channel that will send one bool when the AP starts or fails to start. Keep the returned hotspot in scope for as long as you need it.

``` use std::sync::mpsc; use std::thread::spawn; use crate::WlanHostedNetworkHelper;

fn runhostednetwork() { // Make channels to receive messages from Windows Runtime let (messagetx, messagerx) = mpsc::channel::(); let (successtx, successrx) = mpsc::channel::(); let wlanhostednetworkhelper = WlanHostedNetworkHelper::new("WiFiDirectTestNetwork", "TestingThisLibrary", messagetx, success_tx) .unwrap();

// Listen for messages in a thread that will exit when the hotspot is done and the sender closes
spawn(move || loop {
    let msg = match message_rx.recv() {
        Ok(m) => m,
        Err(e) => {
            println!("WiFiDirect thread exiting: {}", e);
            break;
        }
    };
    println!("{}", msg);
});

// Wait to see whether we were able to start the hotspot
let started = success_rx.recv().unwrap();
if !started {
    panic!("Failed to start hotspot");
}

// Use the hosted network
std::thread::sleep(std::time::Duration::from_secs(10));

// Stop it when done
wlan_hosted_network_helper.stop().expect("Error in stop()");

} ```