##// END OF EJS Templates
the interrupt sub routine related to the waveform picker is now lighter...
the interrupt sub routine related to the waveform picker is now lighter no more picks are observed on the waveforms

File last commit:

r112:5b5da8d2c053 VHDLib206
r112:5b5da8d2c053 VHDLib206
Show More
tc_handler.c
885 lines | 28.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@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@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 while(1)
{
paul
Last commit before release 0-13...
r35 status = rtems_message_queue_receive( queue_rcv_id, (char*) &TC, &size,
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 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)
{
case TC_SUBTYPE_RESET:
paul
fsw-0-23...
r75 result = action_reset( &TC, queue_snd_id, time );
paul
rev 1.0.0.2...
r104 close_action( &TC, result, queue_snd_id );
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 break;
paul@pc-solar1.lab-lpp.local
Several TC actions added...
r11 //
case TC_SUBTYPE_LOAD_COMM:
paul
packet emission task added...
r33 result = action_load_common_par( &TC );
paul
rev 1.0.0.2...
r104 close_action( &TC, result, queue_snd_id );
paul@pc-solar1.lab-lpp.local
Several TC actions added...
r11 break;
//
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 case TC_SUBTYPE_LOAD_NORM:
paul
fsw-0-23...
r75 result = action_load_normal_par( &TC, queue_snd_id, time );
paul
rev 1.0.0.2...
r104 close_action( &TC, result, queue_snd_id );
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 break;
paul@pc-solar1.lab-lpp.local
Several TC actions added...
r11 //
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 case TC_SUBTYPE_LOAD_BURST:
paul
fsw-0-23...
r75 result = action_load_burst_par( &TC, queue_snd_id, time );
paul
rev 1.0.0.2...
r104 close_action( &TC, result, queue_snd_id );
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 break;
paul@pc-solar1.lab-lpp.local
Several TC actions added...
r11 //
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 case TC_SUBTYPE_LOAD_SBM1:
paul
fsw-0-23...
r75 result = action_load_sbm1_par( &TC, queue_snd_id, time );
paul
rev 1.0.0.2...
r104 close_action( &TC, result, queue_snd_id );
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 break;
paul@pc-solar1.lab-lpp.local
Several TC actions added...
r11 //
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 case TC_SUBTYPE_LOAD_SBM2:
paul
fsw-0-23...
r75 result = action_load_sbm2_par( &TC, queue_snd_id, time );
paul
rev 1.0.0.2...
r104 close_action( &TC, result, queue_snd_id );
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 break;
paul@pc-solar1.lab-lpp.local
Several TC actions added...
r11 //
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 case TC_SUBTYPE_DUMP:
paul
Header files inclusion reworked...
r40 result = action_dump_par( queue_snd_id );
paul
rev 1.0.0.2...
r104 close_action( &TC, result, queue_snd_id );
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 break;
paul@pc-solar1.lab-lpp.local
Several TC actions added...
r11 //
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 case TC_SUBTYPE_ENTER:
paul
the TC_ENTER_MODE time parameter is taken into account...
r111 result = action_enter_mode( &TC, queue_snd_id );
paul
rev 1.0.0.2...
r104 close_action( &TC, result, queue_snd_id );
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 break;
paul@pc-solar1.lab-lpp.local
Several TC actions added...
r11 //
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 case TC_SUBTYPE_UPDT_INFO:
paul
Last commit before release 0-13...
r35 result = action_update_info( &TC, queue_snd_id );
paul
rev 1.0.0.2...
r104 close_action( &TC, result, queue_snd_id );
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 break;
paul@pc-solar1.lab-lpp.local
Several TC actions added...
r11 //
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 case TC_SUBTYPE_EN_CAL:
paul
fsw-0-23...
r75 result = action_enable_calibration( &TC, queue_snd_id, time );
paul
rev 1.0.0.2...
r104 close_action( &TC, result, queue_snd_id );
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 break;
paul@pc-solar1.lab-lpp.local
Several TC actions added...
r11 //
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 case TC_SUBTYPE_DIS_CAL:
paul
fsw-0-23...
r75 result = action_disable_calibration( &TC, queue_snd_id, time );
paul
rev 1.0.0.2...
r104 close_action( &TC, result, queue_snd_id );
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 break;
paul@pc-solar1.lab-lpp.local
Several TC actions added...
r11 //
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 case TC_SUBTYPE_UPDT_TIME:
paul
packet emission task added...
r33 result = action_update_time( &TC );
paul
rev 1.0.0.2...
r104 close_action( &TC, result, queue_snd_id );
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 break;
paul@pc-solar1.lab-lpp.local
Several TC actions added...
r11 //
paul@pc-solar1.lab-lpp.local
Message queue implemented for valid TC processing...
r9 default:
break;
}
}
}
}
//***********
// 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
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
the TC_ENTER_MODE time parameter is taken into account...
r111 else // the mode value is consistent, 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
rev 1.0.0.2...
r104 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
the TC_ENTER_MODE time parameter is taken into account...
r111 if ( status == LFR_SUCCESSFUL ) // the transition is valid, enter the mode
{
status = check_transition_date( transitionCoarseTime );
if (status != LFR_SUCCESSFUL)
{
PRINTF("ERR *** in action_enter_mode *** check_transition_date\n")
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_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);
status = enter_mode( requestedMode, transitionCoarseTime );
}
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);
}
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;
unsigned char lfrMode;
result = LFR_DEFAULT;
lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
paul
rev 1.0.0.2...
r104 send_tm_lfr_tc_exe_not_implemented( TC, queue_id, time );
result = LFR_DEFAULT;
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;
unsigned char lfrMode;
result = LFR_DEFAULT;
lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
paul
rev 1.0.0.2...
r104 send_tm_lfr_tc_exe_not_implemented( TC, queue_id, time );
result = LFR_DEFAULT;
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)
+ (TC->dataAndCRC[1] << 16)
+ (TC->dataAndCRC[2] << 8)
+ TC->dataAndCRC[3];
paul
rev 1.0.0.3
r109
PRINTF1("time received: %x\n", time_management_regs->coarse_time_load)
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);
paul
Corrections:...
r107 // time_management_regs->ctrl = time_management_regs->ctrl | 1; // force tick
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
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
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
the interrupt sub routine related to the waveform picker is now lighter...
r112 if ( transitionCoarseTime <= localCoarseTime ) // SSS-CP-EQS-322
paul
the TC_ENTER_MODE time parameter is taken into account...
r111 {
status = LFR_DEFAULT;
PRINTF2("ERR *** in check_transition_date *** transition = %x, local = %x\n", transitionCoarseTime, localCoarseTime)
}
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
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
the function asm_reorganize format the spectral matrix to the ICD format
r103 LEON_Mask_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt
paul
Sync
r99
// (2) clear interruptions
LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); // clear waveform picker interrupt
paul
the function asm_reorganize format the spectral matrix to the ICD format
r103 LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt
paul
Sync
r99
paul
rev 1.0.0.4
r110 // (3) 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
// (4) reset spectral matrices registers
paul
snapshots extraction fully functionnal in SBM1 and SBM2
r106 set_irq_on_new_ready_matrix( 0 ); // stop the spectral matrices
set_run_matrix_spectral( 0 ); // run_matrix_spectral is set to 0
reset_extractSWF(); // reset the extractSWF flag to false
paul
Sync
r99
// <Spectral Matrices simulator>
LEON_Mask_interrupt( IRQ_SM_SIMULATOR ); // mask spectral matrix interrupt simulator
timer_stop( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR );
LEON_Clear_interrupt( IRQ_SM_SIMULATOR ); // clear spectral matrix interrupt simulator
// </Spectral Matrices simulator>
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
the TC_ENTER_MODE time parameter is taken into account...
r111 int enter_mode( unsigned char mode, unsigned int transitionCoarseTime )
paul@pc-solar1.lab-lpp.local
Slight changes on the flight software
r20 {