# HG changeset patch # User paul # Date 2016-01-26 14:32:55 # Node ID aca3cbff85cc897f5dd4a9369fb6d192ad37ff7b # Parent cc5f75e74b54f6015ea362e2bf0c08b7922124d7 a wrong date implies the generation of a TM_LFR_TC_EXE_NOT_EXECUTABLE instead of TM_LFR_TC_EXE_INCONSISTENT diff --git a/.hgsubstate b/.hgsubstate --- a/.hgsubstate +++ b/.hgsubstate @@ -1,2 +1,2 @@ 3081d1f9bb20b2b64a192585337a292a9804e0c5 LFR_basic-parameters -084fd0db5e4139a1096789935e32ef498192f395 header/lfr_common_headers +80d727bb9d808ae67c801c4c6101811d68b94af6 header/lfr_common_headers diff --git a/header/fsw_spacewire.h b/header/fsw_spacewire.h --- a/header/fsw_spacewire.h +++ b/header/fsw_spacewire.h @@ -22,7 +22,7 @@ extern rtems_id timecode_timer_id; rtems_task spiq_task( rtems_task_argument argument ); rtems_task recv_task( rtems_task_argument unused ); rtems_task send_task( rtems_task_argument argument ); -rtems_task wtdg_task( rtems_task_argument argument ); +rtems_task link_task( rtems_task_argument argument ); int spacewire_open_link( void ); int spacewire_start_link( int fd ); diff --git a/header/tc_handler.h b/header/tc_handler.h --- a/header/tc_handler.h +++ b/header/tc_handler.h @@ -39,7 +39,7 @@ void update_last_valid_transition_date( int check_transition_date( unsigned int transitionCoarseTime ); int stop_spectral_matrices( void ); int stop_current_mode( void ); -int enter_mode_standby( void ); +int enter_mode_standby(void ); int enter_mode_normal( unsigned int transitionCoarseTime ); int enter_mode_burst( unsigned int transitionCoarseTime ); int enter_mode_sbm1( unsigned int transitionCoarseTime ); @@ -54,7 +54,7 @@ void set_sm_irq_onNewMatrix( unsigned ch void set_sm_irq_onError( unsigned char value ); // other functions -void updateLFRCurrentMode(); +void updateLFRCurrentMode(unsigned char requestedMode); void set_lfr_soft_reset( unsigned char value ); void reset_lfr( void ); // CALIBRATION diff --git a/src/fsw_init.c b/src/fsw_init.c --- a/src/fsw_init.c +++ b/src/fsw_init.c @@ -35,7 +35,7 @@ #define CONFIGURE_INIT_TASK_ATTRIBUTES (RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT) #define CONFIGURE_MAXIMUM_DRIVERS 16 #define CONFIGURE_MAXIMUM_PERIODS 5 -#define CONFIGURE_MAXIMUM_TIMERS 5 // [spiq] [wtdg] [spacewire_reset_link] +#define CONFIGURE_MAXIMUM_TIMERS 5 // [spiq] [link] [spacewire_reset_link] #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 5 #ifdef PRINT_STACK_REPORT #define CONFIGURE_STACK_CHECKER_ENABLED @@ -172,7 +172,7 @@ rtems_task Init( rtems_task_argument ign // configure calibration configureCalibration( false ); // true means interleaved mode, false is for normal mode - updateLFRCurrentMode(); + updateLFRCurrentMode( LFR_MODE_STANDBY ); BOOT_PRINTF1("in INIT *** lfrCurrentMode is %d\n", lfrCurrentMode) @@ -327,7 +327,7 @@ void create_names( void ) // create all Task_name[TASKID_CWF2] = rtems_build_name( 'C', 'W', 'F', '2' ); Task_name[TASKID_CWF1] = rtems_build_name( 'C', 'W', 'F', '1' ); Task_name[TASKID_SEND] = rtems_build_name( 'S', 'E', 'N', 'D' ); - Task_name[TASKID_WTDG] = rtems_build_name( 'W', 'T', 'D', 'G' ); + Task_name[TASKID_LINK] = rtems_build_name( 'L', 'I', 'N', 'K' ); Task_name[TASKID_AVF1] = rtems_build_name( 'A', 'V', 'F', '1' ); Task_name[TASKID_PRC1] = rtems_build_name( 'P', 'R', 'C', '1' ); Task_name[TASKID_AVF2] = rtems_build_name( 'A', 'V', 'F', '2' ); @@ -379,12 +379,12 @@ int create_all_tasks( void ) // create a RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_SEND] ); } - if (status == RTEMS_SUCCESSFUL) // WTDG + if (status == RTEMS_SUCCESSFUL) // LINK { status = rtems_task_create( - Task_name[TASKID_WTDG], TASK_PRIORITY_WTDG, RTEMS_MINIMUM_STACK_SIZE, + Task_name[TASKID_LINK], TASK_PRIORITY_LINK, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, - RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_WTDG] + RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_LINK] ); } if (status == RTEMS_SUCCESSFUL) // ACTN @@ -571,11 +571,11 @@ int start_all_tasks( void ) // start all BOOT_PRINTF("in INIT *** Error starting TASK_SPIQ\n") } - if (status == RTEMS_SUCCESSFUL) // WTDG + if (status == RTEMS_SUCCESSFUL) // LINK { - status = rtems_task_start( Task_id[TASKID_WTDG], wtdg_task, 1 ); + status = rtems_task_start( Task_id[TASKID_LINK], link_task, 1 ); if (status!=RTEMS_SUCCESSFUL) { - BOOT_PRINTF("in INIT *** Error starting TASK_WTDG\n") + BOOT_PRINTF("in INIT *** Error starting TASK_LINK\n") } } diff --git a/src/fsw_spacewire.c b/src/fsw_spacewire.c --- a/src/fsw_spacewire.c +++ b/src/fsw_spacewire.c @@ -97,8 +97,11 @@ rtems_task spiq_task(rtems_task_argument { PRINTF1("in SPIQ *** ERR enter_standby_mode *** code %d\n", status) } - // wake the WTDG task up to wait for the link recovery - status = rtems_event_send ( Task_id[TASKID_WTDG], RTEMS_EVENT_0 ); + { + updateLFRCurrentMode( LFR_MODE_STANDBY ); + } + // wake the LINK task up to wait for the link recovery + status = rtems_event_send ( Task_id[TASKID_LINK], RTEMS_EVENT_0 ); status = rtems_task_suspend( RTEMS_SELF ); } } @@ -327,20 +330,20 @@ rtems_task send_task( rtems_task_argumen } } -rtems_task wtdg_task( rtems_task_argument argument ) +rtems_task link_task( rtems_task_argument argument ) { rtems_event_set event_out; rtems_status_code status; int linkStatus; - BOOT_PRINTF("in WTDG ***\n") + BOOT_PRINTF("in LINK ***\n") while(1) { // wait for an RTEMS_EVENT rtems_event_receive( RTEMS_EVENT_0, RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out); - PRINTF("in WTDG *** wait for the link\n") + PRINTF("in LINK *** wait for the link\n") status = ioctl(fdSPW, SPACEWIRE_IOCTRL_GET_LINK_STATUS, &linkStatus); // get the link status while( linkStatus != 5) // wait for the link { @@ -352,11 +355,11 @@ rtems_task wtdg_task( rtems_task_argumen if (status != RTEMS_SUCCESSFUL) { - PRINTF1("in WTDG *** ERR link not started %d\n", status) + PRINTF1("in LINK *** ERR link not started %d\n", status) } else { - PRINTF("in WTDG *** OK link started\n") + PRINTF("in LINK *** OK link started\n") } // restart the SPIQ task diff --git a/src/tc_handler.c b/src/tc_handler.c --- a/src/tc_handler.c +++ b/src/tc_handler.c @@ -195,10 +195,8 @@ int action_enter_mode(ccsdsTelecommandPa status = check_transition_date( transitionCoarseTime ); if (status != LFR_SUCCESSFUL) { - PRINTF("ERR *** in action_enter_mode *** check_transition_date\n") - 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 ] ); + PRINTF("ERR *** in action_enter_mode *** check_transition_date\n"); + send_tm_lfr_tc_exe_not_executable(TC, queue_id ); } } @@ -588,7 +586,7 @@ int stop_current_mode( void ) return status; } -int enter_mode_standby() +int enter_mode_standby( void ) { /** This function is used to put LFR in the STANDBY mode. * @@ -1546,8 +1544,7 @@ void close_action(ccsdsTelecommandPacket //********************************** // UPDATE THE LFRMODE LOCAL VARIABLE requestedMode = TC->dataAndCRC[1]; - housekeeping_packet.lfr_status_word[0] = (unsigned char) ((requestedMode << 4) + 0x0d); - updateLFRCurrentMode(); + updateLFRCurrentMode( requestedMode ); } } else if (result == LFR_EXE_ERROR) @@ -1574,15 +1571,17 @@ rtems_isr commutation_isr2( rtems_vector //**************** // OTHER FUNCTIONS -void updateLFRCurrentMode() +void updateLFRCurrentMode( unsigned char requestedMode ) { /** 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; + housekeeping_packet.lfr_status_word[0] = (unsigned char) ((requestedMode << 4) + 0x0d); + lfrCurrentMode = requestedMode; } void set_lfr_soft_reset( unsigned char value )