##// END OF EJS Templates
Switched to O3 with no inlining optim level for debug builds...
Switched to O3 with no inlining optim level for debug builds Debug builds are mostly used for gcov while it seems a bad idea(-O3), with O0 the FSW uses more than 100% CPU in normal mode so the treadoff is to switch to O3 without inlining, this preserves the 1 to 1 relation between code and gcov counters.

File last commit:

r384:c56e87012e2b No PWD scrub with...
r397:0c445dc7a949 R3++
Show More
wf_handler.h
115 lines | 3.7 KiB | text/x-c | CLexer
#ifndef WF_HANDLER_H_INCLUDED
#define WF_HANDLER_H_INCLUDED
#include <rtems.h>
#include <grspw.h>
#include <stdio.h>
#include <math.h>
#include <fsw_params.h>
#include "fsw_init.h"
#include "fsw_params_wf_handler.h"
#define pi 3.14159265359
#define T0_IN_FINETIME ( 65536. / 24576. )
#define T1_IN_FINETIME ( 65536. / 4096. )
#define T2_IN_FINETIME ( 65536. / 256. )
#define T3_IN_FINETIME ( 65536. / 16. )
#define TICKS_PER_T1 16
#define TICKS_PER_T2 256
#define TICKS_PER_S 65536.
#define MS_PER_S 1000.
#define FREQ_F0 24576.
#define FREQ_F1 4096.
#define FREQ_F2 256.
#define DELTAT_F0 2731 // (2048. / 24576. / 2.) * 65536. = 2730.667;
#define DELTAT_F1 16384 // (2048. / 4096. / 2.) * 65536. = 16384;
#define DELTAT_F2 262144 // (2048. / 256. / 2.) * 65536. = 262144;
#define OFFSET_2_BYTES 2
#define ONE_TICK_CORR_INTERVAL_0_MIN 0.5
#define ONE_TICK_CORR_INTERVAL_0_MAX 1.0
#define ONE_TICK_CORR_INTERVAL_1_MIN -1.0
#define ONE_TICK_CORR_INTERVAL_1_MAX -0.5
#define ONE_TICK_CORR 1
#define CORR_MULT 2
extern int fdSPW;
//*****************
// waveform buffers
extern volatile int wf_buffer_f0[ ];
extern volatile int wf_buffer_f1[ ];
extern volatile int wf_buffer_f2[ ];
extern volatile int wf_buffer_f3[ ];
extern waveform_picker_regs_0_1_18_t *waveform_picker_regs;
extern time_management_regs_t *time_management_regs;
extern Packet_TM_LFR_HK_t housekeeping_packet;
extern Packet_TM_LFR_PARAMETER_DUMP_t parameter_dump_packet;
extern struct param_local_str param_local;
extern unsigned short sequenceCounters_SCIENCE_NORMAL_BURST;
extern unsigned short sequenceCounters_SCIENCE_SBM1_SBM2;
extern rtems_id Task_id[]; /* array of task ids */
extern unsigned char lfrCurrentMode;
//**********
// RTEMS_ISR
void reset_extractSWF( void );
rtems_isr waveforms_isr( rtems_vector_number vector );
//***********
// RTEMS_TASK
rtems_task wfrm_task( rtems_task_argument argument );
rtems_task cwf3_task( rtems_task_argument argument );
rtems_task cwf2_task( rtems_task_argument argument );
rtems_task cwf1_task( rtems_task_argument argument );
rtems_task swbd_task( rtems_task_argument argument );
//******************
// general functions
void WFP_init_rings( void );
void init_ring( ring_node ring[], unsigned char nbNodes, volatile int buffer[] , unsigned int bufferSize );
void WFP_reset_current_ring_nodes( void );
//
int init_header_continuous_cwf3_light_table( Header_TM_LFR_SCIENCE_CWF_t *headerCWF );
//
int send_waveform_CWF3_light(ring_node *ring_node_to_send, ring_node *ring_node_cwf3_light, rtems_id queue_id );
//
void compute_acquisition_time(unsigned int coarseTime, unsigned int fineTime,
unsigned int sid, unsigned char pa_lfr_pkt_nr, unsigned char *acquisitionTime );
void build_snapshot_from_ring(ring_node *ring_node_to_send, unsigned char frequencyChannel ,
unsigned long long acquisitionTimeF0_asLong, ring_node *ring_node_swf_extracted, int *swf_extracted);
double computeCorrection( unsigned char *timePtr );
void applyCorrection( double correction );
void snapshot_resynchronization( unsigned char *timePtr );
//
rtems_id get_pkts_queue_id( void );
//**************
// wfp registers
// RESET
void reset_wfp_burst_enable( void );
void reset_wfp_status( void );
void reset_wfp_buffer_addresses( void );
void reset_waveform_picker_regs( void );
// SET
void set_wfp_data_shaping(void);
void set_wfp_burst_enable_register( unsigned char mode );
void set_wfp_delta_snapshot( void );
void set_wfp_delta_f0_f0_2( void );
void set_wfp_delta_f1( void );
void set_wfp_delta_f2( void );
//*****************
// local parameters
void increment_seq_counter_source_id( unsigned char *packet_sequence_control, unsigned int sid );
#endif // WF_HANDLER_H_INCLUDED