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: Thu Nov 13 07:59:00 2014 +# Generated by qmake (2.01a) (Qt 4.8.6) on: Fri Nov 14 07:56:09 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 @@ - + EnvironmentId 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 @@ -16,9 +16,11 @@ #define NB_RING_NODES_SM_F1 12 // AT LEAST 8 due to the way the averaging is done #define NB_RING_NODES_ASM_BURST_SBM_F1 5 // AT LEAST 3 #define NB_RING_NODES_ASM_NORM_F1 5 // AT LEAST 3 +#define NB_RING_NODES_ASM_F1 3 // AT LEAST 3 #define NB_RING_NODES_SM_F2 3 // AT LEAST 3 #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_RING_NODES_ASM_F2 3 // AT LEAST 3 // #define NB_BINS_PER_ASM_F0 88 #define NB_BINS_PER_PKT_ASM_F0 44 diff --git a/header/processing/avf0_prc0.h b/header/processing/avf0_prc0.h --- a/header/processing/avf0_prc0.h +++ b/header/processing/avf0_prc0.h @@ -30,7 +30,7 @@ void reset_nb_sm_f0( unsigned char lfrMo //******* // EXTERN -extern ring_node_sm *ring_node_for_averaging_sm_f0; +extern ring_node *ring_node_for_averaging_sm_f0; extern rtems_status_code get_message_queue_id_prc0( rtems_id *queue_id ); #endif // AVF0_PRC0_H_INCLUDED diff --git a/header/processing/avf1_prc1.h b/header/processing/avf1_prc1.h --- a/header/processing/avf1_prc1.h +++ b/header/processing/avf1_prc1.h @@ -27,7 +27,7 @@ void reset_nb_sm_f1( unsigned char lfrMo //******* // EXTERN -extern struct ring_node_sm *ring_node_for_averaging_sm_f1; +extern struct ring_node *ring_node_for_averaging_sm_f1; extern rtems_status_code get_message_queue_id_prc1( rtems_id *queue_id ); #endif // AVF1_PRC1_H diff --git a/header/processing/avf2_prc2.h b/header/processing/avf2_prc2.h --- a/header/processing/avf2_prc2.h +++ b/header/processing/avf2_prc2.h @@ -18,11 +18,11 @@ rtems_task prc2_task( rtems_task_argumen // FUNCTIONS void reset_nb_sm_f2( void ); -void SM_average_f2(float *averaged_spec_mat_f2, ring_node_sm *ring_node, unsigned int nbAverageNormF2 ); +void SM_average_f2(float *averaged_spec_mat_f2, ring_node *ring_node, unsigned int nbAverageNormF2 ); //******* // EXTERN -extern struct ring_node_sm *ring_node_for_averaging_sm_f2; +extern struct ring_node *ring_node_for_averaging_sm_f2; extern rtems_status_code get_message_queue_id_prc2( rtems_id *queue_id ); #endif // AVF2_PRC2_H 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 @@ -11,16 +11,6 @@ #include "fsw_params.h" #include "fsw_spacewire.h" -typedef struct ring_node_sm -{ -struct ring_node_sm *previous; -struct ring_node_sm *next; -int buffer_address; -unsigned int status; -unsigned int coarseTime; -unsigned int fineTime; -} ring_node_sm; - typedef struct ring_node_asm { struct ring_node_asm *next; @@ -75,9 +65,6 @@ void SM_init_rings( void ); void SM_reset_current_ring_nodes( void ); // ASM void ASM_generic_init_ring(ring_node_asm *ring, unsigned char nbNodes ); -void ASM_init_header( Header_TM_LFR_SCIENCE_ASM_t *header); -void ASM_send(Header_TM_LFR_SCIENCE_ASM_t *header, char *spectral_matrix, - unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send, rtems_id queue_id); //***************** // Basic Parameters @@ -100,7 +87,7 @@ void reset_spectral_matrix_regs( void ); void set_time(unsigned char *time, unsigned char *timeInBuffer ); unsigned long long int get_acquisition_time( unsigned char *timePtr ); void close_matrix_actions( unsigned int *nb_sm, unsigned int nb_sm_before_avf, rtems_id avf_task_id, - ring_node_sm *node_for_averaging, ring_node_sm *ringNode, unsigned long long int time ); + ring_node *node_for_averaging, ring_node *ringNode, unsigned long long int time ); unsigned char getSID( rtems_event_set event ); extern rtems_status_code get_message_queue_id_prc1( rtems_id *queue_id ); @@ -109,10 +96,10 @@ extern rtems_status_code get_message_que //*************************************** // DEFINITIONS OF STATIC INLINE FUNCTIONS static inline void SM_average(float *averaged_spec_mat_NORM, float *averaged_spec_mat_SBM, - ring_node_sm *ring_node_tab[], + ring_node *ring_node_tab[], unsigned int nbAverageNORM, unsigned int nbAverageSBM ); static inline void SM_average_debug( float *averaged_spec_mat_NORM, float *averaged_spec_mat_SBM, - ring_node_sm *ring_node_tab[], + ring_node *ring_node_tab[], unsigned int nbAverageNORM, unsigned int nbAverageSBM ); static inline void ASM_reorganize_and_divide(float *averaged_spec_mat, float *averaged_spec_mat_reorganized, float divider ); @@ -121,8 +108,8 @@ static inline void ASM_compress_reorgani unsigned char nbBinsCompressedMatrix, unsigned char nbBinsToAverage , unsigned char ASMIndexStart); static inline void ASM_convert(volatile float *input_matrix, char *output_matrix); -void SM_average_debug( float *averaged_spec_mat_NORM, float *averaged_spec_mat_SBM, - ring_node_sm *ring_node_tab[], +void SM_average( float *averaged_spec_mat_NORM, float *averaged_spec_mat_SBM, + ring_node *ring_node_tab[], unsigned int nbAverageNORM, unsigned int nbAverageSBM ) { float sum; @@ -161,8 +148,8 @@ void SM_average_debug( float *averaged_s } } -void SM_average( float *averaged_spec_mat_NORM, float *averaged_spec_mat_SBM, - ring_node_sm *ring_node_tab[], +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 ) { float sum; 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 @@ -18,7 +18,7 @@ ring_node_asm asm_ring_norm_f0 [ NB ring_node_asm asm_ring_burst_sbm_f0 [ NB_RING_NODES_ASM_BURST_SBM_F0 ]; ring_node ring_to_send_asm_f0 [ NB_RING_NODES_ASM_F0 ]; -char buffer_asm_f0 [ NB_RING_NODES_ASM_F0 * TOTAL_SIZE_SM ]; +int buffer_asm_f0 [ NB_RING_NODES_ASM_F0 * TOTAL_SIZE_SM ]; float asm_f0_reorganized [ TOTAL_SIZE_SM ]; char asm_f0_char [ TIME_OFFSET_IN_BYTES + (TOTAL_SIZE_SM * 2) ]; @@ -38,7 +38,7 @@ rtems_task avf0_task( rtems_task_argumen rtems_status_code status; rtems_id queue_id_prc0; asm_msg msgForMATR; - ring_node_sm *ring_node_tab[8]; + ring_node *ring_node_tab[8]; ring_node_asm *current_ring_node_asm_burst_sbm_f0; ring_node_asm *current_ring_node_asm_norm_f0; @@ -75,7 +75,7 @@ rtems_task avf0_task( rtems_task_argumen // initialize the mesage for the MATR task msgForMATR.norm = current_ring_node_asm_norm_f0; msgForMATR.burst_sbm = current_ring_node_asm_burst_sbm_f0; - msgForMATR.event = 0x00; // this composite event will be sent to the MATR task + msgForMATR.event = 0x00; // this composite event will be sent to the PRC0 task msgForMATR.coarseTime = ring_node_for_averaging_sm_f0->coarseTime; msgForMATR.fineTime = ring_node_for_averaging_sm_f0->fineTime; // @@ -182,21 +182,17 @@ rtems_task prc0_task( rtems_task_argumen asm_msg *incomingMsg; // unsigned char sid; - spw_ioctl_pkt_send spw_ioctl_send_ASM; rtems_status_code status; rtems_id queue_id; rtems_id queue_id_q_p0; - Header_TM_LFR_SCIENCE_ASM_t headerASM; - bp_packet_with_spare packet_norm_bp1_f0; - bp_packet packet_norm_bp2_f0; - bp_packet packet_sbm_bp1_f0; - bp_packet packet_sbm_bp2_f0; - ring_node *current_ring_node_to_send_asm_f0; + bp_packet_with_spare packet_norm_bp1_f0; + bp_packet packet_norm_bp2_f0; + bp_packet packet_sbm_bp1_f0; + bp_packet packet_sbm_bp2_f0; + ring_node *current_ring_node_to_send_asm_f0; unsigned long long int localTime; - ASM_init_header( &headerASM ); - // init the ring of the averaged spectral matrices which will be transmitted to the DPU init_ring( ring_to_send_asm_f0, NB_RING_NODES_ASM_F0, (volatile int*) buffer_asm_f0, TOTAL_SIZE_SM ); current_ring_node_to_send_asm_f0 = ring_to_send_asm_f0; @@ -335,29 +331,19 @@ rtems_task prc0_task( rtems_task_argumen if (incomingMsg->event & RTEMS_EVENT_NORM_ASM_F0) { -// // 1) reorganize the ASM and divide -// ASM_reorganize_and_divide( incomingMsg->norm->matrix, -// asm_f0_reorganized, -// nb_sm_before_f0.norm_bp1 ); -// // 2) convert the float array in a char array -// ASM_convert( asm_f0_reorganized, (char*) current_ring_node_to_send_asm_f0->buffer_address ); -// current_ring_node_to_send_asm_f0->coarseTime = incomingMsg->coarseTime; -// current_ring_node_to_send_asm_f0->fineTime = incomingMsg->fineTime; -// current_ring_node_to_send_asm_f0->sid = SID_NORM_ASM_F0; -// // 3) send the spectral matrix packets -// status = rtems_message_queue_send( queue_id, ¤t_ring_node_to_send_asm_f0, sizeof( ring_node* ) ); -// // change asm ring node -// current_ring_node_to_send_asm_f0 = current_ring_node_to_send_asm_f0->next; // 1) reorganize the ASM and divide ASM_reorganize_and_divide( incomingMsg->norm->matrix, - asm_f0_reorganized, - nb_sm_before_f0.norm_bp1 ); + asm_f0_reorganized, + nb_sm_before_f0.norm_bp1 ); // 2) convert the float array in a char array - ASM_convert( asm_f0_reorganized, asm_f0_char); + ASM_convert( asm_f0_reorganized, (char*) current_ring_node_to_send_asm_f0->buffer_address ); + current_ring_node_to_send_asm_f0->coarseTime = incomingMsg->coarseTime; + current_ring_node_to_send_asm_f0->fineTime = incomingMsg->fineTime; + current_ring_node_to_send_asm_f0->sid = SID_NORM_ASM_F0; // 3) send the spectral matrix packets - set_time( headerASM.time , (unsigned char *) &incomingMsg->coarseTime ); - set_time( headerASM.acquisitionTime, (unsigned char *) &incomingMsg->coarseTime ); - ASM_send( &headerASM, asm_f0_char, SID_NORM_ASM_F0, &spw_ioctl_send_ASM, queue_id); + status = rtems_message_queue_send( queue_id, ¤t_ring_node_to_send_asm_f0, sizeof( ring_node* ) ); + // change asm ring node + current_ring_node_to_send_asm_f0 = current_ring_node_to_send_asm_f0->next; } } 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 @@ -13,8 +13,11 @@ nb_sm_before_bp_asm_f1 nb_sm_before_f1; //*** // F1 -ring_node_asm asm_ring_norm_f1 [ NB_RING_NODES_ASM_NORM_F1 ]; -ring_node_asm asm_ring_burst_sbm_f1[ NB_RING_NODES_ASM_BURST_SBM_F1 ]; +ring_node_asm asm_ring_norm_f1 [ NB_RING_NODES_ASM_NORM_F1 ]; +ring_node_asm asm_ring_burst_sbm_f1 [ NB_RING_NODES_ASM_BURST_SBM_F1 ]; + +ring_node ring_to_send_asm_f1 [ NB_RING_NODES_ASM_F1 ]; +int buffer_asm_f1 [ NB_RING_NODES_ASM_F1 * TOTAL_SIZE_SM ]; float asm_f1_reorganized [ TOTAL_SIZE_SM ]; char asm_f1_char [ TIME_OFFSET_IN_BYTES + (TOTAL_SIZE_SM * 2) ]; @@ -32,7 +35,7 @@ rtems_task avf1_task( rtems_task_argumen rtems_status_code status; rtems_id queue_id_prc1; asm_msg msgForMATR; - ring_node_sm *ring_node_tab[8]; + ring_node *ring_node_tab[8]; ring_node_asm *current_ring_node_asm_burst_sbm_f1; ring_node_asm *current_ring_node_asm_norm_f1; @@ -67,9 +70,9 @@ rtems_task avf1_task( rtems_task_argumen //**************************************** // initialize the mesage for the MATR task - msgForMATR.event = 0x00; // this composite event will be sent to the PRC1 task + msgForMATR.norm = current_ring_node_asm_norm_f1; msgForMATR.burst_sbm = current_ring_node_asm_burst_sbm_f1; - msgForMATR.norm = current_ring_node_asm_norm_f1; + msgForMATR.event = 0x00; // this composite event will be sent to the PRC1 task msgForMATR.coarseTime = ring_node_for_averaging_sm_f1->coarseTime; msgForMATR.fineTime = ring_node_for_averaging_sm_f1->fineTime; // @@ -175,19 +178,20 @@ rtems_task prc1_task( rtems_task_argumen asm_msg *incomingMsg; // unsigned char sid; - spw_ioctl_pkt_send spw_ioctl_send_ASM; rtems_status_code status; rtems_id queue_id_send; rtems_id queue_id_q_p1; - Header_TM_LFR_SCIENCE_ASM_t headerASM; - bp_packet_with_spare packet_norm_bp1; - bp_packet packet_norm_bp2; - bp_packet packet_sbm_bp1; - bp_packet packet_sbm_bp2; + bp_packet_with_spare packet_norm_bp1; + bp_packet packet_norm_bp2; + bp_packet packet_sbm_bp1; + bp_packet packet_sbm_bp2; + ring_node *current_ring_node_to_send_asm_f1; unsigned long long int localTime; - ASM_init_header( &headerASM ); + // init the ring of the averaged spectral matrices which will be transmitted to the DPU + init_ring( ring_to_send_asm_f1, NB_RING_NODES_ASM_F1, (volatile int*) buffer_asm_f1, TOTAL_SIZE_SM ); + current_ring_node_to_send_asm_f1 = ring_to_send_asm_f1; //************* // NORM headers @@ -318,11 +322,14 @@ rtems_task prc1_task( rtems_task_argumen asm_f1_reorganized, nb_sm_before_f1.norm_bp1 ); // 2) convert the float array in a char array - ASM_convert( asm_f1_reorganized, asm_f1_char); + ASM_convert( asm_f1_reorganized, (char*) current_ring_node_to_send_asm_f1->buffer_address ); + current_ring_node_to_send_asm_f1->coarseTime = incomingMsg->coarseTime; + current_ring_node_to_send_asm_f1->fineTime = incomingMsg->fineTime; + current_ring_node_to_send_asm_f1->sid = SID_NORM_ASM_F1; // 3) send the spectral matrix packets - set_time( headerASM.time , (unsigned char *) &incomingMsg->coarseTime ); - set_time( headerASM.acquisitionTime, (unsigned char *) &incomingMsg->coarseTime ); - ASM_send( &headerASM, asm_f1_char, SID_NORM_ASM_F1, &spw_ioctl_send_ASM, queue_id_send); + status = rtems_message_queue_send( queue_id_send, ¤t_ring_node_to_send_asm_f1, sizeof( ring_node* ) ); + // change asm ring node + current_ring_node_to_send_asm_f1 = current_ring_node_to_send_asm_f1->next; } } 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 @@ -16,6 +16,9 @@ nb_sm_before_bp_asm_f2 nb_sm_before_f2; ring_node_asm asm_ring_norm_f2 [ NB_RING_NODES_ASM_NORM_F2 ]; ring_node_asm asm_ring_burst_sbm_f2[ NB_RING_NODES_ASM_BURST_SBM_F2 ]; +ring_node ring_to_send_asm_f2 [ NB_RING_NODES_ASM_F2 ]; +int buffer_asm_f2 [ NB_RING_NODES_ASM_F2 * TOTAL_SIZE_SM ]; + float asm_f2_reorganized [ TOTAL_SIZE_SM ]; char asm_f2_char [ TIME_OFFSET_IN_BYTES + (TOTAL_SIZE_SM * 2) ]; float compressed_sm_norm_f2[ TOTAL_SIZE_COMPRESSED_ASM_NORM_F2]; @@ -59,9 +62,9 @@ rtems_task avf2_task( rtems_task_argumen //**************************************** // initialize the mesage for the MATR task - msgForMATR.event = 0x00; // this composite event will be sent to the MATR task + msgForMATR.norm = current_ring_node_asm_norm_f2; msgForMATR.burst_sbm = NULL; - msgForMATR.norm = current_ring_node_asm_norm_f2; + msgForMATR.event = 0x00; // this composite event will be sent to the PRC2 task msgForMATR.coarseTime = ring_node_for_averaging_sm_f2->coarseTime; msgForMATR.fineTime = ring_node_for_averaging_sm_f2->fineTime; // @@ -129,19 +132,20 @@ rtems_task prc2_task( rtems_task_argumen size_t size; // size of the incoming TC packet asm_msg *incomingMsg; // - spw_ioctl_pkt_send spw_ioctl_send_ASM; rtems_status_code status; rtems_id queue_id; rtems_id queue_id_q_p2; - Header_TM_LFR_SCIENCE_ASM_t headerASM; - bp_packet packet_norm_bp1_f2; - bp_packet packet_norm_bp2_f2; + bp_packet packet_norm_bp1_f2; + bp_packet packet_norm_bp2_f2; + ring_node *current_ring_node_to_send_asm_f2; unsigned long long int localTime; - incomingMsg = NULL; + // init the ring of the averaged spectral matrices which will be transmitted to the DPU + init_ring( ring_to_send_asm_f2, NB_RING_NODES_ASM_F2, (volatile int*) buffer_asm_f2, TOTAL_SIZE_SM ); + current_ring_node_to_send_asm_f2 = ring_to_send_asm_f2; - ASM_init_header( &headerASM ); + incomingMsg = NULL; //************* // NORM headers @@ -213,11 +217,14 @@ rtems_task prc2_task( rtems_task_argumen asm_f2_reorganized, nb_sm_before_f2.norm_bp1 ); // 2) convert the float array in a char array - ASM_convert( asm_f2_reorganized, asm_f2_char); + ASM_convert( asm_f2_reorganized, (char*) current_ring_node_to_send_asm_f2->buffer_address ); + current_ring_node_to_send_asm_f2->coarseTime = incomingMsg->coarseTime; + current_ring_node_to_send_asm_f2->fineTime = incomingMsg->fineTime; + current_ring_node_to_send_asm_f2->sid = SID_NORM_ASM_F2; // 3) send the spectral matrix packets - set_time( headerASM.time , (unsigned char *) &incomingMsg->coarseTime ); - set_time( headerASM.acquisitionTime, (unsigned char *) &incomingMsg->coarseTime ); - ASM_send( &headerASM, asm_f2_char, SID_NORM_ASM_F2, &spw_ioctl_send_ASM, queue_id); + status = rtems_message_queue_send( queue_id, ¤t_ring_node_to_send_asm_f2, sizeof( ring_node* ) ); + // change asm ring node + current_ring_node_to_send_asm_f2 = current_ring_node_to_send_asm_f2->next; } } @@ -234,7 +241,7 @@ void reset_nb_sm_f2( void ) } void SM_average_f2( float *averaged_spec_mat_f2, - ring_node_sm *ring_node, + ring_node *ring_node, unsigned int nbAverageNormF2 ) { float sum; 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 @@ -17,15 +17,15 @@ unsigned int nb_sm_f0_aux_f2; //************************ // spectral matrices rings -ring_node_sm sm_ring_f0[ NB_RING_NODES_SM_F0 ]; -ring_node_sm sm_ring_f1[ NB_RING_NODES_SM_F1 ]; -ring_node_sm sm_ring_f2[ NB_RING_NODES_SM_F2 ]; -ring_node_sm *current_ring_node_sm_f0; -ring_node_sm *current_ring_node_sm_f1; -ring_node_sm *current_ring_node_sm_f2; -ring_node_sm *ring_node_for_averaging_sm_f0; -ring_node_sm *ring_node_for_averaging_sm_f1; -ring_node_sm *ring_node_for_averaging_sm_f2; +ring_node sm_ring_f0[ NB_RING_NODES_SM_F0 ]; +ring_node sm_ring_f1[ NB_RING_NODES_SM_F1 ]; +ring_node sm_ring_f2[ NB_RING_NODES_SM_F2 ]; +ring_node *current_ring_node_sm_f0; +ring_node *current_ring_node_sm_f1; +ring_node *current_ring_node_sm_f2; +ring_node *ring_node_for_averaging_sm_f0; +ring_node *ring_node_for_averaging_sm_f1; +ring_node *ring_node_for_averaging_sm_f2; //*********************************************************** // Interrupt Service Routine for spectral matrices processing @@ -261,79 +261,20 @@ void reset_nb_sm( void ) nb_sm_f1 = 0; } -//void SM_init_rings_alt( void ) -//{ -// init_ring( sm_ring_f0, NB_RING_NODES_SM_F0, sm_f0, TOTAL_SIZE_SM ); -// init_ring( sm_ring_f1, NB_RING_NODES_SM_F1, sm_f0, TOTAL_SIZE_SM ); -// init_ring( sm_ring_f2, NB_RING_NODES_SM_F2, sm_f0, TOTAL_SIZE_SM ); - -// DEBUG_PRINTF1("sm_ring_f0 @%x\n", (unsigned int) sm_ring_f0) -// DEBUG_PRINTF1("sm_ring_f1 @%x\n", (unsigned int) sm_ring_f1) -// DEBUG_PRINTF1("sm_ring_f2 @%x\n", (unsigned int) sm_ring_f2) -// DEBUG_PRINTF1("sm_f0 @%x\n", (unsigned int) sm_f0) -// DEBUG_PRINTF1("sm_f1 @%x\n", (unsigned int) sm_f1) -// DEBUG_PRINTF1("sm_f2 @%x\n", (unsigned int) sm_f2) -//} - void SM_init_rings( void ) { - unsigned char i; - // F0 RING - sm_ring_f0[0].next = (ring_node_sm*) &sm_ring_f0[1]; - sm_ring_f0[0].previous = (ring_node_sm*) &sm_ring_f0[NB_RING_NODES_SM_F0-1]; - sm_ring_f0[0].buffer_address = - (int) &sm_f0[ 0 ]; - sm_ring_f0[NB_RING_NODES_SM_F0-1].next = (ring_node_sm*) &sm_ring_f0[0]; - sm_ring_f0[NB_RING_NODES_SM_F0-1].previous = (ring_node_sm*) &sm_ring_f0[NB_RING_NODES_SM_F0-2]; - sm_ring_f0[NB_RING_NODES_SM_F0-1].buffer_address = - (int) &sm_f0[ (NB_RING_NODES_SM_F0-1) * TOTAL_SIZE_SM ]; - for(i=1; if0_0_address = sm_ring_f0[0].buffer_address; - DEBUG_PRINTF1("spectral_matrix_regs->matrixF0_Address0 @%x\n", spectral_matrix_regs->f0_0_address) + init_ring( sm_ring_f0, NB_RING_NODES_SM_F0, sm_f0, TOTAL_SIZE_SM ); + init_ring( sm_ring_f1, NB_RING_NODES_SM_F1, sm_f1, TOTAL_SIZE_SM ); + init_ring( sm_ring_f2, NB_RING_NODES_SM_F2, sm_f2, TOTAL_SIZE_SM ); + + DEBUG_PRINTF1("sm_ring_f0 @%x\n", (unsigned int) sm_ring_f0) + DEBUG_PRINTF1("sm_ring_f1 @%x\n", (unsigned int) sm_ring_f1) + DEBUG_PRINTF1("sm_ring_f2 @%x\n", (unsigned int) sm_ring_f2) + DEBUG_PRINTF1("sm_f0 @%x\n", (unsigned int) sm_f0) + DEBUG_PRINTF1("sm_f1 @%x\n", (unsigned int) sm_f1) + DEBUG_PRINTF1("sm_f2 @%x\n", (unsigned int) sm_f2) } - void ASM_generic_init_ring( ring_node_asm *ring, unsigned char nbNodes ) { unsigned char i; @@ -358,116 +299,6 @@ void SM_reset_current_ring_nodes( void ) ring_node_for_averaging_sm_f2 = sm_ring_f2; } -void ASM_init_header( Header_TM_LFR_SCIENCE_ASM_t *header) -{ - header->targetLogicalAddress = CCSDS_DESTINATION_ID; - header->protocolIdentifier = CCSDS_PROTOCOLE_ID; - header->reserved = 0x00; - header->userApplication = CCSDS_USER_APP; - header->packetID[0] = (unsigned char) (APID_TM_SCIENCE_NORMAL_BURST >> 8); - header->packetID[1] = (unsigned char) (APID_TM_SCIENCE_NORMAL_BURST); - header->packetSequenceControl[0] = 0xc0; - header->packetSequenceControl[1] = 0x00; - header->packetLength[0] = 0x00; - header->packetLength[1] = 0x00; - // DATA FIELD HEADER - header->spare1_pusVersion_spare2 = 0x10; - header->serviceType = TM_TYPE_LFR_SCIENCE; // service type - header->serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype - header->destinationID = TM_DESTINATION_ID_GROUND; - header->time[0] = 0x00; - header->time[0] = 0x00; - header->time[0] = 0x00; - header->time[0] = 0x00; - header->time[0] = 0x00; - header->time[0] = 0x00; - // AUXILIARY DATA HEADER - header->sid = 0x00; - header->biaStatusInfo = 0x00; - header->pa_lfr_pkt_cnt_asm = 0x00; - header->pa_lfr_pkt_nr_asm = 0x00; - header->pa_lfr_asm_blk_nr[0] = 0x00; // BLK_NR MSB - header->pa_lfr_asm_blk_nr[1] = 0x00; // BLK_NR LSB -} - -void ASM_send(Header_TM_LFR_SCIENCE_ASM_t *header, char *spectral_matrix, - unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send, rtems_id queue_id) -{ - unsigned int i; - unsigned int length = 0; - rtems_status_code status; - - for (i=0; i<2; i++) - { - // (1) BUILD THE DATA - switch(sid) - { - case SID_NORM_ASM_F0: - spw_ioctl_send->dlen = TOTAL_SIZE_ASM_F0_IN_BYTES / 2; // 2 packets will be sent - spw_ioctl_send->data = &spectral_matrix[ - ( (ASM_F0_INDICE_START + (i*NB_BINS_PER_PKT_ASM_F0) ) * NB_VALUES_PER_SM ) * 2 - ]; - length = PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F0; - header->pa_lfr_asm_blk_nr[0] = (unsigned char) ( (NB_BINS_PER_PKT_ASM_F0) >> 8 ); // BLK_NR MSB - header->pa_lfr_asm_blk_nr[1] = (unsigned char) (NB_BINS_PER_PKT_ASM_F0); // BLK_NR LSB - break; - case SID_NORM_ASM_F1: - spw_ioctl_send->dlen = TOTAL_SIZE_ASM_F1_IN_BYTES / 2; // 2 packets will be sent - spw_ioctl_send->data = &spectral_matrix[ - ( (ASM_F1_INDICE_START + (i*NB_BINS_PER_PKT_ASM_F1) ) * NB_VALUES_PER_SM ) * 2 - ]; - length = PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F1; - header->pa_lfr_asm_blk_nr[0] = (unsigned char) ( (NB_BINS_PER_PKT_ASM_F1) >> 8 ); // BLK_NR MSB - header->pa_lfr_asm_blk_nr[1] = (unsigned char) (NB_BINS_PER_PKT_ASM_F1); // BLK_NR LSB - break; - case SID_NORM_ASM_F2: - spw_ioctl_send->dlen = TOTAL_SIZE_ASM_F2_IN_BYTES / 2; // 2 packets will be sent - spw_ioctl_send->data = &spectral_matrix[ - ( (ASM_F2_INDICE_START + (i*NB_BINS_PER_PKT_ASM_F2) ) * NB_VALUES_PER_SM ) * 2 - ]; - length = PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F2; - header->pa_lfr_asm_blk_nr[0] = (unsigned char) ( (NB_BINS_PER_PKT_ASM_F2) >> 8 ); // BLK_NR MSB - header->pa_lfr_asm_blk_nr[1] = (unsigned char) (NB_BINS_PER_PKT_ASM_F2); // BLK_NR LSB - break; - default: - PRINTF1("ERR *** in ASM_send *** unexpected sid %d\n", sid) - break; - } - spw_ioctl_send->hlen = HEADER_LENGTH_TM_LFR_SCIENCE_ASM + CCSDS_PROTOCOLE_EXTRA_BYTES; - spw_ioctl_send->hdr = (char *) header; - 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 - header->pa_lfr_pkt_cnt_asm = 2; - header->pa_lfr_pkt_nr_asm = (unsigned char) (i+1); - - // (3) SET PACKET TIME - header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24); - header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16); - header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8); - header->time[3] = (unsigned char) (time_management_regs->coarse_time); - header->time[4] = (unsigned char) (time_management_regs->fine_time>>8); - header->time[5] = (unsigned char) (time_management_regs->fine_time); - // - header->acquisitionTime[0] = header->time[0]; - header->acquisitionTime[1] = header->time[1]; - header->acquisitionTime[2] = header->time[2]; - header->acquisitionTime[3] = header->time[3]; - header->acquisitionTime[4] = header->time[4]; - header->acquisitionTime[5] = header->time[5]; - - // (4) SEND PACKET - status = rtems_message_queue_send( queue_id, spw_ioctl_send, ACTION_MSG_SPW_IOCTL_SEND_SIZE); - if (status != RTEMS_SUCCESSFUL) { - printf("in ASM_send *** ERR %d\n", (int) status); - } - } -} - //***************** // Basic Parameters @@ -619,7 +450,7 @@ unsigned long long int get_acquisition_t } void close_matrix_actions(unsigned int *nb_sm, unsigned int nb_sm_before_avf, rtems_id avf_task_id, - ring_node_sm *node_for_averaging, ring_node_sm *ringNode, + ring_node *node_for_averaging, ring_node *ringNode, unsigned long long int time ) { unsigned char *timePtr;