]> git.vomp.tv Git - vompclient-marten.git/blob - udp.cc
Mouse support (part 1)
[vompclient-marten.git] / udp.cc
1 /*
2     Copyright 2006 Chris Tallon
3
4     This file is part of VOMP.
5
6     VOMP is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     VOMP is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with VOMP; if not, write to the Free Software
18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20
21 #include "udp.h"
22
23 //void dump(unsigned char* data, USHORT size);
24 //unsigned char dcc(UCHAR c);
25
26 UDP::UDP()
27 {
28   log = Log::getInstance();
29   initted = 0;
30 }
31
32 UDP::~UDP()
33 {
34   shutdown();
35 }
36
37 int UDP::shutdown()
38 {
39   if (!initted) return 1;
40   if (threadIsActive()) threadCancel();
41   ds->shutdown();
42
43   initted = 0;
44   return 1;
45 }
46
47 int UDP::run(MessageQueue* tcommandMessageQueue)
48 {
49   if (threadIsActive()) return 1;
50   log->log("UDP", Log::DEBUG, "Starting UDP command server");
51
52   initted = 1;
53
54   commandMessageQueue = tcommandMessageQueue;
55   ds = new DatagramSocket(2000);
56
57   if (!ds->init())
58   {
59     log->log("UDP", Log::DEBUG, "DSock init error");
60     shutdown();
61     return 0;
62   }
63
64   if (!threadStart())
65   {
66     log->log("UDP", Log::DEBUG, "Thread start error");
67     shutdown();
68     return 0;
69   }
70
71   log->log("UDP", Log::DEBUG, "UDP command server started");
72   return 1;
73 }
74
75 void UDP::threadMethod()
76 {
77   threadSetKillable();
78
79   int retval;
80   while(1)
81   {
82     #ifndef WIN32
83     retval = ds->waitforMessage(0);
84     #else
85     log->log("UDP", Log::DEBUG, "Wait for packet");
86     threadCheckExit();
87     retval = ds->waitforMessage(1);
88     #endif
89
90     if (retval == 0)
91     {
92       log->log("UDP", Log::CRIT, "Wait for packet error");
93       return;
94     }
95     else if (retval == 1)
96     {
97       continue;
98     }
99     else
100     {
101       processRequest((UCHAR*)ds->getData(), ds->getDataLength());
102     }
103   }
104 }
105
106 void UDP::processRequest(UCHAR* data, int length)
107 {
108   log->log("UDP", Log::DEBUG, "Got request");
109
110   char* temp = new char[length + 1];
111   memcpy(temp, data, length);
112   temp[length] = '\0';
113   int command = atoi(temp);
114   delete[] temp;
115
116   log->log("UDP", Log::DEBUG, "Command %i recieved", command);
117
118
119   Message *m = new Message();
120   m->to = commandMessageQueue;
121   m->message = Message::UDP_BUTTON;
122   m->parameter = command;
123   commandMessageQueue->postMessage(m);
124 }
125
126 /*
127 void dump(unsigned char* data, USHORT size)
128 {
129   printf("Size = %u\n", size);
130
131   USHORT c = 0;
132   while(c < size)
133   {
134     if ((size - c) > 15)
135     {
136       printf(" %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X %02X %02X  %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
137         data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
138         data[c+8], data[c+9], data[c+10], data[c+11], data[c+12], data[c+13], data[c+14], data[c+15],
139         dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]), dcc(data[c+7]),
140         dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]), dcc(data[c+11]), dcc(data[c+12]), dcc(data[c+13]), dcc(data[c+14]), dcc(data[c+15]));
141       c += 16;
142     }
143     else
144     {
145       switch (size - c)
146       {
147         case 15:
148           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X %02X     %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
149             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
150             data[c+8], data[c+9], data[c+10], data[c+11], data[c+12], data[c+13], data[c+14],
151             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]), dcc(data[c+7]),
152             dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]), dcc(data[c+11]), dcc(data[c+12]), dcc(data[c+13]), dcc(data[c+14]));
153           c += 15;
154           break;
155         case 14:
156           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X        %c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
157             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
158             data[c+8], data[c+9], data[c+10], data[c+11], data[c+12], data[c+13],
159             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]), dcc(data[c+7]),
160             dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]), dcc(data[c+11]), dcc(data[c+12]), dcc(data[c+13]));
161           c += 14;
162           break;
163         case 13:
164           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X %02X %02X  %02X           %c%c%c%c%c%c%c%c%c%c%c%c%c\n",
165             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
166             data[c+8], data[c+9], data[c+10], data[c+11], data[c+12],
167             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]), dcc(data[c+7]),
168             dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]), dcc(data[c+11]), dcc(data[c+12]));
169           c += 13;
170           break;
171         case 12:
172           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X %02X %02X               %c%c%c%c%c%c%c%c%c%c%c%c\n",
173             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
174             data[c+8], data[c+9], data[c+10], data[c+11],
175             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]), dcc(data[c+7]),
176             dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]), dcc(data[c+11]));
177           c += 12;
178           break;
179         case 11:
180           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X %02X                  %c%c%c%c%c%c%c%c%c%c%c\n",
181             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
182             data[c+8], data[c+9], data[c+10],
183             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]), dcc(data[c+7]),
184             dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]));
185           c += 11;
186           break;
187         case 10:
188           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X                     %c%c%c%c%c%c%c%c%c%c\n",
189             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
190             data[c+8], data[c+9],
191             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]), dcc(data[c+7]),
192             dcc(data[c+8]), dcc(data[c+9]));
193           c += 10;
194           break;
195         case 9:
196           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X  %02X                        %c%c%c%c%c%c%c%c%c\n",
197             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
198             data[c+8],
199             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]), dcc(data[c+7]),
200             dcc(data[c+8]));
201           c += 9;
202           break;
203         case 8:
204           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X                            %c%c%c%c%c%c%c%c\n",
205             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
206             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]), dcc(data[c+7]));
207           c += 8;
208           break;
209         case 7:
210           printf(" %02X %02X %02X %02X  %02X %02X %02X                               %c%c%c%c%c%c%c\n",
211             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6],
212             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]));
213           c += 7;
214           break;
215         case 6:
216           printf(" %02X %02X %02X %02X  %02X %02X                                  %c%c%c%c%c%c\n",
217             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5],
218             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]));
219           c += 6;
220           break;
221         case 5:
222           printf(" %02X %02X %02X %02X  %02X                                     %c%c%c%c%c\n",
223             data[c], data[c+1], data[c+2], data[c+3], data[c+4],
224             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]));
225           c += 5;
226           break;
227         case 4:
228           printf(" %02X %02X %02X %02X                                         %c%c%c%c\n",
229             data[c], data[c+1], data[c+2], data[c+3],
230             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]));
231           c += 4;
232           break;
233         case 3:
234           printf(" %02X %02X %02X                                            %c%c%c\n",
235             data[c], data[c+1], data[c+2],
236             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]));
237           c += 3;
238           break;
239         case 2:
240           printf(" %02X %02X                                               %c%c\n",
241             data[c], data[c+1],
242             dcc(data[c]), dcc(data[c+1]));
243           c += 2;
244           break;
245         case 1:
246           printf(" %02X                                                  %c\n",
247             data[c],
248             dcc(data[c]));
249           c += 1;
250           break;
251       }
252     }
253   }
254 }
255
256 unsigned char dcc(UCHAR c)
257 {
258   if (isspace(c)) return ' ';
259   if (isprint(c)) return c;
260   return '.';
261 }
262 */