##// END OF EJS Templates
Two bugs corrected:...
Two bugs corrected: shift of 1 in avf0_prc0.C and avf1_prc1.c constants updated in lfr_common_headers for proper configuration

File last commit:

r321:0d3dfc6f1f08 R3_plus
r323:4edb4fc1ba23 R3_plus
Show More
avf2_prc2.c
332 lines | 11.8 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"
paul
Bug #796 Don_Initialisation_P1
r321 nb_sm_before_bp_asm_f2 nb_sm_before_f2 = {0};
paul
Integration of basic parameters functions in the flight software...
r179
paul
Sources reorganized...
r126 //***
// F2
paul
Bug #796 Don_Initialisation_P1
r321 ring_node_asm asm_ring_norm_f2 [ NB_RING_NODES_ASM_NORM_F2 ] = {0};
paul
Sources reorganized...
r126
paul
Bug #796 Don_Initialisation_P1
r321 ring_node ring_to_send_asm_f2 [ NB_RING_NODES_ASM_F2 ] = {0};
int buffer_asm_f2 [ NB_RING_NODES_ASM_F2 * TOTAL_SIZE_SM ] = {0};
paul
New version of ASM packets transmission...
r173
paul
Bug #796 Don_Initialisation_P1
r321 float asm_f2_patched_norm [ TOTAL_SIZE_SM ] = {0};
float asm_f2_reorganized [ TOTAL_SIZE_SM ] = {0};
paul
sync
r183
paul
Bug #796 Don_Initialisation_P1
r321 float compressed_sm_norm_f2[ TOTAL_SIZE_COMPRESSED_ASM_NORM_F2] = {0};
paul
Sources reorganized...
r126
paul
Bug #796 Don_Initialisation_P1
r321 float k_coeff_intercalib_f2[ NB_BINS_COMPRESSED_SM_F2 * NB_K_COEFF_PER_BIN ] = {0}; // 12 * 32 = 384
paul
Integration of basic parameters functions in the flight software...
r179
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;
paul
Bug #801 Don_Initialisation_P2
r320 event_out = EVENT_SETS_NONE_PENDING;
queue_id_prc2 = RTEMS_ID_NONE;
paul
Sources reorganized...
r126 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;
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 msgForPRC.event = EVENT_SETS_NONE_PENDING; // this composite event will be sent to the PRC2 task
paul
updates for the compliance with the spectral matrix VHDL design
r150 //
//****************************************
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 nodeForAveraging = getRingNodeForAveraging( CHANNELF2 );
paul
Integration of basic parameters functions in the flight software...
r179
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
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 if (msgForPRC.event != EVENT_SETS_NONE_PENDING)
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
PAS filtering implemented
r289 float nbSMInASMNORM;
paul
Sources reorganized...
r126
unsigned long long int localTime;
paul
Bug #801 Don_Initialisation_P2
r320 size = 0;
queue_id_send = RTEMS_ID_NONE;
queue_id_q_p2 = RTEMS_ID_NONE;
memset( &packet_norm_bp1, 0, sizeof(bp_packet) );
memset( &packet_norm_bp2, 0, sizeof(bp_packet) );
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( );
paul
PAS filtering implemented
r289 nbSMInASMNORM = incomingMsg->numberOfSMInASMNORM;
paul
Sources reorganized...
r126 //*****
//*****
// NORM
//*****
//*****
paul
PAS filtering implemented
r289 // 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
PAS filtering implemented
r289 nbSMInASMNORM,
paul
sync
r182 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
ICD 4.1 taken into account
r283 packet_norm_bp1.pa_bia_status_info = 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
ICD 4.1 taken into account
r283 packet_norm_bp2.pa_bia_status_info = 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
3.1.0.1...
r292
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
3.1.0.1...
r292
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;
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 nb_sm_before_f2.norm_asm = (parameter_dump_packet.sy_lfr_n_asm_p[0] * CONST_256) + parameter_dump_packet.sy_lfr_n_asm_p[1];
paul
Sources reorganized...
r126 }
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;
paul
PAS filtering implemented
r289 unsigned char keepMatrix;
// test acquisitionTime validity
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 keepMatrix = acquisitionTimeIsValid( ring_node->coarseTime, ring_node->fineTime, CHANNELF2 );
paul
Sources reorganized...
r126
for(i=0; i<TOTAL_SIZE_SM; i++)
{
sum = ( (int *) (ring_node->buffer_address) ) [ i ];
paul
PAS filtering implemented
r289 if ( (nbAverageNormF2 == 0) ) // average initialization
paul
Sources reorganized...
r126 {
paul
PAS filtering implemented
r289 if (keepMatrix == 1) // keep the matrix and add it to the average
{
averaged_spec_mat_f2[ i ] = sum;
}
else // drop the matrix and initialize the average
{
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 averaged_spec_mat_f2[ i ] = INIT_FLOAT;
paul
PAS filtering implemented
r289 }
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
{
paul
PAS filtering implemented
r289 if (keepMatrix == 1) // keep the matrix and add it to the average
{
averaged_spec_mat_f2[ i ] = ( averaged_spec_mat_f2[ i ] + sum );
}
else
{
// nothing to do, the matrix is not valid
}
}
}
if (keepMatrix == 1)
{
if ( (nbAverageNormF2 == 0) )
{
msgForMATR->numberOfSMInASMNORM = 1;
}
else
{
msgForMATR->numberOfSMInASMNORM++;
}
}
else
{
if ( (nbAverageNormF2 == 0) )
{
msgForMATR->numberOfSMInASMNORM = 0;
}
else
{
// nothing to do
paul
Sources reorganized...
r126 }
}
}
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);
}