##// END OF EJS Templates
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
paul -
r195:868116ca6c4a R3
parent child
Show More
@@ -1,2 +1,2
1 1 a586fe639ac179e95bdc150ebdbab0312f31dc30 LFR_basic-parameters
2 5467523e44cd6a627a81b156673a891f4d6b0017 header/lfr_common_headers
2 a806a190dcd72f71d336545073400d3cdaaa3119 header/lfr_common_headers
@@ -89,6 +89,7 extern volatile int sm_f2[ ];
89 89
90 90 // parameters
91 91 extern struct param_local_str param_local;
92 extern Packet_TM_LFR_PARAMETER_DUMP_t parameter_dump_packet;
92 93
93 94 // registers
94 95 extern time_management_regs_t *time_management_regs;
@@ -143,19 +144,23 static inline void SM_average(float *ave
143 144 ring_node *ring_node_tab[],
144 145 unsigned int nbAverageNORM, unsigned int nbAverageSBM,
145 146 asm_msg *msgForMATR );
147
146 148 static inline void SM_average_debug(float *averaged_spec_mat_NORM, float *averaged_spec_mat_SBM,
147 149 ring_node *ring_node_tab[],
148 150 unsigned int nbAverageNORM, unsigned int nbAverageSBM,
149 151 asm_msg *msgForMATR );
150 152
151 153 void ASM_patch( float *inputASM, float *outputASM );
154
152 155 void extractReImVectors(float *inputASM, float *outputASM, unsigned int asmComponent );
153 156
154 157 static inline void ASM_reorganize_and_divide(float *averaged_spec_mat, float *averaged_spec_mat_reorganized,
155 158 float divider );
159
156 160 static inline void ASM_compress_reorganize_and_divide(float *averaged_spec_mat, float *compressed_spec_mat,
157 161 float divider,
158 162 unsigned char nbBinsCompressedMatrix, unsigned char nbBinsToAverage , unsigned char ASMIndexStart);
163
159 164 static inline void ASM_convert(volatile float *input_matrix, char *output_matrix);
160 165
161 166 void SM_average( float *averaged_spec_mat_NORM, float *averaged_spec_mat_SBM,
@@ -310,4 +315,10 void ASM_convert( volatile float *input_
310 315 }
311 316 }
312 317
318 void ASM_compress_reorganize_and_divide_mask(float *averaged_spec_mat, float *compressed_spec_mat,
319 float divider,
320 unsigned char nbBinsCompressedMatrix, unsigned char nbBinsToAverage , unsigned char ASMIndexStart);
321
322 int getFBinMask(int k);
323
313 324 #endif // FSW_PROCESSING_H_INCLUDED
@@ -9,6 +9,7
9 9 #include "tm_lfr_tc_exe.h"
10 10 #include "fsw_misc.h"
11 11 #include "basic_parameters_params.h"
12 #include "avf0_prc0.h"
12 13
13 14 #define FLOAT_EQUAL_ZERO 0.001
14 15
@@ -55,8 +56,12 unsigned int check_update_info_hk_lfr_mo
55 56 unsigned int check_update_info_hk_tds_mode( unsigned char mode );
56 57 unsigned int check_update_info_hk_thr_mode( unsigned char mode );
57 58
59 // FBINS_MASK
60 int set_sy_lfr_fbins( ccsdsTelecommandPacket_t *TC );
61
58 62 // KCOEFFICIENTS
59 63 int set_sy_lfr_kcoeff( ccsdsTelecommandPacket_t *TC );
64 void copyFloatByChar( unsigned char *destination, unsigned char *source );
60 65
61 66 void init_parameter_dump( void );
62 67 void init_kcoefficients_dump( void );
@@ -1,5 +1,5
1 1 # LOAD FSW USING LINK 1
2 SpwPlugin0.StarDundeeSelectLinkNumber( 1 )
2 SpwPlugin0.StarDundeeSelectLinkNumber( 2 )
3 3
4 4 dsu3plugin0.openFile("/opt/DEV_PLE/FSW-qt/bin/fsw")
5 5 #dsu3plugin0.openFile("/opt/LFR/LFR-FSW/2.0.2.3/fsw")
@@ -11,6 +11,7 print str(availableBrickCount) + " Space
11 11
12 12 SpwPlugin0.StarDundeeSelectBrick(1)
13 13 SpwPlugin0.StarDundeeSetBrickAsARouter(1)
14 SpwPlugin0.StarDundeeSelectLinkNumber( 2 )
14 15 SpwPlugin0.connectBridge()
15 16
16 17 #SpwPlugin0.TCPServerSetIP("127.0.0.1")
@@ -245,8 +245,6 rtems_task Init( rtems_task_argument ign
245 245
246 246 BOOT_PRINTF("delete INIT\n")
247 247
248 // test_TCH();
249
250 248 status = rtems_task_delete(RTEMS_SELF);
251 249
252 250 }
@@ -225,6 +225,8 rtems_task hous_task(rtems_task_argument
225 225
226 226 spacewire_update_statistics();
227 227
228 housekeeping_packet.sy_lfr_common_parameters_spare = parameter_dump_packet.sy_lfr_common_parameters_spare;
229 housekeeping_packet.sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters;
228 230 get_temperatures( housekeeping_packet.hk_lfr_temp_scm );
229 231 get_v_e1_e2_f3( housekeeping_packet.hk_lfr_sc_v_f3 );
230 232 get_cpu_load( (unsigned char *) &housekeeping_packet.hk_lfr_cpu_load );
@@ -584,3 +584,68 void ASM_patch( float *inputASM, float *
584 584 copyReVectors(inputASM, outputASM, 21); // e1e1
585 585 copyReVectors(inputASM, outputASM, 24); // e2e2
586 586 }
587
588 void ASM_compress_reorganize_and_divide_mask(float *averaged_spec_mat, float *compressed_spec_mat , float divider,
589 unsigned char nbBinsCompressedMatrix, unsigned char nbBinsToAverage, unsigned char ASMIndexStart )
590 {
591 //*************
592 // input format
593 // component0[0 .. 127] component1[0 .. 127] .. component24[0 .. 127]
594 //**************
595 // output format
596 // matr0[0 .. 24] matr1[0 .. 24] .. matr127[0 .. 24]
597 //************
598 // compression
599 // matr0[0 .. 24] matr1[0 .. 24] .. matr11[0 .. 24] => f0 NORM
600 // matr0[0 .. 24] matr1[0 .. 24] .. matr22[0 .. 24] => f0 BURST, SBM
601
602 int frequencyBin;
603 int asmComponent;
604 int offsetASM;
605 int offsetCompressed;
606 int offsetFBin;
607 int fBinMask;
608 int k;
609
610 // BUILD DATA
611 for (asmComponent = 0; asmComponent < NB_VALUES_PER_SM; asmComponent++)
612 {
613 for( frequencyBin = 0; frequencyBin < nbBinsCompressedMatrix; frequencyBin++ )
614 {
615 offsetCompressed = // NO TIME OFFSET
616 frequencyBin * NB_VALUES_PER_SM
617 + asmComponent;
618 offsetASM = // NO TIME OFFSET
619 asmComponent * NB_BINS_PER_SM
620 + ASMIndexStart
621 + frequencyBin * nbBinsToAverage;
622 offsetFBin = ASMIndexStart
623 + frequencyBin * nbBinsToAverage;
624 compressed_spec_mat[ offsetCompressed ] = 0;
625 for ( k = 0; k < nbBinsToAverage; k++ )
626 {
627 fBinMask = getFBinMask( offsetFBin + k );
628 compressed_spec_mat[offsetCompressed ] =
629 ( compressed_spec_mat[ offsetCompressed ]
630 + averaged_spec_mat[ offsetASM + k ] * fBinMask );
631 }
632 compressed_spec_mat[ offsetCompressed ] =
633 compressed_spec_mat[ offsetCompressed ] / (divider * nbBinsToAverage);
634 }
635 }
636
637 }
638
639 int getFBinMask( int index )
640 {
641 unsigned int indexInChar;
642 unsigned int indexInTheChar;
643 int fbin;
644
645 indexInChar = index >> 3;
646 indexInTheChar = index - indexInChar * 8;
647
648 fbin = (int) ((parameter_dump_packet.sy_lfr_fbins_f0_word1[ NB_BYTES_PER_FREQ_MASK - 1 - indexInChar] >> indexInTheChar) & 0x1);
649
650 return fbin;
651 }
@@ -28,7 +28,7 int action_load_common_par(ccsdsTelecomm
28 28 *
29 29 */
30 30
31 parameter_dump_packet.unused0 = TC->dataAndCRC[0];
31 parameter_dump_packet.sy_lfr_common_parameters_spare = TC->dataAndCRC[0];
32 32 parameter_dump_packet.sy_lfr_common_parameters = TC->dataAndCRC[1];
33 33 set_wfp_data_shaping( );
34 34 return LFR_SUCCESSFUL;
@@ -305,7 +305,7 int action_load_fbins_mask(ccsdsTelecomm
305 305
306 306 flag = LFR_DEFAULT;
307 307
308 send_tm_lfr_tc_exe_not_implemented( TC, queue_id, time );
308 flag = set_sy_lfr_fbins( TC );
309 309
310 310 return flag;
311 311 }
@@ -357,15 +357,12 int action_dump_kcoefficients(ccsdsTelec
357 357 {
358 358 kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + 1] = freq;
359 359 bin = freq;
360 printKCoefficients( freq, bin, k_coeff_intercalib_f0_norm);
360 // printKCoefficients( freq, bin, k_coeff_intercalib_f0_norm);
361 361 for ( coeff=0; coeff<NB_K_COEFF_PER_BIN; coeff++ )
362 362 {
363 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 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];
365 copyFloatByChar( kCoeffDumpPtr, kCoeffPtr );
369 366 }
370 367 }
371 368 for( freq=NB_BINS_COMPRESSED_SM_F0;
@@ -374,15 +371,12 int action_dump_kcoefficients(ccsdsTelec
374 371 {
375 372 kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + 1 ] = freq;
376 373 bin = freq - NB_BINS_COMPRESSED_SM_F0;
377 printKCoefficients( freq, bin, k_coeff_intercalib_f1_norm);
374 // printKCoefficients( freq, bin, k_coeff_intercalib_f1_norm);
378 375 for ( coeff=0; coeff<NB_K_COEFF_PER_BIN; coeff++ )
379 376 {
380 377 kCoeffDumpPtr = (unsigned char*) &kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + coeff*NB_BYTES_PER_FLOAT + 2 ]; // 2 for the kcoeff_frequency
381 378 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];
379 copyFloatByChar( kCoeffDumpPtr, kCoeffPtr );
386 380 }
387 381 }
388 382 for( freq=(NB_BINS_COMPRESSED_SM_F0+NB_BINS_COMPRESSED_SM_F1);
@@ -391,15 +385,12 int action_dump_kcoefficients(ccsdsTelec
391 385 {
392 386 kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + 1 ] = freq;
393 387 bin = freq - (NB_BINS_COMPRESSED_SM_F0+NB_BINS_COMPRESSED_SM_F1);
394 printKCoefficients( freq, bin, k_coeff_intercalib_f2);
388 // printKCoefficients( freq, bin, k_coeff_intercalib_f2);
395 389 for ( coeff=0; coeff<NB_K_COEFF_PER_BIN; coeff++ )
396 390 {
397 391 kCoeffDumpPtr = (unsigned char*) &kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + coeff*NB_BYTES_PER_FLOAT + 2 ]; // 2 for the kcoeff_frequency
398 392 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];
393 copyFloatByChar( kCoeffDumpPtr, kCoeffPtr );
403 394 }
404 395 }
405 396 kcoefficients_dump_1.time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
@@ -426,15 +417,12 int action_dump_kcoefficients(ccsdsTelec
426 417 {
427 418 kcoefficients_dump_2.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + 1 ] = NB_BINS_COMPRESSED_SM_F0 + NB_BINS_COMPRESSED_SM_F1 + 6 + freq;
428 419 bin = freq + 6;
429 printKCoefficients( freq, bin, k_coeff_intercalib_f2);
420 // printKCoefficients( freq, bin, k_coeff_intercalib_f2);
430 421 for ( coeff=0; coeff<NB_K_COEFF_PER_BIN; coeff++ )
431 422 {
432 423 kCoeffDumpPtr = (unsigned char*) &kcoefficients_dump_2.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + coeff*NB_BYTES_PER_FLOAT + 2 ]; // 2 for the kcoeff_frequency
433 424 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];
425 copyFloatByChar( kCoeffDumpPtr, kCoeffPtr );
438 426 }
439 427 }
440 428 kcoefficients_dump_2.time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
@@ -883,6 +871,36 unsigned int check_update_info_hk_thr_mo
883 871 return status;
884 872 }
885 873
874 //***********
875 // FBINS MASK
876
877 int set_sy_lfr_fbins( ccsdsTelecommandPacket_t *TC )
878 {
879 int status;
880 unsigned int k;
881 unsigned char *fbins_mask_dump;
882 unsigned char *fbins_mask_TC;
883
884 status = LFR_SUCCESSFUL;
885
886 fbins_mask_dump = parameter_dump_packet.sy_lfr_fbins_f0_word1;
887 fbins_mask_TC = TC->dataAndCRC;
888
889 for (k=0; k < NB_FBINS_MASKS * NB_BYTES_PER_FBINS_MASK; k++)
890 {
891 fbins_mask_dump[k] = fbins_mask_TC[k];
892 }
893 for (k=0; k < NB_FBINS_MASKS; k++)
894 {
895 unsigned char *auxPtr;
896 auxPtr = &parameter_dump_packet.sy_lfr_fbins_f0_word1[k*NB_BYTES_PER_FBINS_MASK];
897 printf("%x %x %x %x\n", auxPtr[0], auxPtr[1], auxPtr[2], auxPtr[3]);
898 }
899
900
901 return status;
902 }
903
886 904 //**************
887 905 // KCOEFFICIENTS
888 906 int set_sy_lfr_kcoeff( ccsdsTelecommandPacket_t *TC )
@@ -940,24 +958,25 int set_sy_lfr_kcoeff( ccsdsTelecommandP
940 958 printf("freq = %d, bin = %d\n", sy_lfr_kcoeff_frequency, bin);
941 959 for (i=0; i<NB_K_COEFF_PER_BIN; i++)
942 960 {
943 kcoeffLoadPtr = (unsigned char*) &TC->dataAndCRC[DATAFIELD_POS_SY_LFR_KCOEFF_1 + NB_BYTES_PER_FLOAT * i];
961 // destination
944 962 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 ]);
963 // source
964 kcoeffLoadPtr = (unsigned char*) &TC->dataAndCRC[DATAFIELD_POS_SY_LFR_KCOEFF_1 + NB_BYTES_PER_FLOAT * i];
965 copyFloatByChar( kcoeffNormPtr, kcoeffLoadPtr );
955 966 }
956 967 }
957 968
958 969 return status;
959 970 }
960 971
972 void copyFloatByChar( unsigned char *destination, unsigned char *source )
973 {
974 destination[0] = source[0];
975 destination[1] = source[1];
976 destination[2] = source[2];
977 destination[3] = source[3];
978 }
979
961 980 //**********
962 981 // init dump
963 982
@@ -967,6 +986,8 void init_parameter_dump( void )
967 986 *
968 987 */
969 988
989 unsigned int k;
990
970 991 parameter_dump_packet.targetLogicalAddress = CCSDS_DESTINATION_ID;
971 992 parameter_dump_packet.protocolIdentifier = CCSDS_PROTOCOLE_ID;
972 993 parameter_dump_packet.reserved = CCSDS_RESERVED;
@@ -992,7 +1013,7 void init_parameter_dump( void )
992 1013
993 1014 //******************
994 1015 // COMMON PARAMETERS
995 parameter_dump_packet.unused0 = DEFAULT_SY_LFR_COMMON0;
1016 parameter_dump_packet.sy_lfr_common_parameters_spare = DEFAULT_SY_LFR_COMMON0;
996 1017 parameter_dump_packet.sy_lfr_common_parameters = DEFAULT_SY_LFR_COMMON1;
997 1018
998 1019 //******************
@@ -1021,6 +1042,13 void init_parameter_dump( void )
1021 1042 // SBM2 PARAMETERS
1022 1043 parameter_dump_packet.sy_lfr_s2_bp_p0 = (unsigned char) DEFAULT_SY_LFR_S2_BP_P0;
1023 1044 parameter_dump_packet.sy_lfr_s2_bp_p1 = (unsigned char) DEFAULT_SY_LFR_S2_BP_P1;
1045
1046 //************
1047 // FBINS MASKS
1048 for (k=0; k < NB_FBINS_MASKS * NB_BYTES_PER_FBINS_MASK; k++)
1049 {
1050 parameter_dump_packet.sy_lfr_fbins_f0_word1[k] = 0xff;
1051 }
1024 1052 }
1025 1053
1026 1054 void init_kcoefficients_dump( void )
@@ -1221,10 +1221,8 void set_wfp_data_shaping( void )
1221 1221 + ( (data_shaping & 0x08) >> 2 ) // SP0
1222 1222 + ( (data_shaping & 0x04) ) // SP1
1223 1223 + ( (data_shaping & 0x02) << 2 ) // R0
1224 + ( (data_shaping & 0x01) << 4 ); // R1
1225
1226 // this is a temporary way to set R2, compatible with the release 2 of the flight software
1227 waveform_picker_regs->data_shaping = waveform_picker_regs->data_shaping + ( (0x1) << 5 ); // R2
1224 + ( (data_shaping & 0x01) << 4 ) // R1
1225 + ( (data_shaping & 0x01) << 5 ); // R2
1228 1226 }
1229 1227
1230 1228 void set_wfp_burst_enable_register( unsigned char mode )
General Comments 0
You need to be logged in to leave comments. Login now