diff --git a/.hgsubstate b/.hgsubstate --- a/.hgsubstate +++ b/.hgsubstate @@ -1,2 +1,2 @@ 3081d1f9bb20b2b64a192585337a292a9804e0c5 LFR_basic-parameters -26659466eb11170e587645c796142ac8a7fd0add header/lfr_common_headers +e904b329ff977514bf36af92617afefd22fd06ab header/lfr_common_headers diff --git a/src/fsw_init.c b/src/fsw_init.c --- a/src/fsw_init.c +++ b/src/fsw_init.c @@ -188,11 +188,13 @@ rtems_task Init( rtems_task_argument ign // initialize filtering parameters filterPar.spare_sy_lfr_pas_filter_enabled = DEFAULT_SY_LFR_PAS_FILTER_ENABLED; - filterPar.sy_lfr_pas_filter_modulus = DEFAULT_SY_LFR_PAS_FILTER_MODULUS; + filterPar.sy_lfr_sc_rw_delta_f = DEFAULT_SY_LFR_SC_RW_DELTA_F; filterPar.sy_lfr_pas_filter_tbad = DEFAULT_SY_LFR_PAS_FILTER_TBAD; - filterPar.sy_lfr_pas_filter_offset = DEFAULT_SY_LFR_PAS_FILTER_OFFSET; filterPar.sy_lfr_pas_filter_shift = DEFAULT_SY_LFR_PAS_FILTER_SHIFT; - filterPar.sy_lfr_sc_rw_delta_f = DEFAULT_SY_LFR_SC_RW_DELTA_F; + filterPar.modulus_in_finetime = DEFAULT_MODULUS; + filterPar.tbad_in_finetime = DEFAULT_TBAD; + filterPar.offset_in_finetime = DEFAULT_OFFSET; + filterPar.shift_in_finetime = DEFAULT_SHIFT; update_last_valid_transition_date( DEFAULT_LAST_VALID_TRANSITION_DATE ); // waveform picker initialization 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 @@ -753,17 +753,13 @@ unsigned char acquisitionTimeIsValid( un unsigned char pasFilteringIsEnabled; unsigned char ret; - pasFilteringIsEnabled = (filterPar.spare_sy_lfr_pas_filter_enabled & 1); // [0000 0001] - ret = MATRIX_IS_NOT_POLLUTED; - - // compute the acquitionTime range - modulusInFineTime = ((u_int64_t) filterPar.sy_lfr_pas_filter_modulus) * CONST_65536; - offsetInFineTime = ((u_int64_t) filterPar.sy_lfr_pas_filter_offset) * CONST_65536; - shiftInFineTime = ((u_int64_t) filterPar.sy_lfr_pas_filter_shift) * CONST_65536; - tbadInFineTime = ((u_int64_t) filterPar.sy_lfr_pas_filter_tbad) * CONST_65536; - // compute acquisition time from caoarseTime and fineTime t0 = ( ((u_int64_t)coarseTime) << SHIFT_2_BYTES ) + (u_int64_t) fineTime; + t1 = t0; + tc = t0; + tbad0 = t0; + tbad1 = t0; + switch(channel) { case CHANNELF0: @@ -778,36 +774,50 @@ unsigned char acquisitionTimeIsValid( un t1 = t0 + ACQUISITION_DURATION_F2; tc = t0 + HALF_ACQUISITION_DURATION_F2; break; + default: + break; } - // INTERSECTION TEST #1 - timecodeReference = (tc - (tc % modulusInFineTime)) - modulusInFineTime ; - tbad0 = timecodeReference + offsetInFineTime + shiftInFineTime; - tbad1 = timecodeReference + offsetInFineTime + shiftInFineTime + tbadInFineTime; - ret = isPolluted( t0, t1, tbad0, tbad1 ); + // compute the acquitionTime range + modulusInFineTime = filterPar.modulus_in_finetime; + offsetInFineTime = filterPar.offset_in_finetime; + shiftInFineTime = filterPar.shift_in_finetime; + tbadInFineTime = filterPar.tbad_in_finetime; + timecodeReference = INIT_INT; - // INTERSECTION TEST #2 - timecodeReference = (tc - (tc % modulusInFineTime)) ; - tbad0 = timecodeReference + offsetInFineTime + shiftInFineTime; - tbad1 = timecodeReference + offsetInFineTime + shiftInFineTime + tbadInFineTime; - if (ret == MATRIX_IS_NOT_POLLUTED) - { - ret = isPolluted( t0, t1, tbad0, tbad1 ); - } + pasFilteringIsEnabled = (filterPar.spare_sy_lfr_pas_filter_enabled & 1); // [0000 0001] + ret = MATRIX_IS_NOT_POLLUTED; - // INTERSECTION TEST #3 - timecodeReference = (tc - (tc % modulusInFineTime)) + modulusInFineTime ; - tbad0 = timecodeReference + offsetInFineTime + shiftInFineTime; - tbad1 = timecodeReference + offsetInFineTime + shiftInFineTime + tbadInFineTime; - if (ret == MATRIX_IS_NOT_POLLUTED) - { - ret = isPolluted( t0, t1, tbad0, tbad1 ); - } - - if (pasFilteringIsEnabled == 0) + if ( (tbadInFineTime == 0) || (pasFilteringIsEnabled == 0) ) { ret = MATRIX_IS_NOT_POLLUTED; } + else + { + // INTERSECTION TEST #1 + timecodeReference = (tc - (tc % modulusInFineTime)) - modulusInFineTime ; + tbad0 = timecodeReference + offsetInFineTime + shiftInFineTime; + tbad1 = timecodeReference + offsetInFineTime + shiftInFineTime + tbadInFineTime; + ret = isPolluted( t0, t1, tbad0, tbad1 ); + + // INTERSECTION TEST #2 + if (ret == MATRIX_IS_NOT_POLLUTED) + { + timecodeReference = (tc - (tc % modulusInFineTime)) ; + tbad0 = timecodeReference + offsetInFineTime + shiftInFineTime; + tbad1 = timecodeReference + offsetInFineTime + shiftInFineTime + tbadInFineTime; + ret = isPolluted( t0, t1, tbad0, tbad1 ); + } + + // INTERSECTION TEST #3 + if (ret == MATRIX_IS_NOT_POLLUTED) + { + timecodeReference = (tc - (tc % modulusInFineTime)) + modulusInFineTime ; + tbad0 = timecodeReference + offsetInFineTime + shiftInFineTime; + tbad1 = timecodeReference + offsetInFineTime + shiftInFineTime + tbadInFineTime; + ret = isPolluted( t0, t1, tbad0, tbad1 ); + } + } return ret; } 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 @@ -351,19 +351,26 @@ int action_load_filter_par(ccsdsTelecomm //**************************** // store PAS filter parameters + // sy_lfr_pas_filter_enabled filterPar.spare_sy_lfr_pas_filter_enabled = parameter_dump_packet.spare_sy_lfr_pas_filter_enabled; set_sy_lfr_pas_filter_enabled( parameter_dump_packet.spare_sy_lfr_pas_filter_enabled & BIT_PAS_FILTER_ENABLED ); + // sy_lfr_pas_filter_modulus - filterPar.sy_lfr_pas_filter_modulus = parameter_dump_packet.sy_lfr_pas_filter_modulus; + filterPar.modulus_in_finetime = ((uint64_t) parameter_dump_packet.sy_lfr_pas_filter_modulus) * CONST_65536; + // sy_lfr_pas_filter_tbad copyFloatByChar( (unsigned char*) &filterPar.sy_lfr_pas_filter_tbad, parameter_dump_packet.sy_lfr_pas_filter_tbad ); + filterPar.tbad_in_finetime = (uint64_t) (filterPar.sy_lfr_pas_filter_tbad * CONST_65536); + // sy_lfr_pas_filter_offset - filterPar.sy_lfr_pas_filter_offset = parameter_dump_packet.sy_lfr_pas_filter_offset; + filterPar.offset_in_finetime = ((uint64_t) parameter_dump_packet.sy_lfr_pas_filter_offset) * CONST_65536; + // sy_lfr_pas_filter_shift copyFloatByChar( (unsigned char*) &filterPar.sy_lfr_pas_filter_shift, parameter_dump_packet.sy_lfr_pas_filter_shift ); + filterPar.shift_in_finetime = (uint64_t) (filterPar.sy_lfr_pas_filter_shift * CONST_65536); //**************************************************** // store the parameter sy_lfr_sc_rw_delta_f as a float