@@ -1,6 +1,6 | |||||
1 | ############################################################################# |
|
1 | ############################################################################# | |
2 | # Makefile for building: PAULs_LPPMON_PLUGINS |
|
2 | # Makefile for building: PAULs_LPPMON_PLUGINS | |
3 |
# Generated by qmake (2.01a) (Qt 4.8.3) on: Mon Dec 10 0 |
|
3 | # Generated by qmake (2.01a) (Qt 4.8.3) on: Mon Dec 10 09:02:30 2012 | |
4 | # Project: PAULs_LPPMON_PLUGINS.pro |
|
4 | # Project: PAULs_LPPMON_PLUGINS.pro | |
5 | # Template: subdirs |
|
5 | # Template: subdirs | |
6 | # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile PAULs_LPPMON_PLUGINS.pro |
|
6 | # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile PAULs_LPPMON_PLUGINS.pro |
@@ -1,6 +1,6 | |||||
1 | <?xml version="1.0" encoding="UTF-8"?> |
|
1 | <?xml version="1.0" encoding="UTF-8"?> | |
2 | <!DOCTYPE QtCreatorProject> |
|
2 | <!DOCTYPE QtCreatorProject> | |
3 |
<!-- Written by Qt Creator 2.4.1, 2012-12-10T |
|
3 | <!-- Written by Qt Creator 2.4.1, 2012-12-10T13:26:06. --> | |
4 | <qtcreator> |
|
4 | <qtcreator> | |
5 | <data> |
|
5 | <data> | |
6 | <variable>ProjectExplorer.Project.ActiveTarget</variable> |
|
6 | <variable>ProjectExplorer.Project.ActiveTarget</variable> |
@@ -1,6 +1,6 | |||||
1 | ############################################################################# |
|
1 | ############################################################################# | |
2 | # Makefile for building: librmapplugin.so.1.0.0 |
|
2 | # Makefile for building: librmapplugin.so.1.0.0 | |
3 |
# Generated by qmake (2.01a) (Qt 4.8.3) on: Mon Dec 10 0 |
|
3 | # Generated by qmake (2.01a) (Qt 4.8.3) on: Mon Dec 10 09:02:30 2012 | |
4 | # Project: rmapplugin.pro |
|
4 | # Project: rmapplugin.pro | |
5 | # Template: lib |
|
5 | # Template: lib | |
6 | # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile rmapplugin.pro |
|
6 | # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile rmapplugin.pro | |
@@ -266,6 +266,7 moc/moc_rmappluginui.cpp: rmapoperations | |||||
266 | spectralmatricesdmasimulator.h \ |
|
266 | spectralmatricesdmasimulator.h \ | |
267 | stardundee.h \ |
|
267 | stardundee.h \ | |
268 | gresb.h \ |
|
268 | gresb.h \ | |
|
269 | spwpacketreceiver.h \ | |||
269 | rmappluginui.h |
|
270 | rmappluginui.h | |
270 | /usr/lib64/qt4/bin/moc $(DEFINES) $(INCPATH) rmappluginui.h -o moc/moc_rmappluginui.cpp |
|
271 | /usr/lib64/qt4/bin/moc $(DEFINES) $(INCPATH) rmappluginui.h -o moc/moc_rmappluginui.cpp | |
271 |
|
272 | |||
@@ -274,8 +275,8 moc/moc_rmapplugin.cpp: rmappluginui.h \ | |||||
274 | spectralmatricesdmasimulator.h \ |
|
275 | spectralmatricesdmasimulator.h \ | |
275 | stardundee.h \ |
|
276 | stardundee.h \ | |
276 | gresb.h \ |
|
277 | gresb.h \ | |
|
278 | spwpacketreceiver.h \ | |||
277 | ccsds.h \ |
|
279 | ccsds.h \ | |
278 | spwpacketreceiver.h \ |
|
|||
279 | rmapplugin.h |
|
280 | rmapplugin.h | |
280 | /usr/lib64/qt4/bin/moc $(DEFINES) $(INCPATH) rmapplugin.h -o moc/moc_rmapplugin.cpp |
|
281 | /usr/lib64/qt4/bin/moc $(DEFINES) $(INCPATH) rmapplugin.h -o moc/moc_rmapplugin.cpp | |
281 |
|
282 | |||
@@ -298,7 +299,9 moc/moc_stardundee.cpp: rmapoperations.h | |||||
298 | stardundee.h |
|
299 | stardundee.h | |
299 | /usr/lib64/qt4/bin/moc $(DEFINES) $(INCPATH) stardundee.h -o moc/moc_stardundee.cpp |
|
300 | /usr/lib64/qt4/bin/moc $(DEFINES) $(INCPATH) stardundee.h -o moc/moc_stardundee.cpp | |
300 |
|
301 | |||
301 |
moc/moc_gresb.cpp: |
|
302 | moc/moc_gresb.cpp: spwpacketreceiver.h \ | |
|
303 | rmapoperations.h \ | |||
|
304 | gresb.h | |||
302 | /usr/lib64/qt4/bin/moc $(DEFINES) $(INCPATH) gresb.h -o moc/moc_gresb.cpp |
|
305 | /usr/lib64/qt4/bin/moc $(DEFINES) $(INCPATH) gresb.h -o moc/moc_gresb.cpp | |
303 |
|
306 | |||
304 | moc/moc_bridge.cpp: bridge.h |
|
307 | moc/moc_bridge.cpp: bridge.h | |
@@ -335,8 +338,8 obj/rmapplugin.o: rmapplugin.cpp rmapplu | |||||
335 | spectralmatricesdmasimulator.h \ |
|
338 | spectralmatricesdmasimulator.h \ | |
336 | stardundee.h \ |
|
339 | stardundee.h \ | |
337 | gresb.h \ |
|
340 | gresb.h \ | |
|
341 | spwpacketreceiver.h \ | |||
338 | ccsds.h \ |
|
342 | ccsds.h \ | |
339 | spwpacketreceiver.h \ |
|
|||
340 | rmappluginpythonwrapper.h |
|
343 | rmappluginpythonwrapper.h | |
341 | $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/rmapplugin.o rmapplugin.cpp |
|
344 | $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/rmapplugin.o rmapplugin.cpp | |
342 |
|
345 | |||
@@ -346,8 +349,8 obj/rmappluginui.o: rmappluginui.cpp rma | |||||
346 | spectralmatricesdmasimulator.h \ |
|
349 | spectralmatricesdmasimulator.h \ | |
347 | stardundee.h \ |
|
350 | stardundee.h \ | |
348 | gresb.h \ |
|
351 | gresb.h \ | |
349 | ccsds.h \ |
|
352 | spwpacketreceiver.h \ | |
350 | spwpacketreceiver.h |
|
353 | ccsds.h | |
351 | $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/rmappluginui.o rmappluginui.cpp |
|
354 | $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/rmappluginui.o rmappluginui.cpp | |
352 |
|
355 | |||
353 | obj/rmapoperations.o: rmapoperations.cpp rmapoperations.h |
|
356 | obj/rmapoperations.o: rmapoperations.cpp rmapoperations.h | |
@@ -376,7 +379,9 obj/stardundee.o: stardundee.cpp stardun | |||||
376 | rmapoperations.h |
|
379 | rmapoperations.h | |
377 | $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/stardundee.o stardundee.cpp |
|
380 | $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/stardundee.o stardundee.cpp | |
378 |
|
381 | |||
379 | obj/gresb.o: gresb.cpp gresb.h |
|
382 | obj/gresb.o: gresb.cpp gresb.h \ | |
|
383 | spwpacketreceiver.h \ | |||
|
384 | rmapoperations.h | |||
380 | $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/gresb.o gresb.cpp |
|
385 | $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/gresb.o gresb.cpp | |
381 |
|
386 | |||
382 | obj/bridge.o: bridge.cpp bridge.h |
|
387 | obj/bridge.o: bridge.cpp bridge.h |
@@ -8,8 +8,12 gresb::gresb(QWidget *parent) : | |||||
8 | RMAPSend_SOCKET = new QTcpSocket; |
|
8 | RMAPSend_SOCKET = new QTcpSocket; | |
9 | RMAPReceive_SOCKET = new QTcpSocket; |
|
9 | RMAPReceive_SOCKET = new QTcpSocket; | |
10 | GRESBStatusQuery_SOCKET = new QTcpSocket; |
|
10 | GRESBStatusQuery_SOCKET = new QTcpSocket; | |
11 | spwPacketReceiverOBJECT = new spwpacketreceiver; |
|
11 | ||
12 | spwPacketReceiverOBJECT->gresbReceptionSocket = RMAPReceive_SOCKET; |
|
12 | rmapPacket = (char*) malloc(RMAP_MAX_PACKET_LENGTH); | |
|
13 | ccsdsPacket = (unsigned char*) malloc(CCSDS_MAX_PACKET_LENGTH); | |||
|
14 | spwPacket = (char*) malloc( qMax(RMAP_MAX_PACKET_LENGTH, CCSDS_MAX_PACKET_LENGTH) ); | |||
|
15 | ||||
|
16 | commandCode = invalid0; // initialization of the command code for the RMAP transfers | |||
13 |
|
17 | |||
14 | //*** QLABEL ***// |
|
18 | //*** QLABEL ***// | |
15 | gresbBridgeIPLabel = new QLabel(tr("GRESB Bridge IP: ")); |
|
19 | gresbBridgeIPLabel = new QLabel(tr("GRESB Bridge IP: ")); | |
@@ -69,6 +73,442 gresb::gresb(QWidget *parent) : | |||||
69 | this->setLayout(connectionLayout); |
|
73 | this->setLayout(connectionLayout); | |
70 |
|
74 | |||
71 | connect(gresbStatusQueryAbortButton, SIGNAL(clicked()), gresbStatusQueryDialog, SLOT(reject())); |
|
75 | connect(gresbStatusQueryAbortButton, SIGNAL(clicked()), gresbStatusQueryDialog, SLOT(reject())); | |
|
76 | connect(this->RMAPReceive_SOCKET, SIGNAL(readyRead()), this, SLOT(receiveSPWPacket())); | |||
|
77 | } | |||
|
78 | ||||
|
79 | gresb::~gresb() | |||
|
80 | { | |||
|
81 | free(rmapPacket); | |||
|
82 | free(ccsdsPacket); | |||
|
83 | free(spwPacket); | |||
|
84 | } | |||
|
85 | ||||
|
86 | unsigned int gresb::Write(unsigned int *Value, unsigned int count, unsigned int address) | |||
|
87 | { | |||
|
88 | unsigned int remainingCount = count; | |||
|
89 | unsigned int iOffset = 0; | |||
|
90 | QString console_message; | |||
|
91 | char* data; | |||
|
92 | ||||
|
93 | if(rmapPacketSEMAPHORE->available()!=0) | |||
|
94 | { | |||
|
95 | emit appendToLog("WARNING === in function WRITE of rmapplugin *** RMAP request already running, WRITE access stopped"); | |||
|
96 | return 1; | |||
|
97 | } | |||
|
98 | ||||
|
99 | RMAP_write_reply_setText("reply to the write command required\nlast reply status: unavailable"); | |||
|
100 | ||||
|
101 | data = (char*) malloc(READ_WRITE_MAX_COUNTS*4); | |||
|
102 | ||||
|
103 | emit appendToLog(QString("*** START *** WRITE ")+ QString::number(count) + QString(" word(s) @0x")+ QString::number(address,16)); | |||
|
104 | ||||
|
105 | while (remainingCount > READ_WRITE_MAX_COUNTS) | |||
|
106 | { | |||
|
107 | for (int i = 0; i<READ_WRITE_MAX_COUNTS; i++) | |||
|
108 | { | |||
|
109 | data[i*4+3] = (char) ((unsigned int) Value[i+iOffset]); | |||
|
110 | data[i*4+2] = (char) ((unsigned int) Value[i+iOffset]>>8); | |||
|
111 | data[i*4+1] = (char) ((unsigned int) Value[i+iOffset]>>16); | |||
|
112 | data[i*4+0] = (char) ((unsigned int) Value[i+iOffset]>>24); | |||
|
113 | } | |||
|
114 | ||||
|
115 | console_message.sprintf("remainingCount: %d => ", remainingCount); | |||
|
116 | emit appendToLog(console_message + QString("Write ")+ QString::number(READ_WRITE_MAX_COUNTS*4) + QString(" byte(s) @0x")+ QString::number(address,16)); | |||
|
117 | ||||
|
118 | if(WriteBLOCK(data, READ_WRITE_MAX_COUNTS*4, address)==0) | |||
|
119 | { | |||
|
120 | emit appendToLog("WARNING === in function WRITE of rmapplugin *** RMAP write command failed"); | |||
|
121 | return 1; | |||
|
122 | } | |||
|
123 | ||||
|
124 | remainingCount = remainingCount - READ_WRITE_MAX_COUNTS; | |||
|
125 | address = address + READ_WRITE_MAX_COUNTS * 4; | |||
|
126 | iOffset = iOffset + READ_WRITE_MAX_COUNTS; | |||
|
127 | } | |||
|
128 | ||||
|
129 | if (remainingCount > 0) | |||
|
130 | { | |||
|
131 | for (unsigned int i = 0; i<remainingCount; i++) | |||
|
132 | { | |||
|
133 | data[i*4+3] = (char) ((unsigned int) Value[i+iOffset]); | |||
|
134 | data[i*4+2] = (char) ((unsigned int) Value[i+iOffset]>>8); | |||
|
135 | data[i*4+1] = (char) ((unsigned int) Value[i+iOffset]>>16); | |||
|
136 | data[i*4+0] = (char) ((unsigned int) Value[i+iOffset]>>24); | |||
|
137 | } | |||
|
138 | ||||
|
139 | console_message.sprintf("remainingCount: %d => ", remainingCount); | |||
|
140 | emit appendToLog(console_message + QString("Write ")+ QString::number(remainingCount*4) + QString(" byte(s) @0x")+ QString::number(address,16)); | |||
|
141 | ||||
|
142 | if (WriteBLOCK(data, remainingCount*4, address)==0) | |||
|
143 | { | |||
|
144 | emit appendToLog("WARNING === in function WRITE of rmapplugin *** RMAP write command failed"); | |||
|
145 | return 1; | |||
|
146 | } | |||
|
147 | } | |||
|
148 | ||||
|
149 | emit appendToLog(QString("*** STOP *** WRITE")); | |||
|
150 | free(data); | |||
|
151 | return count; | |||
|
152 | } | |||
|
153 | ||||
|
154 | unsigned int gresb::Read(unsigned int *Value, unsigned int count, unsigned int address) | |||
|
155 | { | |||
|
156 | unsigned int remainingCount = count; | |||
|
157 | unsigned int iOffset = 0; | |||
|
158 | QString console_message; | |||
|
159 | ||||
|
160 | if(rmapPacketSEMAPHORE->available()!=0) | |||
|
161 | { | |||
|
162 | emit appendToLog("WARNING === in function READ of rmapplugin *** RMAP request already running, READ access stopped"); | |||
|
163 | return 1; | |||
|
164 | } | |||
|
165 | emit appendToLog(QString("*** START *** READ ")+ QString::number(count) + QString(" word(s) @0x")+ QString::number(address,16)); | |||
|
166 | ||||
|
167 | while (remainingCount > READ_WRITE_MAX_COUNTS) | |||
|
168 | { | |||
|
169 | console_message.sprintf("remainingCount: %d => ", remainingCount); | |||
|
170 | emit appendToLog(console_message + QString("Read ")+ QString::number(4*READ_WRITE_MAX_COUNTS) + QString(" byte(s) @0x")+ QString::number(address,16)); | |||
|
171 | ||||
|
172 | if (ReadBLOCK(READ_WRITE_MAX_COUNTS*4, address)==0) | |||
|
173 | { | |||
|
174 | emit appendToLog("WARNING === in function READ of rmapplugin *** RMAP packet not received"); | |||
|
175 | return 1; | |||
|
176 | } | |||
|
177 | ||||
|
178 | for(int i=0;i<READ_WRITE_MAX_COUNTS;i++) | |||
|
179 | { | |||
|
180 | Value[i+iOffset] = (unsigned char) rmapPacket[i*4+RMAP_READ_REPLY_HEADER_LENGTH]; | |||
|
181 | for(int j=1;j<4;j++) | |||
|
182 | { | |||
|
183 | Value[i+iOffset]= ((unsigned char)(rmapPacket[i*4+j+RMAP_READ_REPLY_HEADER_LENGTH])) + Value[i+iOffset]*256; | |||
|
184 | } | |||
|
185 | } | |||
|
186 | ||||
|
187 | remainingCount = remainingCount - READ_WRITE_MAX_COUNTS; | |||
|
188 | address = address + READ_WRITE_MAX_COUNTS * 4; | |||
|
189 | iOffset = iOffset + READ_WRITE_MAX_COUNTS; | |||
|
190 | acquireRMAPSemaphore(); | |||
|
191 | } | |||
|
192 | ||||
|
193 | if (remainingCount > 0) | |||
|
194 | { | |||
|
195 | console_message.sprintf("remainingCount: %d => ", remainingCount); | |||
|
196 | emit appendToLog(console_message + QString("Read ")+ QString::number(4*remainingCount) + QString(" byte(s) @0x")+ QString::number(address,16)); | |||
|
197 | ||||
|
198 | if (ReadBLOCK(4*remainingCount, address)==0) | |||
|
199 | { | |||
|
200 | emit appendToLog("WARNING === in function READ of rmapplugin *** RMAP packet not received"); | |||
|
201 | return 1; | |||
|
202 | } | |||
|
203 | ||||
|
204 | for(unsigned int i=0;i<remainingCount;i++) | |||
|
205 | { | |||
|
206 | Value[i+iOffset] = (unsigned char) rmapPacket[i*4+RMAP_READ_REPLY_HEADER_LENGTH]; | |||
|
207 | for(int j=1;j<4;j++) | |||
|
208 | { | |||
|
209 | Value[i+iOffset]= ((unsigned char)(rmapPacket[i*4+j+RMAP_READ_REPLY_HEADER_LENGTH])) + Value[i+iOffset]*256; | |||
|
210 | } | |||
|
211 | } | |||
|
212 | acquireRMAPSemaphore(); | |||
|
213 | } | |||
|
214 | ||||
|
215 | emit appendToLog(QString("*** STOP *** READ ")); | |||
|
216 | return count; | |||
|
217 | } | |||
|
218 | ||||
|
219 | unsigned int gresb::WriteBLOCK(char *data, unsigned int nbBytes, unsigned int address) | |||
|
220 | { | |||
|
221 | QTime RMAPTimeout; | |||
|
222 | RMAP *RMAPCommand; | |||
|
223 | int errorCode; | |||
|
224 | QString console_message; | |||
|
225 | ||||
|
226 | if (GRESBStatusQueryRequest(LinkStatus, spwLinkSpinBox->value()) == 1) | |||
|
227 | { | |||
|
228 | this->Close(); | |||
|
229 | return 1; | |||
|
230 | } | |||
|
231 | ||||
|
232 | RMAPCommand = new RMAP(commandCode, | |||
|
233 | rmapTargetLogicalAddress, | |||
|
234 | rmapSourceLogicalAddress, | |||
|
235 | address, | |||
|
236 | nbBytes, | |||
|
237 | data); | |||
|
238 | ||||
|
239 | // SEND GRESB HEADER | |||
|
240 | RMAPSend_SOCKET->write((char*) ((void*) &RMAPCommand->GRESBHeader), 4); | |||
|
241 | // SEND SPACEWIRE PACKET HEADER | |||
|
242 | RMAPSend_SOCKET->write((char*) ((void*) &RMAPCommand->RMAPHeader), sizeof(RMAPCommand->RMAPHeader)); | |||
|
243 | // SEND DATA | |||
|
244 | RMAPSend_SOCKET->write( data, nbBytes); | |||
|
245 | // SEND DATA CRC | |||
|
246 | RMAPSend_SOCKET->write((char*) ((void*) &RMAPCommand->dataCRC), 1); | |||
|
247 | RMAPTimeout.start(); | |||
|
248 | while(RMAPSend_SOCKET->bytesToWrite() > 0) | |||
|
249 | { | |||
|
250 | RMAPSend_SOCKET->waitForBytesWritten(100); | |||
|
251 | if(RMAPTimeout.elapsed()>1000) | |||
|
252 | { | |||
|
253 | emit appendToLog("WARNING === in function WRITE (with reply) of rmapplugin *** sending Write RMAP Command timeout"); | |||
|
254 | return 0; | |||
|
255 | } | |||
|
256 | } | |||
|
257 | ||||
|
258 | if ( (commandCode == writeSingle_noVer_Rep) | (commandCode == writeInc_noVer_Rep) | | |||
|
259 | (commandCode == writeSingle_ver_rep) | (commandCode == writeInc_ver_rep) ) | |||
|
260 | { | |||
|
261 | // WAIT FOR THE RMAP REPLY PACKET | |||
|
262 | errorCode = receiveSPWPacket(1); | |||
|
263 | if (errorCode<=0) | |||
|
264 | { | |||
|
265 | emit appendToLog("WARNING === in function WriteBLOCK of rmapplugin *** RMAP packet reception failed with code " + QString::number(errorCode)); | |||
|
266 | return 0; | |||
|
267 | } | |||
|
268 | if(rmapPacketSize != 8) | |||
|
269 | { | |||
|
270 | console_message.sprintf("WARNING === in function WRITE (with reply) of rmapplugin *** write reply format not compliant\n"); | |||
|
271 | emit appendToLog(console_message); | |||
|
272 | return 0; | |||
|
273 | } | |||
|
274 | switch (rmapPacket[3]) // byte 4 is the status byte in the reply | |||
|
275 | { | |||
|
276 | case 0: | |||
|
277 | RMAP_write_reply_setText("reply to the write command required\nlast reply status: 0 Successfull"); | |||
|
278 | break; | |||
|
279 | case 1: | |||
|
280 | emit appendToLog("WARNING === in function WRITE (with reply) of rmapplugin *** General error code"); | |||
|
281 | RMAP_write_reply_setText("reply to the write command required\nlast reply status: 1 General error code"); | |||
|
282 | break; | |||
|
283 | case 2: | |||
|
284 | emit appendToLog("WARNING === in function WRITE (with reply) of rmapplugin *** Unused RMAP packet type or command code"); | |||
|
285 | RMAP_write_reply_setText("reply to the write command required\nlast reply status: 2 Unused RMAP packet type or command code"); | |||
|
286 | break; | |||
|
287 | case 3: | |||
|
288 | emit appendToLog("WARNING === in function WRITE (with reply) of rmapplugin *** Invalid key"); | |||
|
289 | RMAP_write_reply_setText("reply to the write command required\nlast reply status: 3 Invalid key"); | |||
|
290 | break; | |||
|
291 | case 4: | |||
|
292 | emit appendToLog("WARNING === in function WRITE (with reply) of rmapplugin *** Invalid data CRC"); | |||
|
293 | RMAP_write_reply_setText("reply to the write command required\nlast reply status: 4 Invalid data CRC"); | |||
|
294 | break; | |||
|
295 | case 5: | |||
|
296 | emit appendToLog("WARNING === in function WRITE (with reply) of rmapplugin *** Early EOP"); | |||
|
297 | RMAP_write_reply_setText("reply to the write command required\nlast reply status: 5 Early EOP"); | |||
|
298 | break; | |||
|
299 | case 6: | |||
|
300 | emit appendToLog("WARNING === in function WRITE (with reply) of rmapplugin *** Too much data"); | |||
|
301 | RMAP_write_reply_setText("reply to the write command required\nlast reply status: 6 Too much data"); | |||
|
302 | break; | |||
|
303 | case 7: | |||
|
304 | emit appendToLog("WARNING === in function WRITE (with reply) of rmapplugin *** EEP"); | |||
|
305 | RMAP_write_reply_setText("reply to the write command required\nlast reply status: 7 EEP"); | |||
|
306 | break; | |||
|
307 | case 8: | |||
|
308 | emit appendToLog("WARNING === in function WRITE (with reply) of rmapplugin *** Reserved"); | |||
|
309 | RMAP_write_reply_setText("reply to the write command required\nlast reply status: 8 Reserved"); | |||
|
310 | break; | |||
|
311 | case 9: | |||
|
312 | emit appendToLog("WARNING === in function WRITE (with reply) of rmapplugin *** Verify buffer overrun"); | |||
|
313 | RMAP_write_reply_setText("reply to the write command required\nlast reply status: 9 Verify buffer overrun"); | |||
|
314 | break; | |||
|
315 | case 10: | |||
|
316 | emit appendToLog("WARNING === in function WRITE (with reply) of rmapplugin *** RMAP command not implemented or not authorised"); | |||
|
317 | RMAP_write_reply_setText("reply to the write command required\nlast reply status: 10 RMAP command not implemented or not authorised"); | |||
|
318 | break; | |||
|
319 | case 11: | |||
|
320 | emit appendToLog("WARNING === in function WRITE (with reply) of rmapplugin *** RMW data length error"); | |||
|
321 | RMAP_write_reply_setText("reply to the write command required\nlast reply status: 11 RMAP RMW data length error"); | |||
|
322 | break; | |||
|
323 | case 12: | |||
|
324 | emit appendToLog("WARNING === in function WRITE (with reply) of rmapplugin *** Invalid target logical address"); | |||
|
325 | RMAP_write_reply_setText("reply to the write command required\nlast reply status: 12 Invalid target logical address"); | |||
|
326 | break; | |||
|
327 | } | |||
|
328 | acquireRMAPSemaphore(); | |||
|
329 | } | |||
|
330 | return nbBytes; | |||
|
331 | } | |||
|
332 | ||||
|
333 | unsigned int gresb::ReadBLOCK(unsigned int nbBytes, unsigned int address) | |||
|
334 | { | |||
|
335 | int errorCode; | |||
|
336 | RMAP *RMAPCommand; | |||
|
337 | QTime RMAPTimeout; | |||
|
338 | unsigned int dataLength; | |||
|
339 | if (GRESBStatusQueryRequest(LinkStatus, spwLinkSpinBox->value()) == 1) | |||
|
340 | { | |||
|
341 | this->Close(); | |||
|
342 | return 1; | |||
|
343 | } | |||
|
344 | ||||
|
345 | if (nbBytes > 4) | |||
|
346 | { | |||
|
347 | RMAPCommand = new RMAP(read_Inc, | |||
|
348 | rmapTargetLogicalAddress, | |||
|
349 | rmapSourceLogicalAddress, | |||
|
350 | address, | |||
|
351 | nbBytes, | |||
|
352 | NULL); | |||
|
353 | } | |||
|
354 | else | |||
|
355 | { | |||
|
356 | RMAPCommand = new RMAP(read_Single, | |||
|
357 | rmapTargetLogicalAddress, | |||
|
358 | rmapSourceLogicalAddress, | |||
|
359 | address, | |||
|
360 | nbBytes, | |||
|
361 | NULL); | |||
|
362 | } | |||
|
363 | ||||
|
364 | // SEND THE GRESB HEADER FOR THE RMAP READ COMMAND | |||
|
365 | RMAPSend_SOCKET->write((char*) ((void*) &RMAPCommand->GRESBHeader), 4); | |||
|
366 | // SEND THE SPACEWIRE PACKET FOR THE RMAP READ COMMAND | |||
|
367 | RMAPSend_SOCKET->write((char*) ((void*) &RMAPCommand->RMAPHeader), sizeof(RMAPCommand->RMAPHeader)); | |||
|
368 | RMAPSend_SOCKET->waitForBytesWritten(100); | |||
|
369 | RMAPTimeout.start(); | |||
|
370 | // write timeout | |||
|
371 | while(RMAPSend_SOCKET->bytesToWrite() > 0) | |||
|
372 | { | |||
|
373 | RMAPSend_SOCKET->waitForBytesWritten(100); | |||
|
374 | if(RMAPTimeout.elapsed()>1000) | |||
|
375 | { | |||
|
376 | emit appendToLog("WARNING === in function READ of rmapplugin *** sending Read RMAP Command timeout\n"); | |||
|
377 | return 0; | |||
|
378 | } | |||
|
379 | } | |||
|
380 | ||||
|
381 | // RECEIVE THE INCOMING RMAP PACKET | |||
|
382 | errorCode = receiveSPWPacket(1); // request ID 1 is for RMAP packet | |||
|
383 | if (errorCode<=0) | |||
|
384 | { | |||
|
385 | emit appendToLog("WARNING === in function ReadBLOCK of rmapplugin *** RMAP packet reception failed with code " + QString::number(errorCode)); | |||
|
386 | return 0; | |||
|
387 | } | |||
|
388 | dataLength = rmapPacketSize - RMAP_READ_REPLY_HEADER_LENGTH - RMAP_DATA_CRC_LENGTH; | |||
|
389 | if(dataLength != nbBytes) | |||
|
390 | { | |||
|
391 | emit appendToLog("WARNING === in function READ of rmapplugin *** number of data received (" | |||
|
392 | +QString::number(dataLength) | |||
|
393 | +") not equal to number of data requested (" | |||
|
394 | +QString::number(READ_WRITE_MAX_COUNTS*4) | |||
|
395 | +")"); | |||
|
396 | return 0; | |||
|
397 | } | |||
|
398 | return dataLength; | |||
|
399 | } | |||
|
400 | ||||
|
401 | unsigned int gresb::WriteSPW(char *Value, unsigned int count, char targetLogicalAddress, char userApplication) | |||
|
402 | { | |||
|
403 | char protocoleIdentifier = 0x02; | |||
|
404 | char reserved = 0x00; | |||
|
405 | char gresbProtocole = 0x00; | |||
|
406 | unsigned char size[3]; | |||
|
407 | unsigned int spwPacketSize = count + 4; | |||
|
408 | QTime SPWTimeout; | |||
|
409 | ||||
|
410 | if (count>248) | |||
|
411 | { | |||
|
412 | appendToLog("WARNING === in function WRITE of rmapplugin *** CCSDS packet size > 248 bytes\n"); | |||
|
413 | return 1; | |||
|
414 | } | |||
|
415 | ||||
|
416 | appendToLog(QString("*** START *** Send CCSDS packet of ")+ QString::number(count) + QString(" byte(s)")); | |||
|
417 | ||||
|
418 | if (GRESBStatusQueryRequest(LinkStatus, spwLinkSpinBox->value()) == 1) | |||
|
419 | { | |||
|
420 | this->Close(); | |||
|
421 | appendToLog("WARNING === in function WRITE of rmapplugin *** SPW link not running\n"); | |||
|
422 | return 1; | |||
|
423 | } | |||
|
424 | ||||
|
425 | // SEND GRESB HEADER | |||
|
426 | size[0] = (unsigned char) ((unsigned int) spwPacketSize>>16); | |||
|
427 | size[1] = (unsigned char) ((unsigned int) spwPacketSize>>8); | |||
|
428 | size[2] = (unsigned char) ((unsigned int) spwPacketSize); | |||
|
429 | RMAPSend_SOCKET->write(&gresbProtocole, 1); | |||
|
430 | RMAPSend_SOCKET->write((char*) size, 3); | |||
|
431 | // SEND SPW HEADER | |||
|
432 | RMAPSend_SOCKET->write(&targetLogicalAddress, 1); | |||
|
433 | RMAPSend_SOCKET->write(&protocoleIdentifier, 1); | |||
|
434 | RMAPSend_SOCKET->write(&reserved, 1); | |||
|
435 | RMAPSend_SOCKET->write(&userApplication, 1); | |||
|
436 | // SEND CCSDS PACKET | |||
|
437 | RMAPSend_SOCKET->write(Value, count); | |||
|
438 | SPWTimeout.start(); | |||
|
439 | while(RMAPSend_SOCKET->bytesToWrite() > 0) | |||
|
440 | { | |||
|
441 | RMAPSend_SOCKET->waitForBytesWritten(100); | |||
|
442 | if(SPWTimeout.elapsed()>1000) | |||
|
443 | { | |||
|
444 | appendToLog("WARNING === in function WRITE of rmapplugin *** sending CCSDS packet timeout\n"); | |||
|
445 | return 1; | |||
|
446 | } | |||
|
447 | } | |||
|
448 | ||||
|
449 | appendToLog(QString("*** CCSDS packet sent")); | |||
|
450 | ||||
|
451 | return count; | |||
|
452 | } | |||
|
453 | ||||
|
454 | int gresb::receiveSPWPacket(unsigned char requestID) // SLOT | |||
|
455 | { | |||
|
456 | QTime spwPacketReceiverTimeout; | |||
|
457 | // GRESB HEADER | |||
|
458 | char RES_TR_EP; // 6 bits REserved + 1 bit TRuncated + 1 bit EP error end of packet | |||
|
459 | unsigned char packetLength2; | |||
|
460 | unsigned char packetLength1; | |||
|
461 | unsigned char packetLength0; | |||
|
462 | unsigned int packetLength; | |||
|
463 | ||||
|
464 | if (requestID==1) | |||
|
465 | { | |||
|
466 | if (rmapPacketSEMAPHORE->available()) return rmapPacketSize; | |||
|
467 | } | |||
|
468 | ||||
|
469 | RMAPReceive_SOCKET->blockSignals(1); // block the signals of the socket during packet reception | |||
|
470 | // READ THE GRESB HEADER OF THE INCOMING PACKET | |||
|
471 | spwPacketReceiverTimeout.start(); | |||
|
472 | while(RMAPReceive_SOCKET->bytesAvailable() < 4) | |||
|
473 | { | |||
|
474 | RMAPReceive_SOCKET->waitForReadyRead(100); | |||
|
475 | if(spwPacketReceiverTimeout.elapsed()>1000) return -1; // ERROR === read GRSEB header TIMEOUT | |||
|
476 | } | |||
|
477 | RMAPReceive_SOCKET->read(&RES_TR_EP, 1); | |||
|
478 | RMAPReceive_SOCKET->read( (char*) &packetLength2, 1); | |||
|
479 | RMAPReceive_SOCKET->read( (char*) &packetLength1, 1); | |||
|
480 | RMAPReceive_SOCKET->read( (char*) &packetLength0, 1); | |||
|
481 | packetLength = (packetLength2<<16) + (packetLength1<<8) + (packetLength0); | |||
|
482 | spwPacket = (char*) malloc(packetLength); | |||
|
483 | ||||
|
484 | // READ THE SPW PACKET | |||
|
485 | while(RMAPReceive_SOCKET->bytesAvailable() < packetLength) | |||
|
486 | { | |||
|
487 | RMAPReceive_SOCKET->waitForReadyRead(100); | |||
|
488 | if(spwPacketReceiverTimeout.elapsed()>1000) return -2; // ERROR === read SPW packet TIMEOUT | |||
|
489 | } | |||
|
490 | RMAPReceive_SOCKET->read( spwPacket, packetLength ); | |||
|
491 | RMAPReceive_SOCKET->blockSignals(0); | |||
|
492 | ||||
|
493 | switch(spwPacket[1]) // byte 1 is the protocole identifier in the SPW packet | |||
|
494 | { | |||
|
495 | case 1: // 0x01 is the protocole identifier for RMAP packets | |||
|
496 | if (rmapPacketSEMAPHORE->available()!=0) return -3; // ERROR === previous RMAP packet not processed yet | |||
|
497 | for(unsigned int i=0; i<packetLength; i++) rmapPacket[i] = spwPacket[i]; | |||
|
498 | rmapPacketSize = packetLength; | |||
|
499 | rmapPacketSEMAPHORE->release(); | |||
|
500 | //emit sendMessage("RMAP packet of size " + QString::number(packetLength) + " received"); | |||
|
501 | return packetLength; | |||
|
502 | ||||
|
503 | case 2: // 0x02 is the protocole identifier for CCSDS packets | |||
|
504 | if (ccsdsPacketSEMAPHORE->available()!=0) return -4; // ERROR === previous CCSDS packet not processed yet | |||
|
505 | for(unsigned int i=0; i<packetLength; i++) ccsdsPacket[i] = spwPacket[i]; | |||
|
506 | ccsdsPacketSize = packetLength; | |||
|
507 | ccsdsPacketSEMAPHORE->release(); | |||
|
508 | emit(ccsdsPacketAvailable(ccsdsPacket, packetLength)); | |||
|
509 | return packetLength; | |||
|
510 | } | |||
|
511 | return 0; | |||
72 | } |
|
512 | } | |
73 |
|
513 | |||
74 | void gresb::Open() // SLOT |
|
514 | void gresb::Open() // SLOT | |
@@ -86,8 +526,8 void gresb::Open() // SLOT | |||||
86 | GRESBStatusQuery_SOCKET->waitForConnected(10000); |
|
526 | GRESBStatusQuery_SOCKET->waitForConnected(10000); | |
87 | RMAPReceive_SOCKET->readAll(); // read all remaining data from the reception socket |
|
527 | RMAPReceive_SOCKET->readAll(); // read all remaining data from the reception socket | |
88 | // initialize SPW packet semaphores |
|
528 | // initialize SPW packet semaphores | |
89 |
while ( |
|
529 | while (rmapPacketSEMAPHORE->available()!=0) rmapPacketSEMAPHORE->acquire(); | |
90 |
while ( |
|
530 | while (ccsdsPacketSEMAPHORE->available()!=0) ccsdsPacketSEMAPHORE->acquire(); | |
91 | if (GRESBStatusQueryRequest(LinkStatus, spwLinkSpinBox->value()) != 0) |
|
531 | if (GRESBStatusQueryRequest(LinkStatus, spwLinkSpinBox->value()) != 0) | |
92 | { |
|
532 | { | |
93 | spwRunning = gresbStatusQueryDialog->exec(); |
|
533 | spwRunning = gresbStatusQueryDialog->exec(); | |
@@ -213,3 +653,35 int gresb::GRESBStatusQueryRequest(Gresb | |||||
213 | } |
|
653 | } | |
214 | return 0; |
|
654 | return 0; | |
215 | } |
|
655 | } | |
|
656 | ||||
|
657 | void gresb::processCCSDSPacket(unsigned char *ccsdsPacket, unsigned int size) // SLOT | |||
|
658 | { | |||
|
659 | QString message; | |||
|
660 | unsigned int fine_time_value = 0; | |||
|
661 | fine_time_value = ((unsigned int) ccsdsPacket[7]<<24) | |||
|
662 | + ((unsigned int) ccsdsPacket[6]<<16) | |||
|
663 | + ((unsigned int) ccsdsPacket[5]<<8) | |||
|
664 | + ((unsigned int) ccsdsPacket[4]); | |||
|
665 | message.append(QTime::currentTime().toString() +":" + QString::number(QTime::currentTime().msec()) + ": "); | |||
|
666 | message.append("size " | |||
|
667 | + QString::number(size) | |||
|
668 | +" *** header " | |||
|
669 | + QString::number(ccsdsPacket[0], 16) | |||
|
670 | + " " | |||
|
671 | + QString::number(ccsdsPacket[1], 16) | |||
|
672 | + " " | |||
|
673 | + QString::number(ccsdsPacket[2], 16) | |||
|
674 | + " " | |||
|
675 | + QString::number(ccsdsPacket[3], 16) | |||
|
676 | + " *** coarse time " | |||
|
677 | + QString::number(fine_time_value)); | |||
|
678 | //+ QString::number(ccsdsPacket[4], 16) | |||
|
679 | //+" " | |||
|
680 | //+ QString::number(ccsdsPacket[5], 16) | |||
|
681 | //+" " | |||
|
682 | //+ QString::number(ccsdsPacket[6], 16) | |||
|
683 | //+" " | |||
|
684 | //+ QString::number(ccsdsPacket[7], 16)); | |||
|
685 | ccsdsPacketSEMAPHORE->acquire(); | |||
|
686 | emit sendMessage(message); | |||
|
687 | } |
@@ -8,6 +8,7 | |||||
8 | #include <QGridLayout> |
|
8 | #include <QGridLayout> | |
9 | #include <QTcpSocket> |
|
9 | #include <QTcpSocket> | |
10 | #include <QDialog> |
|
10 | #include <QDialog> | |
|
11 | #include <QSemaphore> | |||
11 |
|
12 | |||
12 | #include "gresbstatusenquiry.h" |
|
13 | #include "gresbstatusenquiry.h" | |
13 | #include "spwpacketreceiver.h" |
|
14 | #include "spwpacketreceiver.h" | |
@@ -23,7 +24,7 public: | |||||
23 | unsigned int Write(unsigned int *Value,unsigned int count,unsigned int address=0); |
|
24 | unsigned int Write(unsigned int *Value,unsigned int count,unsigned int address=0); | |
24 | unsigned int Read(unsigned int *Value,unsigned int count,unsigned int address=0); |
|
25 | unsigned int Read(unsigned int *Value,unsigned int count,unsigned int address=0); | |
25 | unsigned int WriteSPW(char *Value, unsigned int count, char targetLogicalAddress, char userApplication); |
|
26 | unsigned int WriteSPW(char *Value, unsigned int count, char targetLogicalAddress, char userApplication); | |
26 | unsigned int getLinkStatus(unsigned char link); |
|
27 | //unsigned int getLinkStatus(unsigned char link); | |
27 |
|
28 | |||
28 | signals: |
|
29 | signals: | |
29 | void sendMessage(QString message); |
|
30 | void sendMessage(QString message); | |
@@ -35,7 +36,8 signals: | |||||
35 | public slots: |
|
36 | public slots: | |
36 | void Open(); |
|
37 | void Open(); | |
37 | void Close(); |
|
38 | void Close(); | |
38 | int receiveSPWPacket(unsigned char requestID); |
|
39 | int receiveSPWPacket(unsigned char requestID=0); | |
|
40 | void processCCSDSPacket(unsigned char *ccsdsPacket, unsigned int size); | |||
39 | void commandCodeHasChanged(RMAP_command_codes code) {this->commandCode = code;} |
|
41 | void commandCodeHasChanged(RMAP_command_codes code) {this->commandCode = code;} | |
40 | void targetHasChanged(int target) {rmapTargetLogicalAddress = (unsigned char) target;} |
|
42 | void targetHasChanged(int target) {rmapTargetLogicalAddress = (unsigned char) target;} | |
41 | void sourceHasChanged(int target) {rmapSourceLogicalAddress = (unsigned char) target;} |
|
43 | void sourceHasChanged(int target) {rmapSourceLogicalAddress = (unsigned char) target;} | |
@@ -44,6 +46,10 private slots: | |||||
44 | int GRESBStatusQuery(); |
|
46 | int GRESBStatusQuery(); | |
45 |
|
47 | |||
46 | private: |
|
48 | private: | |
|
49 | unsigned int WriteBLOCK(char *data,unsigned int nbBytes,unsigned int address=0); | |||
|
50 | unsigned int ReadBLOCK(unsigned int nbBytes,unsigned int address=0); | |||
|
51 | void acquireRMAPSemaphore() {rmapPacketSEMAPHORE->acquire();} | |||
|
52 | void acquireCCSDSSemaphore() {ccsdsPacketSEMAPHORE->acquire();} | |||
47 | int GRESBStatusQueryRequest(GresbStatusQueryOption option, char link); |
|
53 | int GRESBStatusQueryRequest(GresbStatusQueryOption option, char link); | |
48 |
|
54 | |||
49 | unsigned char rmapTargetLogicalAddress ; |
|
55 | unsigned char rmapTargetLogicalAddress ; | |
@@ -78,9 +84,16 private: | |||||
78 | QTcpSocket *RMAPReceive_SOCKET; |
|
84 | QTcpSocket *RMAPReceive_SOCKET; | |
79 | QTcpSocket *GRESBStatusQuery_SOCKET; |
|
85 | QTcpSocket *GRESBStatusQuery_SOCKET; | |
80 |
|
86 | |||
81 | spwpacketreceiver *spwPacketReceiverOBJECT; |
|
87 | gresbStatusEnquiry* spwLinkStatusEnquiry; | |
82 |
|
88 | |||
83 | gresbStatusEnquiry* spwLinkStatusEnquiry; |
|
89 | // Packet receiver | |
|
90 | QSemaphore *rmapPacketSEMAPHORE; | |||
|
91 | QSemaphore *ccsdsPacketSEMAPHORE; | |||
|
92 | char* rmapPacket; // The buffer to receive RMAP READ packets | |||
|
93 | unsigned char *ccsdsPacket; | |||
|
94 | char *spwPacket; | |||
|
95 | unsigned int rmapPacketSize; | |||
|
96 | unsigned int ccsdsPacketSize; | |||
84 | }; |
|
97 | }; | |
85 |
|
98 | |||
86 | #endif // GRESB_H |
|
99 | #endif // GRESB_H |
@@ -137,6 +137,7 rmapPluginUI::rmapPluginUI(QWidget *pare | |||||
137 | generalParameters_LAYOUT->setColumnStretch(2, 1); |
|
137 | generalParameters_LAYOUT->setColumnStretch(2, 1); | |
138 |
|
138 | |||
139 | gresb_GROUPBOX->setLayout(connectionLayout); |
|
139 | gresb_GROUPBOX->setLayout(connectionLayout); | |
|
140 | //gresb_GROUPBOX->setLayout(gresbBridge->layout()); | |||
140 | gresb_GROUPBOX->setVisible(false); |
|
141 | gresb_GROUPBOX->setVisible(false); | |
141 | stardundee_GROUPBOX->setLayout(starDundee->layout()); |
|
142 | stardundee_GROUPBOX->setLayout(starDundee->layout()); | |
142 | stardundee_GROUPBOX->setVisible(false); |
|
143 | stardundee_GROUPBOX->setVisible(false); | |
@@ -199,21 +200,6 rmapPluginUI::rmapPluginUI(QWidget *pare | |||||
199 | rmapTargetLogicalAddressSpinBox->setValue(254); |
|
200 | rmapTargetLogicalAddressSpinBox->setValue(254); | |
200 | } |
|
201 | } | |
201 |
|
202 | |||
202 | void rmapPluginUI::connectPort() |
|
|||
203 | { |
|
|||
204 | //emit this->connectPortsig(ui->PortName->text(),ui->PortspeedSlider->value()); |
|
|||
205 | } |
|
|||
206 |
|
||||
207 | void rmapPluginUI::setConnected(bool connected) |
|
|||
208 | { |
|
|||
209 | /*if(connected == true) |
|
|||
210 | { |
|
|||
211 | ui->OpenPort->setText(tr("Close port")); |
|
|||
212 | } |
|
|||
213 | else |
|
|||
214 | ui->OpenPort->setText(tr("Open port"));*/ |
|
|||
215 | } |
|
|||
216 |
|
||||
217 | rmapPluginUI::~rmapPluginUI() |
|
203 | rmapPluginUI::~rmapPluginUI() | |
218 | { |
|
204 | { | |
219 | //delete ui; |
|
205 | //delete ui; |
@@ -110,8 +110,6 public: | |||||
110 | void closeEvent(QCloseEvent *event); |
|
110 | void closeEvent(QCloseEvent *event); | |
111 |
|
111 | |||
112 | public slots: |
|
112 | public slots: | |
113 | void setConnected(bool connected); |
|
|||
114 | void connectPort(); |
|
|||
115 | void chooseLogFile(); |
|
113 | void chooseLogFile(); | |
116 | void logFileEnDisable(int state); |
|
114 | void logFileEnDisable(int state); | |
117 | RMAP_command_codes getCommandCode(); |
|
115 | RMAP_command_codes getCommandCode(); |
@@ -80,23 +80,7 int spwpacketreceiver::receiveSPWPacket( | |||||
80 | return 0; |
|
80 | return 0; | |
81 | } |
|
81 | } | |
82 |
|
82 | |||
83 | bool spwpacketreceiver::isRMAPPacketSemaphoreAvailable() |
|
83 | void spwpacketreceiver::processCCSDSPacket(unsigned char *ccsdsPacket, unsigned int size) // SLOT | |
84 | { |
|
|||
85 | if (rmapPacketSEMAPHORE->available()!=0) return true; |
|
|||
86 | return false; |
|
|||
87 | } |
|
|||
88 |
|
||||
89 | void spwpacketreceiver::acquireRMAPSemaphore() |
|
|||
90 | { |
|
|||
91 | rmapPacketSEMAPHORE->acquire(); |
|
|||
92 | } |
|
|||
93 |
|
||||
94 | void spwpacketreceiver::acquireCCSDSSemaphore() |
|
|||
95 | { |
|
|||
96 | ccsdsPacketSEMAPHORE->acquire(); |
|
|||
97 | } |
|
|||
98 |
|
||||
99 | void spwpacketreceiver::processCCSDSPacket(unsigned char *ccsdsPacket, unsigned int size) |
|
|||
100 | { |
|
84 | { | |
101 | QString message; |
|
85 | QString message; | |
102 | unsigned int fine_time_value = 0; |
|
86 | unsigned int fine_time_value = 0; | |
@@ -127,4 +111,3 void spwpacketreceiver::processCCSDSPack | |||||
127 | ccsdsPacketSEMAPHORE->acquire(); |
|
111 | ccsdsPacketSEMAPHORE->acquire(); | |
128 | emit sendMessage(message); |
|
112 | emit sendMessage(message); | |
129 | } |
|
113 | } | |
130 |
|
@@ -11,9 +11,8 public: | |||||
11 | explicit spwpacketreceiver(QObject *parent = 0); |
|
11 | explicit spwpacketreceiver(QObject *parent = 0); | |
12 | ~spwpacketreceiver(); |
|
12 | ~spwpacketreceiver(); | |
13 | int fetchRMAPPacket(); |
|
13 | int fetchRMAPPacket(); | |
14 | void acquireRMAPSemaphore(); |
|
14 | void acquireCCSDSSemaphore() {ccsdsPacketSEMAPHORE->acquire();} | |
15 | void acquireCCSDSSemaphore(); |
|
15 | void acquireRMAPSemaphore() {rmapPacketSEMAPHORE->acquire();} | |
16 | bool isRMAPPacketSemaphoreAvailable(); |
|
|||
17 |
|
16 | |||
18 | unsigned char* ccsdsPacket; |
|
17 | unsigned char* ccsdsPacket; | |
19 | char* rmapPacket; |
|
18 | char* rmapPacket; |
@@ -40,13 +40,14 public slots: | |||||
40 | void sourceHasChanged(int target) {rmapSourceLogicalAddress = (unsigned char) target;} |
|
40 | void sourceHasChanged(int target) {rmapSourceLogicalAddress = (unsigned char) target;} | |
41 |
|
41 | |||
42 | private: |
|
42 | private: | |
43 | unsigned int getLinkStatus(unsigned char link); |
|
|||
44 | unsigned int GetRoutingTableEntry(); |
|
|||
45 | unsigned int WriteBLOCK(char *data,unsigned int nbBytes,unsigned int address=0); |
|
43 | unsigned int WriteBLOCK(char *data,unsigned int nbBytes,unsigned int address=0); | |
46 | unsigned int ReadBLOCK(unsigned int nbBytes,unsigned int address=0); |
|
44 | unsigned int ReadBLOCK(unsigned int nbBytes,unsigned int address=0); | |
47 | void acquireRMAPSemaphore() {rmapPacketSEMAPHORE->acquire();} |
|
45 | void acquireRMAPSemaphore() {rmapPacketSEMAPHORE->acquire();} | |
48 | void acquireCCSDSSemaphore() {ccsdsPacketSEMAPHORE->acquire();} |
|
46 | void acquireCCSDSSemaphore() {ccsdsPacketSEMAPHORE->acquire();} | |
49 |
|
47 | |||
|
48 | unsigned int getLinkStatus(unsigned char link); | |||
|
49 | unsigned int GetRoutingTableEntry(); | |||
|
50 | ||||
50 | unsigned char rmapTargetLogicalAddress ; |
|
51 | unsigned char rmapTargetLogicalAddress ; | |
51 | unsigned char rmapSourceLogicalAddress ; |
|
52 | unsigned char rmapSourceLogicalAddress ; | |
52 |
|
53 |
General Comments 0
You need to be logged in to leave comments.
Login now