diff --git a/.hgsubstate b/.hgsubstate --- a/.hgsubstate +++ b/.hgsubstate @@ -1,2 +1,2 @@ a586fe639ac179e95bdc150ebdbab0312f31dc30 LFR_basic-parameters -5467523e44cd6a627a81b156673a891f4d6b0017 header/lfr_common_headers +a806a190dcd72f71d336545073400d3cdaaa3119 header/lfr_common_headers diff --git a/header/processing/fsw_processing.h b/header/processing/fsw_processing.h --- a/header/processing/fsw_processing.h +++ b/header/processing/fsw_processing.h @@ -89,6 +89,7 @@ extern volatile int sm_f2[ ]; // parameters extern struct param_local_str param_local; +extern Packet_TM_LFR_PARAMETER_DUMP_t parameter_dump_packet; // registers extern time_management_regs_t *time_management_regs; @@ -143,19 +144,23 @@ static inline void SM_average(float *ave ring_node *ring_node_tab[], unsigned int nbAverageNORM, unsigned int nbAverageSBM, asm_msg *msgForMATR ); + static inline void SM_average_debug(float *averaged_spec_mat_NORM, float *averaged_spec_mat_SBM, ring_node *ring_node_tab[], unsigned int nbAverageNORM, unsigned int nbAverageSBM, asm_msg *msgForMATR ); void ASM_patch( float *inputASM, float *outputASM ); + void extractReImVectors(float *inputASM, float *outputASM, unsigned int asmComponent ); static inline void ASM_reorganize_and_divide(float *averaged_spec_mat, float *averaged_spec_mat_reorganized, float divider ); + static inline void ASM_compress_reorganize_and_divide(float *averaged_spec_mat, float *compressed_spec_mat, float divider, unsigned char nbBinsCompressedMatrix, unsigned char nbBinsToAverage , unsigned char ASMIndexStart); + static inline void ASM_convert(volatile float *input_matrix, char *output_matrix); void SM_average( float *averaged_spec_mat_NORM, float *averaged_spec_mat_SBM, @@ -310,4 +315,10 @@ void ASM_convert( volatile float *input_ } } +void ASM_compress_reorganize_and_divide_mask(float *averaged_spec_mat, float *compressed_spec_mat, + float divider, + unsigned char nbBinsCompressedMatrix, unsigned char nbBinsToAverage , unsigned char ASMIndexStart); + +int getFBinMask(int k); + #endif // FSW_PROCESSING_H_INCLUDED diff --git a/header/tc_load_dump_parameters.h b/header/tc_load_dump_parameters.h --- a/header/tc_load_dump_parameters.h +++ b/header/tc_load_dump_parameters.h @@ -9,6 +9,7 @@ #include "tm_lfr_tc_exe.h" #include "fsw_misc.h" #include "basic_parameters_params.h" +#include "avf0_prc0.h" #define FLOAT_EQUAL_ZERO 0.001 @@ -55,8 +56,12 @@ unsigned int check_update_info_hk_lfr_mo unsigned int check_update_info_hk_tds_mode( unsigned char mode ); unsigned int check_update_info_hk_thr_mode( unsigned char mode ); +// FBINS_MASK +int set_sy_lfr_fbins( ccsdsTelecommandPacket_t *TC ); + // KCOEFFICIENTS int set_sy_lfr_kcoeff( ccsdsTelecommandPacket_t *TC ); +void copyFloatByChar( unsigned char *destination, unsigned char *source ); void init_parameter_dump( void ); void init_kcoefficients_dump( void ); diff --git a/python_scripts/LFRControlPlugin_reload_fsw.py b/python_scripts/LFRControlPlugin_reload_fsw.py --- a/python_scripts/LFRControlPlugin_reload_fsw.py +++ b/python_scripts/LFRControlPlugin_reload_fsw.py @@ -1,5 +1,5 @@ # LOAD FSW USING LINK 1 -SpwPlugin0.StarDundeeSelectLinkNumber( 1 ) +SpwPlugin0.StarDundeeSelectLinkNumber( 2 ) dsu3plugin0.openFile("/opt/DEV_PLE/FSW-qt/bin/fsw") #dsu3plugin0.openFile("/opt/LFR/LFR-FSW/2.0.2.3/fsw") diff --git a/python_scripts/LFRControlPlugin_setup.py b/python_scripts/LFRControlPlugin_setup.py --- a/python_scripts/LFRControlPlugin_setup.py +++ b/python_scripts/LFRControlPlugin_setup.py @@ -11,6 +11,7 @@ print str(availableBrickCount) + " Space SpwPlugin0.StarDundeeSelectBrick(1) SpwPlugin0.StarDundeeSetBrickAsARouter(1) +SpwPlugin0.StarDundeeSelectLinkNumber( 2 ) SpwPlugin0.connectBridge() #SpwPlugin0.TCPServerSetIP("127.0.0.1") diff --git a/src/fsw_init.c b/src/fsw_init.c --- a/src/fsw_init.c +++ b/src/fsw_init.c @@ -245,8 +245,6 @@ rtems_task Init( rtems_task_argument ign BOOT_PRINTF("delete INIT\n") -// test_TCH(); - status = rtems_task_delete(RTEMS_SELF); } diff --git a/src/fsw_misc.c b/src/fsw_misc.c --- a/src/fsw_misc.c +++ b/src/fsw_misc.c @@ -225,6 +225,8 @@ rtems_task hous_task(rtems_task_argument spacewire_update_statistics(); + housekeeping_packet.sy_lfr_common_parameters_spare = parameter_dump_packet.sy_lfr_common_parameters_spare; + housekeeping_packet.sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters; get_temperatures( housekeeping_packet.hk_lfr_temp_scm ); get_v_e1_e2_f3( housekeeping_packet.hk_lfr_sc_v_f3 ); get_cpu_load( (unsigned char *) &housekeeping_packet.hk_lfr_cpu_load ); diff --git a/src/processing/fsw_processing.c b/src/processing/fsw_processing.c --- a/src/processing/fsw_processing.c +++ b/src/processing/fsw_processing.c @@ -584,3 +584,68 @@ void ASM_patch( float *inputASM, float * copyReVectors(inputASM, outputASM, 21); // e1e1 copyReVectors(inputASM, outputASM, 24); // e2e2 } + +void ASM_compress_reorganize_and_divide_mask(float *averaged_spec_mat, float *compressed_spec_mat , float divider, + unsigned char nbBinsCompressedMatrix, unsigned char nbBinsToAverage, unsigned char ASMIndexStart ) +{ + //************* + // input format + // component0[0 .. 127] component1[0 .. 127] .. component24[0 .. 127] + //************** + // output format + // matr0[0 .. 24] matr1[0 .. 24] .. matr127[0 .. 24] + //************ + // compression + // matr0[0 .. 24] matr1[0 .. 24] .. matr11[0 .. 24] => f0 NORM + // matr0[0 .. 24] matr1[0 .. 24] .. matr22[0 .. 24] => f0 BURST, SBM + + int frequencyBin; + int asmComponent; + int offsetASM; + int offsetCompressed; + int offsetFBin; + int fBinMask; + int k; + + // BUILD DATA + for (asmComponent = 0; asmComponent < NB_VALUES_PER_SM; asmComponent++) + { + for( frequencyBin = 0; frequencyBin < nbBinsCompressedMatrix; frequencyBin++ ) + { + offsetCompressed = // NO TIME OFFSET + frequencyBin * NB_VALUES_PER_SM + + asmComponent; + offsetASM = // NO TIME OFFSET + asmComponent * NB_BINS_PER_SM + + ASMIndexStart + + frequencyBin * nbBinsToAverage; + offsetFBin = ASMIndexStart + + frequencyBin * nbBinsToAverage; + compressed_spec_mat[ offsetCompressed ] = 0; + for ( k = 0; k < nbBinsToAverage; k++ ) + { + fBinMask = getFBinMask( offsetFBin + k ); + compressed_spec_mat[offsetCompressed ] = + ( compressed_spec_mat[ offsetCompressed ] + + averaged_spec_mat[ offsetASM + k ] * fBinMask ); + } + compressed_spec_mat[ offsetCompressed ] = + compressed_spec_mat[ offsetCompressed ] / (divider * nbBinsToAverage); + } + } + +} + +int getFBinMask( int index ) +{ + unsigned int indexInChar; + unsigned int indexInTheChar; + int fbin; + + indexInChar = index >> 3; + indexInTheChar = index - indexInChar * 8; + + fbin = (int) ((parameter_dump_packet.sy_lfr_fbins_f0_word1[ NB_BYTES_PER_FREQ_MASK - 1 - indexInChar] >> indexInTheChar) & 0x1); + + return fbin; +} diff --git a/src/tc_load_dump_parameters.c b/src/tc_load_dump_parameters.c --- a/src/tc_load_dump_parameters.c +++ b/src/tc_load_dump_parameters.c @@ -28,8 +28,8 @@ int action_load_common_par(ccsdsTelecomm * */ - parameter_dump_packet.unused0 = TC->dataAndCRC[0]; - parameter_dump_packet.sy_lfr_common_parameters = TC->dataAndCRC[1]; + parameter_dump_packet.sy_lfr_common_parameters_spare = TC->dataAndCRC[0]; + parameter_dump_packet.sy_lfr_common_parameters = TC->dataAndCRC[1]; set_wfp_data_shaping( ); return LFR_SUCCESSFUL; } @@ -305,7 +305,7 @@ int action_load_fbins_mask(ccsdsTelecomm flag = LFR_DEFAULT; - send_tm_lfr_tc_exe_not_implemented( TC, queue_id, time ); + flag = set_sy_lfr_fbins( TC ); return flag; } @@ -357,15 +357,12 @@ int action_dump_kcoefficients(ccsdsTelec { kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + 1] = freq; bin = freq; - printKCoefficients( freq, bin, k_coeff_intercalib_f0_norm); +// printKCoefficients( freq, bin, k_coeff_intercalib_f0_norm); for ( coeff=0; coeffcoarse_time>>24); @@ -426,15 +417,12 @@ int action_dump_kcoefficients(ccsdsTelec { kcoefficients_dump_2.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + 1 ] = NB_BINS_COMPRESSED_SM_F0 + NB_BINS_COMPRESSED_SM_F1 + 6 + freq; bin = freq + 6; - printKCoefficients( freq, bin, k_coeff_intercalib_f2); +// printKCoefficients( freq, bin, k_coeff_intercalib_f2); for ( coeff=0; coeffcoarse_time>>24); @@ -883,6 +871,36 @@ unsigned int check_update_info_hk_thr_mo return status; } +//*********** +// FBINS MASK + +int set_sy_lfr_fbins( ccsdsTelecommandPacket_t *TC ) +{ + int status; + unsigned int k; + unsigned char *fbins_mask_dump; + unsigned char *fbins_mask_TC; + + status = LFR_SUCCESSFUL; + + fbins_mask_dump = parameter_dump_packet.sy_lfr_fbins_f0_word1; + fbins_mask_TC = TC->dataAndCRC; + + for (k=0; k < NB_FBINS_MASKS * NB_BYTES_PER_FBINS_MASK; k++) + { + fbins_mask_dump[k] = fbins_mask_TC[k]; + } + for (k=0; k < NB_FBINS_MASKS; k++) + { + unsigned char *auxPtr; + auxPtr = ¶meter_dump_packet.sy_lfr_fbins_f0_word1[k*NB_BYTES_PER_FBINS_MASK]; + printf("%x %x %x %x\n", auxPtr[0], auxPtr[1], auxPtr[2], auxPtr[3]); + } + + + return status; +} + //************** // KCOEFFICIENTS int set_sy_lfr_kcoeff( ccsdsTelecommandPacket_t *TC ) @@ -940,24 +958,25 @@ int set_sy_lfr_kcoeff( ccsdsTelecommandP printf("freq = %d, bin = %d\n", sy_lfr_kcoeff_frequency, bin); for (i=0; idataAndCRC[DATAFIELD_POS_SY_LFR_KCOEFF_1 + NB_BYTES_PER_FLOAT * i]; + // destination kcoeffNormPtr = (unsigned char*) &kcoeffPtr_norm[ (bin * NB_K_COEFF_PER_BIN) + i ]; - kcoeffNormPtr[0] = kcoeffLoadPtr[0]; - kcoeffNormPtr[1] = kcoeffLoadPtr[1]; - kcoeffNormPtr[2] = kcoeffLoadPtr[2]; - kcoeffNormPtr[3] = kcoeffLoadPtr[3]; - printf("kcoeffPtr: %x %x %x %x *** %f \n", - kcoeffLoadPtr[0], - kcoeffLoadPtr[1], - kcoeffLoadPtr[2], - kcoeffLoadPtr[3], - kcoeffPtr_norm[ (bin * NB_K_COEFF_PER_BIN) + i ]); + // source + kcoeffLoadPtr = (unsigned char*) &TC->dataAndCRC[DATAFIELD_POS_SY_LFR_KCOEFF_1 + NB_BYTES_PER_FLOAT * i]; + copyFloatByChar( kcoeffNormPtr, kcoeffLoadPtr ); } } return status; } +void copyFloatByChar( unsigned char *destination, unsigned char *source ) +{ + destination[0] = source[0]; + destination[1] = source[1]; + destination[2] = source[2]; + destination[3] = source[3]; +} + //********** // init dump @@ -967,6 +986,8 @@ void init_parameter_dump( void ) * */ + unsigned int k; + parameter_dump_packet.targetLogicalAddress = CCSDS_DESTINATION_ID; parameter_dump_packet.protocolIdentifier = CCSDS_PROTOCOLE_ID; parameter_dump_packet.reserved = CCSDS_RESERVED; @@ -992,8 +1013,8 @@ void init_parameter_dump( void ) //****************** // COMMON PARAMETERS - parameter_dump_packet.unused0 = DEFAULT_SY_LFR_COMMON0; - parameter_dump_packet.sy_lfr_common_parameters = DEFAULT_SY_LFR_COMMON1; + parameter_dump_packet.sy_lfr_common_parameters_spare = DEFAULT_SY_LFR_COMMON0; + parameter_dump_packet.sy_lfr_common_parameters = DEFAULT_SY_LFR_COMMON1; //****************** // NORMAL PARAMETERS @@ -1021,6 +1042,13 @@ void init_parameter_dump( void ) // SBM2 PARAMETERS parameter_dump_packet.sy_lfr_s2_bp_p0 = (unsigned char) DEFAULT_SY_LFR_S2_BP_P0; parameter_dump_packet.sy_lfr_s2_bp_p1 = (unsigned char) DEFAULT_SY_LFR_S2_BP_P1; + + //************ + // FBINS MASKS + for (k=0; k < NB_FBINS_MASKS * NB_BYTES_PER_FBINS_MASK; k++) + { + parameter_dump_packet.sy_lfr_fbins_f0_word1[k] = 0xff; + } } void init_kcoefficients_dump( void ) diff --git a/src/wf_handler.c b/src/wf_handler.c --- a/src/wf_handler.c +++ b/src/wf_handler.c @@ -1221,10 +1221,8 @@ void set_wfp_data_shaping( void ) + ( (data_shaping & 0x08) >> 2 ) // SP0 + ( (data_shaping & 0x04) ) // SP1 + ( (data_shaping & 0x02) << 2 ) // R0 - + ( (data_shaping & 0x01) << 4 ); // R1 - - // this is a temporary way to set R2, compatible with the release 2 of the flight software - waveform_picker_regs->data_shaping = waveform_picker_regs->data_shaping + ( (0x1) << 5 ); // R2 + + ( (data_shaping & 0x01) << 4 ) // R1 + + ( (data_shaping & 0x01) << 5 ); // R2 } void set_wfp_burst_enable_register( unsigned char mode )