#ifndef TC_HANDLER_H_INCLUDED #define TC_HANDLER_H_INCLUDED #include #include #include "tc_load_dump_parameters.h" #include "tc_acceptance.h" #include "tm_lfr_tc_exe.h" #include "wf_handler.h" #include "fsw_processing.h" #include "lfr_cpu_usage_report.h" #define MAX_DELTA_COARSE_TIME 3 #define NB_SCIENCE_TASKS 10 #define NB_ASM_TASKS 6 #define STATUS_0 0 #define STATUS_1 1 #define STATUS_2 2 #define STATUS_3 3 #define STATUS_4 4 #define STATUS_5 5 #define STATUS_6 6 #define STATUS_7 7 #define STATUS_8 8 #define STATUS_9 9 #define CAL_F0 625. #define CAL_F1 10000. #define CAL_W0 (2. * pi * CAL_F0) #define CAL_W1 (2. * pi * CAL_F1) #define CAL_A0 1. #define CAL_A1 2. #define CAL_FS 160256.410 #define CAL_SCALE_FACTOR (0.250 / 0.000654) // 191, 500 mVpp, 2 sinus waves => 500 mVpp each, amplitude = 250 mV #define CAL_NB_PTS 256 #define CAL_DATA_MASK 0xfff #define CAL_F_DIVISOR 38 // 25 MHz => 160 256 (39 - 1) #define CAL_F_DIVISOR_MIN 38 #define CAL_F_DIVISOR_MAX (38*2*2*2*2) // INTERLEAVED MODE #define CAL_FS_INTER 240384.615 #define CAL_NB_PTS_INTER 384 #define CAL_DATA_MASK_INTER 0x3f #define CAL_DATA_SHIFT_INTER 12 #define BYTES_FOR_2_SAMPLES 3 // one need 3 bytes = 24 bits to store 3 samples of 12 bits in interleaved mode #define STEPS_FOR_STORAGE_INTER 128 #define CAL_F_DIVISOR_INTER 26 // 25 MHz => 240 384 extern unsigned int lastValidEnterModeTime; extern unsigned char oneTcLfrUpdateTimeReceived; //*********** // RTEMS TASK rtems_task actn_task( rtems_task_argument unused ); //*********** // TC ACTIONS int action_reset( ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time ); int action_enter_mode(ccsdsTelecommandPacket_t *TC, rtems_id queue_id); int action_update_info( ccsdsTelecommandPacket_t *TC, rtems_id queue_id ); int action_enable_calibration( ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time ); int action_disable_calibration( ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time ); int action_update_time( ccsdsTelecommandPacket_t *TC); // mode transition int check_mode_value( unsigned char requestedMode ); int check_mode_transition( unsigned char requestedMode ); void update_last_valid_transition_date( unsigned int transitionCoarseTime ); 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_normal( unsigned int transitionCoarseTime ); int enter_mode_burst( unsigned int transitionCoarseTime ); int enter_mode_sbm1( unsigned int transitionCoarseTime ); int enter_mode_sbm2( unsigned int transitionCoarseTime ); int restart_science_tasks( unsigned char lfrRequestedMode ); int restart_asm_tasks(unsigned char lfrRequestedMode ); int suspend_science_tasks(void); int suspend_asm_tasks( void ); void launch_waveform_picker( unsigned char mode , unsigned int transitionCoarseTime ); void launch_spectral_matrix( void ); void set_sm_irq_onNewMatrix( unsigned char value ); void set_sm_irq_onError( unsigned char value ); // other functions void updateLFRCurrentMode(unsigned char requestedMode); void set_lfr_soft_reset( unsigned char value ); void reset_lfr( void ); // CALIBRATION void setCalibrationPrescaler( unsigned int prescaler ); void setCalibrationDivisor( unsigned int divisionFactor ); void setCalibrationData( void ); void setCalibrationReload( bool state); void setCalibrationEnable( bool state ); #ifdef ENABLE_DEAD_CODE void setCalibrationInterleaved( bool state ); #endif void setCalibration( bool state ); void configureCalibration( bool interleaved ); // void update_last_TC_exe( ccsdsTelecommandPacket_t *TC , unsigned char *time ); void update_last_TC_rej(ccsdsTelecommandPacket_t *TC , unsigned char *time ); void close_action( ccsdsTelecommandPacket_t *TC, int result, rtems_id queue_id ); extern rtems_status_code get_message_queue_id_send( rtems_id *queue_id ); extern rtems_status_code get_message_queue_id_recv( rtems_id *queue_id ); #endif // TC_HANDLER_H_INCLUDED