diff --git a/.hgsubstate b/.hgsubstate --- a/.hgsubstate +++ b/.hgsubstate @@ -1,2 +1,2 @@ 3081d1f9bb20b2b64a192585337a292a9804e0c5 LFR_basic-parameters -1f3d7ce688e982a378d739596c8e3f8972f40b9d header/lfr_common_headers +c3197ff831df5057bdd145a4efd94ded0618661f header/lfr_common_headers diff --git a/FSW-qt/fsw-qt.pro b/FSW-qt/fsw-qt.pro --- a/FSW-qt/fsw-qt.pro +++ b/FSW-qt/fsw-qt.pro @@ -18,9 +18,9 @@ include(./sparc.pri) # flight software version SWVERSION=-1-0 DEFINES += SW_VERSION_N1=3 # major -DEFINES += SW_VERSION_N2=0 # minor +DEFINES += SW_VERSION_N2=1 # minor DEFINES += SW_VERSION_N3=0 # patch -DEFINES += SW_VERSION_N4=22 # internal +DEFINES += SW_VERSION_N4=0 # internal # #QMAKE_CFLAGS_RELEASE += -fprofile-arcs -ftest-coverage 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 @@ -28,6 +28,7 @@ int action_load_sbm1_par(ccsdsTelecomman int action_load_sbm2_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id , unsigned char *time); int action_load_kcoefficients(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time); int action_load_fbins_mask(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time); +int action_load_pas_filter_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time); int action_dump_kcoefficients(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time); int action_dump_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id ); @@ -60,6 +61,9 @@ unsigned int check_update_info_hk_thr_mo // FBINS_MASK int set_sy_lfr_fbins( ccsdsTelecommandPacket_t *TC ); +// TC_LFR_LOAD_PARS_FILTER_PAR +int check_sy_lfr_pas_filter_parameters( ccsdsTelecommandPacket_t *TC, rtems_id queue_id ); + // KCOEFFICIENTS int set_sy_lfr_kcoeff(ccsdsTelecommandPacket_t *TC , rtems_id queue_id); void copyFloatByChar( unsigned char *destination, unsigned char *source ); diff --git a/src/tc_acceptance.c b/src/tc_acceptance.c --- a/src/tc_acceptance.c +++ b/src/tc_acceptance.c @@ -229,7 +229,8 @@ int tc_check_type_subtype( unsigned char || (packetSubType == TC_SUBTYPE_UPDT_INFO) || (packetSubType == TC_SUBTYPE_EN_CAL) || (packetSubType == TC_SUBTYPE_DIS_CAL) || (packetSubType == TC_SUBTYPE_LOAD_K) || (packetSubType == TC_SUBTYPE_DUMP_K) - || (packetSubType == TC_SUBTYPE_LOAD_FBINS) ) + || (packetSubType == TC_SUBTYPE_LOAD_FBINS) + || (packetSubType == TC_SUBTYPE_LOAD_PAS_FILTER_PAR)) { status = CCSDS_TM_VALID; } @@ -415,6 +416,14 @@ int tc_check_length( unsigned char packe status = CCSDS_TM_VALID; } break; + case TC_SUBTYPE_LOAD_PAS_FILTER_PAR: + if (length!=(TC_LEN_LOAD_PAS_FILTER_PAR-CCSDS_TC_TM_PACKET_OFFSET)) { + status = WRONG_LEN_PKT; + } + else { + status = CCSDS_TM_VALID; + } + break; case TC_SUBTYPE_UPDT_TIME: if (length!=(TC_LEN_UPDT_TIME-CCSDS_TC_TM_PACKET_OFFSET)) { status = WRONG_LEN_PKT; diff --git a/src/tc_handler.c b/src/tc_handler.c --- a/src/tc_handler.c +++ b/src/tc_handler.c @@ -123,6 +123,10 @@ rtems_task actn_task( rtems_task_argumen result = action_load_fbins_mask( &TC, queue_snd_id, time ); close_action( &TC, result, queue_snd_id ); break; + case TC_SUBTYPE_LOAD_PAS_FILTER_PAR: + result = action_load_pas_filter_par( &TC, queue_snd_id, time ); + close_action( &TC, result, queue_snd_id ); + break; case TC_SUBTYPE_UPDT_TIME: result = action_update_time( &TC ); close_action( &TC, result, queue_snd_id ); 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 @@ -310,6 +310,32 @@ int action_load_fbins_mask(ccsdsTelecomm return flag; } +int action_load_pas_filter_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time) +{ + /** This function updates the LFR registers with the incoming sbm2 parameters. + * + * @param TC points to the TeleCommand packet that is being processed + * @param queue_id is the id of the queue which handles TM related to this execution step + * + */ + + int flag; + + flag = LFR_DEFAULT; + + flag = check_sy_lfr_pas_filter_parameters( TC, queue_id ); + + if (flag == LFR_SUCCESSFUL) + { + parameter_dump_packet.spare_sy_lfr_pas_filter_enabled = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_ENABLED ]; + parameter_dump_packet.sy_lfr_pas_filter_modulus = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_MODULUS ]; + parameter_dump_packet.sy_lfr_pas_filter_nstd = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_NSTD ]; + parameter_dump_packet.sy_lfr_pas_filter_offset = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_OFFSET ]; + } + + return flag; +} + int action_dump_kcoefficients(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time) { /** This function updates the LFR registers with the incoming sbm2 parameters. @@ -885,6 +911,59 @@ int set_sy_lfr_fbins( ccsdsTelecommandPa return status; } +//*************************** +// TC_LFR_LOAD_PAS_FILTER_PAR + +int check_sy_lfr_pas_filter_parameters( ccsdsTelecommandPacket_t *TC, rtems_id queue_id ) +{ + int flag; + rtems_status_code status; + + unsigned char sy_lfr_pas_filter_enabled; + unsigned char sy_lfr_pas_filter_modulus; + unsigned char sy_lfr_pas_filter_nstd; + unsigned char sy_lfr_pas_filter_offset; + + flag = LFR_SUCCESSFUL; + + //*************** + // get parameters + sy_lfr_pas_filter_enabled = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_ENABLED ] & 0x01; // [0000 0001] + sy_lfr_pas_filter_modulus = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_MODULUS ]; + sy_lfr_pas_filter_nstd = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_NSTD ]; + sy_lfr_pas_filter_offset = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_OFFSET ]; + + //****************** + // check consistency + // sy_lfr_pas_filter_enabled + // sy_lfr_pas_filter_modulus + if ( (sy_lfr_pas_filter_modulus < 4) || (sy_lfr_pas_filter_modulus > 8) ) + { + status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_PAS_FILTER_MODULUS+10, sy_lfr_pas_filter_modulus ); + flag = WRONG_APP_DATA; + } + // sy_lfr_pas_filter_nstd + if (flag == LFR_SUCCESSFUL) + { + if ( sy_lfr_pas_filter_nstd > 8 ) + { + status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_PAS_FILTER_NSTD+10, sy_lfr_pas_filter_nstd ); + flag = WRONG_APP_DATA; + } + } + // sy_lfr_pas_filter_offset + if (flag == LFR_SUCCESSFUL) + { + if (sy_lfr_pas_filter_offset > 7) + { + status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_PAS_FILTER_OFFSET+10, sy_lfr_pas_filter_offset ); + flag = WRONG_APP_DATA; + } + } + + return flag; +} + //************** // KCOEFFICIENTS int set_sy_lfr_kcoeff( ccsdsTelecommandPacket_t *TC,rtems_id queue_id )