##// END OF EJS Templates
Snapshot resynchro rewritten, drift is measured one snapshot in two...
Snapshot resynchro rewritten, drift is measured one snapshot in two functions related to Cache Control register renamed functions related to Ancillary State Register 16 added (EDAC on register files)

File last commit:

r253:cc5f75e74b54 R3a
r253:cc5f75e74b54 R3a
Show More
tc_handler.c
1607 lines | 49.6 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
ccsdsTelecommandPacket_t TC; // TC sent to the ACTN task
size_t size; // size of the incoming TC packet
unsigned char subtype; // subtype of the current TC packet
paul
fsw-0-23...
r75 unsigned char time[6];
paul
Last commit before release 0-13...
r35 rtems_id queue_rcv_id;
rtems_id queue_snd_id;
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
Last commit before release 0-13...
r35 BOOT_PRINTF("in ACTN *** \n")
paul@pc-solar1.lab-lpp.local
Several TC actions added...
r11
paul
enter_mode removed...
r237 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;
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
printf removed or replaced by PRINTF macros...
r227 PRINTF("this is the end!!!\n")
paul
enter_mode removed...
r237 exit(0);
paul
fsw-0-23...
r75 send_tm_lfr_tc_exe_not_implemented( TC, queue_id, time );
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_ptr;
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 ];
transitionCoarseTime_ptr = (unsigned int *) ( &bytePosPtr[ BYTE_POS_CP_LFR_ENTER_MODE_TIME ] );
paul
the TC_ENTER_MODE time parameter is taken into account...
r111 transitionCoarseTime = (*transitionCoarseTime_ptr) & 0x7fffffff;
paul
packet emission task added...
r33
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)
{
PRINTF("ERR *** in action_enter_mode *** check_transition_date\n")
paul
enter_mode removed...
r237 send_tm_lfr_tc_exe_inconsistent( TC, queue_id,
BYTE_POS_CP_LFR_ENTER_MODE_TIME,
bytePosPtr[ BYTE_POS_CP_LFR_ENTER_MODE_TIME + 3 ] );
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
paul
BP sending filtered depending on the lastValidEnterModeTime
r243 update_last_valid_transition_date( transitionCoarseTime );
paul
minor updates on documentation
r240
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
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;
int result;
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;
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
the interrupt sub routine related to the waveform picker is now lighter...
r112 mode = (bytePosPtr[ BYTE_POS_UPDATE_INFO_PARAMETERS_SET5 ] & 0x1e) >> 1;
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
the interrupt sub routine related to the waveform picker is now lighter...
r112 mode = (bytePosPtr[ BYTE_POS_UPDATE_INFO_PARAMETERS_SET6 ] & 0xf0) >> 4;
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
the interrupt sub routine related to the waveform picker is now lighter...
r112 mode = (bytePosPtr[ BYTE_POS_UPDATE_INFO_PARAMETERS_SET6 ] & 0x0f);
paul
rev 1.0.0.2...
r104 status = check_update_info_hk_thr_mode( mode );
}
paul
Corrections:...
r107 if (status == LFR_SUCCESSFUL) // if the parameter check is successful
paul
rev 1.0.0.2...
r104 {
val = housekeeping_packet.hk_lfr_update_info_tc_cnt[0] * 256
+ housekeeping_packet.hk_lfr_update_info_tc_cnt[1];
val++;
housekeeping_packet.hk_lfr_update_info_tc_cnt[0] = (unsigned char) (val >> 8);
housekeeping_packet.hk_lfr_update_info_tc_cnt[1] = (unsigned char) (val);
}
paul
bug #456 pa_bia_status_info byte is updated upon the reception of...
r224 // 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 ] & 0xfe; // [1111 1110]
pa_bia_status_info = pa_bia_status_info
| (bytePosPtr[ BYTE_POS_UPDATE_INFO_PARAMETERS_SET1 ] & 0x1);
paul
rev 1.0.0.2...
r104 result = status;
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23
return result;
}
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@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 time_management_regs->coarse_time_load = (TC->dataAndCRC[0] << 24)
paul
enter_mode removed...
r237 + (TC->dataAndCRC[1] << 16)
+ (TC->dataAndCRC[2] << 8)
+ TC->dataAndCRC[3];
paul
rev 1.0.0.3
r109
paul@pc-solar1.lab-lpp.local
All modes implemented for the waveforms...
r23 val = housekeeping_packet.hk_lfr_update_time_tc_cnt[0] * 256
+ housekeeping_packet.hk_lfr_update_time_tc_cnt[1];
val++;
housekeeping_packet.hk_lfr_update_time_tc_cnt[0] = (unsigned char) (val >> 8);
housekeeping_packet.hk_lfr_update_time_tc_cnt[1] = (unsigned char) (val);
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
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
BP sending filtered depending on the lastValidEnterModeTime
r243 lastValidEnterModeTime = transitionCoarseTime;
paul
Snapshot resynchro rewritten, drift is measured one snapshot in two...
r253 PRINTF1("lastValidEnterModeTime = %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
{
localCoarseTime = time_management_regs->coarse_time & 0x7fffffff;
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;
if ( deltaCoarseTime > 3 ) // SSS-CP-EQS-323
{
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();
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
LEON_Mask_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt
// (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
enter_mode removed...
r237 int enter_mode_standby()
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.13
r250 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
enter_mode removed...
r237 break;
case LFR_MODE_SBM2:
paul
3.0.0.13
r250 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
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
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 restart_asm_activities( LFR_MODE_SBM1 );
paul
enter_mode removed...
r237 status = LFR_SUCCESSFUL;
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
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 restart_asm_activities( LFR_MODE_SBM1 );
paul
enter_mode removed...
r237 status = LFR_SUCCESSFUL; // lfrCurrentMode will be updated after the execution of close_action
break;
default:
break;
}
if (status != RTEMS_SUCCESSFUL)
{
PRINTF1("ERR *** in enter_mode_sbm1 *** status = %d\n", status)
status = RTEMS_UNSATISFIED;
}
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
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 restart_asm_activities( LFR_MODE_SBM2 );
paul
enter_mode removed...
r237 status = LFR_SUCCESSFUL; // lfrCurrentMode will be updated after the execution of close_action
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
Modification of the launch of NORMAL, SBM1 and SBM2 modes
r238 restart_asm_activities( LFR_MODE_SBM2 );
paul
enter_mode removed...
r237 status = LFR_SUCCESSFUL; // lfrCurrentMode will be updated after the execution of close_action
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
avf2 prc2 tasks added...
r124 rtems_status_code status[10];
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
Sync...
r117 status[0] = rtems_task_restart( Task_id[TASKID_AVF0], lfrRequestedMode );
paul
Last commit before release 0-13...
r35 if (status[0] != RTEMS_SUCCESSFUL)
{
paul
AVF1 and PRC1 tasks added for processing at f1
r121 PRINTF1("in restart_science_task *** AVF0 ERR %d\n", status[0])
}
status[1] = rtems_task_restart( Task_id[TASKID_PRC0], lfrRequestedMode );
if (status[1] != RTEMS_SUCCESSFUL)
{
PRINTF1("in restart_science_task *** PRC0 ERR %d\n", status[1])
paul
Last commit before release 0-13...
r35 }
paul
packet emission task added...
r33 status[2] = rtems_task_restart( Task_id[TASKID_WFRM],1 );
paul
Last commit before release 0-13...
r35 if (status[2] != RTEMS_SUCCESSFUL)
{
paul
AVF1 and PRC1 tasks added for processing at f1
r121 PRINTF1("in restart_science_task *** WFRM ERR %d\n", status[2])
paul
Last commit before release 0-13...
r35 }
paul
packet emission task added...
r33 status[3] = rtems_task_restart( Task_id[TASKID_CWF3],1 );
paul
Last commit before release 0-13...
r35 if (status[3] != RTEMS_SUCCESSFUL)
{
paul
AVF1 and PRC1 tasks added for processing at f1
r121 PRINTF1("in restart_science_task *** CWF3 ERR %d\n", status[3])
paul
Last commit before release 0-13...
r35 }
paul
packet emission task added...
r33 status[4] = rtems_task_restart( Task_id[TASKID_CWF2],1 );
paul
Last commit before release 0-13...
r35 if (status[4] != RTEMS_SUCCESSFUL)
{
paul
AVF1 and PRC1 tasks added for processing at f1
r121 PRINTF1("in restart_science_task *** CWF2 ERR %d\n", status[4])
paul
Last commit before release 0-13...
r35 }
paul
packet emission task added...
r33 status[5] = rtems_task_restart( Task_id[TASKID_CWF1],1 );
paul
Last commit before release 0-13...
r35 if (status[5] != RTEMS_SUCCESSFUL)
{
paul
AVF1 and PRC1 tasks added for processing at f1
r121 PRINTF1("in restart_science_task *** CWF1 ERR %d\n", status[5])
paul
Last commit before release 0-13...
r35 }
paul
packet emission task added...
r33
paul
AVF1 and PRC1 tasks added for processing at f1
r121 status[6] = rtems_task_restart( Task_id[TASKID_AVF1], lfrRequestedMode );
paul
Sync...
r117 if (status[6] != RTEMS_SUCCESSFUL)
{
paul
AVF1 and PRC1 tasks added for processing at f1
r121 PRINTF1("in restart_science_task *** AVF1 ERR %d\n", status[6])
paul
Sync...
r117 }
paul
AVF1 and PRC1 tasks added for processing at f1
r121 status[7] = rtems_task_restart( Task_id[TASKID_PRC1],lfrRequestedMode );
if (status[7] != RTEMS_SUCCESSFUL)
{
PRINTF1("in restart_science_task *** PRC1 ERR %d\n", status[7])
}
paul
Sources reorganized...
r126 status[8] = rtems_task_restart( Task_id[TASKID_AVF2], 1 );
if (status[8] != RTEMS_SUCCESSFUL)
{
PRINTF1("in restart_science_task *** AVF2 ERR %d\n", status[8])
}
paul
avf2 prc2 tasks added...
r124
paul
Sources reorganized...
r126 status[9] = rtems_task_restart( Task_id[TASKID_PRC2], 1 );
if (status[9] != RTEMS_SUCCESSFUL)
{
PRINTF1("in restart_science_task *** PRC2 ERR %d\n", status[9])
}
paul
avf2 prc2 tasks added...
r124
paul
AVF1 and PRC1 tasks added for processing at f1
r121 if ( (status[0] != RTEMS_SUCCESSFUL) || (status[1] != RTEMS_SUCCESSFUL) ||
(status[2] != RTEMS_SUCCESSFUL) || (status[3] != RTEMS_SUCCESSFUL) ||
(status[4] != RTEMS_SUCCESSFUL) || (status[5] != RTEMS_SUCCESSFUL) ||
paul
Sources reorganized...
r126 (status[6] != RTEMS_SUCCESSFUL) || (status[7] != RTEMS_SUCCESSFUL) ||
(status[8] != RTEMS_SUCCESSFUL) || (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
*
*/
rtems_status_code status[6];
rtems_status_code ret;
ret = RTEMS_SUCCESSFUL;
status[0] = rtems_task_restart( Task_id[TASKID_AVF0], lfrRequestedMode );
if (status[0] != RTEMS_SUCCESSFUL)
{
PRINTF1("in restart_science_task *** AVF0 ERR %d\n", status[0])
}
status[1] = rtems_task_restart( Task_id[TASKID_PRC0], lfrRequestedMode );
if (status[1] != RTEMS_SUCCESSFUL)
{
PRINTF1("in restart_science_task *** PRC0 ERR %d\n", status[1])
}
status[2] = rtems_task_restart( Task_id[TASKID_AVF1], lfrRequestedMode );
if (status[2] != RTEMS_SUCCESSFUL)
{
PRINTF1("in restart_science_task *** AVF1 ERR %d\n", status[2])
}
status[3] = rtems_task_restart( Task_id[TASKID_PRC1],lfrRequestedMode );
if (status[3] != RTEMS_SUCCESSFUL)
{
PRINTF1("in restart_science_task *** PRC1 ERR %d\n", status[3])
}
status[4] = rtems_task_restart( Task_id[TASKID_AVF2], 1 );
if (status[4] != RTEMS_SUCCESSFUL)
{
PRINTF1("in restart_science_task *** AVF2 ERR %d\n", status[4])
}
status[5] = rtems_task_restart( Task_id[TASKID_PRC2], 1 );
if (status[5] != RTEMS_SUCCESSFUL)
{
PRINTF1("in restart_science_task *** PRC2 ERR %d\n", status[5])
}
if ( (status[0] != RTEMS_SUCCESSFUL) || (status[1] != RTEMS_SUCCESSFUL) ||
(status[2] != RTEMS_SUCCESSFUL) || (status[3] != RTEMS_SUCCESSFUL) ||
(status[4] != RTEMS_SUCCESSFUL) || (status[5] != RTEMS_SUCCESSFUL) )
{
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
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
// this is mandatory to have a good snapshot period a a good correction of the snapshot period
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
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)
{
spectral_matrix_regs->config = spectral_matrix_regs->config | 0x01;
}
else
{
spectral_matrix_regs->config = spectral_matrix_regs->config & 0xfffffffe; // 1110
}
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
The flight software is now compatible with the VHDL 0.1.32...
r171 spectral_matrix_regs->config = spectral_matrix_regs->config | 0x02;
paul
snapshots extraction fully functionnal in SBM1 and SBM2
r106 }
else
{
paul
The flight software is now compatible with the VHDL 0.1.32...
r171 spectral_matrix_regs->config = spectral_matrix_regs->config & 0xfffffffd; // 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;
}
void setCalibrationData( void ){
unsigned int k;
unsigned short data;
float val;
float f0;
float f1;
float fs;
float Ts;
float scaleFactor;
f0 = 625;
f1 = 10000;
fs = 160256.410;
Ts = 1. / fs;
paul
bug #501 corrected
r220 scaleFactor = 0.250 / 0.000654; // 191, 500 mVpp, 2 sinus waves => 500 mVpp each, amplitude = 250 mV
paul
2.0.2.2...
r187
time_management_regs->calDataPtr = 0x00;
// build the signal for the SCM calibration
for (k=0; k<256; k++)
{
val = sin( 2 * pi * f0 * k * Ts )
+ sin( 2 * pi * f1 * k * Ts );
data = (unsigned short) ((val * scaleFactor) + 2048);
time_management_regs->calData = data & 0xfff;
}
}
void setCalibrationDataInterleaved( void ){
unsigned int k;
float val;
float f0;
float f1;
float fs;
float Ts;
unsigned short data[384];
unsigned char *dataPtr;
f0 = 625;
f1 = 10000;
fs = 240384.615;
Ts = 1. / fs;
time_management_regs->calDataPtr = 0x00;
// build the signal for the SCM calibration
for (k=0; k<384; k++)
{
val = sin( 2 * pi * f0 * k * Ts )
+ sin( 2 * pi * f1 * k * Ts );
data[k] = (unsigned short) (val * 512 + 2048);
}
// write the signal in interleaved mode
for (k=0; k<128; k++)
{
dataPtr = (unsigned char*) &data[k*3 + 2];
time_management_regs->calData = (data[k*3] & 0xfff)
+ ( (dataPtr[0] & 0x3f) << 12);
time_management_regs->calData = (data[k*3 + 1] & 0xfff)
+ ( (dataPtr[1] & 0x3f) << 12);
}
}
void setCalibrationReload( bool state)
{
if (state == true)
{
time_management_regs->calDACCtrl = time_management_regs->calDACCtrl | 0x00000010; // [0001 0000]
}
else
{
time_management_regs->calDACCtrl = time_management_regs->calDACCtrl & 0xffffffef; // [1110 1111]
}
}
void setCalibrationEnable( bool state )
{
// this bit drives the multiplexer
if (state == true)
{
time_management_regs->calDACCtrl = time_management_regs->calDACCtrl | 0x00000040; // [0100 0000]
}
else
{
time_management_regs->calDACCtrl = time_management_regs->calDACCtrl & 0xffffffbf; // [1011 1111]
}
}
void setCalibrationInterleaved( bool state )
{
// this bit drives the multiplexer
if (state == true)
{
time_management_regs->calDACCtrl = time_management_regs->calDACCtrl | 0x00000020; // [0010 0000]
}
else
{
time_management_regs->calDACCtrl = time_management_regs->calDACCtrl & 0xffffffdf; // [1101 1111]
}
}
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 );
setCalibrationPrescaler( 0 ); // 25 MHz => 25 000 000
setCalibrationDivisor( 26 ); // => 240 384
setCalibrationDataInterleaved();
}
else
{
setCalibrationPrescaler( 0 ); // 25 MHz => 25 000 000
setCalibrationDivisor( 38 ); // => 160 256 (39 - 1)
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];
housekeeping_packet.hk_lfr_last_exe_tc_type[0] = 0x00;
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@pc-solar1.lab-lpp.local
Current version with modes NORMAL and SBM1 operational
r21 housekeeping_packet.hk_lfr_last_exe_tc_subtype[0] = 0x00;
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
Corrections:...
r107 housekeeping_packet.hk_lfr_last_exe_tc_time[0] = time[0];
housekeeping_packet.hk_lfr_last_exe_tc_time[1] = time[1];
housekeeping_packet.hk_lfr_last_exe_tc_time[2] = time[2];
housekeeping_packet.hk_lfr_last_exe_tc_time[3] = time[3];
housekeeping_packet.hk_lfr_last_exe_tc_time[4] = time[4];
housekeeping_packet.hk_lfr_last_exe_tc_time[5] = time[5];
val = housekeeping_packet.hk_lfr_exe_tc_cnt[0] * 256 + housekeeping_packet.hk_lfr_exe_tc_cnt[1];
val++;
housekeeping_packet.hk_lfr_exe_tc_cnt[0] = (unsigned char) (val >> 8);
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];
housekeeping_packet.hk_lfr_last_rej_tc_type[0] = 0x00;
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@pc-solar1.lab-lpp.local
Current version with modes NORMAL and SBM1 operational
r21 housekeeping_packet.hk_lfr_last_rej_tc_subtype[0] = 0x00;
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
Corrections:...
r107 housekeeping_packet.hk_lfr_last_rej_tc_time[0] = time[0];
housekeeping_packet.hk_lfr_last_rej_tc_time[1] = time[1];
housekeeping_packet.hk_lfr_last_rej_tc_time[2] = time[2];
housekeeping_packet.hk_lfr_last_rej_tc_time[3] = time[3];
housekeeping_packet.hk_lfr_last_rej_tc_time[4] = time[4];
housekeeping_packet.hk_lfr_last_rej_tc_time[5] = time[5];
val = housekeeping_packet.hk_lfr_rej_tc_cnt[0] * 256 + housekeeping_packet.hk_lfr_rej_tc_cnt[1];
val++;
housekeeping_packet.hk_lfr_rej_tc_cnt[0] = (unsigned char) (val >> 8);
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];
housekeeping_packet.lfr_status_word[0] = (unsigned char) ((requestedMode << 4) + 0x0d);
updateLFRCurrentMode();
}
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
void updateLFRCurrentMode()
{
/** 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.
*
*/
// update the local value of lfrCurrentMode with the value contained in the housekeeping_packet structure
lfrCurrentMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
}
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)
{
time_management_regs->ctrl = time_management_regs->ctrl | 0x00000004; // [0100]
}
else
{
time_management_regs->ctrl = time_management_regs->ctrl & 0xfffffffb; // [1011]
}
}
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 }