##// END OF EJS Templates
begin to work on:...
begin to work on: Bug 984 FFT retirée alors que en dehors du TBAD Bug 978 Mauvais nombre de FFT retiré lors du filtrage PAS commit before going back to previous state for 3.2.0.4 delivery

File last commit:

r352:c07c16776bd4 R3++
r353:06a7ca24f3e7 R3++
Show More
tc_handler.c
1673 lines | 53.2 KiB | text/x-c | CLexer
paul
Header files inclusion reworked...
r40 /** Functions and tasks related to TeleCommand handling.
*
* @file
* @author P. LEROY
*
* A group of functions to handle TeleCommands:\n
* action launching\n
* TC parsing\n
* ...
*
*/
#include "tc_handler.h"
paul
2.0.2.2...
r187 #include "math.h"
paul@pc-solar1.lab-lpp.local
Naming convention changed...
r5
paul@pc-solar1.lab-lpp.local
Minor updates
r7 //***********
// RTEMS TASK
paul@pc-solar1.lab-lpp.local
Naming convention changed...
r5
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 rtems_task actn_task( rtems_task_argument unused )
{
paul
Header files inclusion reworked...
r40 /** This RTEMS task is responsible for launching actions upton the reception of valid TeleCommands.
*
* @param unused is the starting argument of the RTEMS task
*
* The ACTN task waits for data coming from an RTEMS msesage queue. When data arrives, it launches specific actions depending
* on the incoming TeleCommand.
*
*/
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 int result;
rtems_status_code status; // RTEMS status code
paul
alignment added to variables initialized by memset...
r338 ccsdsTelecommandPacket_t __attribute__((aligned(4))) TC; // TC sent to the ACTN task
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 size_t size; // size of the incoming TC packet
unsigned char subtype; // subtype of the current TC packet
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 unsigned char time[BYTES_PER_TIME];
paul
Last commit before release 0-13...
r35 rtems_id queue_rcv_id;
rtems_id queue_snd_id;
paul
Bug #801 Don_Initialisation_P2
r320 memset(&TC, 0, sizeof(ccsdsTelecommandPacket_t));
size = 0;
queue_rcv_id = RTEMS_ID_NONE;
queue_snd_id = RTEMS_ID_NONE;
paul
fsw-1-0...
r82 status = get_message_queue_id_recv( &queue_rcv_id );
paul
Last commit before release 0-13...
r35 if (status != RTEMS_SUCCESSFUL)
{
paul
fsw-1-0...
r82 PRINTF1("in ACTN *** ERR get_message_queue_id_recv %d\n", status)
paul
Last commit before release 0-13...
r35 }
paul
fsw-1-0...
r82 status = get_message_queue_id_send( &queue_snd_id );
paul
Last commit before release 0-13...
r35 if (status != RTEMS_SUCCESSFUL)
{
paul
fsw-1-0...
r82 PRINTF1("in ACTN *** ERR get_message_queue_id_send %d\n", status)
paul
Last commit before release 0-13...
r35 }
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23
result = LFR_SUCCESSFUL;
subtype = 0; // subtype of the current TC packet
paul@pc-solar1.lab-lpp.local
Naming convention changed...
r5
paul
minor updates
r285 BOOT_PRINTF("in ACTN *** \n");
paul@pc-solar1.lab-lpp.local
Several TC actions added...
r11
paul
minor updates
r285 while(1)
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 {
paul
Last commit before release 0-13...
r35 status = rtems_message_queue_receive( queue_rcv_id, (char*) &TC, &size,
paul
enter_mode removed...
r237 RTEMS_WAIT, RTEMS_NO_TIMEOUT);
paul
fsw-0-23...
r75 getTime( time ); // set time to the current time
paul
Minor modifications to meet Logiscope requirements
r77 if (status!=RTEMS_SUCCESSFUL)
{
PRINTF1("ERR *** in task ACTN *** error receiving a message, code %d \n", status)
}
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 else
{
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 subtype = TC.serviceSubType;
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 switch(subtype)
{
paul
R3 updates. TC handlers added for the new telecommands:...
r192 case TC_SUBTYPE_RESET:
result = action_reset( &TC, queue_snd_id, time );
close_action( &TC, result, queue_snd_id );
break;
case TC_SUBTYPE_LOAD_COMM:
result = action_load_common_par( &TC );
close_action( &TC, result, queue_snd_id );
break;
case TC_SUBTYPE_LOAD_NORM:
result = action_load_normal_par( &TC, queue_snd_id, time );
close_action( &TC, result, queue_snd_id );
break;
case TC_SUBTYPE_LOAD_BURST:
result = action_load_burst_par( &TC, queue_snd_id, time );
close_action( &TC, result, queue_snd_id );
break;
case TC_SUBTYPE_LOAD_SBM1:
result = action_load_sbm1_par( &TC, queue_snd_id, time );
close_action( &TC, result, queue_snd_id );
break;
case TC_SUBTYPE_LOAD_SBM2:
result = action_load_sbm2_par( &TC, queue_snd_id, time );
close_action( &TC, result, queue_snd_id );
break;
case TC_SUBTYPE_DUMP:
paul
bug #507 corrected (destination_id of TM_LFR_PARAMETER_DUMP)
r222 result = action_dump_par( &TC, queue_snd_id );
paul
R3 updates. TC handlers added for the new telecommands:...
r192 close_action( &TC, result, queue_snd_id );
break;
case TC_SUBTYPE_ENTER:
result = action_enter_mode( &TC, queue_snd_id );
close_action( &TC, result, queue_snd_id );
break;
case TC_SUBTYPE_UPDT_INFO:
result = action_update_info( &TC, queue_snd_id );
close_action( &TC, result, queue_snd_id );
break;
case TC_SUBTYPE_EN_CAL:
result = action_enable_calibration( &TC, queue_snd_id, time );
close_action( &TC, result, queue_snd_id );
break;
case TC_SUBTYPE_DIS_CAL:
result = action_disable_calibration( &TC, queue_snd_id, time );
close_action( &TC, result, queue_snd_id );
break;
case TC_SUBTYPE_LOAD_K:
result = action_load_kcoefficients( &TC, queue_snd_id, time );
close_action( &TC, result, queue_snd_id );
break;
case TC_SUBTYPE_DUMP_K:
result = action_dump_kcoefficients( &TC, queue_snd_id, time );
close_action( &TC, result, queue_snd_id );
break;
case TC_SUBTYPE_LOAD_FBINS:
result = action_load_fbins_mask( &TC, queue_snd_id, time );
close_action( &TC, result, queue_snd_id );
break;
paul
ICD 4.1 taken into account
r283 case TC_SUBTYPE_LOAD_FILTER_PAR:
result = action_load_filter_par( &TC, queue_snd_id, time );
paul
TC_LFR_LOAD_PAS_FILTER_PAR added to the authorized telecommands...
r282 close_action( &TC, result, queue_snd_id );
break;
paul
R3 updates. TC handlers added for the new telecommands:...
r192 case TC_SUBTYPE_UPDT_TIME:
result = action_update_time( &TC );
close_action( &TC, result, queue_snd_id );
break;
default:
break;
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 }
}
}
}
//***********
// TC ACTIONS
paul@pc-solar1.lab-lpp.local
FSW modified to have correct answers to TC_LFR_DUMP_PAR
r15
paul
fsw-0-23...
r75 int action_reset(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time)
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 {
paul
Header files inclusion reworked...
r40 /** This function executes specific actions when a TC_LFR_RESET TeleCommand has been received.
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM transmission by the SpaceWire driver
*
*/
paul
3.0.0.15
r258 PRINTF("this is the end!!!\n");
exit(0);
paul
fsw-0-23...
r75 send_tm_lfr_tc_exe_not_implemented( TC, queue_id, time );
paul
3.0.0.15
r258
paul@pc-solar1.lab-lpp.local
Current version with modes NORMAL and SBM1 operational
r21 return LFR_DEFAULT;
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 }
paul
the TC_ENTER_MODE time parameter is taken into account...
r111 int action_enter_mode(ccsdsTelecommandPacket_t *TC, rtems_id queue_id )
paul
packet emission task added...
r33 {
paul
Header files inclusion reworked...
r40 /** This function executes specific actions when a TC_LFR_ENTER_MODE TeleCommand has been received.
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM transmission by the SpaceWire driver
*
*/
paul
packet emission task added...
r33 rtems_status_code status;
unsigned char requestedMode;
paul
the TC_ENTER_MODE time parameter is taken into account...
r111 unsigned int transitionCoarseTime;
paul
the interrupt sub routine related to the waveform picker is now lighter...
r112 unsigned char * bytePosPtr;
paul
packet emission task added...
r33
paul
the interrupt sub routine related to the waveform picker is now lighter...
r112 bytePosPtr = (unsigned char *) &TC->packetID;
requestedMode = bytePosPtr[ BYTE_POS_CP_MODE_LFR_SET ];
paul
Bug #906 calibration signal
r339 copyInt32ByChar( (char*) &transitionCoarseTime, &bytePosPtr[ BYTE_POS_CP_LFR_ENTER_MODE_TIME ] );
paul
alignment added to variables initialized by memset...
r338 transitionCoarseTime = transitionCoarseTime & COARSE_TIME_MASK;
paul
rev 1.0.0.3
r109 status = check_mode_value( requestedMode );
paul
rev 1.0.0.4
r110
paul
the interrupt sub routine related to the waveform picker is now lighter...
r112 if ( status != LFR_SUCCESSFUL ) // the mode value is inconsistent
paul
packet emission task added...
r33 {
paul
the interrupt sub routine related to the waveform picker is now lighter...
r112 send_tm_lfr_tc_exe_inconsistent( TC, queue_id, BYTE_POS_CP_MODE_LFR_SET, requestedMode );
paul
packet emission task added...
r33 }
paul
minor updates on documentation
r240
paul
Last commit before leaving!
r219 else // the mode value is valid, check the transition
paul
packet emission task added...
r33 {
paul
rev 1.0.0.3
r109 status = check_mode_transition(requestedMode);
paul
the TC_ENTER_MODE time parameter is taken into account...
r111 if (status != LFR_SUCCESSFUL)
paul
rev 1.0.0.3
r109 {
paul
the TC_ENTER_MODE time parameter is taken into account...
r111 PRINTF("ERR *** in action_enter_mode *** check_mode_transition\n")
paul
enter_mode removed...
r237 send_tm_lfr_tc_exe_not_executable( TC, queue_id );
paul
TM_LFR_TC_EXE packet sending reworked...
r37 }
paul
packet emission task added...
r33 }
paul
Last commit before leaving!
r219 if ( status == LFR_SUCCESSFUL ) // the transition is valid, check the date
paul
the TC_ENTER_MODE time parameter is taken into account...
r111 {
status = check_transition_date( transitionCoarseTime );
if (status != LFR_SUCCESSFUL)
{
paul
a wrong date implies the generation of a TM_LFR_TC_EXE_NOT_EXECUTABLE...
r254 PRINTF("ERR *** in action_enter_mode *** check_transition_date\n");
send_tm_lfr_tc_exe_not_executable(TC, queue_id );
paul
the TC_ENTER_MODE time parameter is taken into account...
r111 }
}
if ( status == LFR_SUCCESSFUL ) // the date is valid, enter the mode
{
PRINTF1("OK *** in action_enter_mode *** enter mode %d\n", requestedMode);
paul
enter_mode removed...
r237
switch(requestedMode)
{
case LFR_MODE_STANDBY:
status = enter_mode_standby();
break;
case LFR_MODE_NORMAL:
status = enter_mode_normal( transitionCoarseTime );
break;
case LFR_MODE_BURST:
status = enter_mode_burst( transitionCoarseTime );
break;
case LFR_MODE_SBM1:
status = enter_mode_sbm1( transitionCoarseTime );
break;
case LFR_MODE_SBM2:
status = enter_mode_sbm2( transitionCoarseTime );
break;
default:
break;
}
paul
the TC_ENTER_MODE time parameter is taken into account...
r111
paul
ASM restart sequence updated at the interrupt service routine level...
r259 if (status != RTEMS_SUCCESSFUL)
{
status = LFR_EXE_ERROR;
}
paul
3.0.0.15
r258 }
paul
packet emission task added...
r33 return status;
}
paul
Header files inclusion reworked...
r40 int action_update_info(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
{
/** This function executes specific actions when a TC_LFR_UPDATE_INFO TeleCommand has been received.
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM transmission by the SpaceWire driver
*
paul
Ignore doc files...
r46 * @return LFR directive status code:
* - LFR_DEFAULT
* - LFR_SUCCESSFUL
*
paul
Header files inclusion reworked...
r40 */
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 unsigned int val;
paul
rev 1.0.0.2...
r104 unsigned int status;
unsigned char mode;
paul
the interrupt sub routine related to the waveform picker is now lighter...
r112 unsigned char * bytePosPtr;
paul
AVGV modified...
r352 int pos;
float value;
pos = INIT_CHAR;
value = INIT_FLOAT;
status = LFR_DEFAULT;
paul
the interrupt sub routine related to the waveform picker is now lighter...
r112
bytePosPtr = (unsigned char *) &TC->packetID;
paul@pc-solar1.lab-lpp.local
Updates of the ICD taken into account...
r18
paul
Corrections:...
r107 // check LFR mode
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 mode = (bytePosPtr[ BYTE_POS_UPDATE_INFO_PARAMETERS_SET5 ] & BITS_LFR_MODE) >> SHIFT_LFR_MODE;
paul
rev 1.0.0.2...
r104 status = check_update_info_hk_lfr_mode( mode );
paul
Corrections:...
r107 if (status == LFR_SUCCESSFUL) // check TDS mode
paul
rev 1.0.0.2...
r104 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 mode = (bytePosPtr[ BYTE_POS_UPDATE_INFO_PARAMETERS_SET6 ] & BITS_TDS_MODE) >> SHIFT_TDS_MODE;
paul
rev 1.0.0.2...
r104 status = check_update_info_hk_tds_mode( mode );
}
paul
Corrections:...
r107 if (status == LFR_SUCCESSFUL) // check THR mode
paul
rev 1.0.0.2...
r104 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 mode = (bytePosPtr[ BYTE_POS_UPDATE_INFO_PARAMETERS_SET6 ] & BITS_THR_MODE);
paul
rev 1.0.0.2...
r104 status = check_update_info_hk_thr_mode( mode );
}
paul
AVGV modified...
r352 if (status == LFR_SUCCESSFUL) // check reaction wheels frequencies
paul
rev 1.0.0.2...
r104 {
paul
AVGV modified...
r352 status = check_all_sy_lfr_rw_f(TC, &pos, &value);
paul
rev 1.0.0.2...
r104 }
paul
AVGV modified...
r352 // if the parameters checking succeeds, udpate all parameters
if (status == LFR_SUCCESSFUL)
{
// pa_bia_status_info
// => pa_bia_mode_mux_set 3 bits
// => pa_bia_mode_hv_enabled 1 bit
// => pa_bia_mode_bias1_enabled 1 bit
// => pa_bia_mode_bias2_enabled 1 bit
// => pa_bia_mode_bias3_enabled 1 bit
// => pa_bia_on_off (cp_dpu_bias_on_off)
pa_bia_status_info = bytePosPtr[ BYTE_POS_UPDATE_INFO_PARAMETERS_SET2 ] & BITS_BIA; // [1111 1110]
pa_bia_status_info = pa_bia_status_info
| (bytePosPtr[ BYTE_POS_UPDATE_INFO_PARAMETERS_SET1 ] & 1);
paul
bug #456 pa_bia_status_info byte is updated upon the reception of...
r224
paul
AVGV modified...
r352 // REACTION_WHEELS_FREQUENCY, copy the incoming parameters in the local variable (to be copied in HK packets)
getReactionWheelsFrequencies( TC );
set_hk_lfr_sc_rw_f_flags();
build_sy_lfr_rw_masks();
// once the masks are built, they have to be merged with the fbins_mask
merge_fbins_masks();
paul
ICD 4.1 taken into account
r283
paul
AVGV modified...
r352 // increase the TC_LFR_UPDATE_INFO counter
if (status == LFR_SUCCESSFUL) // if the parameter check is successful
{
val = (housekeeping_packet.hk_lfr_update_info_tc_cnt[0] * CONST_256)
+ housekeeping_packet.hk_lfr_update_info_tc_cnt[1];
val++;
housekeeping_packet.hk_lfr_update_info_tc_cnt[0] = (unsigned char) (val >> SHIFT_1_BYTE);
housekeeping_packet.hk_lfr_update_info_tc_cnt[1] = (unsigned char) (val);
}
}
paul
Bug #649 corrected, TC with Length > 228 are dropped by the driver, not parsed
r316
paul
AVGV modified...
r352 return status;
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 }
paul
fsw-0-23...
r75 int action_enable_calibration(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time)
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 {
paul
Header files inclusion reworked...
r40 /** This function executes specific actions when a TC_LFR_ENABLE_CALIBRATION TeleCommand has been received.
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM transmission by the SpaceWire driver
*
*/
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 int result;
result = LFR_DEFAULT;
paul
Bug #354, hk_sy_lfr_calib_enabled is set in TM_LFR_HK packets
r206 setCalibration( true );
paul
2.0.2.2...
r187
result = LFR_SUCCESSFUL;
paul
rev 1.0.0.2...
r104
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 return result;
}
paul
fsw-0-23...
r75 int action_disable_calibration(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time)
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 {
paul
Header files inclusion reworked...
r40 /** This function executes specific actions when a TC_LFR_DISABLE_CALIBRATION TeleCommand has been received.
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM transmission by the SpaceWire driver
*
*/
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 int result;
result = LFR_DEFAULT;
paul
Bug #354, hk_sy_lfr_calib_enabled is set in TM_LFR_HK packets
r206 setCalibration( false );
paul
2.0.2.2...
r187
result = LFR_SUCCESSFUL;
paul
rev 1.0.0.2...
r104
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 return result;
}
paul
packet emission task added...
r33 int action_update_time(ccsdsTelecommandPacket_t *TC)
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 {
paul
Header files inclusion reworked...
r40 /** This function executes specific actions when a TC_LFR_UPDATE_TIME TeleCommand has been received.
*
* @param TC points to the TeleCommand packet that is being processed
* @param queue_id is the id of the queue which handles TM transmission by the SpaceWire driver
*
paul
Ignore doc files...
r46 * @return LFR_SUCCESSFUL
*
paul
Header files inclusion reworked...
r40 */
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 unsigned int val;
paul@pc-solar1.lab-lpp.local
waveform initialization modified due to a problem of compatibility...
r19
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 time_management_regs->coarse_time_load = (TC->dataAndCRC[BYTE_0] << SHIFT_3_BYTES)
+ (TC->dataAndCRC[BYTE_1] << SHIFT_2_BYTES)
+ (TC->dataAndCRC[BYTE_2] << SHIFT_1_BYTE)
+ TC->dataAndCRC[BYTE_3];
paul
rev 1.0.0.3
r109
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 val = (housekeeping_packet.hk_lfr_update_time_tc_cnt[0] * CONST_256)
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 + housekeeping_packet.hk_lfr_update_time_tc_cnt[1];
val++;
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 housekeeping_packet.hk_lfr_update_time_tc_cnt[0] = (unsigned char) (val >> SHIFT_1_BYTE);
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 housekeeping_packet.hk_lfr_update_time_tc_cnt[1] = (unsigned char) (val);
paul
3.0.0.19...
r271 oneTcLfrUpdateTimeReceived = 1;
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 return LFR_SUCCESSFUL;
}
//*******************
// ENTERING THE MODES
paul
rev 1.0.0.3
r109 int check_mode_value( unsigned char requestedMode )
{
int status;
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23
paul
Bug #801 Don_Initialisation_P2
r320 status = LFR_DEFAULT;
paul
rev 1.0.0.3
r109 if ( (requestedMode != LFR_MODE_STANDBY)
&& (requestedMode != LFR_MODE_NORMAL) && (requestedMode != LFR_MODE_BURST)
&& (requestedMode != LFR_MODE_SBM1) && (requestedMode != LFR_MODE_SBM2) )
{
status = LFR_DEFAULT;
}
else
{
status = LFR_SUCCESSFUL;
}
return status;
}
int check_mode_transition( unsigned char requestedMode )
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 {
paul
Minor modifications to meet Logiscope requirements
r77 /** This function checks the validity of the transition requested by the TC_LFR_ENTER_MODE.
*
* @param requestedMode is the mode requested by the TC_LFR_ENTER_MODE
*
* @return LFR directive status codes:
* - LFR_SUCCESSFUL - the transition is authorized
* - LFR_DEFAULT - the transition is not authorized
*
*/
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 int status;
paul@pc-solar1.lab-lpp.local
waveform initialization modified due to a problem of compatibility...
r19
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 switch (requestedMode)
{
case LFR_MODE_STANDBY:
paul
packet emission task added...
r33 if ( lfrCurrentMode == LFR_MODE_STANDBY ) {
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 status = LFR_DEFAULT;
}
else
{
status = LFR_SUCCESSFUL;
}
break;
case LFR_MODE_NORMAL:
paul
packet emission task added...
r33 if ( lfrCurrentMode == LFR_MODE_NORMAL ) {
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 status = LFR_DEFAULT;
}
else {
status = LFR_SUCCESSFUL;
}
break;
case LFR_MODE_BURST:
paul
packet emission task added...
r33 if ( lfrCurrentMode == LFR_MODE_BURST ) {
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 status = LFR_DEFAULT;
}
else {
status = LFR_SUCCESSFUL;
}
break;
case LFR_MODE_SBM1:
paul
packet emission task added...
r33 if ( lfrCurrentMode == LFR_MODE_SBM1 ) {
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 status = LFR_DEFAULT;
}
else {
status = LFR_SUCCESSFUL;
}
break;
case LFR_MODE_SBM2:
paul
packet emission task added...
r33 if ( lfrCurrentMode == LFR_MODE_SBM2 ) {
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 status = LFR_DEFAULT;
}
else {
status = LFR_SUCCESSFUL;
}
break;
default:
status = LFR_DEFAULT;
break;
}
paul@pc-solar1.lab-lpp.local
waveform initialization modified due to a problem of compatibility...
r19
paul@pc-solar1.lab-lpp.local
Current version with modes NORMAL and SBM1 operational
r21 return status;
admin@pc-p-leroy3.LAB-LPP.LOCAL
Draft implementation of the TC_LFR_LOAD_NORMAL_PAR
r10 }
paul
enum transition_type_t removed
r245 void update_last_valid_transition_date( unsigned int transitionCoarseTime )
paul
minor updates on documentation
r240 {
paul
snapshot resynchro changed...
r257 if (transitionCoarseTime == 0)
{
lastValidEnterModeTime = time_management_regs->coarse_time + 1;
paul
3.0.0.19...
r271 PRINTF1("lastValidEnterModeTime = 0x%x (transitionCoarseTime = 0 => coarse_time+1)\n", lastValidEnterModeTime);
paul
snapshot resynchro changed...
r257 }
else
{
lastValidEnterModeTime = transitionCoarseTime;
PRINTF1("lastValidEnterModeTime = 0x%x\n", transitionCoarseTime);
}
paul
minor updates on documentation
r240 }
paul
the TC_ENTER_MODE time parameter is taken into account...
r111 int check_transition_date( unsigned int transitionCoarseTime )
{
int status;
unsigned int localCoarseTime;
unsigned int deltaCoarseTime;
status = LFR_SUCCESSFUL;
if (transitionCoarseTime == 0) // transition time = 0 means an instant transition
{
status = LFR_SUCCESSFUL;
}
else
{
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 localCoarseTime = time_management_regs->coarse_time & COARSE_TIME_MASK;
paul
the TC_ENTER_MODE time parameter is taken into account...
r111
paul
Snapshot resynchro rewritten, drift is measured one snapshot in two...
r253 PRINTF2("localTime = %x, transitionTime = %x\n", localCoarseTime, transitionCoarseTime);
paul
rev 2.0.2.3...
r191
paul
Snapshot resynchro rewritten, drift is measured one snapshot in two...
r253 if ( transitionCoarseTime <= localCoarseTime ) // SSS-CP-EQS-322
paul
the TC_ENTER_MODE time parameter is taken into account...
r111 {
status = LFR_DEFAULT;
paul
Snapshot resynchro rewritten, drift is measured one snapshot in two...
r253 PRINTF("ERR *** in check_transition_date *** transitionCoarseTime <= localCoarseTime\n");
paul
the TC_ENTER_MODE time parameter is taken into account...
r111 }
if (status == LFR_SUCCESSFUL)
{
deltaCoarseTime = transitionCoarseTime - localCoarseTime;
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 if ( deltaCoarseTime > MAX_DELTA_COARSE_TIME ) // SSS-CP-EQS-323
paul
the TC_ENTER_MODE time parameter is taken into account...
r111 {
status = LFR_DEFAULT;
PRINTF1("ERR *** in check_transition_date *** deltaCoarseTime = %x\n", deltaCoarseTime)
}
}
}
return status;
}
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 int restart_asm_activities( unsigned char lfrRequestedMode )
{
rtems_status_code status;
status = stop_spectral_matrices();
paul
ASM restart sequence updated at the interrupt service routine level...
r259 thisIsAnASMRestart = 1;
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 status = restart_asm_tasks( lfrRequestedMode );
launch_spectral_matrix();
return status;
}
int stop_spectral_matrices( void )
{
/** This function stops and restarts the current mode average spectral matrices activities.
*
* @return RTEMS directive status codes:
* - RTEMS_SUCCESSFUL - task restarted successfully
* - RTEMS_INVALID_ID - task id invalid
* - RTEMS_ALREADY_SUSPENDED - task already suspended
*
*/
rtems_status_code status;
status = RTEMS_SUCCESSFUL;
// (1) mask interruptions
paul
ASM restart sequence updated at the interrupt service routine level...
r259 LEON_Mask_interrupt( IRQ_SPECTRAL_MATRIX ); // mask spectral matrix interrupt
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238
// (2) reset spectral matrices registers
set_sm_irq_onNewMatrix( 0 ); // stop the spectral matrices
reset_sm_status();
// (3) clear interruptions
LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt
// suspend several tasks
if (lfrCurrentMode != LFR_MODE_STANDBY) {
status = suspend_asm_tasks();
}
if (status != RTEMS_SUCCESSFUL)
{
PRINTF1("in stop_current_mode *** in suspend_science_tasks *** ERR code: %d\n", status)
}
return status;
}
paul
rev 1.0.0.3
r109 int stop_current_mode( void )
paul@pc-solar1.lab-lpp.local
Slight changes on the flight software
r20 {
paul
Header files inclusion reworked...
r40 /** This function stops the current mode by masking interrupt lines and suspending science tasks.
*
* @return RTEMS directive status codes:
* - RTEMS_SUCCESSFUL - task restarted successfully
* - RTEMS_INVALID_ID - task id invalid
* - RTEMS_ALREADY_SUSPENDED - task already suspended
*
*/
paul@pc-solar1.lab-lpp.local
Current version with modes NORMAL and SBM1 operational
r21 rtems_status_code status;
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23
status = RTEMS_SUCCESSFUL;
paul@pc-solar1.lab-lpp.local
All modes partially implemented...
r22
paul
Sync
r99 // (1) mask interruptions
paul
SID corrected in TM_LFR_TC_EXE packets...
r31 LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER ); // mask waveform picker interrupt
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 LEON_Mask_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt
paul
Sync
r99
paul
The flight software is now compatible with the VHDL 0.1.32...
r171 // (2) reset waveform picker registers
paul
fsw-0-16...
r47 reset_wfp_burst_enable(); // reset burst and enable bits
reset_wfp_status(); // reset all the status bits
paul
rev 1.0.0.4
r110
paul
The flight software is now compatible with the VHDL 0.1.32...
r171 // (3) reset spectral matrices registers
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 set_sm_irq_onNewMatrix( 0 ); // stop the spectral matrices
paul
The flight software is now compatible with the VHDL 0.1.32...
r171 reset_sm_status();
paul
Integration of basic parameters functions in the flight software...
r179 // reset lfr VHDL module
reset_lfr();
paul
snapshots extraction fully functionnal in SBM1 and SBM2
r106 reset_extractSWF(); // reset the extractSWF flag to false
paul
Sync
r99
paul
The flight software is now compatible with the VHDL 0.1.32...
r171 // (4) clear interruptions
LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); // clear waveform picker interrupt
LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt
paul@pc-solar1.lab-lpp.local
Slight changes on the flight software
r20 // suspend several tasks
paul
Last commit before release 0-13...
r35 if (lfrCurrentMode != LFR_MODE_STANDBY) {
paul
Header files inclusion reworked...
r40 status = suspend_science_tasks();
paul@pc-solar1.lab-lpp.local
Current version with modes NORMAL and SBM1 operational
r21 }
paul@pc-solar1.lab-lpp.local
Slight changes on the flight software
r20
paul@pc-solar1.lab-lpp.local
All modes partially implemented...
r22 if (status != RTEMS_SUCCESSFUL)
{
paul
Header files inclusion reworked...
r40 PRINTF1("in stop_current_mode *** in suspend_science_tasks *** ERR code: %d\n", status)
paul@pc-solar1.lab-lpp.local
All modes partially implemented...
r22 }
paul@pc-solar1.lab-lpp.local
Current version with modes NORMAL and SBM1 operational
r21 return status;
paul@pc-solar1.lab-lpp.local
Slight changes on the flight software
r20 }
paul
a wrong date implies the generation of a TM_LFR_TC_EXE_NOT_EXECUTABLE...
r254 int enter_mode_standby( void )
paul@pc-solar1.lab-lpp.local
Slight changes on the flight software
r20 {
paul
minor updates on documentation
r240 /** This function is used to put LFR in the STANDBY mode.
*
* @param transitionCoarseTime is the requested transition time contained in the TC_LFR_ENTER_MODE
*
* @return RTEMS directive status codes:
* - RTEMS_SUCCESSFUL - task restarted successfully
* - RTEMS_INVALID_ID - task id invalid
* - RTEMS_INCORRECT_STATE - task never started
* - RTEMS_ILLEGAL_ON_REMOTE_OBJECT - cannot restart remote task
*
* The STANDBY mode does not depends on a specific transition date, the effect of the TC_LFR_ENTER_MODE
* is immediate.
*
*/
paul
enter_mode removed...
r237 int status;
paul
packet emission task added...
r33
paul
enter_mode removed...
r237 status = stop_current_mode(); // STOP THE CURRENT MODE
paul
Sync
r99 #ifdef PRINT_TASK_STATISTICS
paul
enter_mode removed...
r237 rtems_cpu_usage_report();
paul
rev 1.0.0.1
r98 #endif
#ifdef PRINT_STACK_REPORT
paul
enter_mode removed...
r237 PRINTF("stack report selected\n")
rtems_stack_checker_report_usage();
#endif
return status;
}
int enter_mode_normal( unsigned int transitionCoarseTime )
{
paul
minor updates on documentation
r240 /** This function is used to start the NORMAL mode.
*
* @param transitionCoarseTime is the requested transition time contained in the TC_LFR_ENTER_MODE
*
* @return RTEMS directive status codes:
* - RTEMS_SUCCESSFUL - task restarted successfully
* - RTEMS_INVALID_ID - task id invalid
* - RTEMS_INCORRECT_STATE - task never started
* - RTEMS_ILLEGAL_ON_REMOTE_OBJECT - cannot restart remote task
*
* The way the NORMAL mode is started depends on the LFR current mode. If LFR is in SBM1 or SBM2,
* the snapshots are not restarted, only ASM, BP and CWF data generation are affected.
*
*/
paul
enter_mode removed...
r237 int status;
#ifdef PRINT_TASK_STATISTICS
rtems_cpu_usage_reset();
paul
rev 1.0.0.1
r98 #endif
paul
enter_mode removed...
r237
status = RTEMS_UNSATISFIED;
switch( lfrCurrentMode )
{
case LFR_MODE_STANDBY:
status = restart_science_tasks( LFR_MODE_NORMAL ); // restart science tasks
if (status == RTEMS_SUCCESSFUL) // relaunch spectral_matrix and waveform_picker modules
{
launch_spectral_matrix( );
launch_waveform_picker( LFR_MODE_NORMAL, transitionCoarseTime );
}
break;
case LFR_MODE_BURST:
status = stop_current_mode(); // stop the current mode
status = restart_science_tasks( LFR_MODE_NORMAL ); // restart the science tasks
if (status == RTEMS_SUCCESSFUL) // relaunch spectral_matrix and waveform_picker modules
{
launch_spectral_matrix( );
launch_waveform_picker( LFR_MODE_NORMAL, transitionCoarseTime );
paul
Last commit before leaving!
r219 }
paul
enter_mode removed...
r237 break;
case LFR_MODE_SBM1:
paul
3.0.0.19...
r271 status = restart_asm_activities( LFR_MODE_NORMAL ); // this is necessary to restart ASM tasks to update the parameters
paul
minor updates on documentation
r240 status = LFR_SUCCESSFUL; // lfrCurrentMode will be updated after the execution of close_action
paul
3.0.0.19...
r271 update_last_valid_transition_date( transitionCoarseTime );
paul
enter_mode removed...
r237 break;
case LFR_MODE_SBM2:
paul
3.0.0.19...
r271 status = restart_asm_activities( LFR_MODE_NORMAL ); // this is necessary to restart ASM tasks to update the parameters
paul
minor updates on documentation
r240 status = LFR_SUCCESSFUL; // lfrCurrentMode will be updated after the execution of close_action
paul
3.0.0.19...
r271 update_last_valid_transition_date( transitionCoarseTime );
paul
enter_mode removed...
r237 break;
default:
break;
}
if (status != RTEMS_SUCCESSFUL)
{
PRINTF1("ERR *** in enter_mode_normal *** status = %d\n", status)
status = RTEMS_UNSATISFIED;
}
return status;
}
int enter_mode_burst( unsigned int transitionCoarseTime )
{
paul
minor updates on documentation
r240 /** This function is used to start the BURST mode.
*
* @param transitionCoarseTime is the requested transition time contained in the TC_LFR_ENTER_MODE
*
* @return RTEMS directive status codes:
* - RTEMS_SUCCESSFUL - task restarted successfully
* - RTEMS_INVALID_ID - task id invalid
* - RTEMS_INCORRECT_STATE - task never started
* - RTEMS_ILLEGAL_ON_REMOTE_OBJECT - cannot restart remote task
*
* The way the BURST mode is started does not depend on the LFR current mode.
*
*/
paul
enter_mode removed...
r237 int status;
#ifdef PRINT_TASK_STATISTICS
rtems_cpu_usage_reset();
#endif
status = stop_current_mode(); // stop the current mode
status = restart_science_tasks( LFR_MODE_BURST ); // restart the science tasks
if (status == RTEMS_SUCCESSFUL) // relaunch spectral_matrix and waveform_picker modules
{
launch_spectral_matrix( );
launch_waveform_picker( LFR_MODE_BURST, transitionCoarseTime );
paul
rev 1.0.0.1
r98 }
paul
packet emission task added...
r33 if (status != RTEMS_SUCCESSFUL)
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 {
paul
enter_mode removed...
r237 PRINTF1("ERR *** in enter_mode_burst *** status = %d\n", status)
status = RTEMS_UNSATISFIED;
}
return status;
}
int enter_mode_sbm1( unsigned int transitionCoarseTime )
{
paul
minor updates on documentation
r240 /** This function is used to start the SBM1 mode.
*
* @param transitionCoarseTime is the requested transition time contained in the TC_LFR_ENTER_MODE
*
* @return RTEMS directive status codes:
* - RTEMS_SUCCESSFUL - task restarted successfully
* - RTEMS_INVALID_ID - task id invalid
* - RTEMS_INCORRECT_STATE - task never started
* - RTEMS_ILLEGAL_ON_REMOTE_OBJECT - cannot restart remote task
*
* The way the SBM1 mode is started depends on the LFR current mode. If LFR is in NORMAL or SBM2,
* the snapshots are not restarted, only ASM, BP and CWF data generation are affected. In other
* cases, the acquisition is completely restarted.
*
*/
paul
enter_mode removed...
r237 int status;
#ifdef PRINT_TASK_STATISTICS
rtems_cpu_usage_reset();
#endif
status = RTEMS_UNSATISFIED;
switch( lfrCurrentMode )
{
case LFR_MODE_STANDBY:
status = restart_science_tasks( LFR_MODE_SBM1 ); // restart science tasks
if (status == RTEMS_SUCCESSFUL) // relaunch spectral_matrix and waveform_picker modules
{
launch_spectral_matrix( );
launch_waveform_picker( LFR_MODE_SBM1, transitionCoarseTime );
}
break;
case LFR_MODE_NORMAL: // lfrCurrentMode will be updated after the execution of close_action
paul
3.0.0.19...
r271 status = restart_asm_activities( LFR_MODE_SBM1 );
paul
enter_mode removed...
r237 status = LFR_SUCCESSFUL;
paul
3.0.0.19...
r271 update_last_valid_transition_date( transitionCoarseTime );
paul
enter_mode removed...
r237 break;
case LFR_MODE_BURST:
status = stop_current_mode(); // stop the current mode
status = restart_science_tasks( LFR_MODE_SBM1 ); // restart the science tasks
if (status == RTEMS_SUCCESSFUL) // relaunch spectral_matrix and waveform_picker modules
{
launch_spectral_matrix( );
launch_waveform_picker( LFR_MODE_SBM1, transitionCoarseTime );
}
break;
case LFR_MODE_SBM2:
paul
3.0.0.19...
r271 status = restart_asm_activities( LFR_MODE_SBM1 );
paul
enter_mode removed...
r237 status = LFR_SUCCESSFUL; // lfrCurrentMode will be updated after the execution of close_action
paul
3.0.0.19...
r271 update_last_valid_transition_date( transitionCoarseTime );
paul
enter_mode removed...
r237 break;
default:
break;
}
if (status != RTEMS_SUCCESSFUL)
{
paul
3.0.0.15
r258 PRINTF1("ERR *** in enter_mode_sbm1 *** status = %d\n", status);
status = RTEMS_UNSATISFIED;
paul
enter_mode removed...
r237 }
return status;
}
int enter_mode_sbm2( unsigned int transitionCoarseTime )
{
paul
minor updates on documentation
r240 /** This function is used to start the SBM2 mode.
*
* @param transitionCoarseTime is the requested transition time contained in the TC_LFR_ENTER_MODE
*
* @return RTEMS directive status codes:
* - RTEMS_SUCCESSFUL - task restarted successfully
* - RTEMS_INVALID_ID - task id invalid
* - RTEMS_INCORRECT_STATE - task never started
* - RTEMS_ILLEGAL_ON_REMOTE_OBJECT - cannot restart remote task
*
* The way the SBM2 mode is started depends on the LFR current mode. If LFR is in NORMAL or SBM1,
* the snapshots are not restarted, only ASM, BP and CWF data generation are affected. In other
* cases, the acquisition is completely restarted.
*
*/
paul
enter_mode removed...
r237 int status;
#ifdef PRINT_TASK_STATISTICS
rtems_cpu_usage_reset();
#endif
status = RTEMS_UNSATISFIED;
switch( lfrCurrentMode )
{
case LFR_MODE_STANDBY:
status = restart_science_tasks( LFR_MODE_SBM2 ); // restart science tasks
if (status == RTEMS_SUCCESSFUL) // relaunch spectral_matrix and waveform_picker modules
{
launch_spectral_matrix( );
launch_waveform_picker( LFR_MODE_SBM2, transitionCoarseTime );
}
break;
case LFR_MODE_NORMAL:
paul
3.0.0.19...
r271 status = restart_asm_activities( LFR_MODE_SBM2 );
paul
enter_mode removed...
r237 status = LFR_SUCCESSFUL; // lfrCurrentMode will be updated after the execution of close_action
paul
3.0.0.19...
r271 update_last_valid_transition_date( transitionCoarseTime );
paul
enter_mode removed...
r237 break;
case LFR_MODE_BURST:
status = stop_current_mode(); // stop the current mode
status = restart_science_tasks( LFR_MODE_SBM2 ); // restart the science tasks
if (status == RTEMS_SUCCESSFUL) // relaunch spectral_matrix and waveform_picker modules
{
launch_spectral_matrix( );
launch_waveform_picker( LFR_MODE_SBM2, transitionCoarseTime );
}
break;
case LFR_MODE_SBM1:
paul
3.0.0.19...
r271 status = restart_asm_activities( LFR_MODE_SBM2 );
paul
enter_mode removed...
r237 status = LFR_SUCCESSFUL; // lfrCurrentMode will be updated after the execution of close_action
paul
3.0.0.19...
r271 update_last_valid_transition_date( transitionCoarseTime );
paul
enter_mode removed...
r237 break;
default:
break;
}
if (status != RTEMS_SUCCESSFUL)
{
PRINTF1("ERR *** in enter_mode_sbm2 *** status = %d\n", status)
status = RTEMS_UNSATISFIED;
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 }
paul@pc-solar1.lab-lpp.local
Current version with modes NORMAL and SBM1 operational
r21
return status;
paul@pc-solar1.lab-lpp.local
Slight changes on the flight software
r20 }
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 int restart_science_tasks( unsigned char lfrRequestedMode )
paul
sy_lfr_n_swf_p implemented...
r32 {
paul
Minor modifications to meet Logiscope requirements
r77 /** This function is used to restart all science tasks.
*
* @return RTEMS directive status codes:
* - RTEMS_SUCCESSFUL - task restarted successfully
* - RTEMS_INVALID_ID - task id invalid
* - RTEMS_INCORRECT_STATE - task never started
* - RTEMS_ILLEGAL_ON_REMOTE_OBJECT - cannot restart remote task
*
paul
AVF1 and PRC1 tasks added for processing at f1
r121 * Science tasks are AVF0, PRC0, WFRM, CWF3, CW2, CWF1
paul
Minor modifications to meet Logiscope requirements
r77 *
*/
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 rtems_status_code status[NB_SCIENCE_TASKS];
paul
packet emission task added...
r33 rtems_status_code ret;
paul
sy_lfr_n_swf_p implemented...
r32
paul
packet emission task added...
r33 ret = RTEMS_SUCCESSFUL;
paul
sy_lfr_n_swf_p implemented...
r32
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 status[STATUS_0] = rtems_task_restart( Task_id[TASKID_AVF0], lfrRequestedMode );
if (status[STATUS_0] != RTEMS_SUCCESSFUL)
paul
Last commit before release 0-13...
r35 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 PRINTF1("in restart_science_task *** AVF0 ERR %d\n", status[STATUS_0])
paul
AVF1 and PRC1 tasks added for processing at f1
r121 }
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 status[STATUS_1] = rtems_task_restart( Task_id[TASKID_PRC0], lfrRequestedMode );
if (status[STATUS_1] != RTEMS_SUCCESSFUL)
paul
AVF1 and PRC1 tasks added for processing at f1
r121 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 PRINTF1("in restart_science_task *** PRC0 ERR %d\n", status[STATUS_1])
paul
Last commit before release 0-13...
r35 }
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 status[STATUS_2] = rtems_task_restart( Task_id[TASKID_WFRM],1 );
if (status[STATUS_2] != RTEMS_SUCCESSFUL)
paul
Last commit before release 0-13...
r35 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 PRINTF1("in restart_science_task *** WFRM ERR %d\n", status[STATUS_2])
paul
Last commit before release 0-13...
r35 }
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 status[STATUS_3] = rtems_task_restart( Task_id[TASKID_CWF3],1 );
if (status[STATUS_3] != RTEMS_SUCCESSFUL)
paul
Last commit before release 0-13...
r35 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 PRINTF1("in restart_science_task *** CWF3 ERR %d\n", status[STATUS_3])
paul
Last commit before release 0-13...
r35 }
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 status[STATUS_4] = rtems_task_restart( Task_id[TASKID_CWF2],1 );
if (status[STATUS_4] != RTEMS_SUCCESSFUL)
paul
Last commit before release 0-13...
r35 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 PRINTF1("in restart_science_task *** CWF2 ERR %d\n", status[STATUS_4])
paul
Last commit before release 0-13...
r35 }
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 status[STATUS_5] = rtems_task_restart( Task_id[TASKID_CWF1],1 );
if (status[STATUS_5] != RTEMS_SUCCESSFUL)
paul
Last commit before release 0-13...
r35 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 PRINTF1("in restart_science_task *** CWF1 ERR %d\n", status[STATUS_5])
paul
Last commit before release 0-13...
r35 }
paul
packet emission task added...
r33
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 status[STATUS_6] = rtems_task_restart( Task_id[TASKID_AVF1], lfrRequestedMode );
if (status[STATUS_6] != RTEMS_SUCCESSFUL)
paul
Sync...
r117 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 PRINTF1("in restart_science_task *** AVF1 ERR %d\n", status[STATUS_6])
paul
Sync...
r117 }
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 status[STATUS_7] = rtems_task_restart( Task_id[TASKID_PRC1],lfrRequestedMode );
if (status[STATUS_7] != RTEMS_SUCCESSFUL)
paul
AVF1 and PRC1 tasks added for processing at f1
r121 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 PRINTF1("in restart_science_task *** PRC1 ERR %d\n", status[STATUS_7])
paul
AVF1 and PRC1 tasks added for processing at f1
r121 }
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 status[STATUS_8] = rtems_task_restart( Task_id[TASKID_AVF2], 1 );
if (status[STATUS_8] != RTEMS_SUCCESSFUL)
paul
Sources reorganized...
r126 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 PRINTF1("in restart_science_task *** AVF2 ERR %d\n", status[STATUS_8])
paul
Sources reorganized...
r126 }
paul
avf2 prc2 tasks added...
r124
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 status[STATUS_9] = rtems_task_restart( Task_id[TASKID_PRC2], 1 );
if (status[STATUS_9] != RTEMS_SUCCESSFUL)
paul
Sources reorganized...
r126 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 PRINTF1("in restart_science_task *** PRC2 ERR %d\n", status[STATUS_9])
paul
Sources reorganized...
r126 }
paul
avf2 prc2 tasks added...
r124
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 if ( (status[STATUS_0] != RTEMS_SUCCESSFUL) || (status[STATUS_1] != RTEMS_SUCCESSFUL) ||
(status[STATUS_2] != RTEMS_SUCCESSFUL) || (status[STATUS_3] != RTEMS_SUCCESSFUL) ||
(status[STATUS_4] != RTEMS_SUCCESSFUL) || (status[STATUS_5] != RTEMS_SUCCESSFUL) ||
(status[STATUS_6] != RTEMS_SUCCESSFUL) || (status[STATUS_7] != RTEMS_SUCCESSFUL) ||
(status[STATUS_8] != RTEMS_SUCCESSFUL) || (status[STATUS_9] != RTEMS_SUCCESSFUL) )
paul
packet emission task added...
r33 {
ret = RTEMS_UNSATISFIED;
paul
sy_lfr_n_swf_p implemented...
r32 }
paul
packet emission task added...
r33 return ret;
paul
sy_lfr_n_swf_p implemented...
r32 }
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 int restart_asm_tasks( unsigned char lfrRequestedMode )
{
/** This function is used to restart average spectral matrices tasks.
*
* @return RTEMS directive status codes:
* - RTEMS_SUCCESSFUL - task restarted successfully
* - RTEMS_INVALID_ID - task id invalid
* - RTEMS_INCORRECT_STATE - task never started
* - RTEMS_ILLEGAL_ON_REMOTE_OBJECT - cannot restart remote task
*
* ASM tasks are AVF0, PRC0, AVF1, PRC1, AVF2 and PRC2
*
*/
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 rtems_status_code status[NB_ASM_TASKS];
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 rtems_status_code ret;
ret = RTEMS_SUCCESSFUL;
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 status[STATUS_0] = rtems_task_restart( Task_id[TASKID_AVF0], lfrRequestedMode );
if (status[STATUS_0] != RTEMS_SUCCESSFUL)
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 PRINTF1("in restart_science_task *** AVF0 ERR %d\n", status[STATUS_0])
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 }
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 status[STATUS_1] = rtems_task_restart( Task_id[TASKID_PRC0], lfrRequestedMode );
if (status[STATUS_1] != RTEMS_SUCCESSFUL)
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 PRINTF1("in restart_science_task *** PRC0 ERR %d\n", status[STATUS_1])
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 }
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 status[STATUS_2] = rtems_task_restart( Task_id[TASKID_AVF1], lfrRequestedMode );
if (status[STATUS_2] != RTEMS_SUCCESSFUL)
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 PRINTF1("in restart_science_task *** AVF1 ERR %d\n", status[STATUS_2])
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 }
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 status[STATUS_3] = rtems_task_restart( Task_id[TASKID_PRC1],lfrRequestedMode );
if (status[STATUS_3] != RTEMS_SUCCESSFUL)
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 PRINTF1("in restart_science_task *** PRC1 ERR %d\n", status[STATUS_3])
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 }
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 status[STATUS_4] = rtems_task_restart( Task_id[TASKID_AVF2], 1 );
if (status[STATUS_4] != RTEMS_SUCCESSFUL)
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 PRINTF1("in restart_science_task *** AVF2 ERR %d\n", status[STATUS_4])
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 }
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 status[STATUS_5] = rtems_task_restart( Task_id[TASKID_PRC2], 1 );
if (status[STATUS_5] != RTEMS_SUCCESSFUL)
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 PRINTF1("in restart_science_task *** PRC2 ERR %d\n", status[STATUS_5])
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 }
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 if ( (status[STATUS_0] != RTEMS_SUCCESSFUL) || (status[STATUS_1] != RTEMS_SUCCESSFUL) ||
(status[STATUS_2] != RTEMS_SUCCESSFUL) || (status[STATUS_3] != RTEMS_SUCCESSFUL) ||
(status[STATUS_4] != RTEMS_SUCCESSFUL) || (status[STATUS_5] != RTEMS_SUCCESSFUL) )
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 {
ret = RTEMS_UNSATISFIED;
}
return ret;
}
int suspend_science_tasks( void )
paul
sy_lfr_n_swf_p implemented...
r32 {
paul
Header files inclusion reworked...
r40 /** This function suspends the science tasks.
*
* @return RTEMS directive status codes:
* - RTEMS_SUCCESSFUL - task restarted successfully
* - RTEMS_INVALID_ID - task id invalid
* - RTEMS_ALREADY_SUSPENDED - task already suspended
*
*/
paul
sy_lfr_n_swf_p implemented...
r32
paul
Header files inclusion reworked...
r40 rtems_status_code status;
paul
Last commit before release 0-13...
r35
paul
printf removed or replaced by PRINTF macros...
r227 PRINTF("in suspend_science_tasks\n")
paul
R3 updates. TC handlers added for the new telecommands:...
r192
paul
enter_mode removed...
r237 status = rtems_task_suspend( Task_id[TASKID_AVF0] ); // suspend AVF0
paul
fifo occupation reported in the HK packet
r197 if ((status != RTEMS_SUCCESSFUL) && (status != RTEMS_ALREADY_SUSPENDED))
paul
Last commit before release 0-13...
r35 {
paul
Header files inclusion reworked...
r40 PRINTF1("in suspend_science_task *** AVF0 ERR %d\n", status)
paul
Last commit before release 0-13...
r35 }
paul
fifo occupation reported in the HK packet
r197 else
{
status = RTEMS_SUCCESSFUL;
}
paul
AVF1 and PRC1 tasks added for processing at f1
r121 if (status == RTEMS_SUCCESSFUL) // suspend PRC0
{
status = rtems_task_suspend( Task_id[TASKID_PRC0] );
paul
fifo occupation reported in the HK packet
r197 if ((status != RTEMS_SUCCESSFUL) && (status != RTEMS_ALREADY_SUSPENDED))
paul
AVF1 and PRC1 tasks added for processing at f1
r121 {
PRINTF1("in suspend_science_task *** PRC0 ERR %d\n", status)
}
paul
fifo occupation reported in the HK packet
r197 else
{
status = RTEMS_SUCCESSFUL;
}
paul
AVF1 and PRC1 tasks added for processing at f1
r121 }
if (status == RTEMS_SUCCESSFUL) // suspend AVF1
{
status = rtems_task_suspend( Task_id[TASKID_AVF1] );
paul
fifo occupation reported in the HK packet
r197 if ((status != RTEMS_SUCCESSFUL) && (status != RTEMS_ALREADY_SUSPENDED))
paul
AVF1 and PRC1 tasks added for processing at f1
r121 {
PRINTF1("in suspend_science_task *** AVF1 ERR %d\n", status)
}
paul
fifo occupation reported in the HK packet
r197 else
{
status = RTEMS_SUCCESSFUL;
}
paul
AVF1 and PRC1 tasks added for processing at f1
r121 }
if (status == RTEMS_SUCCESSFUL) // suspend PRC1
{
status = rtems_task_suspend( Task_id[TASKID_PRC1] );
paul
fifo occupation reported in the HK packet
r197 if ((status != RTEMS_SUCCESSFUL) && (status != RTEMS_ALREADY_SUSPENDED))
paul
AVF1 and PRC1 tasks added for processing at f1
r121 {
PRINTF1("in suspend_science_task *** PRC1 ERR %d\n", status)
}
paul
fifo occupation reported in the HK packet
r197 else
{
status = RTEMS_SUCCESSFUL;
}
paul
AVF1 and PRC1 tasks added for processing at f1
r121 }
paul
Sources reorganized...
r126 if (status == RTEMS_SUCCESSFUL) // suspend AVF2
{
status = rtems_task_suspend( Task_id[TASKID_AVF2] );
paul
fifo occupation reported in the HK packet
r197 if ((status != RTEMS_SUCCESSFUL) && (status != RTEMS_ALREADY_SUSPENDED))
paul
Sources reorganized...
r126 {
PRINTF1("in suspend_science_task *** AVF2 ERR %d\n", status)
}
paul
fifo occupation reported in the HK packet
r197 else
{
status = RTEMS_SUCCESSFUL;
}
paul
Sources reorganized...
r126 }
if (status == RTEMS_SUCCESSFUL) // suspend PRC2
{
status = rtems_task_suspend( Task_id[TASKID_PRC2] );
paul
fifo occupation reported in the HK packet
r197 if ((status != RTEMS_SUCCESSFUL) && (status != RTEMS_ALREADY_SUSPENDED))
paul
Sources reorganized...
r126 {
PRINTF1("in suspend_science_task *** PRC2 ERR %d\n", status)
}
paul
fifo occupation reported in the HK packet
r197 else
{
status = RTEMS_SUCCESSFUL;
}
paul
Sources reorganized...
r126 }
paul
Header files inclusion reworked...
r40 if (status == RTEMS_SUCCESSFUL) // suspend WFRM
{
status = rtems_task_suspend( Task_id[TASKID_WFRM] );
paul
fifo occupation reported in the HK packet
r197 if ((status != RTEMS_SUCCESSFUL) && (status != RTEMS_ALREADY_SUSPENDED))
paul
Header files inclusion reworked...
r40 {
PRINTF1("in suspend_science_task *** WFRM ERR %d\n", status)
}
paul
fifo occupation reported in the HK packet
r197 else
{
status = RTEMS_SUCCESSFUL;
}
paul
Last commit before release 0-13...
r35 }
paul
Header files inclusion reworked...
r40 if (status == RTEMS_SUCCESSFUL) // suspend CWF3
paul
Last commit before release 0-13...
r35 {
paul
Header files inclusion reworked...
r40 status = rtems_task_suspend( Task_id[TASKID_CWF3] );
paul
fifo occupation reported in the HK packet
r197 if ((status != RTEMS_SUCCESSFUL) && (status != RTEMS_ALREADY_SUSPENDED))
paul
Header files inclusion reworked...
r40 {
PRINTF1("in suspend_science_task *** CWF3 ERR %d\n", status)
}
paul
fifo occupation reported in the HK packet
r197 else
{
status = RTEMS_SUCCESSFUL;
}
paul
Last commit before release 0-13...
r35 }
paul
Header files inclusion reworked...
r40 if (status == RTEMS_SUCCESSFUL) // suspend CWF2
paul
Last commit before release 0-13...
r35 {
paul
Header files inclusion reworked...
r40 status = rtems_task_suspend( Task_id[TASKID_CWF2] );
paul
fifo occupation reported in the HK packet
r197 if ((status != RTEMS_SUCCESSFUL) && (status != RTEMS_ALREADY_SUSPENDED))
paul
Header files inclusion reworked...
r40 {
PRINTF1("in suspend_science_task *** CWF2 ERR %d\n", status)
}
paul
fifo occupation reported in the HK packet
r197 else
{
status = RTEMS_SUCCESSFUL;
}
paul
Header files inclusion reworked...
r40 }
if (status == RTEMS_SUCCESSFUL) // suspend CWF1
{
status = rtems_task_suspend( Task_id[TASKID_CWF1] );
paul
fifo occupation reported in the HK packet
r197 if ((status != RTEMS_SUCCESSFUL) && (status != RTEMS_ALREADY_SUSPENDED))
paul
Header files inclusion reworked...
r40 {
PRINTF1("in suspend_science_task *** CWF1 ERR %d\n", status)
}
paul
fifo occupation reported in the HK packet
r197 else
{
status = RTEMS_SUCCESSFUL;
}
paul
Last commit before release 0-13...
r35 }
paul
Header files inclusion reworked...
r40 return status;
paul
sy_lfr_n_swf_p implemented...
r32 }
paul
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 int suspend_asm_tasks( void )
{
/** This function suspends the science tasks.
*
* @return RTEMS directive status codes:
* - RTEMS_SUCCESSFUL - task restarted successfully
* - RTEMS_INVALID_ID - task id invalid
* - RTEMS_ALREADY_SUSPENDED - task already suspended
*
*/
rtems_status_code status;
PRINTF("in suspend_science_tasks\n")
status = rtems_task_suspend( Task_id[TASKID_AVF0] ); // suspend AVF0
if ((status != RTEMS_SUCCESSFUL) && (status != RTEMS_ALREADY_SUSPENDED))
{
PRINTF1("in suspend_science_task *** AVF0 ERR %d\n", status)
}
else
{
status = RTEMS_SUCCESSFUL;
}
if (status == RTEMS_SUCCESSFUL) // suspend PRC0
{
status = rtems_task_suspend( Task_id[TASKID_PRC0] );
if ((status != RTEMS_SUCCESSFUL) && (status != RTEMS_ALREADY_SUSPENDED))
{
PRINTF1("in suspend_science_task *** PRC0 ERR %d\n", status)
}
else
{
status = RTEMS_SUCCESSFUL;
}
}
if (status == RTEMS_SUCCESSFUL) // suspend AVF1
{
status = rtems_task_suspend( Task_id[TASKID_AVF1] );
if ((status != RTEMS_SUCCESSFUL) && (status != RTEMS_ALREADY_SUSPENDED))
{
PRINTF1("in suspend_science_task *** AVF1 ERR %d\n", status)
}
else
{
status = RTEMS_SUCCESSFUL;
}
}
if (status == RTEMS_SUCCESSFUL) // suspend PRC1
{
status = rtems_task_suspend( Task_id[TASKID_PRC1] );
if ((status != RTEMS_SUCCESSFUL) && (status != RTEMS_ALREADY_SUSPENDED))
{
PRINTF1("in suspend_science_task *** PRC1 ERR %d\n", status)
}
else
{
status = RTEMS_SUCCESSFUL;
}
}
if (status == RTEMS_SUCCESSFUL) // suspend AVF2
{
status = rtems_task_suspend( Task_id[TASKID_AVF2] );
if ((status != RTEMS_SUCCESSFUL) && (status != RTEMS_ALREADY_SUSPENDED))
{
PRINTF1("in suspend_science_task *** AVF2 ERR %d\n", status)
}
else
{
status = RTEMS_SUCCESSFUL;
}
}
if (status == RTEMS_SUCCESSFUL) // suspend PRC2
{
status = rtems_task_suspend( Task_id[TASKID_PRC2] );
if ((status != RTEMS_SUCCESSFUL) && (status != RTEMS_ALREADY_SUSPENDED))
{
PRINTF1("in suspend_science_task *** PRC2 ERR %d\n", status)
}
else
{
status = RTEMS_SUCCESSFUL;
}
}
return status;
}
paul
the TC_ENTER_MODE time parameter is taken into account...
r111 void launch_waveform_picker( unsigned char mode, unsigned int transitionCoarseTime )
paul
Integration of the VHDL_DEV option...
r90 {
paul
snapshot resynchro changed...
r257
paul
Sync
r139 WFP_reset_current_ring_nodes();
paul
The flight software is now compatible with the VHDL 0.1.32...
r171
paul
Sync
r97 reset_waveform_picker_regs();
paul
The flight software is now compatible with the VHDL 0.1.32...
r171
paul
Integration of the VHDL_DEV option...
r90 set_wfp_burst_enable_register( mode );
paul
snapshots extraction fully functionnal in SBM1 and SBM2
r106
paul
Integration of the VHDL_DEV option...
r90 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
paul
snapshots extraction fully functionnal in SBM1 and SBM2
r106
paul
the TC_ENTER_MODE time parameter is taken into account...
r111 if (transitionCoarseTime == 0)
{
paul
Behaviour changed upon reception of a TC_LFR_ENTER_MODE with a transition...
r247 // instant transition means transition on the next valid date
paul
3.0.0.19...
r271 // this is mandatory to have a good snapshot period and a good correction of the snapshot period
paul
Behaviour changed upon reception of a TC_LFR_ENTER_MODE with a transition...
r247 waveform_picker_regs->start_date = time_management_regs->coarse_time + 1;
paul
the TC_ENTER_MODE time parameter is taken into account...
r111 }
else
{
waveform_picker_regs->start_date = transitionCoarseTime;
}
paul
Many corrections done after Logiscope analysis
r166
paul
snapshot resynchro changed...
r257 update_last_valid_transition_date(waveform_picker_regs->start_date);
paul
Sync
r95 }
paul
There is a message queue between AVFO and MATR...
r118 void launch_spectral_matrix( void )
paul
Sync
r95 {
paul
Sync...
r117 SM_reset_current_ring_nodes();
paul
The flight software is now compatible with the VHDL 0.1.32...
r171
paul
Sync
r95 reset_spectral_matrix_regs();
paul
The flight software is now compatible with the VHDL 0.1.32...
r171
paul
avf2 prc2 tasks added...
r124 reset_nb_sm();
paul
Sync
r99
paul
The flight software is now compatible with the VHDL 0.1.32...
r171 set_sm_irq_onNewMatrix( 1 );
paul
the function asm_reorganize format the spectral matrix to the ICD format
r103 LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX );
LEON_Unmask_interrupt( IRQ_SPECTRAL_MATRIX );
paul
The flight software is now compatible with the VHDL 0.1.32...
r171
paul
the function asm_reorganize format the spectral matrix to the ICD format
r103 }
paul
The flight software is now compatible with the VHDL 0.1.32...
r171 void set_sm_irq_onNewMatrix( unsigned char value )
paul
the function asm_reorganize format the spectral matrix to the ICD format
r103 {
paul
snapshots extraction fully functionnal in SBM1 and SBM2
r106 if (value == 1)
{
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 spectral_matrix_regs->config = spectral_matrix_regs->config | BIT_IRQ_ON_NEW_MATRIX;
paul
snapshots extraction fully functionnal in SBM1 and SBM2
r106 }
else
{
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 spectral_matrix_regs->config = spectral_matrix_regs->config & MASK_IRQ_ON_NEW_MATRIX; // 1110
paul
snapshots extraction fully functionnal in SBM1 and SBM2
r106 }
paul
the function asm_reorganize format the spectral matrix to the ICD format
r103 }
paul
The flight software is now compatible with the VHDL 0.1.32...
r171 void set_sm_irq_onError( unsigned char value )
paul
the function asm_reorganize format the spectral matrix to the ICD format
r103 {
paul
snapshots extraction fully functionnal in SBM1 and SBM2
r106 if (value == 1)
{
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 spectral_matrix_regs->config = spectral_matrix_regs->config | BIT_IRQ_ON_ERROR;
paul
snapshots extraction fully functionnal in SBM1 and SBM2
r106 }
else
{
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 spectral_matrix_regs->config = spectral_matrix_regs->config & MASK_IRQ_ON_ERROR; // 1101
paul
snapshots extraction fully functionnal in SBM1 and SBM2
r106 }
paul
the function asm_reorganize format the spectral matrix to the ICD format
r103 }
paul
2.0.2.2...
r187 //*****************************
// CONFIGURE CALIBRATION SIGNAL
void setCalibrationPrescaler( unsigned int prescaler )
{
// prescaling of the master clock (25 MHz)
// master clock is divided by 2^prescaler
time_management_regs->calPrescaler = prescaler;
}
void setCalibrationDivisor( unsigned int divisionFactor )
{
// division of the prescaled clock by the division factor
time_management_regs->calDivisor = divisionFactor;
}
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 void setCalibrationData( void )
{
/** This function is used to store the values used to drive the DAC in order to generate the SCM calibration signal
*
* @param void
*
* @return void
*
*/
paul
2.0.2.2...
r187 unsigned int k;
unsigned short data;
float val;
float Ts;
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 time_management_regs->calDataPtr = INIT_CHAR;
paul
2.0.2.2...
r187
paul
Minor bugs corrected before logiscope analysis
r322 Ts = 1 / CAL_FS;
paul
2.0.2.2...
r187 // build the signal for the SCM calibration
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 for (k = 0; k < CAL_NB_PTS; k++)
paul
2.0.2.2...
r187 {
paul
Bug #906 calibration signal
r339 val = CAL_A0 * sin( CAL_W0 * k * Ts )
+ CAL_A1 * sin( CAL_W1 * k * Ts );
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 data = (unsigned short) ((val * CAL_SCALE_FACTOR) + CONST_2048);
time_management_regs->calData = data & CAL_DATA_MASK;
paul
2.0.2.2...
r187 }
}
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 void setCalibrationDataInterleaved( void )
{
/** This function is used to store the values used to drive the DAC in order to generate the SCM calibration signal
*
* @param void
*
* @return void
*
* In interleaved mode, one can store more values than in normal mode.
* The data are stored in bunch of 18 bits, 12 bits from one sample and 6 bits from another sample.
* T store 3 values, one need two write operations.
* s1 [ b11 b10 b9 b8 b7 b6 ] s0 [ b11 b10 b9 b8 b7 b6 b5 b3 b2 b1 b0 ]
* s1 [ b5 b4 b3 b2 b1 b0 ] s2 [ b11 b10 b9 b8 b7 b6 b5 b3 b2 b1 b0 ]
*
*/
paul
2.0.2.2...
r187 unsigned int k;
float val;
float Ts;
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 unsigned short data[CAL_NB_PTS_INTER];
paul
2.0.2.2...
r187 unsigned char *dataPtr;
paul
Minor bugs corrected before logiscope analysis
r322 Ts = 1 / CAL_FS_INTER;
paul
2.0.2.2...
r187
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 time_management_regs->calDataPtr = INIT_CHAR;
paul
2.0.2.2...
r187
// build the signal for the SCM calibration
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 for (k=0; k<CAL_NB_PTS_INTER; k++)
paul
2.0.2.2...
r187 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 val = sin( 2 * pi * CAL_F0 * k * Ts )
+ sin( 2 * pi * CAL_F1 * k * Ts );
data[k] = (unsigned short) ((val * CONST_512) + CONST_2048);
paul
2.0.2.2...
r187 }
// write the signal in interleaved mode
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 for (k=0; k < STEPS_FOR_STORAGE_INTER; k++)
paul
2.0.2.2...
r187 {
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 dataPtr = (unsigned char*) &data[ (k * BYTES_FOR_2_SAMPLES) + 2 ];
time_management_regs->calData = ( data[ k * BYTES_FOR_2_SAMPLES ] & CAL_DATA_MASK )
+ ( (dataPtr[0] & CAL_DATA_MASK_INTER) << CAL_DATA_SHIFT_INTER);
time_management_regs->calData = ( data[(k * BYTES_FOR_2_SAMPLES) + 1] & CAL_DATA_MASK )
+ ( (dataPtr[1] & CAL_DATA_MASK_INTER) << CAL_DATA_SHIFT_INTER);
paul
2.0.2.2...
r187 }
}
void setCalibrationReload( bool state)
{
if (state == true)
{
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 time_management_regs->calDACCtrl = time_management_regs->calDACCtrl | BIT_CAL_RELOAD; // [0001 0000]
paul
2.0.2.2...
r187 }
else
{
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 time_management_regs->calDACCtrl = time_management_regs->calDACCtrl & MASK_CAL_RELOAD; // [1110 1111]
paul
2.0.2.2...
r187 }
}
void setCalibrationEnable( bool state )
{
// this bit drives the multiplexer
if (state == true)
{
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 time_management_regs->calDACCtrl = time_management_regs->calDACCtrl | BIT_CAL_ENABLE; // [0100 0000]
paul
2.0.2.2...
r187 }
else
{
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 time_management_regs->calDACCtrl = time_management_regs->calDACCtrl & MASK_CAL_ENABLE; // [1011 1111]
paul
2.0.2.2...
r187 }
}
void setCalibrationInterleaved( bool state )
{
// this bit drives the multiplexer
if (state == true)
{
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 time_management_regs->calDACCtrl = time_management_regs->calDACCtrl | BIT_SET_INTERLEAVED; // [0010 0000]
paul
2.0.2.2...
r187 }
else
{
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 time_management_regs->calDACCtrl = time_management_regs->calDACCtrl & MASK_SET_INTERLEAVED; // [1101 1111]
paul
2.0.2.2...
r187 }
}
paul
Bug #354, hk_sy_lfr_calib_enabled is set in TM_LFR_HK packets
r206 void setCalibration( bool state )
paul
2.0.2.2...
r187 {
paul
Bug #354, hk_sy_lfr_calib_enabled is set in TM_LFR_HK packets
r206 if (state == true)
{
setCalibrationEnable( true );
setCalibrationReload( false );
set_hk_lfr_calib_enable( true );
}
else
{
setCalibrationEnable( false );
setCalibrationReload( true );
set_hk_lfr_calib_enable( false );
}
paul
2.0.2.2...
r187 }
void configureCalibration( bool interleaved )
{
paul
Bug #354, hk_sy_lfr_calib_enabled is set in TM_LFR_HK packets
r206 setCalibration( false );
paul
2.0.2.2...
r187 if ( interleaved == true )
{
setCalibrationInterleaved( true );
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 setCalibrationPrescaler( 0 ); // 25 MHz => 25 000 000
setCalibrationDivisor( CAL_F_DIVISOR_INTER ); // => 240 384
paul
2.0.2.2...
r187 setCalibrationDataInterleaved();
}
else
{
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 setCalibrationPrescaler( 0 ); // 25 MHz => 25 000 000
setCalibrationDivisor( CAL_F_DIVISOR ); // => 160 256 (39 - 1)
paul
2.0.2.2...
r187 setCalibrationData();
}
}
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 //****************
// CLOSING ACTIONS
paul
Corrections:...
r107 void update_last_TC_exe( ccsdsTelecommandPacket_t *TC, unsigned char * time )
paul@pc-solar1.lab-lpp.local
Current version with modes NORMAL and SBM1 operational
r21 {
paul
Minor modifications to meet Logiscope requirements
r77 /** This function is used to update the HK packets statistics after a successful TC execution.
*
* @param TC points to the TC being processed
* @param time is the time used to date the TC execution
*
*/
paul
Corrections:...
r107 unsigned int val;
paul@pc-solar1.lab-lpp.local
Current version with modes NORMAL and SBM1 operational
r21 housekeeping_packet.hk_lfr_last_exe_tc_id[0] = TC->packetID[0];
housekeeping_packet.hk_lfr_last_exe_tc_id[1] = TC->packetID[1];
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 housekeeping_packet.hk_lfr_last_exe_tc_type[0] = INIT_CHAR;
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 housekeeping_packet.hk_lfr_last_exe_tc_type[1] = TC->serviceType;
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 housekeeping_packet.hk_lfr_last_exe_tc_subtype[0] = INIT_CHAR;
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 housekeeping_packet.hk_lfr_last_exe_tc_subtype[1] = TC->serviceSubType;
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 housekeeping_packet.hk_lfr_last_exe_tc_time[BYTE_0] = time[BYTE_0];
housekeeping_packet.hk_lfr_last_exe_tc_time[BYTE_1] = time[BYTE_1];
housekeeping_packet.hk_lfr_last_exe_tc_time[BYTE_2] = time[BYTE_2];
housekeeping_packet.hk_lfr_last_exe_tc_time[BYTE_3] = time[BYTE_3];
housekeeping_packet.hk_lfr_last_exe_tc_time[BYTE_4] = time[BYTE_4];
housekeeping_packet.hk_lfr_last_exe_tc_time[BYTE_5] = time[BYTE_5];
paul
Corrections:...
r107
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 val = (housekeeping_packet.hk_lfr_exe_tc_cnt[0] * CONST_256) + housekeeping_packet.hk_lfr_exe_tc_cnt[1];
paul
Corrections:...
r107 val++;
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 housekeeping_packet.hk_lfr_exe_tc_cnt[0] = (unsigned char) (val >> SHIFT_1_BYTE);
paul
Corrections:...
r107 housekeeping_packet.hk_lfr_exe_tc_cnt[1] = (unsigned char) (val);
paul@pc-solar1.lab-lpp.local
Current version with modes NORMAL and SBM1 operational
r21 }
paul
Corrections:...
r107 void update_last_TC_rej(ccsdsTelecommandPacket_t *TC, unsigned char * time )
paul@pc-solar1.lab-lpp.local
Current version with modes NORMAL and SBM1 operational
r21 {
paul
Minor modifications to meet Logiscope requirements
r77 /** This function is used to update the HK packets statistics after a TC rejection.
*
* @param TC points to the TC being processed
* @param time is the time used to date the TC rejection
*
*/
paul
Corrections:...
r107 unsigned int val;
paul@pc-solar1.lab-lpp.local
Current version with modes NORMAL and SBM1 operational
r21 housekeeping_packet.hk_lfr_last_rej_tc_id[0] = TC->packetID[0];
housekeeping_packet.hk_lfr_last_rej_tc_id[1] = TC->packetID[1];
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 housekeeping_packet.hk_lfr_last_rej_tc_type[0] = INIT_CHAR;
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 housekeeping_packet.hk_lfr_last_rej_tc_type[1] = TC->serviceType;
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 housekeeping_packet.hk_lfr_last_rej_tc_subtype[0] = INIT_CHAR;
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 housekeeping_packet.hk_lfr_last_rej_tc_subtype[1] = TC->serviceSubType;
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 housekeeping_packet.hk_lfr_last_rej_tc_time[BYTE_0] = time[BYTE_0];
housekeeping_packet.hk_lfr_last_rej_tc_time[BYTE_1] = time[BYTE_1];
housekeeping_packet.hk_lfr_last_rej_tc_time[BYTE_2] = time[BYTE_2];
housekeeping_packet.hk_lfr_last_rej_tc_time[BYTE_3] = time[BYTE_3];
housekeeping_packet.hk_lfr_last_rej_tc_time[BYTE_4] = time[BYTE_4];
housekeeping_packet.hk_lfr_last_rej_tc_time[BYTE_5] = time[BYTE_5];
paul
Corrections:...
r107
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 val = (housekeeping_packet.hk_lfr_rej_tc_cnt[0] * CONST_256) + housekeeping_packet.hk_lfr_rej_tc_cnt[1];
paul
Corrections:...
r107 val++;
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 housekeeping_packet.hk_lfr_rej_tc_cnt[0] = (unsigned char) (val >> SHIFT_1_BYTE);
paul
Corrections:...
r107 housekeeping_packet.hk_lfr_rej_tc_cnt[1] = (unsigned char) (val);
paul@pc-solar1.lab-lpp.local
Current version with modes NORMAL and SBM1 operational
r21 }
paul
rev 1.0.0.2...
r104 void close_action(ccsdsTelecommandPacket_t *TC, int result, rtems_id queue_id )
paul@pc-solar1.lab-lpp.local
Current version with modes NORMAL and SBM1 operational
r21 {
paul
Minor modifications to meet Logiscope requirements
r77 /** This function is the last step of the TC execution workflow.
*
* @param TC points to the TC being processed
* @param result is the result of the TC execution (LFR_SUCCESSFUL / LFR_DEFAULT)
* @param queue_id is the id of the RTEMS message queue used to send TM packets
* @param time is the time used to date the TC execution
*
*/
paul
rev 1.0.0.3
r109 unsigned char requestedMode;
paul@pc-solar1.lab-lpp.local
Current version with modes NORMAL and SBM1 operational
r21 if (result == LFR_SUCCESSFUL)
{
paul
Corrections:...
r107 if ( !( (TC->serviceType==TC_TYPE_TIME) & (TC->serviceSubType==TC_SUBTYPE_UPDT_TIME) )
&
!( (TC->serviceType==TC_TYPE_GEN) & (TC->serviceSubType==TC_SUBTYPE_UPDT_INFO))
paul
Ignore doc files...
r46 )
paul
packet emission task added...
r33 {
paul
rev 1.0.0.2...
r104 send_tm_lfr_tc_exe_success( TC, queue_id );
paul
packet emission task added...
r33 }
paul
rev 1.0.0.3
r109 if ( (TC->serviceType == TC_TYPE_GEN) & (TC->serviceSubType == TC_SUBTYPE_ENTER) )
{
//**********************************
// UPDATE THE LFRMODE LOCAL VARIABLE
requestedMode = TC->dataAndCRC[1];
paul
a wrong date implies the generation of a TM_LFR_TC_EXE_NOT_EXECUTABLE...
r254 updateLFRCurrentMode( requestedMode );
paul
rev 1.0.0.3
r109 }
paul@pc-solar1.lab-lpp.local
Current version with modes NORMAL and SBM1 operational
r21 }
paul
Sync
r115 else if (result == LFR_EXE_ERROR)
paul
the interrupt sub routine related to the waveform picker is now lighter...
r112 {
send_tm_lfr_tc_exe_error( TC, queue_id );
}
paul@pc-solar1.lab-lpp.local
Current version with modes NORMAL and SBM1 operational
r21 }
paul@pc-solar1.lab-lpp.local
Minor updates to use the time management VHDL module
r12 //***************************
// Interrupt Service Routines
rtems_isr commutation_isr1( rtems_vector_number vector )
{
paul@pc-solar1.lab-lpp.local
Updates of the ICD taken into account...
r18 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
paul
printf removed or replaced by PRINTF macros...
r227 PRINTF("In commutation_isr1 *** Error sending event to DUMB\n")
paul@pc-solar1.lab-lpp.local
Updates of the ICD taken into account...
r18 }
paul@pc-solar1.lab-lpp.local
Minor updates to use the time management VHDL module
r12 }
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9
paul@pc-solar1.lab-lpp.local
Minor updates to use the time management VHDL module
r12 rtems_isr commutation_isr2( rtems_vector_number vector )
{
paul@pc-solar1.lab-lpp.local
Updates of the ICD taken into account...
r18 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
paul
printf removed or replaced by PRINTF macros...
r227 PRINTF("In commutation_isr2 *** Error sending event to DUMB\n")
paul@pc-solar1.lab-lpp.local
Updates of the ICD taken into account...
r18 }
paul@pc-solar1.lab-lpp.local
Minor updates to use the time management VHDL module
r12 }
paul
Minor changes in .h inclusion
r45 //****************
// OTHER FUNCTIONS
paul
a wrong date implies the generation of a TM_LFR_TC_EXE_NOT_EXECUTABLE...
r254 void updateLFRCurrentMode( unsigned char requestedMode )
paul
Minor changes in .h inclusion
r45 {
/** This function updates the value of the global variable lfrCurrentMode.
*
* lfrCurrentMode is a parameter used by several functions to know in which mode LFR is running.
*
*/
paul
a wrong date implies the generation of a TM_LFR_TC_EXE_NOT_EXECUTABLE...
r254
paul
Minor changes in .h inclusion
r45 // update the local value of lfrCurrentMode with the value contained in the housekeeping_packet structure
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 housekeeping_packet.lfr_status_word[0] = (housekeeping_packet.lfr_status_word[0] & STATUS_WORD_LFR_MODE_MASK)
+ (unsigned char) ( requestedMode << STATUS_WORD_LFR_MODE_SHIFT );
paul
a wrong date implies the generation of a TM_LFR_TC_EXE_NOT_EXECUTABLE...
r254 lfrCurrentMode = requestedMode;
paul
Minor changes in .h inclusion
r45 }
paul@pc-solar1.lab-lpp.local
Minor updates to use the time management VHDL module
r12
paul
The flight software is now compatible with the VHDL 0.1.32...
r171 void set_lfr_soft_reset( unsigned char value )
{
if (value == 1)
{
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 time_management_regs->ctrl = time_management_regs->ctrl | BIT_SOFT_RESET; // [0100]
paul
The flight software is now compatible with the VHDL 0.1.32...
r171 }
else
{
paul
Many corrections, mainly related to #807 Don_Enumeration
r318 time_management_regs->ctrl = time_management_regs->ctrl & MASK_SOFT_RESET; // [1011]
paul
The flight software is now compatible with the VHDL 0.1.32...
r171 }
}
void reset_lfr( void )
{
set_lfr_soft_reset( 1 );
set_lfr_soft_reset( 0 );
paul
Rev 3.0.0.4...
r212
set_hk_lfr_sc_potential_flag( true );
paul
The flight software is now compatible with the VHDL 0.1.32...
r171 }