diff --git a/ccsds_types.h b/ccsds_types.h --- a/ccsds_types.h +++ b/ccsds_types.h @@ -126,7 +126,7 @@ #define TC_LEN_LOAD_K 142 #define TC_LEN_DUMP_K 12 #define TC_LEN_LOAD_FBINS 60 -#define TC_LEN_LOAD_FILTER_PAR 28 +#define TC_LEN_LOAD_FILTER_PAR 92 #define TC_LEN_UPDT_TIME 18 // PACKET CODES @@ -263,7 +263,7 @@ enum apid_destid{ #define PACKET_LENGTH_TC_EXE_ERROR (24 - CCSDS_TC_TM_PACKET_OFFSET) #define PACKET_LENGTH_TC_EXE_CORRUPTED (32 - CCSDS_TC_TM_PACKET_OFFSET) #define PACKET_LENGTH_HK (136 - CCSDS_TC_TM_PACKET_OFFSET) -#define PACKET_LENGTH_PARAMETER_DUMP (148 - CCSDS_TC_TM_PACKET_OFFSET) +#define PACKET_LENGTH_PARAMETER_DUMP (212 - CCSDS_TC_TM_PACKET_OFFSET) #define PACKET_LENGTH_K_DUMP (3920 - CCSDS_TC_TM_PACKET_OFFSET) // SCIENCE ASM #define PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F0_1 (3230 - CCSDS_TC_TM_PACKET_OFFSET) // 32 * 25 * 4 + 30 => 32 bins (32 + 32 + 24 ), 3 packets @@ -742,9 +742,9 @@ typedef struct { unsigned char hk_lfr_buffer_dpu_tm_fifo; // hk_lfr_ahb_ unsigned char hk_lfr_ahb_correctable; - unsigned char hk_lfr_ahb_uncorrectable; // reaction wheel frequency - unsigned char hk_lfr_sc_rw_f_flags; + unsigned char hk_lfr_sc_rw1_rw2_f_flags; + unsigned char hk_lfr_sc_rw3_rw4_f_flags; } Packet_TM_LFR_HK_t; //*************** @@ -825,7 +825,29 @@ typedef struct { unsigned char sy_lfr_pas_filter_shift[PARAM_4_BYTES]; unsigned char sy_lfr_sc_rw_delta_f[PARAM_4_BYTES]; - // LFR_RW_MASK + // SY_LFR_RWi_Kj REACTION WHEELS K COEFFICIENTS + // RW1_K + unsigned char sy_lfr_rw1_k1[4]; + unsigned char sy_lfr_rw1_k2[4]; + unsigned char sy_lfr_rw1_k3[4]; + unsigned char sy_lfr_rw1_k4[4]; + // RW2_K + unsigned char sy_lfr_rw2_k1[4]; + unsigned char sy_lfr_rw2_k2[4]; + unsigned char sy_lfr_rw2_k3[4]; + unsigned char sy_lfr_rw2_k4[4]; + // RW3_K + unsigned char sy_lfr_rw3_k1[4]; + unsigned char sy_lfr_rw3_k2[4]; + unsigned char sy_lfr_rw3_k3[4]; + unsigned char sy_lfr_rw3_k4[4]; + // RW4_K + unsigned char sy_lfr_rw4_k1[4]; + unsigned char sy_lfr_rw4_k2[4]; + unsigned char sy_lfr_rw4_k3[4]; + unsigned char sy_lfr_rw4_k4[4]; + + // LFR_RW_MASK REACTION WHEELS MASKS unsigned char sy_lfr_rw_mask_f0_word1[BYTES_PER_WORD]; unsigned char sy_lfr_rw_mask_f0_word2[BYTES_PER_WORD]; unsigned char sy_lfr_rw_mask_f0_word3[BYTES_PER_WORD]; diff --git a/fsw_params.h b/fsw_params.h --- a/fsw_params.h +++ b/fsw_params.h @@ -355,7 +355,11 @@ typedef struct { #define DEFAULT_SY_LFR_PAS_FILTER_TBAD 1.0 #define DEFAULT_SY_LFR_PAS_FILTER_OFFSET 0 #define DEFAULT_SY_LFR_PAS_FILTER_SHIFT 0.5 -#define DEFAULT_SY_LFR_SC_RW_DELTA_F 0.025 +#define DEFAULT_SY_LFR_SC_RW_DELTA_F 0.045 +#define DEFAULT_SY_LFR_RW_K1 1. +#define DEFAULT_SY_LFR_RW_K2 8. +#define DEFAULT_SY_LFR_RW_K3 24. +#define DEFAULT_SY_LFR_RW_K4 48. typedef struct{ unsigned char spare_sy_lfr_pas_filter_enabled; @@ -364,8 +368,51 @@ typedef struct{ unsigned char sy_lfr_pas_filter_offset; float sy_lfr_pas_filter_shift; float sy_lfr_sc_rw_delta_f; + // rw1_k + float sy_lfr_rw1_k1; + float sy_lfr_rw1_k2; + float sy_lfr_rw1_k3; + float sy_lfr_rw1_k4; + // rw2_k + float sy_lfr_rw2_k1; + float sy_lfr_rw2_k2; + float sy_lfr_rw2_k3; + float sy_lfr_rw2_k4; + // rw3_k + float sy_lfr_rw3_k1; + float sy_lfr_rw3_k2; + float sy_lfr_rw3_k3; + float sy_lfr_rw3_k4; + // rw4_k + float sy_lfr_rw4_k1; + float sy_lfr_rw4_k2; + float sy_lfr_rw4_k3; + float sy_lfr_rw4_k4; } filterPar_t; +typedef struct{ + // rw1_f + float cp_rpw_sc_rw1_f1; + float cp_rpw_sc_rw1_f2; + float cp_rpw_sc_rw1_f3; + float cp_rpw_sc_rw1_f4; + // rw2_f + float cp_rpw_sc_rw2_f1; + float cp_rpw_sc_rw2_f2; + float cp_rpw_sc_rw2_f3; + float cp_rpw_sc_rw2_f4; + // rw3_f + float cp_rpw_sc_rw3_f1; + float cp_rpw_sc_rw3_f2; + float cp_rpw_sc_rw3_f3; + float cp_rpw_sc_rw3_f4; + // rw4_f + float cp_rpw_sc_rw4_f1; + float cp_rpw_sc_rw4_f2; + float cp_rpw_sc_rw4_f3; + float cp_rpw_sc_rw4_f4; +} rw_f_t; + #define NB_ACQUISITION_DURATION 3 #define ACQUISITION_DURATION_F0 683 // 256 / 24576 * 65536 #define ACQUISITION_DURATION_F1 4096 // 256 / 4096 * 65536 diff --git a/fsw_params_nb_bytes.h b/fsw_params_nb_bytes.h --- a/fsw_params_nb_bytes.h +++ b/fsw_params_nb_bytes.h @@ -34,15 +34,26 @@ #define BYTE_POS_UPDATE_INFO_PARAMETERS_SET2 11 #define BYTE_POS_UPDATE_INFO_PARAMETERS_SET5 34 #define BYTE_POS_UPDATE_INFO_PARAMETERS_SET6 35 +// RW1 #define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW1_F1 44 #define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW1_F2 48 -#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW2_F1 52 -#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW2_F2 56 -#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW3_F1 60 -#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW3_F2 64 -#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW4_F1 68 -#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW4_F2 72 -#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW_F_FLAGS 77 +#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW1_F3 52 +#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW1_F4 56 +// RW2 +#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW2_F1 60 +#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW2_F2 64 +#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW2_F3 68 +#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW2_F4 72 +// RW3 +#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW3_F1 76 +#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW3_F2 80 +#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW3_F3 84 +#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW3_F4 88 +// RW4 +#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW4_F1 92 +#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW4_F2 96 +#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW4_F3 100 +#define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW4_F4 104 #define BITS_LFR_MODE 0x1e #define SHIFT_LFR_MODE 1 @@ -58,6 +69,8 @@ //TC_LFR_LOAD_FBINS_MASK // TC_LFR_LOAD_FILTER_PAR +#define NB_RW_K_COEFFS 16 +#define NB_BYTES_PER_RW_K_COEFF 4 #define DATAFIELD_POS_PA_RPW_SPARE8_2 0 // 8 bits #define DATAFIELD_POS_SY_LFR_PAS_FILTER_ENABLED 1 // 8 bits #define DATAFIELD_POS_SY_LFR_PAS_FILTER_MODULUS 2 // 8 bits @@ -65,6 +78,22 @@ #define DATAFIELD_POS_SY_LFR_PAS_FILTER_OFFSET 7 // 8 bits #define DATAFIELD_POS_SY_LFR_PAS_FILTER_SHIFT 8 // 32 bits #define DATAFIELD_POS_SY_LFR_SC_RW_DELTA_F 12 // 32 bits +#define DATAFIELD_POS_SY_LFR_RW1_K1 16 // 32 bits +#define DATAFIELD_POS_SY_LFR_RW1_K2 20 // 32 bits +#define DATAFIELD_POS_SY_LFR_RW1_K3 24 // 32 bits +#define DATAFIELD_POS_SY_LFR_RW1_K4 28 // 32 bits +#define DATAFIELD_POS_SY_LFR_RW2_K1 32 // 32 bits +#define DATAFIELD_POS_SY_LFR_RW2_K2 36 // 32 bits +#define DATAFIELD_POS_SY_LFR_RW2_K3 40 // 32 bits +#define DATAFIELD_POS_SY_LFR_RW2_K4 44 // 32 bits +#define DATAFIELD_POS_SY_LFR_RW3_K1 48 // 32 bits +#define DATAFIELD_POS_SY_LFR_RW3_K2 52 // 32 bits +#define DATAFIELD_POS_SY_LFR_RW3_K3 56 // 32 bits +#define DATAFIELD_POS_SY_LFR_RW3_K4 60 // 32 bits +#define DATAFIELD_POS_SY_LFR_RW4_K1 64 // 32 bits +#define DATAFIELD_POS_SY_LFR_RW4_K2 68 // 32 bits +#define DATAFIELD_POS_SY_LFR_RW4_K3 72 // 32 bits +#define DATAFIELD_POS_SY_LFR_RW4_K4 76 // 32 bits // TC_LFR_LOAD_KCOEFFICIENTS #define NB_BYTES_PER_FLOAT 4