##// 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 {
paul
Minor modifications to meet Logiscope requirements
r77 /** This function is launched after a mode transition validation.
*
* @param mode is the mode in which LFR will be put.
*
* @return RTEMS directive status codes:
* - RTEMS_SUCCESSFUL - the mode has been entered successfully
* - RTEMS_NOT_SATISFIED - the mode has not been entered successfully
*
*/
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
Slight changes on the flight software
r20
paul
rev 1.0.0.3
r109 //**********************
// STOP THE CURRENT MODE
status = stop_current_mode();
if (status != RTEMS_SUCCESSFUL)
{
PRINTF1("ERR *** in enter_mode *** stop_current_mode with mode = %d\n", mode)
}
paul
packet emission task added...
r33
paul
rev 1.0.0.3
r109 //*************************
// ENTER THE REQUESTED MODE
paul
rev 1.0.0.1
r98 if ( (mode == LFR_MODE_NORMAL) || (mode == LFR_MODE_BURST)
|| (mode == LFR_MODE_SBM1) || (mode == LFR_MODE_SBM2) )
{
paul
Sync
r99 #ifdef PRINT_TASK_STATISTICS
rtems_cpu_usage_reset();
maxCount = 0;
#endif
paul
rev 1.0.0.1
r98 status = restart_science_tasks();
paul
the TC_ENTER_MODE time parameter is taken into account...
r111 launch_waveform_picker( mode, transitionCoarseTime );
paul
rev 1.0.0.3
r109 // launch_spectral_matrix( mode );
paul
rev 1.0.0.1
r98 }
else if ( mode == LFR_MODE_STANDBY )
{
#ifdef PRINT_TASK_STATISTICS
rtems_cpu_usage_report();
#endif
#ifdef PRINT_STACK_REPORT
rtems_stack_checker_report_usage();
#endif
paul
Sync
r99 PRINTF1("maxCount = %d\n", maxCount)
}
else
{
status = RTEMS_UNSATISFIED;
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
rev 1.0.0.3
r109 PRINTF1("ERR *** in enter_mode *** status = %d\n", status)
paul
packet emission task added...
r33 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
sy_lfr_n_swf_p implemented...
r32 int restart_science_tasks()
{
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
*
* Science tasks are AVF0, BPF0, WFRM, CWF3, CW2, CWF1
*
*/
paul
packet emission task added...
r33 rtems_status_code status[6];
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
packet emission task added...
r33 status[0] = rtems_task_restart( Task_id[TASKID_AVF0], 1 );
paul
Last commit before release 0-13...
r35 if (status[0] != RTEMS_SUCCESSFUL)
{
PRINTF1("in restart_science_task *** 0 ERR %d\n", status[0])
}
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)
{
PRINTF1("in restart_science_task *** 2 ERR %d\n", status[2])
}
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)
{
PRINTF1("in restart_science_task *** 3 ERR %d\n", status[3])
}
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)
{
PRINTF1("in restart_science_task *** 4 ERR %d\n", status[4])
}
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)
{
PRINTF1("in restart_science_task *** 5 ERR %d\n", status[5])
}
paul
packet emission task added...
r33
paul
Bug #60 corrected...
r102 if ( (status[0] != RTEMS_SUCCESSFUL) || (status[2] != RTEMS_SUCCESSFUL) ||
paul
packet emission task added...
r33 (status[3] != RTEMS_SUCCESSFUL) || (status[4] != RTEMS_SUCCESSFUL) || (status[5] != RTEMS_SUCCESSFUL) )
{
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 }
int suspend_science_tasks()
{
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
Header files inclusion reworked...
r40 status = rtems_task_suspend( Task_id[TASKID_AVF0] );
if (status != RTEMS_SUCCESSFUL)
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
fsw-0-16...
r47
paul
Header files inclusion reworked...
r40 if (status == RTEMS_SUCCESSFUL) // suspend WFRM
{
status = rtems_task_suspend( Task_id[TASKID_WFRM] );
if (status != RTEMS_SUCCESSFUL)
{
PRINTF1("in suspend_science_task *** WFRM ERR %d\n", status)
}
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] );
if (status != RTEMS_SUCCESSFUL)
{
PRINTF1("in suspend_science_task *** CWF3 ERR %d\n", status)
}
paul
Last commit before release 0-13...
r35 }
paul
fsw-0-16...
r47
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] );
if (status != RTEMS_SUCCESSFUL)
{
PRINTF1("in suspend_science_task *** CWF2 ERR %d\n", status)
}
}
paul
fsw-0-16...
r47
paul
Header files inclusion reworked...
r40 if (status == RTEMS_SUCCESSFUL) // suspend CWF1
{
status = rtems_task_suspend( Task_id[TASKID_CWF1] );
if (status != RTEMS_SUCCESSFUL)
{
PRINTF1("in suspend_science_task *** CWF1 ERR %d\n", status)
}
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
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 {
reset_current_ring_nodes();
paul
Sync
r97 reset_waveform_picker_regs();
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
VHDL_DEV implemented. The code is compatible with:...
r91 waveform_picker_regs->run_burst_enable = waveform_picker_regs->run_burst_enable | 0x80; // [1000 0000]
paul
the TC_ENTER_MODE time parameter is taken into account...
r111 if (transitionCoarseTime == 0)
{
waveform_picker_regs->start_date = time_management_regs->coarse_time;
}
else
{
waveform_picker_regs->start_date = transitionCoarseTime;
}
paul
Sync
r95 }
void launch_spectral_matrix( unsigned char mode )
{
paul
Sync
r99 reset_nb_sm_f0();
paul
Sync
r95 reset_current_sm_ring_nodes();
reset_spectral_matrix_regs();
paul
Sync
r99
paul
snapshots extraction fully functionnal in SBM1 and SBM2
r106 #ifdef VHDL_DEV
paul
rev 1.0.0.3
r109 struct grgpio_regs_str *grgpio_regs = (struct grgpio_regs_str *) REGS_ADDR_GRGPIO;
grgpio_regs->io_port_direction_register =
grgpio_regs->io_port_direction_register | 0x01; // [0001 1000], 0 = output disabled, 1 = output enabled
paul
rev 1.0.0.4
r110 grgpio_regs->io_port_output_register = grgpio_regs->io_port_output_register | 0x00; // set the bit 0 to 1
paul
snapshots extraction fully functionnal in SBM1 and SBM2
r106 set_irq_on_new_ready_matrix( 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
snapshots extraction fully functionnal in SBM1 and SBM2
r106 set_run_matrix_spectral( 1 );
#else
// Spectral Matrices simulator
timer_start( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR );
LEON_Clear_interrupt( IRQ_SM_SIMULATOR );
LEON_Unmask_interrupt( IRQ_SM_SIMULATOR );
#endif
paul
the function asm_reorganize format the spectral matrix to the ICD format
r103 }
paul
snapshots extraction fully functionnal in SBM1 and SBM2
r106 void set_irq_on_new_ready_matrix( 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
snapshots extraction fully functionnal in SBM1 and SBM2
r106 void set_run_matrix_spectral( 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
Corrections:...
r107 spectral_matrix_regs->config = spectral_matrix_regs->config | 0x4; // [0100] set run_matrix spectral to 1
paul
snapshots extraction fully functionnal in SBM1 and SBM2
r106 }
else
{
paul
Corrections:...
r107 spectral_matrix_regs->config = spectral_matrix_regs->config & 0xfffffffb; // [1011] set run_matrix spectral to 0
paul
snapshots extraction fully functionnal in SBM1 and SBM2
r106 }
paul
the function asm_reorganize format the spectral matrix to the ICD format
r103 }
void launch_spectral_matrix_simu( unsigned char mode )
{
reset_nb_sm_f0();
reset_current_sm_ring_nodes();
reset_spectral_matrix_regs();
paul
Sync
r95 // Spectral Matrices simulator
timer_start( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR );
paul
Sync
r99 LEON_Clear_interrupt( IRQ_SM_SIMULATOR );
LEON_Unmask_interrupt( IRQ_SM_SIMULATOR );
paul
Sync
r95 set_local_nb_interrupt_f0_MAX();
paul
Integration of the VHDL_DEV option...
r90 }
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
the interrupt sub routine related to the waveform picker is now lighter...
r112 else
{
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@pc-solar1.lab-lpp.local
FSW modified to have correct answers to TC_LFR_DUMP_PAR
r15 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@pc-solar1.lab-lpp.local
FSW modified to have correct answers to TC_LFR_DUMP_PAR
r15 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