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