Removing legacy remote control stuff.
1.1 --- a/HidDemo.csproj Sun Mar 15 14:45:40 2015 +0100
1.2 +++ b/HidDemo.csproj Sun Mar 15 16:56:31 2015 +0100
1.3 @@ -130,9 +130,6 @@
1.4 <Compile Include="MainForm.Designer.cs">
1.5 <DependentUpon>MainForm.cs</DependentUpon>
1.6 </Compile>
1.7 - <Compile Include="RemoteControlDevice.cs">
1.8 - <SubType>Code</SubType>
1.9 - </Compile>
1.10 <Content Include="App.ico" />
1.11 </ItemGroup>
1.12 <ItemGroup>
2.1 --- a/HidHandler.cs Sun Mar 15 14:45:40 2015 +0100
2.2 +++ b/HidHandler.cs Sun Mar 15 16:56:31 2015 +0100
2.3 @@ -48,8 +48,18 @@
2.4 IsRegistered = Function.RegisterRawInputDevices(aRawInputDevices, (uint)aRawInputDevices.Length, (uint)Marshal.SizeOf(aRawInputDevices[0]));
2.5 }
2.6
2.7 - public void ProcessInput(Message aMessage)
2.8 + /// <summary>
2.9 + /// Process a WM_INPUT message.
2.10 + /// </summary>
2.11 + /// <param name="aMessage"></param>
2.12 + public void ProcessInput(ref Message aMessage)
2.13 {
2.14 + if (aMessage.Msg != Const.WM_INPUT)
2.15 + {
2.16 + //We only process WM_INPUT messages
2.17 + return;
2.18 + }
2.19 +
2.20 HidEvent hidEvent = new HidEvent(aMessage, OnHidEventRepeat);
2.21 hidEvent.DebugWrite();
2.22
3.1 --- a/MainForm.Designer.cs Sun Mar 15 14:45:40 2015 +0100
3.2 +++ b/MainForm.Designer.cs Sun Mar 15 16:56:31 2015 +0100
3.3 @@ -21,7 +21,7 @@
3.4 using System.Collections.Generic;
3.5 using System.Text;
3.6
3.7 -namespace RemoteControlSample
3.8 +namespace HidDemo
3.9 {
3.10 public partial class MainForm
3.11 {
3.12 @@ -32,8 +32,6 @@
3.13 /// </summary>
3.14 private void InitializeComponent()
3.15 {
3.16 - this.labelButtonName = new System.Windows.Forms.Label();
3.17 - this.labelDeviceName = new System.Windows.Forms.Label();
3.18 this.buttonClear = new System.Windows.Forms.Button();
3.19 this.tabControl = new System.Windows.Forms.TabControl();
3.20 this.tabPageMessages = new System.Windows.Forms.TabPage();
3.21 @@ -60,26 +58,6 @@
3.22 this.statusStrip.SuspendLayout();
3.23 this.SuspendLayout();
3.24 //
3.25 - // labelButtonName
3.26 - //
3.27 - this.labelButtonName.AutoSize = true;
3.28 - this.labelButtonName.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
3.29 - this.labelButtonName.Location = new System.Drawing.Point(785, 53);
3.30 - this.labelButtonName.Name = "labelButtonName";
3.31 - this.labelButtonName.Size = new System.Drawing.Size(103, 20);
3.32 - this.labelButtonName.TabIndex = 0;
3.33 - this.labelButtonName.Text = "Button Name";
3.34 - //
3.35 - // labelDeviceName
3.36 - //
3.37 - this.labelDeviceName.AutoSize = true;
3.38 - this.labelDeviceName.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
3.39 - this.labelDeviceName.Location = new System.Drawing.Point(785, 33);
3.40 - this.labelDeviceName.Name = "labelDeviceName";
3.41 - this.labelDeviceName.Size = new System.Drawing.Size(103, 20);
3.42 - this.labelDeviceName.TabIndex = 1;
3.43 - this.labelDeviceName.Text = "Device Name";
3.44 - //
3.45 // buttonClear
3.46 //
3.47 this.buttonClear.Location = new System.Drawing.Point(813, 6);
3.48 @@ -107,8 +85,6 @@
3.49 //
3.50 this.tabPageMessages.Controls.Add(this.listViewEvents);
3.51 this.tabPageMessages.Controls.Add(this.buttonClear);
3.52 - this.tabPageMessages.Controls.Add(this.labelDeviceName);
3.53 - this.tabPageMessages.Controls.Add(this.labelButtonName);
3.54 this.tabPageMessages.Location = new System.Drawing.Point(4, 22);
3.55 this.tabPageMessages.Name = "tabPageMessages";
3.56 this.tabPageMessages.Padding = new System.Windows.Forms.Padding(3);
3.57 @@ -267,7 +243,6 @@
3.58 this.Load += new System.EventHandler(this.MainForm_Load);
3.59 this.tabControl.ResumeLayout(false);
3.60 this.tabPageMessages.ResumeLayout(false);
3.61 - this.tabPageMessages.PerformLayout();
3.62 this.tabPageDevices.ResumeLayout(false);
3.63 this.tabPageTests.ResumeLayout(false);
3.64 this.tabPageTests.PerformLayout();
3.65 @@ -279,6 +254,18 @@
3.66 }
3.67 #endregion Windows Form Designer generated code
3.68
3.69 + private System.Windows.Forms.Button buttonClear;
3.70 + private System.Windows.Forms.TabControl tabControl;
3.71 + private System.Windows.Forms.TabPage tabPageMessages;
3.72 + private System.Windows.Forms.ListView listViewEvents;
3.73 + private System.Windows.Forms.ColumnHeader columnHeaderUsages;
3.74 + private System.Windows.Forms.ColumnHeader columnHeaderInputReport;
3.75 + private System.Windows.Forms.ColumnHeader columnHeaderUsagePage;
3.76 + private System.Windows.Forms.ColumnHeader columnHeaderUsageCollection;
3.77 + private System.Windows.Forms.ColumnHeader columnHeaderRepeat;
3.78 + private System.Windows.Forms.ColumnHeader columnHeaderTime;
3.79 + private System.Windows.Forms.TabPage tabPageDevices;
3.80 + private System.Windows.Forms.TreeView treeViewDevices;
3.81 private System.Windows.Forms.Button buttonTreeViewExpandAll;
3.82 private System.Windows.Forms.Button buttonTreeViewCollapseAll;
3.83 private System.Windows.Forms.StatusStrip statusStrip;
4.1 --- a/MainForm.cs Sun Mar 15 14:45:40 2015 +0100
4.2 +++ b/MainForm.cs Sun Mar 15 16:56:31 2015 +0100
4.3 @@ -23,64 +23,26 @@
4.4 using System.ComponentModel;
4.5 using System.Windows.Forms;
4.6 using System.Data;
4.7 -using Devices.RemoteControl;
4.8 +using System.Diagnostics;
4.9 +using System.Runtime.InteropServices;
4.10 +using SharpLib.Hid;
4.11 +using SharpLib.Win32;
4.12
4.13 -namespace RemoteControlSample
4.14 +namespace HidDemo
4.15 {
4.16 /// <summary>
4.17 /// Summary description for Form1.
4.18 /// </summary>
4.19 public partial class MainForm : System.Windows.Forms.Form
4.20 {
4.21 - /// <summary>
4.22 - /// Required designer variable.
4.23 - /// </summary>
4.24 - private System.ComponentModel.Container components = null;
4.25 - private RemoteControlDevice _remote;
4.26 - private Label labelButtonName;
4.27 - private Label labelDeviceName;
4.28 - private Button buttonClear;
4.29 - private TabControl tabControl;
4.30 - private TabPage tabPageMessages;
4.31 - private ListView listViewEvents;
4.32 - private ColumnHeader columnHeaderUsages;
4.33 - private ColumnHeader columnHeaderInputReport;
4.34 - private ColumnHeader columnHeaderUsagePage;
4.35 - private ColumnHeader columnHeaderUsageCollection;
4.36 - private ColumnHeader columnHeaderRepeat;
4.37 - private ColumnHeader columnHeaderTime;
4.38 - private TabPage tabPageDevices;
4.39 - private TreeView treeViewDevices;
4.40 - private Timer _timer;
4.41 + private HidHandler iHidHandler;
4.42
4.43 public delegate void OnHidEventDelegate(object aSender, SharpLib.Hid.HidEvent aHidEvent);
4.44
4.45 public MainForm()
4.46 {
4.47 - //
4.48 // Required for Windows Form Designer support
4.49 - //
4.50 - InitializeComponent();
4.51 -
4.52 - _timer = new Timer();
4.53 - _timer.Interval = 3000;
4.54 - _timer.Enabled = false;
4.55 - _timer.Tick +=new EventHandler(_timer_Tick);
4.56 - }
4.57 -
4.58 - /// <summary>
4.59 - /// Clean up any resources being used.
4.60 - /// </summary>
4.61 - protected override void Dispose( bool disposing )
4.62 - {
4.63 - if( disposing )
4.64 - {
4.65 - if (components != null)
4.66 - {
4.67 - components.Dispose();
4.68 - }
4.69 - }
4.70 - base.Dispose( disposing );
4.71 + InitializeComponent();
4.72 }
4.73
4.74
4.75 @@ -95,15 +57,70 @@
4.76 }
4.77
4.78 private void MainForm_Load(object sender, System.EventArgs e)
4.79 - {
4.80 - _remote = new RemoteControlDevice(this.Handle);
4.81 - _remote.ButtonPressed += new Devices.RemoteControl.RemoteControlDevice.RemoteControlDeviceEventHandler(_remote_ButtonPressed);
4.82 - _remote.iHidHandler.OnHidEvent += HandleHidEventThreadSafe;
4.83 -
4.84 - //
4.85 + {
4.86 + RegisterHidDevices();
4.87 + //Create our list of HID devices
4.88 SharpLib.Win32.RawInput.PopulateDeviceList(treeViewDevices);
4.89 + }
4.90
4.91 - }
4.92 + void RegisterHidDevices()
4.93 + {
4.94 + // Register the input device to receive the commands from the
4.95 + // remote device. See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwmt/html/remote_control.asp
4.96 + // for the vendor defined usage page.
4.97 +
4.98 + RAWINPUTDEVICE[] rid = new RAWINPUTDEVICE[6];
4.99 +
4.100 + int i = 0;
4.101 + rid[i].usUsagePage = (ushort)SharpLib.Hid.UsagePage.WindowsMediaCenterRemoteControl;
4.102 + rid[i].usUsage = (ushort)SharpLib.Hid.UsageCollection.WindowsMediaCenter.WindowsMediaCenterRemoteControl;
4.103 + rid[i].dwFlags = Const.RIDEV_EXINPUTSINK;
4.104 + rid[i].hwndTarget = Handle;
4.105 +
4.106 + i++;
4.107 + rid[i].usUsagePage = (ushort)SharpLib.Hid.UsagePage.Consumer;
4.108 + rid[i].usUsage = (ushort)SharpLib.Hid.UsageCollection.Consumer.ConsumerControl;
4.109 + rid[i].dwFlags = Const.RIDEV_EXINPUTSINK;
4.110 + rid[i].hwndTarget = Handle;
4.111 +
4.112 + i++;
4.113 + rid[i].usUsagePage = (ushort)SharpLib.Hid.UsagePage.Consumer;
4.114 + rid[i].usUsage = (ushort)SharpLib.Hid.UsageCollection.Consumer.Selection;
4.115 + rid[i].dwFlags = Const.RIDEV_EXINPUTSINK;
4.116 + rid[i].hwndTarget = Handle;
4.117 +
4.118 + i++;
4.119 + rid[i].usUsagePage = (ushort)SharpLib.Hid.UsagePage.GenericDesktopControls;
4.120 + rid[i].usUsage = (ushort)SharpLib.Hid.UsageCollection.GenericDesktop.SystemControl;
4.121 + rid[i].dwFlags = Const.RIDEV_EXINPUTSINK;
4.122 + rid[i].hwndTarget = Handle;
4.123 +
4.124 + i++;
4.125 + rid[i].usUsagePage = (ushort)SharpLib.Hid.UsagePage.GenericDesktopControls;
4.126 + rid[i].usUsage = (ushort)SharpLib.Hid.UsageCollection.GenericDesktop.GamePad;
4.127 + rid[i].dwFlags = Const.RIDEV_EXINPUTSINK;
4.128 + rid[i].hwndTarget = Handle;
4.129 +
4.130 + i++;
4.131 + rid[i].usUsagePage = (ushort)SharpLib.Hid.UsagePage.GenericDesktopControls;
4.132 + rid[i].usUsage = (ushort)SharpLib.Hid.UsageCollection.GenericDesktop.Keyboard;
4.133 + //rid[i].dwFlags = Const.RIDEV_EXINPUTSINK;
4.134 + rid[i].hwndTarget = Handle;
4.135 +
4.136 + //i++;
4.137 + //rid[i].usUsagePage = (ushort)Hid.UsagePage.GenericDesktopControls;
4.138 + //rid[i].usUsage = (ushort)Hid.UsageCollection.GenericDesktop.Mouse;
4.139 + //rid[i].dwFlags = Const.RIDEV_EXINPUTSINK;
4.140 + //rid[i].hwndTarget = aHWND;
4.141 +
4.142 +
4.143 + iHidHandler = new SharpLib.Hid.HidHandler(rid);
4.144 + if (!iHidHandler.IsRegistered)
4.145 + {
4.146 + Debug.WriteLine("Failed to register raw input devices: " + Marshal.GetLastWin32Error().ToString());
4.147 + }
4.148 + iHidHandler.OnHidEvent += HandleHidEventThreadSafe;
4.149 + }
4.150
4.151 public void HandleHidEventThreadSafe(object aSender, SharpLib.Hid.HidEvent aHidEvent)
4.152 {
4.153 @@ -129,58 +146,21 @@
4.154
4.155 protected override void WndProc(ref Message message)
4.156 {
4.157 - if (_remote != null)
4.158 + switch (message.Msg)
4.159 {
4.160 - _remote.ProcessMessage(message);
4.161 + case Const.WM_KEYDOWN:
4.162 + //ProcessKeyDown(message.WParam);
4.163 + break;
4.164 + case Const.WM_INPUT:
4.165 + //Returning zero means we processed that message.
4.166 + message.Result = new IntPtr(0);
4.167 + iHidHandler.ProcessInput(ref message);
4.168 + break;
4.169 }
4.170 + //Is that needed? Check the docs.
4.171 base.WndProc(ref message);
4.172 }
4.173
4.174 - private bool _remote_ButtonPressed(object sender, RemoteControlEventArgs e)
4.175 - {
4.176 - //Set text from here was disabled because of threading issues
4.177 - //That whole thing should be removed anyway
4.178 - bool processed = false;
4.179 - _timer.Enabled = false;
4.180 - if (e.Button != RemoteControlButton.Unknown)
4.181 - {
4.182 - //labelButtonName.Text = e.Button.ToString();
4.183 - processed = true;
4.184 - }
4.185 - else if (e.MceButton != SharpLib.Hid.Usage.WindowsMediaCenterRemoteControl.Null)
4.186 - {
4.187 - //Display MCE button name
4.188 - //labelButtonName.Text = e.MceButton.ToString();
4.189 - //Check if this is an HP extension
4.190 - if (Enum.IsDefined(typeof(SharpLib.Hid.Usage.HpWindowsMediaCenterRemoteControl), (ushort)e.MceButton))
4.191 - {
4.192 - //Also display HP button name
4.193 - //labelButtonName.Text += " / HP:" + ((Hid.UsageTables.HpWindowsMediaCenterRemoteControl)e.MceButton).ToString();
4.194 - }
4.195 -
4.196 - processed = true;
4.197 - }
4.198 - else if (e.ConsumerControl != SharpLib.Hid.Usage.ConsumerControl.Null)
4.199 - {
4.200 - //Display consumer control name
4.201 - //labelButtonName.Text = e.ConsumerControl.ToString();
4.202 - processed = true;
4.203 - }
4.204 - else
4.205 - {
4.206 - //labelButtonName.Text = "Unknown";
4.207 - }
4.208 - //labelDeviceName.Text = e.Device.ToString();
4.209 - _timer.Enabled = true;
4.210 - return processed;
4.211 - }
4.212 -
4.213 - private void _timer_Tick(object sender, EventArgs e)
4.214 - {
4.215 - _timer.Enabled = false;
4.216 - labelButtonName.Text = "Ready...";
4.217 - }
4.218 -
4.219 private void buttonClear_Click(object sender, EventArgs e)
4.220 {
4.221 listViewEvents.Items.Clear();
5.1 --- a/RemoteControlDevice.cs Sun Mar 15 14:45:40 2015 +0100
5.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
5.3 @@ -1,445 +0,0 @@
5.4 -//
5.5 -// Copyright (C) 2014-2015 Stéphane Lenclud.
5.6 -//
5.7 -// This file is part of SharpLibHid.
5.8 -//
5.9 -// SharpDisplayManager is free software: you can redistribute it and/or modify
5.10 -// it under the terms of the GNU General Public License as published by
5.11 -// the Free Software Foundation, either version 3 of the License, or
5.12 -// (at your option) any later version.
5.13 -//
5.14 -// SharpDisplayManager is distributed in the hope that it will be useful,
5.15 -// but WITHOUT ANY WARRANTY; without even the implied warranty of
5.16 -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5.17 -// GNU General Public License for more details.
5.18 -//
5.19 -// You should have received a copy of the GNU General Public License
5.20 -// along with SharpDisplayManager. If not, see <http://www.gnu.org/licenses/>.
5.21 -//
5.22 -
5.23 -using System;
5.24 -using System.Windows.Forms;
5.25 -using System.Runtime.InteropServices;
5.26 -using System.Diagnostics;
5.27 -using System.Text;
5.28 -using Microsoft.Win32.SafeHandles;
5.29 -
5.30 -using SharpLib.Hid.Usage;
5.31 -using SharpLib.Win32;
5.32 -
5.33 -
5.34 -
5.35 -namespace Devices.RemoteControl
5.36 -{
5.37 -
5.38 - public enum InputDevice
5.39 - {
5.40 - Key,
5.41 - Mouse,
5.42 - OEM
5.43 - }
5.44 -
5.45 -
5.46 - public enum RemoteControlButton
5.47 - {
5.48 - Clear,
5.49 - Down,
5.50 - Left,
5.51 - Digit0,
5.52 - Digit1,
5.53 - Digit2,
5.54 - Digit3,
5.55 - Digit4,
5.56 - Digit5,
5.57 - Digit6,
5.58 - Digit7,
5.59 - Digit8,
5.60 - Digit9,
5.61 - Enter,
5.62 - Right,
5.63 - Up,
5.64 -
5.65 - Back,
5.66 - ChannelDown,
5.67 - ChannelUp,
5.68 - FastForward,
5.69 - VolumeMute,
5.70 - Pause,
5.71 - Play,
5.72 - PlayPause,
5.73 - Record,
5.74 - PreviousTrack,
5.75 - Rewind,
5.76 - NextTrack,
5.77 - Stop,
5.78 - VolumeDown,
5.79 - VolumeUp,
5.80 -
5.81 - RecordedTV,
5.82 - Guide,
5.83 - LiveTV,
5.84 - MoreInfo,
5.85 - Print,
5.86 - DVDMenu,
5.87 - DVDAngle,
5.88 - DVDAudio,
5.89 - DVDSubtitle,
5.90 - MyMusic,
5.91 - MyPictures,
5.92 - MyVideos,
5.93 - MyTV,
5.94 - OEM1,
5.95 - OEM2,
5.96 - StandBy,
5.97 - TVJump,
5.98 -
5.99 - Unknown
5.100 - }
5.101 -
5.102 -
5.103 - #region RemoteControlEventArgs
5.104 -
5.105 - public class RemoteControlEventArgs : EventArgs
5.106 - {
5.107 - RemoteControlButton _rcb;
5.108 - InputDevice _device;
5.109 - WindowsMediaCenterRemoteControl iMceButton;
5.110 - ConsumerControl iConsumerControl;
5.111 -
5.112 - public RemoteControlEventArgs(RemoteControlButton rcb, InputDevice device)
5.113 - {
5.114 - SetNullButtons();
5.115 - //
5.116 - _rcb = rcb;
5.117 - _device = device;
5.118 - }
5.119 -
5.120 - public RemoteControlEventArgs(ConsumerControl aConsumerControl, InputDevice device)
5.121 - {
5.122 - SetNullButtons();
5.123 - //
5.124 - iConsumerControl = aConsumerControl;
5.125 - _device = device;
5.126 - }
5.127 -
5.128 -
5.129 - public RemoteControlEventArgs(WindowsMediaCenterRemoteControl mce, InputDevice device)
5.130 - {
5.131 - SetNullButtons();
5.132 - //
5.133 - iMceButton = mce;
5.134 - _device = device;
5.135 - }
5.136 -
5.137 - private void SetNullButtons()
5.138 - {
5.139 - iConsumerControl = ConsumerControl.Null;
5.140 - iMceButton = WindowsMediaCenterRemoteControl.Null;
5.141 - _rcb = RemoteControlButton.Unknown;
5.142 - }
5.143 -
5.144 - public RemoteControlEventArgs()
5.145 - {
5.146 - iMceButton = WindowsMediaCenterRemoteControl.Null;
5.147 - _rcb = RemoteControlButton.Unknown;
5.148 - _device = InputDevice.Key;
5.149 - }
5.150 -
5.151 - public RemoteControlButton Button
5.152 - {
5.153 - get { return _rcb; }
5.154 - set { _rcb = value; }
5.155 - }
5.156 -
5.157 - public WindowsMediaCenterRemoteControl MceButton
5.158 - {
5.159 - get { return iMceButton; }
5.160 - set { iMceButton = value; }
5.161 - }
5.162 -
5.163 - public ConsumerControl ConsumerControl
5.164 - {
5.165 - get { return iConsumerControl; }
5.166 - set { iConsumerControl = value; }
5.167 - }
5.168 -
5.169 - public InputDevice Device
5.170 - {
5.171 - get { return _device; }
5.172 - set { _device = value; }
5.173 - }
5.174 - }
5.175 -
5.176 - #endregion RemoteControlEventArgs
5.177 -
5.178 -
5.179 - public sealed class RemoteControlDevice
5.180 - {
5.181 - public delegate bool RemoteControlDeviceEventHandler(object sender, RemoteControlEventArgs e);
5.182 - public event RemoteControlDeviceEventHandler ButtonPressed;
5.183 -
5.184 - /// <summary>
5.185 - /// Return true if the usage was processed.
5.186 - /// </summary>
5.187 - /// <param name="aUsage"></param>
5.188 - /// <returns></returns>
5.189 - public delegate bool HidUsageHandler(ushort aUsage);
5.190 -
5.191 - public SharpLib.Hid.HidHandler iHidHandler;
5.192 -
5.193 -
5.194 - //-------------------------------------------------------------
5.195 - // constructors
5.196 - //-------------------------------------------------------------
5.197 -
5.198 - public RemoteControlDevice(IntPtr aHWND)
5.199 - {
5.200 - // Register the input device to receive the commands from the
5.201 - // remote device. See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwmt/html/remote_control.asp
5.202 - // for the vendor defined usage page.
5.203 -
5.204 - RAWINPUTDEVICE[] rid = new RAWINPUTDEVICE[6];
5.205 -
5.206 - int i = 0;
5.207 - rid[i].usUsagePage = (ushort)SharpLib.Hid.UsagePage.WindowsMediaCenterRemoteControl;
5.208 - rid[i].usUsage = (ushort)SharpLib.Hid.UsageCollection.WindowsMediaCenter.WindowsMediaCenterRemoteControl;
5.209 - rid[i].dwFlags = Const.RIDEV_EXINPUTSINK;
5.210 - rid[i].hwndTarget = aHWND;
5.211 -
5.212 - i++;
5.213 - rid[i].usUsagePage = (ushort)SharpLib.Hid.UsagePage.Consumer;
5.214 - rid[i].usUsage = (ushort)SharpLib.Hid.UsageCollection.Consumer.ConsumerControl;
5.215 - rid[i].dwFlags = Const.RIDEV_EXINPUTSINK;
5.216 - rid[i].hwndTarget = aHWND;
5.217 -
5.218 - i++;
5.219 - rid[i].usUsagePage = (ushort)SharpLib.Hid.UsagePage.Consumer;
5.220 - rid[i].usUsage = (ushort)SharpLib.Hid.UsageCollection.Consumer.Selection;
5.221 - rid[i].dwFlags = Const.RIDEV_EXINPUTSINK;
5.222 - rid[i].hwndTarget = aHWND;
5.223 -
5.224 - i++;
5.225 - rid[i].usUsagePage = (ushort)SharpLib.Hid.UsagePage.GenericDesktopControls;
5.226 - rid[i].usUsage = (ushort)SharpLib.Hid.UsageCollection.GenericDesktop.SystemControl;
5.227 - rid[i].dwFlags = Const.RIDEV_EXINPUTSINK;
5.228 - rid[i].hwndTarget = aHWND;
5.229 -
5.230 - i++;
5.231 - rid[i].usUsagePage = (ushort)SharpLib.Hid.UsagePage.GenericDesktopControls;
5.232 - rid[i].usUsage = (ushort)SharpLib.Hid.UsageCollection.GenericDesktop.GamePad;
5.233 - rid[i].dwFlags = Const.RIDEV_EXINPUTSINK;
5.234 - rid[i].hwndTarget = aHWND;
5.235 -
5.236 - i++;
5.237 - rid[i].usUsagePage = (ushort)SharpLib.Hid.UsagePage.GenericDesktopControls;
5.238 - rid[i].usUsage = (ushort)SharpLib.Hid.UsageCollection.GenericDesktop.Keyboard;
5.239 - //rid[i].dwFlags = Const.RIDEV_EXINPUTSINK;
5.240 - rid[i].hwndTarget = aHWND;
5.241 -
5.242 - //i++;
5.243 - //rid[i].usUsagePage = (ushort)Hid.UsagePage.GenericDesktopControls;
5.244 - //rid[i].usUsage = (ushort)Hid.UsageCollection.GenericDesktop.Mouse;
5.245 - //rid[i].dwFlags = Const.RIDEV_EXINPUTSINK;
5.246 - //rid[i].hwndTarget = aHWND;
5.247 -
5.248 -
5.249 - iHidHandler = new SharpLib.Hid.HidHandler(rid);
5.250 - if (!iHidHandler.IsRegistered)
5.251 - {
5.252 - Debug.WriteLine("Failed to register raw input devices: " + Marshal.GetLastWin32Error().ToString());
5.253 - }
5.254 - iHidHandler.OnHidEvent += HandleHidEvent;
5.255 - }
5.256 -
5.257 -
5.258 - //-------------------------------------------------------------
5.259 - // methods
5.260 - //-------------------------------------------------------------
5.261 -
5.262 - public void ProcessMessage(Message message)
5.263 - {
5.264 - switch (message.Msg)
5.265 - {
5.266 - case Const.WM_KEYDOWN:
5.267 - ProcessKeyDown(message.WParam);
5.268 - break;
5.269 - case Const.WM_INPUT:
5.270 - //Returning zero means we processed that message.
5.271 - message.Result = new IntPtr(0);
5.272 - ProcessInputCommand(ref message);
5.273 - break;
5.274 - }
5.275 -
5.276 - }
5.277 -
5.278 -
5.279 - //-------------------------------------------------------------
5.280 - // methods (helpers)
5.281 - //-------------------------------------------------------------
5.282 -
5.283 - private void ProcessKeyDown(IntPtr wParam)
5.284 - {
5.285 - RemoteControlButton rcb = RemoteControlButton.Unknown;
5.286 -
5.287 - switch (wParam.ToInt32())
5.288 - {
5.289 - case (int)Keys.Escape:
5.290 - rcb = RemoteControlButton.Clear;
5.291 - break;
5.292 - case (int)Keys.Up:
5.293 - rcb = RemoteControlButton.Up;
5.294 - break;
5.295 - case (int)Keys.Down:
5.296 - rcb = RemoteControlButton.Down;
5.297 - break;
5.298 - case (int)Keys.Left:
5.299 - rcb = RemoteControlButton.Left;
5.300 - break;
5.301 - case (int)Keys.Right:
5.302 - rcb = RemoteControlButton.Right;
5.303 - break;
5.304 - case (int)Keys.Enter:
5.305 - rcb = RemoteControlButton.Enter;
5.306 - break;
5.307 - case (int)Keys.D0:
5.308 - rcb = RemoteControlButton.Digit0;
5.309 - break;
5.310 - case (int)Keys.D1:
5.311 - rcb = RemoteControlButton.Digit1;
5.312 - break;
5.313 - case (int)Keys.D2:
5.314 - rcb = RemoteControlButton.Digit2;
5.315 - break;
5.316 - case (int)Keys.D3:
5.317 - rcb = RemoteControlButton.Digit3;
5.318 - break;
5.319 - case (int)Keys.D4:
5.320 - rcb = RemoteControlButton.Digit4;
5.321 - break;
5.322 - case (int)Keys.D5:
5.323 - rcb = RemoteControlButton.Digit5;
5.324 - break;
5.325 - case (int)Keys.D6:
5.326 - rcb = RemoteControlButton.Digit6;
5.327 - break;
5.328 - case (int)Keys.D7:
5.329 - rcb = RemoteControlButton.Digit7;
5.330 - break;
5.331 - case (int)Keys.D8:
5.332 - rcb = RemoteControlButton.Digit8;
5.333 - break;
5.334 - case (int)Keys.D9:
5.335 - rcb = RemoteControlButton.Digit9;
5.336 - break;
5.337 - }
5.338 -
5.339 - if (this.ButtonPressed != null && rcb != RemoteControlButton.Unknown)
5.340 - {
5.341 - Debug.WriteLine("KeyDown: " + rcb.ToString());
5.342 - this.ButtonPressed(this, new RemoteControlEventArgs(rcb, InputDevice.Key));
5.343 - }
5.344 - }
5.345 -
5.346 -
5.347 - /// <summary>
5.348 - ///
5.349 - /// </summary>
5.350 - /// <param name="aUsage"></param>
5.351 - private bool HidConsumerDeviceHandler(ushort aUsage)
5.352 - {
5.353 - if (aUsage == 0)
5.354 - {
5.355 - //Just skip those
5.356 - return false;
5.357 - }
5.358 -
5.359 - if (Enum.IsDefined(typeof(ConsumerControl), aUsage) && aUsage != 0) //Our button is a known consumer control
5.360 - {
5.361 - if (this.ButtonPressed != null)
5.362 - {
5.363 - return this.ButtonPressed(this, new RemoteControlEventArgs((ConsumerControl)aUsage, InputDevice.OEM));
5.364 - }
5.365 - return false;
5.366 - }
5.367 - else
5.368 - {
5.369 - Debug.WriteLine("Unknown Consumer Control!");
5.370 - return false;
5.371 - }
5.372 - }
5.373 -
5.374 - /// <summary>
5.375 - ///
5.376 - /// </summary>
5.377 - /// <param name="aUsage"></param>
5.378 - private bool HidMceRemoteHandler(ushort aUsage)
5.379 - {
5.380 - if (aUsage == 0)
5.381 - {
5.382 - //Just skip those
5.383 - return false;
5.384 - }
5.385 -
5.386 -
5.387 - if (Enum.IsDefined(typeof(WindowsMediaCenterRemoteControl), aUsage) && aUsage != 0) //Our button is a known MCE button
5.388 - {
5.389 - if (this.ButtonPressed != null)
5.390 - {
5.391 - return this.ButtonPressed(this, new RemoteControlEventArgs((WindowsMediaCenterRemoteControl)aUsage, InputDevice.OEM));
5.392 - }
5.393 - return false;
5.394 - }
5.395 - else
5.396 - {
5.397 - Debug.WriteLine("Unknown MCE button!");
5.398 - return false;
5.399 - }
5.400 - }
5.401 -
5.402 - /// <summary>
5.403 - ///
5.404 - /// </summary>
5.405 - /// <param name="message"></param>
5.406 - private void ProcessInputCommand(ref Message message)
5.407 - {
5.408 - //We received a WM_INPUT message
5.409 - Debug.WriteLine("================WM_INPUT================");
5.410 -
5.411 - iHidHandler.ProcessInput(message);
5.412 -
5.413 - }
5.414 -
5.415 - /// <summary>
5.416 - ///
5.417 - /// </summary>
5.418 - /// <param name="aSender"></param>
5.419 - /// <param name="aHidEvent"></param>
5.420 - void HandleHidEvent(object aSender, SharpLib.Hid.HidEvent aHidEvent)
5.421 - {
5.422 - HidUsageHandler usagePageHandler = null;
5.423 -
5.424 - //Check if this an MCE remote HID message
5.425 - if (aHidEvent.UsagePage == (ushort)SharpLib.Hid.UsagePage.WindowsMediaCenterRemoteControl && aHidEvent.UsageCollection == (ushort)SharpLib.Hid.UsageCollection.WindowsMediaCenter.WindowsMediaCenterRemoteControl)
5.426 - {
5.427 - usagePageHandler = HidMceRemoteHandler;
5.428 - }
5.429 - //Check if this is a consumer control HID message
5.430 - else if (aHidEvent.UsagePage == (ushort)SharpLib.Hid.UsagePage.Consumer && aHidEvent.UsageCollection == (ushort)SharpLib.Hid.UsageCollection.Consumer.ConsumerControl)
5.431 - {
5.432 - usagePageHandler = HidConsumerDeviceHandler;
5.433 - }
5.434 - //Unknown HID message
5.435 - else
5.436 - {
5.437 - Debug.WriteLine("Unknown HID message.");
5.438 - return;
5.439 - }
5.440 -
5.441 - foreach (ushort usage in aHidEvent.Usages)
5.442 - {
5.443 - usagePageHandler(usage);
5.444 - }
5.445 - }
5.446 - }
5.447 -}
5.448 -