@@ -1,2 +1,2 | |||
|
1 | 1 | a586fe639ac179e95bdc150ebdbab0312f31dc30 LFR_basic-parameters |
|
2 | ddd0a6fe16cc1861ad679bf646663e070189e037 header/lfr_common_headers | |
|
2 | 5467523e44cd6a627a81b156673a891f4d6b0017 header/lfr_common_headers |
@@ -38,6 +38,7 int spw_send_waveform_CWF( ring_node *ri | |||
|
38 | 38 | int spw_send_waveform_SWF( ring_node *ring_node_to_send, Header_TM_LFR_SCIENCE_SWF_t *header ); |
|
39 | 39 | int spw_send_waveform_CWF3_light( ring_node *ring_node_to_send, Header_TM_LFR_SCIENCE_CWF_t *header ); |
|
40 | 40 | void spw_send_asm( ring_node *ring_node_to_send, Header_TM_LFR_SCIENCE_ASM_t *header ); |
|
41 | void spw_send_k_dump( ring_node *ring_node_to_send ); | |
|
41 | 42 | |
|
42 | 43 | void timecode_irq_handler( void *pDev, void *regs, int minor, unsigned int tc ); |
|
43 | 44 | rtems_timer_service_routine user_routine( rtems_id timer_id, void *user_data ); |
@@ -8,10 +8,16 | |||
|
8 | 8 | #include "wf_handler.h" |
|
9 | 9 | #include "tm_lfr_tc_exe.h" |
|
10 | 10 | #include "fsw_misc.h" |
|
11 | #include "basic_parameters_params.h" | |
|
11 | 12 | |
|
12 | 13 | #define FLOAT_EQUAL_ZERO 0.001 |
|
13 | 14 | |
|
14 | 15 | extern unsigned short sequenceCounterParameterDump; |
|
16 | extern float k_coeff_intercalib_f0_norm[ ]; | |
|
17 | extern float k_coeff_intercalib_f0_sbm[ ]; | |
|
18 | extern float k_coeff_intercalib_f1_norm[ ]; | |
|
19 | extern float k_coeff_intercalib_f1_sbm[ ]; | |
|
20 | extern float k_coeff_intercalib_f2[ ]; | |
|
15 | 21 | |
|
16 | 22 | int action_load_common_par( ccsdsTelecommandPacket_t *TC ); |
|
17 | 23 | int action_load_normal_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id , unsigned char *time); |
@@ -49,6 +55,11 unsigned int check_update_info_hk_lfr_mo | |||
|
49 | 55 | unsigned int check_update_info_hk_tds_mode( unsigned char mode ); |
|
50 | 56 | unsigned int check_update_info_hk_thr_mode( unsigned char mode ); |
|
51 | 57 | |
|
58 | // KCOEFFICIENTS | |
|
59 | int set_sy_lfr_kcoeff( ccsdsTelecommandPacket_t *TC ); | |
|
60 | ||
|
52 | 61 | void init_parameter_dump( void ); |
|
62 | void init_kcoefficients_dump( void ); | |
|
63 | void init_kcoefficients_dump_packet( Packet_TM_LFR_KCOEFFICIENTS_DUMP_t *kcoefficients_dump, unsigned char pkt_nr, unsigned char blk_nr ); | |
|
53 | 64 | |
|
54 | 65 | #endif // TC_LOAD_DUMP_PARAMETERS_H |
@@ -1,8 +1,8 | |||
|
1 | 1 | # LOAD FSW USING LINK 1 |
|
2 | 2 | SpwPlugin0.StarDundeeSelectLinkNumber( 1 ) |
|
3 | 3 | |
|
4 |
|
|
|
5 | dsu3plugin0.openFile("/opt/LFR/LFR-FSW/2.0.2.3/fsw") | |
|
4 | dsu3plugin0.openFile("/opt/DEV_PLE/FSW-qt/bin/fsw") | |
|
5 | #dsu3plugin0.openFile("/opt/LFR/LFR-FSW/2.0.2.3/fsw") | |
|
6 | 6 | dsu3plugin0.loadFile() |
|
7 | 7 | |
|
8 | 8 | dsu3plugin0.run() |
@@ -22,6 +22,7 SpwPlugin0.TCPServerConnect() | |||
|
22 | 22 | LFRControlPlugin0.TCPServerConnect() |
|
23 | 23 | |
|
24 | 24 | dsu3plugin0.openFile("/opt/DEV_PLE/FSW-qt/bin/fsw") |
|
25 | #dsu3plugin0.openFile("/opt/LFR/LFR-FSW/2.0.2.3/fsw") | |
|
25 | 26 | dsu3plugin0.loadFile() |
|
26 | 27 | dsu3plugin0.run() |
|
27 | 28 |
@@ -129,6 +129,7 rtems_task Init( rtems_task_argument ign | |||
|
129 | 129 | PRINTF("\n\n") |
|
130 | 130 | |
|
131 | 131 | init_parameter_dump(); |
|
132 | init_kcoefficients_dump(); | |
|
132 | 133 | init_local_mode_parameters(); |
|
133 | 134 | init_housekeeping_parameters(); |
|
134 | 135 | init_k_coefficients_f0(); |
@@ -335,7 +335,7 void init_housekeeping_parameters( void | |||
|
335 | 335 | |
|
336 | 336 | void increment_seq_counter( unsigned short *packetSequenceControl ) |
|
337 | 337 | { |
|
338 |
/** This function increment the sequence counter p |
|
|
338 | /** This function increment the sequence counter passes in argument. | |
|
339 | 339 | * |
|
340 | 340 | * The increment does not affect the grouping flag. In case of an overflow, the counter is reset to 0. |
|
341 | 341 | * |
@@ -217,7 +217,7 rtems_task send_task( rtems_task_argumen | |||
|
217 | 217 | size_t size; // size of the incoming TC packet |
|
218 | 218 | u_int32_t count; |
|
219 | 219 | rtems_id queue_id; |
|
220 |
unsigned |
|
|
220 | unsigned int sid; | |
|
221 | 221 | |
|
222 | 222 | incomingRingNodePtr = NULL; |
|
223 | 223 | ring_node_address = 0; |
@@ -270,10 +270,14 rtems_task send_task( rtems_task_argumen | |||
|
270 | 270 | { |
|
271 | 271 | spw_send_waveform_CWF3_light( incomingRingNodePtr, &headerCWF ); |
|
272 | 272 | } |
|
273 | else if ( (sid==SID_NORM_ASM_F0) || (SID_NORM_ASM_F1) || (SID_NORM_ASM_F2) ) | |
|
273 | else if ( (sid==SID_NORM_ASM_F0) || (sid==SID_NORM_ASM_F1) || (sid==SID_NORM_ASM_F2) ) | |
|
274 | 274 | { |
|
275 | 275 | spw_send_asm( incomingRingNodePtr, &headerASM ); |
|
276 | 276 | } |
|
277 | else if ( sid==TM_CODE_K_DUMP ) | |
|
278 | { | |
|
279 | spw_send_k_dump( incomingRingNodePtr ); | |
|
280 | } | |
|
277 | 281 | else |
|
278 | 282 | { |
|
279 | 283 | printf("unexpected sid = %d\n", sid); |
@@ -1124,3 +1128,29 void spw_send_asm( ring_node *ring_node_ | |||
|
1124 | 1128 | } |
|
1125 | 1129 | } |
|
1126 | 1130 | } |
|
1131 | ||
|
1132 | void spw_send_k_dump( ring_node *ring_node_to_send ) | |
|
1133 | { | |
|
1134 | rtems_status_code status; | |
|
1135 | Packet_TM_LFR_KCOEFFICIENTS_DUMP_t *kcoefficients_dump; | |
|
1136 | unsigned int packetLength; | |
|
1137 | unsigned int size; | |
|
1138 | ||
|
1139 | printf("spw_send_k_dump\n"); | |
|
1140 | ||
|
1141 | kcoefficients_dump = (Packet_TM_LFR_KCOEFFICIENTS_DUMP_t *) ring_node_to_send->buffer_address; | |
|
1142 | ||
|
1143 | packetLength = kcoefficients_dump->packetLength[0] * 256 + kcoefficients_dump->packetLength[1]; | |
|
1144 | ||
|
1145 | size = packetLength + CCSDS_TC_TM_PACKET_OFFSET + CCSDS_PROTOCOLE_EXTRA_BYTES; | |
|
1146 | ||
|
1147 | printf("packetLength %d, size %d\n", packetLength, size ); | |
|
1148 | ||
|
1149 | status = write( fdSPW, (char *) ring_node_to_send->buffer_address, size ); | |
|
1150 | ||
|
1151 | if (status == -1){ | |
|
1152 | PRINTF2("in SEND *** (2.a) ERRNO = %d, size = %d\n", errno, size) | |
|
1153 | } | |
|
1154 | ||
|
1155 | ring_node_to_send->status = 0x00; | |
|
1156 | } |
@@ -226,7 +226,9 int tc_check_type_subtype( unsigned char | |||
|
226 | 226 | || (packetSubType == TC_SUBTYPE_DUMP) |
|
227 | 227 | || (packetSubType == TC_SUBTYPE_ENTER) |
|
228 | 228 | || (packetSubType == TC_SUBTYPE_UPDT_INFO) |
|
229 |
|| (packetSubType == TC_SUBTYPE_EN_CAL) || (packetSubType == TC_SUBTYPE_DIS_CAL) |
|
|
229 | || (packetSubType == TC_SUBTYPE_EN_CAL) || (packetSubType == TC_SUBTYPE_DIS_CAL) | |
|
230 | || (packetSubType == TC_SUBTYPE_LOAD_K) || (packetSubType == TC_SUBTYPE_DUMP_K) | |
|
231 | || (packetSubType == TC_SUBTYPE_LOAD_FBINS) ) | |
|
230 | 232 | { |
|
231 | 233 | status = CCSDS_TM_VALID; |
|
232 | 234 | } |
@@ -388,6 +390,30 int tc_check_length( unsigned char packe | |||
|
388 | 390 | status = CCSDS_TM_VALID; |
|
389 | 391 | } |
|
390 | 392 | break; |
|
393 | case TC_SUBTYPE_LOAD_K: | |
|
394 | if (length!=(TC_LEN_LOAD_K-CCSDS_TC_TM_PACKET_OFFSET)) { | |
|
395 | status = WRONG_LEN_PKT; | |
|
396 | } | |
|
397 | else { | |
|
398 | status = CCSDS_TM_VALID; | |
|
399 | } | |
|
400 | break; | |
|
401 | case TC_SUBTYPE_DUMP_K: | |
|
402 | if (length!=(TC_LEN_DUMP_K-CCSDS_TC_TM_PACKET_OFFSET)) { | |
|
403 | status = WRONG_LEN_PKT; | |
|
404 | } | |
|
405 | else { | |
|
406 | status = CCSDS_TM_VALID; | |
|
407 | } | |
|
408 | break; | |
|
409 | case TC_SUBTYPE_LOAD_FBINS: | |
|
410 | if (length!=(TC_LEN_LOAD_FBINS-CCSDS_TC_TM_PACKET_OFFSET)) { | |
|
411 | status = WRONG_LEN_PKT; | |
|
412 | } | |
|
413 | else { | |
|
414 | status = CCSDS_TM_VALID; | |
|
415 | } | |
|
416 | break; | |
|
391 | 417 | case TC_SUBTYPE_UPDT_TIME: |
|
392 | 418 | if (length!=(TC_LEN_UPDT_TIME-CCSDS_TC_TM_PACKET_OFFSET)) { |
|
393 | 419 | status = WRONG_LEN_PKT; |
@@ -112,6 +112,7 rtems_task actn_task( rtems_task_argumen | |||
|
112 | 112 | close_action( &TC, result, queue_snd_id ); |
|
113 | 113 | break; |
|
114 | 114 | case TC_SUBTYPE_LOAD_K: |
|
115 | printf("TC_SUBTYPE_LOAD_K\n"); | |
|
115 | 116 | result = action_load_kcoefficients( &TC, queue_snd_id, time ); |
|
116 | 117 | close_action( &TC, result, queue_snd_id ); |
|
117 | 118 | break; |
@@ -167,8 +168,6 int action_enter_mode(ccsdsTelecommandPa | |||
|
167 | 168 | unsigned int transitionCoarseTime; |
|
168 | 169 | unsigned char * bytePosPtr; |
|
169 | 170 | |
|
170 | printTaskID(); | |
|
171 | ||
|
172 | 171 | bytePosPtr = (unsigned char *) &TC->packetID; |
|
173 | 172 | |
|
174 | 173 | requestedMode = bytePosPtr[ BYTE_POS_CP_MODE_LFR_SET ]; |
@@ -672,7 +671,6 int suspend_science_tasks() | |||
|
672 | 671 | rtems_status_code status; |
|
673 | 672 | |
|
674 | 673 | printf("in suspend_science_tasks\n"); |
|
675 | printTaskID(); | |
|
676 | 674 | |
|
677 | 675 | status = rtems_task_suspend( Task_id[TASKID_AVF0] ); // suspend AVF0 |
|
678 | 676 | if (status != RTEMS_SUCCESSFUL) |
@@ -1121,13 +1119,3 void reset_lfr( void ) | |||
|
1121 | 1119 | |
|
1122 | 1120 | set_lfr_soft_reset( 0 ); |
|
1123 | 1121 | } |
|
1124 | ||
|
1125 | void printTaskID( void ) | |
|
1126 | { | |
|
1127 | unsigned int i; | |
|
1128 | ||
|
1129 | for (i=0; i<20;i++) | |
|
1130 | { | |
|
1131 | printf("ID %d = %d\n", i, (unsigned int) Task_id[i]); | |
|
1132 | } | |
|
1133 | } |
@@ -14,6 +14,11 | |||
|
14 | 14 | |
|
15 | 15 | #include "tc_load_dump_parameters.h" |
|
16 | 16 | |
|
17 | Packet_TM_LFR_KCOEFFICIENTS_DUMP_t kcoefficients_dump_1; | |
|
18 | Packet_TM_LFR_KCOEFFICIENTS_DUMP_t kcoefficients_dump_2; | |
|
19 | ring_node kcoefficient_node_1; | |
|
20 | ring_node kcoefficient_node_2; | |
|
21 | ||
|
17 | 22 | int action_load_common_par(ccsdsTelecommandPacket_t *TC) |
|
18 | 23 | { |
|
19 | 24 | /** This function updates the LFR registers with the incoming common parameters. |
@@ -282,11 +287,7 int action_load_kcoefficients(ccsdsTelec | |||
|
282 | 287 | |
|
283 | 288 | flag = LFR_DEFAULT; |
|
284 | 289 | |
|
285 | // NB_BINS_COMPRESSED_SM_F0; | |
|
286 | // NB_BINS_COMPRESSED_SM_F1; | |
|
287 | // NB_BINS_COMPRESSED_SM_F2; | |
|
288 | ||
|
289 | send_tm_lfr_tc_exe_not_implemented( TC, queue_id, time ); | |
|
290 | flag = set_sy_lfr_kcoeff( TC ); | |
|
290 | 291 | |
|
291 | 292 | return flag; |
|
292 | 293 | } |
@@ -309,6 +310,18 int action_load_fbins_mask(ccsdsTelecomm | |||
|
309 | 310 | return flag; |
|
310 | 311 | } |
|
311 | 312 | |
|
313 | void printKCoefficients(unsigned int freq, unsigned int bin, float *k_coeff) | |
|
314 | { | |
|
315 | printf("freq = %d *** bin = %d *** (0) %f *** (1) %f *** (2) %f *** (3) %f *** (4) %f\n", | |
|
316 | freq, | |
|
317 | bin, | |
|
318 | k_coeff[ (bin*NB_K_COEFF_PER_BIN) + 0 ], | |
|
319 | k_coeff[ (bin*NB_K_COEFF_PER_BIN) + 1 ], | |
|
320 | k_coeff[ (bin*NB_K_COEFF_PER_BIN) + 2 ], | |
|
321 | k_coeff[ (bin*NB_K_COEFF_PER_BIN) + 3 ], | |
|
322 | k_coeff[ (bin*NB_K_COEFF_PER_BIN) + 4 ]); | |
|
323 | } | |
|
324 | ||
|
312 | 325 | int action_dump_kcoefficients(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time) |
|
313 | 326 | { |
|
314 | 327 | /** This function updates the LFR registers with the incoming sbm2 parameters. |
@@ -318,13 +331,127 int action_dump_kcoefficients(ccsdsTelec | |||
|
318 | 331 | * |
|
319 | 332 | */ |
|
320 | 333 | |
|
321 | int flag; | |
|
334 | unsigned int address; | |
|
335 | rtems_status_code status; | |
|
336 | unsigned int freq; | |
|
337 | unsigned int bin; | |
|
338 | unsigned int coeff; | |
|
339 | unsigned char *kCoeffPtr; | |
|
340 | unsigned char *kCoeffDumpPtr; | |
|
322 | 341 | |
|
323 | flag = LFR_DEFAULT; | |
|
342 | // for each sy_lfr_kcoeff_frequency there is 32 kcoeff | |
|
343 | // F0 => 11 bins | |
|
344 | // F1 => 13 bins | |
|
345 | // F2 => 12 bins | |
|
346 | // 36 bins to dump in two packets (30 bins max per packet) | |
|
324 | 347 | |
|
325 | send_tm_lfr_tc_exe_not_implemented( TC, queue_id, time ); | |
|
348 | //********* | |
|
349 | // PACKET 1 | |
|
350 | // 11 F0 bins, 13 F1 bins and 6 F2 bins | |
|
351 | kcoefficients_dump_1.packetSequenceControl[0] = (unsigned char) (sequenceCounterParameterDump >> 8); | |
|
352 | kcoefficients_dump_1.packetSequenceControl[1] = (unsigned char) (sequenceCounterParameterDump ); | |
|
353 | increment_seq_counter( &sequenceCounterParameterDump ); | |
|
354 | for( freq=0; | |
|
355 | freq<NB_BINS_COMPRESSED_SM_F0; | |
|
356 | freq++ ) | |
|
357 | { | |
|
358 | kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + 1] = freq; | |
|
359 | bin = freq; | |
|
360 | printKCoefficients( freq, bin, k_coeff_intercalib_f0_norm); | |
|
361 | for ( coeff=0; coeff<NB_K_COEFF_PER_BIN; coeff++ ) | |
|
362 | { | |
|
363 | kCoeffDumpPtr = (unsigned char*) &kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + coeff*NB_BYTES_PER_FLOAT + 2 ]; // 2 for the kcoeff_frequency | |
|
364 | kCoeffPtr = (unsigned char*) &k_coeff_intercalib_f0_norm[ (bin*NB_K_COEFF_PER_BIN) + coeff ]; | |
|
365 | kCoeffDumpPtr[0] = kCoeffPtr[0]; | |
|
366 | kCoeffDumpPtr[1] = kCoeffPtr[1]; | |
|
367 | kCoeffDumpPtr[2] = kCoeffPtr[2]; | |
|
368 | kCoeffDumpPtr[3] = kCoeffPtr[3]; | |
|
369 | } | |
|
370 | } | |
|
371 | for( freq=NB_BINS_COMPRESSED_SM_F0; | |
|
372 | freq<(NB_BINS_COMPRESSED_SM_F0+NB_BINS_COMPRESSED_SM_F1); | |
|
373 | freq++ ) | |
|
374 | { | |
|
375 | kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + 1 ] = freq; | |
|
376 | bin = freq - NB_BINS_COMPRESSED_SM_F0; | |
|
377 | printKCoefficients( freq, bin, k_coeff_intercalib_f1_norm); | |
|
378 | for ( coeff=0; coeff<NB_K_COEFF_PER_BIN; coeff++ ) | |
|
379 | { | |
|
380 | kCoeffDumpPtr = (unsigned char*) &kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + coeff*NB_BYTES_PER_FLOAT + 2 ]; // 2 for the kcoeff_frequency | |
|
381 | kCoeffPtr = (unsigned char*) &k_coeff_intercalib_f1_norm[ (bin*NB_K_COEFF_PER_BIN) + coeff ]; | |
|
382 | kCoeffDumpPtr[0] = kCoeffPtr[0]; | |
|
383 | kCoeffDumpPtr[1] = kCoeffPtr[1]; | |
|
384 | kCoeffDumpPtr[2] = kCoeffPtr[2]; | |
|
385 | kCoeffDumpPtr[3] = kCoeffPtr[3]; | |
|
386 | } | |
|
387 | } | |
|
388 | for( freq=(NB_BINS_COMPRESSED_SM_F0+NB_BINS_COMPRESSED_SM_F1); | |
|
389 | freq<(NB_BINS_COMPRESSED_SM_F0+NB_BINS_COMPRESSED_SM_F1+6); | |
|
390 | freq++ ) | |
|
391 | { | |
|
392 | kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + 1 ] = freq; | |
|
393 | bin = freq - (NB_BINS_COMPRESSED_SM_F0+NB_BINS_COMPRESSED_SM_F1); | |
|
394 | printKCoefficients( freq, bin, k_coeff_intercalib_f2); | |
|
395 | for ( coeff=0; coeff<NB_K_COEFF_PER_BIN; coeff++ ) | |
|
396 | { | |
|
397 | kCoeffDumpPtr = (unsigned char*) &kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + coeff*NB_BYTES_PER_FLOAT + 2 ]; // 2 for the kcoeff_frequency | |
|
398 | kCoeffPtr = (unsigned char*) &k_coeff_intercalib_f2[ (bin*NB_K_COEFF_PER_BIN) + coeff ]; | |
|
399 | kCoeffDumpPtr[0] = kCoeffPtr[0]; | |
|
400 | kCoeffDumpPtr[1] = kCoeffPtr[1]; | |
|
401 | kCoeffDumpPtr[2] = kCoeffPtr[2]; | |
|
402 | kCoeffDumpPtr[3] = kCoeffPtr[3]; | |
|
403 | } | |
|
404 | } | |
|
405 | kcoefficients_dump_1.time[0] = (unsigned char) (time_management_regs->coarse_time>>24); | |
|
406 | kcoefficients_dump_1.time[1] = (unsigned char) (time_management_regs->coarse_time>>16); | |
|
407 | kcoefficients_dump_1.time[2] = (unsigned char) (time_management_regs->coarse_time>>8); | |
|
408 | kcoefficients_dump_1.time[3] = (unsigned char) (time_management_regs->coarse_time); | |
|
409 | kcoefficients_dump_1.time[4] = (unsigned char) (time_management_regs->fine_time>>8); | |
|
410 | kcoefficients_dump_1.time[5] = (unsigned char) (time_management_regs->fine_time); | |
|
411 | // SEND DATA | |
|
412 | kcoefficient_node_1.status = 1; | |
|
413 | address = (unsigned int) &kcoefficient_node_1; | |
|
414 | status = rtems_message_queue_send( queue_id, &address, sizeof( ring_node* ) ); | |
|
415 | if (status != RTEMS_SUCCESSFUL) { | |
|
416 | PRINTF1("in action_dump_kcoefficients *** ERR sending packet 1 , code %d", status) | |
|
417 | } | |
|
326 | 418 | |
|
327 | return flag; | |
|
419 | //******** | |
|
420 | // PACKET 2 | |
|
421 | // 6 F2 bins | |
|
422 | kcoefficients_dump_2.packetSequenceControl[0] = (unsigned char) (sequenceCounterParameterDump >> 8); | |
|
423 | kcoefficients_dump_2.packetSequenceControl[1] = (unsigned char) (sequenceCounterParameterDump ); | |
|
424 | increment_seq_counter( &sequenceCounterParameterDump ); | |
|
425 | for( freq=0; freq<6; freq++ ) | |
|
426 | { | |
|
427 | kcoefficients_dump_2.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + 1 ] = NB_BINS_COMPRESSED_SM_F0 + NB_BINS_COMPRESSED_SM_F1 + 6 + freq; | |
|
428 | bin = freq + 6; | |
|
429 | printKCoefficients( freq, bin, k_coeff_intercalib_f2); | |
|
430 | for ( coeff=0; coeff<NB_K_COEFF_PER_BIN; coeff++ ) | |
|
431 | { | |
|
432 | kCoeffDumpPtr = (unsigned char*) &kcoefficients_dump_2.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + coeff*NB_BYTES_PER_FLOAT + 2 ]; // 2 for the kcoeff_frequency | |
|
433 | kCoeffPtr = (unsigned char*) &k_coeff_intercalib_f2[ (bin*NB_K_COEFF_PER_BIN) + coeff ]; | |
|
434 | kCoeffDumpPtr[0] = kCoeffPtr[0]; | |
|
435 | kCoeffDumpPtr[1] = kCoeffPtr[1]; | |
|
436 | kCoeffDumpPtr[2] = kCoeffPtr[2]; | |
|
437 | kCoeffDumpPtr[3] = kCoeffPtr[3]; | |
|
438 | } | |
|
439 | } | |
|
440 | kcoefficients_dump_2.time[0] = (unsigned char) (time_management_regs->coarse_time>>24); | |
|
441 | kcoefficients_dump_2.time[1] = (unsigned char) (time_management_regs->coarse_time>>16); | |
|
442 | kcoefficients_dump_2.time[2] = (unsigned char) (time_management_regs->coarse_time>>8); | |
|
443 | kcoefficients_dump_2.time[3] = (unsigned char) (time_management_regs->coarse_time); | |
|
444 | kcoefficients_dump_2.time[4] = (unsigned char) (time_management_regs->fine_time>>8); | |
|
445 | kcoefficients_dump_2.time[5] = (unsigned char) (time_management_regs->fine_time); | |
|
446 | // SEND DATA | |
|
447 | kcoefficient_node_2.status = 1; | |
|
448 | address = (unsigned int) &kcoefficient_node_2; | |
|
449 | status = rtems_message_queue_send( queue_id, &address, sizeof( ring_node* ) ); | |
|
450 | if (status != RTEMS_SUCCESSFUL) { | |
|
451 | PRINTF1("in action_dump_kcoefficients *** ERR sending packet 2, code %d", status) | |
|
452 | } | |
|
453 | ||
|
454 | return status; | |
|
328 | 455 | } |
|
329 | 456 | |
|
330 | 457 | int action_dump_par( rtems_id queue_id ) |
@@ -760,21 +887,73 unsigned int check_update_info_hk_thr_mo | |||
|
760 | 887 | // KCOEFFICIENTS |
|
761 | 888 | int set_sy_lfr_kcoeff( ccsdsTelecommandPacket_t *TC ) |
|
762 | 889 | { |
|
890 | unsigned int i; | |
|
763 | 891 | unsigned short sy_lfr_kcoeff_frequency; |
|
892 | unsigned short bin; | |
|
764 | 893 | unsigned short *freqPtr; |
|
894 | float *kcoeffPtr_norm; | |
|
895 | float *kcoeffPtr_sbm; | |
|
765 | 896 | int status; |
|
897 | unsigned char *kcoeffLoadPtr; | |
|
898 | unsigned char *kcoeffNormPtr; | |
|
766 | 899 | |
|
767 | 900 | status = LFR_SUCCESSFUL; |
|
768 | 901 | |
|
769 | freqPtr = (unsigned short *) &TC->dataAndCRC[0]; | |
|
902 | kcoeffPtr_norm = NULL; | |
|
903 | kcoeffPtr_sbm = NULL; | |
|
904 | bin = 0; | |
|
905 | ||
|
906 | freqPtr = (unsigned short *) &TC->dataAndCRC[DATAFIELD_POS_SY_LFR_KCOEFF_FREQUENCY]; | |
|
770 | 907 | sy_lfr_kcoeff_frequency = *freqPtr; |
|
771 | 908 | |
|
772 | PRINTF1("sy_lfr_kcoeff_frequency = %d\n", sy_lfr_kcoeff_frequency) | |
|
773 | ||
|
774 | if (sy_lfr_kcoeff_frequency >= NB_BINS_COMPRESSED_SM) | |
|
909 | if ( sy_lfr_kcoeff_frequency >= NB_BINS_COMPRESSED_SM ) | |
|
775 | 910 | { |
|
776 | 911 | PRINTF1("ERR *** in set_sy_lfr_kcoeff_frequency *** sy_lfr_kcoeff_frequency = %d\n", sy_lfr_kcoeff_frequency) |
|
777 | 912 | } |
|
913 | else | |
|
914 | { | |
|
915 | if ( ( sy_lfr_kcoeff_frequency >= 0 ) | |
|
916 | && ( sy_lfr_kcoeff_frequency < NB_BINS_COMPRESSED_SM_F0 ) ) | |
|
917 | { | |
|
918 | kcoeffPtr_norm = k_coeff_intercalib_f0_norm; | |
|
919 | kcoeffPtr_sbm = k_coeff_intercalib_f0_sbm; | |
|
920 | bin = sy_lfr_kcoeff_frequency; | |
|
921 | } | |
|
922 | else if ( ( sy_lfr_kcoeff_frequency >= NB_BINS_COMPRESSED_SM_F0 ) | |
|
923 | && ( sy_lfr_kcoeff_frequency < (NB_BINS_COMPRESSED_SM_F0 + NB_BINS_COMPRESSED_SM_F1) ) ) | |
|
924 | { | |
|
925 | kcoeffPtr_norm = k_coeff_intercalib_f1_norm; | |
|
926 | kcoeffPtr_sbm = k_coeff_intercalib_f1_sbm; | |
|
927 | bin = sy_lfr_kcoeff_frequency - NB_BINS_COMPRESSED_SM_F0; | |
|
928 | } | |
|
929 | else if ( ( sy_lfr_kcoeff_frequency >= (NB_BINS_COMPRESSED_SM_F0 + NB_BINS_COMPRESSED_SM_F1) ) | |
|
930 | && ( sy_lfr_kcoeff_frequency < (NB_BINS_COMPRESSED_SM_F0 + NB_BINS_COMPRESSED_SM_F1 + NB_BINS_COMPRESSED_SM_F2) ) ) | |
|
931 | { | |
|
932 | kcoeffPtr_norm = k_coeff_intercalib_f2; | |
|
933 | kcoeffPtr_sbm = NULL; | |
|
934 | bin = sy_lfr_kcoeff_frequency - (NB_BINS_COMPRESSED_SM_F0 + NB_BINS_COMPRESSED_SM_F1); | |
|
935 | } | |
|
936 | } | |
|
937 | ||
|
938 | if (kcoeffPtr_norm != NULL ) | |
|
939 | { | |
|
940 | printf("freq = %d, bin = %d\n", sy_lfr_kcoeff_frequency, bin); | |
|
941 | for (i=0; i<NB_K_COEFF_PER_BIN; i++) | |
|
942 | { | |
|
943 | kcoeffLoadPtr = (unsigned char*) &TC->dataAndCRC[DATAFIELD_POS_SY_LFR_KCOEFF_1 + NB_BYTES_PER_FLOAT * i]; | |
|
944 | kcoeffNormPtr = (unsigned char*) &kcoeffPtr_norm[ (bin * NB_K_COEFF_PER_BIN) + i ]; | |
|
945 | kcoeffNormPtr[0] = kcoeffLoadPtr[0]; | |
|
946 | kcoeffNormPtr[1] = kcoeffLoadPtr[1]; | |
|
947 | kcoeffNormPtr[2] = kcoeffLoadPtr[2]; | |
|
948 | kcoeffNormPtr[3] = kcoeffLoadPtr[3]; | |
|
949 | printf("kcoeffPtr: %x %x %x %x *** %f \n", | |
|
950 | kcoeffLoadPtr[0], | |
|
951 | kcoeffLoadPtr[1], | |
|
952 | kcoeffLoadPtr[2], | |
|
953 | kcoeffLoadPtr[3], | |
|
954 | kcoeffPtr_norm[ (bin * NB_K_COEFF_PER_BIN) + i ]); | |
|
955 | } | |
|
956 | } | |
|
778 | 957 | |
|
779 | 958 | return status; |
|
780 | 959 | } |
@@ -844,9 +1023,70 void init_parameter_dump( void ) | |||
|
844 | 1023 | parameter_dump_packet.sy_lfr_s2_bp_p1 = (unsigned char) DEFAULT_SY_LFR_S2_BP_P1; |
|
845 | 1024 | } |
|
846 | 1025 | |
|
1026 | void init_kcoefficients_dump( void ) | |
|
1027 | { | |
|
1028 | init_kcoefficients_dump_packet( &kcoefficients_dump_1, 1, 30 ); | |
|
1029 | init_kcoefficients_dump_packet( &kcoefficients_dump_2, 2, 6 ); | |
|
1030 | ||
|
1031 | kcoefficient_node_1.previous = NULL; | |
|
1032 | kcoefficient_node_1.next = NULL; | |
|
1033 | kcoefficient_node_1.sid = TM_CODE_K_DUMP; | |
|
1034 | kcoefficient_node_1.coarseTime = 0x00; | |
|
1035 | kcoefficient_node_1.fineTime = 0x00; | |
|
1036 | kcoefficient_node_1.buffer_address = (int) &kcoefficients_dump_1; | |
|
1037 | kcoefficient_node_1.status = 0x00; | |
|
1038 | ||
|
1039 | kcoefficient_node_2.previous = NULL; | |
|
1040 | kcoefficient_node_2.next = NULL; | |
|
1041 | kcoefficient_node_2.sid = TM_CODE_K_DUMP; | |
|
1042 | kcoefficient_node_2.coarseTime = 0x00; | |
|
1043 | kcoefficient_node_2.fineTime = 0x00; | |
|
1044 | kcoefficient_node_2.buffer_address = (int) &kcoefficients_dump_2; | |
|
1045 | kcoefficient_node_2.status = 0x00; | |
|
1046 | } | |
|
1047 | ||
|
1048 | void init_kcoefficients_dump_packet( Packet_TM_LFR_KCOEFFICIENTS_DUMP_t *kcoefficients_dump, unsigned char pkt_nr, unsigned char blk_nr ) | |
|
1049 | { | |
|
1050 | unsigned int k; | |
|
1051 | unsigned int packetLength; | |
|
1052 | ||
|
1053 | packetLength = blk_nr * 130 + 20 - CCSDS_TC_TM_PACKET_OFFSET; // 4 bytes for the CCSDS header | |
|
1054 | ||
|
1055 | kcoefficients_dump->targetLogicalAddress = CCSDS_DESTINATION_ID; | |
|
1056 | kcoefficients_dump->protocolIdentifier = CCSDS_PROTOCOLE_ID; | |
|
1057 | kcoefficients_dump->reserved = CCSDS_RESERVED; | |
|
1058 | kcoefficients_dump->userApplication = CCSDS_USER_APP; | |
|
1059 | kcoefficients_dump->packetID[0] = (unsigned char) (APID_TM_PARAMETER_DUMP >> 8);; | |
|
1060 | kcoefficients_dump->packetID[1] = (unsigned char) APID_TM_PARAMETER_DUMP;; | |
|
1061 | kcoefficients_dump->packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_STANDALONE; | |
|
1062 | kcoefficients_dump->packetSequenceControl[1] = TM_PACKET_SEQ_CNT_DEFAULT; | |
|
1063 | kcoefficients_dump->packetLength[0] = (unsigned char) (packetLength >> 8); | |
|
1064 | kcoefficients_dump->packetLength[1] = (unsigned char) packetLength; | |
|
1065 | // DATA FIELD HEADER | |
|
1066 | kcoefficients_dump->spare1_pusVersion_spare2 = SPARE1_PUSVERSION_SPARE2; | |
|
1067 | kcoefficients_dump->serviceType = TM_TYPE_K_DUMP; | |
|
1068 | kcoefficients_dump->serviceSubType = TM_SUBTYPE_K_DUMP; | |
|
1069 | kcoefficients_dump->destinationID= TM_DESTINATION_ID_GROUND; | |
|
1070 | kcoefficients_dump->time[0] = 0x00; | |
|
1071 | kcoefficients_dump->time[1] = 0x00; | |
|
1072 | kcoefficients_dump->time[2] = 0x00; | |
|
1073 | kcoefficients_dump->time[3] = 0x00; | |
|
1074 | kcoefficients_dump->time[4] = 0x00; | |
|
1075 | kcoefficients_dump->time[5] = 0x00; | |
|
1076 | kcoefficients_dump->sid = SID_K_DUMP; | |
|
1077 | ||
|
1078 | kcoefficients_dump->pkt_cnt = 2; | |
|
1079 | kcoefficients_dump->pkt_nr = pkt_nr; | |
|
1080 | kcoefficients_dump->blk_nr = blk_nr; | |
|
1081 | ||
|
1082 | //****************** | |
|
1083 | // SOURCE DATA repeated N times with N in [0 .. PA_LFR_KCOEFF_BLK_NR] | |
|
1084 | // one blk is 2 + 4 * 32 = 130 bytes, 30 blks max in one packet (30 * 130 = 3900) | |
|
1085 | for (k=0; k<3900; k++) | |
|
1086 | { | |
|
1087 | kcoefficients_dump->kcoeff_blks[k] = 0x00; | |
|
1088 | } | |
|
1089 | } | |
|
847 | 1090 | |
|
848 | 1091 | |
|
849 | 1092 | |
|
850 | ||
|
851 | ||
|
852 |
@@ -680,7 +680,7 rtems_task cwf1_task(rtems_task_argument | |||
|
680 | 680 | rtems_id queue_id; |
|
681 | 681 | rtems_status_code status; |
|
682 | 682 | |
|
683 |
ring_node * |
|
|
683 | ring_node *ring_node_to_send_cwf; | |
|
684 | 684 | |
|
685 | 685 | status = get_message_queue_id_send( &queue_id ); |
|
686 | 686 | if (status != RTEMS_SUCCESSFUL) |
General Comments 0
You need to be logged in to leave comments.
Login now