@@ -1,723 +1,731 | |||
|
1 | 1 | #include "mainwindow.h" |
|
2 | 2 | #include <iostream> |
|
3 | 3 | #include <QNetworkInterface> |
|
4 | 4 | |
|
5 | 5 | MainWindow::MainWindow(QWidget *parent) |
|
6 | 6 | : QMainWindow(parent) |
|
7 | 7 | { |
|
8 | 8 | parsingContinue = false; |
|
9 | 9 | totalOfBytes = 0; |
|
10 | 10 | totalOfPackets = 0; |
|
11 | 11 | |
|
12 | 12 | spectraPacketNormalSpectrumF0 = new SpectraPacket(0, 128); |
|
13 | spectraPacketNormalSpectrumF1 = new SpectraPacket(0, 128); | |
|
14 | spectraPacketNormalSpectrumF2 = new SpectraPacket(0, 128); | |
|
13 | 15 | |
|
14 | 16 | //********* |
|
15 | 17 | // wfPacket |
|
16 | 18 | wfPacketNormal[0] = new WFPacket(0, 2048); |
|
17 | 19 | wfPacketNormal[1] = new WFPacket(0, 2048); |
|
18 | 20 | wfPacketNormal[2] = new WFPacket(0, 2048); |
|
19 | 21 | wfPacketNormal[3] = new WFPacket(0, 2688); |
|
20 | 22 | wfPacketBurst = new WFPacket(0, 2688); |
|
21 | 23 | wfPacketSBM1 = new WFPacket(0, 2688); |
|
22 | 24 | wfPacketSBM2 = new WFPacket(0, 2688); |
|
23 | 25 | wfPacketCWF_F3 = new WFPacket(0, 2688); |
|
24 | 26 | |
|
25 | 27 | //**** |
|
26 | 28 | // XML |
|
27 | 29 | // xml handlers |
|
28 | 30 | xmlHandler = new LFRXmlHandler(); |
|
29 | 31 | // xml sources |
|
30 | 32 | sourceTC = new QXmlInputSource(); |
|
31 | 33 | // xml writer |
|
32 | 34 | lfrXmlWriter = new LFRXmlWriter(); |
|
33 | 35 | // setup xml parser for the echo bridge |
|
34 | 36 | lfrXmlParser = new LFRXmlParser(); |
|
35 | 37 | |
|
36 | 38 | UI = new MainWindowUI(); |
|
37 | 39 | readSettings(); |
|
38 | 40 | this->UI->serverTMEchoDialogBox->setIP(echoBridgeIP0, echoBridgeIP1, echoBridgeIP2, echoBridgeIP3); |
|
39 | 41 | |
|
40 | 42 | lfrXmlParser->generalCCSDSPacketStore = &this->generalCCSDSPacketStore; |
|
41 | 43 | |
|
42 | 44 | initSocketStatesList(); |
|
43 | 45 | |
|
44 | 46 | this->setCentralWidget(this->UI); |
|
45 | 47 | //this->setLayout(UI->layout()); |
|
46 | 48 | |
|
47 | 49 | analyserSGSEServerTC = new QTcpServer(); |
|
48 | 50 | analyserSGSEServerTM = new QTcpServer(); |
|
49 | 51 | |
|
50 | 52 | socketTC = NULL; |
|
51 | 53 | socketTM = NULL; |
|
52 | 54 | socketEchoServer = new QTcpSocket(); |
|
53 | 55 | |
|
54 | 56 | connect(this->UI->button_openServerTCTM, SIGNAL(clicked()), this, SLOT(listenOnTCTMPorts())); |
|
55 | 57 | connect(this->UI->button_testServerTCTM, SIGNAL(clicked()), this, SLOT(testTCTMPorts())); |
|
56 | 58 | connect(this->UI->button_openSocketEchoServer, SIGNAL(clicked()), this, SLOT(openEchoServer())); |
|
57 | 59 | // |
|
58 | 60 | connect(this->analyserSGSEServerTC, SIGNAL(newConnection()), this, SLOT(newConnectionOnTCServer())); |
|
59 | 61 | connect(this->analyserSGSEServerTM, SIGNAL(newConnection()), this, SLOT(newConnectionOnTMServer())); |
|
60 | 62 | // |
|
61 | 63 | connect(this, SIGNAL(socketTMHasChanged(QTcpSocket*)), this->lfrXmlWriter, SLOT(setSocketTM(QTcpSocket*))); |
|
62 | 64 | connect(this->UI->button_TCAcknowledgement, SIGNAL(clicked()), this->lfrXmlWriter, SLOT(sendXML_TC_Acknowledgment())); |
|
63 | 65 | connect(this->UI->button_TCRejection, SIGNAL(clicked()), this->lfrXmlWriter, SLOT(sendXML_TC_rejection())); |
|
64 | 66 | connect(this->UI->button_GSEHK, SIGNAL(clicked()), this->lfrXmlWriter, SLOT(sendXML_GSE_HK())); |
|
65 | 67 | |
|
66 | 68 | // socket echo server |
|
67 | 69 | connect(this->socketEchoServer, SIGNAL(stateChanged(QAbstractSocket::SocketState)), |
|
68 | 70 | this, SLOT(socket_TMEcho_ServerHasChanged())); |
|
69 | 71 | connect(this->socketEchoServer, SIGNAL(readyRead()), |
|
70 | 72 | this, SLOT(readDataOnSocketEchoServer())); |
|
71 | 73 | |
|
72 | 74 | // display on console |
|
73 | 75 | connect(this->xmlHandler, SIGNAL(displayMessage(QString)), |
|
74 | 76 | this, SLOT(displayOnConsole(QString))); |
|
75 | 77 | connect(this->UI->hkDisplay, SIGNAL(displayMessage(QString)), |
|
76 | 78 | this, SLOT(displayOnConsole(QString))); |
|
77 | 79 | connect(this->lfrXmlParser, SIGNAL(sendMessage(QString)), |
|
78 | 80 | this, SLOT(displayOnConsole(QString))); |
|
79 | 81 | // |
|
80 | 82 | connect(this->lfrXmlParser, SIGNAL(processPacketStore()), |
|
81 | 83 | this, SLOT(processPacketStore())); |
|
82 | 84 | // |
|
83 | 85 | connect(this->UI->button_resetStatistics, SIGNAL(clicked()), |
|
84 | 86 | this, SLOT(resetStatistics())); |
|
85 | 87 | |
|
86 | 88 | displayNetworkInterfaces(); |
|
87 | 89 | |
|
88 | 90 | this->xmlHandler->packetStoreHasChanged(&generalCCSDSPacketStore); |
|
89 | 91 | }; |
|
90 | 92 | |
|
91 | 93 | MainWindow::~MainWindow() |
|
92 | 94 | { |
|
93 | 95 | delete wfPacketNormal[0]; |
|
94 | 96 | delete wfPacketNormal[1]; |
|
95 | 97 | delete wfPacketNormal[2]; |
|
96 | 98 | delete wfPacketNormal[3]; |
|
97 | 99 | delete wfPacketBurst; |
|
98 | 100 | delete wfPacketSBM1; |
|
99 | 101 | delete wfPacketSBM2; |
|
100 | 102 | delete wfPacketCWF_F3; |
|
101 | 103 | } |
|
102 | 104 | |
|
103 | 105 | void MainWindow::displayNetworkInterfaces() |
|
104 | 106 | { |
|
105 | 107 | QList<QHostAddress> list = QNetworkInterface::allAddresses(); |
|
106 | 108 | this->displayOnConsole("Network interfaces:"); |
|
107 | 109 | for(int nIter=0; nIter<list.count(); nIter++) |
|
108 | 110 | { |
|
109 | 111 | this->UI->displayOnConsole(list[nIter].toString()); |
|
110 | 112 | } |
|
111 | 113 | } |
|
112 | 114 | |
|
113 | 115 | void MainWindow::listenOnTCTMPorts() |
|
114 | 116 | { |
|
115 | 117 | QString str; |
|
116 | 118 | |
|
117 | 119 | //*** |
|
118 | 120 | // TC |
|
119 | 121 | analyserSGSEServerTC->listen(QHostAddress::Any, this->UI->getTCPort()); |
|
120 | 122 | str = analyserSGSEServerTC->errorString(); |
|
121 | 123 | if (!str.isEmpty()) |
|
122 | 124 | { |
|
123 | 125 | this->displayOnConsole(str); |
|
124 | 126 | } |
|
125 | 127 | this->displayOnConsole("Listening TC on port " |
|
126 | 128 | + QString::number(this->UI->getTCPort()) |
|
127 | 129 | ); |
|
128 | 130 | |
|
129 | 131 | //*** |
|
130 | 132 | // TM |
|
131 | 133 | analyserSGSEServerTM->listen(QHostAddress::Any, this->UI->getTMPort()); |
|
132 | 134 | str = analyserSGSEServerTM->errorString(); |
|
133 | 135 | if (!str.isEmpty()) |
|
134 | 136 | { |
|
135 | 137 | this->displayOnConsole(str); |
|
136 | 138 | } |
|
137 | 139 | this->displayOnConsole("Listening TM on port " |
|
138 | 140 | + QString::number(this->UI->getTMPort()) |
|
139 | 141 | ); |
|
140 | 142 | } |
|
141 | 143 | |
|
142 | 144 | void MainWindow::testTCTMPorts() |
|
143 | 145 | { |
|
144 | 146 | if (socketTC != NULL) |
|
145 | 147 | { |
|
146 | 148 | this->displayOnConsole("TC socket *** " + socketStates.at(socketTC->state()) ); |
|
147 | 149 | } |
|
148 | 150 | else |
|
149 | 151 | { |
|
150 | 152 | this->displayOnConsole("TC socket *** not tested, (socketTC) is NULL" ); |
|
151 | 153 | } |
|
152 | 154 | if (socketTM != NULL) |
|
153 | 155 | { |
|
154 | 156 | this->displayOnConsole("TM socket *** " + socketStates.at(socketTM->state()) ); |
|
155 | 157 | } |
|
156 | 158 | else |
|
157 | 159 | { |
|
158 | 160 | this->displayOnConsole("TM socket *** not tested, (socketTM) is NULL" ); |
|
159 | 161 | } |
|
160 | 162 | } |
|
161 | 163 | |
|
162 | 164 | void MainWindow::newConnectionOnTCServer() |
|
163 | 165 | { |
|
164 | 166 | this->displayOnConsole("got new connection on TC port"); |
|
165 | 167 | socketTC = analyserSGSEServerTC->nextPendingConnection(); |
|
166 | 168 | this->displayOnConsole("TC socket *** " + socketStates.at(socketTC->state()) ); |
|
167 | 169 | connect(this->socketTC, SIGNAL(readyRead()), this, SLOT(readDataOnTCPort())); |
|
168 | 170 | } |
|
169 | 171 | |
|
170 | 172 | void MainWindow::newConnectionOnTMServer() |
|
171 | 173 | { |
|
172 | 174 | this->displayOnConsole("got new connection on TM port"); |
|
173 | 175 | socketTM = analyserSGSEServerTM->nextPendingConnection(); |
|
174 | 176 | this->displayOnConsole("TM socket *** " + socketStates.at(socketTM->state()) ); |
|
175 | 177 | connect(this->socketTM, SIGNAL(readyRead()), this, SLOT(readDataOnTMPort())); |
|
176 | 178 | |
|
177 | 179 | emit socketTMHasChanged(this->socketTM); |
|
178 | 180 | } |
|
179 | 181 | |
|
180 | 182 | void MainWindow::readDataOnTCPort() |
|
181 | 183 | { |
|
182 | 184 | bool ok; |
|
183 | 185 | int nbBytesAvailable = 0; |
|
184 | 186 | |
|
185 | 187 | nbBytesAvailable = socketTC->bytesAvailable(); |
|
186 | 188 | buffer = (char *) malloc(nbBytesAvailable); |
|
187 | 189 | socketTC->read(buffer, nbBytesAvailable); |
|
188 | 190 | |
|
189 | 191 | this->displayOnConsole("readDataOnTCPort *** " |
|
190 | 192 | + QString::number(nbBytesAvailable) |
|
191 | 193 | + " read"); |
|
192 | 194 | |
|
193 | 195 | QByteArray xmlData( buffer, nbBytesAvailable); |
|
194 | 196 | |
|
195 | 197 | free(buffer); |
|
196 | 198 | |
|
197 | 199 | sourceTC->setData( xmlData ); |
|
198 | 200 | |
|
199 | 201 | xmlReader.setContentHandler(xmlHandler); |
|
200 | 202 | xmlReader.setErrorHandler(xmlHandler); |
|
201 | 203 | |
|
202 | 204 | ok = xmlReader.parse(sourceTC); |
|
203 | 205 | if (!ok) { |
|
204 | 206 | std::cout << "Parsing failed." << std::endl; |
|
205 | 207 | } |
|
206 | 208 | else { |
|
207 | 209 | QStringList names = xmlHandler->names(); |
|
208 | 210 | QList<int> indentations = xmlHandler->indentations(); |
|
209 | 211 | |
|
210 | 212 | int items = names.count(); |
|
211 | 213 | |
|
212 | 214 | for (int i = 0; i < items; ++i) { |
|
213 | 215 | displayOnConsole( |
|
214 | 216 | names[i] |
|
215 | 217 | + " --- identations: " |
|
216 | 218 | + QString::number(indentations[i])); |
|
217 | 219 | } |
|
218 | 220 | } |
|
219 | 221 | } |
|
220 | 222 | |
|
221 | 223 | void MainWindow::readDataOnTMPort() |
|
222 | 224 | { |
|
223 | 225 | this->displayOnConsole("TM data received, begin parsing"); |
|
224 | 226 | } |
|
225 | 227 | |
|
226 | 228 | void MainWindow::readDataOnSocketEchoServer() |
|
227 | 229 | { |
|
228 | 230 | QString dataString; |
|
229 | 231 | |
|
230 | 232 | dataArray.append(socketEchoServer->readAll()); |
|
231 | 233 | // dataString = QString::fromAscii(dataArray); |
|
232 | 234 | dataString = QString::fromLatin1(dataArray); |
|
233 | 235 | this->lfrXmlParser->processIncomingStr(dataString); |
|
234 | 236 | dataArray.clear(); |
|
235 | 237 | } |
|
236 | 238 | |
|
237 | 239 | void MainWindow::displayOnConsole(QString message) |
|
238 | 240 | { |
|
239 | 241 | this->UI->displayOnConsole( message ); |
|
240 | 242 | } |
|
241 | 243 | |
|
242 | 244 | void MainWindow::initSocketStatesList() |
|
243 | 245 | { |
|
244 | 246 | socketStates.append("The socket is not connected"); |
|
245 | 247 | socketStates.append("The socket is performing a host name lookup"); |
|
246 | 248 | socketStates.append("The socket has started establishing a connection"); |
|
247 | 249 | socketStates.append("A connection is established"); |
|
248 | 250 | socketStates.append("The socket is bound to an address and port (for servers)"); |
|
249 | 251 | socketStates.append("The socket is about to close (data may still be waiting to be written)"); |
|
250 | 252 | socketStates.append("For internal use only"); |
|
251 | 253 | } |
|
252 | 254 | |
|
253 | 255 | void MainWindow::openEchoServer() |
|
254 | 256 | { |
|
255 | 257 | socketEchoServer->connectToHost(this->UI->serverTMEchoDialogBox->getIP(), |
|
256 | 258 | this->UI->spinbox_serverTMEchoPort->value()); |
|
257 | 259 | //socketEchoServer->open(); |
|
258 | 260 | } |
|
259 | 261 | |
|
260 | 262 | void MainWindow::socket_TMEcho_ServerHasChanged() |
|
261 | 263 | { |
|
262 | 264 | this->displayOnConsole("TM Echo Socket socket *** " + socketStates.at(socketEchoServer->state()) ); |
|
263 | 265 | } |
|
264 | 266 | |
|
265 | 267 | void MainWindow::buildWFAndDisplay_SWF(TMPacketToRead *packet, WFPacket *wfPacket, unsigned char num_page) |
|
266 | 268 | { |
|
267 | 269 | unsigned int i = 0; |
|
268 | 270 | static unsigned int nbSamples = 0; |
|
269 | 271 | unsigned char *data; |
|
270 | 272 | unsigned char pa_lfr_pkt_cnt; |
|
271 | 273 | unsigned char pa_lfr_pkt_nr; |
|
272 | 274 | unsigned int pa_lfr_swf_blk_nr = 0; |
|
273 | 275 | double deltaT; |
|
274 | 276 | |
|
275 | 277 | switch(num_page) |
|
276 | 278 | { |
|
277 | 279 | case 0: // F0 |
|
278 | 280 | deltaT = 1. / 24576; |
|
279 | 281 | break; |
|
280 | 282 | case 1: // F1 |
|
281 | 283 | deltaT = 1. / 4096; |
|
282 | 284 | break; |
|
283 | 285 | case 2: // F2 |
|
284 | 286 | deltaT = 1. / 256; |
|
285 | 287 | break; |
|
286 | 288 | default: |
|
287 | 289 | deltaT = 0; |
|
288 | 290 | break; |
|
289 | 291 | } |
|
290 | 292 | pa_lfr_pkt_cnt = packet->Value[22]; |
|
291 | 293 | pa_lfr_pkt_nr = packet->Value[23]; // PA_LFR_PKT_NR |
|
292 | 294 | pa_lfr_swf_blk_nr = packet->Value[30] * 256 + packet->Value[31]; // PA_LFR_SWF_BLK_NR |
|
293 | 295 | data = &packet->Value[32]; // start of the first data block; |
|
294 | 296 | |
|
295 | 297 | if (pa_lfr_pkt_nr == 1) // the acquisition time of the first packet of the snapshot is taken as starting time |
|
296 | 298 | { |
|
297 | 299 | nbSamples = 0; |
|
298 | 300 | wfPacket->coarseTime = ((packet->Value[24] & 0x7f) << 24) |
|
299 | 301 | + (packet->Value[25] << 16) |
|
300 | 302 | + (packet->Value[26] << 8) |
|
301 | 303 | + packet->Value[27]; |
|
302 | 304 | wfPacket->fineTime = (packet->Value[28] << 8) + packet->Value[29]; |
|
303 | 305 | } |
|
304 | 306 | |
|
305 | 307 | for ( i=0; i<pa_lfr_swf_blk_nr; i++ ){ |
|
306 | 308 | wfPacket->wf_v[nbSamples + i] = (short) ( (data[ (i * BLK_SIZE) ] << 8) + (data[ (i*BLK_SIZE) + 1]) ); |
|
307 | 309 | wfPacket->wf_e1[nbSamples + i] = (short) ( (data[ (i * BLK_SIZE) + 2] << 8) + (data[ (i*BLK_SIZE) + 3]) ); |
|
308 | 310 | wfPacket->wf_e2[nbSamples + i] = (short) ( (data[ (i * BLK_SIZE) + 4] << 8) + (data[ (i*BLK_SIZE) + 5]) ); |
|
309 | 311 | wfPacket->wf_b1[nbSamples + i] = (short) ( (data[ (i * BLK_SIZE) + 6] << 8) + (data[ (i*BLK_SIZE) + 7]) ); |
|
310 | 312 | wfPacket->wf_b2[nbSamples + i] = (short) ( (data[ (i * BLK_SIZE) + 8] << 8) + (data[ (i*BLK_SIZE) + 9]) ); |
|
311 | 313 | wfPacket->wf_b3[nbSamples + i] = (short) ( (data[ (i * BLK_SIZE) + 10] << 8) + (data[ (i*BLK_SIZE) + 11]) ); |
|
312 | 314 | } |
|
313 | 315 | |
|
314 | 316 | nbSamples = nbSamples + pa_lfr_swf_blk_nr; |
|
315 | 317 | |
|
316 | 318 | if (pa_lfr_pkt_nr == pa_lfr_pkt_cnt) |
|
317 | 319 | { |
|
318 | 320 | this->UI->wfDisplay->displayOnPlot(wfPacket->wf_v, num_page, 0, wfPacket->coarseTime, wfPacket->fineTime, deltaT, nbSamples); |
|
319 | 321 | this->UI->wfDisplay->displayOnPlot(wfPacket->wf_e1, num_page, 1, wfPacket->coarseTime, wfPacket->fineTime, deltaT, nbSamples); |
|
320 | 322 | this->UI->wfDisplay->displayOnPlot(wfPacket->wf_e2, num_page, 2, wfPacket->coarseTime, wfPacket->fineTime, deltaT, nbSamples); |
|
321 | 323 | this->UI->wfDisplay->displayOnPlot(wfPacket->wf_b1, num_page, 3, wfPacket->coarseTime, wfPacket->fineTime, deltaT, nbSamples); |
|
322 | 324 | this->UI->wfDisplay->displayOnPlot(wfPacket->wf_b2, num_page, 4, wfPacket->coarseTime, wfPacket->fineTime, deltaT, nbSamples); |
|
323 | 325 | this->UI->wfDisplay->displayOnPlot(wfPacket->wf_b3, num_page, 5, wfPacket->coarseTime, wfPacket->fineTime, deltaT, nbSamples); |
|
324 | 326 | } |
|
325 | 327 | } |
|
326 | 328 | |
|
327 | 329 | void MainWindow::buildWFAndDisplay_CWF_LONG_F3(TMPacketToRead *packet, WFPacket *wfPacket) |
|
328 | 330 | { |
|
329 | 331 | unsigned int i = 0; |
|
330 | 332 | unsigned int j = 0; |
|
331 | 333 | unsigned char *data; |
|
332 | 334 | static unsigned char pkt_nr = 1; |
|
333 | 335 | unsigned int blk_nr = 0; |
|
334 | 336 | static unsigned int coarseTime; |
|
335 | 337 | static unsigned int fineTime; |
|
336 | 338 | unsigned int tmpCoarseTime; |
|
337 | 339 | unsigned int tmpFineTime; |
|
338 | 340 | double deltaT; |
|
339 | 341 | double DELTA; |
|
340 | 342 | unsigned int nbData; |
|
341 | 343 | |
|
342 | 344 | deltaT = 1 / 16.; |
|
343 | 345 | |
|
344 | 346 | if (pkt_nr == 1) // the acquisition time of the first packet of the snapshot is taken as starting time |
|
345 | 347 | { |
|
346 | 348 | tmpCoarseTime = coarseTime; |
|
347 | 349 | tmpFineTime = fineTime; |
|
348 | 350 | coarseTime = ((packet->Value[22] & 0x7f) << 24) |
|
349 | 351 | + (packet->Value[23] << 16) |
|
350 | 352 | + (packet->Value[24] << 8) |
|
351 | 353 | + packet->Value[25]; |
|
352 | 354 | fineTime = (packet->Value[26] << 8) + packet->Value[27]; |
|
353 | 355 | DELTA = (coarseTime + fineTime * 1. / 65536.) |
|
354 | 356 | - (tmpCoarseTime + tmpFineTime * 1. / 65536); |
|
355 | 357 | displayOnConsole( "DELTA = " + QString::number(DELTA, 'f', 10) ); |
|
356 | 358 | } |
|
357 | 359 | blk_nr = packet->Value[28] * 256 + packet->Value[29]; // PA_LFR_CWFL3_BLK_NR |
|
358 | 360 | data = &packet->Value[30]; // start of the first data block; |
|
359 | 361 | |
|
360 | 362 | j = (pkt_nr-1) * blk_nr; |
|
361 | 363 | for ( i=0; i<blk_nr; i++ ){ |
|
362 | 364 | wfPacket->wf_v[j + i] = (short) ( (data[ (i * BLK_SIZE) ] << 8) + (data[ (i*BLK_SIZE) + 1]) ); |
|
363 | 365 | wfPacket->wf_e1[j + i] = (short) ( (data[ (i * BLK_SIZE) + 2] << 8) + (data[ (i*BLK_SIZE) + 3]) ); |
|
364 | 366 | wfPacket->wf_e2[j + i] = (short) ( (data[ (i * BLK_SIZE) + 4] << 8) + (data[ (i*BLK_SIZE) + 5]) ); |
|
365 | 367 | wfPacket->wf_b1[j + i] = (short) ( (data[ (i * BLK_SIZE) + 6] << 8) + (data[ (i*BLK_SIZE) + 7]) ); |
|
366 | 368 | wfPacket->wf_b2[j + i] = (short) ( (data[ (i * BLK_SIZE) + 8] << 8) + (data[ (i*BLK_SIZE) + 9]) ); |
|
367 | 369 | wfPacket->wf_b3[j + i] = (short) ( (data[ (i * BLK_SIZE) + 10] << 8) + (data[ (i*BLK_SIZE) + 11]) ); |
|
368 | 370 | } |
|
369 | 371 | pkt_nr = pkt_nr + 1; |
|
370 | 372 | if (pkt_nr == (NB_PACKETS_PER_GROUP_OF_CWF+1)) |
|
371 | 373 | { |
|
372 | 374 | nbData = j + blk_nr; |
|
373 | 375 | this->UI->wfPage_CWF_F3->displayOnPlot(wfPacket->wf_v, 0, coarseTime, fineTime, deltaT, nbData); |
|
374 | 376 | this->UI->wfPage_CWF_F3->displayOnPlot(wfPacket->wf_e1, 1, coarseTime, fineTime, deltaT, nbData); |
|
375 | 377 | this->UI->wfPage_CWF_F3->displayOnPlot(wfPacket->wf_e2, 2, coarseTime, fineTime, deltaT, nbData); |
|
376 | 378 | this->UI->wfPage_CWF_F3->displayOnPlot(wfPacket->wf_b1, 3, coarseTime, fineTime, deltaT, nbData); |
|
377 | 379 | this->UI->wfPage_CWF_F3->displayOnPlot(wfPacket->wf_b2, 4, coarseTime, fineTime, deltaT, nbData); |
|
378 | 380 | this->UI->wfPage_CWF_F3->displayOnPlot(wfPacket->wf_b3, 5, coarseTime, fineTime, deltaT, nbData); |
|
379 | 381 | pkt_nr = 1; |
|
380 | 382 | } |
|
381 | 383 | } |
|
382 | 384 | |
|
383 | 385 | void MainWindow::buildWFAndDisplay_CWF_F3_light(TMPacketToRead *packet, WFPacket *wfPacket) |
|
384 | 386 | { |
|
385 | 387 | unsigned int i = 0; |
|
386 | 388 | unsigned int j = 0; |
|
387 | 389 | unsigned char *data; |
|
388 | 390 | static unsigned char pkt_nr = 1; |
|
389 | 391 | unsigned int blk_nr = 0; |
|
390 | 392 | static unsigned int coarseTime; |
|
391 | 393 | static unsigned int fineTime; |
|
392 | 394 | unsigned int tmpCoarseTime; |
|
393 | 395 | unsigned int tmpFineTime; |
|
394 | 396 | double deltaT; |
|
395 | 397 | double DELTA; |
|
396 | 398 | unsigned int nbData; |
|
397 | 399 | |
|
398 | 400 | deltaT = 1 / 16.; |
|
399 | 401 | |
|
400 | 402 | if (pkt_nr == 1) // the acquisition time of the first packet of the snapshot is taken as starting time |
|
401 | 403 | { |
|
402 | 404 | tmpCoarseTime = coarseTime; |
|
403 | 405 | tmpFineTime = fineTime; |
|
404 | 406 | coarseTime = ((packet->Value[22] & 0x7f) << 24) |
|
405 | 407 | + (packet->Value[23] << 16) |
|
406 | 408 | + (packet->Value[24] << 8) |
|
407 | 409 | + packet->Value[25]; |
|
408 | 410 | fineTime = (packet->Value[26] << 8) + packet->Value[27]; |
|
409 | 411 | DELTA = (coarseTime + fineTime * 1. / 65536.) |
|
410 | 412 | - (tmpCoarseTime + tmpFineTime * 1. / 65536); |
|
411 | 413 | displayOnConsole( "DELTA = " + QString::number(DELTA, 'f', 10) ); |
|
412 | 414 | } |
|
413 | 415 | blk_nr = packet->Value[28] * 256 + packet->Value[29]; // PA_LFR_CWF3_BLK_NR |
|
414 | 416 | data = &packet->Value[30]; // start of the first data block; |
|
415 | 417 | |
|
416 | 418 | j = (pkt_nr-1) * blk_nr; |
|
417 | 419 | for ( i=0; i<blk_nr; i++ ){ |
|
418 | 420 | wfPacket->wf_v[j + i] = (short) ( (data[ (i * BLK_SIZE_CWF3_LIGHT) ] << 8) + (data[ (i*BLK_SIZE_CWF3_LIGHT) + 1]) ); |
|
419 | 421 | wfPacket->wf_e1[j + i] = (short) ( (data[ (i * BLK_SIZE_CWF3_LIGHT) + 2] << 8) + (data[ (i*BLK_SIZE_CWF3_LIGHT) + 3]) ); |
|
420 | 422 | wfPacket->wf_e2[j + i] = (short) ( (data[ (i * BLK_SIZE_CWF3_LIGHT) + 4] << 8) + (data[ (i*BLK_SIZE_CWF3_LIGHT) + 5]) ); |
|
421 | 423 | wfPacket->wf_b1[j + i] = 0; |
|
422 | 424 | wfPacket->wf_b2[j + i] = 0; |
|
423 | 425 | wfPacket->wf_b3[j + i] = 0; |
|
424 | 426 | } |
|
425 | 427 | pkt_nr = pkt_nr + 1; |
|
426 | 428 | if (pkt_nr == (NB_PACKETS_PER_GROUP_OF_CWF_LIGHT+1)) |
|
427 | 429 | { |
|
428 | 430 | nbData = j + blk_nr; |
|
429 | 431 | this->UI->wfPage_CWF_F3->displayOnPlot(wfPacket->wf_v, 0, coarseTime, fineTime, deltaT, nbData); |
|
430 | 432 | this->UI->wfPage_CWF_F3->displayOnPlot(wfPacket->wf_e1, 1, coarseTime, fineTime, deltaT, nbData); |
|
431 | 433 | this->UI->wfPage_CWF_F3->displayOnPlot(wfPacket->wf_e2, 2, coarseTime, fineTime, deltaT, nbData); |
|
432 | 434 | this->UI->wfPage_CWF_F3->displayOnPlot(wfPacket->wf_b1, 3, coarseTime, fineTime, deltaT, nbData); |
|
433 | 435 | this->UI->wfPage_CWF_F3->displayOnPlot(wfPacket->wf_b2, 4, coarseTime, fineTime, deltaT, nbData); |
|
434 | 436 | this->UI->wfPage_CWF_F3->displayOnPlot(wfPacket->wf_b3, 5, coarseTime, fineTime, deltaT, nbData); |
|
435 | 437 | pkt_nr = 1; |
|
436 | 438 | } |
|
437 | 439 | } |
|
438 | 440 | |
|
439 | 441 | void MainWindow::buildWFAndDisplay_CWF_F1(TMPacketToRead *packet, WFPacket *wfPacket) |
|
440 | 442 | { |
|
441 | 443 | unsigned int i = 0; |
|
442 | 444 | unsigned int j = 0; |
|
443 | 445 | unsigned char *data; |
|
444 | 446 | static unsigned char pkt_nr = 1; |
|
445 | 447 | unsigned int blk_nr = 0; |
|
446 | 448 | static unsigned int coarseTime; |
|
447 | 449 | static unsigned int fineTime; |
|
448 | 450 | double deltaT; |
|
449 | 451 | unsigned int nbData; |
|
450 | 452 | |
|
451 | 453 | deltaT = 1. / 4096.; |
|
452 | 454 | |
|
453 | 455 | if (pkt_nr == 1) // the acquisition time of the first packet of the snapshot is taken as starting time |
|
454 | 456 | { |
|
455 | 457 | coarseTime = ((packet->Value[22] & 0x7f) << 24) |
|
456 | 458 | + (packet->Value[23] << 16) |
|
457 | 459 | + (packet->Value[24] << 8) |
|
458 | 460 | + packet->Value[25]; |
|
459 | 461 | fineTime = (packet->Value[26] << 8) + packet->Value[27]; |
|
460 | 462 | } |
|
461 | 463 | blk_nr = packet->Value[28] * 256 + packet->Value[29]; // PA_LFR_CWF_BLK_NR |
|
462 | 464 | data = &packet->Value[30]; // start of the first data block; |
|
463 | 465 | |
|
464 | 466 | j = (pkt_nr-1) * blk_nr; |
|
465 | 467 | for ( i=0; i<blk_nr; i++ ){ |
|
466 | 468 | wfPacket->wf_v[j + i] = (short) ( (data[ (i * BLK_SIZE) ] << 8) + (data[ (i*BLK_SIZE) + 1]) ); |
|
467 | 469 | wfPacket->wf_e1[j + i] = (short) ( (data[ (i * BLK_SIZE) + 2] << 8) + (data[ (i*BLK_SIZE) + 3]) ); |
|
468 | 470 | wfPacket->wf_e2[j + i] = (short) ( (data[ (i * BLK_SIZE) + 4] << 8) + (data[ (i*BLK_SIZE) + 5]) ); |
|
469 | 471 | wfPacket->wf_b1[j + i] = (short) ( (data[ (i * BLK_SIZE) + 6] << 8) + (data[ (i*BLK_SIZE) + 7]) ); |
|
470 | 472 | wfPacket->wf_b2[j + i] = (short) ( (data[ (i * BLK_SIZE) + 8] << 8) + (data[ (i*BLK_SIZE) + 9]) ); |
|
471 | 473 | wfPacket->wf_b3[j + i] = (short) ( (data[ (i * BLK_SIZE) + 10] << 8) + (data[ (i*BLK_SIZE) + 11]) ); |
|
472 | 474 | } |
|
473 | 475 | pkt_nr = pkt_nr + 1; |
|
474 | 476 | if (pkt_nr == (NB_PACKETS_PER_GROUP_OF_CWF+1)) |
|
475 | 477 | { |
|
476 | 478 | nbData = j + blk_nr; |
|
477 | 479 | this->UI->wfPage_CWF_F1->displayOnPlot(wfPacket->wf_v, 0, coarseTime, fineTime, deltaT, nbData); |
|
478 | 480 | this->UI->wfPage_CWF_F1->displayOnPlot(wfPacket->wf_e1, 1, coarseTime, fineTime, deltaT, nbData); |
|
479 | 481 | this->UI->wfPage_CWF_F1->displayOnPlot(wfPacket->wf_e2, 2, coarseTime, fineTime, deltaT, nbData); |
|
480 | 482 | this->UI->wfPage_CWF_F1->displayOnPlot(wfPacket->wf_b1, 3, coarseTime, fineTime, deltaT, nbData); |
|
481 | 483 | this->UI->wfPage_CWF_F1->displayOnPlot(wfPacket->wf_b2, 4, coarseTime, fineTime, deltaT, nbData); |
|
482 | 484 | this->UI->wfPage_CWF_F1->displayOnPlot(wfPacket->wf_b3, 5, coarseTime, fineTime, deltaT, nbData); |
|
483 | 485 | pkt_nr = 1; |
|
484 | 486 | } |
|
485 | 487 | } |
|
486 | 488 | |
|
487 | 489 | void MainWindow::buildWFAndDisplay_CWF_F2(TMPacketToRead *packet, WFPacket *wfPacket) |
|
488 | 490 | { |
|
489 | 491 | unsigned int i = 0; |
|
490 | 492 | unsigned int j = 0; |
|
491 | 493 | unsigned char *data; |
|
492 | 494 | static unsigned char pkt_nr = 1; |
|
493 | 495 | unsigned int blk_nr = 0; |
|
494 | 496 | static unsigned int coarseTime; |
|
495 | 497 | static unsigned int fineTime; |
|
496 | 498 | double deltaT; |
|
497 | 499 | unsigned int nbData; |
|
498 | 500 | |
|
499 | 501 | deltaT = 1. / 256.; |
|
500 | 502 | |
|
501 | 503 | if (pkt_nr == 1) // the acquisition time of the first packet of the snapshot is taken as starting time |
|
502 | 504 | { |
|
503 | 505 | coarseTime = ((packet->Value[22] & 0x7f) << 24) |
|
504 | 506 | + (packet->Value[23] << 16) |
|
505 | 507 | + (packet->Value[24] << 8) |
|
506 | 508 | + packet->Value[25]; |
|
507 | 509 | fineTime = (packet->Value[26] << 8) + packet->Value[27]; |
|
508 | 510 | } |
|
509 | 511 | blk_nr = packet->Value[28] * 256 + packet->Value[29]; // PA_LFR_CWF3_BLK_NR |
|
510 | 512 | data = &packet->Value[30]; // start of the first data block; |
|
511 | 513 | |
|
512 | 514 | j = (pkt_nr-1) * blk_nr; |
|
513 | 515 | for ( i=0; i<blk_nr; i++ ){ |
|
514 | 516 | wfPacket->wf_v[j + i] = (short) ( (data[ (i * BLK_SIZE) ] << 8) + (data[ (i*BLK_SIZE) + 1]) ); |
|
515 | 517 | wfPacket->wf_e1[j + i] = (short) ( (data[ (i * BLK_SIZE) + 2] << 8) + (data[ (i*BLK_SIZE) + 3]) ); |
|
516 | 518 | wfPacket->wf_e2[j + i] = (short) ( (data[ (i * BLK_SIZE) + 4] << 8) + (data[ (i*BLK_SIZE) + 5]) ); |
|
517 | 519 | wfPacket->wf_b1[j + i] = (short) ( (data[ (i * BLK_SIZE) + 6] << 8) + (data[ (i*BLK_SIZE) + 7]) ); |
|
518 | 520 | wfPacket->wf_b2[j + i] = (short) ( (data[ (i * BLK_SIZE) + 8] << 8) + (data[ (i*BLK_SIZE) + 9]) ); |
|
519 | 521 | wfPacket->wf_b3[j + i] = (short) ( (data[ (i * BLK_SIZE) + 10] << 8) + (data[ (i*BLK_SIZE) + 11]) ); |
|
520 | 522 | } |
|
521 | 523 | pkt_nr = pkt_nr + 1; |
|
522 | 524 | if (pkt_nr == (NB_PACKETS_PER_GROUP_OF_CWF+1)) |
|
523 | 525 | { |
|
524 | 526 | nbData = j + blk_nr; |
|
525 | 527 | this->UI->wfPage_CWF_F2->displayOnPlot(wfPacket->wf_v, 0, coarseTime, fineTime, deltaT, nbData); |
|
526 | 528 | this->UI->wfPage_CWF_F2->displayOnPlot(wfPacket->wf_e1, 1, coarseTime, fineTime, deltaT, nbData); |
|
527 | 529 | this->UI->wfPage_CWF_F2->displayOnPlot(wfPacket->wf_e2, 2, coarseTime, fineTime, deltaT, nbData); |
|
528 | 530 | this->UI->wfPage_CWF_F2->displayOnPlot(wfPacket->wf_b1, 3, coarseTime, fineTime, deltaT, nbData); |
|
529 | 531 | this->UI->wfPage_CWF_F2->displayOnPlot(wfPacket->wf_b2, 4, coarseTime, fineTime, deltaT, nbData); |
|
530 | 532 | this->UI->wfPage_CWF_F2->displayOnPlot(wfPacket->wf_b3, 5, coarseTime, fineTime, deltaT, nbData); |
|
531 | 533 | pkt_nr = 1; |
|
532 | 534 | } |
|
533 | 535 | } |
|
534 | 536 | |
|
535 |
void MainWindow::build_ASM_AndDisplay_NORM |
|
|
537 | void MainWindow::build_ASM_AndDisplay_NORM(TMPacketToRead *packet, SpectraPacket *spectraPacket, | |
|
538 | double deltaF, unsigned char indiceStart, | |
|
539 | ASMPage* asmPage ) | |
|
536 | 540 | { |
|
537 | 541 | unsigned int i; |
|
538 | 542 | unsigned int j; |
|
539 | 543 | unsigned char *data; |
|
540 | 544 | unsigned char *aux; |
|
541 | 545 | unsigned char cntASM; |
|
542 | 546 | unsigned char nrASM; |
|
543 | 547 | unsigned int blkNR; |
|
544 | double deltaF; | |
|
545 | 548 | unsigned int nbData; |
|
546 | 549 | |
|
547 | 550 | cntASM = packet->Value[22]; |
|
548 | 551 | nrASM = packet->Value[23]; |
|
549 | 552 | blkNR = packet->Value[30] * 256 + packet->Value[31]; |
|
550 | 553 | |
|
551 | 554 | data = &packet->Value[32]; // start of the first data block; |
|
552 | 555 | |
|
553 | 556 | j = (nrASM-1) * blkNR; |
|
554 | 557 | for ( i=0; i<blkNR; i++ ){ |
|
555 | 558 | aux = (unsigned char*) &spectraPacket->s11[ j + i ]; // s11 is a table of float |
|
556 | 559 | aux[3] = data[ (i * 50 + 2*0 ) ]; |
|
557 | 560 | aux[2] = data[ (i * 50 + 2*0 ) + 1]; |
|
558 | 561 | aux = (unsigned char*) &spectraPacket->s22[ j + i ]; // s22 is a table of float |
|
559 | 562 | aux[3] = data[ (i * 50 + 2*9 ) ]; |
|
560 | 563 | aux[2] = data[ (i * 50 + 2*9 ) + 1]; |
|
561 | 564 | aux = (unsigned char*) &spectraPacket->s33[ j + i ]; // s33 is a table of float |
|
562 | 565 | aux[3] = data[ (i * 50 + 2*16) ]; |
|
563 | 566 | aux[2] = data[ (i * 50 + 2*16) + 1]; |
|
564 | 567 | aux = (unsigned char*) &spectraPacket->s44[ j + i ]; // s44 is a table of float |
|
565 | 568 | aux[3] = data[ (i * 50 + 2*21) ]; |
|
566 | 569 | aux[2] = data[ (i * 50 + 2*21) + 1]; |
|
567 | 570 | aux = (unsigned char*) &spectraPacket->s55[ j + i ]; // s55 is a table of float |
|
568 | 571 | aux[3] = data[ (i * 50 + 2*24) ]; |
|
569 | 572 | aux[2] = data[ (i * 50 + 2*24) + 1]; |
|
570 | 573 | } |
|
571 | 574 | |
|
572 | deltaF = 24576. / 256. ; | |
|
573 | 575 | nbData = j + blkNR; |
|
574 | 576 | if (nrASM == cntASM) |
|
575 | 577 | { |
|
576 |
|
|
|
577 |
|
|
|
578 |
|
|
|
579 |
|
|
|
580 |
|
|
|
578 | asmPage->displayOnPlot(spectraPacket->s11, 0, indiceStart, deltaF, nbData); | |
|
579 | asmPage->displayOnPlot(spectraPacket->s22, 1, indiceStart, deltaF, nbData); | |
|
580 | asmPage->displayOnPlot(spectraPacket->s33, 2, indiceStart, deltaF, nbData); | |
|
581 | asmPage->displayOnPlot(spectraPacket->s44, 3, indiceStart, deltaF, nbData); | |
|
582 | asmPage->displayOnPlot(spectraPacket->s55, 4, indiceStart, deltaF, nbData); | |
|
581 | 583 | } |
|
582 | 584 | } |
|
583 | 585 | |
|
584 | 586 | void MainWindow::resetStatistics() |
|
585 | 587 | { |
|
586 | 588 | totalOfBytes = 0; |
|
587 | 589 | totalOfPackets = 0; |
|
588 | 590 | this->UI->totalOfBytesHasChanged(totalOfBytes); |
|
589 | 591 | this->UI->totalOfPacketsHasChanged(totalOfPackets); |
|
590 | 592 | } |
|
591 | 593 | |
|
592 | 594 | //****************** |
|
593 | 595 | // packet processing |
|
594 | 596 | |
|
595 | 597 | void MainWindow::processPacketStore() |
|
596 | 598 | { |
|
597 | 599 | TMPacketToRead *packet; |
|
598 | 600 | while(!generalCCSDSPacketStore.isEmpty()) |
|
599 | 601 | { |
|
600 | 602 | packet = generalCCSDSPacketStore.takeFirst(); |
|
601 | 603 | processIncomingPacket(packet); |
|
602 | 604 | delete(packet); |
|
603 | 605 | } |
|
604 | 606 | } |
|
605 | 607 | |
|
606 | 608 | void MainWindow::processIncomingPacket(TMPacketToRead *packet) |
|
607 | 609 | { |
|
608 | 610 | totalOfBytes = totalOfBytes + packet->size; |
|
609 | 611 | totalOfPackets = totalOfPackets + 1; |
|
610 | 612 | this->UI->totalOfBytesHasChanged(totalOfBytes); |
|
611 | 613 | this->UI->totalOfPacketsHasChanged(totalOfPackets); |
|
612 | 614 | preProcessPacket(packet); |
|
613 | 615 | } |
|
614 | 616 | |
|
615 | 617 | void MainWindow::preProcessPacket(TMPacketToRead *packet) |
|
616 | 618 | { |
|
617 | 619 | unsigned char pid = 0; |
|
618 | 620 | unsigned char cat = 0; |
|
619 | 621 | unsigned char typ = 0; |
|
620 | 622 | unsigned char sub = 0; |
|
621 | 623 | unsigned int sid = 0; |
|
622 | 624 | unsigned int length = 0; |
|
623 | 625 | unsigned int coarse_t = 0; |
|
624 | 626 | unsigned int fine_t = 0; |
|
625 | 627 | |
|
626 | 628 | //********************************* |
|
627 | 629 | // get the parameters of the packet |
|
628 | 630 | pid = this->UI->tmStatistics->getPID( packet ); |
|
629 | 631 | cat = this->UI->tmStatistics->getCAT( packet ); |
|
630 | 632 | typ = this->UI->tmStatistics->getTYPE( packet ); |
|
631 | 633 | sub = this->UI->tmStatistics->getSUBTYPE( packet ); |
|
632 | 634 | length = this->UI->tmStatistics->getLENGTH( packet ); |
|
633 | 635 | coarse_t = this->UI->tmStatistics->getCoarseTime( packet ); |
|
634 | 636 | fine_t = this->UI->tmStatistics->getFineTime( packet ); |
|
635 | 637 | sid = this->UI->tmStatistics->getSID( packet, pid, cat, typ, sub ); |
|
636 | 638 | |
|
637 | 639 | this->UI->tmStatistics->updateStatistics(pid, cat, typ, sub, sid, length, coarse_t, fine_t); |
|
638 | 640 | |
|
639 | 641 | // compare length in the packet with the size of the packet |
|
640 | 642 | if ( (length + 1 + 10) != (packet->size)) |
|
641 | 643 | { |
|
642 | 644 | displayOnConsole("reception of " + QString::number(packet->size) |
|
643 | 645 | + " bytes instead of " + QString::number(length + 1 + 10)); |
|
644 | 646 | } |
|
645 | 647 | |
|
646 | 648 | //*************************************************** |
|
647 | 649 | // if the packet is an HK packet, display its content |
|
648 | 650 | if ( (pid == TM_PACKET_PID_DEFAULT) & (cat == TM_PACKET_CAT_HK) |
|
649 | 651 | & (typ == TM_TYPE_HK) & (sub == TM_SUBTYPE_HK) ) |
|
650 | 652 | { |
|
651 | 653 | this->UI->hkDisplay->displayPacket(packet); |
|
652 | 654 | } |
|
653 | 655 | |
|
654 | 656 | //************************************************************** |
|
655 | 657 | // if the packet is a parameter dump packet, display its content |
|
656 | 658 | if ( (pid == TM_PACKET_PID_DEFAULT) & (cat == TM_PACKET_CAT_PARAMETER_DUMP) |
|
657 | 659 | & (typ == TM_TYPE_PARAMETER_DUMP) & (sub == TM_SUBTYPE_PARAMETER_DUMP) ) |
|
658 | 660 | { |
|
659 | 661 | this->UI->parameterDump->updateParameterDump(packet); |
|
660 | 662 | } |
|
661 | 663 | |
|
662 | 664 | //**************************************** |
|
663 | 665 | // if the packet is a waveform, display it |
|
664 | 666 | if ( (typ == TM_TYPE_LFR_SCIENCE) & (sub == TM_SUBTYPE_LFR_SCIENCE) ) |
|
665 | 667 | { |
|
666 | 668 | //sid = packet->Value[20]; // SID |
|
667 | 669 | switch (sid){ |
|
668 | 670 | case SID_NORMAL_SWF_F0: |
|
669 | 671 | buildWFAndDisplay_SWF(packet, wfPacketNormal[0], 0); |
|
670 | 672 | break; |
|
671 | 673 | case SID_NORMAL_SWF_F1: |
|
672 | 674 | buildWFAndDisplay_SWF(packet, wfPacketNormal[1], 1); |
|
673 | 675 | break; |
|
674 | 676 | case SID_NORMAL_SWF_F2: |
|
675 | 677 | buildWFAndDisplay_SWF(packet, wfPacketNormal[2], 2); |
|
676 | 678 | break; |
|
677 | 679 | case SID_NORMAL_CWF_F3: |
|
678 | 680 | buildWFAndDisplay_CWF_F3_light(packet, wfPacketCWF_F3); |
|
679 | 681 | break; |
|
680 | 682 | case SID_NORMAL_CWF_LONG_F3: |
|
681 | 683 | buildWFAndDisplay_CWF_LONG_F3(packet, wfPacketCWF_F3); |
|
682 | 684 | break; |
|
683 | 685 | case SID_BURST_CWF_F2: |
|
684 | 686 | buildWFAndDisplay_CWF_F2(packet, wfPacketBurst); |
|
685 | 687 | break; |
|
686 | 688 | case SID_SBM1_CWF_F1: |
|
687 | 689 | buildWFAndDisplay_CWF_F1(packet, wfPacketSBM1); |
|
688 | 690 | break; |
|
689 | 691 | case SID_SBM2_CWF_F2: |
|
690 | 692 | buildWFAndDisplay_CWF_F2(packet, wfPacketSBM2); |
|
691 | 693 | break; |
|
692 | 694 | case SID_NORMAL_ASM_F0: |
|
693 |
build_ASM_AndDisplay_NORM |
|
|
695 | build_ASM_AndDisplay_NORM(packet, spectraPacketNormalSpectrumF0, 4096./256., ASM_F1_INDICE_START, this->UI->asmPage_F0 ); | |
|
696 | break; | |
|
697 | case SID_NORMAL_ASM_F1: | |
|
698 | build_ASM_AndDisplay_NORM(packet, spectraPacketNormalSpectrumF1, 4096./256., ASM_F1_INDICE_START, this->UI->asmPage_F1 ); | |
|
699 | break; | |
|
700 | case SID_NORMAL_ASM_F2: | |
|
701 | build_ASM_AndDisplay_NORM(packet, spectraPacketNormalSpectrumF2, 256./256., ASM_F2_INDICE_START, this->UI->asmPage_F2 ); | |
|
694 | 702 | break; |
|
695 | 703 | } |
|
696 | 704 | } |
|
697 | 705 | } |
|
698 | 706 | |
|
699 | 707 | //****************** |
|
700 | 708 | // general functions |
|
701 | 709 | |
|
702 | 710 | void MainWindow::readSettings() |
|
703 | 711 | { |
|
704 | 712 | QSettings settings("lpp", "lfrsgse"); |
|
705 | 713 | echoBridgeIP0 = (unsigned char) settings.value("echoBridgeIP0", 127).toInt(); |
|
706 | 714 | echoBridgeIP1 = (unsigned char) settings.value("echoBridgeIP1", 0).toInt(); |
|
707 | 715 | echoBridgeIP2 = (unsigned char) settings.value("echoBridgeIP2", 0).toInt(); |
|
708 | 716 | echoBridgeIP3 = (unsigned char) settings.value("echoBridgeIP3", 1).toInt(); |
|
709 | 717 | } |
|
710 | 718 | |
|
711 | 719 | void MainWindow::writeSettings() |
|
712 | 720 | { |
|
713 | 721 | QSettings settings("lpp", "lfrsgse"); |
|
714 | 722 | settings.setValue("echoBridgeIP0", this->UI->serverTMEchoDialogBox->get_addressPart1()); |
|
715 | 723 | settings.setValue("echoBridgeIP1", this->UI->serverTMEchoDialogBox->get_addressPart2()); |
|
716 | 724 | settings.setValue("echoBridgeIP2", this->UI->serverTMEchoDialogBox->get_addressPart3()); |
|
717 | 725 | settings.setValue("echoBridgeIP3", this->UI->serverTMEchoDialogBox->get_addressPart4()); |
|
718 | 726 | } |
|
719 | 727 | |
|
720 | 728 | void MainWindow::closeEvent(QCloseEvent *) |
|
721 | 729 | { |
|
722 | 730 | writeSettings(); |
|
723 | 731 | } |
@@ -1,113 +1,116 | |||
|
1 | 1 | #ifndef MAINWINDOW_H |
|
2 | 2 | #define MAINWINDOW_H |
|
3 | 3 | |
|
4 | 4 | #include <QTcpServer> |
|
5 | 5 | #include <QTcpSocket> |
|
6 | 6 | #include <QXmlSimpleReader> |
|
7 | 7 | #include <QSettings> |
|
8 | 8 | #include <QMainWindow> |
|
9 | 9 | |
|
10 | 10 | #include <lfrxmlhandler.h> |
|
11 | 11 | #include <lfrxmlwriter.h> |
|
12 | 12 | #include <mainwindowui.h> |
|
13 | 13 | #include <spectrapacket.h> |
|
14 | 14 | |
|
15 | 15 | #include "tmpackettoread.h" |
|
16 | 16 | #include "wfpacket.h" |
|
17 | 17 | #include "lfrxmlparser.h" |
|
18 | 18 | |
|
19 | 19 | class MainWindow : public QMainWindow |
|
20 | 20 | { |
|
21 | 21 | Q_OBJECT |
|
22 | 22 | |
|
23 | 23 | public: |
|
24 | 24 | MainWindow(QWidget *parent = 0); |
|
25 | 25 | ~MainWindow(); |
|
26 | 26 | |
|
27 | 27 | void displayNetworkInterfaces(); |
|
28 | 28 | void initSocketStatesList(); |
|
29 | 29 | // |
|
30 | 30 | void preProcessPacket(TMPacketToRead *packet); |
|
31 | 31 | unsigned char getPID(TMPacketToRead *packet); |
|
32 | 32 | unsigned char getCAT(TMPacketToRead *packet); |
|
33 | 33 | unsigned char getTYPE(TMPacketToRead *packet); |
|
34 | 34 | unsigned char getSUBTYPE(TMPacketToRead *packet); |
|
35 | 35 | unsigned int getLENGTH(TMPacketToRead *packet); |
|
36 | 36 | unsigned int getCoarseTime(TMPacketToRead *packet); |
|
37 | 37 | unsigned int getFineTime(TMPacketToRead *packet); |
|
38 | 38 | unsigned int getSID(TMPacketToRead *packet, unsigned char pid, unsigned char cat, unsigned char typ, unsigned char sub); |
|
39 | 39 | // |
|
40 | 40 | void buildWFAndDisplay_SWF(TMPacketToRead *packet, WFPacket *wfPacket, unsigned char num_page); |
|
41 | 41 | void buildWFAndDisplay_CWF_LONG_F3(TMPacketToRead *packet, WFPacket *wfPacket); |
|
42 | 42 | void buildWFAndDisplay_CWF_F3_light(TMPacketToRead *packet, WFPacket *wfPacket); |
|
43 | 43 | void buildWFAndDisplayBurst(TMPacketToRead *packet, WFPacket *wfPacket); |
|
44 | 44 | void buildWFAndDisplay_CWF_F1(TMPacketToRead *packet, WFPacket *wfPacket); |
|
45 | 45 | void buildWFAndDisplay_CWF_F2(TMPacketToRead *packet, WFPacket *wfPacket); |
|
46 | 46 | void build_ASM_AndDisplay_NORM_F0(TMPacketToRead *packet, SpectraPacket *spectraPacket); |
|
47 | void build_ASM_AndDisplay_NORM(TMPacketToRead *packet, SpectraPacket *spectraPacket, double deltaF, unsigned char indiceStart, ASMPage *asmPage); | |
|
47 | 48 | |
|
48 | 49 | protected: |
|
49 | 50 | void closeEvent(QCloseEvent *); |
|
50 | 51 | |
|
51 | 52 | private: |
|
52 | 53 | void readSettings(); |
|
53 | 54 | void writeSettings(); |
|
54 | 55 | unsigned char echoBridgeIP0; |
|
55 | 56 | unsigned char echoBridgeIP1; |
|
56 | 57 | unsigned char echoBridgeIP2; |
|
57 | 58 | unsigned char echoBridgeIP3; |
|
58 | 59 | |
|
59 | 60 | QByteArray dataArray; |
|
60 | 61 | |
|
61 | 62 | QList<TMPacketToRead*> generalCCSDSPacketStore; |
|
62 | 63 | |
|
63 | 64 | QTcpServer *analyserSGSEServerTC; |
|
64 | 65 | QTcpServer *analyserSGSEServerTM; |
|
65 | 66 | QTcpSocket *socketTC; |
|
66 | 67 | QTcpSocket *socketTM; |
|
67 | 68 | QTcpSocket *socketEchoServer; |
|
68 | 69 | |
|
69 | 70 | unsigned int totalOfBytes; |
|
70 | 71 | unsigned int totalOfPackets; |
|
71 | 72 | |
|
72 | 73 | QXmlSimpleReader xmlReader; |
|
73 | 74 | QXmlInputSource *sourceTC; |
|
74 | 75 | LFRXmlHandler *xmlHandler; |
|
75 | 76 | LFRXmlParser *lfrXmlParser; |
|
76 | 77 | |
|
77 | 78 | QList<QString> socketStates; |
|
78 | 79 | |
|
79 | 80 | char *buffer; |
|
80 | 81 | |
|
81 | 82 | MainWindowUI *UI; |
|
82 | 83 | |
|
83 | 84 | LFRXmlWriter *lfrXmlWriter; |
|
84 | 85 | |
|
85 | 86 | WFPacket *wfPacketNormal[4]; |
|
86 | 87 | WFPacket *wfPacketBurst; |
|
87 | 88 | WFPacket *wfPacketSBM1; |
|
88 | 89 | WFPacket *wfPacketSBM2; |
|
89 | 90 | WFPacket *wfPacketCWF_F3; |
|
90 | 91 | SpectraPacket *spectraPacketNormalSpectrumF0; |
|
92 | SpectraPacket *spectraPacketNormalSpectrumF1; | |
|
93 | SpectraPacket *spectraPacketNormalSpectrumF2; | |
|
91 | 94 | |
|
92 | 95 | bool parsingContinue; |
|
93 | 96 | |
|
94 | 97 | signals: |
|
95 | 98 | void socketTMHasChanged(QTcpSocket *socket); |
|
96 | 99 | |
|
97 | 100 | public slots: |
|
98 | 101 | void displayOnConsole(QString message); |
|
99 | 102 | void listenOnTCTMPorts(); |
|
100 | 103 | void testTCTMPorts(); |
|
101 | 104 | void newConnectionOnTCServer(); |
|
102 | 105 | void newConnectionOnTMServer(); |
|
103 | 106 | void readDataOnTCPort(); |
|
104 | 107 | void readDataOnTMPort(); |
|
105 | 108 | void readDataOnSocketEchoServer(); |
|
106 | 109 | void openEchoServer(); |
|
107 | 110 | void socket_TMEcho_ServerHasChanged(); |
|
108 | 111 | void processIncomingPacket(TMPacketToRead *packet); |
|
109 | 112 | void resetStatistics(); |
|
110 | 113 | void processPacketStore(); |
|
111 | 114 | }; |
|
112 | 115 | |
|
113 | 116 | #endif // MAINWINDOW_H |
@@ -1,203 +1,219 | |||
|
1 | 1 | #include "mainwindowui.h" |
|
2 | 2 | |
|
3 | 3 | MainWindowUI::MainWindowUI(QWidget *parent) : |
|
4 | 4 | QWidget(parent) |
|
5 | 5 | { |
|
6 | 6 | label_serverTMEcho = new QLabel(tr("TM Echo Server address")); |
|
7 | 7 | label_serverTMEchoPort = new QLabel(tr("TM Echo Server Port")); |
|
8 | 8 | label_TMServerPort = new QLabel(tr("TM Server Port:")); |
|
9 | 9 | label_TCServerPort = new QLabel(tr("TC Server Port:")); |
|
10 | 10 | label_currentTCTMServer = new QLabel(tr("Current IP address:")); |
|
11 | 11 | label_currentTCTMServerIP = new QLabel(tr("-")); |
|
12 | 12 | label_totalOfBytes = new QLabel(tr("Received Bytes: -")); |
|
13 | 13 | label_totalOfPackets = new QLabel(tr("Received Packets: -")); |
|
14 | 14 | |
|
15 | 15 | console = new QTextEdit(); |
|
16 | 16 | |
|
17 | 17 | spwTabWidget = new QTabWidget(); |
|
18 | 18 | spwTabWidgetPage0 = new QWidget(); |
|
19 | 19 | spwTabWidgetPage1 = new QWidget(); |
|
20 | 20 | spwTabWidgetPage2 = new QWidget(); |
|
21 | 21 | spwTabWidgetPage3 = new QWidget(); |
|
22 | 22 | |
|
23 | 23 | tmStatistics = new TMStatistics; |
|
24 | 24 | |
|
25 | 25 | wfDisplay = new WFDisplay(0, 2048, 2048, 15000); |
|
26 | 26 | wfPage_CWF_F1 = new WFPage(0, 8 * BLK_NR_CWF, 8 * BLK_NR_CWF, 15000); |
|
27 | 27 | wfPage_CWF_F2 = new WFPage(0, 8 * BLK_NR_CWF, 8 * BLK_NR_CWF, 15000); |
|
28 | 28 | wfPage_CWF_F3 = new WFPage(0, 8 * BLK_NR_CWF, 8 * BLK_NR_CWF, 15000); |
|
29 | 29 | asmPage_F0 = new ASMPage(0, NB_BINS_PER_ASM_F0, NB_BINS_PER_ASM_F0, 15000); |
|
30 | asmPage_F1 = new ASMPage(0, NB_BINS_PER_ASM_F1, NB_BINS_PER_ASM_F1, 15000); | |
|
31 | asmPage_F2 = new ASMPage(0, NB_BINS_PER_ASM_F2, NB_BINS_PER_ASM_F2, 15000); | |
|
30 | 32 | |
|
31 | 33 | wfPage_CWF_F1->pageTitle = "SBM1_CWF_F1"; |
|
32 | 34 | wfPage_CWF_F2->pageTitle = "SBM2_CWF_F2"; |
|
33 | 35 | wfPage_CWF_F3->pageTitle = "NORM_CWF_F3"; |
|
34 | 36 | asmPage_F0->pageTitle = "ASM_F0"; |
|
37 | asmPage_F1->pageTitle = "ASM_F1"; | |
|
38 | asmPage_F2->pageTitle = "ASM_F2"; | |
|
35 | 39 | hkDisplay = new HKDisplay(); |
|
36 | 40 | recordPage = new RecordPage; |
|
37 | 41 | |
|
38 | 42 | spinbox_TMServerPort = new QSpinBox(); |
|
39 | 43 | spinbox_TCServerPort = new QSpinBox(); |
|
40 | 44 | spinbox_serverTMEchoPort = new QSpinBox(); |
|
41 | 45 | spinbox_TMServerPort->setRange(59000, 65535); |
|
42 | 46 | spinbox_TCServerPort->setRange(59001, 65535); |
|
43 | 47 | spinbox_serverTMEchoPort->setRange(59002, 65535); |
|
44 | 48 | |
|
45 | 49 | button_openServerTCTM = new QPushButton(tr("Open TC / TM Ports")); |
|
46 | 50 | button_testServerTCTM = new QPushButton(tr("Test TC / TM Ports")); |
|
47 | 51 | button_openSocketEchoServer = new QPushButton(tr("Open Echo Server")); |
|
48 | 52 | button_TCAcknowledgement = new QPushButton(tr("send TC Acknowledgement")); |
|
49 | 53 | button_TCRejection = new QPushButton(tr("send TC rejection")); |
|
50 | 54 | button_GSEHK = new QPushButton(tr("send GSE HK")); |
|
51 | 55 | button_clearConsole = new QPushButton(tr("Clear console")); |
|
52 | 56 | button_resetStatistics = new QPushButton(tr("Reset statistics")); |
|
53 | 57 | |
|
54 | 58 | serverTMEchoDialogBox = new QIPDialogBox(); |
|
55 | 59 | serverTMEchoDialogBox->setIP(127, 0, 0, 1); |
|
56 | 60 | |
|
57 | 61 | groupbox_TMEcho = new QGroupBox(tr("TM Echo Server")); |
|
58 | 62 | groupbox_ports = new QGroupBox(tr("Ports for the TM and TC Servers")); |
|
59 | 63 | groupbox_TMToForeignGSETester = new QGroupBox(tr("Send TM to the foreign GSE tester")); |
|
60 | 64 | |
|
61 | 65 | layout_TMEcho = new QVBoxLayout(); |
|
62 | 66 | layout_overallLayout = new QVBoxLayout(); |
|
63 | 67 | layout_ports = new QGridLayout(); |
|
64 | 68 | layout_TMToForeignGSETester = new QVBoxLayout(); |
|
65 | 69 | mainLayout = new QGridLayout(); |
|
66 | 70 | |
|
67 | 71 | parameterDump = new ParameterDump(); |
|
68 | 72 | |
|
69 | 73 | layout_TMEcho->addWidget(label_serverTMEcho); |
|
70 | 74 | layout_TMEcho->addWidget(serverTMEchoDialogBox); |
|
71 | 75 | layout_TMEcho->addWidget(label_serverTMEchoPort); |
|
72 | 76 | layout_TMEcho->addWidget(spinbox_serverTMEchoPort); |
|
73 | 77 | layout_TMEcho->addWidget(button_openSocketEchoServer); |
|
74 | 78 | layout_TMEcho->addWidget(label_totalOfPackets); |
|
75 | 79 | layout_TMEcho->addWidget(label_totalOfBytes); |
|
76 | 80 | layout_TMEcho->addWidget(button_resetStatistics); |
|
77 | 81 | groupbox_TMEcho->setLayout(layout_TMEcho); |
|
78 | 82 | |
|
79 | 83 | layout_ports->addWidget(label_TMServerPort, 0, 0, 1, 1); |
|
80 | 84 | layout_ports->addWidget(spinbox_TMServerPort, 0, 1, 1, 1); |
|
81 | 85 | layout_ports->addWidget(label_TCServerPort, 1, 0, 1, 1); |
|
82 | 86 | layout_ports->addWidget(spinbox_TCServerPort, 1, 1, 1, 1); |
|
83 | 87 | layout_ports->addWidget(button_openServerTCTM, 2, 0, 1, 2); |
|
84 | 88 | layout_ports->addWidget(button_testServerTCTM, 3, 0, 1, 2); |
|
85 | 89 | groupbox_ports->setLayout(layout_ports); |
|
86 | 90 | |
|
87 | 91 | layout_TMToForeignGSETester->addWidget(button_TCAcknowledgement); |
|
88 | 92 | layout_TMToForeignGSETester->addWidget(button_TCRejection); |
|
89 | 93 | layout_TMToForeignGSETester->addWidget(button_GSEHK); |
|
90 | 94 | groupbox_TMToForeignGSETester->setLayout(layout_TMToForeignGSETester); |
|
91 | 95 | |
|
92 | 96 | mainLayout->addWidget(groupbox_TMEcho, 0, 0, 1, 1); |
|
93 | 97 | mainLayout->addWidget(button_clearConsole, 1, 0, 1, 1); |
|
94 | 98 | mainLayout->addWidget(console, 0, 1, 2, 1); |
|
95 | 99 | mainLayout->addWidget(groupbox_ports, 2, 0, 1, 1); |
|
96 | 100 | mainLayout->addWidget(groupbox_TMToForeignGSETester, 2, 1, 1, 1); |
|
97 | 101 | mainLayout->setColumnStretch(2, 1); |
|
98 | 102 | mainLayout->setRowStretch(3, 1); |
|
99 | 103 | |
|
100 | 104 | spwTabWidget->addTab(spwTabWidgetPage0, tr("Connection")); |
|
101 | 105 | spwTabWidget->addTab(spwTabWidgetPage1, tr("TM Statistics")); |
|
102 | 106 | spwTabWidget->addTab(spwTabWidgetPage3, tr("HK")); |
|
103 | 107 | spwTabWidget->addTab(parameterDump, tr("DUMP")); |
|
104 | 108 | spwTabWidget->addTab(recordPage, tr("REC")); |
|
105 | 109 | spwTabWidget->addTab(spwTabWidgetPage2, tr("WFRM NORM")); |
|
106 | 110 | spwTabWidget->addTab( wfPage_CWF_F1, tr("CWF_F1")); |
|
107 | 111 | spwTabWidget->addTab( wfPage_CWF_F2, tr("CWF_F2")); |
|
108 | 112 | spwTabWidget->addTab( wfPage_CWF_F3, tr("CWF_F3")); |
|
109 | 113 | spwTabWidget->addTab( asmPage_F0, tr("ASM_F0")); |
|
114 | spwTabWidget->addTab( asmPage_F1, tr("ASM_F1")); | |
|
115 | spwTabWidget->addTab( asmPage_F2, tr("ASM_F2")); | |
|
110 | 116 | |
|
111 | 117 | spwTabWidgetPage0->setLayout(mainLayout); |
|
112 | 118 | spwTabWidgetPage1->setLayout(tmStatistics->layout()); |
|
113 | 119 | spwTabWidgetPage2->setLayout(wfDisplay->layout()); |
|
114 | 120 | spwTabWidgetPage3->setLayout(hkDisplay->layout()); |
|
115 | 121 | |
|
116 | 122 | layout_overallLayout->addWidget(spwTabWidget); |
|
117 | 123 | |
|
118 | 124 | this->setLayout(layout_overallLayout); |
|
119 | 125 | |
|
120 | 126 | connect(this->button_clearConsole, SIGNAL(clicked()), this, SLOT(clearConsole())); |
|
121 | 127 | |
|
122 | 128 | // SWF_F0 |
|
123 | 129 | connect(this->recordPage, SIGNAL(signal_store_swf_f0()), |
|
124 | 130 | this->wfDisplay->page_f0, SLOT(storeWfrm())); |
|
125 | 131 | connect(this->recordPage, SIGNAL(signal_defaultStorageDirectoryUpdated(QString)), |
|
126 | 132 | this->wfDisplay->page_f0, SLOT(setDefaultStorageDirectory(QString))); |
|
127 | 133 | // SWF_F1 |
|
128 | 134 | connect(this->recordPage, SIGNAL(signal_store_swf_f1()), |
|
129 | 135 | this->wfDisplay->page_f1, SLOT(storeWfrm())); |
|
130 | 136 | connect(this->recordPage, SIGNAL(signal_defaultStorageDirectoryUpdated(QString)), |
|
131 | 137 | this->wfDisplay->page_f1, SLOT(setDefaultStorageDirectory(QString))); |
|
132 | 138 | // SWF_F2 |
|
133 | 139 | connect(this->recordPage, SIGNAL(signal_store_swf_f2()), |
|
134 | 140 | this->wfDisplay->page_f2, SLOT(storeWfrm())); |
|
135 | 141 | connect(this->recordPage, SIGNAL(signal_defaultStorageDirectoryUpdated(QString)), |
|
136 | 142 | this->wfDisplay->page_f2, SLOT(setDefaultStorageDirectory(QString))); |
|
137 | 143 | // CWF_F1 |
|
138 | 144 | connect(this->recordPage, SIGNAL(signal_store_cwf_f1()), |
|
139 | 145 | this->wfPage_CWF_F1, SLOT(storeWfrm())); |
|
140 | 146 | connect(this->recordPage, SIGNAL(signal_defaultStorageDirectoryUpdated(QString)), |
|
141 | 147 | this->wfPage_CWF_F1, SLOT(setDefaultStorageDirectory(QString))); |
|
142 | 148 | // CWF_F2 |
|
143 | 149 | connect(this->recordPage, SIGNAL(signal_store_cwf_f2()), |
|
144 | 150 | this->wfPage_CWF_F2, SLOT(storeWfrm())); |
|
145 | 151 | connect(this->recordPage, SIGNAL(signal_defaultStorageDirectoryUpdated(QString)), |
|
146 | 152 | this->wfPage_CWF_F2, SLOT(setDefaultStorageDirectory(QString))); |
|
147 | 153 | // CWF_F3 |
|
148 | 154 | connect(this->recordPage, SIGNAL(signal_store_cwf_f3()), |
|
149 | 155 | this->wfPage_CWF_F3, SLOT(storeWfrm())); |
|
150 | 156 | connect(this->recordPage, SIGNAL(signal_defaultStorageDirectoryUpdated(QString)), |
|
151 | 157 | this->wfPage_CWF_F3, SLOT(setDefaultStorageDirectory(QString))); |
|
152 | 158 | // ASM_F0 |
|
153 | 159 | connect(this->recordPage, SIGNAL(signal_store_asm_f0()), |
|
154 | 160 | this->asmPage_F0, SLOT(storeWfrm())); |
|
155 | 161 | connect(this->recordPage, SIGNAL(signal_defaultStorageDirectoryUpdated(QString)), |
|
156 | 162 | this->asmPage_F0, SLOT(setDefaultStorageDirectory(QString))); |
|
163 | // ASM_F1 | |
|
164 | connect(this->recordPage, SIGNAL(signal_store_asm_f1()), | |
|
165 | this->asmPage_F1, SLOT(storeWfrm())); | |
|
166 | connect(this->recordPage, SIGNAL(signal_defaultStorageDirectoryUpdated(QString)), | |
|
167 | this->asmPage_F1, SLOT(setDefaultStorageDirectory(QString))); | |
|
168 | // ASM_F2 | |
|
169 | connect(this->recordPage, SIGNAL(signal_store_asm_f2()), | |
|
170 | this->asmPage_F2, SLOT(storeWfrm())); | |
|
171 | connect(this->recordPage, SIGNAL(signal_defaultStorageDirectoryUpdated(QString)), | |
|
172 | this->asmPage_F2, SLOT(setDefaultStorageDirectory(QString))); | |
|
157 | 173 | |
|
158 | 174 | emit this->recordPage->signal_defaultStorageDirectoryUpdated(this->recordPage->defaultStorageDirectory); |
|
159 | 175 | } |
|
160 | 176 | |
|
161 | 177 | QString MainWindowUI::getTMEchoServerAddress() |
|
162 | 178 | { |
|
163 | 179 | return(serverTMEchoDialogBox->getIP()); |
|
164 | 180 | } |
|
165 | 181 | |
|
166 | 182 | void MainWindowUI::setTCTMServerAddressIP(QString address) |
|
167 | 183 | { |
|
168 | 184 | label_currentTCTMServerIP->setText(address); |
|
169 | 185 | } |
|
170 | 186 | |
|
171 | 187 | int MainWindowUI::getTMPort() |
|
172 | 188 | { |
|
173 | 189 | return spinbox_TMServerPort->value(); |
|
174 | 190 | } |
|
175 | 191 | |
|
176 | 192 | int MainWindowUI::getTCPort() |
|
177 | 193 | { |
|
178 | 194 | return spinbox_TCServerPort->value(); |
|
179 | 195 | } |
|
180 | 196 | |
|
181 | 197 | void MainWindowUI::displayOnConsole(QString message) |
|
182 | 198 | { |
|
183 | 199 | console->append(message); |
|
184 | 200 | } |
|
185 | 201 | |
|
186 | 202 | void MainWindowUI::clearConsole() |
|
187 | 203 | { |
|
188 | 204 | console->clear(); |
|
189 | 205 | } |
|
190 | 206 | |
|
191 | 207 | void MainWindowUI::totalOfBytesHasChanged(unsigned int nbBytes) |
|
192 | 208 | { |
|
193 | 209 | label_totalOfBytes->setText( |
|
194 | 210 | "Received Bytes: " |
|
195 | 211 | + QString::number(nbBytes)); |
|
196 | 212 | } |
|
197 | 213 | |
|
198 | 214 | void MainWindowUI::totalOfPacketsHasChanged(unsigned int nbPackets) |
|
199 | 215 | { |
|
200 | 216 | label_totalOfPackets->setText( |
|
201 | 217 | "Received Packets: " |
|
202 | 218 | + QString::number(nbPackets)); |
|
203 | 219 | } |
@@ -1,104 +1,106 | |||
|
1 | 1 | #ifndef MAINWINDOWUI_H |
|
2 | 2 | #define MAINWINDOWUI_H |
|
3 | 3 | |
|
4 | 4 | #include <QWidget> |
|
5 | 5 | #include <qipdialogbox.h> |
|
6 | 6 | #include <QLabel> |
|
7 | 7 | #include <QPushButton> |
|
8 | 8 | #include <QGridLayout> |
|
9 | 9 | #include <QVBoxLayout> |
|
10 | 10 | #include <QGroupBox> |
|
11 | 11 | #include <QSpinBox> |
|
12 | 12 | #include <QTextEdit> |
|
13 | 13 | #include <QTabWidget> |
|
14 | 14 | |
|
15 | 15 | #include <wfdisplay.h> |
|
16 | 16 | #include <pagespectra.h> |
|
17 | 17 | #include <asmpage.h> |
|
18 | 18 | #include <parameterdump.h> |
|
19 | 19 | |
|
20 | 20 | #include "tmstatistics.h" |
|
21 | 21 | #include "hkdisplay.h" |
|
22 | 22 | #include "recordpage.h" |
|
23 | 23 | |
|
24 | 24 | class MainWindowUI : public QWidget |
|
25 | 25 | { |
|
26 | 26 | Q_OBJECT |
|
27 | 27 | public: |
|
28 | 28 | explicit MainWindowUI(QWidget *parent = 0); |
|
29 | 29 | |
|
30 | 30 | void setTCTMServerAddressIP(QString address); |
|
31 | 31 | QString getTMEchoServerAddress(); |
|
32 | 32 | int getTMPort(); |
|
33 | 33 | int getTCPort(); |
|
34 | 34 | void displayOnConsole(QString message); |
|
35 | 35 | |
|
36 | 36 | QTabWidget *spwTabWidget; |
|
37 | 37 | QWidget* spwTabWidgetPage0; |
|
38 | 38 | QWidget* spwTabWidgetPage1; |
|
39 | 39 | QWidget* spwTabWidgetPage2; |
|
40 | 40 | QWidget* spwTabWidgetPage3; |
|
41 | 41 | |
|
42 | 42 | TMStatistics* tmStatistics; |
|
43 | 43 | |
|
44 | 44 | WFDisplay* wfDisplay; |
|
45 | 45 | WFPage* wfPage_CWF_F1; |
|
46 | 46 | WFPage* wfPage_CWF_F2; |
|
47 | 47 | WFPage* wfPage_CWF_F3; |
|
48 | 48 | ASMPage* asmPage_F0; |
|
49 | ASMPage* asmPage_F1; | |
|
50 | ASMPage* asmPage_F2; | |
|
49 | 51 | HKDisplay* hkDisplay; |
|
50 | 52 | RecordPage* recordPage; |
|
51 | 53 | |
|
52 | 54 | QWidget* widget_spectrogram; |
|
53 | 55 | |
|
54 | 56 | ParameterDump* parameterDump; |
|
55 | 57 | |
|
56 | 58 | QPushButton *button_openServerTCTM; |
|
57 | 59 | QPushButton *button_testServerTCTM; |
|
58 | 60 | QPushButton *button_openSocketEchoServer; |
|
59 | 61 | QPushButton *button_TCAcknowledgement; |
|
60 | 62 | QPushButton *button_TCRejection; |
|
61 | 63 | QPushButton *button_GSEHK; |
|
62 | 64 | QPushButton *button_clearConsole; |
|
63 | 65 | QPushButton *button_resetStatistics; |
|
64 | 66 | |
|
65 | 67 | QIPDialogBox *serverTMEchoDialogBox; |
|
66 | 68 | |
|
67 | 69 | QSpinBox *spinbox_serverTMEchoPort; |
|
68 | 70 | |
|
69 | 71 | signals: |
|
70 | 72 | |
|
71 | 73 | public slots: |
|
72 | 74 | void clearConsole(); |
|
73 | 75 | void totalOfBytesHasChanged(unsigned int nbBytes); |
|
74 | 76 | void totalOfPacketsHasChanged(unsigned int nbPackets); |
|
75 | 77 | |
|
76 | 78 | private: |
|
77 | 79 | QLabel *label_serverTMEcho; |
|
78 | 80 | QLabel *label_serverTMEchoPort; |
|
79 | 81 | QLabel *label_TMServerPort; |
|
80 | 82 | QLabel *label_TCServerPort; |
|
81 | 83 | QLabel *label_currentTCTMServer; |
|
82 | 84 | QLabel *label_currentTCTMServerIP; |
|
83 | 85 | QLabel *label_totalOfBytes; |
|
84 | 86 | QLabel *label_totalOfPackets; |
|
85 | 87 | |
|
86 | 88 | QTextEdit *console; |
|
87 | 89 | |
|
88 | 90 | QSpinBox *spinbox_TMServerPort; |
|
89 | 91 | QSpinBox *spinbox_TCServerPort; |
|
90 | 92 | |
|
91 | 93 | QGroupBox *groupbox_TMEcho; |
|
92 | 94 | QGroupBox *groupbox_ports; |
|
93 | 95 | QGroupBox *groupbox_TMToForeignGSETester; |
|
94 | 96 | |
|
95 | 97 | QVBoxLayout *layout_TMEcho; |
|
96 | 98 | QVBoxLayout *layout_TMToForeignGSETester; |
|
97 | 99 | QVBoxLayout *layout_overallLayout; |
|
98 | 100 | |
|
99 | 101 | QGridLayout *mainLayout; |
|
100 | 102 | QGridLayout *layout_ports; |
|
101 | 103 | |
|
102 | 104 | }; |
|
103 | 105 | |
|
104 | 106 | #endif // MAINWINDOWUI_H |
@@ -1,157 +1,171 | |||
|
1 | 1 | #include "recordpage.h" |
|
2 | 2 | |
|
3 | 3 | RecordPage::RecordPage(QWidget *parent) : |
|
4 | 4 | QWidget(parent) |
|
5 | 5 | { |
|
6 | 6 | logFileEn = false; |
|
7 | 7 | |
|
8 | 8 | radiobutton_swf_f0 = new QRadioButton("swf_f0"); |
|
9 | 9 | radiobutton_swf_f1 = new QRadioButton("swf_f1"); |
|
10 | 10 | radiobutton_swf_f2 = new QRadioButton("swf_f2"); |
|
11 | 11 | radiobutton_cwf_f1 = new QRadioButton("cwf_f1"); |
|
12 | 12 | radiobutton_cwf_f2 = new QRadioButton("cwf_f2"); |
|
13 | 13 | radiobutton_cwf_f3 = new QRadioButton("cwf_f3"); |
|
14 | 14 | radiobutton_asm_f0 = new QRadioButton("asm_f0"); |
|
15 | radiobutton_asm_f1 = new QRadioButton("asm_f1"); | |
|
16 | radiobutton_asm_f2 = new QRadioButton("asm_f2"); | |
|
15 | 17 | |
|
16 | 18 | radiobutton_swf_f0->setAutoExclusive(false); |
|
17 | 19 | radiobutton_swf_f1->setAutoExclusive(false); |
|
18 | 20 | radiobutton_swf_f2->setAutoExclusive(false); |
|
19 | 21 | radiobutton_cwf_f1->setAutoExclusive(false); |
|
20 | 22 | radiobutton_cwf_f2->setAutoExclusive(false); |
|
21 | 23 | radiobutton_cwf_f3->setAutoExclusive(false); |
|
22 | 24 | radiobutton_asm_f0->setAutoExclusive(false); |
|
25 | radiobutton_asm_f1->setAutoExclusive(false); | |
|
26 | radiobutton_asm_f2->setAutoExclusive(false); | |
|
23 | 27 | |
|
24 | 28 | label_currentDir = new QLabel("Current Dir: -"); |
|
25 | 29 | |
|
26 | 30 | button_chooseDir = new QPushButton("choose dir"); |
|
27 | 31 | button_storeWfrm = new QPushButton(tr("REC")); |
|
28 | 32 | |
|
29 | 33 | groupbox_waveforms = new QGroupBox("waveforms"); |
|
30 | 34 | groupbox_matrices = new QGroupBox("spectral matrices"); |
|
31 | 35 | groupbox_directory = new QGroupBox("directory"); |
|
32 | 36 | |
|
33 | 37 | vboxlayout_waveforms = new QVBoxLayout(); |
|
34 | 38 | vboxlayout_matrices = new QVBoxLayout(); |
|
35 | 39 | vboxlayout_directory = new QVBoxLayout(); |
|
36 | 40 | |
|
37 | 41 | mainLayout = new QGridLayout(); |
|
38 | 42 | |
|
39 | 43 | this->readSettings(); |
|
40 | 44 | |
|
41 | 45 | vboxlayout_waveforms->addWidget(radiobutton_swf_f0); |
|
42 | 46 | vboxlayout_waveforms->addWidget(radiobutton_swf_f1); |
|
43 | 47 | vboxlayout_waveforms->addWidget(radiobutton_swf_f2); |
|
44 | 48 | vboxlayout_waveforms->addWidget(radiobutton_cwf_f1); |
|
45 | 49 | vboxlayout_waveforms->addWidget(radiobutton_cwf_f2); |
|
46 | 50 | vboxlayout_waveforms->addWidget(radiobutton_cwf_f3); |
|
47 | 51 | vboxlayout_waveforms->addStretch(); |
|
48 | 52 | |
|
49 | 53 | |
|
50 | 54 | vboxlayout_matrices->addWidget(radiobutton_asm_f0); |
|
55 | vboxlayout_matrices->addWidget(radiobutton_asm_f1); | |
|
56 | vboxlayout_matrices->addWidget(radiobutton_asm_f2); | |
|
51 | 57 | vboxlayout_matrices->addStretch(); |
|
52 | 58 | |
|
53 | 59 | vboxlayout_directory->addWidget(button_storeWfrm); |
|
54 | 60 | vboxlayout_directory->addWidget(button_chooseDir); |
|
55 | 61 | vboxlayout_directory->addWidget(label_currentDir); |
|
56 | 62 | vboxlayout_directory->addStretch(); |
|
57 | 63 | |
|
58 | 64 | groupbox_waveforms->setLayout(vboxlayout_waveforms); |
|
59 | 65 | groupbox_matrices->setLayout(vboxlayout_matrices); |
|
60 | 66 | groupbox_directory->setLayout(vboxlayout_directory); |
|
61 | 67 | |
|
62 | 68 | mainLayout->addWidget(groupbox_directory, 0, 0, 1, 1); |
|
63 | 69 | mainLayout->addWidget(groupbox_waveforms, 0, 1, 1, 1); |
|
64 | 70 | mainLayout->addWidget(groupbox_matrices, 0, 2, 1, 1); |
|
65 | 71 | mainLayout->setRowStretch(1, 1); |
|
66 | 72 | mainLayout->setColumnStretch(3, 1); |
|
67 | 73 | |
|
68 | 74 | this->setLayout(mainLayout); |
|
69 | 75 | |
|
70 | 76 | connect(this->button_chooseDir, SIGNAL(clicked()), this, SLOT(chooseDir())); |
|
71 | 77 | connect(this->button_storeWfrm, SIGNAL(clicked()), this, SLOT(storeWfrm())); |
|
72 | 78 | } |
|
73 | 79 | |
|
74 | 80 | RecordPage::~RecordPage() |
|
75 | 81 | { |
|
76 | 82 | this->writeSettings(); |
|
77 | 83 | } |
|
78 | 84 | |
|
79 | 85 | void RecordPage::chooseDir() |
|
80 | 86 | { |
|
81 | 87 | QString tmpDefaultStorageDirectory; |
|
82 | 88 | tmpDefaultStorageDirectory = QFileDialog::getExistingDirectory(this, |
|
83 | 89 | "choose the directory", |
|
84 | 90 | QDir::homePath(), |
|
85 | 91 | QFileDialog::ShowDirsOnly); |
|
86 | 92 | |
|
87 | 93 | if( !tmpDefaultStorageDirectory.isEmpty() ) |
|
88 | 94 | { |
|
89 | 95 | defaultStorageDirectory = tmpDefaultStorageDirectory; |
|
90 | 96 | } |
|
91 | 97 | |
|
92 | 98 | label_currentDir->setText(defaultStorageDirectory); |
|
93 | 99 | emit signal_defaultStorageDirectoryUpdated( defaultStorageDirectory ); |
|
94 | 100 | } |
|
95 | 101 | |
|
96 | 102 | void RecordPage::storeWfrm() |
|
97 | 103 | { |
|
98 | 104 | if (logFileEn == false) |
|
99 | 105 | { |
|
100 | 106 | // enable storage |
|
101 | 107 | button_storeWfrm->setText(tr("STOP")); |
|
102 | 108 | logFileEn = true; |
|
103 | 109 | if (radiobutton_swf_f0->isChecked()) emit signal_store_swf_f0(); |
|
104 | 110 | if (radiobutton_swf_f1->isChecked()) emit signal_store_swf_f1(); |
|
105 | 111 | if (radiobutton_swf_f2->isChecked()) emit signal_store_swf_f2(); |
|
106 | 112 | if (radiobutton_cwf_f1->isChecked()) emit signal_store_cwf_f1(); |
|
107 | 113 | if (radiobutton_cwf_f2->isChecked()) emit signal_store_cwf_f2(); |
|
108 | 114 | if (radiobutton_cwf_f3->isChecked()) emit signal_store_cwf_f3(); |
|
109 | 115 | if (radiobutton_asm_f0->isChecked()) emit signal_store_asm_f0(); |
|
116 | if (radiobutton_asm_f1->isChecked()) emit signal_store_asm_f0(); | |
|
117 | if (radiobutton_asm_f2->isChecked()) emit signal_store_asm_f0(); | |
|
110 | 118 | radiobutton_swf_f0->setEnabled(false); |
|
111 | 119 | radiobutton_swf_f1->setEnabled(false); |
|
112 | 120 | radiobutton_swf_f2->setEnabled(false); |
|
113 | 121 | radiobutton_cwf_f1->setEnabled(false); |
|
114 | 122 | radiobutton_cwf_f2->setEnabled(false); |
|
115 | 123 | radiobutton_cwf_f3->setEnabled(false); |
|
116 | 124 | radiobutton_asm_f0->setEnabled(false); |
|
125 | radiobutton_asm_f1->setEnabled(false); | |
|
126 | radiobutton_asm_f2->setEnabled(false); | |
|
117 | 127 | } |
|
118 | 128 | else |
|
119 | 129 | { |
|
120 | 130 | // disable storage |
|
121 | 131 | button_storeWfrm->setText(tr("REC")); |
|
122 | 132 | logFileEn = false; |
|
123 | 133 | if (radiobutton_swf_f0->isChecked()) emit signal_store_swf_f0(); |
|
124 | 134 | if (radiobutton_swf_f1->isChecked()) emit signal_store_swf_f1(); |
|
125 | 135 | if (radiobutton_swf_f2->isChecked()) emit signal_store_swf_f2(); |
|
126 | 136 | if (radiobutton_cwf_f1->isChecked()) emit signal_store_cwf_f1(); |
|
127 | 137 | if (radiobutton_cwf_f2->isChecked()) emit signal_store_cwf_f2(); |
|
128 | 138 | if (radiobutton_cwf_f3->isChecked()) emit signal_store_cwf_f3(); |
|
129 | 139 | if (radiobutton_asm_f0->isChecked()) emit signal_store_asm_f0(); |
|
140 | if (radiobutton_asm_f1->isChecked()) emit signal_store_asm_f1(); | |
|
141 | if (radiobutton_asm_f2->isChecked()) emit signal_store_asm_f2(); | |
|
130 | 142 | radiobutton_swf_f0->setEnabled(true); |
|
131 | 143 | radiobutton_swf_f1->setEnabled(true); |
|
132 | 144 | radiobutton_swf_f2->setEnabled(true); |
|
133 | 145 | radiobutton_cwf_f1->setEnabled(true); |
|
134 | 146 | radiobutton_cwf_f2->setEnabled(true); |
|
135 | 147 | radiobutton_cwf_f3->setEnabled(true); |
|
136 | 148 | radiobutton_asm_f0->setEnabled(true); |
|
149 | radiobutton_asm_f1->setEnabled(true); | |
|
150 | radiobutton_asm_f2->setEnabled(true); | |
|
137 | 151 | } |
|
138 | 152 | } |
|
139 | 153 | |
|
140 | 154 | void RecordPage::readSettings() |
|
141 | 155 | { |
|
142 | 156 | QSettings settings("lpp", "lfrsgse"); |
|
143 | 157 | defaultStorageDirectory = settings.value( "storageDirectory", QDir::homePath() ).toString(); |
|
144 | 158 | label_currentDir->setText( defaultStorageDirectory ); |
|
145 | 159 | emit signal_defaultStorageDirectoryUpdated( defaultStorageDirectory ); |
|
146 | 160 | } |
|
147 | 161 | |
|
148 | 162 | void RecordPage::writeSettings() |
|
149 | 163 | { |
|
150 | 164 | QSettings settings("lpp", "lfrsgse"); |
|
151 | 165 | settings.setValue("storageDirectory", defaultStorageDirectory); |
|
152 | 166 | } |
|
153 | 167 | |
|
154 | 168 | void RecordPage::closeEvent(QCloseEvent *event) |
|
155 | 169 | { |
|
156 | 170 | event->accept(); |
|
157 | 171 | } |
@@ -1,70 +1,74 | |||
|
1 | 1 | #ifndef RECORDPAGE_H |
|
2 | 2 | #define RECORDPAGE_H |
|
3 | 3 | |
|
4 | 4 | #include <QWidget> |
|
5 | 5 | #include <QRadioButton> |
|
6 | 6 | #include <QGroupBox> |
|
7 | 7 | #include <QVBoxLayout> |
|
8 | 8 | #include <QGridLayout> |
|
9 | 9 | #include <QLabel> |
|
10 | 10 | #include <QPushButton> |
|
11 | 11 | #include <QSettings> |
|
12 | 12 | #include <QFileDialog> |
|
13 | 13 | #include <QCloseEvent> |
|
14 | 14 | |
|
15 | 15 | class RecordPage : public QWidget |
|
16 | 16 | { |
|
17 | 17 | Q_OBJECT |
|
18 | 18 | public: |
|
19 | 19 | explicit RecordPage(QWidget *parent = 0); |
|
20 | 20 | ~RecordPage(); |
|
21 | 21 | |
|
22 | 22 | QLabel *label_currentDir; |
|
23 | 23 | |
|
24 | 24 | bool logFileEn; |
|
25 | 25 | |
|
26 | 26 | QPushButton *button_chooseDir; |
|
27 | 27 | QPushButton *button_storeWfrm; |
|
28 | 28 | |
|
29 | 29 | QRadioButton *radiobutton_swf_f0; |
|
30 | 30 | QRadioButton *radiobutton_swf_f1; |
|
31 | 31 | QRadioButton *radiobutton_swf_f2; |
|
32 | 32 | QRadioButton *radiobutton_cwf_f1; |
|
33 | 33 | QRadioButton *radiobutton_cwf_f2; |
|
34 | 34 | QRadioButton *radiobutton_cwf_f3; |
|
35 | 35 | QRadioButton *radiobutton_asm_f0; |
|
36 | QRadioButton *radiobutton_asm_f1; | |
|
37 | QRadioButton *radiobutton_asm_f2; | |
|
36 | 38 | |
|
37 | 39 | QGroupBox *groupbox_waveforms; |
|
38 | 40 | QGroupBox *groupbox_matrices; |
|
39 | 41 | QGroupBox *groupbox_directory; |
|
40 | 42 | |
|
41 | 43 | QVBoxLayout *vboxlayout_waveforms; |
|
42 | 44 | QVBoxLayout *vboxlayout_matrices; |
|
43 | 45 | QVBoxLayout *vboxlayout_directory; |
|
44 | 46 | |
|
45 | 47 | QString defaultStorageDirectory; |
|
46 | 48 | |
|
47 | 49 | QGridLayout *mainLayout; |
|
48 | 50 | |
|
49 | 51 | protected: |
|
50 | 52 | void closeEvent(QCloseEvent *event); |
|
51 | 53 | |
|
52 | 54 | signals: |
|
53 | 55 | void signal_store_swf_f0(); |
|
54 | 56 | void signal_store_swf_f1(); |
|
55 | 57 | void signal_store_swf_f2(); |
|
56 | 58 | void signal_store_cwf_f1(); |
|
57 | 59 | void signal_store_cwf_f2(); |
|
58 | 60 | void signal_store_cwf_f3(); |
|
59 | 61 | void signal_store_asm_f0(); |
|
62 | void signal_store_asm_f1(); | |
|
63 | void signal_store_asm_f2(); | |
|
60 | 64 | void signal_defaultStorageDirectoryUpdated( QString nameOfTheDirectory ); |
|
61 | 65 | |
|
62 | 66 | public slots: |
|
63 | 67 | void chooseDir(); |
|
64 | 68 | void storeWfrm(); |
|
65 | 69 | void readSettings(); |
|
66 | 70 | void writeSettings(); |
|
67 | 71 | |
|
68 | 72 | }; |
|
69 | 73 | |
|
70 | 74 | #endif // RECORDPAGE_H |
General Comments 0
You need to be logged in to leave comments.
Login now