Beispiel #1
0
        private void loadBtn_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFileDialog dialog = new Microsoft.Win32.OpenFileDialog();
            dialog.FileName   = string.IsNullOrEmpty(FileName) ? "trigger_Calibration" : FileName;
            dialog.DefaultExt = ".trg";
            dialog.Filter     = App.TRIG_CAL_FILTER;

            bool?   doLoad = dialog.ShowDialog();
            Trigger loadedConfig;

            if (doLoad == true && dialog.CheckFileExists)
            {
                if (App.LoadFromFile <Trigger>(dialog.FileName, out loadedConfig))
                {
                    FileName  = dialog.FileName;
                    min.Value = loadedConfig.min;
                    max.Value = loadedConfig.max;
                }
                else
                {
                    System.Windows.MessageBox.Show(
                        Globalization.TranslateFormat("Calibration_Load_Error_Msg", dialog.FileName),
                        Globalization.Translate("Calibration_Load_Error"),
                        System.Windows.MessageBoxButton.OK,
                        System.Windows.MessageBoxImage.Error);
                }
            }
        }
        private void loadBtn_Click(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFileDialog dialog = new Microsoft.Win32.OpenFileDialog();
            dialog.FileName   = string.IsNullOrEmpty(FileName) ? "ir_Calibration" : FileName;
            dialog.DefaultExt = ".irc";
            dialog.Filter     = App.IR_CAL_FILTER;

            bool?         doLoad = dialog.ShowDialog();
            IRCalibration loadedConfig;

            if (doLoad == true && dialog.CheckFileExists)
            {
                if (App.LoadFromFile <IRCalibration>(dialog.FileName, out loadedConfig))
                {
                    FileName        = dialog.FileName;
                    _irCalibration  = loadedConfig;
                    boxWidth.Value  = _irCalibration.boundry.width;
                    boxHeight.Value = _irCalibration.boundry.height;
                    boxX.Value      = _irCalibration.boundry.center_x - _irCalibration.boundry.width / 2;
                    boxY.Value      = _irCalibration.boundry.center_y - _irCalibration.boundry.height / 2;
                }
                else
                {
                    MessageBox.Show(
                        Globalization.TranslateFormat("Calibration_Load_Error_Msg", dialog.FileName),
                        Globalization.Translate("Calibration_Load_Error"),
                        MessageBoxButton.OK,
                        MessageBoxImage.Error);
                }
            }
        }
        private void loadBtn_Click(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFileDialog dialog = new Microsoft.Win32.OpenFileDialog();
            dialog.FileName   = string.IsNullOrEmpty(FileName) ? "axis_Calibration" : FileName;
            dialog.DefaultExt = ".axs";
            dialog.Filter     = App.AXIS_CAL_FILTER;

            bool?           doLoad = dialog.ShowDialog();
            AxisCalibration loadedConfig;

            if (doLoad == true && dialog.CheckFileExists)
            {
                if (App.LoadFromFile <AxisCalibration>(dialog.FileName, out loadedConfig))
                {
                    FileName      = dialog.FileName;
                    center.Value  = loadedConfig.center;
                    min.Value     = (int)Math.Round(100 - 100 * loadedConfig.min / 65535d);
                    max.Value     = (int)Math.Round(100 * loadedConfig.max / 65535d);
                    deadMax.Value = (int)Math.Round(100 * loadedConfig.deadPos / 65535d);
                    deadMin.Value = (int)Math.Round(-100 * loadedConfig.deadNeg / 65535d);
                }
                else
                {
                    MessageBox.Show(
                        Globalization.TranslateFormat("Calibration_Load_Error_Msg", dialog.FileName),
                        Globalization.Translate("Calibration_Load_Error"),
                        MessageBoxButton.OK,
                        MessageBoxImage.Error);
                }
            }
        }
        private void loadBtn_Click(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFileDialog dialog = new Microsoft.Win32.OpenFileDialog();
            dialog.FileName   = string.IsNullOrEmpty(FileName) ? "joystick_calibration" : FileName;
            dialog.DefaultExt = ".joy";
            dialog.Filter     = App.JOY_CAL_FILTER;

            bool?    doLoad = dialog.ShowDialog();
            Joystick loadedConfig;

            if (doLoad == true && dialog.CheckFileExists)
            {
                if (App.LoadFromFile <Joystick>(dialog.FileName, out loadedConfig))
                {
                    FileName = dialog.FileName;
                    Set(loadedConfig);
                }
                else
                {
                    MessageBox.Show(
                        Globalization.TranslateFormat("Calibration_Load_Error_Msg", dialog.FileName),
                        Globalization.Translate("Calibration_Load_Error"),
                        MessageBoxButton.OK,
                        MessageBoxImage.Error);
                }
            }
        }
 private void btnRemoveXinput_Click(object sender, RoutedEventArgs e)
 {
     if (ScpDirector.Access.IsConnected(ScpDirector.XInput_Device.Device_D))
     {
         if (ScpDirector.Access.DisconnectDevice(ScpDirector.XInput_Device.Device_D))
         {
             btnAddXinput.IsEnabled = true;
             xlabel4.Content        = Globalization.TranslateFormat("XInput_Device_Num", "4", Globalization.Translate("Status_Disconnected"));
         }
     }
     else if (ScpDirector.Access.IsConnected(ScpDirector.XInput_Device.Device_C))
     {
         if (ScpDirector.Access.DisconnectDevice(ScpDirector.XInput_Device.Device_C))
         {
             xlabel3.Content = Globalization.TranslateFormat("XInput_Device_Num", "3", Globalization.Translate("Status_Disconnected"));
         }
     }
     else if (ScpDirector.Access.IsConnected(ScpDirector.XInput_Device.Device_B))
     {
         if (ScpDirector.Access.DisconnectDevice(ScpDirector.XInput_Device.Device_B))
         {
             xlabel2.Content = Globalization.TranslateFormat("XInput_Device_Num", "2", Globalization.Translate("Status_Disconnected"));
         }
     }
     else if (ScpDirector.Access.IsConnected(ScpDirector.XInput_Device.Device_A))
     {
         if (ScpDirector.Access.DisconnectDevice(ScpDirector.XInput_Device.Device_A))
         {
             btnRemoveXinput.IsEnabled = false;
             xlabel1.Content           = Globalization.TranslateFormat("XInput_Device_Num", "1", Globalization.Translate("Status_Disconnected"));
         }
     }
 }
        private void SetXInputDeviceStatus(ScpDirector.XInput_Device device)
        {
            string status = Globalization.Translate("Status_Disconnected");

            if (ScpDirector.Access.IsConnected(device))
            {
                status = Globalization.Translate("Status_Connected");
            }

            status = Globalization.TranslateFormat("XInput_Device_Num", (int)device, status);

            switch (device)
            {
            case ScpDirector.XInput_Device.Device_A:
                xlabel1.Content = status;
                break;

            case ScpDirector.XInput_Device.Device_B:
                xlabel2.Content = status;
                break;

            case ScpDirector.XInput_Device.Device_C:
                xlabel3.Content = status;
                break;

            case ScpDirector.XInput_Device.Device_D:
                xlabel4.Content = status;
                break;
            }
        }
        public void RumbleSettingsChanged(DeviceStatus s, bool[] rumbleSubscriptions)
        {
            if (AppPrefs.Instance.autoAddXInputDevices)
            {
                int n = 3;
                for (; n > -1; n--)
                {
                    if (rumbleSubscriptions[n])
                    {
                        break;
                    }
                }

                if (n > -1 && !ScpDirector.Access.IsConnected(ScpDirector.XInput_Device.Device_A))
                {
                    bool connected = false;
                    for (int i = 0; i < 4; i++)
                    {
                        ScpDirector.Access.SetModifier(i);
                        connected = ScpDirector.Access.ConnectDevice(ScpDirector.XInput_Device.Device_A);
                        if (connected)
                        {
                            break;
                        }
                    }

                    if (connected)
                    {
                        btnRemoveXinput.IsEnabled = true;
                        xlabel1.Content           = Globalization.TranslateFormat("XInput_Device_Num", "1", Globalization.Translate("Status_Auto"));
                    }
                }
                if (n > 0 && !ScpDirector.Access.IsConnected(ScpDirector.XInput_Device.Device_B))
                {
                    if (ScpDirector.Access.ConnectDevice(ScpDirector.XInput_Device.Device_B))
                    {
                        xlabel2.Content = Globalization.TranslateFormat("XInput_Device_Num", "2", Globalization.Translate("Status_Auto"));
                    }
                }
                if (n > 1 && !ScpDirector.Access.IsConnected(ScpDirector.XInput_Device.Device_C))
                {
                    if (ScpDirector.Access.ConnectDevice(ScpDirector.XInput_Device.Device_C))
                    {
                        xlabel3.Content = Globalization.TranslateFormat("XInput_Device_Num", "3", Globalization.Translate("Status_Auto"));
                    }
                }
                if (n > 2 && !ScpDirector.Access.IsConnected(ScpDirector.XInput_Device.Device_D))
                {
                    if (ScpDirector.Access.ConnectDevice(ScpDirector.XInput_Device.Device_D))
                    {
                        btnAddXinput.IsEnabled = false;
                        xlabel4.Content        = Globalization.TranslateFormat("XInput_Device_Num", "4", Globalization.Translate("Status_Auto"));
                    }
                }
            }
        }
        public GameCubeControl()
        {
            _inputPrefix        = "1_";
            _connectedStatus    = Globalization.Translate("Controller_Connected");
            _disconnectedStatus = Globalization.Translate("Controller_Disconnect");

            InitializeComponent();

            for (int i = 0; i < 4; ++i)
            {
                (portSelection.Items[i] as MenuItem).Header = Globalization.TranslateFormat("GCN_Port", i);
            }
        }
        private void btnAddXinput_Click(object sender, RoutedEventArgs e)
        {
            if (!ScpDirector.Access.IsConnected(ScpDirector.XInput_Device.Device_A))
            {
                bool connected = false;
                for (int i = 0; i < 4; i++)
                {
                    ScpDirector.Access.SetModifier(i);
                    connected = ScpDirector.Access.ConnectDevice(ScpDirector.XInput_Device.Device_A);
                    if (connected)
                    {
                        break;
                    }
                }

                if (connected)
                {
                    btnRemoveXinput.IsEnabled = true;
                    xlabel1.Content           = Globalization.TranslateFormat("XInput_Device_Num", "1", Globalization.Translate("Status_Connected"));
                }
            }
            else if (!ScpDirector.Access.IsConnected(ScpDirector.XInput_Device.Device_B))
            {
                if (ScpDirector.Access.ConnectDevice(ScpDirector.XInput_Device.Device_B))
                {
                    xlabel2.Content = Globalization.TranslateFormat("XInput_Device_Num", "2", Globalization.Translate("Status_Connected"));
                }
            }
            else if (!ScpDirector.Access.IsConnected(ScpDirector.XInput_Device.Device_C))
            {
                if (ScpDirector.Access.ConnectDevice(ScpDirector.XInput_Device.Device_C))
                {
                    xlabel3.Content = Globalization.TranslateFormat("XInput_Device_Num", "3", Globalization.Translate("Status_Connected"));
                }
            }
            else if (!ScpDirector.Access.IsConnected(ScpDirector.XInput_Device.Device_D))
            {
                if (ScpDirector.Access.ConnectDevice(ScpDirector.XInput_Device.Device_D))
                {
                    btnAddXinput.IsEnabled = false;
                    xlabel4.Content        = Globalization.TranslateFormat("XInput_Device_Num", "4", Globalization.Translate("Status_Connected"));
                }
            }
        }
Beispiel #10
0
        public void Sync()
        {
            Guid          HIDServiceClass = Guid.Parse(NativeImports.HID_GUID);
            List <IntPtr> btRadios        = new List <IntPtr>();
            int           pairedCount     = 0;
            IntPtr        foundRadio;
            IntPtr        handle;

            NativeImports.BLUETOOTH_FIND_RADIO_PARAMS radioParams = new NativeImports.BLUETOOTH_FIND_RADIO_PARAMS();

            radioParams.Initialize();

            handle = NativeImports.BluetoothFindFirstRadio(ref radioParams, out foundRadio);
            bool next = handle != IntPtr.Zero;

            do
            {
                if (foundRadio != IntPtr.Zero)
                {
                    btRadios.Add(foundRadio);
                }

                next = NativeImports.BluetoothFindNextRadio(ref handle, out foundRadio);
            }while (next);

            if (btRadios.Count > 0)
            {
                Prompt(Globalization.Translate("Sync_Searching"));

                while (pairedCount == 0 && !cancelled)
                {
                    for (int r = 0; r < btRadios.Count; r++)
                    {
                        IntPtr found;
                        NativeImports.BLUETOOTH_RADIO_INFO           radioInfo    = new NativeImports.BLUETOOTH_RADIO_INFO();
                        NativeImports.BLUETOOTH_DEVICE_INFO          deviceInfo   = new NativeImports.BLUETOOTH_DEVICE_INFO();
                        NativeImports.BLUETOOTH_DEVICE_SEARCH_PARAMS searchParams = new NativeImports.BLUETOOTH_DEVICE_SEARCH_PARAMS();

                        radioInfo.Initialize();
                        deviceInfo.Initialize();
                        searchParams.Initialize();

                        uint getInfoError = NativeImports.BluetoothGetRadioInfo(btRadios[r], ref radioInfo);

                        // Success
                        if (getInfoError == 0)
                        {
                            searchParams.fReturnAuthenticated = false;
                            searchParams.fReturnRemembered    = false;
                            searchParams.fReturnConnected     = false;
                            searchParams.fReturnUnknown       = true;
                            searchParams.fIssueInquiry        = true;
                            searchParams.cTimeoutMultiplier   = 2;
                            searchParams.hRadio = btRadios[r];

                            found = NativeImports.BluetoothFindFirstDevice(ref searchParams, ref deviceInfo);

                            if (found != IntPtr.Zero)
                            {
                                do
                                {
                                    bool controller = SupportedDevice(deviceInfo.szName);
                                    bool wiiDevice  = deviceInfo.szName.StartsWith("Nintendo RVL");

                                    if (controller || wiiDevice)
                                    {
                                        Prompt(Globalization.TranslateFormat("Sync_Found", deviceInfo.szName));

                                        StringBuilder password  = new StringBuilder();
                                        uint          pcService = 16;
                                        Guid[]        guids     = new Guid[16];
                                        bool          success   = true;

                                        if (deviceInfo.fRemembered)
                                        {
                                            // Remove current pairing
                                            Prompt(Globalization.TranslateFormat("Sync_Unpairing"));
                                            uint errForget = NativeImports.BluetoothRemoveDevice(ref deviceInfo.Address);
                                            success = errForget == 0;
                                        }

                                        if (wiiDevice)
                                        {
                                            // use MAC address of BT radio as pin
                                            var bytes = BitConverter.GetBytes(radioInfo.address);
                                            for (int i = 0; i < 6; i++)
                                            {
                                                password.Append((char)bytes[i]);
                                            }

                                            if (success)
                                            {
                                                Prompt(Globalization.Translate("Sync_Pairing"));
                                                var errPair = NativeImports.BluetoothAuthenticateDevice(IntPtr.Zero, btRadios[r], ref deviceInfo, password.ToString(), 6);
                                                success = errPair == 0;
                                            }

                                            if (success)
                                            {
                                                Prompt(Globalization.Translate("Sync_Service"));
                                                var errService = NativeImports.BluetoothEnumerateInstalledServices(btRadios[r], ref deviceInfo, ref pcService, guids);
                                                success = errService == 0;
                                            }

                                            if (success)
                                            {
                                                Prompt(Globalization.Translate("Sync_HID"));
                                                var errActivate = NativeImports.BluetoothSetServiceState(btRadios[r], ref deviceInfo, ref HIDServiceClass, 0x01);
                                                success = errActivate == 0;
                                            }

                                            if (success)
                                            {
                                                Prompt(Globalization.Translate("Sync_Success"));
                                                pairedCount += 1;
                                            }
                                            else
                                            {
                                                Prompt(Globalization.Translate("Sync_Failure"));
                                            }
                                        }
                                        else
                                        {
                                            Prompt(Globalization.Translate("Sync_Finish"));
                                            var err = NativeImports.BluetoothAuthenticateDeviceEx(IntPtr.Zero, btRadios[r], ref deviceInfo, null, NativeImports.AUTHENTICATION_REQUIREMENTS.MITMProtectionNotRequired);

                                            if (err == 0)
                                            {
                                                Prompt(Globalization.Translate("Sync_Success"));
                                                pairedCount += 1;
                                            }
                                            else
                                            {
                                                Prompt(Globalization.Translate("Sync_Incomplete"));
                                            }
                                        }
                                    }
                                }while (NativeImports.BluetoothFindNextDevice(found, ref deviceInfo));
                            }
                        }
                        else
                        {
                            // Failed to get Bluetooth Radio Info
                            Prompt(Globalization.Translate("Sync_Bluetooth_Failed"));
                        }
                    }
                }

                // Close Opened Radios
                foreach (var openRadio in btRadios)
                {
                    NativeImports.CloseHandle(openRadio);
                }
            }
            else
            {
                // No Bluetooth Radios found
                Prompt(Globalization.Translate("Sync_No_Bluetooth"));
                System.Threading.Thread.Sleep(3000);
            }

            NativeImports.BluetoothFindRadioClose(handle);

            Dispatcher.BeginInvoke((Action)(() => Close()));
        }