##// END OF EJS Templates
TC_LFR_LOAD_KCOEFFICIENTS...
paul -
r194:72cdb2a15242 R3
parent child
Show More
@@ -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 #dsu3plugin0.openFile("/opt/DEV_PLE/FSW-qt/bin/fsw")
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 psased in argument.
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 char sid;
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 * ring_node_to_send_cwf;
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