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)); } }
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) { } }
/// <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); }
/// <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); }
/// <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); }
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); }
/// <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); }
/// <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); } }
/// <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; }
public RemoteEventArgs(RemoteButton button) { _button = button; }
/// <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); }
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; } }
public MappedKeyCode(RemoteButton button, string keyCode) { _button = button; _keyCode = keyCode; }
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) { } }
public MappedKeyCode(RemoteButton button, string keyCode) { _button = button; _keyCode = keyCode; }
public RemoteEventArgs(RemoteButton button) { _button = button; }
private void TestButton(ref RemoteState input, RemoteButton button, string name) { transform.Find(name).GetComponent <Renderer>().material.color = input.IsPressed(button) ? Color.red : Color.white; }