Пример #1
0
        private void CheckButtons()
        {
            var btn = TryGetCommand().ToButtons();

            if (btn == prev)
            {
                return;
            }

            var released = ~btn & prev;
            var pressed  = btn & ~prev;

            prev = btn;

            if (released != RemoteButton.None)
            {
                BrickConsole.WriteLine("Remote button released: {0}", released);
                queue.Enqueue(() => ButtonsReleased(released));
            }

            if (pressed != RemoteButton.None)
            {
                BrickConsole.WriteLine("Remote button pressed: {0}", pressed);
                queue.Enqueue(() => ButtonsPressed(pressed));
            }
        }
Пример #2
0
        private void OnReadComplete(IAsyncResult asyncResult)
        {
            try
            {
                if (_deviceStream.EndRead(asyncResult) == VAL_END_READ && _deviceBuffer[1] == 1)
                {
                    if (_deviceBuffer[DEV_BUF_INDEX] == (int)_doubleClickButton &&
                        Environment.TickCount - _doubleClickTick <= _doubleClickTime)
                    {
                        if (DoubleClick != null)
                        {
                            DoubleClick(this, new RemoteEventArgs(_doubleClickButton));
                        }
                    }
                    else
                    {
                        _doubleClickButton = (RemoteButton)_deviceBuffer[DEV_BUF_INDEX];
                        _doubleClickTick   = Environment.TickCount;

                        if (Click != null)
                        {
                            Click(this, new RemoteEventArgs(_doubleClickButton));
                        }
                    }
                }
                // begin another asynchronous read from the device
                _deviceStream.BeginRead(_deviceBuffer, 0, _deviceBuffer.Length, new AsyncCallback(OnReadComplete), null);
            }
            catch (Exception)
            {
            }
        }
Пример #3
0
        /// <summary>
        /// Let everybody know that this HID message may not be handled by anyone else
        /// </summary>
        /// <param name="msg">System.Windows.Forms.Message</param>
        /// <returns>Command handled</returns>
        private bool HandleWindowsMessage(Message msg)
        {
            // Check if Message is a HID input message
            if (msg.Msg != 0x0319)
            {
                return(false);
            }

            int command = (msg.LParam.ToInt32() >> 16) & ~0xF000;

            InputDevices.LastHidRequest = (AppCommands)command;

            RemoteButton remoteButton = RemoteButton.None;

            if ((AppCommands)command == AppCommands.VolumeUp)
            {
                remoteButton = RemoteButton.VolumeUp;
            }

            if ((AppCommands)command == AppCommands.VolumeDown)
            {
                remoteButton = RemoteButton.VolumeDown;
            }

            if (remoteButton != RemoteButton.None)
            {
                RemoteHandler((int)remoteButton);
            }

            return(true);
        }
Пример #4
0
        /// <summary>
        /// Let everybody know that this HID message may not be handled by anyone else
        /// </summary>
        /// <param name="msg">System.Windows.Forms.Message</param>
        /// <returns>Command handled</returns>
        public bool WndProc(Message msg)
        {
            if (controlEnabled && (msg.Msg == 0x0319))
            {
                int command = (msg.LParam.ToInt32() >> 16) & ~0xF000;
                InputDevices.LastHidRequest = (AppCommands)command;

                RemoteButton button = RemoteButton.None;

                if ((AppCommands)command == AppCommands.VolumeUp)
                {
                    button = RemoteButton.VolumeUp;
                }

                if ((AppCommands)command == AppCommands.VolumeDown)
                {
                    button = RemoteButton.VolumeDown;
                }

                if ((AppCommands)command == AppCommands.MediaChannelUp)
                {
                    button = RemoteButton.ChannelUp;
                }

                if ((AppCommands)command == AppCommands.MediaChannelDown)
                {
                    button = RemoteButton.ChannelDown;
                }

                if (button != RemoteButton.None)
                {
                    // Get & execute Mapping
                    if (_inputHandler.MapAction((int)button))
                    {
                        if (logVerbose)
                        {
                            Log.Info("MCE: Command \"{0}\" mapped", button);
                        }
                    }
                    else if (logVerbose)
                    {
                        Log.Info("MCE: Command \"{0}\" not mapped", button);
                    }
                }

                return(true);
            }
            return(false);
        }
Пример #5
0
        /// <summary>
        /// Let everybody know that this HID message may not be handled by anyone else
        /// </summary>
        /// <param name="msg">System.Windows.Forms.Message</param>
        /// <returns>Command handled</returns>
        public bool WndProc(Message msg)
        {
            if (controlEnabled && (msg.Msg == Win32.Const.WM_APPCOMMAND))
            {
                int command = Win32.Macro.GET_APPCOMMAND_LPARAM(msg.LParam);
                InputDevices.LastHidRequest = (AppCommands)command;

                RemoteButton button = RemoteButton.None;

                if ((AppCommands)command == AppCommands.VolumeUp)
                {
                    button = RemoteButton.VolumeUp;
                }

                if ((AppCommands)command == AppCommands.VolumeDown)
                {
                    button = RemoteButton.VolumeDown;
                }

                if ((AppCommands)command == AppCommands.MediaChannelUp)
                {
                    button = RemoteButton.ChannelUp;
                }

                if ((AppCommands)command == AppCommands.MediaChannelDown)
                {
                    button = RemoteButton.ChannelDown;
                }

                if (button != RemoteButton.None)
                {
                    // Get & execute Mapping
                    if (_inputHandler.MapAction((int)button))
                    {
                        if (logVerbose)
                        {
                            Log.Info("MCE: Command \"{0}\" mapped", button);
                        }
                    }
                    else if (logVerbose)
                    {
                        Log.Info("MCE: Command \"{0}\" not mapped", button);
                    }
                }

                return(true);
            }
            return(false);
        }
Пример #6
0
        public static RemoteButton GetButtonFromSignal(string signal)
        {
            var button = ParseSignal(signal);

            if (button == RemoteButton.Undefined)
            {
                var special = PraseSpecialSignal(signal);
                if (special == SpecialSignal.FollowUp && _lastButton.IsFollowUpEnabled())
                {
                    return(_lastButton);
                }
            }

            _lastButton = button;
            return(button);
        }
Пример #7
0
        /// <summary>
        /// Evaluate button press from remote
        /// </summary>
        /// <param name="sender">Sender</param>
        /// <param name="e">Arguments</param>
        private void OnRemoteClick(object sender, RemoteEventArgs e)
        {
            RemoteButton remoteButton = e.Button;

            // Set LastHidRequest, otherwise the HID handler (if enabled) would react on some remote buttons (double execution of command)
            switch (remoteButton)
            {
            case RemoteButton.Record:
                InputDevices.LastHidRequest = AppCommands.MediaRecord;
                break;

            case RemoteButton.Stop:
                InputDevices.LastHidRequest = AppCommands.MediaStop;
                break;

            case RemoteButton.Pause:
                InputDevices.LastHidRequest = AppCommands.MediaPause;
                break;

            case RemoteButton.Rewind:
                InputDevices.LastHidRequest = AppCommands.MediaRewind;
                break;

            case RemoteButton.Play:
                InputDevices.LastHidRequest = AppCommands.MediaPlay;
                break;

            case RemoteButton.Forward:
                InputDevices.LastHidRequest = AppCommands.MediaFastForward;
                break;

            case RemoteButton.Replay:
                InputDevices.LastHidRequest = AppCommands.MediaPreviousTrack;
                break;

            case RemoteButton.Skip:
                InputDevices.LastHidRequest = AppCommands.MediaNextTrack;
                break;

            case RemoteButton.Back:
                InputDevices.LastHidRequest = AppCommands.BrowserBackward;
                break;

            case RemoteButton.ChannelUp:
                InputDevices.LastHidRequest = AppCommands.MediaChannelUp;
                break;

            case RemoteButton.ChannelDown:
                InputDevices.LastHidRequest = AppCommands.MediaChannelDown;
                break;

            case RemoteButton.Mute:
                InputDevices.LastHidRequest = AppCommands.VolumeMute;
                break;

            case RemoteButton.VolumeUp:
                return; // Don't handle this command, benefit from OS' repeat handling instead

            case RemoteButton.VolumeDown:
                return; // Don't handle this command, benefit from OS' repeat handling instead
            }

            // Get & execute Mapping
            RemoteHandler((int)remoteButton);
        }
Пример #8
0
        /// <summary>
        /// Evaluate button press from remote
        /// </summary>
        /// <param name="button">Remote Button</param>
        private void OnRemoteClick(object sender, RemoteEventArgs e)
        //RemoteButton button)
        {
            RemoteButton button = e.Button;

            if (logVerbose)
            {
                Log.Info("MCE: Incoming button command: {0}", button);
            }

            // Set LastHidRequest, otherwise the HID handler (if enabled) would react on some remote buttons (double execution of command)
            switch (button)
            {
            case RemoteButton.Record:
                InputDevices.LastHidRequest = AppCommands.MediaRecord;
                break;

            case RemoteButton.Stop:
                InputDevices.LastHidRequest = AppCommands.MediaStop;
                break;

            case RemoteButton.Pause:
                InputDevices.LastHidRequest = AppCommands.MediaPause;
                break;

            case RemoteButton.Rewind:
                InputDevices.LastHidRequest = AppCommands.MediaRewind;
                break;

            case RemoteButton.Play:
                InputDevices.LastHidRequest = AppCommands.MediaPlay;
                break;

            case RemoteButton.Forward:
                InputDevices.LastHidRequest = AppCommands.MediaFastForward;
                break;

            case RemoteButton.Replay:
                InputDevices.LastHidRequest = AppCommands.MediaPreviousTrack;
                break;

            case RemoteButton.Skip:
                InputDevices.LastHidRequest = AppCommands.MediaNextTrack;
                break;

            case RemoteButton.Back:
                InputDevices.LastHidRequest = AppCommands.BrowserBackward;
                break;

            case RemoteButton.ChannelUp:
                return; // Don't handle this command, benefit from OS' repeat handling instead

            case RemoteButton.ChannelDown:
                return; // Don't handle this command, benefit from OS' repeat handling instead

            case RemoteButton.Mute:
                InputDevices.LastHidRequest = AppCommands.VolumeMute;
                break;

            case RemoteButton.VolumeUp:
                return; // Don't handle this command, benefit from OS' repeat handling instead

            case RemoteButton.VolumeDown:
                return; // Don't handle this command, benefit from OS' repeat handling instead
            }

            // Get & execute Mapping
            if (_inputHandler.MapAction((int)button))
            {
                if (logVerbose)
                {
                    Log.Info("MCE: Command \"{0}\" mapped", button);
                }
            }
            else if (logVerbose)
            {
                Log.Info("MCE: Command \"{0}\" not mapped", button);
            }
        }
Пример #9
0
    /// <summary>
    /// Handles the mouse mode.
    /// </summary>
    /// <param name="button">The button pressed.</param>
    /// <returns>true if handled successfully, otherwise false.</returns>
    private static bool HandleMouseMode(RemoteButton button)
    {
      if (button == MouseModeButton)
      {
        MouseModeActive = !MouseModeActive; // Toggle Mouse Mode

        string notifyMessage;

        if (MouseModeActive)
        {
          notifyMessage = "Mouse Mode is now ON";
        }
        else
        {
          notifyMessage = "Mouse Mode is now OFF";

          if (_mouseModeLeftHeld)
            Mouse.Button(Mouse.MouseEvents.LeftUp);

          if (_mouseModeRightHeld)
            Mouse.Button(Mouse.MouseEvents.RightUp);

          if (_mouseModeMiddleHeld)
            Mouse.Button(Mouse.MouseEvents.MiddleUp);

          _mouseModeLeftHeld = false;
          _mouseModeRightHeld = false;
          _mouseModeMiddleHeld = false;
        }

        MPCommon.ShowNotifyDialog("Mouse Mode", notifyMessage, 2);

        Log.Debug("MPControlPlugin: {0}", notifyMessage);

        return true;
      }
      else if (MouseModeActive)
      {
        // Determine repeat count ...
        long ticks = DateTime.Now.Ticks;
        if (button != _mouseModeLastButton || new TimeSpan(ticks - _mouseModeLastButtonTicks).Milliseconds >= 500)
          _mouseModeRepeatCount = 0;
        else
          _mouseModeRepeatCount++;

        _mouseModeLastButtonTicks = ticks;
        _mouseModeLastButton = button;


        int distance = MouseModeStep;

        if (MouseModeAcceleration)
          distance += (2 * _mouseModeRepeatCount);

        switch (button)
        {
          case RemoteButton.Up:
            Mouse.Move(0, -distance, false);
            return true;

          case RemoteButton.Down:
            Mouse.Move(0, distance, false);
            return true;

          case RemoteButton.Left:
            Mouse.Move(-distance, 0, false);
            return true;

          case RemoteButton.Right:
            Mouse.Move(distance, 0, false);
            return true;

          case RemoteButton.Replay: // Left Single-Click
            if (_mouseModeLeftHeld)
              Mouse.Button(Mouse.MouseEvents.LeftUp);

            if (_mouseModeRightHeld)
              Mouse.Button(Mouse.MouseEvents.RightUp);

            if (_mouseModeMiddleHeld)
              Mouse.Button(Mouse.MouseEvents.MiddleUp);

            _mouseModeLeftHeld = false;
            _mouseModeRightHeld = false;
            _mouseModeMiddleHeld = false;

            Mouse.Button(Mouse.MouseEvents.LeftDown);
            Mouse.Button(Mouse.MouseEvents.LeftUp);
            return true;

          case RemoteButton.Skip: // Right Single-Click
            if (_mouseModeLeftHeld)
              Mouse.Button(Mouse.MouseEvents.LeftUp);

            if (_mouseModeRightHeld)
              Mouse.Button(Mouse.MouseEvents.RightUp);

            if (_mouseModeMiddleHeld)
              Mouse.Button(Mouse.MouseEvents.MiddleUp);

            _mouseModeLeftHeld = false;
            _mouseModeRightHeld = false;
            _mouseModeMiddleHeld = false;

            Mouse.Button(Mouse.MouseEvents.RightDown);
            Mouse.Button(Mouse.MouseEvents.RightUp);
            return true;

          case RemoteButton.Play: // Middle Single-Click
            if (_mouseModeLeftHeld)
              Mouse.Button(Mouse.MouseEvents.LeftUp);

            if (_mouseModeRightHeld)
              Mouse.Button(Mouse.MouseEvents.RightUp);

            if (_mouseModeMiddleHeld)
              Mouse.Button(Mouse.MouseEvents.MiddleUp);

            _mouseModeLeftHeld = false;
            _mouseModeRightHeld = false;
            _mouseModeMiddleHeld = false;

            Mouse.Button(Mouse.MouseEvents.MiddleDown);
            Mouse.Button(Mouse.MouseEvents.MiddleUp);
            return true;

          case RemoteButton.Ok: // Double-Click (Left)
            if (_mouseModeLeftHeld)
              Mouse.Button(Mouse.MouseEvents.LeftUp);

            if (_mouseModeRightHeld)
              Mouse.Button(Mouse.MouseEvents.RightUp);

            if (_mouseModeMiddleHeld)
              Mouse.Button(Mouse.MouseEvents.MiddleUp);

            _mouseModeLeftHeld = false;
            _mouseModeRightHeld = false;
            _mouseModeMiddleHeld = false;

            Mouse.Button(Mouse.MouseEvents.LeftDown);
            Mouse.Button(Mouse.MouseEvents.LeftUp);

            Mouse.Button(Mouse.MouseEvents.LeftDown);
            Mouse.Button(Mouse.MouseEvents.LeftUp);
            return true;

          case RemoteButton.Back: // Left Click & Hold
            if (_mouseModeRightHeld)
              Mouse.Button(Mouse.MouseEvents.RightUp);

            if (_mouseModeMiddleHeld)
              Mouse.Button(Mouse.MouseEvents.MiddleUp);

            if (_mouseModeLeftHeld)
              Mouse.Button(Mouse.MouseEvents.LeftUp);
            else
              Mouse.Button(Mouse.MouseEvents.LeftDown);

            _mouseModeLeftHeld = !_mouseModeLeftHeld;
            _mouseModeRightHeld = false;
            _mouseModeMiddleHeld = false;
            return true;

          case RemoteButton.Info: // Right Click & Hold
            if (_mouseModeLeftHeld)
              Mouse.Button(Mouse.MouseEvents.LeftUp);

            if (_mouseModeMiddleHeld)
              Mouse.Button(Mouse.MouseEvents.MiddleUp);

            if (_mouseModeRightHeld)
              Mouse.Button(Mouse.MouseEvents.RightUp);
            else
              Mouse.Button(Mouse.MouseEvents.RightDown);

            _mouseModeRightHeld = !_mouseModeRightHeld;
            _mouseModeLeftHeld = false;
            _mouseModeMiddleHeld = false;
            return true;

          case RemoteButton.Stop: // Middle Click & Hold
            if (_mouseModeLeftHeld)
              Mouse.Button(Mouse.MouseEvents.LeftUp);

            if (_mouseModeRightHeld)
              Mouse.Button(Mouse.MouseEvents.RightUp);

            if (_mouseModeMiddleHeld)
              Mouse.Button(Mouse.MouseEvents.MiddleUp);
            else
              Mouse.Button(Mouse.MouseEvents.MiddleDown);

            _mouseModeMiddleHeld = !_mouseModeMiddleHeld;
            _mouseModeLeftHeld = false;
            _mouseModeRightHeld = false;
            return true;

          case RemoteButton.ChannelUp: // Scroll Up
            Mouse.Scroll(Mouse.ScrollDir.Up);
            return true;

          case RemoteButton.ChannelDown: // Scroll Down
            Mouse.Scroll(Mouse.ScrollDir.Down);
            return true;
        }
      }

      return false;
    }
Пример #10
0
 public RemoteEventArgs(RemoteButton button)
 {
   _button = button;
 }
Пример #11
0
        /// <summary>
        /// Map an app command to the MCE RemoteButton
        /// </summary>
        /// <param name="command"></param>
        /// <returns></returns>
        private Mapping MapFromAppCommand(AppCommands command)
        {
            Mapping      result = null;
            RemoteButton button = RemoteButton.None;

            switch (command)
            {
            case AppCommands.BrowserBackward:
                button = RemoteButton.Back;
                break;

            case AppCommands.VolumeMute:
                button = RemoteButton.Mute;
                break;

            case AppCommands.VolumeDown:
                button = RemoteButton.VolumeDown;
                break;

            case AppCommands.VolumeUp:
                button = RemoteButton.VolumeUp;
                break;

            case AppCommands.MediaNextTrack:
                button = RemoteButton.Skip;
                break;

            case AppCommands.MediaPreviousTrack:
                button = RemoteButton.Replay;
                break;

            case AppCommands.MediaStop:
                button = RemoteButton.Stop;
                break;

            case AppCommands.MediaPlayPause:
                button = RemoteButton.Pause;
                break;

            case AppCommands.Print:
                button = RemoteButton.Print;
                break;

            case AppCommands.MediaPlay:
                button = RemoteButton.Play;
                break;

            case AppCommands.MediaPause:
                button = RemoteButton.Pause;
                break;

            case AppCommands.MediaRecord:
                button = RemoteButton.Record;
                break;

            case AppCommands.MediaFastForward:
                button = RemoteButton.Forward;
                break;

            case AppCommands.MediaRewind:
                button = RemoteButton.Rewind;
                break;

            case AppCommands.MediaChannelUp:
                button = RemoteButton.ChannelUp;
                break;

            case AppCommands.MediaChannelDown:
                button = RemoteButton.ChannelDown;
                break;
            }

            if (button != RemoteButton.None)
            {
                if (_inputHandler == null)
                {
                    InitInputHandler();
                }
                if (_inputHandler == null || !_inputHandler.IsLoaded)
                {
                    return(null);
                }

                result = _inputHandler.GetMapping(((int)button).ToString());

                // Get the mapping
                if (result != null)
                {
                    if (logVerbose)
                    {
                        Log.Info("MCE: Command \"{0}\" mapped from AppCommands {1}", button, command);
                    }
                }
                else if (logVerbose)
                {
                    Log.Info("MCE: Command \"{0}\" not mapped from AppCommands {1}", button, command);
                }
            }
            return(result);
        }
Пример #12
0
        public void Execute(RemoteButton btn)
        {
            switch (btn)
            {
            case RemoteButton.Close:
                PressClose();
                break;

            case RemoteButton.Play:
                PressPlay();
                break;

            case RemoteButton.VolumeDown:
                PressVolumeDown();
                break;

            case RemoteButton.VolumeUp:
                PressVolumeUp();
                break;

            case RemoteButton.OFF:
                ShutDown();
                break;

            case RemoteButton.Audio:
                PressAudio();
                break;

            case RemoteButton.Subtitle:
                PressSubtitle();
                break;

            case RemoteButton.Backward:
                PressBackward();
                break;

            case RemoteButton.Forward:
                PressForward();
                break;

            case RemoteButton.Three:
                PressThree();
                break;

            case RemoteButton.Five:
                PressFive();
                break;

            case RemoteButton.Seven:
                PressSeven();
                break;

            case RemoteButton.Zoom:
                PressZoom();
                break;

            case RemoteButton.Left:
                PressLeft();
                break;

            case RemoteButton.Right:
                PressRight();
                break;

            case RemoteButton.Up:
                PressUp();
                break;

            case RemoteButton.Down:
                PressDown();
                break;
            }
        }
Пример #13
0
 public MappedKeyCode(RemoteButton button, string keyCode)
 {
     _button  = button;
     _keyCode = keyCode;
 }
Пример #14
0
    private void OnReadComplete(IAsyncResult asyncResult)
    {
      try
      {

        if (_deviceStream.EndRead(asyncResult) == VAL_END_READ && _deviceBuffer[1] == 1)
        {
          if (_deviceBuffer[DEV_BUF_INDEX] == (int) _doubleClickButton &&
              Environment.TickCount - _doubleClickTick <= _doubleClickTime)
          {
            if (DoubleClick != null)
            {
              DoubleClick(this, new RemoteEventArgs(_doubleClickButton));
            }
          }
          else
          {
            _doubleClickButton = (RemoteButton) _deviceBuffer[DEV_BUF_INDEX];
            _doubleClickTick = Environment.TickCount;

            if (Click != null)
            {
              Click(this, new RemoteEventArgs(_doubleClickButton));
            }
          }
        }
        // begin another asynchronous read from the device
        _deviceStream.BeginRead(_deviceBuffer, 0, _deviceBuffer.Length, new AsyncCallback(OnReadComplete), null);
      }
      catch (Exception)
      {
      }
    }
Пример #15
0
 public MappedKeyCode(RemoteButton button, string keyCode)
 {
   _button = button;
   _keyCode = keyCode;
 }
Пример #16
0
 public RemoteEventArgs(RemoteButton button)
 {
     _button = button;
 }
Пример #17
0
 private void TestButton(ref RemoteState input, RemoteButton button, string name)
 {
     transform.Find(name).GetComponent <Renderer>().material.color = input.IsPressed(button) ? Color.red : Color.white;
 }