##// END OF EJS Templates
ASM restart sequence updated at the interrupt service routine level...
ASM restart sequence updated at the interrupt service routine level first timecode missing detection modified

File last commit:

r259:af93852650f9 R3a
r259:af93852650f9 R3a
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);
}