public static void initWifiConnection(GTM.GHIElectronics.WiFi_RS21 wifi, string wlanName, string wlanPassword) { Debug.Print("connecting to: " + wlanName); if (wifi.Interface.IsOpen) { Debug.Print("interface was open"); } else { Debug.Print("interface was not open"); wifi.Interface.Open(); } wifi.Interface.WirelessConnectivityChanged += new WiFiRS9110.WirelessConnectivityChangedEventHandler((s, e) => { Debug.Print("wifi conn changed!"); if (e.IsConnected) { Debug.Print("WIFI (" + wlanName + ") connected!"); } else { Debug.Print("WIFI (" + wlanName + ") disconnected.."); } }); wifi.DebugPrintEnabled = true; wifi.UseDHCP(); GHI.Premium.Net.WiFiNetworkInfo info = new WiFiNetworkInfo(); info.SSID = wlanName; info.SecMode = GHI.Premium.Net.SecurityMode.WPA2; info.networkType = GHI.Premium.Net.NetworkType.AccessPoint; wifi.Interface.Join(info, wlanPassword); wifi.UseThisNetworkInterface(); }
internal bool Matches(WiFiNetworkInfo ap) { if (ap == null) { return(false); } if (!Prefix) { return(ap.SSID == SSID); } return(ap.SSID.Length >= SSID.Length && ap.SSID.Substring(0, SSID.Length) == SSID); }
void Interface_NetworkAddressChanged(object sender, EventArgs e) { try { if (wifi.Interface.IsLinkConnected) { Debug.Print("WiFi up with AP " + currentAP.SSID); Debug.Print("IP Address: " + wifi.Interface.NetworkInterface.IPAddress); Debug.Print("Subnet Mask: " + wifi.Interface.NetworkInterface.SubnetMask); Debug.Print("Gateway: " + wifi.Interface.NetworkInterface.GatewayAddress); var dnsAddresses = wifi.Interface.NetworkInterface.DnsAddresses; Debug.Print("DNS Server: " + (dnsAddresses == null ? "NULL" : (dnsAddresses.Length == 0 ? "none" : dnsAddresses[0]))); Debug.Print("Elapsed time from join: " + (GT.Timer.GetMachineTime() - joinTime).Seconds + "s"); wifiConnected = true; SetScreen(); SetLed(); //SendUDPBroadcast(); WebServer.StartLocalServer(wifi.Interface.NetworkInterface.IPAddress, 80); if (ConnectedToHomeNetwork) { OnHomeNetworkJoined(); } } else { wifiConnected = false; WebServer.StopLocalServer(); SetLed(); SetScreen(); Debug.Print("Wifi down"); if (firstDown) { firstDown = false; } else { currentAP = null; } } } catch (Exception ex) { Debug.Print("Exception in Interface_WirelessConnectivityChanged: " + ex); } }
/// <summary> /// Should be called by an application when the home network credentials should be forgotten, e.g. after a reset button is held down. /// </summary> public void ResetNetworkCredentials() { Debug.Print("Forgetting home wireless network credentials"); wifiNetworks.Clear(); if (EnableWifiSetupNetworks) { APDetails.AddSetupAPs(wifiNetworks); } SaveData(); WebServer.StopLocalServer(); currentAP = null; SetLed(); wifi.Interface.Disconnect(); }
public void Start() { if (OpenWiFi() && EnableDHCP()) { NetworkInterfaceExtension.AssignNetworkingStackTo(wifi); WiFiNetworkInfo ni = SearchForNetwork(); if (!Join(ni)) { if (Stopped != null) { Stopped(this, EventArgs.Empty); } } } }
// Step 3. Network Timer void NetworkTimer_Tick(GT.Timer timer) { if (NetworkTimer.IsRunning == true) { wifi_RS21.Interface.Open(); wifi_RS21.UseDHCP(); WiFiNetworkInfo info = new WiFiNetworkInfo(); info.SSID = SSID; info.SecMode = SecurityMode.WPA2; info.networkType = NetworkType.AccessPoint; wifi_RS21.NetworkUp -= wifi_RS21_NetworkUp; wifi_RS21.NetworkDown -= wifi_RS21_NetworkDown; wifi_RS21.NetworkUp += wifi_RS21_NetworkUp; wifi_RS21.NetworkDown += wifi_RS21_NetworkDown; wifi_RS21.Interface.Join(info, PASSWORD); } }
// secure reception of wifi credentials over wifi network - secured by receiving secret void CredentialsWebEventReceived(string path, WebServer.HttpMethod method, Responder responder) { if (responder.UrlParameters == null || !responder.UrlParameters.Contains("ssid") || !responder.UrlParameters.Contains("setupauthcode")) { responder.Respond("ERROR::Syntax: " + path + "?ssid=SSID&setupauthcode=SETUPAUTHCODE[&key=WIFIKEY]"); return; } if (((string)responder.UrlParameters["setupauthcode"]) != SetupAuthCode) { responder.Respond("ERROR::Incorrect setupauthcode"); return; } var ssid = responder.UrlParameters["ssid"] as string; if (ssid == null || ssid == "") { responder.Respond("ERROR::Invalid SSID"); return; } var key = ""; if (responder.UrlParameters.Contains("key")) { key = responder.UrlParameters["key"] as string; } Debug.Print("Received (via web event) credentials for network " + ssid); bool newcreds = ReceivedCredentials(ssid, key); if (newcreds) { responder.Respond("OK::Got new credentials"); SaveData(); Thread.Sleep(10); WebServer.StopLocalServer(); currentAP = null; SetLed(); SetScreen(); wifi.Interface.Disconnect(); } else { responder.Respond("OK::Already had those"); } }
private bool Join(WiFiNetworkInfo ni) { if (wifi.IsLinkConnected) { return(true); } try { Debug.Print("Connecting to " + ni.SSID + "..."); //blocker.Reset(); wifi.Join(ni, password); while (wifi.NetworkInterface.IPAddress == "0.0.0.0") { Debug.Print("Waiting for IPAddress"); Thread.Sleep(250); } } catch (NetworkInterfaceExtensionException e) { switch (e.errorCode) { case NetworkInterfaceExtensionException.ErrorCode.AuthenticationFailed: Debug.Print("AuthenticationFailed"); break; //case NetworkInterfaceExtensionException.ErrorCode.AlreadyActivated: break; default: Debug.Print(e.errorCode.ToString()); break; } //Debug.Print("Error Message: " + e.ErrorMsg); //if (e.errorCode != NetworkInterfaceExtensionException.ErrorCode.AlreadyActivated) return(false); } catch (Exception e) { Debug.Print("Error Message: " + e.Message); return(false); } Debug.Print("Done connecting...\n"); //blocker.WaitOne(); Debug.Print("We got NetworkAvailable event. WiFi link is ready!\n"); return(true); }
private static string WiFiNetworkInfoToString(WiFiNetworkInfo info) { string str = "SSID: " + info.SSID + "\n"; str += "Channel Number: " + info.ChannelNumber + "\n"; str += "RSSI: -" + info.RSSI + "dB" + "\n"; str += "Security Mode: "; switch (info.SecMode) { case SecurityMode.Open: str += "Open"; break; case SecurityMode.WEP: str += "WEP"; break; case SecurityMode.WPA: str += "WPA"; break; case SecurityMode.WPA2: str += "WPA2"; break; } ; str += "\n"; str += "Network Type: "; switch (info.networkType) { case NetworkType.AccessPoint: str += "Access Point"; break; case NetworkType.AdHoc: str += "AdHoc"; break; } str += "\n"; str += "BS MAC: " + Utils.ByteToHex(info.PhysicalAddress[0]) + "-" + Utils.ByteToHex(info.PhysicalAddress[1]) + "-" + Utils.ByteToHex(info.PhysicalAddress[2]) + "-" + Utils.ByteToHex(info.PhysicalAddress[3]) + "-" + Utils.ByteToHex(info.PhysicalAddress[4]) + "-" + Utils.ByteToHex(info.PhysicalAddress[5]); str += "\n"; return(str); }
void wifiTimer_Tick(GT.Timer timer) { Debug.Print("wifiTimer start - currentAP " + (currentAP != null ? currentAP.SSID : "(null)") + " wifiUp " + wifiConnected + (wifiConnected ? " IP " + wifi.Interface.NetworkInterface.IPAddress : "")); if (sp != null) { var spMessage = BroadcastMessageWithNewline; sp.Write(spMessage, 0, spMessage.Length); } if (SkipWifiTimer()) { Debug.Print("aborting wifitimer tick since SkipWifiTimer delegate is true"); return; } if (wifiConnected && currentAP == null) { Debug.Print("ERROR: wifi is up but current AP is null! Disconnecting."); currentAP = null; wifiConnected = false; SetLed(); SetScreen(); wifi.Interface.Disconnect(); WebServer.StopLocalServer(); return; } if (currentAP != null && !wifiConnected) { wifiUpTime++; if (wifiUpTime == wifiUpTimeout) { Debug.Print("WARN: starting wifi for " + currentAP.SSID + " timeout - resetting currentAP"); currentAP = null; wifiConnected = false; SetLed(); SetScreen(); wifi.Interface.Disconnect(); WebServer.StopLocalServer(); return; } } if (wifiConnected && currentAP != null && APDetails.IsSetupAP(currentAP)) { if (GT.Timer.GetMachineTime() - joinTime > maxTimeOnSetupNetwork) { Debug.Print("Disconnecting from setup AP due to timeout (setup should not take this long)"); currentAP = null; wifiConnected = false; SetLed(); SetScreen(); wifi.Interface.Disconnect(); WebServer.StopLocalServer(); return; } else { // only sending unsolicited beacons when we're not on the home network Debug.Print("Sending unsolicited UDP beacon since we're on a setup network"); SendUDPBroadcast(BeaconPort); } } if (wifiConnected && currentAP != null) { if (!WebServer.IsRunning()) { WebServer.StartLocalServer(wifi.Interface.NetworkInterface.IPAddress, 80); } } // skip scanning when connected since it fails if (currentAP == null) { try { var scan = wifi.Interface.Scan(); Thread.Sleep(1); foreach (var ap in scan) { Debug.Print("Scanned AP " + ap.SSID + " rssi " + ap.RSSI); } if (scan != null) { foreach (APDetails knownAP in wifiNetworks) { // APs are in priority order, so break once we see the current ap if (knownAP.Matches(currentAP)) { break; } WiFiNetworkInfo joinAP = null; foreach (var scanAP in scan) { if (!knownAP.Matches(scanAP)) { continue; } if (joinAP == null) { joinAP = scanAP; } if (joinAP.RSSI > scanAP.RSSI) { joinAP = scanAP; // lower RSSI is better } } if (joinAP == null) { continue; } try { if (currentAP != null) { Debug.Print("Disconnecting from WiFi network " + currentAP + " to join " + joinAP.SSID); wifi.Interface.Disconnect(); } //// stop pictimeout and any streaming since wifi join operation hogs processor //picTimeout.Stop(); //camera.StopStreamingBitmaps(); joinTime = GT.Timer.GetMachineTime(); Debug.Print("Joining WiFi network " + joinAP.SSID + " rssi " + joinAP.RSSI); //wifi.Interface.(); currentAP = joinAP; SetLed(); SetScreen(); wifi.Interface.Join(joinAP, knownAP.Key); //Debug.Print("Joined WiFi network " + scanAP.SSID); wifiUpTime = 0; break; } catch { Debug.Print("Error joining wifi network: " + joinAP.SSID); wifi.Interface.Disconnect(); timer.Stop(); timer.Start(); currentAP = null; SetLed(); SetScreen(); break; } } } } catch (GHI.Premium.Net.NetworkInterfaceExtensionException wex) { wifi.Interface.Disconnect(); // restart the timer to prevent it immediately firing again timer.Stop(); timer.Start(); Debug.Print("Error scanning wifi networks: " + wex); currentAP = null; setLedError(); setScreenError(); } } Debug.Print("wifiTimer end - currentAP " + (currentAP != null ? currentAP.SSID : "(null)") + " wifiUp " + wifiConnected); }
internal static bool IsSetupAP(WiFiNetworkInfo ap) { return(SetupSecretAPNew.Matches(ap) || SetupSecretAP.Matches(ap) || SetupOpenAP.Matches(ap)); }
internal bool Matches(WiFiNetworkInfo ap) { if (ap == null) return false; if (!Prefix) { return ap.SSID == SSID; } return ap.SSID.Length >= SSID.Length && ap.SSID.Substring(0, SSID.Length) == SSID; }
private static string WiFiNetworkInfoToString(WiFiNetworkInfo info) { string str = "SSID: " + info.SSID + "\n"; str += "Channel Number: " + info.ChannelNumber + "\n"; str += "RSSI: -" + info.RSSI + "dB" + "\n"; str += "Security Mode: "; switch (info.SecMode) { case SecurityMode.Open: str += "Open"; break; case SecurityMode.WEP: str += "WEP"; break; case SecurityMode.WPA: str += "WPA"; break; case SecurityMode.WPA2: str += "WPA2"; break; }; str += "\n"; str += "Network Type: "; switch (info.networkType) { case NetworkType.AccessPoint: str += "Access Point"; break; case NetworkType.AdHoc: str += "AdHoc"; break; } str += "\n"; str += "BS MAC: " + Utils.ByteToHex(info.PhysicalAddress[0]) + "-" + Utils.ByteToHex(info.PhysicalAddress[1]) + "-" + Utils.ByteToHex(info.PhysicalAddress[2]) + "-" + Utils.ByteToHex(info.PhysicalAddress[3]) + "-" + Utils.ByteToHex(info.PhysicalAddress[4]) + "-" + Utils.ByteToHex(info.PhysicalAddress[5]); str += "\n"; return str; }
private bool Join(WiFiNetworkInfo ni) { if (wifi.IsLinkConnected) return true; try { Debug.Print("Connecting to " + ni.SSID + "..."); //blocker.Reset(); wifi.Join(ni, password); while (wifi.NetworkInterface.IPAddress == "0.0.0.0") { Debug.Print("Waiting for IPAddress"); Thread.Sleep(250); } } catch (NetworkInterfaceExtensionException e) { switch (e.errorCode) { case NetworkInterfaceExtensionException.ErrorCode.AuthenticationFailed: Debug.Print("AuthenticationFailed"); break; //case NetworkInterfaceExtensionException.ErrorCode.AlreadyActivated: break; default: Debug.Print(e.errorCode.ToString()); break; } //Debug.Print("Error Message: " + e.ErrorMsg); //if (e.errorCode != NetworkInterfaceExtensionException.ErrorCode.AlreadyActivated) return false; } catch (Exception e) { Debug.Print("Error Message: " + e.Message); return false; } Debug.Print("Done connecting...\n"); //blocker.WaitOne(); Debug.Print("We got NetworkAvailable event. WiFi link is ready!\n"); return true; }
/// <summary> /// Should be called by an application when the home network credentials should be forgotten, e.g. after a reset button is held down. /// </summary> public void ResetNetworkCredentials() { Debug.Print("Forgetting home wireless network credentials"); wifiNetworks.Clear(); if(EnableWifiSetupNetworks) APDetails.AddSetupAPs(wifiNetworks); SaveData(); WebServer.StopLocalServer(); currentAP = null; SetLed(); wifi.Interface.Disconnect(); }
void wifiTimer_Tick(GT.Timer timer) { Debug.Print("wifiTimer start - currentAP " + (currentAP != null ? currentAP.SSID : "(null)") + " wifiUp " + wifiConnected + (wifiConnected ? " IP " + wifi.Interface.NetworkInterface.IPAddress : "")); if (sp != null) { var spMessage = BroadcastMessageWithNewline; sp.Write(spMessage, 0, spMessage.Length); } if (SkipWifiTimer()) { Debug.Print("aborting wifitimer tick since SkipWifiTimer delegate is true"); return; } if (wifiConnected && currentAP == null) { Debug.Print("ERROR: wifi is up but current AP is null! Disconnecting."); currentAP = null; wifiConnected = false; SetLed(); SetScreen(); wifi.Interface.Disconnect(); WebServer.StopLocalServer(); return; } if (currentAP != null && !wifiConnected) { wifiUpTime++; if (wifiUpTime == wifiUpTimeout) { Debug.Print("WARN: starting wifi for " + currentAP.SSID + " timeout - resetting currentAP"); currentAP = null; wifiConnected = false; SetLed(); SetScreen(); wifi.Interface.Disconnect(); WebServer.StopLocalServer(); return; } } if (wifiConnected && currentAP != null && APDetails.IsSetupAP(currentAP)) { if (GT.Timer.GetMachineTime() - joinTime > maxTimeOnSetupNetwork) { Debug.Print("Disconnecting from setup AP due to timeout (setup should not take this long)"); currentAP = null; wifiConnected = false; SetLed(); SetScreen(); wifi.Interface.Disconnect(); WebServer.StopLocalServer(); return; } else { // only sending unsolicited beacons when we're not on the home network Debug.Print("Sending unsolicited UDP beacon since we're on a setup network"); SendUDPBroadcast(BeaconPort); } } if (wifiConnected && currentAP != null) { if (!WebServer.IsRunning()) WebServer.StartLocalServer(wifi.Interface.NetworkInterface.IPAddress, 80); } // skip scanning when connected since it fails if (currentAP == null) { try { var scan = wifi.Interface.Scan(); Thread.Sleep(1); foreach (var ap in scan) { Debug.Print("Scanned AP " + ap.SSID + " rssi " + ap.RSSI); } if (scan != null) foreach (APDetails knownAP in wifiNetworks) { // APs are in priority order, so break once we see the current ap if (knownAP.Matches(currentAP)) break; WiFiNetworkInfo joinAP = null; foreach (var scanAP in scan) { if (!knownAP.Matches(scanAP)) continue; if (joinAP == null) joinAP = scanAP; if (joinAP.RSSI > scanAP.RSSI) joinAP = scanAP; // lower RSSI is better } if (joinAP == null) continue; try { if (currentAP != null) { Debug.Print("Disconnecting from WiFi network " + currentAP + " to join " + joinAP.SSID); wifi.Interface.Disconnect(); } //// stop pictimeout and any streaming since wifi join operation hogs processor //picTimeout.Stop(); //camera.StopStreamingBitmaps(); joinTime = GT.Timer.GetMachineTime(); Debug.Print("Joining WiFi network " + joinAP.SSID + " rssi " + joinAP.RSSI); //wifi.Interface.(); currentAP = joinAP; SetLed(); SetScreen(); wifi.Interface.Join(joinAP, knownAP.Key); //Debug.Print("Joined WiFi network " + scanAP.SSID); wifiUpTime = 0; break; } catch { Debug.Print("Error joining wifi network: " + joinAP.SSID); wifi.Interface.Disconnect(); timer.Stop(); timer.Start(); currentAP = null; SetLed(); SetScreen(); break; } } } catch (GHI.Premium.Net.NetworkInterfaceExtensionException wex) { wifi.Interface.Disconnect(); // restart the timer to prevent it immediately firing again timer.Stop(); timer.Start(); Debug.Print("Error scanning wifi networks: " + wex); currentAP = null; setLedError(); setScreenError(); } } Debug.Print("wifiTimer end - currentAP " + (currentAP != null ? currentAP.SSID : "(null)") + " wifiUp " + wifiConnected); }
internal static bool IsSetupAP(WiFiNetworkInfo ap) { return SetupSecretAPNew.Matches(ap) || SetupSecretAP.Matches(ap) || SetupOpenAP.Matches(ap); }