##// END OF EJS Templates
TC_LFR_LOAD_PAS_FILTER_PAR added to the authorized telecommands...
TC_LFR_LOAD_PAS_FILTER_PAR added to the authorized telecommands sy_lfr_pas_filter parameters checking implemented

File last commit:

r259:af93852650f9 R3a
r282:a83f8aeb97a8 R3_plus
Show More
avf2_prc2.c
281 lines | 10.3 KiB | text/x-c | CLexer
paul
Sources reorganized...
r126 /** Functions related to data processing.
*
* @file
* @author P. LEROY
*
* These function are related to data processing, i.e. spectral matrices averaging and basic parameters computation.
*
*/
#include "avf2_prc2.h"
nb_sm_before_bp_asm_f2 nb_sm_before_f2;
paul
Integration of basic parameters functions in the flight software...
r179 extern ring_node sm_ring_f2[ ];
paul
Sources reorganized...
r126 //***
// F2
ring_node_asm asm_ring_norm_f2 [ NB_RING_NODES_ASM_NORM_F2 ];
paul
Integration of basic parameters functions in the flight software...
r179 ring_node ring_to_send_asm_f2 [ NB_RING_NODES_ASM_F2 ];
int buffer_asm_f2 [ NB_RING_NODES_ASM_F2 * TOTAL_SIZE_SM ];
paul
New version of ASM packets transmission...
r173
paul
sync
r183 float asm_f2_patched_norm [ TOTAL_SIZE_SM ];
float asm_f2_reorganized [ TOTAL_SIZE_SM ];
paul
sync
r181 char asm_f2_char [ TOTAL_SIZE_SM * 2 ];
paul
Sources reorganized...
r126 float compressed_sm_norm_f2[ TOTAL_SIZE_COMPRESSED_ASM_NORM_F2];
paul
Integration of basic parameters functions in the flight software...
r179 float k_coeff_intercalib_f2[ NB_BINS_COMPRESSED_SM_F2 * NB_K_COEFF_PER_BIN ]; // 12 * 32 = 384
paul
Sources reorganized...
r126 //************
// RTEMS TASKS
//***
// F2
rtems_task avf2_task( rtems_task_argument argument )
{
rtems_event_set event_out;
rtems_status_code status;
rtems_id queue_id_prc2;
paul
ASM restart sequence updated at the interrupt service routine level...
r259 asm_msg msgForPRC;
paul
Integration of basic parameters functions in the flight software...
r179 ring_node *nodeForAveraging;
paul
Sources reorganized...
r126 ring_node_asm *current_ring_node_asm_norm_f2;
unsigned int nb_norm_bp1;
unsigned int nb_norm_bp2;
unsigned int nb_norm_asm;
nb_norm_bp1 = 0;
nb_norm_bp2 = 0;
nb_norm_asm = 0;
reset_nb_sm_f2( ); // reset the sm counters that drive the BP and ASM computations / transmissions
ASM_generic_init_ring( asm_ring_norm_f2, NB_RING_NODES_ASM_NORM_F2 );
current_ring_node_asm_norm_f2 = asm_ring_norm_f2;
BOOT_PRINTF("in AVF2 ***\n")
status = get_message_queue_id_prc2( &queue_id_prc2 );
if (status != RTEMS_SUCCESSFUL)
{
PRINTF1("in AVF2 *** ERR get_message_queue_id_prc2 %d\n", status)
}
while(1){
rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0
paul
updates for the compliance with the spectral matrix VHDL design
r150 //****************************************
// initialize the mesage for the MATR task
paul
ASM restart sequence updated at the interrupt service routine level...
r259 msgForPRC.norm = current_ring_node_asm_norm_f2;
msgForPRC.burst_sbm = NULL;
msgForPRC.event = 0x00; // this composite event will be sent to the PRC2 task
paul
updates for the compliance with the spectral matrix VHDL design
r150 //
//****************************************
paul
Integration of basic parameters functions in the flight software...
r179 nodeForAveraging = getRingNodeForAveraging( 2 );
paul
Sources reorganized...
r126 // compute the average and store it in the averaged_sm_f2 buffer
SM_average_f2( current_ring_node_asm_norm_f2->matrix,
paul
Integration of basic parameters functions in the flight software...
r179 nodeForAveraging,
nb_norm_bp1,
paul
ASM restart sequence updated at the interrupt service routine level...
r259 &msgForPRC );
paul
Sources reorganized...
r126
// update nb_average
nb_norm_bp1 = nb_norm_bp1 + NB_SM_BEFORE_AVF2;
nb_norm_bp2 = nb_norm_bp2 + NB_SM_BEFORE_AVF2;
nb_norm_asm = nb_norm_asm + NB_SM_BEFORE_AVF2;
if (nb_norm_bp1 == nb_sm_before_f2.norm_bp1)
{
nb_norm_bp1 = 0;
// set another ring for the ASM storage
current_ring_node_asm_norm_f2 = current_ring_node_asm_norm_f2->next;
if ( (lfrCurrentMode == LFR_MODE_NORMAL) || (lfrCurrentMode == LFR_MODE_SBM1)
|| (lfrCurrentMode == LFR_MODE_SBM2) )
{
paul
ASM restart sequence updated at the interrupt service routine level...
r259 msgForPRC.event = msgForPRC.event | RTEMS_EVENT_NORM_BP1_F2;
paul
Sources reorganized...
r126 }
}
if (nb_norm_bp2 == nb_sm_before_f2.norm_bp2)
{
nb_norm_bp2 = 0;
if ( (lfrCurrentMode == LFR_MODE_NORMAL) || (lfrCurrentMode == LFR_MODE_SBM1)
|| (lfrCurrentMode == LFR_MODE_SBM2) )
{
paul
ASM restart sequence updated at the interrupt service routine level...
r259 msgForPRC.event = msgForPRC.event | RTEMS_EVENT_NORM_BP2_F2;
paul
Sources reorganized...
r126 }
}
if (nb_norm_asm == nb_sm_before_f2.norm_asm)
{
nb_norm_asm = 0;
if ( (lfrCurrentMode == LFR_MODE_NORMAL) || (lfrCurrentMode == LFR_MODE_SBM1)
|| (lfrCurrentMode == LFR_MODE_SBM2) )
{
paul
ASM restart sequence updated at the interrupt service routine level...
r259 msgForPRC.event = msgForPRC.event | RTEMS_EVENT_NORM_ASM_F2;
paul
Sources reorganized...
r126 }
}
//*************************
paul
ASM restart sequence updated at the interrupt service routine level...
r259 // send the message to PRC2
if (msgForPRC.event != 0x00)
paul
Sources reorganized...
r126 {
paul
ASM restart sequence updated at the interrupt service routine level...
r259 status = rtems_message_queue_send( queue_id_prc2, (char *) &msgForPRC, MSG_QUEUE_SIZE_PRC2);
paul
Sources reorganized...
r126 }
if (status != RTEMS_SUCCESSFUL) {
paul
ASM restart sequence updated at the interrupt service routine level...
r259 PRINTF1("in AVF2 *** Error sending message to PRC2, code %d\n", status)
paul
Sources reorganized...
r126 }
}
}
rtems_task prc2_task( rtems_task_argument argument )
{
char incomingData[MSG_QUEUE_SIZE_SEND]; // incoming data buffer
size_t size; // size of the incoming TC packet
asm_msg *incomingMsg;
//
rtems_status_code status;
paul
sync
r181 rtems_id queue_id_send;
paul
Sources reorganized...
r126 rtems_id queue_id_q_p2;
paul
Integration of basic parameters functions in the flight software...
r179 bp_packet packet_norm_bp1;
bp_packet packet_norm_bp2;
paul
New version of ASM packets transmission...
r173 ring_node *current_ring_node_to_send_asm_f2;
paul
Sources reorganized...
r126
unsigned long long int localTime;
paul
New version of ASM packets transmission...
r173 // 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;
paul
Many corrections done after Logiscope analysis
r166
paul
Sources reorganized...
r126 //*************
// NORM headers
paul
Integration of basic parameters functions in the flight software...
r179 BP_init_header( &packet_norm_bp1,
paul
Sources reorganized...
r126 APID_TM_SCIENCE_NORMAL_BURST, SID_NORM_BP1_F2,
PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP1_F2, NB_BINS_COMPRESSED_SM_F2 );
paul
Integration of basic parameters functions in the flight software...
r179 BP_init_header( &packet_norm_bp2,
paul
Sources reorganized...
r126 APID_TM_SCIENCE_NORMAL_BURST, SID_NORM_BP2_F2,
PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP2_F2, NB_BINS_COMPRESSED_SM_F2 );
paul
sync
r181 status = get_message_queue_id_send( &queue_id_send );
paul
Sources reorganized...
r126 if (status != RTEMS_SUCCESSFUL)
{
PRINTF1("in PRC2 *** ERR get_message_queue_id_send %d\n", status)
}
status = get_message_queue_id_prc2( &queue_id_q_p2);
if (status != RTEMS_SUCCESSFUL)
{
PRINTF1("in PRC2 *** ERR get_message_queue_id_prc2 %d\n", status)
}
BOOT_PRINTF("in PRC2 ***\n")
while(1){
status = rtems_message_queue_receive( queue_id_q_p2, incomingData, &size, //************************************
paul
sync
r182 RTEMS_WAIT, RTEMS_NO_TIMEOUT ); // wait for a message coming from AVF2
paul
Sources reorganized...
r126
incomingMsg = (asm_msg*) incomingData;
paul
sync
r183 ASM_patch( incomingMsg->norm->matrix, asm_f2_patched_norm );
paul
Sources reorganized...
r126 localTime = getTimeAsUnsignedLongLongInt( );
//*****
//*****
// NORM
//*****
//*****
paul
sync
r182 // 1) compress the matrix for Basic Parameters calculation
paul
3.0.0.12...
r236 ASM_compress_reorganize_and_divide_mask( asm_f2_patched_norm, compressed_sm_norm_f2,
paul
sync
r182 nb_sm_before_f2.norm_bp1,
NB_BINS_COMPRESSED_SM_F2, NB_BINS_TO_AVERAGE_ASM_F2,
paul
3.0.0.12...
r236 ASM_F2_INDICE_START, CHANNELF2 );
paul
sync
r182 // BP1_F2
paul
Sources reorganized...
r126 if (incomingMsg->event & RTEMS_EVENT_NORM_BP1_F2)
{
paul
sync
r182 // 1) compute the BP1 set
paul
sync
r183 BP1_set( compressed_sm_norm_f2, k_coeff_intercalib_f2, NB_BINS_COMPRESSED_SM_F2, packet_norm_bp1.data );
paul
sync
r182 // 2) send the BP1 set
paul
Integration of basic parameters functions in the flight software...
r179 set_time( packet_norm_bp1.time, (unsigned char *) &incomingMsg->coarseTimeNORM );
set_time( packet_norm_bp1.acquisitionTime, (unsigned char *) &incomingMsg->coarseTimeNORM );
paul
#456 #532 #532 #533 corrected, TC_LFR_UPDATE_INFO fields copied in...
r230 packet_norm_bp1.biaStatusInfo = pa_bia_status_info;
paul
R3 updates. TC handlers added for the new telecommands:...
r192 packet_norm_bp1.sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters;
paul
sync
r181 BP_send( (char *) &packet_norm_bp1, queue_id_send,
paul
sequence_cnt field set for BP and ASM packets
r133 PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP1_F2 + PACKET_LENGTH_DELTA,
SID_NORM_BP1_F2 );
paul
sync
r182 }
// BP2_F2
if (incomingMsg->event & RTEMS_EVENT_NORM_BP2_F2)
{
// 1) compute the BP2 set
BP2_set( compressed_sm_norm_f2, NB_BINS_COMPRESSED_SM_F2, packet_norm_bp2.data );
// 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 );
paul
#456 #532 #532 #533 corrected, TC_LFR_UPDATE_INFO fields copied in...
r230 packet_norm_bp2.biaStatusInfo = pa_bia_status_info;
paul
R3 updates. TC handlers added for the new telecommands:...
r192 packet_norm_bp2.sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters;
paul
sync
r182 BP_send( (char *) &packet_norm_bp2, queue_id_send,
PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP2_F2 + PACKET_LENGTH_DELTA,
SID_NORM_BP2_F2 );
paul
Sources reorganized...
r126 }
if (incomingMsg->event & RTEMS_EVENT_NORM_ASM_F2)
{
// 1) reorganize the ASM and divide
paul
sync
r183 ASM_reorganize_and_divide( asm_f2_patched_norm,
paul
TM_LFR_SCIENCE_NORMA_ASM_ packets modified, 32 bits values instead of 16 bits...
r196 (float*) current_ring_node_to_send_asm_f2->buffer_address,
paul
Sources reorganized...
r126 nb_sm_before_f2.norm_bp1 );
paul
Integration of basic parameters functions in the flight software...
r179 current_ring_node_to_send_asm_f2->coarseTime = incomingMsg->coarseTimeNORM;
current_ring_node_to_send_asm_f2->fineTime = incomingMsg->fineTimeNORM;
paul
New version of ASM packets transmission...
r173 current_ring_node_to_send_asm_f2->sid = SID_NORM_ASM_F2;
paul
Sources reorganized...
r126 // 3) send the spectral matrix packets
paul
sync
r181 status = rtems_message_queue_send( queue_id_send, &current_ring_node_to_send_asm_f2, sizeof( ring_node* ) );
paul
New version of ASM packets transmission...
r173 // change asm ring node
current_ring_node_to_send_asm_f2 = current_ring_node_to_send_asm_f2->next;
paul
Sources reorganized...
r126 }
paul
fifo occupation reported in the HK packet
r197 update_queue_max_count( queue_id_q_p2, &hk_lfr_q_p2_fifo_size_max );
paul
Sources reorganized...
r126 }
}
//**********
// FUNCTIONS
void reset_nb_sm_f2( void )
{
nb_sm_before_f2.norm_bp1 = parameter_dump_packet.sy_lfr_n_bp_p0;
nb_sm_before_f2.norm_bp2 = parameter_dump_packet.sy_lfr_n_bp_p1;
nb_sm_before_f2.norm_asm = parameter_dump_packet.sy_lfr_n_asm_p[0] * 256 + parameter_dump_packet.sy_lfr_n_asm_p[1];
}
void SM_average_f2( float *averaged_spec_mat_f2,
paul
Integration of basic parameters functions in the flight software...
r179 ring_node *ring_node,
unsigned int nbAverageNormF2,
asm_msg *msgForMATR )
paul
Sources reorganized...
r126 {
float sum;
unsigned int i;
for(i=0; i<TOTAL_SIZE_SM; i++)
{
sum = ( (int *) (ring_node->buffer_address) ) [ i ];
if ( (nbAverageNormF2 == 0) )
{
averaged_spec_mat_f2[ i ] = sum;
paul
Integration of basic parameters functions in the flight software...
r179 msgForMATR->coarseTimeNORM = ring_node->coarseTime;
msgForMATR->fineTimeNORM = ring_node->fineTime;
paul
Sources reorganized...
r126 }
else
{
averaged_spec_mat_f2[ i ] = ( averaged_spec_mat_f2[ i ] + sum );
}
}
}
paul
Integration of basic parameters functions in the flight software...
r179
paul
rev 3.0.0.6...
r214 void init_k_coefficients_prc2( void )
paul
Integration of basic parameters functions in the flight software...
r179 {
init_k_coefficients( k_coeff_intercalib_f2, NB_BINS_COMPRESSED_SM_F2);
}