]> git.vomp.tv Git - vompclient.git/blob - remotewin.cc
Windows port
[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_MEDIA_CHANNEL_DOWN:\r
175                 pb=CHANNELDOWN;break;\r
176         case APPCOMMAND_MEDIA_CHANNEL_UP:\r
177                 pb=CHANNELUP;break;\r
178         case APPCOMMAND_MEDIA_FAST_FORWARD:\r
179                 pb=FORWARD;break;\r
180         case APPCOMMAND_VOLUME_MUTE:\r
181                 pb=MUTE;break;\r
182         case APPCOMMAND_MEDIA_PAUSE:\r
183                 pb=PAUSE;break;\r
184         case APPCOMMAND_MEDIA_PLAY:\r
185                 pb=PLAY;break;\r
186         case APPCOMMAND_MEDIA_RECORD:\r
187                 pb=RECORD;break;\r
188         case APPCOMMAND_MEDIA_PREVIOUSTRACK:\r
189                 pb=SKIPBACK;break;\r
190         case APPCOMMAND_MEDIA_REWIND:\r
191                 pb=REVERSE;break;\r
192         case APPCOMMAND_MEDIA_NEXTTRACK:\r
193                 pb=SKIPFORWARD;break;\r
194         case APPCOMMAND_MEDIA_STOP:\r
195                 pb=STOP;break;\r
196         case APPCOMMAND_VOLUME_DOWN:\r
197                 pb=VOLUMEDOWN;break;\r
198         case APPCOMMAND_VOLUME_UP:\r
199                 pb=VOLUMEUP;break;\r
200         };\r
201         if (pb==NA_NONE) return 0;\r
202         curevent=pb;\r
203         //PulseEvent(event);\r
204         SetEvent(event);\r
205         return 1;\r
206 }\r
207 \r
208 void RemoteWin::Signal() {\r
209         signal=true;\r
210         //PulseEvent(event);\r
211         SetEvent(event);\r
212 }\r
213 \r
214 void RemoteWin::SendPower()\r
215 {\r
216         curevent=POWER;\r
217         SetEvent(event);\r
218 }\r
219 \r