Esempio n. 1
0
        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;
 }
Esempio n. 3
0
        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;
        }
Esempio n. 4
0
    public void Update(PSMoveSharpState state)
    {
        padData = state.padData[Num];

        Connected = ((state.navInfo.port_status[Num] & 0x1) == 0x1);

        _dirty = true;
    }
Esempio n. 5
0
    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;
    }
Esempio n. 6
0
        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);
                    }
                }
            }
        }
Esempio n. 7
0
        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();
        }
Esempio n. 8
0
        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;
            }
        }
Esempio n. 9
0
    /// <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());
    }
Esempio n. 10
0
        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();
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
    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++;
            }
        }
    }
Esempio n. 13
0
        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();
        }
Esempio n. 14
0
        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();
             }
         }
 }
Esempio n. 16
0
    /*
     * 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;
            }
        }
    }
Esempio n. 17
0
    /**
     * 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;
        }
    }
Esempio n. 18
0
    /// <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();
    }
Esempio n. 19
0
        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;
 }
Esempio n. 22
0
        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();
        }
Esempio n. 23
0
    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();
 }
Esempio n. 27
0
    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[]>();
 }
Esempio n. 29
0
    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;
    }
Esempio n. 30
0
    /*
     * 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;
        }
    }