/
FireDTVRemote.cs
186 lines (160 loc) · 5.01 KB
/
FireDTVRemote.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#region Copyright (C) 2005-2011 Team MediaPortal
// Copyright (C) 2005-2011 Team MediaPortal
// http://www.team-mediaportal.com
//
// MediaPortal 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 2 of the License, or
// (at your option) any later version.
//
// MediaPortal 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 MediaPortal. If not, see <http://www.gnu.org/licenses/>.
#endregion
using System;
using System.IO;
using System.Windows.Forms;
using MediaPortal.Configuration;
using MediaPortal.GUI.Library;
using MediaPortal.InputDevices.FireDTV;
using MediaPortal.Profile;
using Action = MediaPortal.GUI.Library.Action;
namespace MediaPortal.InputDevices
{
/// <summary>
/// Summary description for FireDTVRemote.
/// </summary>
public class FireDTVRemote
{
#region Private Variables
private static bool _enabled = false;
private bool _logVerbose = false;
private static string _name;
private FireDTVControl _fireDTV = null;
private InputHandler _inputHandler;
#endregion
#region Private Methods
/// <summary>
///
/// </summary>
private void StartFireDTVComms()
{
if (_enabled)
{
// Open driver
_enabled = _fireDTV.OpenDrivers();
if (!_enabled)
{
Log.Error("FireDTVRemote: Failed to open driver");
return;
}
// Search for the named sourcefilter
FireDTVSourceFilterInfo sourceFilter = _fireDTV.SourceFilters.ItemByName(_name);
if (sourceFilter != null)
{
sourceFilter.StartFireDTVRemoteControlSupport();
}
else
{
Log.Error("FireDTVRemote: SourceFilter {0} Not Found", _name);
}
}
}
#endregion
public FireDTVRemote() {}
/// <summary>
/// Initialise the FireDTV remote
/// </summary>
/// <param name="hwnd">The window handler where the remote messages are send</param>
public void Init(IntPtr hwnd)
{
try
{
// first read the configuration, to determine the initialisation is needed
using (Settings xmlreader = new MPSettings())
{
_enabled = ((xmlreader.GetValueAsBool("remote", "FireDTV", false)));
_name = xmlreader.GetValueAsString("remote", "FireDTVDeviceName", string.Empty);
_logVerbose = xmlreader.GetValueAsBool("remote", "FireDTVVerboseLog", false);
if (!_enabled)
{
return;
}
}
// load the default input mapping
_inputHandler = new InputHandler("FireDTV");
if (!_inputHandler.IsLoaded)
{
_enabled = false;
Log.Error("FireDTVRemote: Error loading default mapping file - please reinstall MediaPortal");
return;
}
_fireDTV = new FireDTVControl(hwnd);
Log.Info("FireDTVRemote: Starting on handler {0}", hwnd);
// start communication with the FireDTV library
StartFireDTVComms();
}
catch (FileNotFoundException eFileNotFound)
{
Log.Error(eFileNotFound);
}
catch (FireDTVException eFireDTV)
{
Log.Error(eFireDTV);
}
}
public void DeInit()
{
if (_fireDTV != null)
{
_fireDTV.CloseDrivers();
}
}
public bool WndProc(ref Message msg, out Action action, out char key, out Keys keyCode)
{
keyCode = Keys.A;
key = (char)0;
action = null;
switch ((FireDTVConstants.FireDTVWindowMessages)msg.Msg)
{
case FireDTVConstants.FireDTVWindowMessages.DeviceAttached:
Log.Info("FireDTVRemote: DeviceAttached");
StartFireDTVComms();
break;
case FireDTVConstants.FireDTVWindowMessages.DeviceDetached:
Log.Info("FireDTVRemote: DeviceDetached");
_fireDTV.SourceFilters.RemoveByHandle((uint)msg.WParam);
break;
case FireDTVConstants.FireDTVWindowMessages.DeviceChanged:
Log.Info("FireDTVRemote: DeviceChanged");
StartFireDTVComms();
break;
case FireDTVConstants.FireDTVWindowMessages.RemoteControlEvent:
if (_enabled)
{
int remoteKeyCode = msg.LParam.ToInt32();
if (_logVerbose)
{
Log.Info("FireDTVRemote: RemoteControlEvent {0}", remoteKeyCode);
}
if (!_inputHandler.MapAction(remoteKeyCode))
{
return false;
}
msg.Result = new IntPtr(1);
return true;
}
break;
}
return false;
}
public Guid RCGuid
{
get { return new Guid("{73DF3DFD-855A-418c-B98B-121C513BD2E4}"); }
}
}
}