Exemplo n.º 1
0
        //private ushort dispPacketCounter = 0;


        //private void RemoteDisplayProcessor()
        //{
        //    var receiveThread = new Thread(() =>
        //    {
        //        byte[] incoming = new byte[100 * 16];
        //        while (_running)
        //        {
        //            lock (_socketLock)
        //            {

        //                if (_tcpClient != null)
        //                {
        //                    try
        //                    {
        //                        var rotations = Math.Min(_tcpClient.Available / 16, 100);

        //                        if (rotations > 0)
        //                        {
        //                            if (State < CommState.ActiveNoDriver)
        //                                State = _sharedMem.IsDriverActive ? CommState.Active : CommState.ActiveNoDriver;

        //                            _tcpClient.Client.Receive(incoming, 0, 16 * rotations, SocketFlags.None);
        //                            var rotData = StructFromBytes<USBRotationData>(incoming, 16 * (rotations - 1));
        //                            //Debug.WriteLine("r:" + rotations + " w: " + rotData.w.ToString("F6") + " x: " + rotData.x.ToString("F6") + "y: " + rotData.y.ToString("F6") + "z:" + rotData.z.ToString("F6"));
        //                            var packet = USBPacket.Create((byte)(ROTATION_DATA | HMD_SOURCE), dispPacketCounter++, rotData);
        //                            var d = StructToBytes(packet);
        //                            SetPacketCrc(ref d);
        //                            _sharedMem.WriteIncomingPacket(d);
        //                        }
        //                    }
        //                    catch
        //                    {

        //                    }
        //                }
        //            }
        //        }

        //    });

        //    receiveThread.Start();

        //    while (_running)
        //    {
        //        var result = ProcessScreen();
        //        if (!result)
        //            Thread.Sleep(10);
        //    }

        //    receiveThread.Join();
        //    receiveThread = null;

        //}

        //private bool ProcessScreen()
        //{
        //    var size = _sharedMem.GetScreenImage(out ScreenData);
        //    if (size <= 0) return false;

        //    _frameCount++;

        //    lock (_socketLock)
        //    {
        //        if (_tcpClient == null)
        //        {
        //            _isConnecting = false;
        //            _tcpClient = new TcpClient();
        //        }
        //    }

        //    using (var ms = new MemoryStream(ScreenData))
        //    {
        //        ScreenImage = Image.FromStream(ms);
        //    }

        //    SendFrame(ScreenData, size);

        //    if (chkPreview.Checked)
        //        pbScreen.Invalidate();
        //    return true;
        //}

        //private void OnRemoteConnect(IAsyncResult ar)
        //{
        //    lock (_socketLock)
        //    {
        //        _isConnecting = false;
        //        try
        //        {
        //            _tcpClient.EndConnect(ar);
        //            _socket = _tcpClient.Client;
        //            State = _sharedMem.IsDriverActive ? CommState.Active : CommState.ActiveNoDriver;
        //            ResetRotation();
        //        }
        //        catch
        //        {
        //            _socket = null;
        //        }
        //    }
        //}

        private void MonitorForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            EnableOpenTrack(false);
            EnableCustomHMD(false);
            EnablePSVR(false);
            _trayIcon.Dispose();
            _trayIcon = null;

            tmrConsumer.Enabled = false;
            _sharedMem.EnableWatchDog(false);

            SetState(CommState.TrackerActive, false);

            _sharedMem.Dispose();
            _sharedMem = null;
            //if (ulMainHandle != 0)
            //    OpenVR.Overlay.DestroyOverlay(ulMainHandle);
            //OpenVR.Shutdown();
            //if (_socket != null && _socket.Connected)
            //{
            //    _socket.Shutdown(SocketShutdown.Both);
            //    _socket.Close();
            //}
            //lock (_socketLock)
            //{
            //    if (_tcpClient != null)
            //        _tcpClient.Dispose();
            //    _tcpClient = null;
            //}
        }
Exemplo n.º 2
0
        //private ushort dispPacketCounter = 0;


        //private void RemoteDisplayProcessor()
        //{
        //    var receiveThread = new Thread(() =>
        //    {
        //        byte[] incoming = new byte[100 * 16];
        //        while (_running)
        //        {
        //            lock (_socketLock)
        //            {

        //                if (_tcpClient != null)
        //                {
        //                    try
        //                    {
        //                        var rotations = Math.Min(_tcpClient.Available / 16, 100);

        //                        if (rotations > 0)
        //                        {
        //                            if (State < CommState.ActiveNoDriver)
        //                                State = _sharedMem.IsDriverActive ? CommState.Active : CommState.ActiveNoDriver;

        //                            _tcpClient.Client.Receive(incoming, 0, 16 * rotations, SocketFlags.None);
        //                            var rotData = StructFromBytes<USBRotationData>(incoming, 16 * (rotations - 1));
        //                            //Debug.WriteLine("r:" + rotations + " w: " + rotData.w.ToString("F6") + " x: " + rotData.x.ToString("F6") + "y: " + rotData.y.ToString("F6") + "z:" + rotData.z.ToString("F6"));
        //                            var packet = USBPacket.Create((byte)(ROTATION_DATA | HMD_SOURCE), dispPacketCounter++, rotData);
        //                            var d = StructToBytes(packet);
        //                            SetPacketCrc(ref d);
        //                            _sharedMem.WriteIncomingPacket(d);
        //                        }
        //                    }
        //                    catch
        //                    {

        //                    }
        //                }
        //            }
        //        }

        //    });

        //    receiveThread.Start();

        //    while (_running)
        //    {
        //        var result = ProcessScreen();
        //        if (!result)
        //            Thread.Sleep(10);
        //    }

        //    receiveThread.Join();
        //    receiveThread = null;

        //}

        //private bool ProcessScreen()
        //{
        //    var size = _sharedMem.GetScreenImage(out ScreenData);
        //    if (size <= 0) return false;

        //    _frameCount++;

        //    lock (_socketLock)
        //    {
        //        if (_tcpClient == null)
        //        {
        //            _isConnecting = false;
        //            _tcpClient = new TcpClient();
        //        }
        //    }

        //    using (var ms = new MemoryStream(ScreenData))
        //    {
        //        ScreenImage = Image.FromStream(ms);
        //    }

        //    SendFrame(ScreenData, size);

        //    if (chkPreview.Checked)
        //        pbScreen.Invalidate();
        //    return true;
        //}

        //private void OnRemoteConnect(IAsyncResult ar)
        //{
        //    lock (_socketLock)
        //    {
        //        _isConnecting = false;
        //        try
        //        {
        //            _tcpClient.EndConnect(ar);
        //            _socket = _tcpClient.Client;
        //            State = _sharedMem.IsDriverActive ? CommState.Active : CommState.ActiveNoDriver;
        //            ResetRotation();
        //        }
        //        catch
        //        {
        //            _socket = null;
        //        }
        //    }
        //}

        private void MonitorForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            _running = false;
            _commThread.Join();
            _commThread = null;
            //_dispThread.Join();
            //_dispThread = null;
            _trayIcon.Dispose();
            _trayIcon = null;
            _sharedMem.Dispose();
            _sharedMem = null;
            //if (ulMainHandle != 0)
            //    OpenVR.Overlay.DestroyOverlay(ulMainHandle);
            //OpenVR.Shutdown();
            //if (_socket != null && _socket.Connected)
            //{
            //    _socket.Shutdown(SocketShutdown.Both);
            //    _socket.Close();
            //}
            //lock (_socketLock)
            //{
            //    if (_tcpClient != null)
            //        _tcpClient.Dispose();
            //    _tcpClient = null;
            //}
        }
Exemplo n.º 3
0
 private void MonitorForm_Load(object sender, EventArgs e)
 {
     _sharedMem = new ShMem();
     _sharedMem.EnableWatchDog(false);
     IsVisible           = true;
     tmrConsumer.Enabled = true;
 }
        /// <summary>通信处理生成(发送端程序)</summary>
        public virtual bool CreateCom()
        {
            //Notify("外部通信开始");
            try
            {
                // 互斥
                mutexShMem = new Mutex(false, MUTEX_NAME);

                // 共享内存
                shMemPtr = CreateFileMapping(
                    (UIntPtr)0xFFFFFFFF,                        // ファイルのハンドル
                    IntPtr.Zero,                                // セキュリティ
                    PAGE_READWRITE,                             // 保護
                    0,                                          // サイズ 上位 WORD
                    SHMEM_SIZE,                                 // サイズ 下位 WORD
                    SHMEM_NAME                                  // オブジェクト名
                    );
                int test = shMemPtr.ToInt32();
                if (shMemPtr.ToInt32() == INVALID_HANDLE_VALUE)
                {
                    //Util.WriteLog(this.GetType(), "CreateFileMapping : error");
                    throw new Exception("CreateFileMapping : error");
                }

                mapAddrPtr = MapViewOfFile(
                    shMemPtr,                                   // ファイルマッピングオブジェクトのハンドル
                    FILE_MAP_WRITE,                             // アクセスモードWRITE,
                    0,                                          // オフセット 上位 DWORD
                    0,                                          // オフセット 下位 DWORD
                    0                                           // マップ対象のバイト数
                    );

                if (mapAddrPtr.ToInt32() == 0)
                {
                    //Util.WriteLog(this.GetType(), "MapViewOfFile : error");
                    throw new Exception("MapViewOfFile : error");
                }
                shMem = new ShMem();
                Marshal.StructureToPtr(shMem, mapAddrPtr, true);

                // 生成
                procPLC      = new Thread(new ThreadStart(ProcDataDeal));
                procPLC.Name = "communication";
                procPLC.Start();
            }
            catch (Exception ex)
            {
                Util.Notify(ex.Message);
                //Util.WriteLog(this.GetType(), "控制卡异常:" + ex.ToString());
                CloseCom();

                return(false);           // NG
            }

            return(true);            // OK
        }
Exemplo n.º 5
0
        private void MonitorForm_Load(object sender, EventArgs e)
        {
            //_serverAddr = IPAddress.Parse("192.168.0.27");
            //_endPoint = new IPEndPoint(_serverAddr, 2222);



            _sharedMem = new ShMem();
            _sharedMem.EnableWatchDog(false);
            IsVisible   = true;
            _commThread = new Thread(USBProcessor);
            //_dispThread = new Thread(RemoteDisplayProcessor);
            _running = true;
            _commThread.Start();
            //_dispThread.Start();
        }