2 Copyright 2006 Chris Tallon
4 This file is part of VOMP.
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.
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.
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
23 //void dump(unsigned char* data, USHORT size);
24 //unsigned char dcc(UCHAR c);
28 log = Log::getInstance();
39 if (!initted) return 1;
40 if (threadIsActive()) threadCancel();
47 int UDP::run(MessageQueue* tcommandMessageQueue)
49 if (threadIsActive()) return 1;
50 log->log("UDP", Log::DEBUG, "Starting UDP command server");
54 commandMessageQueue = tcommandMessageQueue;
55 ds = new DatagramSocket(2000);
59 log->log("UDP", Log::DEBUG, "DSock init error");
66 log->log("UDP", Log::DEBUG, "Thread start error");
71 log->log("UDP", Log::DEBUG, "UDP command server started");
75 void UDP::threadMethod()
80 log->log("UDP", Log::DEBUG, "Starting wait");
81 retval = ds->waitforMessage(0);
82 log->log("UDP", Log::DEBUG, "Wait finished");
86 log->log("UDP", Log::CRIT, "Wait for packet error");
95 processRequest((UCHAR*)ds->getData(), ds->getDataLength());
100 void UDP::processRequest(UCHAR* data, int length)
102 log->log("UDP", Log::DEBUG, "Got request");
104 char* temp = new char[length + 1];
105 memcpy(temp, data, length);
107 int command = atoi(temp);
110 log->log("UDP", Log::DEBUG, "Command %i recieved", command);
113 Message *m = new Message();
114 m->to = commandMessageQueue;
115 m->message = Message::UDP_BUTTON;
116 m->parameter = command;
117 commandMessageQueue->postMessage(m);
121 void dump(unsigned char* data, USHORT size)
123 printf("Size = %u\n", size);
130 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",
131 data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
132 data[c+8], data[c+9], data[c+10], data[c+11], data[c+12], data[c+13], data[c+14], data[c+15],
133 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]),
134 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]));
142 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",
143 data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
144 data[c+8], data[c+9], data[c+10], data[c+11], data[c+12], data[c+13], data[c+14],
145 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]),
146 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]));
150 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",
151 data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
152 data[c+8], data[c+9], data[c+10], data[c+11], data[c+12], data[c+13],
153 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]),
154 dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]), dcc(data[c+11]), dcc(data[c+12]), dcc(data[c+13]));
158 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",
159 data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
160 data[c+8], data[c+9], data[c+10], data[c+11], data[c+12],
161 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]),
162 dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]), dcc(data[c+11]), dcc(data[c+12]));
166 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",
167 data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
168 data[c+8], data[c+9], data[c+10], data[c+11],
169 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]),
170 dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]), dcc(data[c+11]));
174 printf(" %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %c%c%c%c%c%c%c%c%c%c%c\n",
175 data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
176 data[c+8], data[c+9], data[c+10],
177 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]),
178 dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]));
182 printf(" %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %c%c%c%c%c%c%c%c%c%c\n",
183 data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
184 data[c+8], data[c+9],
185 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]),
186 dcc(data[c+8]), dcc(data[c+9]));
190 printf(" %02X %02X %02X %02X %02X %02X %02X %02X %02X %c%c%c%c%c%c%c%c%c\n",
191 data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
193 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]),
198 printf(" %02X %02X %02X %02X %02X %02X %02X %02X %c%c%c%c%c%c%c%c\n",
199 data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
200 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]));
204 printf(" %02X %02X %02X %02X %02X %02X %02X %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],
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]));
210 printf(" %02X %02X %02X %02X %02X %02X %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],
212 dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]));
216 printf(" %02X %02X %02X %02X %02X %c%c%c%c%c\n",
217 data[c], data[c+1], data[c+2], data[c+3], data[c+4],
218 dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]));
222 printf(" %02X %02X %02X %02X %c%c%c%c\n",
223 data[c], data[c+1], data[c+2], data[c+3],
224 dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]));
228 printf(" %02X %02X %02X %c%c%c\n",
229 data[c], data[c+1], data[c+2],
230 dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]));
234 printf(" %02X %02X %c%c\n",
236 dcc(data[c]), dcc(data[c+1]));
250 unsigned char dcc(UCHAR c)
252 if (isspace(c)) return ' ';
253 if (isprint(c)) return c;