/// <summary> /// Discover Broadlink Device /// </summary> /// <returns>Triggered Event <see cref="DeviceHandler" /></returns> public async Task DiscoverAsync() { try { if (ClientSocket == null) { bool internetVarmi = HelperMy.IsInternetAvailable; if (!internetVarmi) { HelperMy.Notification(Color.Red, "İnternet bağlantısı yok!"); } do { internetVarmi = HelperMy.IsInternetAvailable; if (internetVarmi) { ClientSocket = new MyUdpSocketReceiver(); ClientSocket.MessageReceived += new EventHandler <UdpReceiveResult>(ClientSocket_MessageReceived); await ClientSocket.StartListeningAsync(); } else { await Task.Delay(500); } } while (!internetVarmi); } await SendDiscoveryPacketAsync(); } catch (Exception) { HelperMy.Notification(Color.Red, "Soket Bağlantısı Kurulamadı!"); } }
private async Task Start_ClientListenAsync() { try { bool internetVarmi = true; if (!internetVarmi) { HelperMy.Notification(Color.Red, "İnternet bağlantısı yok!"); } do { internetVarmi = true; if (internetVarmi) { ClientSocket = new MyUdpSocketReceiver(); ClientSocket.MessageReceived += new EventHandler <UdpReceiveResult>(ClientSocket_MessageReceived); await ClientSocket.StartListeningAsync(); } else { await Task.Delay(500); } } while (!internetVarmi); } catch (Exception) { HelperMy.Notification(Color.Red, "Soket Bağlantısı Kurulamadı!"); } }
/// <summary> /// Setup a new Broadlink device via AP Mode. Review the README to see how to enter AP Mode. /// Only tested with Broadlink RM Pro 2017 RM03 /// </summary> /// <param name="SSID">Modem SSID</param> /// <param name="Password">Modem Password</param> /// <param name="SecurityMode">Security mode options are (0 - none, 1 = WEP, 2 = WPA1, 3 = WPA2, 4 = WPA1/2)</param> public static async Task SetupAsync(string SSID, string Password, int SecurityMode) { var payload = new byte[0x88]; payload[0x26] = 0x14;// This seems to always be set to 14; //Add the SSID to the payload int ssid_start = 68, ssid_length = 0; foreach (var letter in SSID) { payload[(ssid_start + ssid_length)] = (byte)letter; ssid_length++; } //Add the WiFi password to the payload int pass_start = 100, pass_length = 0; foreach (var letter in Password) { payload[(pass_start + pass_length)] = (byte)letter; pass_length++; } payload[0x84] = Convert.ToByte(ssid_length); // Character length of SSID payload[0x85] = Convert.ToByte(pass_length); // Character length of password payload[0x86] = Convert.ToByte(SecurityMode); // Type of encryption (00 - none, 01 = WEP, 02 = WPA1, 03 = WPA2, 04 = WPA1/2) var checksum = 0xbeaf; for (int i = 0; i < payload.Length; i++) { checksum += payload[i]; checksum = checksum & 0xffff; } payload[0x20] = Convert.ToByte(checksum & 0xff); //Checksum 1 position payload[0x21] = Convert.ToByte(checksum >> 8); //Checksum 2 position using (var sock = new UdpClient(AddressFamily.InterNetwork)) { sock.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1); sock.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1); foreach (var item in Network.GetNetworks()) { await sock.SendAsync(payload, payload.Length, new IPEndPoint(item.BroadcastIPAddress, 80)); } } HelperMy.Notification(Color.Lime, "SSID ayarlandı."); }
private async Task SendDiscoveryPacketAsync() { var ports = Network.GetAvailablePort(1000, Networks.Count); if (ports.Count == 0 || ports.Count < Networks.Count) { HelperMy.Notification(Color.Red, "Kullanılabilir port bulunamadığı için işlem iptal edildi."); await ClientSocket.StopListeningAsync(); ClientSocket.Dispose(); ClientSocket = null; return; } for (int i = 0; i < Networks.Count; i++) { var item = Networks[i]; var data = PacketGenerator.GenerateDiscoveryPacket(item.LocalIPAddress, (short)ports[i]); await ClientSocket.SendToAsync(data, new IPEndPoint(item.BroadcastIPAddress, 80)); } }