diff --git a/FSW-qt/Makefile b/FSW-qt/Makefile --- a/FSW-qt/Makefile +++ b/FSW-qt/Makefile @@ -1,6 +1,6 @@ ############################################################################# # Makefile for building: bin/fsw -# Generated by qmake (2.01a) (Qt 4.8.6) on: Tue May 13 15:18:10 2014 +# Generated by qmake (2.01a) (Qt 4.8.6) on: Thu May 15 08:30:40 2014 # Project: fsw-qt.pro # Template: app # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro diff --git a/FSW-qt/fsw-qt.pro.user b/FSW-qt/fsw-qt.pro.user --- a/FSW-qt/fsw-qt.pro.user +++ b/FSW-qt/fsw-qt.pro.user @@ -1,6 +1,6 @@ - + ProjectExplorer.Project.ActiveTarget diff --git a/header/fsw_params.h b/header/fsw_params.h --- a/header/fsw_params.h +++ b/header/fsw_params.h @@ -245,7 +245,6 @@ struct param_local_str{ unsigned int local_sbm1_nb_cwf_max; unsigned int local_sbm2_nb_cwf_sent; unsigned int local_sbm2_nb_cwf_max; - unsigned int local_nb_interrupt_f0_MAX; }; #endif // FSW_PARAMS_H_INCLUDED diff --git a/header/fsw_params_nb_bytes.h b/header/fsw_params_nb_bytes.h --- a/header/fsw_params_nb_bytes.h +++ b/header/fsw_params_nb_bytes.h @@ -1,6 +1,9 @@ #ifndef TM_BYTE_POSITIONS_H #define TM_BYTE_POSITIONS_H +// SEQUENCE_CNT +#define PACKET_POS_SEQUENCE_CNT 6 // 4 + 2 + // TC_LFR_LOAD_COMMON_PAR // TC_LFR_LOAD_NORMAL_PAR diff --git a/header/fsw_params_processing.h b/header/fsw_params_processing.h --- a/header/fsw_params_processing.h +++ b/header/fsw_params_processing.h @@ -3,7 +3,7 @@ #define NB_BINS_PER_SM 128 #define NB_VALUES_PER_SM 25 -#define TOTAL_SIZE_SM 3200 // 25 * 128 +#define TOTAL_SIZE_SM 3200 // 25 * 128 = 0xC80 #define TOTAL_SIZE_NORM_BP1_F0 99 // 11 * 9 = 99 #define TOTAL_SIZE_NORM_BP1_F1 117 // 13 * 9 = 117 #define TOTAL_SIZE_NORM_BP1_F2 108 // 12 * 9 = 108 @@ -19,23 +19,23 @@ #define NB_RING_NODES_ASM_BURST_SBM_F2 3 // AT LEAST 3 #define NB_RING_NODES_ASM_NORM_F2 3 // AT LEAST 3 // -#define NB_BINS_PER_ASM_F0 88 -#define NB_BINS_PER_PKT_ASM_F0 44 -#define TOTAL_SIZE_ASM_F0_IN_BYTES 4400 // 25 * 88 * 2 -#define ASM_F0_INDICE_START 17 // 88 bins -#define ASM_F0_INDICE_STOP 104 // 2 packets of 44 bins +#define NB_BINS_PER_ASM_F0 88 +#define NB_BINS_PER_PKT_ASM_F0 44 +#define TOTAL_SIZE_ASM_F0_IN_BYTES 4400 // 25 * 88 * 2 +#define ASM_F0_INDICE_START 17 // 88 bins +#define ASM_F0_INDICE_STOP 104 // 2 packets of 44 bins // -#define NB_BINS_PER_ASM_F1 104 -#define NB_BINS_PER_PKT_ASM_F1 52 -#define TOTAL_SIZE_ASM_F1_IN_BYTES 5200 // 25 * 104 * 2 -#define ASM_F1_INDICE_START 6 // 104 bins -#define ASM_F1_INDICE_STOP 109 // 2 packets of 52 bins +#define NB_BINS_PER_ASM_F1 104 +#define NB_BINS_PER_PKT_ASM_F1 52 +#define TOTAL_SIZE_ASM_F1_IN_BYTES 5200 // 25 * 104 * 2 +#define ASM_F1_INDICE_START 6 // 104 bins +#define ASM_F1_INDICE_STOP 109 // 2 packets of 52 bins // -#define NB_BINS_PER_ASM_F2 96 -#define NB_BINS_PER_PKT_ASM_F2 48 -#define TOTAL_SIZE_ASM_F2_IN_BYTES 4800 // 25 * 96 * 2 -#define ASM_F2_INDICE_START 7 // 96 bins -#define ASM_F2_INDICE_STOP 102 // 2 packets of 48 bins +#define NB_BINS_PER_ASM_F2 96 +#define NB_BINS_PER_PKT_ASM_F2 48 +#define TOTAL_SIZE_ASM_F2_IN_BYTES 4800 // 25 * 96 * 2 +#define ASM_F2_INDICE_START 7 // 96 bins +#define ASM_F2_INDICE_STOP 102 // 2 packets of 48 bins // #define NB_BINS_COMPRESSED_SM_F0 11 #define NB_BINS_COMPRESSED_SM_F1 13 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 @@ -28,19 +28,19 @@ typedef struct ring_node_asm unsigned int status; } ring_node_asm; -typedef struct bp_packet +typedef struct { Header_TM_LFR_SCIENCE_BP_t header; unsigned char data[ 30 * 22 ]; // MAX size is 22 * 30 [TM_LFR_SCIENCE_BURST_BP2_F1] } bp_packet; -typedef struct bp_packet_with_spare +typedef struct { Header_TM_LFR_SCIENCE_BP_with_spare_t header; unsigned char data[ 9 * 13 ]; // only for TM_LFR_SCIENCE_NORMAL_BP1_F0 and F1 } bp_packet_with_spare; -typedef struct asm_msg +typedef struct { ring_node_asm *norm; ring_node_asm *burst_sbm; @@ -83,15 +83,15 @@ void ASM_send(Header_TM_LFR_SCIENCE_ASM_ // Basic Parameters void BP_reset_current_ring_nodes( void ); -void BP_init_header(Header_TM_LFR_SCIENCE_BP_t *header, - unsigned int apid, unsigned char sid, - unsigned int packetLength , unsigned char blkNr); -void BP_init_header_with_spare(Header_TM_LFR_SCIENCE_BP_with_spare_t *header, - unsigned int apid, unsigned char sid, - unsigned int packetLength, unsigned char blkNr ); -void BP_send(char *data, - rtems_id queue_id , - unsigned int nbBytesToSend ); +void BP_init_header( Header_TM_LFR_SCIENCE_BP_t *header, + unsigned int apid, unsigned char sid, + unsigned int packetLength , unsigned char blkNr); +void BP_init_header_with_spare( Header_TM_LFR_SCIENCE_BP_with_spare_t *header, + unsigned int apid, unsigned char sid, + unsigned int packetLength, unsigned char blkNr ); +void BP_send( char *data, + rtems_id queue_id , + unsigned int nbBytesToSend , unsigned int sid ); //****************** // general functions diff --git a/header/wf_handler.h b/header/wf_handler.h --- a/header/wf_handler.h +++ b/header/wf_handler.h @@ -87,8 +87,6 @@ void set_wfp_delta_f2( void ); //***************** // local parameters -void set_local_nb_interrupt_f0_MAX( void ); - void increment_seq_counter_source_id( unsigned char *packet_sequence_control, unsigned int sid ); #endif // WF_HANDLER_H_INCLUDED diff --git a/src/fsw_init.c b/src/fsw_init.c --- a/src/fsw_init.c +++ b/src/fsw_init.c @@ -214,7 +214,6 @@ void init_local_mode_parameters( void ) unsigned int i; // LOCAL PARAMETERS - set_local_nb_interrupt_f0_MAX(); BOOT_PRINTF1("local_sbm1_nb_cwf_max %d \n", param_local.local_sbm1_nb_cwf_max) BOOT_PRINTF1("local_sbm2_nb_cwf_max %d \n", param_local.local_sbm2_nb_cwf_max) diff --git a/src/fsw_misc.c b/src/fsw_misc.c --- a/src/fsw_misc.c +++ b/src/fsw_misc.c @@ -485,8 +485,6 @@ void get_v_e1_e2_f3( unsigned char *v, u PRINTF1("ERR *** in get_v_e1_e2_f3 *** trying to read out of the buffer, counter = %d\n", offset_in_samples) offset_in_samples = NB_SAMPLES_PER_SNAPSHOT -1; } - PRINTF1("f3 data @ %x *** ", waveform_picker_regs->addr_data_f3 ) - PRINTF2("deltaT = %d, offset_in_samples = %d\n", deltaT, offset_in_samples ) offset_in_bytes = TIME_OFFSET_IN_BYTES + offset_in_samples * NB_WORDS_SWF_BLK * 4; v[0] = bufferPtr[ offset_in_bytes + 0]; v[1] = bufferPtr[ offset_in_bytes + 1]; 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 @@ -265,8 +265,9 @@ rtems_task prc0_task( rtems_task_argumen // 3) send the BP1 set set_time( packet_sbm_bp1_f0.header.time, (unsigned char *) &incomingMsg->coarseTime ); set_time( packet_sbm_bp1_f0.header.acquisitionTime, (unsigned char *) &incomingMsg->fineTime ); - BP_send( (char *) &packet_sbm_bp1_f0.header, queue_id, - PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP1_F0 + PACKET_LENGTH_DELTA); + BP_send( (char *) &packet_sbm_bp1_f0, queue_id, + PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP1_F0 + PACKET_LENGTH_DELTA, + SID_SBM1_BP1_F0); // 4) compute the BP2 set if needed if ( incomingMsg->event & RTEMS_EVENT_BURST_SBM_BP2_F0 ) { @@ -275,8 +276,9 @@ rtems_task prc0_task( rtems_task_argumen // 2) send the BP2 set set_time( packet_sbm_bp2_f0.header.time, (unsigned char *) &incomingMsg->coarseTime ); set_time( packet_sbm_bp2_f0.header.acquisitionTime, (unsigned char *) &incomingMsg->fineTime ); - BP_send( (char *) &packet_sbm_bp2_f0.header, queue_id, - PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP2_F0 + PACKET_LENGTH_DELTA); + BP_send( (char *) &packet_sbm_bp2_f0, queue_id, + PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP2_F0 + PACKET_LENGTH_DELTA, + SID_SBM1_BP2_F0); } } @@ -297,8 +299,9 @@ rtems_task prc0_task( rtems_task_argumen // 3) send the BP1 set set_time( packet_norm_bp1_f0.header.time, (unsigned char *) &incomingMsg->coarseTime ); set_time( packet_norm_bp1_f0.header.acquisitionTime, (unsigned char *) &incomingMsg->fineTime ); - BP_send( (char *) &packet_norm_bp1_f0.header, queue_id, - PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP1_F0 + PACKET_LENGTH_DELTA); + BP_send( (char *) &packet_norm_bp1_f0, queue_id, + PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP1_F0 + PACKET_LENGTH_DELTA, + SID_NORM_BP1_F0 ); if (incomingMsg->event & RTEMS_EVENT_NORM_BP2_F0) { // 1) compute the BP2 set using the same ASM as the one used for BP1 @@ -306,8 +309,9 @@ rtems_task prc0_task( rtems_task_argumen // 2) send the BP2 set set_time( packet_norm_bp2_f0.header.time, (unsigned char *) &incomingMsg->coarseTime ); set_time( packet_norm_bp2_f0.header.acquisitionTime, (unsigned char *) &incomingMsg->fineTime ); - BP_send( (char *) &packet_norm_bp2_f0.header, queue_id, - PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP2_F0 + PACKET_LENGTH_DELTA); + BP_send( (char *) &packet_norm_bp2_f0, queue_id, + PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP2_F0 + PACKET_LENGTH_DELTA, + SID_NORM_BP2_F0); } } 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 @@ -250,8 +250,9 @@ rtems_task prc1_task( rtems_task_argumen // 3) send the BP1 set set_time( packet_sbm_bp1.header.time, (unsigned char *) &incomingMsg->coarseTime ); set_time( packet_sbm_bp1.header.acquisitionTime, (unsigned char *) &incomingMsg->fineTime ); - BP_send( (char *) &packet_sbm_bp1.header, queue_id_send, - PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP1_F1 + PACKET_LENGTH_DELTA); + BP_send( (char *) &packet_sbm_bp1, queue_id_send, + PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP1_F1 + PACKET_LENGTH_DELTA, + SID_SBM2_BP1_F1 ); // 4) compute the BP2 set if needed if ( incomingMsg->event & RTEMS_EVENT_BURST_SBM_BP2_F1 ) { @@ -260,8 +261,9 @@ rtems_task prc1_task( rtems_task_argumen // 2) send the BP2 set set_time( packet_sbm_bp2.header.time, (unsigned char *) &incomingMsg->coarseTime ); set_time( packet_sbm_bp2.header.acquisitionTime, (unsigned char *) &incomingMsg->fineTime ); - BP_send( (char *) &packet_sbm_bp2.header, queue_id_send, - PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP2_F1 + PACKET_LENGTH_DELTA); + BP_send( (char *) &packet_sbm_bp2, queue_id_send, + PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP2_F1 + PACKET_LENGTH_DELTA, + SID_SBM2_BP2_F1 ); } } @@ -282,8 +284,9 @@ rtems_task prc1_task( rtems_task_argumen // 3) send the BP1 set set_time( packet_norm_bp1.header.time, (unsigned char *) &incomingMsg->coarseTime ); set_time( packet_norm_bp1.header.acquisitionTime, (unsigned char *) &incomingMsg->fineTime ); - BP_send( (char *) &packet_norm_bp1.header, queue_id_send, - PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP1_F1 + PACKET_LENGTH_DELTA); + BP_send( (char *) &packet_norm_bp1, queue_id_send, + PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP1_F1 + PACKET_LENGTH_DELTA, + SID_NORM_BP1_F1 ); if (incomingMsg->event & RTEMS_EVENT_NORM_BP2_F1) { // 1) compute the BP2 set @@ -291,8 +294,9 @@ rtems_task prc1_task( rtems_task_argumen // 2) send the BP2 set set_time( packet_norm_bp2.header.time, (unsigned char *) &incomingMsg->coarseTime ); set_time( packet_norm_bp2.header.acquisitionTime, (unsigned char *) &incomingMsg->fineTime ); - BP_send( (char *) &packet_norm_bp2.header, queue_id_send, - PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP2_F1 + PACKET_LENGTH_DELTA); + BP_send( (char *) &packet_norm_bp2, queue_id_send, + PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP2_F1 + PACKET_LENGTH_DELTA, + SID_NORM_BP2_F1 ); } } 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 @@ -188,8 +188,9 @@ rtems_task prc2_task( rtems_task_argumen // 3) send the BP1 set set_time( packet_norm_bp1_f2.header.time, (unsigned char *) &incomingMsg->coarseTime ); set_time( packet_norm_bp1_f2.header.acquisitionTime, (unsigned char *) &incomingMsg->fineTime ); - BP_send( (char *) &packet_norm_bp1_f2.header, queue_id, - PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP1_F2 + PACKET_LENGTH_DELTA); + BP_send( (char *) &packet_norm_bp1_f2, queue_id, + PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP1_F2 + PACKET_LENGTH_DELTA, + SID_NORM_BP1_F2 ); if (incomingMsg->event & RTEMS_EVENT_NORM_BP2_F2) { // 1) compute the BP2 set using the same ASM as the one used for BP1 @@ -197,8 +198,9 @@ rtems_task prc2_task( rtems_task_argumen // 2) send the BP2 set set_time( packet_norm_bp2_f2.header.time, (unsigned char *) &incomingMsg->coarseTime ); set_time( packet_norm_bp2_f2.header.acquisitionTime, (unsigned char *) &incomingMsg->fineTime ); - BP_send( (char *) &packet_norm_bp2_f2.header, queue_id, - PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP2_F2 + PACKET_LENGTH_DELTA); + BP_send( (char *) &packet_norm_bp2_f2, queue_id, + PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP2_F2 + PACKET_LENGTH_DELTA, + SID_NORM_BP2_F2 ); } } 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 @@ -302,6 +302,7 @@ void ASM_send(Header_TM_LFR_SCIENCE_ASM_ spw_ioctl_send->options = 0; // (2) BUILD THE HEADER + increment_seq_counter_source_id( header->packetSequenceControl, sid ); header->packetLength[0] = (unsigned char) (length>>8); header->packetLength[1] = (unsigned char) (length); header->sid = (unsigned char) sid; // SID @@ -398,10 +399,12 @@ void BP_init_header_with_spare(Header_TM header->pa_lfr_bp_blk_nr[1] = blkNr; // BLK_NR LSB } -void BP_send(char *data, rtems_id queue_id, unsigned int nbBytesToSend ) +void BP_send(char *data, rtems_id queue_id, unsigned int nbBytesToSend, unsigned int sid ) { rtems_status_code status; + // SET THE SEQUENCE_CNT PARAMETER + increment_seq_counter_source_id( (unsigned char*) &data[ PACKET_POS_SEQUENCE_CNT ], sid ); // SEND PACKET status = rtems_message_queue_send( queue_id, data, nbBytesToSend); if (status != RTEMS_SUCCESSFUL) diff --git a/src/tc_handler.c b/src/tc_handler.c --- a/src/tc_handler.c +++ b/src/tc_handler.c @@ -793,7 +793,6 @@ void launch_spectral_matrix_simu( void ) timer_start( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR ); LEON_Clear_interrupt( IRQ_SM_SIMULATOR ); LEON_Unmask_interrupt( IRQ_SM_SIMULATOR ); - set_local_nb_interrupt_f0_MAX(); } void set_irq_on_new_ready_matrix( unsigned char value ) diff --git a/src/wf_handler.c b/src/wf_handler.c --- a/src/wf_handler.c +++ b/src/wf_handler.c @@ -1225,32 +1225,49 @@ void set_wfp_delta_f2() //***************** // local parameters -void set_local_nb_interrupt_f0_MAX( void ) + +void increment_seq_counter_source_id( unsigned char *packet_sequence_control, unsigned int sid ) { - /** This function sets the value of the nb_interrupt_f0_MAX local parameter. + /** This function increments the parameter "sequence_cnt" depending on the sid passed in argument. * - * This parameter is used for the SM validation only.\n - * The software waits param_local.local_nb_interrupt_f0_MAX interruptions from the spectral matrices - * module before launching a basic processing. + * @param packet_sequence_control is a pointer toward the parameter sequence_cnt to update. + * @param sid is the source identifier of the packet being updated. + * + * REQ-LFR-SRS-5240 / SSS-CP-FS-590 + * The sequence counters shall wrap around from 2^14 to zero. + * The sequence counter shall start at zero at startup. + * + * REQ-LFR-SRS-5239 / SSS-CP-FS-580 + * All TM_LFR_SCIENCE_ packets are sent to ground, i.e. destination id = 0 * */ - param_local.local_nb_interrupt_f0_MAX = ( (parameter_dump_packet.sy_lfr_n_asm_p[0]) * 256 - + parameter_dump_packet.sy_lfr_n_asm_p[1] ) * 100; -} - -void increment_seq_counter_source_id( unsigned char *packet_sequence_control, unsigned int sid ) -{ unsigned short *sequence_cnt; unsigned short segmentation_grouping_flag; unsigned short new_packet_sequence_control; + rtems_mode initial_mode_set; + rtems_mode current_mode_set; + rtems_status_code status; - if ( (sid ==SID_NORM_SWF_F0) || (sid ==SID_NORM_SWF_F1) || (sid ==SID_NORM_SWF_F2) - || (sid ==SID_NORM_CWF_F3) || (sid==SID_NORM_CWF_LONG_F3) || (sid ==SID_BURST_CWF_F2) ) + //****************************************** + // CHANGE THE MODE OF THE CALLING RTEMS TASK + status = rtems_task_mode( RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &initial_mode_set ); + + if ( (sid == SID_NORM_SWF_F0) || (sid == SID_NORM_SWF_F1) || (sid == SID_NORM_SWF_F2) + || (sid == SID_NORM_CWF_F3) || (sid == SID_NORM_CWF_LONG_F3) + || (sid == SID_BURST_CWF_F2) + || (sid == SID_NORM_ASM_F0) || (sid == SID_NORM_ASM_F1) || (sid == SID_NORM_ASM_F2) + || (sid == SID_NORM_BP1_F0) || (sid == SID_NORM_BP1_F1) || (sid == SID_NORM_BP1_F2) + || (sid == SID_NORM_BP2_F0) || (sid == SID_NORM_BP2_F1) || (sid == SID_NORM_BP2_F2) + || (sid == SID_BURST_BP1_F0) || (sid == SID_BURST_BP2_F0) + || (sid == SID_BURST_BP1_F1) || (sid == SID_BURST_BP2_F1) ) { sequence_cnt = (unsigned short *) &sequenceCounters_SCIENCE_NORMAL_BURST; } - else if ( (sid ==SID_SBM1_CWF_F1) || (sid ==SID_SBM2_CWF_F2) ) + else if ( (sid ==SID_SBM1_CWF_F1) || (sid ==SID_SBM2_CWF_F2) + || (sid == SID_SBM1_BP1_F0) || (sid == SID_SBM1_BP2_F0) + || (sid == SID_SBM2_BP1_F0) || (sid == SID_SBM2_BP2_F0) + || (sid == SID_SBM2_BP1_F1) || (sid == SID_SBM2_BP2_F1) ) { sequence_cnt = (unsigned short *) &sequenceCounters_SCIENCE_SBM1_SBM2; } @@ -1279,4 +1296,8 @@ void increment_seq_counter_source_id( un packet_sequence_control[0] = (unsigned char) (new_packet_sequence_control >> 8); packet_sequence_control[1] = (unsigned char) (new_packet_sequence_control ); } + + //*********************************** + // RESET THE MODE OF THE CALLING TASK + status = rtems_task_mode( initial_mode_set, RTEMS_PREEMPT_MASK, ¤t_mode_set ); }