//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; //} }
//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; //} }
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 }
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(); }