]> git.vomp.tv Git - vompclient.git/blob - remotewin.cc
Windows updates
[vompclient.git] / remotewin.cc
1 /*\r
2     Copyright 2004-2005 Chris Tallon\r
3 \r
4     This file is part of VOMP.\r
5 \r
6     VOMP is free software; you can redistribute it and/or modify\r
7     it under the terms of the GNU General Public License as published by\r
8     the Free Software Foundation; either version 2 of the License, or\r
9     (at your option) any later version.\r
10 \r
11     VOMP is distributed in the hope that it will be useful,\r
12     but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
14     GNU General Public License for more details.\r
15 \r
16     You should have received a copy of the GNU General Public License\r
17     along with VOMP; if not, write to the Free Software\r
18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
19 */\r
20 \r
21 #include "remotewin.h"\r
22 #include "vompreswin.h"\r
23 \r
24 \r
25 RemoteWin::RemoteWin()\r
26 {\r
27   initted = 0;\r
28   curevent=NA_NONE;\r
29   signal=false;\r
30 }\r
31 \r
32 RemoteWin::~RemoteWin()\r
33 {\r
34 }\r
35 \r
36 int RemoteWin::init(char* devName)\r
37 {\r
38   if (initted) return 0;\r
39   initted = 1;\r
40   event = CreateEvent(NULL,/*FALSE*/TRUE,FALSE,NULL);\r
41 \r
42 \r
43   return 1;\r
44 }\r
45 \r
46 int RemoteWin::shutdown()\r
47 {\r
48   if (!initted) return 0;\r
49   CloseHandle(event);\r
50   initted = 0;\r
51   return 1;\r
52 }\r
53 \r
54 UCHAR RemoteWin::getButtonPress(int waitType)\r
55 {\r
56   /* how = 0 - block\r
57      how = 1 - start new wait\r
58      how = 2 - continue wait\r
59      how = 3 - no wait\r
60   */\r
61   DWORD wait;\r
62 \r
63   if (curevent!=NA_NONE) {\r
64           UCHAR temp=curevent;\r
65           curevent=NA_NONE;\r
66           return temp;\r
67   }\r
68   if (waitType==3) {\r
69           return NA_NONE;\r
70   }\r
71   if (waitType==0) {\r
72           wait=INFINITE;\r
73   } else { //We do not distingish between 2 and 3\r
74           wait=1000;\r
75 \r
76   }\r
77   WaitForSingleObject(event,wait);\r
78   ResetEvent(event);\r
79   if (curevent==NA_NONE) {\r
80           if (signal) {\r
81                   signal=false;\r
82                 return NA_SIGNAL; //Since we have no signals on windows, we simulate this\r
83           } else {\r
84                   return NA_NONE;\r
85           }\r
86   }\r
87   UCHAR temp2=curevent;\r
88   curevent=NA_NONE;\r
89   return temp2;\r
90   \r
91 }\r
92 \r
93 void RemoteWin::clearBuffer()\r
94 {\r
95 }\r
96 \r
97 int RemoteWin::ReceiveButtonVK(UINT button) {\r
98         UCHAR pb=NA_NONE;\r
99         //should we use a translation table ? No APPCOMMAND iS DWORD!\r
100         switch (button) { //Processing VK_Messages\r
101         case VK_DOWN:\r
102                 pb=DOWN; break;\r
103         case VK_RETURN:\r
104         case VK_SPACE:\r
105                 pb=OK;break;\r
106         case VK_LEFT:\r
107                 pb=LEFT;break;\r
108         case '9':\r
109         case VK_NUMPAD9:\r
110                 pb=NINE;break;\r
111         case '8':\r
112         case VK_NUMPAD8:\r
113                 pb=EIGHT;break;\r
114         case '7':\r
115         case VK_NUMPAD7:\r
116                 pb=SEVEN;break;\r
117         case '6':\r
118         case VK_NUMPAD6:\r
119                 pb=SIX;break;\r
120         case '5':\r
121         case VK_NUMPAD5:\r
122                 pb=FIVE;break;\r
123         case '4':\r
124         case VK_NUMPAD4:\r
125                 pb=FOUR;break;\r
126         case '3':\r
127         case VK_NUMPAD3:\r
128                 pb=THREE;break;\r
129         case '2':\r
130         case VK_NUMPAD2:\r
131                 pb=TWO;break;\r
132         case '1':\r
133         case VK_NUMPAD1:\r
134                 pb=ONE;break;\r
135         case '0':\r
136         case VK_NUMPAD0:\r
137                 pb=ZERO;break;\r
138         case VK_RIGHT:\r
139                 pb=RIGHT;break;\r
140         case VK_UP:\r
141                 pb=UP;break;\r
142         case VK_MULTIPLY:\r
143                 pb=STAR;break;\r
144         case 'J'://j for JUMP TO instead of go to\r
145                 pb=GO;break;\r
146         //case VK_ESCAPE:\r
147         //      pb=POWER;break;\r
148         case VK_BACK:\r
149                 pb=BACK;break;\r
150         case 'M':\r
151                 pb=MENU;break;\r
152         case 'R':\r
153                 pb=RED;break;\r
154         case 'G':\r
155                 pb=GREEN;break;\r
156         case 'Y':\r
157                 pb=YELLOW;break;\r
158         case 'B':\r
159                 pb=BLUE; break;\r
160 \r
161 \r
162         }; //All other commands are process via APPCOMMAND_MESSAGES\r
163         if (pb==NA_NONE) return 0;\r
164         curevent=pb;\r
165         //PulseEvent(event);\r
166         SetEvent(event);\r
167         return 1;\r
168 }\r
169 \r
170 int RemoteWin::ReceiveButtonAP(UINT button) {\r
171         UCHAR pb=NA_NONE;\r
172         //should we use a translation table ? No APPCOMMAND iS DWORD!\r
173         switch (button) { //Processing VK_Messages\r
174         case APPCOMMAND_BROWSER_BACKWARD:\r
175                 pb=BACK;break;\r
176         case APPCOMMAND_MEDIA_CHANNEL_DOWN:\r
177                 pb=CHANNELDOWN;break;\r
178         case APPCOMMAND_MEDIA_CHANNEL_UP:\r
179                 pb=CHANNELUP;break;\r
180         case APPCOMMAND_MEDIA_FAST_FORWARD:\r
181                 pb=FORWARD;break;\r
182         case APPCOMMAND_VOLUME_MUTE:\r
183                 pb=MUTE;break;\r
184         case APPCOMMAND_MEDIA_PAUSE:\r
185                 pb=PAUSE;break;\r
186         case APPCOMMAND_MEDIA_PLAY:\r
187                 pb=PLAY;break;\r
188         case APPCOMMAND_MEDIA_RECORD:\r
189                 pb=RECORD;break;\r
190         case APPCOMMAND_MEDIA_PREVIOUSTRACK:\r
191                 pb=SKIPBACK;break;\r
192         case APPCOMMAND_MEDIA_REWIND:\r
193                 pb=REVERSE;break;\r
194         case APPCOMMAND_MEDIA_NEXTTRACK:\r
195                 pb=SKIPFORWARD;break;\r
196         case APPCOMMAND_MEDIA_STOP:\r
197                 pb=STOP;break;\r
198         case APPCOMMAND_VOLUME_DOWN:\r
199                 pb=VOLUMEDOWN;break;\r
200         case APPCOMMAND_VOLUME_UP:\r
201                 pb=VOLUMEUP;break;\r
202         case VOMP_YELLOW:\r
203                 pb=YELLOW; break;\r
204         case VOMP_BLUE:\r
205                 pb=BLUE;break;\r
206         case VOMP_RED:\r
207                 pb=RED;break;\r
208         case VOMP_GREEN:\r
209                 pb=GREEN;break;\r
210         case VOMP_ENTER:\r
211                 pb=OK;break;\r
212         case VOMP_CANCEL:\r
213                 pb=BACK;break;\r
214         case VOMP_UP:\r
215                 pb=UP;break;\r
216         case VOMP_DOWN:\r
217                 pb=DOWN;break;\r
218         case VOMP_LEFT:\r
219                 pb=LEFT;break;\r
220         case VOMP_RIGHT:\r
221                 pb=RIGHT;break;\r
222         };\r
223         if (pb==NA_NONE) return 0;\r
224         curevent=pb;\r
225         //PulseEvent(event);\r
226         SetEvent(event);\r
227         return 1;\r
228 }\r
229 \r
230 int RemoteWin::ReceiveButtonRI(UINT button) {\r
231         UCHAR pb=NA_NONE;\r
232         //Raw Input\r
233         /* Note Codes above 0x29c are not listed in the specs on usb.org\r
234            therefore they are used by try, they might be device dependent\r
235            thus please supply codes of your remote control */\r
236         switch (button) { //Processing VK_Messages\r
237         case 0x35c: //Green\r
238                 pb=GREEN;break;\r
239         case 0x35b: //Red\r
240                 pb=RED;break;\r
241         case 0x35d: //Yellow\r
242                 pb=YELLOW;break;\r
243         case 0x35e: //Blue\r
244                 pb=BLUE;break;\r
245         case 0x30d: //MCE Button, used for Menu\r
246                 pb=MENU;break;\r
247         case 0x348: //Record Television\r
248                 pb=RECORD;break;\r
249         case 0x28d: //Attach File Mmh, how should we assign this\r
250                 pb=NA_NONE;break;\r
251         case 0x325: //Playback Televison\r
252                 pb=PLAY;break;\r
253         case 0x324: //Playback DVD\r
254                 pb=PLAY;break;\r
255         case 0x209: //Properties\r
256         case 0x35a: //Teletext?\r
257                 pb=OK;break;\r
258 \r
259         \r
260         };\r
261         if (pb==NA_NONE) return 0;\r
262         curevent=pb;\r
263         //PulseEvent(event);\r
264         SetEvent(event);\r
265         return 1;\r
266 }\r
267 \r
268 void RemoteWin::Signal() {\r
269         signal=true;\r
270         //PulseEvent(event);\r
271         SetEvent(event);\r
272 }\r
273 \r
274 void RemoteWin::SendPower()\r
275 {\r
276 \r
277         curevent=POWER;\r
278         SetEvent(event);\r
279 }\r
280 \r