예제 #1
0
        private void Poll()
        {
            var report = _device.ReadReport();

            if (report == null)
            {
                Logger.Debug("JoyCon Canceled " + this);
                return;
            }

            _device.Write(new byte[] { 0x01, 0x00 });
            var deviceData = _device.Read();

            if (deviceData.Status != HidDeviceData.ReadStatus.Success)
            {
                return;
            }

            var joyConState = JoyConInputUtils.ReadInput(deviceData.Data, Type);

            if (joyConState != null && !joyConState.Equals(CurrentState))
            {
                CurrentState = joyConState;
                Task.Run(() => DataUpdated?.Invoke(this, new JoyConDataUpdateEventArgs(this, joyConState)));

                if (IsPaired)
                {
                    //Splitting state changed?
                    if (_currentInSplittingState != (joyConState.SideLeftButton || joyConState.SideRightButton))
                    {
                        _currentInSplittingState = joyConState.SideLeftButton || joyConState.SideRightButton;
                        //Invoke splitting event async
                        Task.Run(() => Splitting?.Invoke(this, new JoyConSplittingEventArgs(
                                                             this, _currentInSplittingState ? SplittingType.ReadyToSplit : SplittingType.CancelSplitting
                                                             )));
                    }
                }
                else
                {
                    //Pairing state changed?
                    if (_currentInPairingState != joyConState.RearBackButton)
                    {
                        _currentInPairingState = joyConState.RearBackButton;
                        //Invoke ready to pair or paring cancel event async
                        Task.Run(() => Pairing?.Invoke(this, new JoyConPairingEventArgs(
                                                           this, _currentInPairingState ? PairingType.ReadyToPair : PairingType.CancelPairing
                                                           )));
                    }
                }
            }
        }