]> git.vomp.tv Git - vompclient.git/blob - remotewin.cc
Update for windows
[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         };\r
203         if (pb==NA_NONE) return 0;\r
204         curevent=pb;\r
205         //PulseEvent(event);\r
206         SetEvent(event);\r
207         return 1;\r
208 }\r
209 \r
210 int RemoteWin::ReceiveButtonRI(UINT button) {\r
211         UCHAR pb=NA_NONE;\r
212         //Raw Input\r
213         /* Note Codes above 0x29c are not listed in the specs on usb.org\r
214            therefore they are used by try, they might be device dependent\r
215            thus please supply codes of your remote control */\r
216         switch (button) { //Processing VK_Messages\r
217         case 0x35c: //Green\r
218                 pb=GREEN;break;\r
219         case 0x35b: //Red\r
220                 pb=RED;break;\r
221         case 0x35d: //Yellow\r
222                 pb=YELLOW;break;\r
223         case 0x35e: //Blue\r
224                 pb=BLUE;break;\r
225         case 0x30d: //MCE Button, used for Menu\r
226                 pb=MENU;break;\r
227         case 0x348: //Record Television\r
228                 pb=RECORD;break;\r
229         case 0x28d: //Attach File Mmh, how should we assign this\r
230                 pb=NA_NONE;break;\r
231         case 0x325: //Playback Televison\r
232                 pb=PLAY;break;\r
233         case 0x324: //Playback DVD\r
234                 pb=PLAY;break;\r
235         case 0x209: //Properties\r
236         case 0x35a: //Teletext?\r
237                 pb=OK;break;\r
238 \r
239         \r
240         };\r
241         if (pb==NA_NONE) return 0;\r
242         curevent=pb;\r
243         //PulseEvent(event);\r
244         SetEvent(event);\r
245         return 1;\r
246 }\r
247 \r
248 void RemoteWin::Signal() {\r
249         signal=true;\r
250         //PulseEvent(event);\r
251         SetEvent(event);\r
252 }\r
253 \r
254 void RemoteWin::SendPower()\r
255 {\r
256 \r
257         curevent=POWER;\r
258         SetEvent(event);\r
259 }\r
260 \r