##// END OF EJS Templates
Integration of basic parameters functions in the flight software...
Integration of basic parameters functions in the flight software BP1 and BP2 are computed constant LSB_FIRST_TCH is defined (will be removed later) k coefficients are initialized in the init task v, e1 and e2 are read directly in buffers and put in HK packets sending functions slightly modified spectral matrices are now correctly timestamped a few changes to LFR_basic-parameters

File last commit:

r179:f0fdfd2b8c4c VHDL_0_1_28
r179:f0fdfd2b8c4c VHDL_0_1_28
Show More
fsw_processing.h
298 lines | 11.0 KiB | text/x-c | CLexer
paul
Sources reorganized...
r126 #ifndef FSW_PROCESSING_H_INCLUDED
#define FSW_PROCESSING_H_INCLUDED
#include <rtems.h>
#include <grspw.h>
#include <math.h>
#include <stdlib.h> // abs() is in the stdlib
#include <stdio.h> // printf()
#include <math.h>
paul
Sync
r175 #include <grlib_regs.h>
paul
Sources reorganized...
r126
#include "fsw_params.h"
#include "fsw_spacewire.h"
typedef struct ring_node_asm
{
struct ring_node_asm *next;
float matrix[ TOTAL_SIZE_SM ];
unsigned int status;
} ring_node_asm;
paul
sequence_cnt field set for BP and ASM packets
r133 typedef struct
paul
Sources reorganized...
r126 {
paul
Integration of basic parameters functions in the flight software...
r179 unsigned char targetLogicalAddress;
unsigned char protocolIdentifier;
unsigned char reserved;
unsigned char userApplication;
unsigned char packetID[2];
unsigned char packetSequenceControl[2];
unsigned char packetLength[2];
// DATA FIELD HEADER
unsigned char spare1_pusVersion_spare2;
unsigned char serviceType;
unsigned char serviceSubType;
unsigned char destinationID;
unsigned char time[6];
// AUXILIARY HEADER
unsigned char sid;
unsigned char biaStatusInfo;
unsigned char acquisitionTime[6];
unsigned char pa_lfr_bp_blk_nr[2];
// SOURCE DATA
paul
Sources reorganized...
r126 unsigned char data[ 30 * 22 ]; // MAX size is 22 * 30 [TM_LFR_SCIENCE_BURST_BP2_F1]
} bp_packet;
paul
sequence_cnt field set for BP and ASM packets
r133 typedef struct
paul
Sources reorganized...
r126 {
Header_TM_LFR_SCIENCE_BP_with_spare_t header;
unsigned char data[ 9 * 13 ]; // only for TM_LFR_SCIENCE_NORMAL_BP1_F0 and F1
} bp_packet_with_spare;
paul
sequence_cnt field set for BP and ASM packets
r133 typedef struct
paul
Sources reorganized...
r126 {
ring_node_asm *norm;
ring_node_asm *burst_sbm;
rtems_event_set event;
paul
Integration of basic parameters functions in the flight software...
r179 unsigned int coarseTimeNORM;
unsigned int fineTimeNORM;
unsigned int coarseTimeSBM;
unsigned int fineTimeSBM;
paul
Sources reorganized...
r126 } asm_msg;
extern volatile int sm_f0[ ];
extern volatile int sm_f1[ ];
extern volatile int sm_f2[ ];
// parameters
extern struct param_local_str param_local;
// registers
extern time_management_regs_t *time_management_regs;
paul
Integration of basic parameters functions in the flight software...
r179 extern volatile spectral_matrix_regs_t *spectral_matrix_regs;
paul
Sources reorganized...
r126
extern rtems_name misc_name[5];
extern rtems_id Task_id[20]; /* array of task ids */
paul
Integration of basic parameters functions in the flight software...
r179 //
ring_node * getRingNodeForAveraging( unsigned char frequencyChannel);
paul
Sources reorganized...
r126 // ISR
rtems_isr spectral_matrices_isr( rtems_vector_number vector );
rtems_isr spectral_matrices_isr_simu( rtems_vector_number vector );
//******************
// Spectral Matrices
void reset_nb_sm( void );
// SM
void SM_init_rings( void );
void SM_reset_current_ring_nodes( void );
// ASM
void ASM_generic_init_ring(ring_node_asm *ring, unsigned char nbNodes );
//*****************
// Basic Parameters
void BP_reset_current_ring_nodes( void );
paul
Integration of basic parameters functions in the flight software...
r179 void BP_init_header(bp_packet *header,
paul
sequence_cnt field set for BP and ASM packets
r133 unsigned int apid, unsigned char sid,
unsigned int packetLength , unsigned char blkNr);
void BP_init_header_with_spare( Header_TM_LFR_SCIENCE_BP_with_spare_t *header,
unsigned int apid, unsigned char sid,
unsigned int packetLength, unsigned char blkNr );
void BP_send( char *data,
rtems_id queue_id ,
unsigned int nbBytesToSend , unsigned int sid );
paul
Sources reorganized...
r126
//******************
// general functions
paul
The flight software is now compatible with the VHDL 0.1.32...
r171 void reset_sm_status( void );
paul
Sources reorganized...
r126 void reset_spectral_matrix_regs( void );
void set_time(unsigned char *time, unsigned char *timeInBuffer );
paul
Sync
r139 unsigned long long int get_acquisition_time( unsigned char *timePtr );
paul
Bug #117
r149 unsigned char getSID( rtems_event_set event );
paul
Sources reorganized...
r126
extern rtems_status_code get_message_queue_id_prc1( rtems_id *queue_id );
extern rtems_status_code get_message_queue_id_prc2( rtems_id *queue_id );
//***************************************
// DEFINITIONS OF STATIC INLINE FUNCTIONS
paul
New version of the waveform picker packet transmission...
r172 static inline void SM_average(float *averaged_spec_mat_NORM, float *averaged_spec_mat_SBM,
paul
Integration of basic parameters functions in the flight software...
r179 ring_node *ring_node_tab[],
unsigned int nbAverageNORM, unsigned int nbAverageSBM,
asm_msg *msgForMATR );
paul
New version of the waveform picker packet transmission...
r172 static inline void SM_average_debug( float *averaged_spec_mat_NORM, float *averaged_spec_mat_SBM,
paul
Integration of basic parameters functions in the flight software...
r179 ring_node *ring_node_tab[],
unsigned int nbAverageNORM, unsigned int nbAverageSBM );
paul
Sources reorganized...
r126 static inline void ASM_reorganize_and_divide(float *averaged_spec_mat, float *averaged_spec_mat_reorganized,
float divider );
static inline void ASM_compress_reorganize_and_divide(float *averaged_spec_mat, float *compressed_spec_mat,
float divider,
unsigned char nbBinsCompressedMatrix, unsigned char nbBinsToAverage , unsigned char ASMIndexStart);
static inline void ASM_convert(volatile float *input_matrix, char *output_matrix);
paul
New version of ASM packets transmission...
r173 void SM_average( float *averaged_spec_mat_NORM, float *averaged_spec_mat_SBM,
paul
Integration of basic parameters functions in the flight software...
r179 ring_node *ring_node_tab[],
unsigned int nbAverageNORM, unsigned int nbAverageSBM,
asm_msg *msgForMATR )
paul
Sources reorganized...
r126 {
float sum;
unsigned int i;
for(i=0; i<TOTAL_SIZE_SM; i++)
{
sum = ( (int *) (ring_node_tab[0]->buffer_address) ) [ i ]
+ ( (int *) (ring_node_tab[1]->buffer_address) ) [ i ]
+ ( (int *) (ring_node_tab[2]->buffer_address) ) [ i ]
+ ( (int *) (ring_node_tab[3]->buffer_address) ) [ i ]
+ ( (int *) (ring_node_tab[4]->buffer_address) ) [ i ]
+ ( (int *) (ring_node_tab[5]->buffer_address) ) [ i ]
+ ( (int *) (ring_node_tab[6]->buffer_address) ) [ i ]
+ ( (int *) (ring_node_tab[7]->buffer_address) ) [ i ];
paul
updates for the compliance with the spectral matrix VHDL design
r150 if ( (nbAverageNORM == 0) && (nbAverageSBM == 0) )
paul
Sources reorganized...
r126 {
paul
updates for the compliance with the spectral matrix VHDL design
r150 averaged_spec_mat_NORM[ i ] = sum;
averaged_spec_mat_SBM[ i ] = sum;
paul
Integration of basic parameters functions in the flight software...
r179 msgForMATR->coarseTimeNORM = ring_node_tab[0]->coarseTime;
msgForMATR->fineTimeNORM = ring_node_tab[0]->fineTime;
msgForMATR->coarseTimeSBM = ring_node_tab[0]->coarseTime;
msgForMATR->fineTimeSBM = ring_node_tab[0]->fineTime;
paul
Sources reorganized...
r126 }
paul
updates for the compliance with the spectral matrix VHDL design
r150 else if ( (nbAverageNORM != 0) && (nbAverageSBM != 0) )
paul
Sources reorganized...
r126 {
paul
updates for the compliance with the spectral matrix VHDL design
r150 averaged_spec_mat_NORM[ i ] = ( averaged_spec_mat_NORM[ i ] + sum );
averaged_spec_mat_SBM[ i ] = ( averaged_spec_mat_SBM[ i ] + sum );
paul
Sources reorganized...
r126 }
paul
updates for the compliance with the spectral matrix VHDL design
r150 else if ( (nbAverageNORM != 0) && (nbAverageSBM == 0) )
paul
Sources reorganized...
r126 {
paul
updates for the compliance with the spectral matrix VHDL design
r150 averaged_spec_mat_NORM[ i ] = ( averaged_spec_mat_NORM[ i ] + sum );
averaged_spec_mat_SBM[ i ] = sum;
paul
Integration of basic parameters functions in the flight software...
r179 msgForMATR->coarseTimeSBM = ring_node_tab[0]->coarseTime;
msgForMATR->fineTimeSBM = ring_node_tab[0]->fineTime;
paul
Sources reorganized...
r126 }
else
{
paul
updates for the compliance with the spectral matrix VHDL design
r150 PRINTF2("ERR *** in SM_average *** unexpected parameters %d %d\n", nbAverageNORM, nbAverageSBM)
paul
Sources reorganized...
r126 }
}
}
paul
New version of ASM packets transmission...
r173 void SM_average_debug( float *averaged_spec_mat_NORM, float *averaged_spec_mat_SBM,
ring_node *ring_node_tab[],
paul
New version of the waveform picker packet transmission...
r172 unsigned int nbAverageNORM, unsigned int nbAverageSBM )
{
float sum;
unsigned int i;
for(i=0; i<TOTAL_SIZE_SM; i++)
{
sum = ( (int *) (ring_node_tab[0]->buffer_address) ) [ i ];
if ( (nbAverageNORM == 0) && (nbAverageSBM == 0) )
{
averaged_spec_mat_NORM[ i ] = sum;
averaged_spec_mat_SBM[ i ] = sum;
}
else if ( (nbAverageNORM != 0) && (nbAverageSBM != 0) )
{
averaged_spec_mat_NORM[ i ] = sum;
averaged_spec_mat_SBM[ i ] = sum;
}
else if ( (nbAverageNORM != 0) && (nbAverageSBM == 0) )
{
averaged_spec_mat_NORM[ i ] = sum;
averaged_spec_mat_SBM[ i ] = sum;
}
else
{
PRINTF2("ERR *** in SM_average *** unexpected parameters %d %d\n", nbAverageNORM, nbAverageSBM)
}
}
}
paul
Sources reorganized...
r126 void ASM_reorganize_and_divide( float *averaged_spec_mat, float *averaged_spec_mat_reorganized, float divider )
{
int frequencyBin;
int asmComponent;
paul
Integration of basic parameters functions in the flight software...
r179 unsigned int offsetASM;
unsigned int offsetASMReorganized;
paul
Sources reorganized...
r126
paul
Integration of basic parameters functions in the flight software...
r179 // BUILD DATA
paul
Sources reorganized...
r126 for (asmComponent = 0; asmComponent < NB_VALUES_PER_SM; asmComponent++)
{
for( frequencyBin = 0; frequencyBin < NB_BINS_PER_SM; frequencyBin++ )
{
paul
Integration of basic parameters functions in the flight software...
r179 offsetASMReorganized =
paul
Sources reorganized...
r126 frequencyBin * NB_VALUES_PER_SM
+ asmComponent;
paul
Integration of basic parameters functions in the flight software...
r179 offsetASM =
paul
Sources reorganized...
r126 asmComponent * NB_BINS_PER_SM
+ frequencyBin;
paul
Integration of basic parameters functions in the flight software...
r179 averaged_spec_mat_reorganized[offsetASMReorganized ] =
averaged_spec_mat[ offsetASM ] / divider;
paul
Sources reorganized...
r126 }
}
}
void ASM_compress_reorganize_and_divide(float *averaged_spec_mat, float *compressed_spec_mat , float divider,
unsigned char nbBinsCompressedMatrix, unsigned char nbBinsToAverage, unsigned char ASMIndexStart )
{
int frequencyBin;
int asmComponent;
int offsetASM;
int offsetCompressed;
int k;
paul
Integration of basic parameters functions in the flight software...
r179 // BUILD DATA
paul
Sources reorganized...
r126 for (asmComponent = 0; asmComponent < NB_VALUES_PER_SM; asmComponent++)
{
for( frequencyBin = 0; frequencyBin < nbBinsCompressedMatrix; frequencyBin++ )
{
offsetCompressed = // NO TIME OFFSET
frequencyBin * NB_VALUES_PER_SM
+ asmComponent;
offsetASM = // NO TIME OFFSET
asmComponent * NB_BINS_PER_SM
+ ASMIndexStart
+ frequencyBin * nbBinsToAverage;
compressed_spec_mat[ offsetCompressed ] = 0;
for ( k = 0; k < nbBinsToAverage; k++ )
{
compressed_spec_mat[offsetCompressed ] =
( compressed_spec_mat[ offsetCompressed ]
paul
Integration of basic parameters functions in the flight software...
r179 + averaged_spec_mat[ offsetASM + k ] );
paul
Sources reorganized...
r126 }
paul
Integration of basic parameters functions in the flight software...
r179 compressed_spec_mat[ offsetCompressed ] =
compressed_spec_mat[ offsetCompressed ] / (divider * nbBinsToAverage);
paul
Sources reorganized...
r126 }
}
}
void ASM_convert( volatile float *input_matrix, char *output_matrix)
{
unsigned int frequencyBin;
unsigned int asmComponent;
char * pt_char_input;
char * pt_char_output;
unsigned int offsetInput;
unsigned int offsetOutput;
pt_char_input = (char*) &input_matrix;
pt_char_output = (char*) &output_matrix;
// convert all other data
for( frequencyBin=0; frequencyBin<NB_BINS_PER_SM; frequencyBin++)
{
for ( asmComponent=0; asmComponent<NB_VALUES_PER_SM; asmComponent++)
{
offsetInput = (frequencyBin*NB_VALUES_PER_SM) + asmComponent ;
offsetOutput = 2 * ( (frequencyBin*NB_VALUES_PER_SM) + asmComponent ) ;
pt_char_input = (char*) &input_matrix [ offsetInput ];
pt_char_output = (char*) &output_matrix[ offsetOutput ];
pt_char_output[0] = pt_char_input[0]; // bits 31 downto 24 of the float
pt_char_output[1] = pt_char_input[1]; // bits 23 downto 16 of the float
}
}
}
#endif // FSW_PROCESSING_H_INCLUDED