Generic HID event with key recognition functional.
2 using System.Collections.Generic;
4 using System.Reflection;
6 using System.Threading.Tasks;
7 using System.Runtime.Serialization;
8 using System.Windows.Forms;
9 using Ear = SharpLib.Ear;
10 using Hid = SharpLib.Hid;
12 namespace SharpDisplayManager
15 [Ear.AttributeObject(Id = "Event.Hid", Name = "HID", Description = "Corresponding HID message received.")]
16 public class EventHid: Ear.Event
23 public ushort UsagePage { get; set; }
26 public ushort UsageCollection { get; set; }
29 public ushort Usage { get; set; }
32 public Keys Key { get; set; }
35 [Ear.AttributeObjectProperty
37 Id = "HID.Keyboard.IsKeyUp",
39 Description = "Key up if set, key down otherwise."
41 public bool IsKeyUp { get; set; } = false;
44 public bool IsMouse { get; set; } = false;
47 public bool IsKeyboard { get; set; } = false;
50 public bool IsGeneric { get; set; } = false;
53 public bool HasModifierShift { get; set; } = false;
56 public bool HasModifierControl { get; set; } = false;
59 public bool HasModifierAlt { get; set; } = false;
62 public bool HasModifierWindows { get; set; } = false;
65 public string PersistedBrief { get; set; } = "Press a key";
69 protected override void DoConstruct()
72 UpdateDynamicProperties();
75 private void UpdateDynamicProperties()
81 /// Make sure we distinguish between various configuration of this event
83 /// <returns></returns>
84 public override string Brief()
86 string brief = Name + ": ";
90 brief += Key.ToString();
97 if (HasModifierControl)
102 if (HasModifierShift)
107 if (HasModifierWindows)
114 brief += PersistedBrief;
132 /// <param name="obj"></param>
133 /// <returns></returns>
134 public override bool Equals(object obj)
136 if (obj is EventHidKeyboard)
138 EventHidKeyboard e = (EventHidKeyboard)obj;
140 && e.IsKeyUp == IsKeyUp
141 && e.HasModifierAlt == HasModifierAlt
142 && e.HasModifierControl == HasModifierControl
143 && e.HasModifierShift == HasModifierShift
144 && e.HasModifierWindows == HasModifierWindows;
154 protected override void OnStateLeave()
156 if (CurrentState == State.Edit)
160 Program.HidHandler.OnHidEvent -= HandleHidEvent;
168 protected override void OnStateEnter()
170 if (CurrentState == State.Edit)
173 // Hook-in HID events
174 Program.HidHandler.OnHidEvent += HandleHidEvent;
180 /// Here we receive HID events from our HID library.
182 /// <param name="aSender"></param>
183 /// <param name="aHidEvent"></param>
184 public void HandleHidEvent(object aSender, SharpLib.Hid.Event aHidEvent)
186 if (CurrentState != State.Edit
188 || aHidEvent.IsButtonUp
189 || !aHidEvent.IsValid
190 || aHidEvent.IsBackground
191 || aHidEvent.IsRepeat
192 || aHidEvent.IsStray)
197 PrivateCopy(aHidEvent);
200 //Tell observer the object itself changed
201 OnPropertyChanged("Brief");
207 /// <param name="aHidEvent"></param>
208 public void Copy(Hid.Event aHidEvent)
210 PrivateCopy(aHidEvent);
211 //We need the key up/down too here
212 IsKeyUp = aHidEvent.IsButtonUp;
218 /// <param name="aHidEvent"></param>
219 private void PrivateCopy(Hid.Event aHidEvent)
222 UsagePage = aHidEvent.UsagePage;
223 UsageCollection = aHidEvent.UsageCollection;
224 IsGeneric = aHidEvent.IsGeneric;
225 IsKeyboard = aHidEvent.IsKeyboard;
226 IsMouse = aHidEvent.IsMouse;
230 if (aHidEvent.Usages.Count > 0)
232 Usage = aHidEvent.Usages[0];
233 PersistedBrief = aHidEvent.UsageName(0);
237 HasModifierAlt = false;
238 HasModifierControl = false;
239 HasModifierShift = false;
240 HasModifierWindows = false;
245 Key = aHidEvent.VirtualKey;
246 HasModifierAlt = aHidEvent.HasModifierAlt;
247 HasModifierControl = aHidEvent.HasModifierControl;
248 HasModifierShift = aHidEvent.HasModifierShift;
249 HasModifierWindows = aHidEvent.HasModifierWindows;