private void updateTabPageNav(PSMoveSharpState state) { bool selected_nav_connected = ((state.navInfo.port_status[Program.selected_nav] & 0x1) == 0x1); checkBoxNav1.Checked = ((state.navInfo.port_status[0] & 0x1) == 0x1); checkBoxNav2.Checked = ((state.navInfo.port_status[1] & 0x1) == 0x1); checkBoxNav3.Checked = ((state.navInfo.port_status[2] & 0x1) == 0x1); checkBoxNav4.Checked = ((state.navInfo.port_status[3] & 0x1) == 0x1); checkBoxNav5.Checked = ((state.navInfo.port_status[4] & 0x1) == 0x1); checkBoxNav6.Checked = ((state.navInfo.port_status[5] & 0x1) == 0x1); checkBoxNav7.Checked = ((state.navInfo.port_status[6] & 0x1) == 0x1); checkBoxNavUpVal.Checked = selected_nav_connected && ((state.padData[Program.selected_nav].button[PSMoveSharpConstants.offsetDigital1] & PSMoveSharpConstants.ctrlUp) != 0); checkBoxNavDownVal.Checked = selected_nav_connected && ((state.padData[Program.selected_nav].button[PSMoveSharpConstants.offsetDigital1] & PSMoveSharpConstants.ctrlDown) != 0); checkBoxNavLeftVal.Checked = selected_nav_connected && ((state.padData[Program.selected_nav].button[PSMoveSharpConstants.offsetDigital1] & PSMoveSharpConstants.ctrlLeft) != 0); checkBoxNavRightVal.Checked = selected_nav_connected && ((state.padData[Program.selected_nav].button[PSMoveSharpConstants.offsetDigital1] & PSMoveSharpConstants.ctrlRight) != 0); labelNavAnalogXVal.Text = selected_nav_connected ? (state.padData[Program.selected_nav].button[PSMoveSharpConstants.offsetAnalogLeftX] - 128).ToString() : "N/A"; labelNavAnalogYVal.Text = selected_nav_connected ? (state.padData[Program.selected_nav].button[PSMoveSharpConstants.offsetAnalogLeftY] - 128).ToString() : "N/A"; checkBoxNavCrossVal.Checked = selected_nav_connected && ((state.padData[Program.selected_nav].button[PSMoveSharpConstants.offsetDigital2] & PSMoveSharpConstants.ctrlCross) != 0); checkBoxNavCircleVal.Checked = selected_nav_connected && ((state.padData[Program.selected_nav].button[PSMoveSharpConstants.offsetDigital2] & PSMoveSharpConstants.ctrlCircle) != 0); checkBoxNavL1Val.Checked = selected_nav_connected && ((state.padData[Program.selected_nav].button[PSMoveSharpConstants.offsetDigital2] & PSMoveSharpConstants.ctrlL1) != 0); labelNavL2Val.Text = selected_nav_connected ? state.padData[Program.selected_nav].button[PSMoveSharpConstants.offsetPressL2].ToString() : "N/A"; checkBoxNavL3Val.Checked = selected_nav_connected && ((state.padData[Program.selected_nav].button[PSMoveSharpConstants.offsetDigital1] & PSMoveSharpConstants.ctrlL3) != 0); }
public PSMoveClientDelegate() { _readerThread = new Thread(new ThreadStart(PSMoveClienDelegateReadThread)); _readerThreadExit = 0; _latest_state = new PSMoveSharpState(); _reading = false; }
public void UpdateState(PSMoveSharpState state) { // not connected if ((state.navInfo.port_status[0] & 0x1) == 0) { return; } int digitalpad1_changed = (int)state.padData[0].button[2] ^ _digitalpad1; int digitalpad1_pressed = digitalpad1_changed & (int)state.padData[0].button[2]; int digitalpad1_released = digitalpad1_changed & (int)~state.padData[0].button[2]; int digitalpad2_changed = (int)state.padData[0].button[3] ^ _digitalpad2; int digitalpad2_pressed = digitalpad2_changed & (int)state.padData[0].button[3]; int digitalpad2_released = digitalpad2_changed & (int)~state.padData[0].button[3]; _digitalpad1 = (int)state.padData[0].button[2]; _digitalpad2 = (int)state.padData[0].button[3]; bool cross_released = (digitalpad2_released & (1 << 6)) != 0; bool circle_released = (digitalpad2_released & (1 << 5)) != 0; bool dpad_down_released = (digitalpad1_released & (1 << 6)) != 0; float pressure_L1 = (float)state.padData[0].button[16] / 255.0f; float pressure_L2 = (float)state.padData[0].button[18] / 255.0f; float left_right = (float)state.padData[0].button[6] / 255.0f; float up_down = (float)state.padData[0].button[7] / 255.0f; left_right *= 2.0f; up_down *= 2.0f; left_right -= 1.0f; up_down -= 1.0f; up_down *= -1.0f; left_right = ZeroInRange(left_right, -0.25f, 0.25f); up_down = ZeroInRange(up_down, -0.25f, 0.25f); RotateX(left_right); RotateZ(up_down); ZoomIn(pressure_L1); ZoomOut(pressure_L2); if (dpad_down_released) { Program.flower.Reset(); } if (cross_released) { Program.flower.NextCapture(); } if (circle_released) { Program.flower.ToggleCaptureState(); } _sphere_visible = state.imageStates[0].visible != 0; }
public void Update(PSMoveSharpState state) { padData = state.padData[Num]; Connected = ((state.navInfo.port_status[Num] & 0x1) == 0x1); _dirty = true; }
public void Update(PSMoveSharpState state) { gemState = state.gemStates[Num]; sphereState = state.sphereStates[Num]; imageState = state.imageStates[Num]; Connected = (state.gemStatus[Num].connected == 1); _dirty = true; }
protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Graphics gr = e.Graphics; Rectangle rc = this.ClientRectangle; float length = rc.Width / 4.0f; float height = rc.Height / 4.0f; rc.X += 4; rc.Y += 4; rc.Width -= 8; rc.Height -= 8; gr.FillRectangle(new SolidBrush(Color.Black), rc); Pen linePen = new Pen(Brushes.DeepSkyBlue); linePen.Width = 4.0f; PointF[] corners = new PointF[5]; corners[0] = new PointF(rc.X + length, rc.Y + height * 3); corners[1] = new PointF(rc.X + length * 3, rc.Y + height * 3); corners[2] = new PointF(rc.X + length * 3, rc.Y + height); corners[3] = new PointF(rc.X + length, rc.Y + height); corners[4] = new PointF(rc.X + length, rc.Y + height * 3); gr.DrawLines(linePen, corners); if (Program.moveClient != null) { PSMoveSharpState state = Program.moveClient.GetLatestState(); for (int i = 0; i < PSMoveSharpState.PSMoveSharpNumMoveControllers; i++) { if (valid[i]) { SolidBrush pointerBrush = new SolidBrush(Color.FromArgb(Convert.ToInt32(255.0 * state.sphereStates[i].r), Convert.ToInt32(255.0 * state.sphereStates[i].g), Convert.ToInt32(255.0 * state.sphereStates[i].b))); RectangleF pointerRC = new RectangleF(); pointerRC.X = rc.X + (length * 2) + (pointer_x[i] * length * 2); pointerRC.Y = rc.Y + (height * 2) + (-pointer_y[i] * height * 2); pointerRC.Width = 8.0f; pointerRC.Height = 8.0f; gr.FillEllipse(pointerBrush, pointerRC); } } } }
private void updateTabPageCamera(PSMoveSharpCameraFrameState camera_frame_state) { if (Program.image_paused) { ImagePausedToggleButton.Text = "Unpause"; } else { ImagePausedToggleButton.Text = "Pause"; } camera_frame_state.camera_frame_state_rwl.AcquireReaderLock(-1); PSMoveSharpState dummy_state = new PSMoveSharpState(); imageBox.Image = camera_frame_state.GetCameraFrameAndState(ref dummy_state); camera_frame_state.camera_frame_state_rwl.ReleaseReaderLock(); }
private void updateState() { updateToolbar(); buttonResetEnabled.Enabled = Program.client_connected; comboBoxSelectedMove.Enabled = Program.client_connected; comboBoxSelectedNav.Enabled = Program.client_connected; if (Program.moveClient == null) { return; } PSMoveSharpState state = Program.moveClient.GetLatestState(); PSMoveSharpCameraFrameState camera_frame_state = Program.moveClient.GetLatestCameraFrameState(); if (processed_packet_index == state.packet_index) { return; } processed_packet_index = state.packet_index; switch ((TabPageIndex)tabControlPosition.SelectedIndex) { case TabPageIndex.Move: updateTabPageMove(state); break; case TabPageIndex.Nav: updateTabPageNav(state); break; case TabPageIndex.Laser: updateTabPageLaser(state); break; case TabPageIndex.Position: updateTabPagePosition(state); break; case TabPageIndex.Camera: updateTabPageCamera(camera_frame_state); break; } }
/// <summary> /// Get camera image. /// The image should be 640x480, please check the length before using it. /// Also I know it is a weird issue, but after Move.me started, please calibrate at least once to make sure the image stream working smoothly. /// Once you have done this, it will work fine. /// </summary> /// <returns> /// A <see cref="Color32[]"/>, null if not connected or camera stream is paused. /// </returns> public static Color32[] GetCameraImage() { if (!IsConnected || !IsCameraResume) { return(null); } PSMoveSharpState dummyState = new PSMoveSharpState(); List <byte[]> image = CameraFrameState.GetCameraFrameAndState(ref dummyState); finalImage.Clear(); foreach (byte[] slice in image) { imageTex.LoadImage(slice); finalImage.AddRange(imageTex.GetPixels32()); } return(finalImage.ToArray()); }
private void updateState() { if (Program.moveClient == null) { return; } PSMoveSharpState state = Program.moveClient.GetLatestState(); PSMoveSharpCameraFrameState camera_frame_state = Program.moveClient.GetLatestCameraFrameState(); if (processed_packet_index == state.packet_index) { return; } updateToolbar(); updateAR(); }
public void updateState() { updateToolbar(); buttonEnable.Enabled = MouserProgram.client_connected; if (MouserProgram.moveClient == null) { return; } PSMoveSharpState state = MouserProgram.moveClient.GetLatestState(); if (processed_packet_index == state.packet_index) { return; } processed_packet_index = state.packet_index; updateMouser(state); }
private void UpdateState() { if (PSMoveWrapper.moveClient == null) { return; } state = PSMoveWrapper.moveClient.GetLatestState(); cameraFrameState = PSMoveWrapper.moveClient.GetLatestCameraFrameState(); cameraPitchAngle = state.cameraState.pitch_angle; moveCount = 0; for (int i = 0; i < MAX_MOVE_NUM; i++) { //sphere state UpdateSphereState(i); //image state UpdateImageState(i); //gem state UpdateGemState(i); //gem status moveConnected[i] = (state.gemStatus[i].connected == 1); if (moveConnected[i]) { moveCount++; } } navCount = 0; for (int i = 0; i < MAX_NAV_NUM; i++) { UpdateNavState(i); if (navConnected[i]) { navCount++; } } }
public void UpdateState(PSMoveSharpState state) { if (_capture_state == 1) { // we are not capturing when in capture state 1 return; } _update_lock.AcquireWriterLock(-1); if (_samples[_capture_slot].Count >= _buffer_size) { // remove the first (oldest sample) _samples[_capture_slot].RemoveFirst(); } MoveSample sample; sample.x = state.gemStates[0].pos.x; sample.y = state.gemStates[0].pos.y; sample.z = state.gemStates[0].pos.z; sample.time = state.gemStates[0].timestamp; _samples[_capture_slot].AddLast(sample); _update_lock.ReleaseWriterLock(); }
private void updateMouser(PSMoveSharpState state) { UInt16 just_pressed; UInt16 just_released; { UInt16 changed_buttons = Convert.ToUInt16(state.gemStates[0].pad.digitalbuttons ^ last_buttons); just_pressed = Convert.ToUInt16(changed_buttons & state.gemStates[0].pad.digitalbuttons); just_released = Convert.ToUInt16(changed_buttons & ~state.gemStates[0].pad.digitalbuttons); last_buttons = state.gemStates[0].pad.digitalbuttons; } checkBoxCalibrated.Checked = (state.positionPointerStates[0].valid == 1); checkBoxEnabled.Checked = fake_mouse_events; labelMovePosValX.Text = (state.positionPointerStates[0].valid == 1) ? state.positionPointerStates[0].normalized_x.ToString("N3") : "N/A"; labelMovePosValY.Text = (state.positionPointerStates[0].valid == 1) ? state.positionPointerStates[0].normalized_y.ToString("N3") : "N/A"; buttonEnable.Text = fake_mouse_events ? "Disable" : "Enable"; if (state.positionPointerStates[0].valid == 1) { if ((just_pressed & PSMoveSharpConstants.ctrlSelect) == PSMoveSharpConstants.ctrlSelect) { MouserProgram.moveClient.SendRequestPacket(PSMoveClient.ClientRequest.PSMoveClientRequestPositionPointerDisable, 0); Console.WriteLine("Disabling pointer"); calibration_step = 0; } if (fake_mouse_events) { if ((just_pressed & PSMoveSharpConstants.ctrlCross) == PSMoveSharpConstants.ctrlCross) { MouserRecenter(state.positionPointerStates[0].normalized_x, state.positionPointerStates[0].normalized_y); } else { MouserMove(state.positionPointerStates[0].normalized_x, state.positionPointerStates[0].normalized_y); } if (((just_pressed & PSMoveSharpConstants.ctrlTick) == PSMoveSharpConstants.ctrlTick)) { SimulateMouseClickEvent(MOUSEEVENTF_LEFTDOWN); } else if (((just_released & PSMoveSharpConstants.ctrlTick) == PSMoveSharpConstants.ctrlTick)) { SimulateMouseClickEvent(MOUSEEVENTF_LEFTUP); } if (((just_pressed & PSMoveSharpConstants.ctrlCircle) == PSMoveSharpConstants.ctrlCircle)) { SimulateMouseClickEvent(MOUSEEVENTF_RIGHTDOWN); } else if (((just_released & PSMoveSharpConstants.ctrlCircle) == PSMoveSharpConstants.ctrlCircle)) { SimulateMouseClickEvent(MOUSEEVENTF_RIGHTUP); } } } else if (((just_pressed & PSMoveSharpConstants.ctrlTick) == PSMoveSharpConstants.ctrlTick) && ((last_buttons & PSMoveSharpConstants.ctrlTrigger) == PSMoveSharpConstants.ctrlTrigger)) { switch (calibration_step) { case ClientCalibrationStep.Left: MouserProgram.moveClient.SendRequestPacket(PSMoveClient.ClientRequest.PSMoveClientRequestPositionPointerSetLeft, 0); break; case ClientCalibrationStep.Right: MouserProgram.moveClient.SendRequestPacket(PSMoveClient.ClientRequest.PSMoveClientRequestPositionPointerSetRight, 0); break; case ClientCalibrationStep.Bottom: MouserProgram.moveClient.SendRequestPacket(PSMoveClient.ClientRequest.PSMoveClientRequestPositionPointerSetBottom, 0); break; case ClientCalibrationStep.Top: MouserProgram.moveClient.SendRequestPacket(PSMoveClient.ClientRequest.PSMoveClientRequestPositionPointerSetTop, 0); break; } Console.WriteLine("Calibration tick"); calibration_step++; if (calibration_step == ClientCalibrationStep.Done) { MouserProgram.moveClient.SendRequestPacket(PSMoveClient.ClientRequest.PSMoveClientRequestPositionPointerEnable, 0); Console.WriteLine("Enabling pointer"); } } }
public void CaptureState(int index, PSMoveSharpState state) { if (index == current_index_) { last_state_ = state; if (IsSetComplete()) { complete_state_ = last_state_; Console.WriteLine("Complete set packet index {0}", complete_state_.packet_index); complete_image_ = MakeCompleteImage(); } } }
/* * Calibration for positioning of the pointer */ void calibrateScreen() { state = MoveMeConnect.getState(); GUI.Label(new Rect(Screen.width / 2 - 75, Screen.height / 2 - 50, 150, 100), centerText, calibrateText); GUI.Label(new Rect(0,0,Screen.width, Screen.height), "[+]", leftCross); GUI.Label(new Rect(0, 0, Screen.width, Screen.height), "[+]", botCross); GUI.Label(new Rect(0, 0, Screen.width, Screen.height), "[+]", topCross); GUI.Label(new Rect(0, 0, Screen.width, Screen.height), "[+]", rightCross); switch (calibrateStep) { case 0: if (GUI.Button(new Rect(Screen.width / 2 - 75, Screen.height / 2 - 50, 150, 100), "Start" + "\n" + "Calibration")) { calibrateStep = 1; MoveMeConnect.calibrate(0); } break; case 1: centerText = "Left"; leftCross.normal.textColor = Color.white; break; case 2: centerText = "Right"; leftCross.normal.textColor = Color.green; rightCross.normal.textColor = Color.white; break; case 3: centerText = "Bottom"; rightCross.normal.textColor = Color.green; botCross.normal.textColor = Color.white; break; case 4: centerText = "Top"; botCross.normal.textColor = Color.green; topCross.normal.textColor = Color.white; break; case 5: centerText = ""; if (GUI.Button(new Rect(Screen.width / 2 - 75, Screen.height / 2 - 50, 150, 100), "Done" + "\n" + "Go Back")) { menuScene = 1; MoveMeConnect.moveClient.SendRequestPacket(PSMoveClient.ClientRequest.PSMoveClientRequestPointerEnable, Convert.ToUInt32(0)); } topCross.normal.textColor = Color.green; isCalibrated = true; break; } int i = 0; //i = controller to track UInt16 just_pressed; { UInt16 changed_buttons = (UInt16)(state.gemStates[0].pad.digitalbuttons ^ last_buttons); just_pressed = (UInt16)(changed_buttons & state.gemStates[0].pad.digitalbuttons); last_buttons = state.gemStates[0].pad.digitalbuttons; } const int PadTick = 1 << 2; const int PadTrigger = 1 << 1; if ((just_pressed & PadTick) == PadTick && (last_buttons & PadTrigger) == PadTrigger) { //Switch case written backwards in order to prevent //extra cases from running switch (calibrateStep) { case 4: MoveMeConnect.moveClient.SendRequestPacket(PSMoveClient.ClientRequest.PSMoveClientRequestPointerSetTop, Convert.ToUInt32(0)); calibrateStep = 5; break; case 3: MoveMeConnect.moveClient.SendRequestPacket(PSMoveClient.ClientRequest.PSMoveClientRequestPointerSetBottom, Convert.ToUInt32(0)); calibrateStep = 4; break; case 2: MoveMeConnect.moveClient.SendRequestPacket(PSMoveClient.ClientRequest.PSMoveClientRequestPointerSetRight, Convert.ToUInt32(0)); calibrateStep = 3; break; case 1: MoveMeConnect.moveClient.SendRequestPacket(PSMoveClient.ClientRequest.PSMoveClientRequestPointerSetLeft, Convert.ToUInt32(0)); calibrateStep = 2; break; default: break; } } }
/** * Checks to see if the cursor is a move controller then returns * the position of the cursor. It gets the move controller's pointer * position or mouse's position on screen. Also checks to see if the * left mouse button or move button is pressed down. * * bool isMove - checks if getting move controller or mouse */ private void getPosition(bool isMove) { if(isMove) { state = MoveMeConnect.getState(); posX = state.pointerStates[0].normalized_x; posY = state.pointerStates[0].normalized_y; int sLength = Screen.width; int sHeight = Screen.height; if (posX > 0) posX = (sLength * posX) + (sLength / 2); if (posX < 0) posX = (sLength / 2) - (-sLength * posX); if (posX == 0) posX = sLength / 2; if (posY > 0) posY = (sHeight * posY) + (sHeight / 2); if (posY < 0) posY = (sHeight / 2) - (-sHeight * posY); if (posY == 0) posY = sHeight / 2; UInt16 just_pressed = (UInt16)(state.gemStates[0].pad.digitalbuttons); //Gets the last pressed move button const int PadTick = 1 << 2; if ((just_pressed & PadTick) == PadTick) transform.collider.isTrigger = false; else transform.collider.isTrigger = true; } else { posX = Input.mousePosition.x; posY = Input.mousePosition.y; if (Input.GetMouseButtonDown(0)) transform.collider.isTrigger = false; if (Input.GetMouseButtonUp(0)) transform.collider.isTrigger = true; } }
/// <summary> /// Get camera image. /// The image should be 640x480, please check the length before using it. /// Also I know it is a weird issue, but after Move.me started, please calibrate at least once to make sure the image stream working smoothly. /// Once you have done this, it will work fine. /// </summary> /// <returns> /// A <see cref="Color32[]"/>, null if not connected or camera stream is paused. /// </returns> public static Color32[] GetCameraImage() { if(!IsConnected || !IsCameraResume) { return null; } PSMoveSharpState dummyState = new PSMoveSharpState(); List<byte[]> image = CameraFrameState.GetCameraFrameAndState(ref dummyState); finalImage.Clear(); foreach(byte[] slice in image) { imageTex.LoadImage(slice); finalImage.AddRange(imageTex.GetPixels32()); } return finalImage.ToArray(); }
private void updateTabPageMove(PSMoveSharpState state) { checkBoxMove1.Checked = (state.gemStatus[0].connected == 1); checkBoxMove2.Checked = (state.gemStatus[1].connected == 1); checkBoxMove3.Checked = (state.gemStatus[2].connected == 1); checkBoxMove4.Checked = (state.gemStatus[3].connected == 1); checkBoxMoveResetEnabled.Checked = Program.reset_enabled[Program.selected_move]; buttonResetEnabled.Text = Program.reset_enabled[Program.selected_move] ? "Disable" : "Enable"; bool selected_move_connected = (state.gemStatus[Program.selected_move].connected == 1); PSMoveSharpGemState selected_gem = state.gemStates[Program.selected_move]; labelPosValX.Text = selected_move_connected ? Convert.ToInt32(selected_gem.pos.x).ToString() : "N/A"; labelPosValY.Text = selected_move_connected ? Convert.ToInt32(selected_gem.pos.y).ToString() : "N/A"; labelPosValZ.Text = selected_move_connected ? Convert.ToInt32(selected_gem.pos.z).ToString() : "N/A"; labelVelValX.Text = selected_move_connected ? Convert.ToInt32(selected_gem.vel.x).ToString() : "N/A"; labelVelValY.Text = selected_move_connected ? Convert.ToInt32(selected_gem.vel.y).ToString() : "N/A"; labelVelValZ.Text = selected_move_connected ? Convert.ToInt32(selected_gem.vel.z).ToString() : "N/A"; labelAccValX.Text = selected_move_connected || true?Convert.ToInt32(selected_gem.accel.x).ToString() : "N/A"; labelAccValY.Text = selected_move_connected || true?Convert.ToInt32(selected_gem.accel.y).ToString() : "N/A"; labelAccValZ.Text = selected_move_connected || true?Convert.ToInt32(selected_gem.accel.z).ToString() : "N/A"; labelQuatValH.Text = selected_move_connected ? Convert.ToInt32((180.0 / Math.PI) * quatToEuler(selected_gem.quat).x).ToString() : "N/A"; labelQuatValP.Text = selected_move_connected ? Convert.ToInt32((180.0 / Math.PI) * quatToEuler(selected_gem.quat).y).ToString() : "N/A"; labelQuatValR.Text = selected_move_connected ? Convert.ToInt32((180.0 / Math.PI) * quatToEuler(selected_gem.quat).z).ToString() : "N/A"; labelAngVelValH.Text = selected_move_connected ? Convert.ToInt32((180.0 / Math.PI) * selected_gem.angvel.x).ToString() : "N/A"; labelAngVelValP.Text = selected_move_connected ? Convert.ToInt32((180.0 / Math.PI) * selected_gem.angvel.y).ToString() : "N/A"; labelAngVelValR.Text = selected_move_connected ? Convert.ToInt32((180.0 / Math.PI) * selected_gem.angvel.z).ToString() : "N/A"; labelAngAccValH.Text = selected_move_connected ? Convert.ToInt32((180.0 / Math.PI) * selected_gem.angaccel.x).ToString() : "N/A"; labelAngAccValP.Text = selected_move_connected ? Convert.ToInt32((180.0 / Math.PI) * selected_gem.angaccel.y).ToString() : "N/A"; labelAngAccValR.Text = selected_move_connected ? Convert.ToInt32((180.0 / Math.PI) * selected_gem.angaccel.z).ToString() : "N/A"; labelHandlePosValX.Text = selected_move_connected ? Convert.ToInt32(selected_gem.handle_pos.x).ToString() : "N/A"; labelHandlePosValY.Text = selected_move_connected ? Convert.ToInt32(selected_gem.handle_pos.y).ToString() : "N/A"; labelHandlePosValZ.Text = selected_move_connected ? Convert.ToInt32(selected_gem.handle_pos.z).ToString() : "N/A"; labelHandleVelValX.Text = selected_move_connected ? Convert.ToInt32(selected_gem.handle_vel.x).ToString() : "N/A"; labelHandleVelValY.Text = selected_move_connected ? Convert.ToInt32(selected_gem.handle_vel.y).ToString() : "N/A"; labelHandleVelValZ.Text = selected_move_connected ? Convert.ToInt32(selected_gem.handle_vel.z).ToString() : "N/A"; labelHandleAccValX.Text = selected_move_connected ? Convert.ToInt32(selected_gem.handle_accel.x).ToString() : "N/A"; labelHandleAccValY.Text = selected_move_connected ? Convert.ToInt32(selected_gem.handle_accel.y).ToString() : "N/A"; labelHandleAccValZ.Text = selected_move_connected ? Convert.ToInt32(selected_gem.handle_accel.z).ToString() : "N/A"; tableLayoutPanelMoveMotion.Update(); checkBoxMoveSquareVal.Checked = ((selected_gem.pad.digitalbuttons & PSMoveSharpConstants.ctrlSquare) != 0); checkBoxMoveCrossVal.Checked = ((selected_gem.pad.digitalbuttons & PSMoveSharpConstants.ctrlCross) != 0); checkBoxMoveCircleVal.Checked = ((selected_gem.pad.digitalbuttons & PSMoveSharpConstants.ctrlCircle) != 0); checkBoxMoveTriangleVal.Checked = ((selected_gem.pad.digitalbuttons & PSMoveSharpConstants.ctrlTriangle) != 0); checkBoxMoveMoveVal.Checked = ((selected_gem.pad.digitalbuttons & PSMoveSharpConstants.ctrlTick) != 0); labelMoveTVal.Text = selected_move_connected ? selected_gem.pad.analog_trigger.ToString() : "N/A"; checkBoxMoveStartVal.Checked = ((selected_gem.pad.digitalbuttons & PSMoveSharpConstants.ctrlStart) != 0); checkBoxMoveSelectVal.Checked = ((selected_gem.pad.digitalbuttons & PSMoveSharpConstants.ctrlSelect) != 0); tableLayoutPanelMoveInput.Update(); if (Program.reset_enabled[Program.selected_move] && ((state.gemStates[Program.selected_move].pad.digitalbuttons & PSMoveSharpConstants.ctrlSelect) != 0)) { Program.moveClient.SendRequestPacket(PSMoveClient.ClientRequest.PSMoveClientRequestControllerReset, Convert.ToUInt32(Program.selected_move)); } }
public PSMoveSharpState ReadStateBlocking() { IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0); Byte[] buffer = _udpClient.Receive(ref remoteEP); PSMoveSharpState state = new PSMoveSharpState(); state.packet_index = NetworkReaderHelper.ReadUint32(ref buffer, 12); state.serverConfig.FillFromNetworkBuffer(ref buffer); for (int i = 0; i < PSMoveSharpState.PSMoveSharpNumMoveControllers; i++) { state.gemStatus[i].FillFromNetworkBuffer(ref buffer, i); state.gemStates[i].FillFromNetworkBuffer(ref buffer, i); state.imageStates[i].FillFromNetworkBuffer(ref buffer, i); state.pointerStates[i].FillFromNetworkBuffer(ref buffer, i); state.sphereStates[i].FillFromNetworkBuffer(ref buffer, i); state.positionPointerStates[i].FillFromNetworkBuffer(ref buffer, i); } state.cameraState.FillFromNetworkBuffer(ref buffer); state.navInfo.FillFromNetworkBuffer(ref buffer); for (int i = 0; i < PSMoveSharpNavInfo.PSMoveSharpNumNavControllers; i++) { state.padData[i].FillFromNetworkBuffer(ref buffer, i); } return state; }
public PSMoveClientThreadedRead() { _readerThread = new Thread(new ThreadStart(PSMoveClientThreadedReadThreadStart)); _rwl = new ReaderWriterLock(); _readerThreadExit = 0; _latest_state = new PSMoveSharpState(); _latest_camera_frame_state = new PSMoveSharpCameraFrameState(); _reading = false; }
private void updateTabPagePosition(PSMoveSharpState state) { checkBoxPosition1.Checked = (state.positionPointerStates[0].valid == 1); checkBoxPosition2.Checked = (state.positionPointerStates[1].valid == 1); checkBoxPosition3.Checked = (state.positionPointerStates[2].valid == 1); checkBoxPosition4.Checked = (state.positionPointerStates[3].valid == 1); labelPositionPos1ValX.Text = (state.positionPointerStates[0].valid == 1) ? state.positionPointerStates[0].normalized_x.ToString("N3") : "N/A"; labelPositionPos1ValY.Text = (state.positionPointerStates[0].valid == 1) ? state.positionPointerStates[0].normalized_y.ToString("N3") : "N/A"; labelPositionPos2ValX.Text = (state.positionPointerStates[1].valid == 1) ? state.positionPointerStates[1].normalized_x.ToString("N3") : "N/A"; labelPositionPos2ValY.Text = (state.positionPointerStates[1].valid == 1) ? state.positionPointerStates[1].normalized_y.ToString("N3") : "N/A"; labelPositionPos3ValX.Text = (state.positionPointerStates[2].valid == 1) ? state.positionPointerStates[2].normalized_x.ToString("N3") : "N/A"; labelPositionPos3ValY.Text = (state.positionPointerStates[2].valid == 1) ? state.positionPointerStates[2].normalized_y.ToString("N3") : "N/A"; labelPositionPos4ValX.Text = (state.positionPointerStates[3].valid == 1) ? state.positionPointerStates[3].normalized_x.ToString("N3") : "N/A"; labelPositionPos4ValY.Text = (state.positionPointerStates[3].valid == 1) ? state.positionPointerStates[3].normalized_y.ToString("N3") : "N/A"; for (int i = 0; i < PSMoveSharpState.PSMoveSharpNumMoveControllers; i++) { UInt16 just_pressed; { UInt16 changed_buttons = (UInt16)(state.gemStates[i].pad.digitalbuttons ^ last_buttons[i]); just_pressed = (UInt16)(changed_buttons & state.gemStates[i].pad.digitalbuttons); last_buttons[i] = state.gemStates[i].pad.digitalbuttons; } pointerDisplayControlPosition.valid[i] = (state.positionPointerStates[i].valid == 1); if (state.positionPointerStates[i].valid == 1) { pointerDisplayControlPosition.pointer_x[i] = state.positionPointerStates[i].normalized_x; pointerDisplayControlPosition.pointer_y[i] = state.positionPointerStates[i].normalized_y; const int PadSelect = 1; const int PadTriangle = 1 << 4; if ((just_pressed & PadSelect) == PadSelect) { Program.moveClient.SendRequestPacket(PSMoveClient.ClientRequest.PSMoveClientRequestPositionPointerDisable, Convert.ToUInt32(i)); Console.WriteLine("Disabling pointer"); calibration_step[i] = ClientCalibrationStep.Left; } } else { const int PadTick = 1 << 2; const int PadTrigger = 1 << 1; if ((just_pressed & PadTick) == PadTick && (last_buttons[i] & PadTrigger) == PadTrigger) { switch (calibration_step[i]) { case ClientCalibrationStep.Left: Program.moveClient.SendRequestPacket(PSMoveClient.ClientRequest.PSMoveClientRequestPositionPointerSetLeft, Convert.ToUInt32(i)); break; case ClientCalibrationStep.Right: Program.moveClient.SendRequestPacket(PSMoveClient.ClientRequest.PSMoveClientRequestPositionPointerSetRight, Convert.ToUInt32(i)); break; case ClientCalibrationStep.Bottom: Program.moveClient.SendRequestPacket(PSMoveClient.ClientRequest.PSMoveClientRequestPositionPointerSetBottom, Convert.ToUInt32(i)); break; case ClientCalibrationStep.Top: Program.moveClient.SendRequestPacket(PSMoveClient.ClientRequest.PSMoveClientRequestPositionPointerSetTop, Convert.ToUInt32(i)); break; } Console.WriteLine("Calibration tick"); calibration_step[i]++; if (calibration_step[i] == ClientCalibrationStep.Done) { Program.moveClient.SendRequestPacket(PSMoveClient.ClientRequest.PSMoveClientRequestPositionPointerEnable, Convert.ToUInt32(i)); Console.WriteLine("Enabling pointer"); } } } } pointerDisplayControlPosition.Invalidate(); pointerDisplayControlPosition.Update(); }
private void UpdateState() { if (PSMoveWrapper.moveClient == null) { return; } state = PSMoveWrapper.moveClient.GetLatestState(); cameraFrameState = PSMoveWrapper.moveClient.GetLatestCameraFrameState(); moveCount = 0; for(int i = 0; i < MAX_MOVE_NUM; i++) { //sphere state UpdateSphereState(i); //image state UpdateImageState(i); //gem state UpdateGemState(i); //gem status moveConnected[i] = (state.gemStatus[i].connected == 1); if(moveConnected[i]) { moveCount ++; } } navCount = 0; for(int i = 0; i < MAX_NAV_NUM; i++) { UpdateNavState(i); if(navConnected[i]) { navCount ++; } } }
protected void ReceiveCallback(IAsyncResult ar) { UdpClient u = (UdpClient)((UdpState)(ar.AsyncState)).u; IPEndPoint e = (IPEndPoint)((UdpState)(ar.AsyncState)).e; Byte[] buffer = null; try { buffer = u.EndReceive(ar, ref e); } catch (System.ObjectDisposedException) { _reading = false; return; } catch (System.Net.Sockets.SocketException) { _reading = false; return; } _rwl.AcquireWriterLock(-1); int packet_length = NetworkReaderHelper.ReadInt32(ref buffer, 12); int magic = NetworkReaderHelper.ReadInt32(ref buffer, 0); int code = NetworkReaderHelper.ReadInt32(ref buffer, 8); uint packet_index = NetworkReaderHelper.ReadUint32(ref buffer, 16); //UnityEngine.Debug.Log(code); if (code == 1) { _latest_state.packet_index = NetworkReaderHelper.ReadUint32(ref buffer, 16); _latest_state.serverConfig.FillFromNetworkBuffer(ref buffer); for (int i = 0; i < PSMoveSharpState.PSMoveSharpNumMoveControllers; i++) { _latest_state.gemStatus[i].FillFromNetworkBuffer(ref buffer, i); _latest_state.gemStates[i].FillFromNetworkBuffer(ref buffer, i); _latest_state.imageStates[i].FillFromNetworkBuffer(ref buffer, i); _latest_state.pointerStates[i].FillFromNetworkBuffer(ref buffer, i); _latest_state.sphereStates[i].FillFromNetworkBuffer(ref buffer, i); _latest_state.positionPointerStates[i].FillFromNetworkBuffer(ref buffer, i); } _latest_state.navInfo.FillFromNetworkBuffer(ref buffer); for (int i = 0; i < PSMoveSharpNavInfo.PSMoveSharpNumNavControllers; i++) { _latest_state.padData[i].FillFromNetworkBuffer(ref buffer, i); } } else if (code == 2) { byte[] slice = new byte[packet_length - 3]; int slice_num = NetworkReaderHelper.ReadByte(ref buffer, 20); int num_slices = NetworkReaderHelper.ReadByte(ref buffer, 21); int format = NetworkReaderHelper.ReadByte(ref buffer, 22); int row_height = 480 / num_slices; int row_start = row_height * slice_num; Array.Copy(buffer, 23, slice, 0, packet_length - 3); /* System.IO.MemoryStream jpeg_stream = new System.IO.MemoryStream(jpeg_data); System.Drawing.Image slice = null; try { slice = Image.FromStream(jpeg_stream); testByte = jpeg_data; } catch { // server sent a bad frame } */ if (slice != null) { _latest_camera_frame_state.ProcessPacket((int)packet_index, slice, row_start, row_height); //_latest_camera_frame_state.BlitSliceOntoFullImage(slice, row_start, row_height); } } else if (code == 3) { PSMoveSharpState camera_state = new PSMoveSharpState(); camera_state.packet_index = NetworkReaderHelper.ReadUint32(ref buffer, 16); camera_state.serverConfig.FillFromNetworkBuffer(ref buffer); for (int i = 0; i < PSMoveSharpState.PSMoveSharpNumMoveControllers; i++) { camera_state.gemStatus[i].FillFromNetworkBuffer(ref buffer, i); camera_state.gemStates[i].FillFromNetworkBuffer(ref buffer, i); camera_state.imageStates[i].FillFromNetworkBuffer(ref buffer, i); camera_state.pointerStates[i].FillFromNetworkBuffer(ref buffer, i); camera_state.sphereStates[i].FillFromNetworkBuffer(ref buffer, i); camera_state.positionPointerStates[i].FillFromNetworkBuffer(ref buffer, i); } camera_state.navInfo.FillFromNetworkBuffer(ref buffer); for (int i = 0; i < PSMoveSharpNavInfo.PSMoveSharpNumNavControllers; i++) { camera_state.padData[i].FillFromNetworkBuffer(ref buffer, i); } _latest_camera_frame_state.ProcessStatePacket((int)packet_index, camera_state); } _rwl.ReleaseWriterLock(); _reading = false; }
public List<byte[]> GetCameraFrameAndState(ref PSMoveSharpState state) { List<byte[]> image; camera_frame_state_rwl.AcquireReaderLock(-1); state = camera_frame_state_collector.GetCompleteState(); image = camera_frame_state_collector.GetCompleteImage(); camera_frame_state_rwl.ReleaseReaderLock(); return image; }
public void ProcessStatePacket(int index, PSMoveSharpState state) { camera_frame_state_rwl.AcquireWriterLock(-1); camera_frame_state_collector.CaptureState(index, state); camera_frame_state_rwl.ReleaseWriterLock(); }
public void Update(PSMoveSharpState state) { padData = state.padData[Num]; Connected = ((state.navInfo.port_status[Num] & 0x1)==0x1); _dirty = true; }
public PSMoveSharpCameraFrameStateCollector() { num_slices_ = 1; current_index_ = 0; slices_ = new PSMoveSharpCameraFrameSlice[num_slices_]; slices_[0] = new PSMoveSharpCameraFrameSlice(); last_state_ = new PSMoveSharpState(); complete_state_ = new PSMoveSharpState(); complete_image_ = new List<byte[]>(); }
/* * Checks for which screen to display * and posts constant overlays seen * through entire Menu System */ void OnGUI() { Screen.showCursor = true; GUI.Label(new Rect(Screen.width - 80, 0, 80, 20), connected, connectStyle); GUI.Label(new Rect(Screen.width - 80, 10, 80, 20), calibrated, calibrateStyle); if (MoveMeConnect.client_connected) { connected = "Connected"; connect = "Disconnect"; isConnected = true; connectStyle.normal.textColor = Color.green; } else { connected = "NOT Connected"; connect = "Connect"; isConnected = false; connectStyle.normal.textColor = Color.red; } if (isCalibrated) { state = MoveMeConnect.getState(); GUI.Label(new Rect(10, 0, 80, 40), state.pointerStates[0].normalized_x.ToString("N3"), calibrateStyle); GUI.Label(new Rect(10, 10, 80, 40), state.pointerStates[0].normalized_y.ToString("N3"), calibrateStyle); calibrated = "Calibrated"; calibrateStyle.normal.textColor = Color.green; } else { calibrated = "NOT Calibrated"; calibrateStyle.normal.textColor = Color.red; } switch (menuScene) { case 0: mainMenuScreen(); break; case 1: settingsScreen(); break; case 2: calibrateScreen(); break; case 4: connectionError(); break; case 5: calibrateScreen2(); break; default: mainMenuScreen(); break; } }