public void Connect() { for (int i = 0; i < ChannelData.Length; i++) { ChannelData[i] = 1500; } if (Address == null) { Address = WiRCMessages.Discover(); } TCPListener = Task.Run(() => StartTCPListener()); Listener = Task.Run(() => StartUdpListener()); ConnectTCP(); //while (SenderId < 0) // Thread.Sleep(10); //WiRCMessages.SendTCP(TcpStream, new WiRCMessage(WiRCCmd.AREQ, (byte)SenderId)); //while (!_inControl) // Thread.Sleep(10); Task.Run(() => StartControlLoop()); Task.Run(() => StartWatchdogLoop()); Task.Run(() => StartCameraLoop(0)); }
private void ConnectTCP() { TcpStream = WiRCMessages.ConnectTCP(Address); WiRCMessages.SendTCP(TcpStream, WiRCMessages.TL()); WiRCMessages.SendTCP(TcpStream, WiRCMessages.CCFG()); WiRCMessages.SendTCP(TcpStream, WiRCMessages.FCFG()); WiRCMessages.SendTCP(TcpStream, WiRCMessages.STST(0)); Console.WriteLine("Connected"); }
private void StartControlLoop() { while (!disposed) { updateChannelData = false; WiRCMessages.SendUdp(WiRCMessages.PCD(ChannelData), Address, PCDPort, 1990); var dt = DateTime.Now; while (!updateChannelData && (DateTime.Now - dt).TotalMilliseconds < 500) { Thread.Sleep(10); } } }
public string VideoPath;//= @"d:\ttt\jpeg3"; private void StartCameraLoop(int camId) { int cntr = 0; using (UdpClient udpClient = new UdpClient(WiRCMessages.CameraPort + camId)) { while (!disposed) { //IPEndPoint object will allow us to read datagrams sent from any source. var remote = new IPEndPoint(IPAddress.Any, 0); // Blocks until a message returns on this socket from a remote host. var buf = udpClient.Receive(ref remote); _watchdogTime = DateTime.Now; if (buf.Length == 0) { Thread.Sleep(50); continue; } var length = (int)WiRCMessages.FromBytes(buf, 12, 4, true); if (VideoPath != null) { using (var f = File.OpenWrite(Path.Combine(VideoPath, "pic" + (cntr++).ToString("00000") + ".jpeg"))) f.Write(buf, 16, length); } var b = Bitmap.FromStream(new MemoryStream(buf, 16, length)); if (!running) { running = true; Task.Run(() => { try { if (PictureRecieved != null) { PictureRecieved(camId, b); } } finally { running = false; } }); } } } }
public static IPAddress Discover() { #if DEBUG throw new Exception("Discover only works if you build for Release"); #else var ip = IPAddress.Parse("192.168.1.255"); SendUdp(WiRCMessages.BCSD(), ip, Port, Port); IPEndPoint endp; while (ReciveUdp(out endp).Cmd != WiRCCmd.BCSA) { ; } return(endp.Address); #endif }
void StartUdpListener() { IPEndPoint endpoint; while (!disposed) { var msg = WiRCMessages.ReciveUdp(out endpoint); Console.WriteLine(msg.Cmd); switch (msg.Cmd) { case WiRCCmd.BCSD: // this is our own packet break; case WiRCCmd.BCSA: Address = endpoint.Address; break; default: Console.Write(BitConverter.ToString(msg.Data)); break; } } }
public void Disconnect() { disposed = true; WiRCMessages.SendTCP(TcpStream, new WiRCMessage(WiRCCmd.EST, 0)); }