##// END OF EJS Templates
printf are used to test the new setFBinMask (Bug 747 and other similar bugs)
printf are used to test the new setFBinMask (Bug 747 and other similar bugs)

File last commit:

r314:9e5325937a5e R3_plus
r314:9e5325937a5e R3_plus
Show More
tc_load_dump_parameters.c
1660 lines | 57.6 KiB | text/x-c | CLexer
/ src / tc_load_dump_parameters.c
paul
Header files inclusion reworked...
r40 /** Functions to load and dump parameters in the LFR registers.
*
* @file
* @author P. LEROY
*
* A group of functions to handle TC related to parameter loading and dumping.\n
* TC_LFR_LOAD_COMMON_PAR\n
* TC_LFR_LOAD_NORMAL_PAR\n
* TC_LFR_LOAD_BURST_PAR\n
* TC_LFR_LOAD_SBM1_PAR\n
* TC_LFR_LOAD_SBM2_PAR\n
*
*/
#include "tc_load_dump_parameters.h"
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 Packet_TM_LFR_KCOEFFICIENTS_DUMP_t kcoefficients_dump_1;
Packet_TM_LFR_KCOEFFICIENTS_DUMP_t kcoefficients_dump_2;
ring_node kcoefficient_node_1;
ring_node kcoefficient_node_2;
paul
Header files inclusion reworked...
r40 int action_load_common_par(ccsdsTelecommandPacket_t *TC)
{
/** This function updates the LFR registers with the incoming common parameters.
*
* @param TC points to the TeleCommand packet that is being processed
*
*
*/
paul
Minor changes in .h inclusion
r45
paul
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
r195 parameter_dump_packet.sy_lfr_common_parameters_spare = TC->dataAndCRC[0];
parameter_dump_packet.sy_lfr_common_parameters = TC->dataAndCRC[1];
paul
Sync
r97 set_wfp_data_shaping( );
paul
Header files inclusion reworked...
r40 return LFR_SUCCESSFUL;
}
paul
fsw-0-23...
r75 int action_load_normal_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time)
paul
Header files inclusion reworked...
r40 {
/** This function updates the LFR registers with the incoming normal parameters.
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
paul
Minor changes in .h inclusion
r45
paul
Header files inclusion reworked...
r40 int result;
int flag;
paul
Minor modifications to meet Logiscope requirements
r78 rtems_status_code status;
paul
Header files inclusion reworked...
r40
flag = LFR_SUCCESSFUL;
paul
fsw-0-20
r58 if ( (lfrCurrentMode == LFR_MODE_NORMAL) ||
(lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) ) {
paul
rev 1.0.0.2...
r104 status = send_tm_lfr_tc_exe_not_executable( TC, queue_id );
paul
Header files inclusion reworked...
r40 flag = LFR_DEFAULT;
}
paul
Bug #167...
r152 // CHECK THE PARAMETERS SET CONSISTENCY
paul
Bug #167
r142 if (flag == LFR_SUCCESSFUL)
{
paul
3.0.0.21...
r275 flag = check_normal_par_consistency( TC, queue_id );
paul
Bug #167
r142 }
paul
Bug #167...
r152 // SET THE PARAMETERS IF THEY ARE CONSISTENT
paul
There is a message queue between AVFO and MATR...
r118 if (flag == LFR_SUCCESSFUL)
{
paul
Bug #167...
r152 result = set_sy_lfr_n_swf_l( TC );
result = set_sy_lfr_n_swf_p( TC );
result = set_sy_lfr_n_bp_p0( TC );
result = set_sy_lfr_n_bp_p1( TC );
result = set_sy_lfr_n_asm_p( TC );
result = set_sy_lfr_n_cwf_long_f3( TC );
paul
ICD 2.0...
r92 }
paul
fsw-0-20
r58 return flag;
paul
Header files inclusion reworked...
r40 }
paul
fsw-0-23...
r75 int action_load_burst_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time)
paul
Header files inclusion reworked...
r40 {
/** This function updates the LFR registers with the incoming burst parameters.
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
paul
Minor changes in .h inclusion
r45
paul
Sync...
r117 int flag;
paul
Minor modifications to meet Logiscope requirements
r78 rtems_status_code status;
paul
Sync...
r117 unsigned char sy_lfr_b_bp_p0;
unsigned char sy_lfr_b_bp_p1;
float aux;
paul
Header files inclusion reworked...
r40
paul
Sync...
r117 flag = LFR_SUCCESSFUL;
paul
Header files inclusion reworked...
r40
paul
Sync...
r117 if ( lfrCurrentMode == LFR_MODE_BURST ) {
paul
rev 1.0.0.2...
r104 status = send_tm_lfr_tc_exe_not_executable( TC, queue_id );
paul
Bug #176
r159 flag = LFR_DEFAULT;
paul
Header files inclusion reworked...
r40 }
paul
Bug #167...
r152 sy_lfr_b_bp_p0 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_B_BP_P0 ];
sy_lfr_b_bp_p1 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_B_BP_P1 ];
paul
correction de bug #485
r223 // sy_lfr_b_bp_p0 shall not be lower than its default value
paul
Bug #167...
r152 if (flag == LFR_SUCCESSFUL)
{
if (sy_lfr_b_bp_p0 < DEFAULT_SY_LFR_B_BP_P0 )
{
status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_B_BP_P0+10, sy_lfr_b_bp_p0 );
flag = WRONG_APP_DATA;
}
}
paul
correction de bug #485
r223 // sy_lfr_b_bp_p1 shall not be lower than its default value
paul
Bug #167...
r152 if (flag == LFR_SUCCESSFUL)
{
if (sy_lfr_b_bp_p1 < DEFAULT_SY_LFR_B_BP_P1 )
{
status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_B_BP_P1+10, sy_lfr_b_bp_p1 );
flag = WRONG_APP_DATA;
}
}
paul
Sync...
r117 //****************************************************************
// check the consistency between sy_lfr_b_bp_p0 and sy_lfr_b_bp_p1
if (flag == LFR_SUCCESSFUL)
{
sy_lfr_b_bp_p0 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_B_BP_P0 ];
sy_lfr_b_bp_p1 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_B_BP_P1 ];
aux = ( (float ) sy_lfr_b_bp_p1 / sy_lfr_b_bp_p0 ) - floor(sy_lfr_b_bp_p1 / sy_lfr_b_bp_p0);
paul
Many corrections done after Logiscope analysis
r166 if (aux > FLOAT_EQUAL_ZERO)
paul
Sync...
r117 {
status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_B_BP_P0+10, sy_lfr_b_bp_p0 );
flag = LFR_DEFAULT;
}
paul
Header files inclusion reworked...
r40 }
paul
correction de bug #485
r223 // SET THE PARAMETERS
paul
Sync...
r117 if (flag == LFR_SUCCESSFUL)
{
paul
Bug #176
r159 flag = set_sy_lfr_b_bp_p0( TC );
flag = set_sy_lfr_b_bp_p1( TC );
paul
Sync...
r117 }
return flag;
paul
Header files inclusion reworked...
r40 }
paul
fsw-0-23...
r75 int action_load_sbm1_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time)
paul
Header files inclusion reworked...
r40 {
/** This function updates the LFR registers with the incoming sbm1 parameters.
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
paul
Sync...
r117 int flag;
rtems_status_code status;
unsigned char sy_lfr_s1_bp_p0;
unsigned char sy_lfr_s1_bp_p1;
float aux;
paul
Header files inclusion reworked...
r40
paul
Sync...
r117 flag = LFR_SUCCESSFUL;
if ( lfrCurrentMode == LFR_MODE_SBM1 ) {
paul
rev 1.0.0.2...
r104 status = send_tm_lfr_tc_exe_not_executable( TC, queue_id );
paul
Bug #176
r159 flag = LFR_DEFAULT;
paul
Header files inclusion reworked...
r40 }
paul
Bug #167...
r152 sy_lfr_s1_bp_p0 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_S1_BP_P0 ];
sy_lfr_s1_bp_p1 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_S1_BP_P1 ];
// sy_lfr_s1_bp_p0
if (flag == LFR_SUCCESSFUL)
{
if (sy_lfr_s1_bp_p0 < DEFAULT_SY_LFR_S1_BP_P0 )
{
status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_S1_BP_P0+10, sy_lfr_s1_bp_p0 );
flag = WRONG_APP_DATA;
}
}
// sy_lfr_s1_bp_p1
if (flag == LFR_SUCCESSFUL)
{
if (sy_lfr_s1_bp_p1 < DEFAULT_SY_LFR_S1_BP_P1 )
{
status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_S1_BP_P1+10, sy_lfr_s1_bp_p1 );
flag = WRONG_APP_DATA;
}
}
paul
Sync...
r117 //******************************************************************
// check the consistency between sy_lfr_s1_bp_p0 and sy_lfr_s1_bp_p1
if (flag == LFR_SUCCESSFUL)
{
aux = ( (float ) sy_lfr_s1_bp_p1 / (sy_lfr_s1_bp_p0*0.25) ) - floor(sy_lfr_s1_bp_p1 / (sy_lfr_s1_bp_p0*0.25));
paul
Many corrections done after Logiscope analysis
r166 if (aux > FLOAT_EQUAL_ZERO)
paul
Sync...
r117 {
status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_S1_BP_P0+10, sy_lfr_s1_bp_p0 );
flag = LFR_DEFAULT;
}
paul
Header files inclusion reworked...
r40 }
paul
Bug #167...
r152 // SET THE PARAMETERS
paul
Sync...
r117 if (flag == LFR_SUCCESSFUL)
{
paul
Bug #176
r159 flag = set_sy_lfr_s1_bp_p0( TC );
flag = set_sy_lfr_s1_bp_p1( TC );
paul
Sync...
r117 }
return flag;
paul
Header files inclusion reworked...
r40 }
paul
fsw-0-23...
r75 int action_load_sbm2_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time)
paul
Header files inclusion reworked...
r40 {
/** This function updates the LFR registers with the incoming sbm2 parameters.
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
paul
Sync...
r117 int flag;
paul
Minor modifications to meet Logiscope requirements
r78 rtems_status_code status;
paul
Sync...
r117 unsigned char sy_lfr_s2_bp_p0;
unsigned char sy_lfr_s2_bp_p1;
float aux;
paul
Header files inclusion reworked...
r40
paul
Sync...
r117 flag = LFR_SUCCESSFUL;
paul
Header files inclusion reworked...
r40
paul
Sync...
r117 if ( lfrCurrentMode == LFR_MODE_SBM2 ) {
paul
rev 1.0.0.2...
r104 status = send_tm_lfr_tc_exe_not_executable( TC, queue_id );
paul
Bug #176
r159 flag = LFR_DEFAULT;
paul
Header files inclusion reworked...
r40 }
paul
Bug #167...
r152 sy_lfr_s2_bp_p0 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_S2_BP_P0 ];
sy_lfr_s2_bp_p1 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_S2_BP_P1 ];
// sy_lfr_s2_bp_p0
if (flag == LFR_SUCCESSFUL)
{
if (sy_lfr_s2_bp_p0 < DEFAULT_SY_LFR_S2_BP_P0 )
{
status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_S2_BP_P0+10, sy_lfr_s2_bp_p0 );
flag = WRONG_APP_DATA;
}
}
// sy_lfr_s2_bp_p1
if (flag == LFR_SUCCESSFUL)
{
if (sy_lfr_s2_bp_p1 < DEFAULT_SY_LFR_S2_BP_P1 )
{
status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_S2_BP_P1+10, sy_lfr_s2_bp_p1 );
flag = WRONG_APP_DATA;
}
}
paul
Sync...
r117 //******************************************************************
// check the consistency between sy_lfr_s2_bp_p0 and sy_lfr_s2_bp_p1
if (flag == LFR_SUCCESSFUL)
{
sy_lfr_s2_bp_p0 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_S2_BP_P0 ];
sy_lfr_s2_bp_p1 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_S2_BP_P1 ];
aux = ( (float ) sy_lfr_s2_bp_p1 / sy_lfr_s2_bp_p0 ) - floor(sy_lfr_s2_bp_p1 / sy_lfr_s2_bp_p0);
paul
Many corrections done after Logiscope analysis
r166 if (aux > FLOAT_EQUAL_ZERO)
paul
Sync...
r117 {
status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_S2_BP_P0+10, sy_lfr_s2_bp_p0 );
flag = LFR_DEFAULT;
}
paul
Header files inclusion reworked...
r40 }
paul
Bug #167...
r152 // SET THE PARAMETERS
paul
Sync...
r117 if (flag == LFR_SUCCESSFUL)
{
paul
Bug #176
r159 flag = set_sy_lfr_s2_bp_p0( TC );
flag = set_sy_lfr_s2_bp_p1( TC );
paul
Sync...
r117 }
return flag;
paul
Header files inclusion reworked...
r40 }
paul
R3 updates. TC handlers added for the new telecommands:...
r192 int action_load_kcoefficients(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time)
{
/** This function updates the LFR registers with the incoming sbm2 parameters.
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
int flag;
flag = LFR_DEFAULT;
paul
#426 corrected, sy_lfr_kcoeff_frequency >= 36 triggers the transmission of...
r211 flag = set_sy_lfr_kcoeff( TC, queue_id );
paul
R3 updates. TC handlers added for the new telecommands:...
r192
return flag;
}
int action_load_fbins_mask(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time)
{
/** This function updates the LFR registers with the incoming sbm2 parameters.
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
int flag;
flag = LFR_DEFAULT;
paul
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
r195 flag = set_sy_lfr_fbins( TC );
paul
R3 updates. TC handlers added for the new telecommands:...
r192
return flag;
}
paul
ICD 4.1 taken into account
r283 int action_load_filter_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time)
paul
TC_LFR_LOAD_PAS_FILTER_PAR added to the authorized telecommands...
r282 {
/** This function updates the LFR registers with the incoming sbm2 parameters.
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
int flag;
flag = LFR_DEFAULT;
paul
minor updates
r285 flag = check_sy_lfr_filter_parameters( TC, queue_id );
paul
TC_LFR_LOAD_PAS_FILTER_PAR added to the authorized telecommands...
r282
if (flag == LFR_SUCCESSFUL)
{
paul
ICD 4.1 taken into account
r283 parameter_dump_packet.spare_sy_lfr_pas_filter_enabled = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_ENABLED ];
parameter_dump_packet.sy_lfr_pas_filter_modulus = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_MODULUS ];
parameter_dump_packet.sy_lfr_pas_filter_tbad[0] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_TBAD + 0 ];
parameter_dump_packet.sy_lfr_pas_filter_tbad[1] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_TBAD + 1 ];
parameter_dump_packet.sy_lfr_pas_filter_tbad[2] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_TBAD + 2 ];
parameter_dump_packet.sy_lfr_pas_filter_tbad[3] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_TBAD + 3 ];
parameter_dump_packet.sy_lfr_pas_filter_offset = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_OFFSET ];
parameter_dump_packet.sy_lfr_pas_filter_shift[0] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_SHIFT + 0 ];
parameter_dump_packet.sy_lfr_pas_filter_shift[1] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_SHIFT + 1 ];
parameter_dump_packet.sy_lfr_pas_filter_shift[2] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_SHIFT + 2 ];
parameter_dump_packet.sy_lfr_pas_filter_shift[3] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_SHIFT + 3 ];
parameter_dump_packet.sy_lfr_sc_rw_delta_f[0] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_SC_RW_DELTA_F + 0 ];
parameter_dump_packet.sy_lfr_sc_rw_delta_f[1] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_SC_RW_DELTA_F + 1 ];
parameter_dump_packet.sy_lfr_sc_rw_delta_f[2] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_SC_RW_DELTA_F + 2 ];
parameter_dump_packet.sy_lfr_sc_rw_delta_f[3] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_SC_RW_DELTA_F + 3 ];
paul
reaction wheels filtering implemented
r286
paul
3.1.0.2...
r293 //****************************
// store PAS filter parameters
// sy_lfr_pas_filter_enabled
filterPar.spare_sy_lfr_pas_filter_enabled = parameter_dump_packet.spare_sy_lfr_pas_filter_enabled;
paul
commit before going back to 3.1.0.2 for LESIA compilation
r295 set_sy_lfr_pas_filter_enabled( parameter_dump_packet.spare_sy_lfr_pas_filter_enabled & 0x01 );
paul
3.1.0.2...
r293 // sy_lfr_pas_filter_modulus
filterPar.sy_lfr_pas_filter_modulus = parameter_dump_packet.sy_lfr_pas_filter_modulus;
// sy_lfr_pas_filter_tbad
copyFloatByChar( (unsigned char*) &filterPar.sy_lfr_pas_filter_tbad,
parameter_dump_packet.sy_lfr_pas_filter_tbad );
// sy_lfr_pas_filter_offset
filterPar.sy_lfr_pas_filter_offset = parameter_dump_packet.sy_lfr_pas_filter_offset;
// sy_lfr_pas_filter_shift
copyFloatByChar( (unsigned char*) &filterPar.sy_lfr_pas_filter_shift,
parameter_dump_packet.sy_lfr_pas_filter_shift );
//****************************************************
paul
reaction wheels filtering implemented
r286 // store the parameter sy_lfr_sc_rw_delta_f as a float
paul
3.1.0.2...
r293 copyFloatByChar( (unsigned char*) &filterPar.sy_lfr_sc_rw_delta_f,
parameter_dump_packet.sy_lfr_sc_rw_delta_f );
paul
TC_LFR_LOAD_PAS_FILTER_PAR added to the authorized telecommands...
r282 }
return flag;
}
paul
R3 updates. TC handlers added for the new telecommands:...
r192 int action_dump_kcoefficients(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time)
{
/** This function updates the LFR registers with the incoming sbm2 parameters.
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 unsigned int address;
rtems_status_code status;
unsigned int freq;
unsigned int bin;
unsigned int coeff;
unsigned char *kCoeffPtr;
unsigned char *kCoeffDumpPtr;
paul
R3 updates. TC handlers added for the new telecommands:...
r192
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 // for each sy_lfr_kcoeff_frequency there is 32 kcoeff
// F0 => 11 bins
// F1 => 13 bins
// F2 => 12 bins
// 36 bins to dump in two packets (30 bins max per packet)
paul
R3 updates. TC handlers added for the new telecommands:...
r192
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 //*********
// PACKET 1
// 11 F0 bins, 13 F1 bins and 6 F2 bins
paul
bug #508 corrected (destination_id of TM_LFR_KCOEFFICIENTS_DUMP)
r221 kcoefficients_dump_1.destinationID = TC->sourceID;
paul
printf removed or replaced by PRINTF macros...
r227 increment_seq_counter_destination_id_dump( kcoefficients_dump_1.packetSequenceControl, TC->sourceID );
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 for( freq=0;
freq<NB_BINS_COMPRESSED_SM_F0;
freq++ )
{
kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + 1] = freq;
bin = freq;
paul
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
r195 // printKCoefficients( freq, bin, k_coeff_intercalib_f0_norm);
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 for ( coeff=0; coeff<NB_K_COEFF_PER_BIN; coeff++ )
{
kCoeffDumpPtr = (unsigned char*) &kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + coeff*NB_BYTES_PER_FLOAT + 2 ]; // 2 for the kcoeff_frequency
kCoeffPtr = (unsigned char*) &k_coeff_intercalib_f0_norm[ (bin*NB_K_COEFF_PER_BIN) + coeff ];
paul
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
r195 copyFloatByChar( kCoeffDumpPtr, kCoeffPtr );
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 }
}
for( freq=NB_BINS_COMPRESSED_SM_F0;
freq<(NB_BINS_COMPRESSED_SM_F0+NB_BINS_COMPRESSED_SM_F1);
freq++ )
{
kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + 1 ] = freq;
bin = freq - NB_BINS_COMPRESSED_SM_F0;
paul
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
r195 // printKCoefficients( freq, bin, k_coeff_intercalib_f1_norm);
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 for ( coeff=0; coeff<NB_K_COEFF_PER_BIN; coeff++ )
{
kCoeffDumpPtr = (unsigned char*) &kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + coeff*NB_BYTES_PER_FLOAT + 2 ]; // 2 for the kcoeff_frequency
kCoeffPtr = (unsigned char*) &k_coeff_intercalib_f1_norm[ (bin*NB_K_COEFF_PER_BIN) + coeff ];
paul
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
r195 copyFloatByChar( kCoeffDumpPtr, kCoeffPtr );
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 }
}
for( freq=(NB_BINS_COMPRESSED_SM_F0+NB_BINS_COMPRESSED_SM_F1);
freq<(NB_BINS_COMPRESSED_SM_F0+NB_BINS_COMPRESSED_SM_F1+6);
freq++ )
{
kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + 1 ] = freq;
bin = freq - (NB_BINS_COMPRESSED_SM_F0+NB_BINS_COMPRESSED_SM_F1);
paul
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
r195 // printKCoefficients( freq, bin, k_coeff_intercalib_f2);
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 for ( coeff=0; coeff<NB_K_COEFF_PER_BIN; coeff++ )
{
kCoeffDumpPtr = (unsigned char*) &kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + coeff*NB_BYTES_PER_FLOAT + 2 ]; // 2 for the kcoeff_frequency
kCoeffPtr = (unsigned char*) &k_coeff_intercalib_f2[ (bin*NB_K_COEFF_PER_BIN) + coeff ];
paul
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
r195 copyFloatByChar( kCoeffDumpPtr, kCoeffPtr );
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 }
}
kcoefficients_dump_1.time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
kcoefficients_dump_1.time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
kcoefficients_dump_1.time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
kcoefficients_dump_1.time[3] = (unsigned char) (time_management_regs->coarse_time);
kcoefficients_dump_1.time[4] = (unsigned char) (time_management_regs->fine_time>>8);
kcoefficients_dump_1.time[5] = (unsigned char) (time_management_regs->fine_time);
// SEND DATA
kcoefficient_node_1.status = 1;
address = (unsigned int) &kcoefficient_node_1;
status = rtems_message_queue_send( queue_id, &address, sizeof( ring_node* ) );
if (status != RTEMS_SUCCESSFUL) {
PRINTF1("in action_dump_kcoefficients *** ERR sending packet 1 , code %d", status)
}
paul
R3 updates. TC handlers added for the new telecommands:...
r192
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 //********
// PACKET 2
// 6 F2 bins
paul
bug #508 corrected (destination_id of TM_LFR_KCOEFFICIENTS_DUMP)
r221 kcoefficients_dump_2.destinationID = TC->sourceID;
paul
printf removed or replaced by PRINTF macros...
r227 increment_seq_counter_destination_id_dump( kcoefficients_dump_2.packetSequenceControl, TC->sourceID );
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 for( freq=0; freq<6; freq++ )
{
kcoefficients_dump_2.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + 1 ] = NB_BINS_COMPRESSED_SM_F0 + NB_BINS_COMPRESSED_SM_F1 + 6 + freq;
bin = freq + 6;
paul
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
r195 // printKCoefficients( freq, bin, k_coeff_intercalib_f2);
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 for ( coeff=0; coeff<NB_K_COEFF_PER_BIN; coeff++ )
{
kCoeffDumpPtr = (unsigned char*) &kcoefficients_dump_2.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + coeff*NB_BYTES_PER_FLOAT + 2 ]; // 2 for the kcoeff_frequency
kCoeffPtr = (unsigned char*) &k_coeff_intercalib_f2[ (bin*NB_K_COEFF_PER_BIN) + coeff ];
paul
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
r195 copyFloatByChar( kCoeffDumpPtr, kCoeffPtr );
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 }
}
kcoefficients_dump_2.time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
kcoefficients_dump_2.time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
kcoefficients_dump_2.time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
kcoefficients_dump_2.time[3] = (unsigned char) (time_management_regs->coarse_time);
kcoefficients_dump_2.time[4] = (unsigned char) (time_management_regs->fine_time>>8);
kcoefficients_dump_2.time[5] = (unsigned char) (time_management_regs->fine_time);
// SEND DATA
kcoefficient_node_2.status = 1;
address = (unsigned int) &kcoefficient_node_2;
status = rtems_message_queue_send( queue_id, &address, sizeof( ring_node* ) );
if (status != RTEMS_SUCCESSFUL) {
PRINTF1("in action_dump_kcoefficients *** ERR sending packet 2, code %d", status)
}
return status;
paul
R3 updates. TC handlers added for the new telecommands:...
r192 }
paul
bug #507 corrected (destination_id of TM_LFR_PARAMETER_DUMP)
r222 int action_dump_par( ccsdsTelecommandPacket_t *TC, rtems_id queue_id )
paul
Header files inclusion reworked...
r40 {
/** This function dumps the LFR parameters by sending the appropriate TM packet to the dedicated RTEMS message queue.
*
* @param queue_id is the id of the queue which handles TM related to this execution step.
*
* @return RTEMS directive status codes:
* - RTEMS_SUCCESSFUL - message sent successfully
* - RTEMS_INVALID_ID - invalid queue id
* - RTEMS_INVALID_SIZE - invalid message size
* - RTEMS_INVALID_ADDRESS - buffer is NULL
* - RTEMS_UNSATISFIED - out of message buffers
* - RTEMS_TOO_MANY - queue s limit has been reached
*
*/
int status;
paul
printf removed or replaced by PRINTF macros...
r227 increment_seq_counter_destination_id_dump( parameter_dump_packet.packetSequenceControl, TC->sourceID );
paul
bug #507 corrected (destination_id of TM_LFR_PARAMETER_DUMP)
r222 parameter_dump_packet.destinationID = TC->sourceID;
paul
Bug #117
r149
paul
printf removed or replaced by PRINTF macros...
r227 // UPDATE TIME
paul
Ignore doc files...
r46 parameter_dump_packet.time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
parameter_dump_packet.time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
parameter_dump_packet.time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
parameter_dump_packet.time[3] = (unsigned char) (time_management_regs->coarse_time);
parameter_dump_packet.time[4] = (unsigned char) (time_management_regs->fine_time>>8);
parameter_dump_packet.time[5] = (unsigned char) (time_management_regs->fine_time);
paul
Header files inclusion reworked...
r40 // SEND DATA
status = rtems_message_queue_send( queue_id, &parameter_dump_packet,
PACKET_LENGTH_PARAMETER_DUMP + CCSDS_TC_TM_PACKET_OFFSET + CCSDS_PROTOCOLE_EXTRA_BYTES);
if (status != RTEMS_SUCCESSFUL) {
PRINTF1("in action_dump *** ERR sending packet, code %d", status)
}
return status;
}
//***********************
// NORMAL MODE PARAMETERS
paul
3.0.0.21...
r275 int check_normal_par_consistency( ccsdsTelecommandPacket_t *TC, rtems_id queue_id )
paul
Bug #167...
r152 {
unsigned char msb;
unsigned char lsb;
int flag;
float aux;
rtems_status_code status;
unsigned int sy_lfr_n_swf_l;
unsigned int sy_lfr_n_swf_p;
unsigned int sy_lfr_n_asm_p;
unsigned char sy_lfr_n_bp_p0;
unsigned char sy_lfr_n_bp_p1;
unsigned char sy_lfr_n_cwf_long_f3;
flag = LFR_SUCCESSFUL;
//***************
// get parameters
msb = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_SWF_L ];
lsb = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_SWF_L+1 ];
sy_lfr_n_swf_l = msb * 256 + lsb;
msb = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_SWF_P ];
lsb = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_SWF_P+1 ];
sy_lfr_n_swf_p = msb * 256 + lsb;
msb = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_ASM_P ];
lsb = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_ASM_P+1 ];
sy_lfr_n_asm_p = msb * 256 + lsb;
sy_lfr_n_bp_p0 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_BP_P0 ];
sy_lfr_n_bp_p1 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_BP_P1 ];
sy_lfr_n_cwf_long_f3 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_CWF_LONG_F3 ];
//******************
// check consistency
// sy_lfr_n_swf_l
if (sy_lfr_n_swf_l != 2048)
{
paul
Bug #174
r158 status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_N_SWF_L+10, sy_lfr_n_swf_l );
paul
Bug #167...
r152 flag = WRONG_APP_DATA;
}
// sy_lfr_n_swf_p
if (flag == LFR_SUCCESSFUL)
{
paul
3.0.0.21...
r275 if ( sy_lfr_n_swf_p < 22 )
paul
Bug #167...
r152 {
paul
Bug #174
r158 status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_N_SWF_P+10, sy_lfr_n_swf_p );
paul
Bug #167...
r152 flag = WRONG_APP_DATA;
}
}
// sy_lfr_n_bp_p0
if (flag == LFR_SUCCESSFUL)
{
paul
Many corrections done after Logiscope analysis
r166 if (sy_lfr_n_bp_p0 < DFLT_SY_LFR_N_BP_P0)
paul
Bug #167...
r152 {
status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_N_BP_P0+10, sy_lfr_n_bp_p0 );
flag = WRONG_APP_DATA;
}
}
// sy_lfr_n_asm_p
if (flag == LFR_SUCCESSFUL)
{
if (sy_lfr_n_asm_p == 0)
{
status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_N_ASM_P+10, sy_lfr_n_asm_p );
flag = WRONG_APP_DATA;
}
}
// sy_lfr_n_asm_p shall be a whole multiple of sy_lfr_n_bp_p0
if (flag == LFR_SUCCESSFUL)
{
aux = ( (float ) sy_lfr_n_asm_p / sy_lfr_n_bp_p0 ) - floor(sy_lfr_n_asm_p / sy_lfr_n_bp_p0);
paul
Many corrections done after Logiscope analysis
r166 if (aux > FLOAT_EQUAL_ZERO)
paul
Bug #167...
r152 {
status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_N_ASM_P+10, sy_lfr_n_asm_p );
flag = WRONG_APP_DATA;
}
}
// sy_lfr_n_bp_p1
if (flag == LFR_SUCCESSFUL)
{
paul
Many corrections done after Logiscope analysis
r166 if (sy_lfr_n_bp_p1 < DFLT_SY_LFR_N_BP_P1)
paul
Bug #167...
r152 {
status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_N_BP_P1+10, sy_lfr_n_bp_p1 );
flag = WRONG_APP_DATA;
}
}
// sy_lfr_n_bp_p1 shall be a whole multiple of sy_lfr_n_bp_p0
if (flag == LFR_SUCCESSFUL)
{
aux = ( (float ) sy_lfr_n_bp_p1 / sy_lfr_n_bp_p0 ) - floor(sy_lfr_n_bp_p1 / sy_lfr_n_bp_p0);
paul
Many corrections done after Logiscope analysis
r166 if (aux > FLOAT_EQUAL_ZERO)
paul
Bug #167...
r152 {
status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_N_BP_P1+10, sy_lfr_n_bp_p1 );
flag = LFR_DEFAULT;
}
}
// sy_lfr_n_cwf_long_f3
return flag;
}
int set_sy_lfr_n_swf_l( ccsdsTelecommandPacket_t *TC )
paul
Header files inclusion reworked...
r40 {
/** This function sets the number of points of a snapshot (sy_lfr_n_swf_l).
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
int result;
paul
Bug #167...
r152 result = LFR_SUCCESSFUL;
parameter_dump_packet.sy_lfr_n_swf_l[0] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_SWF_L ];
parameter_dump_packet.sy_lfr_n_swf_l[1] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_SWF_L+1 ];
paul
Header files inclusion reworked...
r40
return result;
}
paul
Bug #167...
r152 int set_sy_lfr_n_swf_p(ccsdsTelecommandPacket_t *TC )
paul
Header files inclusion reworked...
r40 {
/** This function sets the time between two snapshots, in s (sy_lfr_n_swf_p).
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
int result;
paul
Bug #167...
r152 result = LFR_SUCCESSFUL;
parameter_dump_packet.sy_lfr_n_swf_p[0] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_SWF_P ];
parameter_dump_packet.sy_lfr_n_swf_p[1] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_SWF_P+1 ];
paul
Header files inclusion reworked...
r40
return result;
}
paul
Bug #167...
r152 int set_sy_lfr_n_asm_p( ccsdsTelecommandPacket_t *TC )
paul
Header files inclusion reworked...
r40 {
paul
Ignore doc files...
r46 /** This function sets the time between two full spectral matrices transmission, in s (SY_LFR_N_ASM_P).
paul
Header files inclusion reworked...
r40 *
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
int result;
paul
Bug #167...
r152
result = LFR_SUCCESSFUL;
paul
Header files inclusion reworked...
r40
paul
Bug #167...
r152 parameter_dump_packet.sy_lfr_n_asm_p[0] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_ASM_P ];
parameter_dump_packet.sy_lfr_n_asm_p[1] = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_ASM_P+1 ];
paul
Header files inclusion reworked...
r40
return result;
}
paul
Bug #167...
r152 int set_sy_lfr_n_bp_p0( ccsdsTelecommandPacket_t *TC )
paul
Header files inclusion reworked...
r40 {
paul
Many corrections done after Logiscope analysis
r166 /** This function sets the time between two basic parameter sets, in s (DFLT_SY_LFR_N_BP_P0).
paul
Header files inclusion reworked...
r40 *
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
int status;
status = LFR_SUCCESSFUL;
paul
Bug #167...
r152 parameter_dump_packet.sy_lfr_n_bp_p0 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_BP_P0 ];
paul
Header files inclusion reworked...
r40
return status;
}
paul
Bug #167...
r152 int set_sy_lfr_n_bp_p1(ccsdsTelecommandPacket_t *TC )
paul
Header files inclusion reworked...
r40 {
/** This function sets the time between two basic parameter sets (autocorrelation + crosscorrelation), in s (sy_lfr_n_bp_p1).
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
int status;
status = LFR_SUCCESSFUL;
paul
Bug #167...
r152 parameter_dump_packet.sy_lfr_n_bp_p1 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_BP_P1 ];
paul
Header files inclusion reworked...
r40
return status;
}
paul
Bug #167...
r152 int set_sy_lfr_n_cwf_long_f3(ccsdsTelecommandPacket_t *TC )
paul
ICD 2.0...
r92 {
/** This function allows to switch from CWF_F3 packets to CWF_LONG_F3 packets.
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
int status;
status = LFR_SUCCESSFUL;
paul
sync
r113 parameter_dump_packet.sy_lfr_n_cwf_long_f3 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_CWF_LONG_F3 ];
paul
ICD 2.0...
r92
return status;
}
paul
Header files inclusion reworked...
r40 //**********************
// BURST MODE PARAMETERS
paul
Bug #167...
r152 int set_sy_lfr_b_bp_p0(ccsdsTelecommandPacket_t *TC)
paul
Sync...
r117 {
/** This function sets the time between two basic parameter sets, in s (SY_LFR_B_BP_P0).
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
int status;
status = LFR_SUCCESSFUL;
paul
Bug #167...
r152 parameter_dump_packet.sy_lfr_b_bp_p0 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_B_BP_P0 ];
paul
Sync...
r117
return status;
}
paul
Bug #167...
r152 int set_sy_lfr_b_bp_p1( ccsdsTelecommandPacket_t *TC )
paul
Sync...
r117 {
/** This function sets the time between two basic parameter sets, in s (SY_LFR_B_BP_P1).
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
int status;
status = LFR_SUCCESSFUL;
paul
Bug #167...
r152 parameter_dump_packet.sy_lfr_b_bp_p1 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_B_BP_P1 ];
paul
Sync...
r117
return status;
}
paul
Header files inclusion reworked...
r40
//*********************
// SBM1 MODE PARAMETERS
paul
Bug #167...
r152 int set_sy_lfr_s1_bp_p0( ccsdsTelecommandPacket_t *TC )
paul
Sync...
r117 {
/** This function sets the time between two basic parameter sets, in s (SY_LFR_S1_BP_P0).
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
int status;
status = LFR_SUCCESSFUL;
paul
Bug #167...
r152 parameter_dump_packet.sy_lfr_s1_bp_p0 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_S1_BP_P0 ];
paul
Sync...
r117
return status;
}
paul
Bug #167...
r152 int set_sy_lfr_s1_bp_p1( ccsdsTelecommandPacket_t *TC )
paul
Sync...
r117 {
/** This function sets the time between two basic parameter sets, in s (SY_LFR_S1_BP_P1).
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
int status;
status = LFR_SUCCESSFUL;
paul
Bug #167...
r152 parameter_dump_packet.sy_lfr_s1_bp_p1 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_S1_BP_P1 ];
paul
Sync...
r117
return status;
}
paul
Header files inclusion reworked...
r40
//*********************
// SBM2 MODE PARAMETERS
paul
ICD 4.1 taken into account
r283 int set_sy_lfr_s2_bp_p0( ccsdsTelecommandPacket_t *TC )
paul
Sync...
r117 {
/** This function sets the time between two basic parameter sets, in s (SY_LFR_S2_BP_P0).
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
int status;
status = LFR_SUCCESSFUL;
paul
Bug #167...
r152 parameter_dump_packet.sy_lfr_s2_bp_p0 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_S2_BP_P0 ];
paul
Sync...
r117
return status;
}
paul
Bug #167...
r152 int set_sy_lfr_s2_bp_p1( ccsdsTelecommandPacket_t *TC )
paul
Sync...
r117 {
/** This function sets the time between two basic parameter sets, in s (SY_LFR_S2_BP_P1).
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM related to this execution step
*
*/
int status;
status = LFR_SUCCESSFUL;
paul
Bug #167...
r152 parameter_dump_packet.sy_lfr_s2_bp_p1 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_S2_BP_P1 ];
paul
Sync...
r117
return status;
}
paul
rev 1.0.0.2...
r104 //*******************
// TC_LFR_UPDATE_INFO
unsigned int check_update_info_hk_lfr_mode( unsigned char mode )
{
unsigned int status;
if ( (mode == LFR_MODE_STANDBY) || (mode == LFR_MODE_NORMAL)
paul
Corrections:...
r107 || (mode == LFR_MODE_BURST)
paul
rev 1.0.0.2...
r104 || (mode == LFR_MODE_SBM1) || (mode == LFR_MODE_SBM2))
{
status = LFR_SUCCESSFUL;
}
else
{
status = LFR_DEFAULT;
}
return status;
}
unsigned int check_update_info_hk_tds_mode( unsigned char mode )
{
unsigned int status;
if ( (mode == TDS_MODE_STANDBY) || (mode == TDS_MODE_NORMAL)
paul
Corrections:...
r107 || (mode == TDS_MODE_BURST)
paul
rev 1.0.0.2...
r104 || (mode == TDS_MODE_SBM1) || (mode == TDS_MODE_SBM2)
|| (mode == TDS_MODE_LFM))
{
status = LFR_SUCCESSFUL;
}
else
{
status = LFR_DEFAULT;
}
return status;
}
unsigned int check_update_info_hk_thr_mode( unsigned char mode )
{
unsigned int status;
if ( (mode == THR_MODE_STANDBY) || (mode == THR_MODE_NORMAL)
paul
Corrections:...
r107 || (mode == THR_MODE_BURST))
paul
rev 1.0.0.2...
r104 {
status = LFR_SUCCESSFUL;
}
else
{
status = LFR_DEFAULT;
}
return status;
}
paul
ICD 4.1 taken into account
r283 void getReactionWheelsFrequencies( ccsdsTelecommandPacket_t *TC )
{
/** This function get the reaction wheels frequencies in the incoming TC_LFR_UPDATE_INFO and copy the values locally.
*
* @param TC points to the TeleCommand packet that is being processed
*
*/
unsigned char * bytePosPtr; // pointer to the beginning of the incoming TC packet
bytePosPtr = (unsigned char *) &TC->packetID;
// cp_rpw_sc_rw1_f1
paul
minor updates
r285 copyFloatByChar( (unsigned char*) &cp_rpw_sc_rw1_f1,
(unsigned char*) &bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW1_F1 ] );
paul
ICD 4.1 taken into account
r283 // cp_rpw_sc_rw1_f2
paul
minor updates
r285 copyFloatByChar( (unsigned char*) &cp_rpw_sc_rw1_f2,
(unsigned char*) &bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW1_F2 ] );
paul
ICD 4.1 taken into account
r283 // cp_rpw_sc_rw2_f1
paul
minor updates
r285 copyFloatByChar( (unsigned char*) &cp_rpw_sc_rw2_f1,
(unsigned char*) &bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW2_F1 ] );
paul
ICD 4.1 taken into account
r283 // cp_rpw_sc_rw2_f2
paul
minor updates
r285 copyFloatByChar( (unsigned char*) &cp_rpw_sc_rw2_f2,
(unsigned char*) &bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW2_F2 ] );
paul
ICD 4.1 taken into account
r283 // cp_rpw_sc_rw3_f1
paul
minor updates
r285 copyFloatByChar( (unsigned char*) &cp_rpw_sc_rw3_f1,
(unsigned char*) &bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW3_F1 ] );
paul
ICD 4.1 taken into account
r283 // cp_rpw_sc_rw3_f2
paul
minor updates
r285 copyFloatByChar( (unsigned char*) &cp_rpw_sc_rw3_f2,
(unsigned char*) &bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW3_F2 ] );
paul
ICD 4.1 taken into account
r283 // cp_rpw_sc_rw4_f1
paul
minor updates
r285 copyFloatByChar( (unsigned char*) &cp_rpw_sc_rw4_f1,
(unsigned char*) &bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW4_F1 ] );
paul
ICD 4.1 taken into account
r283 // cp_rpw_sc_rw4_f2
paul
minor updates
r285 copyFloatByChar( (unsigned char*) &cp_rpw_sc_rw4_f2,
(unsigned char*) &bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW4_F2 ] );
paul
ICD 4.1 taken into account
r283 }
paul
reaction wheels filtering implemented
r286 void setFBinMask( unsigned char *fbins_mask, float rw_f, unsigned char deltaFreq, unsigned char flag )
paul
ICD 4.1 taken into account
r283 {
paul
minor updates
r285 /** This function executes specific actions when a TC_LFR_UPDATE_INFO TeleCommand has been received.
*
* @param fbins_mask
paul
reaction wheels filtering implemented
r286 * @param rw_f is the reaction wheel frequency to filter
* @param delta_f is the frequency step between the frequency bins, it depends on the frequency channel
paul
minor updates
r285 * @param flag [true] filtering enabled [false] filtering disabled
*
* @return void
*
*/
paul
3.1.0.3...
r296 float f_RW_min;
float f_RW_MAX;
float fi_min;
float fi_MAX;
float fi;
float deltaBelow;
float deltaAbove;
paul
reaction wheels filtering implemented
r286 int binBelow;
int binAbove;
paul
3.1.0.3...
r296 int closestBin;
paul
reaction wheels filtering implemented
r286 unsigned int whichByte;
paul
3.1.0.3...
r296 int selectedByte;
paul
reaction wheels filtering implemented
r286 int bin;
paul
3.1.0.3...
r296 int binToRemove[3];
int k;
paul
ICD 4.1 taken into account
r283
paul
reaction wheels filtering implemented
r286 whichByte = 0;
bin = 0;
paul
3.1.0.3...
r296 binToRemove[0] = -1;
binToRemove[1] = -1;
binToRemove[2] = -1;
paul
reaction wheels filtering implemented
r286 // compute the frequency range to filter [ rw_f - delta_f/2; rw_f + delta_f/2 ]
paul
3.1.0.3...
r296 f_RW_min = rw_f - filterPar.sy_lfr_sc_rw_delta_f / 2.;
f_RW_MAX = rw_f + filterPar.sy_lfr_sc_rw_delta_f / 2.;
// compute the index of the frequency bin immediately below rw_f
binBelow = (int) ( floor( ((double) rw_f) / ((double) deltaFreq)) );
deltaBelow = rw_f - binBelow * deltaFreq;
// compute the index of the frequency bin immediately above rw_f
binAbove = (int) ( ceil( ((double) rw_f) / ((double) deltaFreq)) );
deltaAbove = binAbove * deltaFreq - rw_f;
paul
ICD 4.1 taken into account
r283
paul
3.1.0.3...
r296 // search the closest bin
if (deltaAbove > deltaBelow)
{
closestBin = binBelow;
}
else
{
closestBin = binAbove;
}
paul
setFBinMask corrected...
r313 // compute the fi interval [fi - deltaFreq * 0.285, fi + deltaFreq * 0.285]
paul
3.1.0.3...
r296 fi = closestBin * deltaFreq;
fi_min = fi - (deltaFreq * 0.285);
paul
setFBinMask corrected...
r313 fi_MAX = fi + (deltaFreq * 0.285);
paul
3.1.0.3...
r296
paul
setFBinMask corrected...
r313 //**************************************************************************************
// be careful here, one shall take into account that the bin 0 IS DROPPED in the spectra
// thus, the index 0 in a mask corresponds to the bin 1 of the spectrum
//**************************************************************************************
paul
reaction wheels filtering implemented
r286
paul
3.1.0.3...
r296 // 1. IF [ f_RW_min, f_RW_MAX] is included in [ fi_min; fi_MAX ]
// => remove f_(i), f_(i-1) and f_(i+1)
if ( ( f_RW_min > fi_min ) && ( f_RW_MAX < fi_MAX ) )
paul
ICD 4.1 taken into account
r283 {
paul
setFBinMask corrected...
r313 binToRemove[0] = (closestBin - 1) - 1;
binToRemove[1] = (closestBin) - 1;
binToRemove[2] = (closestBin + 1) - 1;
paul
3.1.0.3...
r296 }
// 2. ELSE
// => remove the two f_(i) which are around f_RW
else
{
paul
setFBinMask corrected...
r313 binToRemove[0] = (binBelow) - 1;
binToRemove[1] = (binAbove) - 1;
binToRemove[2] = (-1);
paul
3.1.0.3...
r296 }
paul
Bug #865 corrected
r311 for (k = 0; k < 3; k++)
paul
3.1.0.3...
r296 {
bin = binToRemove[k];
if ( (bin >= 0) && (bin <= 127) )
paul
ICD 4.1 taken into account
r283 {
paul
reaction wheels filtering implemented
r286 if (flag == 1)
{
paul
3.1.0.3...
r296 whichByte = (bin >> 3); // division by 8
selectedByte = ( 1 << (bin - (whichByte * 8)) );
fbins_mask[15 - whichByte] = fbins_mask[15 - whichByte] & ((unsigned char) (~selectedByte)); // bytes are ordered MSB first in the packets
paul
reaction wheels filtering implemented
r286 }
paul
ICD 4.1 taken into account
r283 }
}
}
paul
reaction wheels filtering implemented
r286 void build_sy_lfr_rw_mask( unsigned int channel )
paul
ICD 4.1 taken into account
r283 {
paul
reaction wheels filtering implemented
r286 unsigned char local_rw_fbins_mask[16];
paul
ICD 4.1 taken into account
r283 unsigned char *maskPtr;
double deltaF;
unsigned k;
k = 0;
paul
reaction wheels filtering implemented
r286 maskPtr = NULL;
deltaF = 1.;
paul
ICD 4.1 taken into account
r283 switch (channel)
{
case 0:
paul
setFBinMask corrected...
r313 maskPtr = parameter_dump_packet.sy_lfr_rw_mask.fx.f0_word1;
paul
ICD 4.1 taken into account
r283 deltaF = 96.;
break;
case 1:
paul
setFBinMask corrected...
r313 maskPtr = parameter_dump_packet.sy_lfr_rw_mask.fx.f1_word1;
paul
ICD 4.1 taken into account
r283 deltaF = 16.;
break;
case 2:
paul
setFBinMask corrected...
r313 maskPtr = parameter_dump_packet.sy_lfr_rw_mask.fx.f2_word1;
paul
ICD 4.1 taken into account
r283 deltaF = 1.;
break;
default:
break;
}
for (k = 0; k < 16; k++)
{
paul
reaction wheels filtering implemented
r286 local_rw_fbins_mask[k] = 0xff;
paul
ICD 4.1 taken into account
r283 }
// RW1 F1
paul
reaction wheels filtering implemented
r286 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw1_f1, deltaF, (cp_rpw_sc_rw_f_flags & 0x80) >> 7 ); // [1000 0000]
paul
ICD 4.1 taken into account
r283
// RW1 F2
paul
reaction wheels filtering implemented
r286 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw1_f2, deltaF, (cp_rpw_sc_rw_f_flags & 0x40) >> 6 ); // [0100 0000]
paul
ICD 4.1 taken into account
r283
// RW2 F1
paul
reaction wheels filtering implemented
r286 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw2_f1, deltaF, (cp_rpw_sc_rw_f_flags & 0x20) >> 5 ); // [0010 0000]
paul
ICD 4.1 taken into account
r283
// RW2 F2
paul
reaction wheels filtering implemented
r286 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw2_f2, deltaF, (cp_rpw_sc_rw_f_flags & 0x10) >> 4 ); // [0001 0000]
paul
ICD 4.1 taken into account
r283
// RW3 F1
paul
reaction wheels filtering implemented
r286 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw3_f1, deltaF, (cp_rpw_sc_rw_f_flags & 0x08) >> 3 ); // [0000 1000]
paul
ICD 4.1 taken into account
r283
// RW3 F2
paul
reaction wheels filtering implemented
r286 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw3_f2, deltaF, (cp_rpw_sc_rw_f_flags & 0x04) >> 2 ); // [0000 0100]
paul
ICD 4.1 taken into account
r283
// RW4 F1
paul
reaction wheels filtering implemented
r286 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw4_f1, deltaF, (cp_rpw_sc_rw_f_flags & 0x02) >> 1 ); // [0000 0010]
paul
ICD 4.1 taken into account
r283
// RW4 F2
paul
3.1.0.3...
r296 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw4_f2, deltaF, (cp_rpw_sc_rw_f_flags & 0x01) ); // [0000 0001]
paul
ICD 4.1 taken into account
r283
// update the value of the fbins related to reaction wheels frequency filtering
paul
reaction wheels filtering implemented
r286 if (maskPtr != NULL)
paul
ICD 4.1 taken into account
r283 {
paul
printf are used to test the new setFBinMask (Bug #747 and other similar bugs)
r314 printf("channel = %d\n", channel);
paul
reaction wheels filtering implemented
r286 for (k = 0; k < 16; k++)
{
paul
printf are used to test the new setFBinMask (Bug #747 and other similar bugs)
r314 printf("%x ", local_rw_fbins_mask[k]);
paul
reaction wheels filtering implemented
r286 maskPtr[k] = local_rw_fbins_mask[k];
}
paul
printf are used to test the new setFBinMask (Bug #747 and other similar bugs)
r314 printf("\n", local_rw_fbins_mask[k]);
paul
ICD 4.1 taken into account
r283 }
}
paul
printf are used to test the new setFBinMask (Bug #747 and other similar bugs)
r314 void print_sy_lfr_rw_masks( void )
{
int k;
printf("cp_rpw_sc_rw1_f1 = %f\n", cp_rpw_sc_rw1_f1);
printf("cp_rpw_sc_rw1_f2 = %f\n", cp_rpw_sc_rw1_f2);
printf("cp_rpw_sc_rw2_f1 = %f\n", cp_rpw_sc_rw2_f1);
printf("cp_rpw_sc_rw2_f2 = %f\n", cp_rpw_sc_rw2_f2);
printf("cp_rpw_sc_rw3_f1 = %f\n", cp_rpw_sc_rw3_f1);
printf("cp_rpw_sc_rw3_f2 = %f\n", cp_rpw_sc_rw3_f2);
printf("cp_rpw_sc_rw4_f1 = %f\n", cp_rpw_sc_rw4_f1);
printf("cp_rpw_sc_rw4_f2 = %f\n", cp_rpw_sc_rw4_f2);
printf("f0\n");
for (k = 0; k < 16; k++)
{
printf("%x ", parameter_dump_packet.sy_lfr_rw_mask.fx.f0_word1[k] );
}
printf("\n");
printf("f1\n");
for (k = 0; k < 16; k++)
{
printf("%x ", parameter_dump_packet.sy_lfr_rw_mask.fx.f1_word1[k] );
}
printf("\n");
printf("f2\n");
for (k = 0; k < 16; k++)
{
printf("%x ", parameter_dump_packet.sy_lfr_rw_mask.fx.f2_word1[k] );
}
printf("\n");
}
paul
reaction wheels filtering implemented
r286 void build_sy_lfr_rw_masks( void )
{
build_sy_lfr_rw_mask( 0 );
build_sy_lfr_rw_mask( 1 );
build_sy_lfr_rw_mask( 2 );
paul
printf are used to test the new setFBinMask (Bug #747 and other similar bugs)
r314 print_sy_lfr_rw_masks();
paul
reaction wheels filtering implemented
r286 merge_fbins_masks();
}
void merge_fbins_masks( void )
paul
ICD 4.1 taken into account
r283 {
paul
reaction wheels filtering implemented
r286 unsigned char k;
unsigned char *fbins_f0;
unsigned char *fbins_f1;
unsigned char *fbins_f2;
unsigned char *rw_mask_f0;
unsigned char *rw_mask_f1;
unsigned char *rw_mask_f2;
paul
setFBinMask corrected...
r313 fbins_f0 = parameter_dump_packet.sy_lfr_fbins.fx.f0_word1;
fbins_f1 = parameter_dump_packet.sy_lfr_fbins.fx.f1_word1;
fbins_f2 = parameter_dump_packet.sy_lfr_fbins.fx.f2_word1;
rw_mask_f0 = parameter_dump_packet.sy_lfr_rw_mask.fx.f0_word1;
rw_mask_f1 = parameter_dump_packet.sy_lfr_rw_mask.fx.f1_word1;
rw_mask_f2 = parameter_dump_packet.sy_lfr_rw_mask.fx.f2_word1;
paul
reaction wheels filtering implemented
r286
for( k=0; k < 16; k++ )
{
fbins_masks.merged_fbins_mask_f0[k] = fbins_f0[k] & rw_mask_f0[k];
fbins_masks.merged_fbins_mask_f1[k] = fbins_f1[k] & rw_mask_f1[k];
fbins_masks.merged_fbins_mask_f2[k] = fbins_f2[k] & rw_mask_f2[k];
}
paul
ICD 4.1 taken into account
r283 }
paul
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
r195 //***********
// FBINS MASK
int set_sy_lfr_fbins( ccsdsTelecommandPacket_t *TC )
{
int status;
unsigned int k;
unsigned char *fbins_mask_dump;
unsigned char *fbins_mask_TC;
status = LFR_SUCCESSFUL;
paul
setFBinMask corrected...
r313 fbins_mask_dump = parameter_dump_packet.sy_lfr_fbins.raw;
paul
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
r195 fbins_mask_TC = TC->dataAndCRC;
for (k=0; k < NB_FBINS_MASKS * NB_BYTES_PER_FBINS_MASK; k++)
{
fbins_mask_dump[k] = fbins_mask_TC[k];
}
return status;
}
paul
TC_LFR_LOAD_PAS_FILTER_PAR added to the authorized telecommands...
r282 //***************************
// TC_LFR_LOAD_PAS_FILTER_PAR
paul
minor updates
r285 int check_sy_lfr_filter_parameters( ccsdsTelecommandPacket_t *TC, rtems_id queue_id )
paul
TC_LFR_LOAD_PAS_FILTER_PAR added to the authorized telecommands...
r282 {
int flag;
rtems_status_code status;
unsigned char sy_lfr_pas_filter_enabled;
unsigned char sy_lfr_pas_filter_modulus;
paul
ICD 4.1 taken into account
r283 float sy_lfr_pas_filter_tbad;
paul
TC_LFR_LOAD_PAS_FILTER_PAR added to the authorized telecommands...
r282 unsigned char sy_lfr_pas_filter_offset;
paul
minor updates
r285 float sy_lfr_pas_filter_shift;
paul
ICD 4.1 taken into account
r283 float sy_lfr_sc_rw_delta_f;
paul
minor updates
r285 char *parPtr;
paul
TC_LFR_LOAD_PAS_FILTER_PAR added to the authorized telecommands...
r282
flag = LFR_SUCCESSFUL;
paul
minor updates
r285 sy_lfr_pas_filter_tbad = 0.0;
sy_lfr_pas_filter_shift = 0.0;
sy_lfr_sc_rw_delta_f = 0.0;
parPtr = NULL;
paul
TC_LFR_LOAD_PAS_FILTER_PAR added to the authorized telecommands...
r282
//***************
// get parameters
paul
minor updates
r285 sy_lfr_pas_filter_enabled = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_ENABLED ] & 0x01; // [0000 0001]
sy_lfr_pas_filter_modulus = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_MODULUS ];
copyFloatByChar(
paul
reaction wheels filtering implemented
r286 (unsigned char*) &sy_lfr_pas_filter_tbad,
(unsigned char*) &TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_TBAD ]
paul
minor updates
r285 );
sy_lfr_pas_filter_offset = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_OFFSET ];
copyFloatByChar(
paul
reaction wheels filtering implemented
r286 (unsigned char*) &sy_lfr_pas_filter_shift,
(unsigned char*) &TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_PAS_FILTER_SHIFT ]
paul
minor updates
r285 );
copyFloatByChar(
paul
reaction wheels filtering implemented
r286 (unsigned char*) &sy_lfr_sc_rw_delta_f,
(unsigned char*) &TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_SC_RW_DELTA_F ]
paul
minor updates
r285 );
paul
TC_LFR_LOAD_PAS_FILTER_PAR added to the authorized telecommands...
r282
//******************
paul
minor updates
r285 // CHECK CONSISTENCY
//**************************
paul
TC_LFR_LOAD_PAS_FILTER_PAR added to the authorized telecommands...
r282 // sy_lfr_pas_filter_enabled
paul
minor updates
r285 // nothing to check, value is 0 or 1
//**************************
paul
TC_LFR_LOAD_PAS_FILTER_PAR added to the authorized telecommands...
r282 // sy_lfr_pas_filter_modulus
if ( (sy_lfr_pas_filter_modulus < 4) || (sy_lfr_pas_filter_modulus > 8) )
{
status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_PAS_FILTER_MODULUS+10, sy_lfr_pas_filter_modulus );
flag = WRONG_APP_DATA;
}
paul
minor updates
r285
//***********************
paul
ICD 4.1 taken into account
r283 // sy_lfr_pas_filter_tbad
paul
minor updates
r285 if ( (sy_lfr_pas_filter_tbad < 0.0) || (sy_lfr_pas_filter_tbad > 4.0) )
{
parPtr = (char*) &sy_lfr_pas_filter_tbad;
status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_PAS_FILTER_TBAD+10, parPtr[3] );
flag = WRONG_APP_DATA;
}
//*************************
paul
TC_LFR_LOAD_PAS_FILTER_PAR added to the authorized telecommands...
r282 // sy_lfr_pas_filter_offset
if (flag == LFR_SUCCESSFUL)
{
paul
minor updates
r285 if ( (sy_lfr_pas_filter_offset < 0) || (sy_lfr_pas_filter_offset > 7) )
paul
TC_LFR_LOAD_PAS_FILTER_PAR added to the authorized telecommands...
r282 {
status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_PAS_FILTER_OFFSET+10, sy_lfr_pas_filter_offset );
flag = WRONG_APP_DATA;
}
}
paul
minor updates
r285
//************************
// sy_lfr_pas_filter_shift
if ( (sy_lfr_pas_filter_shift < 0.0) || (sy_lfr_pas_filter_shift > 1.0) )
{
parPtr = (char*) &sy_lfr_pas_filter_shift;
status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_PAS_FILTER_SHIFT+10, parPtr[3] );
flag = WRONG_APP_DATA;
}
//*********************
paul
ICD 4.1 taken into account
r283 // sy_lfr_sc_rw_delta_f
paul
minor updates
r285 // nothing to check, no default value in the ICD
paul
TC_LFR_LOAD_PAS_FILTER_PAR added to the authorized telecommands...
r282
return flag;
}
paul
sync
r193 //**************
// KCOEFFICIENTS
paul
#426 corrected, sy_lfr_kcoeff_frequency >= 36 triggers the transmission of...
r211 int set_sy_lfr_kcoeff( ccsdsTelecommandPacket_t *TC,rtems_id queue_id )
paul
sync
r193 {
paul
rev 3.0.0.6...
r214 unsigned int kcoeff;
paul
sync
r193 unsigned short sy_lfr_kcoeff_frequency;
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 unsigned short bin;
paul
sync
r193 unsigned short *freqPtr;
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 float *kcoeffPtr_norm;
float *kcoeffPtr_sbm;
paul
sync
r193 int status;
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 unsigned char *kcoeffLoadPtr;
unsigned char *kcoeffNormPtr;
paul
Major bug corrected on the handling of TC_LFR_LOAD_COMMON_PAR
r199 unsigned char *kcoeffSbmPtr_a;
unsigned char *kcoeffSbmPtr_b;
paul
sync
r193
status = LFR_SUCCESSFUL;
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 kcoeffPtr_norm = NULL;
kcoeffPtr_sbm = NULL;
bin = 0;
freqPtr = (unsigned short *) &TC->dataAndCRC[DATAFIELD_POS_SY_LFR_KCOEFF_FREQUENCY];
paul
sync
r193 sy_lfr_kcoeff_frequency = *freqPtr;
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 if ( sy_lfr_kcoeff_frequency >= NB_BINS_COMPRESSED_SM )
paul
sync
r193 {
PRINTF1("ERR *** in set_sy_lfr_kcoeff_frequency *** sy_lfr_kcoeff_frequency = %d\n", sy_lfr_kcoeff_frequency)
paul
bug #426 corrected
r215 status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_KCOEFF_FREQUENCY + 10 + 1,
TC->dataAndCRC[DATAFIELD_POS_SY_LFR_KCOEFF_FREQUENCY + 1] ); // +1 to get the LSB instead of the MSB
paul
#426 corrected, sy_lfr_kcoeff_frequency >= 36 triggers the transmission of...
r211 status = LFR_DEFAULT;
paul
sync
r193 }
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 else
{
if ( ( sy_lfr_kcoeff_frequency >= 0 )
&& ( sy_lfr_kcoeff_frequency < NB_BINS_COMPRESSED_SM_F0 ) )
{
kcoeffPtr_norm = k_coeff_intercalib_f0_norm;
kcoeffPtr_sbm = k_coeff_intercalib_f0_sbm;
bin = sy_lfr_kcoeff_frequency;
}
else if ( ( sy_lfr_kcoeff_frequency >= NB_BINS_COMPRESSED_SM_F0 )
&& ( sy_lfr_kcoeff_frequency < (NB_BINS_COMPRESSED_SM_F0 + NB_BINS_COMPRESSED_SM_F1) ) )
{
kcoeffPtr_norm = k_coeff_intercalib_f1_norm;
kcoeffPtr_sbm = k_coeff_intercalib_f1_sbm;
bin = sy_lfr_kcoeff_frequency - NB_BINS_COMPRESSED_SM_F0;
}
else if ( ( sy_lfr_kcoeff_frequency >= (NB_BINS_COMPRESSED_SM_F0 + NB_BINS_COMPRESSED_SM_F1) )
&& ( sy_lfr_kcoeff_frequency < (NB_BINS_COMPRESSED_SM_F0 + NB_BINS_COMPRESSED_SM_F1 + NB_BINS_COMPRESSED_SM_F2) ) )
{
kcoeffPtr_norm = k_coeff_intercalib_f2;
kcoeffPtr_sbm = NULL;
bin = sy_lfr_kcoeff_frequency - (NB_BINS_COMPRESSED_SM_F0 + NB_BINS_COMPRESSED_SM_F1);
}
}
paul
bug corrected TC_LFR_LOAD_KCOEFFICIENTS with sy_lfr_kcoeff_frequency >= 24
r207 if (kcoeffPtr_norm != NULL ) // update K coefficient for NORMAL data products
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 {
paul
rev 3.0.0.6...
r214 for (kcoeff=0; kcoeff<NB_K_COEFF_PER_BIN; kcoeff++)
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 {
paul
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
r195 // destination
paul
rev 3.0.0.6...
r214 kcoeffNormPtr = (unsigned char*) &kcoeffPtr_norm[ (bin * NB_K_COEFF_PER_BIN) + kcoeff ];
paul
bug corrected TC_LFR_LOAD_KCOEFFICIENTS with sy_lfr_kcoeff_frequency >= 24
r207 // source
paul
rev 3.0.0.6...
r214 kcoeffLoadPtr = (unsigned char*) &TC->dataAndCRC[DATAFIELD_POS_SY_LFR_KCOEFF_1 + NB_BYTES_PER_FLOAT * kcoeff];
paul
bug corrected TC_LFR_LOAD_KCOEFFICIENTS with sy_lfr_kcoeff_frequency >= 24
r207 // copy source to destination
copyFloatByChar( kcoeffNormPtr, kcoeffLoadPtr );
}
}
if (kcoeffPtr_sbm != NULL ) // update K coefficient for SBM data products
{
paul
rev 3.0.0.6...
r214 for (kcoeff=0; kcoeff<NB_K_COEFF_PER_BIN; kcoeff++)
paul
bug corrected TC_LFR_LOAD_KCOEFFICIENTS with sy_lfr_kcoeff_frequency >= 24
r207 {
// destination
paul
rev 3.0.0.6...
r214 kcoeffSbmPtr_a= (unsigned char*) &kcoeffPtr_sbm[ ( (bin * NB_K_COEFF_PER_BIN) + kcoeff) * 2 ];
kcoeffSbmPtr_b= (unsigned char*) &kcoeffPtr_sbm[ ( (bin * NB_K_COEFF_PER_BIN) + kcoeff) * 2 + 1 ];
paul
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
r195 // source
paul
rev 3.0.0.6...
r214 kcoeffLoadPtr = (unsigned char*) &TC->dataAndCRC[DATAFIELD_POS_SY_LFR_KCOEFF_1 + NB_BYTES_PER_FLOAT * kcoeff];
paul
Major bug corrected on the handling of TC_LFR_LOAD_COMMON_PAR
r199 // copy source to destination
copyFloatByChar( kcoeffSbmPtr_a, kcoeffLoadPtr );
copyFloatByChar( kcoeffSbmPtr_b, kcoeffLoadPtr );
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 }
}
paul
sync
r193
paul
rev 3.0.0.6...
r214 // print_k_coeff();
paul
sync
r193 return status;
}
paul
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
r195 void copyFloatByChar( unsigned char *destination, unsigned char *source )
{
destination[0] = source[0];
destination[1] = source[1];
destination[2] = source[2];
destination[3] = source[3];
}
paul
initialization of parameter_dump_packet updated with filtering elements
r294 void floatToChar( float value, unsigned char* ptr)
{
unsigned char* valuePtr;
valuePtr = (unsigned char*) &value;
ptr[0] = valuePtr[0];
paul
-O3 used for optimization...
r310 ptr[1] = valuePtr[1];
ptr[2] = valuePtr[2];
ptr[3] = valuePtr[3];
paul
initialization of parameter_dump_packet updated with filtering elements
r294 }
paul
Ignore doc files...
r46 //**********
// init dump
void init_parameter_dump( void )
{
/** This function initialize the parameter_dump_packet global variable with default values.
*
*/
paul
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
r195 unsigned int k;
paul
Ignore doc files...
r46 parameter_dump_packet.targetLogicalAddress = CCSDS_DESTINATION_ID;
parameter_dump_packet.protocolIdentifier = CCSDS_PROTOCOLE_ID;
parameter_dump_packet.reserved = CCSDS_RESERVED;
parameter_dump_packet.userApplication = CCSDS_USER_APP;
paul
Sync...
r116 parameter_dump_packet.packetID[0] = (unsigned char) (APID_TM_PARAMETER_DUMP >> 8);
parameter_dump_packet.packetID[1] = (unsigned char) APID_TM_PARAMETER_DUMP;
paul
Ignore doc files...
r46 parameter_dump_packet.packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_STANDALONE;
parameter_dump_packet.packetSequenceControl[1] = TM_PACKET_SEQ_CNT_DEFAULT;
parameter_dump_packet.packetLength[0] = (unsigned char) (PACKET_LENGTH_PARAMETER_DUMP >> 8);
parameter_dump_packet.packetLength[1] = (unsigned char) PACKET_LENGTH_PARAMETER_DUMP;
// DATA FIELD HEADER
parameter_dump_packet.spare1_pusVersion_spare2 = SPARE1_PUSVERSION_SPARE2;
parameter_dump_packet.serviceType = TM_TYPE_PARAMETER_DUMP;
parameter_dump_packet.serviceSubType = TM_SUBTYPE_PARAMETER_DUMP;
parameter_dump_packet.destinationID = TM_DESTINATION_ID_GROUND;
parameter_dump_packet.time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
parameter_dump_packet.time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
parameter_dump_packet.time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
parameter_dump_packet.time[3] = (unsigned char) (time_management_regs->coarse_time);
parameter_dump_packet.time[4] = (unsigned char) (time_management_regs->fine_time>>8);
parameter_dump_packet.time[5] = (unsigned char) (time_management_regs->fine_time);
parameter_dump_packet.sid = SID_PARAMETER_DUMP;
//******************
// COMMON PARAMETERS
paul
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
r195 parameter_dump_packet.sy_lfr_common_parameters_spare = DEFAULT_SY_LFR_COMMON0;
parameter_dump_packet.sy_lfr_common_parameters = DEFAULT_SY_LFR_COMMON1;
paul
Ignore doc files...
r46
//******************
// NORMAL PARAMETERS
paul
Many corrections done after Logiscope analysis
r166 parameter_dump_packet.sy_lfr_n_swf_l[0] = (unsigned char) (DFLT_SY_LFR_N_SWF_L >> 8);
parameter_dump_packet.sy_lfr_n_swf_l[1] = (unsigned char) (DFLT_SY_LFR_N_SWF_L );
parameter_dump_packet.sy_lfr_n_swf_p[0] = (unsigned char) (DFLT_SY_LFR_N_SWF_P >> 8);
parameter_dump_packet.sy_lfr_n_swf_p[1] = (unsigned char) (DFLT_SY_LFR_N_SWF_P );
parameter_dump_packet.sy_lfr_n_asm_p[0] = (unsigned char) (DFLT_SY_LFR_N_ASM_P >> 8);
parameter_dump_packet.sy_lfr_n_asm_p[1] = (unsigned char) (DFLT_SY_LFR_N_ASM_P );
parameter_dump_packet.sy_lfr_n_bp_p0 = (unsigned char) DFLT_SY_LFR_N_BP_P0;
parameter_dump_packet.sy_lfr_n_bp_p1 = (unsigned char) DFLT_SY_LFR_N_BP_P1;
parameter_dump_packet.sy_lfr_n_cwf_long_f3 = (unsigned char) DFLT_SY_LFR_N_CWF_LONG_F3;
paul
Ignore doc files...
r46
//*****************
// BURST PARAMETERS
parameter_dump_packet.sy_lfr_b_bp_p0 = (unsigned char) DEFAULT_SY_LFR_B_BP_P0;
parameter_dump_packet.sy_lfr_b_bp_p1 = (unsigned char) DEFAULT_SY_LFR_B_BP_P1;
//****************
// SBM1 PARAMETERS
parameter_dump_packet.sy_lfr_s1_bp_p0 = (unsigned char) DEFAULT_SY_LFR_S1_BP_P0; // min value is 0.25 s for the period
parameter_dump_packet.sy_lfr_s1_bp_p1 = (unsigned char) DEFAULT_SY_LFR_S1_BP_P1;
//****************
// SBM2 PARAMETERS
parameter_dump_packet.sy_lfr_s2_bp_p0 = (unsigned char) DEFAULT_SY_LFR_S2_BP_P0;
parameter_dump_packet.sy_lfr_s2_bp_p1 = (unsigned char) DEFAULT_SY_LFR_S2_BP_P1;
paul
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
r195
//************
// FBINS MASKS
for (k=0; k < NB_FBINS_MASKS * NB_BYTES_PER_FBINS_MASK; k++)
{
paul
setFBinMask corrected...
r313 parameter_dump_packet.sy_lfr_fbins.raw[k] = 0xff;
paul
R2 parameter added to TC_LFR_LOAD_COMMON_PAR...
r195 }
paul
initialization of parameter_dump_packet updated with filtering elements
r294
// PAS FILTER PARAMETERS
parameter_dump_packet.pa_rpw_spare8_2 = 0x00;
parameter_dump_packet.spare_sy_lfr_pas_filter_enabled = 0x00;
parameter_dump_packet.sy_lfr_pas_filter_modulus = DEFAULT_SY_LFR_PAS_FILTER_MODULUS;
floatToChar( DEFAULT_SY_LFR_PAS_FILTER_TBAD, parameter_dump_packet.sy_lfr_pas_filter_tbad );
parameter_dump_packet.sy_lfr_pas_filter_offset = DEFAULT_SY_LFR_PAS_FILTER_OFFSET;
floatToChar( DEFAULT_SY_LFR_PAS_FILTER_SHIFT, parameter_dump_packet.sy_lfr_pas_filter_shift );
floatToChar( DEFAULT_SY_LFR_SC_RW_DELTA_F, parameter_dump_packet.sy_lfr_sc_rw_delta_f );
// LFR_RW_MASK
for (k=0; k < NB_FBINS_MASKS * NB_BYTES_PER_FBINS_MASK; k++)
{
paul
setFBinMask corrected...
r313 parameter_dump_packet.sy_lfr_rw_mask.raw[k] = 0xff;
paul
initialization of parameter_dump_packet updated with filtering elements
r294 }
paul
Ignore doc files...
r46 }
paul
Header files inclusion reworked...
r40
paul
TC_LFR_LOAD_KCOEFFICIENTS...
r194 void init_kcoefficients_dump( void )
{
init_kcoefficients_dump_packet( &kcoefficients_dump_1, 1, 30 );
init_kcoefficients_dump_packet( &kcoefficients_dump_2, 2, 6 );
kcoefficient_node_1.previous = NULL;
kcoefficient_node_1.next = NULL;
kcoefficient_node_1.sid = TM_CODE_K_DUMP;
kcoefficient_node_1.coarseTime = 0x00;
kcoefficient_node_1.fineTime = 0x00;
kcoefficient_node_1.buffer_address = (int) &kcoefficients_dump_1;
kcoefficient_node_1.status = 0x00;
kcoefficient_node_2.previous = NULL;
kcoefficient_node_2.next = NULL;
kcoefficient_node_2.sid = TM_CODE_K_DUMP;
kcoefficient_node_2.coarseTime = 0x00;
kcoefficient_node_2.fineTime = 0x00;
kcoefficient_node_2.buffer_address = (int) &kcoefficients_dump_2;
kcoefficient_node_2.status = 0x00;
}
void init_kcoefficients_dump_packet( Packet_TM_LFR_KCOEFFICIENTS_DUMP_t *kcoefficients_dump, unsigned char pkt_nr, unsigned char blk_nr )
{
unsigned int k;
unsigned int packetLength;
packetLength = blk_nr * 130 + 20 - CCSDS_TC_TM_PACKET_OFFSET; // 4 bytes for the CCSDS header
kcoefficients_dump->targetLogicalAddress = CCSDS_DESTINATION_ID;
kcoefficients_dump->protocolIdentifier = CCSDS_PROTOCOLE_ID;
kcoefficients_dump->reserved = CCSDS_RESERVED;
kcoefficients_dump->userApplication = CCSDS_USER_APP;
kcoefficients_dump->packetID[0] = (unsigned char) (APID_TM_PARAMETER_DUMP >> 8);;
kcoefficients_dump->packetID[1] = (unsigned char) APID_TM_PARAMETER_DUMP;;
kcoefficients_dump->packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_STANDALONE;
kcoefficients_dump->packetSequenceControl[1] = TM_PACKET_SEQ_CNT_DEFAULT;
kcoefficients_dump->packetLength[0] = (unsigned char) (packetLength >> 8);
kcoefficients_dump->packetLength[1] = (unsigned char) packetLength;
// DATA FIELD HEADER
kcoefficients_dump->spare1_pusVersion_spare2 = SPARE1_PUSVERSION_SPARE2;
kcoefficients_dump->serviceType = TM_TYPE_K_DUMP;
kcoefficients_dump->serviceSubType = TM_SUBTYPE_K_DUMP;
kcoefficients_dump->destinationID= TM_DESTINATION_ID_GROUND;
kcoefficients_dump->time[0] = 0x00;
kcoefficients_dump->time[1] = 0x00;
kcoefficients_dump->time[2] = 0x00;
kcoefficients_dump->time[3] = 0x00;
kcoefficients_dump->time[4] = 0x00;
kcoefficients_dump->time[5] = 0x00;
kcoefficients_dump->sid = SID_K_DUMP;
kcoefficients_dump->pkt_cnt = 2;
kcoefficients_dump->pkt_nr = pkt_nr;
kcoefficients_dump->blk_nr = blk_nr;
//******************
// SOURCE DATA repeated N times with N in [0 .. PA_LFR_KCOEFF_BLK_NR]
// one blk is 2 + 4 * 32 = 130 bytes, 30 blks max in one packet (30 * 130 = 3900)
for (k=0; k<3900; k++)
{
kcoefficients_dump->kcoeff_blks[k] = 0x00;
}
}
paul
Header files inclusion reworked...
r40
paul
printf removed or replaced by PRINTF macros...
r227 void increment_seq_counter_destination_id_dump( unsigned char *packet_sequence_control, unsigned char destination_id )
paul
rev 3.0.0.6...
r214 {
paul
printf removed or replaced by PRINTF macros...
r227 /** This function increment the packet sequence control parameter of a TC, depending on its destination ID.
*
* @param packet_sequence_control points to the packet sequence control which will be incremented
* @param destination_id is the destination ID of the TM, there is one counter by destination ID
*
* If the destination ID is not known, a dedicated counter is incremented.
*
*/
paul
Header files inclusion reworked...
r40
paul
printf removed or replaced by PRINTF macros...
r227 unsigned short sequence_cnt;
unsigned short segmentation_grouping_flag;
unsigned short new_packet_sequence_control;
unsigned char i;
switch (destination_id)
paul
rev 3.0.0.6...
r214 {
paul
printf removed or replaced by PRINTF macros...
r227 case SID_TC_GROUND:
i = GROUND;
break;
case SID_TC_MISSION_TIMELINE:
i = MISSION_TIMELINE;
break;
case SID_TC_TC_SEQUENCES:
i = TC_SEQUENCES;
break;
case SID_TC_RECOVERY_ACTION_CMD:
i = RECOVERY_ACTION_CMD;
break;
case SID_TC_BACKUP_MISSION_TIMELINE:
i = BACKUP_MISSION_TIMELINE;
break;
case SID_TC_DIRECT_CMD:
i = DIRECT_CMD;
break;
case SID_TC_SPARE_GRD_SRC1:
i = SPARE_GRD_SRC1;
break;
case SID_TC_SPARE_GRD_SRC2:
i = SPARE_GRD_SRC2;
break;
case SID_TC_OBCP:
i = OBCP;
break;
case SID_TC_SYSTEM_CONTROL:
i = SYSTEM_CONTROL;
break;
case SID_TC_AOCS:
i = AOCS;
break;
case SID_TC_RPW_INTERNAL:
i = RPW_INTERNAL;
break;
default:
i = GROUND;
break;
paul
rev 3.0.0.6...
r214 }
paul
Header files inclusion reworked...
r40
paul
printf removed or replaced by PRINTF macros...
r227 segmentation_grouping_flag = TM_PACKET_SEQ_CTRL_STANDALONE << 8;
sequence_cnt = sequenceCounters_TM_DUMP[ i ] & 0x3fff;
new_packet_sequence_control = segmentation_grouping_flag | sequence_cnt ;
paul
rev 3.0.0.6...
r214
paul
printf removed or replaced by PRINTF macros...
r227 packet_sequence_control[0] = (unsigned char) (new_packet_sequence_control >> 8);
packet_sequence_control[1] = (unsigned char) (new_packet_sequence_control );
// increment the sequence counter
if ( sequenceCounters_TM_DUMP[ i ] < SEQ_CNT_MAX )
paul
rev 3.0.0.6...
r214 {
paul
printf removed or replaced by PRINTF macros...
r227 sequenceCounters_TM_DUMP[ i ] = sequenceCounters_TM_DUMP[ i ] + 1;
}
else
{
sequenceCounters_TM_DUMP[ i ] = 0;
paul
rev 3.0.0.6...
r214 }
}