diff --git a/.hgsubstate b/.hgsubstate --- a/.hgsubstate +++ b/.hgsubstate @@ -1,2 +1,2 @@ 3081d1f9bb20b2b64a192585337a292a9804e0c5 LFR_basic-parameters -c3197ff831df5057bdd145a4efd94ded0618661f header/lfr_common_headers +81c3289ebd2a13e3b3147acdf60e34678378f905 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 @@ -116,7 +116,6 @@ HEADERS += \ ../header/lfr_common_headers/fsw_params.h \ ../header/lfr_common_headers/fsw_params_nb_bytes.h \ ../header/lfr_common_headers/fsw_params_processing.h \ - ../header/lfr_common_headers/TC_types.h \ ../header/lfr_common_headers/tm_byte_positions.h \ ../LFR_basic-parameters/basic_parameters.h \ ../LFR_basic-parameters/basic_parameters_params.h \ diff --git a/header/fsw_init.h b/header/fsw_init.h --- a/header/fsw_init.h +++ b/header/fsw_init.h @@ -21,6 +21,15 @@ extern rtems_id Task_id[20]; extern rtems_name timecode_timer_name; extern rtems_id timecode_timer_id; extern unsigned char pa_bia_status_info; +extern unsigned char cp_rpw_sc_rw_f_flags; +extern float cp_rpw_sc_rw1_f1; +extern float cp_rpw_sc_rw1_f2; +extern float cp_rpw_sc_rw2_f1; +extern float cp_rpw_sc_rw2_f2; +extern float cp_rpw_sc_rw3_f1; +extern float cp_rpw_sc_rw3_f2; +extern float cp_rpw_sc_rw4_f1; +extern float cp_rpw_sc_rw4_f2; // RTEMS TASKS rtems_task Init( rtems_task_argument argument); 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 @@ -35,7 +35,7 @@ typedef struct unsigned char time[6]; // AUXILIARY HEADER unsigned char sid; - unsigned char biaStatusInfo; + unsigned char pa_bia_status_info; unsigned char sy_lfr_common_parameters_spare; unsigned char sy_lfr_common_parameters; unsigned char acquisitionTime[6]; @@ -61,7 +61,7 @@ typedef struct unsigned char time[6]; // AUXILIARY HEADER unsigned char sid; - unsigned char biaStatusInfo; + unsigned char pa_bia_status_info; unsigned char sy_lfr_common_parameters_spare; unsigned char sy_lfr_common_parameters; unsigned char acquisitionTime[6]; @@ -91,6 +91,9 @@ extern volatile int sm_f2[ ]; // parameters extern struct param_local_str param_local; extern Packet_TM_LFR_PARAMETER_DUMP_t parameter_dump_packet; +extern unsigned char rw_fbins_mask_f0[16]; +extern unsigned char rw_fbins_mask_f1[16]; +extern unsigned char rw_fbins_mask_f2[16]; // registers extern time_management_regs_t *time_management_regs; 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 @@ -20,6 +20,9 @@ extern float k_coeff_intercalib_f0_sbm[ extern float k_coeff_intercalib_f1_norm[ ]; extern float k_coeff_intercalib_f1_sbm[ ]; extern float k_coeff_intercalib_f2[ ]; +extern unsigned char rw_fbins_mask_f0[16]; +extern unsigned char rw_fbins_mask_f1[16]; +extern unsigned char rw_fbins_mask_f2[16]; int action_load_common_par( ccsdsTelecommandPacket_t *TC ); int action_load_normal_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id , unsigned char *time); @@ -28,7 +31,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_load_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 ); @@ -57,6 +60,9 @@ int set_sy_lfr_s2_bp_p1( ccsdsTelecomman unsigned int check_update_info_hk_lfr_mode( unsigned char mode ); unsigned int check_update_info_hk_tds_mode( unsigned char mode ); unsigned int check_update_info_hk_thr_mode( unsigned char mode ); +void getReactionWheelsFrequencies( ccsdsTelecommandPacket_t *TC ); +void build_rw_fbins_mask( unsigned int channel ); +void build_rw_fbins_masks(); // FBINS_MASK int set_sy_lfr_fbins( ccsdsTelecommandPacket_t *TC ); diff --git a/src/fsw_globals.c b/src/fsw_globals.c --- a/src/fsw_globals.c +++ b/src/fsw_globals.c @@ -66,6 +66,7 @@ unsigned int lastValidEnterModeTime; // HK PACKETS Packet_TM_LFR_HK_t housekeeping_packet; +unsigned char cp_rpw_sc_rw_f_flags; // message queues occupancy unsigned char hk_lfr_q_sd_fifo_size_max; unsigned char hk_lfr_q_rv_fifo_size_max; @@ -79,3 +80,16 @@ unsigned short sequenceCounters_TC_EXE[S unsigned short sequenceCounters_TM_DUMP[SEQ_CNT_NB_DEST_ID]; unsigned short sequenceCounterHK; spw_stats grspw_stats; + +// TC_LFR_UPDATE_INFO +float cp_rpw_sc_rw1_f1; +float cp_rpw_sc_rw1_f2; +float cp_rpw_sc_rw2_f1; +float cp_rpw_sc_rw2_f2; +float cp_rpw_sc_rw3_f1; +float cp_rpw_sc_rw3_f2; +float cp_rpw_sc_rw4_f1; +float cp_rpw_sc_rw4_f2; +unsigned char rw_fbins_mask_f0[16]; +unsigned char rw_fbins_mask_f1[16]; +unsigned char rw_fbins_mask_f2[16]; diff --git a/src/fsw_init.c b/src/fsw_init.c --- a/src/fsw_init.c +++ b/src/fsw_init.c @@ -160,6 +160,15 @@ rtems_task Init( rtems_task_argument ign init_k_coefficients_prc1(); init_k_coefficients_prc2(); pa_bia_status_info = 0x00; + cp_rpw_sc_rw_f_flags = 0x00; + cp_rpw_sc_rw1_f1 = 0.0; + cp_rpw_sc_rw1_f2 = 0.0; + cp_rpw_sc_rw2_f1 = 0.0; + cp_rpw_sc_rw2_f2 = 0.0; + cp_rpw_sc_rw3_f1 = 0.0; + cp_rpw_sc_rw3_f2 = 0.0; + cp_rpw_sc_rw4_f1 = 0.0; + cp_rpw_sc_rw4_f2 = 0.0; update_last_valid_transition_date( DEFAULT_LAST_VALID_TRANSITION_DATE ); // waveform picker initialization diff --git a/src/fsw_misc.c b/src/fsw_misc.c --- a/src/fsw_misc.c +++ b/src/fsw_misc.c @@ -317,6 +317,8 @@ rtems_task hous_task(rtems_task_argument hk_lfr_le_me_he_update(); + housekeeping_packet.hk_lfr_sc_rw_f_flags = cp_rpw_sc_rw_f_flags; + // SEND PACKET status = rtems_message_queue_send( queue_id, &housekeeping_packet, PACKET_LENGTH_HK + CCSDS_TC_TM_PACKET_OFFSET + CCSDS_PROTOCOLE_EXTRA_BYTES); diff --git a/src/fsw_spacewire.c b/src/fsw_spacewire.c --- a/src/fsw_spacewire.c +++ b/src/fsw_spacewire.c @@ -1021,7 +1021,7 @@ void init_header_cwf( Header_TM_LFR_SCIE header->time[0] = 0x00; // AUXILIARY DATA HEADER header->sid = 0x00; - header->hkBIA = DEFAULT_HKBIA; + header->pa_bia_status_info = DEFAULT_HKBIA; header->blkNr[0] = 0x00; header->blkNr[1] = 0x00; } @@ -1051,7 +1051,7 @@ void init_header_swf( Header_TM_LFR_SCIE header->time[0] = 0x00; // AUXILIARY DATA HEADER header->sid = 0x00; - header->hkBIA = DEFAULT_HKBIA; + header->pa_bia_status_info = DEFAULT_HKBIA; header->pktCnt = DEFAULT_PKTCNT; // PKT_CNT header->pktNr = 0x00; header->blkNr[0] = (unsigned char) (BLK_NR_CWF >> 8); @@ -1083,7 +1083,7 @@ void init_header_asm( Header_TM_LFR_SCIE header->time[0] = 0x00; // AUXILIARY DATA HEADER header->sid = 0x00; - header->biaStatusInfo = 0x00; + header->pa_bia_status_info = 0x00; header->pa_lfr_pkt_cnt_asm = 0x00; header->pa_lfr_pkt_nr_asm = 0x00; header->pa_lfr_asm_blk_nr[0] = 0x00; @@ -1126,7 +1126,7 @@ int spw_send_waveform_CWF( ring_node *ri header->packetLength[0] = (unsigned char) (TM_LEN_SCI_CWF_336 >> 8); header->packetLength[1] = (unsigned char) (TM_LEN_SCI_CWF_336 ); - header->hkBIA = pa_bia_status_info; + header->pa_bia_status_info = pa_bia_status_info; header->sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters; header->blkNr[0] = (unsigned char) (BLK_NR_CWF >> 8); header->blkNr[1] = (unsigned char) (BLK_NR_CWF ); @@ -1209,7 +1209,7 @@ int spw_send_waveform_SWF( ring_node *ri dataPtr = (int*) ring_node_to_send->buffer_address; sid = ring_node_to_send->sid; - header->hkBIA = pa_bia_status_info; + header->pa_bia_status_info = pa_bia_status_info; header->sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters; for (i=0; i<7; i++) // send waveform @@ -1300,7 +1300,7 @@ int spw_send_waveform_CWF3_light( ring_n header->packetLength[0] = (unsigned char) (TM_LEN_SCI_CWF_672 >> 8); header->packetLength[1] = (unsigned char) (TM_LEN_SCI_CWF_672 ); - header->hkBIA = pa_bia_status_info; + header->pa_bia_status_info = pa_bia_status_info; header->sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters; header->blkNr[0] = (unsigned char) (BLK_NR_CWF_SHORT_F3 >> 8); header->blkNr[1] = (unsigned char) (BLK_NR_CWF_SHORT_F3 ); @@ -1361,7 +1361,7 @@ void spw_send_asm_f0( ring_node *ring_no coarseTime = ring_node_to_send->coarseTime; fineTime = ring_node_to_send->fineTime; - header->biaStatusInfo = pa_bia_status_info; + header->pa_bia_status_info = pa_bia_status_info; header->sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters; for (i=0; i<3; i++) @@ -1441,7 +1441,7 @@ void spw_send_asm_f1( ring_node *ring_no coarseTime = ring_node_to_send->coarseTime; fineTime = ring_node_to_send->fineTime; - header->biaStatusInfo = pa_bia_status_info; + header->pa_bia_status_info = pa_bia_status_info; header->sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters; for (i=0; i<3; i++) @@ -1521,7 +1521,7 @@ void spw_send_asm_f2( ring_node *ring_no coarseTime = ring_node_to_send->coarseTime; fineTime = ring_node_to_send->fineTime; - header->biaStatusInfo = pa_bia_status_info; + header->pa_bia_status_info = pa_bia_status_info; header->sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters; for (i=0; i<3; i++) diff --git a/src/processing/avf0_prc0.c b/src/processing/avf0_prc0.c --- a/src/processing/avf0_prc0.c +++ b/src/processing/avf0_prc0.c @@ -283,7 +283,7 @@ rtems_task prc0_task( rtems_task_argumen // 3) send the BP1 set set_time( packet_sbm_bp1.time, (unsigned char *) &incomingMsg->coarseTimeSBM ); set_time( packet_sbm_bp1.acquisitionTime, (unsigned char *) &incomingMsg->coarseTimeSBM ); - packet_sbm_bp1.biaStatusInfo = pa_bia_status_info; + packet_sbm_bp1.pa_bia_status_info = pa_bia_status_info; packet_sbm_bp1.sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters; BP_send_s1_s2( (char *) &packet_sbm_bp1, queue_id, PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP1_F0 + PACKET_LENGTH_DELTA, @@ -296,7 +296,7 @@ rtems_task prc0_task( rtems_task_argumen // 2) send the BP2 set set_time( packet_sbm_bp2.time, (unsigned char *) &incomingMsg->coarseTimeSBM ); set_time( packet_sbm_bp2.acquisitionTime, (unsigned char *) &incomingMsg->coarseTimeSBM ); - packet_sbm_bp2.biaStatusInfo = pa_bia_status_info; + packet_sbm_bp2.pa_bia_status_info = pa_bia_status_info; packet_sbm_bp2.sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters; BP_send_s1_s2( (char *) &packet_sbm_bp2, queue_id, PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP2_F0 + PACKET_LENGTH_DELTA, @@ -321,7 +321,7 @@ rtems_task prc0_task( rtems_task_argumen // 3) send the BP1 set set_time( packet_norm_bp1.time, (unsigned char *) &incomingMsg->coarseTimeNORM ); set_time( packet_norm_bp1.acquisitionTime, (unsigned char *) &incomingMsg->coarseTimeNORM ); - packet_norm_bp1.biaStatusInfo = pa_bia_status_info; + packet_norm_bp1.pa_bia_status_info = pa_bia_status_info; packet_norm_bp1.sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters; BP_send( (char *) &packet_norm_bp1, queue_id, PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP1_F0 + PACKET_LENGTH_DELTA, @@ -333,7 +333,7 @@ rtems_task prc0_task( rtems_task_argumen // 2) send the BP2 set set_time( packet_norm_bp2.time, (unsigned char *) &incomingMsg->coarseTimeNORM ); set_time( packet_norm_bp2.acquisitionTime, (unsigned char *) &incomingMsg->coarseTimeNORM ); - packet_norm_bp2.biaStatusInfo = pa_bia_status_info; + packet_norm_bp2.pa_bia_status_info = pa_bia_status_info; packet_norm_bp2.sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters; BP_send( (char *) &packet_norm_bp2, queue_id, PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP2_F0 + PACKET_LENGTH_DELTA, diff --git a/src/processing/avf1_prc1.c b/src/processing/avf1_prc1.c --- a/src/processing/avf1_prc1.c +++ b/src/processing/avf1_prc1.c @@ -278,7 +278,7 @@ rtems_task prc1_task( rtems_task_argumen // 3) send the BP1 set set_time( packet_sbm_bp1.time, (unsigned char *) &incomingMsg->coarseTimeSBM ); set_time( packet_sbm_bp1.acquisitionTime, (unsigned char *) &incomingMsg->coarseTimeSBM ); - packet_sbm_bp1.biaStatusInfo = pa_bia_status_info; + packet_sbm_bp1.pa_bia_status_info = pa_bia_status_info; packet_sbm_bp1.sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters; BP_send_s1_s2( (char *) &packet_sbm_bp1, queue_id_send, PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP1_F1 + PACKET_LENGTH_DELTA, @@ -291,7 +291,7 @@ rtems_task prc1_task( rtems_task_argumen // 2) send the BP2 set set_time( packet_sbm_bp2.time, (unsigned char *) &incomingMsg->coarseTimeSBM ); set_time( packet_sbm_bp2.acquisitionTime, (unsigned char *) &incomingMsg->coarseTimeSBM ); - packet_sbm_bp2.biaStatusInfo = pa_bia_status_info; + packet_sbm_bp2.pa_bia_status_info = pa_bia_status_info; packet_sbm_bp2.sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters; BP_send_s1_s2( (char *) &packet_sbm_bp2, queue_id_send, PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP2_F1 + PACKET_LENGTH_DELTA, @@ -316,7 +316,7 @@ rtems_task prc1_task( rtems_task_argumen // 3) send the BP1 set set_time( packet_norm_bp1.time, (unsigned char *) &incomingMsg->coarseTimeNORM ); set_time( packet_norm_bp1.acquisitionTime, (unsigned char *) &incomingMsg->coarseTimeNORM ); - packet_norm_bp1.biaStatusInfo = pa_bia_status_info; + packet_norm_bp1.pa_bia_status_info = pa_bia_status_info; packet_norm_bp1.sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters; BP_send( (char *) &packet_norm_bp1, queue_id_send, PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP1_F1 + PACKET_LENGTH_DELTA, @@ -328,7 +328,7 @@ rtems_task prc1_task( rtems_task_argumen // 2) send the BP2 set set_time( packet_norm_bp2.time, (unsigned char *) &incomingMsg->coarseTimeNORM ); set_time( packet_norm_bp2.acquisitionTime, (unsigned char *) &incomingMsg->coarseTimeNORM ); - packet_norm_bp2.biaStatusInfo = pa_bia_status_info; + packet_norm_bp2.pa_bia_status_info = pa_bia_status_info; packet_norm_bp2.sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters; BP_send( (char *) &packet_norm_bp2, queue_id_send, PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP2_F1 + PACKET_LENGTH_DELTA, diff --git a/src/processing/avf2_prc2.c b/src/processing/avf2_prc2.c --- a/src/processing/avf2_prc2.c +++ b/src/processing/avf2_prc2.c @@ -200,7 +200,7 @@ rtems_task prc2_task( rtems_task_argumen // 2) send the BP1 set set_time( packet_norm_bp1.time, (unsigned char *) &incomingMsg->coarseTimeNORM ); set_time( packet_norm_bp1.acquisitionTime, (unsigned char *) &incomingMsg->coarseTimeNORM ); - packet_norm_bp1.biaStatusInfo = pa_bia_status_info; + packet_norm_bp1.pa_bia_status_info = pa_bia_status_info; packet_norm_bp1.sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters; BP_send( (char *) &packet_norm_bp1, queue_id_send, PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP1_F2 + PACKET_LENGTH_DELTA, @@ -214,7 +214,7 @@ rtems_task prc2_task( rtems_task_argumen // 2) send the BP2 set set_time( packet_norm_bp2.time, (unsigned char *) &incomingMsg->coarseTimeNORM ); set_time( packet_norm_bp2.acquisitionTime, (unsigned char *) &incomingMsg->coarseTimeNORM ); - packet_norm_bp2.biaStatusInfo = pa_bia_status_info; + packet_norm_bp2.pa_bia_status_info = pa_bia_status_info; packet_norm_bp2.sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters; BP_send( (char *) &packet_norm_bp2, queue_id_send, PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP2_F2 + PACKET_LENGTH_DELTA, 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 @@ -378,7 +378,7 @@ void BP_init_header( bp_packet *packet, packet->time[5] = 0x00; // AUXILIARY DATA HEADER packet->sid = sid; - packet->biaStatusInfo = 0x00; + packet->pa_bia_status_info = 0x00; packet->sy_lfr_common_parameters_spare = 0x00; packet->sy_lfr_common_parameters = 0x00; packet->acquisitionTime[0] = 0x00; @@ -412,7 +412,7 @@ void BP_init_header_with_spare( bp_packe packet->destinationID = TM_DESTINATION_ID_GROUND; // AUXILIARY DATA HEADER packet->sid = sid; - packet->biaStatusInfo = 0x00; + packet->pa_bia_status_info = 0x00; packet->sy_lfr_common_parameters_spare = 0x00; packet->sy_lfr_common_parameters = 0x00; packet->time[0] = 0x00; diff --git a/src/tc_acceptance.c b/src/tc_acceptance.c --- a/src/tc_acceptance.c +++ b/src/tc_acceptance.c @@ -230,7 +230,7 @@ int tc_check_type_subtype( unsigned char || (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_PAS_FILTER_PAR)) + || (packetSubType == TC_SUBTYPE_LOAD_FILTER_PAR)) { status = CCSDS_TM_VALID; } @@ -416,8 +416,8 @@ 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)) { + case TC_SUBTYPE_LOAD_FILTER_PAR: + if (length!=(TC_LEN_LOAD_FILTER_PAR-CCSDS_TC_TM_PACKET_OFFSET)) { status = WRONG_LEN_PKT; } else { diff --git a/src/tc_handler.c b/src/tc_handler.c --- a/src/tc_handler.c +++ b/src/tc_handler.c @@ -123,8 +123,8 @@ 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 ); + case TC_SUBTYPE_LOAD_FILTER_PAR: + result = action_load_filter_par( &TC, queue_snd_id, time ); close_action( &TC, result, queue_snd_id ); break; case TC_SUBTYPE_UPDT_TIME: @@ -294,6 +294,11 @@ int action_update_info(ccsdsTelecommandP pa_bia_status_info = pa_bia_status_info | (bytePosPtr[ BYTE_POS_UPDATE_INFO_PARAMETERS_SET1 ] & 0x1); + // REACTION_WHEELS_FREQUENCY, copy the incoming parameters in the local variable (to be copied in HK packets) + cp_rpw_sc_rw_f_flags = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW_F_FLAGS ]; + getReactionWheelsFrequencies( TC ); + build_rw_fbins_masks(); + result = status; return result; 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,7 +310,7 @@ int action_load_fbins_mask(ccsdsTelecomm return flag; } -int action_load_pas_filter_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time) +int action_load_filter_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time) { /** This function updates the LFR registers with the incoming sbm2 parameters. * @@ -327,10 +327,21 @@ int action_load_pas_filter_par(ccsdsTele 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 ]; + 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_tbad[0] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_TBAD + 0 ]; + parameter_dump_packet.sy_lfr_pas_filter_tbad[1] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_TBAD + 1 ]; + parameter_dump_packet.sy_lfr_pas_filter_tbad[2] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_TBAD + 2 ]; + parameter_dump_packet.sy_lfr_pas_filter_tbad[3] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_TBAD + 3 ]; + parameter_dump_packet.sy_lfr_pas_filter_offset = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_OFFSET ]; + parameter_dump_packet.sy_lfr_pas_filter_shift[0] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_SHIFT + 0 ]; + parameter_dump_packet.sy_lfr_pas_filter_shift[1] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_SHIFT + 1 ]; + parameter_dump_packet.sy_lfr_pas_filter_shift[2] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_SHIFT + 2 ]; + parameter_dump_packet.sy_lfr_pas_filter_shift[3] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_SHIFT + 3 ]; + parameter_dump_packet.sy_lfr_sc_rw_delta_f[0] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_SC_RW_DELTA_F + 0 ]; + parameter_dump_packet.sy_lfr_sc_rw_delta_f[1] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_SC_RW_DELTA_F + 1 ]; + parameter_dump_packet.sy_lfr_sc_rw_delta_f[2] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_SC_RW_DELTA_F + 2 ]; + parameter_dump_packet.sy_lfr_sc_rw_delta_f[3] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_SC_RW_DELTA_F + 3 ]; } return flag; @@ -790,7 +801,7 @@ int set_sy_lfr_s1_bp_p1( ccsdsTelecomman //********************* // SBM2 MODE PARAMETERS -int set_sy_lfr_s2_bp_p0(ccsdsTelecommandPacket_t *TC) +int set_sy_lfr_s2_bp_p0( ccsdsTelecommandPacket_t *TC ) { /** This function sets the time between two basic parameter sets, in s (SY_LFR_S2_BP_P0). * @@ -882,6 +893,149 @@ unsigned int check_update_info_hk_thr_mo return status; } +void getReactionWheelsFrequencies( ccsdsTelecommandPacket_t *TC ) +{ + /** This function get the reaction wheels frequencies in the incoming TC_LFR_UPDATE_INFO and copy the values locally. + * + * @param TC points to the TeleCommand packet that is being processed + * + */ + + unsigned char * bytePosPtr; // pointer to the beginning of the incoming TC packet + unsigned char * floatPtr; // pointer to the Most Significant Byte of the considered float + + bytePosPtr = (unsigned char *) &TC->packetID; + + // cp_rpw_sc_rw1_f1 + floatPtr = (unsigned char *) &cp_rpw_sc_rw1_f1; + floatPtr[0] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW1_F1 ]; + floatPtr[1] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW1_F1 + 1 ]; + floatPtr[2] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW1_F1 + 2 ]; + floatPtr[3] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW1_F1 + 3 ]; + // cp_rpw_sc_rw1_f2 + floatPtr = (unsigned char *) &cp_rpw_sc_rw1_f2; + floatPtr[0] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW1_F2 ]; + floatPtr[1] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW1_F2 + 1 ]; + floatPtr[2] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW1_F2 + 2 ]; + floatPtr[3] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW1_F2 + 3 ]; + // cp_rpw_sc_rw2_f1 + floatPtr = (unsigned char *) &cp_rpw_sc_rw2_f1; + floatPtr[0] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW2_F1 ]; + floatPtr[1] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW2_F1 + 1 ]; + floatPtr[2] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW2_F1 + 2 ]; + floatPtr[3] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW2_F1 + 3 ]; + // cp_rpw_sc_rw2_f2 + floatPtr = (unsigned char *) &cp_rpw_sc_rw2_f2; + floatPtr[0] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW2_F2 ]; + floatPtr[1] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW2_F2 + 1 ]; + floatPtr[2] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW2_F2 + 2 ]; + floatPtr[3] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW2_F2 + 3 ]; + // cp_rpw_sc_rw3_f1 + floatPtr = (unsigned char *) &cp_rpw_sc_rw3_f1; + floatPtr[0] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW3_F1 ]; + floatPtr[1] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW3_F1 + 1 ]; + floatPtr[2] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW3_F1 + 2 ]; + floatPtr[3] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW3_F1 + 3 ]; + // cp_rpw_sc_rw3_f2 + floatPtr = (unsigned char *) &cp_rpw_sc_rw3_f2; + floatPtr[0] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW3_F2 ]; + floatPtr[1] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW3_F2 + 1 ]; + floatPtr[2] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW3_F2 + 2 ]; + floatPtr[3] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW3_F2 + 3 ]; + // cp_rpw_sc_rw4_f1 + floatPtr = (unsigned char *) &cp_rpw_sc_rw4_f1; + floatPtr[0] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW4_F1 ]; + floatPtr[1] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW4_F1 + 1 ]; + floatPtr[2] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW4_F1 + 2 ]; + floatPtr[3] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW4_F1 + 3 ]; + // cp_rpw_sc_rw4_f2 + floatPtr = (unsigned char *) &cp_rpw_sc_rw4_f2; + floatPtr[0] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW4_F2 ]; + floatPtr[1] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW4_F2 + 1 ]; + floatPtr[2] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW4_F2 + 2 ]; + floatPtr[3] = bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW4_F2 + 3 ]; +} + +void setFBinMask( unsigned char *fbins_mask, float freq, unsigned char deltaFreq, unsigned char flag ) +{ + unsigned int fBelow; + + // compute the index of the frequency immediately below the reaction wheel frequency + fBelow = (unsigned int) ( floor( ((double) cp_rpw_sc_rw1_f1) / ((double) deltaFreq)) ); + + if (fBelow < 127) // if fbelow is greater than 127 or equal to 127, this means that the reaction wheel frequency is outside the frequency range + { + if (flag == 1) + { +// rw_fbins_mask[k] = (1 << fBelow) | (1 << fAbove); + } + } +} + +void build_rw_fbins_mask( unsigned int channel ) +{ + unsigned char rw_fbins_mask[16]; + unsigned char *maskPtr; + double deltaF; + unsigned k; + + k = 0; + + switch (channel) + { + case 0: + maskPtr = rw_fbins_mask_f0; + deltaF = 96.; + break; + case 1: + maskPtr = rw_fbins_mask_f1; + deltaF = 16.; + break; + case 2: + maskPtr = rw_fbins_mask_f2; + deltaF = 1.; + break; + default: + break; + } + + for (k = 0; k < 16; k++) + { + rw_fbins_mask[k] = 0x00; + } + + // RW1 F1 +// setFBinMask( rw_fbins_mask, fBelow ); + + // RW1 F2 + + // RW2 F1 + + // RW2 F2 + + // RW3 F1 + + // RW3 F2 + + // RW4 F1 + + // RW4 F2 + + + // update the value of the fbins related to reaction wheels frequency filtering + for (k = 0; k < 16; k++) + { + maskPtr[k] = rw_fbins_mask[k]; + } +} + +void build_rw_fbins_masks() +{ + build_rw_fbins_mask( 0 ); + build_rw_fbins_mask( 1 ); + build_rw_fbins_mask( 2 ); +} + //*********** // FBINS MASK @@ -921,8 +1075,10 @@ int check_sy_lfr_pas_filter_parameters( unsigned char sy_lfr_pas_filter_enabled; unsigned char sy_lfr_pas_filter_modulus; - unsigned char sy_lfr_pas_filter_nstd; + float sy_lfr_pas_filter_tbad; unsigned char sy_lfr_pas_filter_offset; + float sy_lfr_pas_filtershift; + float sy_lfr_sc_rw_delta_f; flag = LFR_SUCCESSFUL; @@ -930,7 +1086,7 @@ int check_sy_lfr_pas_filter_parameters( // 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 ]; //****************** @@ -942,15 +1098,7 @@ int check_sy_lfr_pas_filter_parameters( 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_tbad // sy_lfr_pas_filter_offset if (flag == LFR_SUCCESSFUL) { @@ -960,6 +1108,8 @@ int check_sy_lfr_pas_filter_parameters( flag = WRONG_APP_DATA; } } + // sy_lfr_pas_filtershift + // sy_lfr_sc_rw_delta_f return flag; }