1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Reflection;
5
using System.Text;
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;
11
12
namespace SharpDisplayManager
13
{
14
[DataContract]
15
[Ear.AttributeObject(Id = "Event.Hid", Name = "HID", Description = "Handle input from Keyboards and Remotes.")]
16
public class EventHid: Ear.Event
17
18
public EventHid()
19
20
}
21
22
[DataMember]
23
public ushort UsagePage { get; set; }
24
25
26
public ushort UsageCollection { get; set; }
27
28
29
public ushort Usage { get; set; }
30
31
32
public Keys Key { get; set; }
33
34
35
[Ear.AttributeObjectProperty
36
(
37
Id = "HID.Keyboard.IsKeyUp",
38
Name = "Key Up",
39
Description = "Key up if set, key down otherwise."
40
)]
41
public bool IsKeyUp { get; set; } = false;
42
43
44
public bool IsMouse { get; set; } = false;
45
46
47
public bool IsKeyboard { get; set; } = false;
48
49
50
public bool IsGeneric { get; set; } = false;
51
52
53
public bool HasModifierShift { get; set; } = false;
54
55
56
public bool HasModifierControl { get; set; } = false;
57
58
59
public bool HasModifierAlt { get; set; } = false;
60
61
62
public bool HasModifierWindows { get; set; } = false;
63
64
65
public string UsageName { get; set; } = "Press a key";
66
67
68
69
protected override void DoConstruct()
70
71
base.DoConstruct();
72
UpdateDynamicProperties();
73
74
75
private void UpdateDynamicProperties()
76
77
78
79
80
/// <summary>
81
/// Make sure we distinguish between various configuration of this event
82
/// </summary>
83
/// <returns></returns>
84
public override string Brief()
85
86
string brief = Name + ": ";
87
88
if (IsKeyboard)
89
90
brief += Key.ToString();
91
92
if (HasModifierAlt)
93
94
brief += " + ALT";
95
96
97
if (HasModifierControl)
98
99
brief += " + CTRL";
100
101
102
if (HasModifierShift)
103
104
brief += " + SHIFT";
105
106
107
if (HasModifierWindows)
108
109
brief += " + WIN";
110
111
112
else if (IsGeneric)
113
114
brief += UsageName;
115
116
117
if (IsKeyUp)
118
119
brief += " (UP)";
120
121
else
122
123
brief += " (DOWN)";
124
125
126
return brief;
127
128
129
130
///
131
132
/// <param name="obj"></param>
133
134
public override bool Equals(object obj)
135
136
if (obj is EventHid)
137
138
EventHid e = (EventHid)obj;
139
return e.Key == Key
140
&& e.Usage == Usage
141
&& e.UsagePage == UsagePage
142
&& e.UsageCollection == UsageCollection
143
&& e.IsKeyUp == IsKeyUp
144
&& e.IsGeneric == IsGeneric
145
&& e.IsKeyboard == IsKeyboard
146
&& e.IsMouse == IsMouse
147
&& e.HasModifierAlt == HasModifierAlt
148
&& e.HasModifierControl == HasModifierControl
149
&& e.HasModifierShift == HasModifierShift
150
&& e.HasModifierWindows == HasModifierWindows;
151
152
153
return false;
154
155
156
157
158
159
160
protected override void OnStateLeave()
161
162
if (CurrentState == State.Edit)
163
164
// Leaving edit mode
165
// Unhook HID events
166
Program.HidHandler.OnHidEvent -= HandleHidEvent;
167
168
169
170
171
172
173
174
protected override void OnStateEnter()
175
176
177
178
// Enter edit mode
179
// Hook-in HID events
180
Program.HidHandler.OnHidEvent += HandleHidEvent;
181
182
183
184
185
186
/// Here we receive HID events from our HID library.
187
188
/// <param name="aSender"></param>
189
/// <param name="aHidEvent"></param>
190
public void HandleHidEvent(object aSender, SharpLib.Hid.Event aHidEvent)
191
192
if (CurrentState != State.Edit
193
|| aHidEvent.IsMouse
194
|| aHidEvent.IsButtonUp
195
|| !aHidEvent.IsValid
196
|| aHidEvent.IsBackground
197
|| aHidEvent.IsRepeat
198
|| aHidEvent.IsStray)
199
200
return;
201
202
203
PrivateCopy(aHidEvent);
204
//
205
206
//Tell observer the object itself changed
207
OnPropertyChanged("Brief");
208
209
210
211
212
213
214
public void Copy(Hid.Event aHidEvent)
215
216
217
//We need the key up/down too here
218
IsKeyUp = aHidEvent.IsButtonUp;
219
220
221
222
223
224
225
private void PrivateCopy(Hid.Event aHidEvent)
226
227
//Copy for scan
228
UsagePage = aHidEvent.UsagePage;
229
UsageCollection = aHidEvent.UsageCollection;
230
IsGeneric = aHidEvent.IsGeneric;
231
IsKeyboard = aHidEvent.IsKeyboard;
232
IsMouse = aHidEvent.IsMouse;
233
234
if (IsGeneric)
235
236
if (aHidEvent.Usages.Count > 0)
237
238
Usage = aHidEvent.Usages[0];
239
UsageName = aHidEvent.UsageName(0);
240
241
242
Key = Keys.None;
243
HasModifierAlt = false;
244
HasModifierControl = false;
245
HasModifierShift = false;
246
HasModifierWindows = false;
247
248
else if (IsKeyboard)
249
250
Usage = 0;
251
Key = aHidEvent.VirtualKey;
252
HasModifierAlt = aHidEvent.HasModifierAlt;
253
HasModifierControl = aHidEvent.HasModifierControl;
254
HasModifierShift = aHidEvent.HasModifierShift;
255
HasModifierWindows = aHidEvent.HasModifierWindows;
256
257
258
259
260
261
262
263
264
public override bool IsValid()
265
266
return IsGeneric || IsKeyboard;
267
268
269