Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
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");
        }
Ejemplo n.º 3
0
 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);
         }
     }
 }
Ejemplo n.º 4
0
        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; }
                        });
                    }
                }
            }
        }
Ejemplo n.º 5
0
        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
        }
Ejemplo n.º 6
0
        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;
                }
            }
        }
Ejemplo n.º 7
0
 public void Disconnect()
 {
     disposed = true;
     WiRCMessages.SendTCP(TcpStream, new WiRCMessage(WiRCCmd.EST, 0));
 }