diff -r 72885c950813 -r cdc5f8f1b79e HidHandler.cs --- a/HidHandler.cs Sun Mar 15 16:56:31 2015 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -// -// Copyright (C) 2014-2015 Stéphane Lenclud. -// -// This file is part of SharpLibHid. -// -// SharpDisplayManager is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// SharpDisplayManager is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with SharpDisplayManager. If not, see . -// - - -using System; -using System.Windows.Forms; -using System.Runtime.InteropServices; -using System.Diagnostics; -using System.Text; -using Microsoft.Win32.SafeHandles; -using SharpLib.Win32; -using System.Collections.Generic; - - -namespace SharpLib.Hid -{ - /// - /// Our HID handler manages raw input registrations, processes WM_INPUT messages and broadcasts HID events in return. - /// - public class HidHandler - { - public delegate void HidEventHandler(object aSender, HidEvent aHidEvent); - public event HidEventHandler OnHidEvent; - List iHidEvents; - - - public bool IsRegistered { get; private set; } - - public HidHandler(RAWINPUTDEVICE[] aRawInputDevices) - { - iHidEvents=new List(); - IsRegistered = Function.RegisterRawInputDevices(aRawInputDevices, (uint)aRawInputDevices.Length, (uint)Marshal.SizeOf(aRawInputDevices[0])); - } - - /// - /// Process a WM_INPUT message. - /// - /// - public void ProcessInput(ref Message aMessage) - { - if (aMessage.Msg != Const.WM_INPUT) - { - //We only process WM_INPUT messages - return; - } - - HidEvent hidEvent = new HidEvent(aMessage, OnHidEventRepeat); - hidEvent.DebugWrite(); - - if (!hidEvent.IsValid || !hidEvent.IsGeneric) - { - Debug.WriteLine("Skipping HID message."); - return; - } - - // - if (hidEvent.IsButtonUp) - { - //This is a key up event - //We need to discard any events belonging to the same page and collection - for (int i = (iHidEvents.Count-1); i >= 0; i--) - { - if (iHidEvents[i].UsageId == hidEvent.UsageId) - { - iHidEvents[i].Dispose(); - iHidEvents.RemoveAt(i); - } - } - } - else - { - //Keep that event until we get a key up message - iHidEvents.Add(hidEvent); - } - - //Broadcast our events - OnHidEvent(this, hidEvent); - } - - public void OnHidEventRepeat(HidEvent aHidEvent) - { - //Broadcast our events - OnHidEvent(this, aHidEvent); - } - - } - -} \ No newline at end of file