#ifndef FSW_MISC_H_INCLUDED #define FSW_MISC_H_INCLUDED #include #include #include #include #include "fsw_params.h" #include "fsw_spacewire.h" #include "lfr_cpu_usage_report.h" #define LFR_RESET_CAUSE_UNKNOWN_CAUSE 0 #define WATCHDOG_LOOP_PRINTF 10 #define WATCHDOG_LOOP_DEBUG 3 #define DUMB_MESSAGE_NB 15 #define NB_RTEMS_EVENTS 32 #define EVENT_12 12 #define EVENT_13 13 #define EVENT_14 14 #define DUMB_MESSAGE_0 "in DUMB *** default" #define DUMB_MESSAGE_1 "in DUMB *** timecode_irq_handler" #define DUMB_MESSAGE_2 "in DUMB *** f3 buffer changed" #define DUMB_MESSAGE_3 "in DUMB *** in SMIQ *** Error sending event to AVF0" #define DUMB_MESSAGE_4 "in DUMB *** spectral_matrices_isr *** Error sending event to SMIQ" #define DUMB_MESSAGE_5 "in DUMB *** waveforms_simulator_isr" #define DUMB_MESSAGE_6 "VHDL SM *** two buffers f0 ready" #define DUMB_MESSAGE_7 "ready for dump" #define DUMB_MESSAGE_8 "VHDL ERR *** spectral matrix" #define DUMB_MESSAGE_9 "tick" #define DUMB_MESSAGE_10 "VHDL ERR *** waveform picker" #define DUMB_MESSAGE_11 "VHDL ERR *** unexpected ready matrix values" #define DUMB_MESSAGE_12 "WATCHDOG timer" #define DUMB_MESSAGE_13 "TIMECODE timer" #define DUMB_MESSAGE_14 "TIMECODE ISR" enum lfr_reset_cause_t{ UNKNOWN_CAUSE, POWER_ON, TC_RESET, WATCHDOG, ERROR_RESET, UNEXP_RESET }; typedef struct{ unsigned char dpu_spw_parity; unsigned char dpu_spw_disconnect; unsigned char dpu_spw_escape; unsigned char dpu_spw_credit; unsigned char dpu_spw_write_sync; unsigned char timecode_erroneous; unsigned char timecode_missing; unsigned char timecode_invalid; unsigned char time_timecode_it; unsigned char time_not_synchro; unsigned char time_timecode_ctr; unsigned char ahb_correctable; } hk_lfr_le_t; typedef struct{ unsigned char dpu_spw_early_eop; unsigned char dpu_spw_invalid_addr; unsigned char dpu_spw_eep; unsigned char dpu_spw_rx_too_big; } hk_lfr_me_t; extern gptimer_regs_t *gptimer_regs; extern void ASR16_get_FPRF_IURF_ErrorCounters( unsigned int*, unsigned int* ); extern void CCR_getInstructionAndDataErrorCounters( unsigned int*, unsigned int* ); rtems_name name_hk_rate_monotonic; // name of the HK rate monotonic rtems_id HK_id; // id of the HK rate monotonic period rtems_name name_avgv_rate_monotonic; // name of the AVGV rate monotonic rtems_id AVGV_id; // id of the AVGV rate monotonic period void timer_configure( unsigned char timer, unsigned int clock_divider, unsigned char interrupt_level, rtems_isr (*timer_isr)() ); void timer_start( unsigned char timer ); void timer_stop( unsigned char timer ); void timer_set_clock_divider(unsigned char timer, unsigned int clock_divider); // WATCHDOG rtems_isr watchdog_isr( rtems_vector_number vector ); void watchdog_configure(void); void watchdog_stop(void); void watchdog_reload(void); void watchdog_start(void); // SERIAL LINK int send_console_outputs_on_apbuart_port( void ); int enable_apbuart_transmitter( void ); void set_apbuart_scaler_reload_register(unsigned int regs, unsigned int value); // RTEMS TASKS rtems_task load_task( rtems_task_argument argument ); rtems_task hous_task( rtems_task_argument argument ); rtems_task avgv_task( rtems_task_argument argument ); rtems_task dumb_task( rtems_task_argument unused ); void init_housekeeping_parameters( void ); void increment_seq_counter(unsigned short *packetSequenceControl); void getTime( unsigned char *time); unsigned long long int getTimeAsUnsignedLongLongInt( ); void send_dumb_hk( void ); void get_temperatures( unsigned char *temperatures ); void get_v_e1_e2_f3( unsigned char *spacecraft_potential ); void get_cpu_load( unsigned char *resource_statistics ); void set_hk_lfr_sc_potential_flag( bool state ); void set_sy_lfr_pas_filter_enabled( bool state ); void set_sy_lfr_watchdog_enabled( bool state ); void set_hk_lfr_calib_enable( bool state ); void set_hk_lfr_reset_cause( enum lfr_reset_cause_t lfr_reset_cause ); void hk_lfr_le_me_he_update(); void set_hk_lfr_time_not_synchro(); extern int sched_yield( void ); extern void rtems_cpu_usage_reset(); extern ring_node *current_ring_node_f3; extern ring_node *ring_node_to_send_cwf_f3; extern ring_node waveform_ring_f3[]; extern unsigned short sequenceCounterHK; extern unsigned char hk_lfr_q_sd_fifo_size_max; extern unsigned char hk_lfr_q_rv_fifo_size_max; extern unsigned char hk_lfr_q_p0_fifo_size_max; extern unsigned char hk_lfr_q_p1_fifo_size_max; extern unsigned char hk_lfr_q_p2_fifo_size_max; #endif // FSW_MISC_H_INCLUDED