diff --git a/ccsds_types.h b/ccsds_types.h --- a/ccsds_types.h +++ b/ccsds_types.h @@ -1,8 +1,23 @@ #ifndef CCSDS_TYPES_H_INCLUDED #define CCSDS_TYPES_H_INCLUDED +#define TXBDCNT 50 +#define RXBDCNT 10 +#define TXDATASIZE 4096 +#define TXHDRSIZE 34 +#define RXPKTSIZE 200 + +#define SPW_RXSIZE 228 +#define SPW_TXDSIZE 4096 +#define SPW_TXHSIZE 34 + +#define BITS_PID_0 0x07 +#define BITS_PID_1 0x0f +#define BITS_CAT 0x0f + #define CCSDS_PROTOCOLE_EXTRA_BYTES 4 -#define CCSDS_TC_TM_PACKET_OFFSET 7 +#define CCSDS_TC_TM_PACKET_OFFSET 7 +#define PROTID_RES_APP 3 #define CCSDS_TELEMETRY_HEADER_LENGTH (16+4) #define CCSDS_TM_PKT_MAX_SIZE 4412 #define CCSDS_TELECOMMAND_HEADER_LENGTH (10+4) @@ -26,6 +41,7 @@ #define APID_TM_SCIENCE_SBM1_SBM2 0x0cfc // PID 79 CAT 12 #define APID_TM_PARAMETER_DUMP 0x0cc6 // PID 76 CAT 6 #define APID_TM_KCOEFFICIENTS_DUMP 0x0cc6 // PID 76 CAT 6 + // PACKET CAT #define TM_PACKET_CAT_TC_EXE 1 #define TM_PACKET_CAT_HK 4 @@ -37,7 +53,11 @@ #define TM_PACKET_SEQ_CTRL_FIRST 0x40 // [0100 0000] #define TM_PACKET_SEQ_CTRL_LAST 0x80 // [1000 0000] #define TM_PACKET_SEQ_CTRL_STANDALONE 0xc0 // [1100 0000] -#define TM_PACKET_SEQ_CNT_DEFAULT 0x00 // [0000 0000] +#define TM_PACKET_SEQ_CNT_DEFAULT 0x00 // [0000 0000] +#define TM_PACKET_SEQ_SHIFT 8 +#define SEQ_CNT_MAX 16383 +#define SEQ_CNT_NB_DEST_ID 12 +#define SEQ_CNT_MASK 0x3fff // [0011 1111 1111 1111] // DESTINATION ID #define TM_DESTINATION_ID_GROUND 0 @@ -194,9 +214,6 @@ enum apid_destid{ AOCS, RPW_INTERNAL }; -// SEQUENCE COUNTERS -#define SEQ_CNT_MAX 16383 -#define SEQ_CNT_NB_DEST_ID 12 // TM SID #define SID_HK 1 @@ -278,7 +295,8 @@ enum apid_destid{ #define TM_LEN_SCI_CWF_336 (4060 - CCSDS_TC_TM_PACKET_OFFSET) // 336 * 12 + 28 #define TM_LEN_SCI_CWF_672 (4060 - CCSDS_TC_TM_PACKET_OFFSET) // 672 * 6 + 28 // -#define DEFAULT_PKTCNT 0x07 +#define PKTCNT_SWF 0x07 +#define PKTCNT_ASM 3 #define BLK_NR_304 0x0130 #define BLK_NR_224 0x00e0 #define BLK_NR_CWF 0x0150 // 336 @@ -293,24 +311,48 @@ enum TM_TYPE{ TM_LFR_PAR_DUMP }; +#define BYTES_PER_PACKETID 2 +#define BYTES_PER_SEQ_CTRL 2 +#define BYTES_PER_PKT_LEN 2 +#define BYTES_PER_TIME 6 +#define BYTES_PER_ERR_CODE 2 +#define BYTES_PER_STA_WRD 2 +#define BYTES_PER_CRC 2 +#define BYTES_PER_BLKNR 2 +#define BYTES_PER_SW_VER 4 +#define BYTES_PER_VHD_VER 3 +#define COUNTER_2_BYTES 2 +#define BYTES_PER_TYPE 2 +#define BYTES_PER_SUBTYPE 2 +#define BYTES_PER_ADDR 4 +#define BYTES_PER_TEMP 2 +#define BYTES_PER_V 2 +#define BYTES_PER_WORD 4 +#define BYTES_PER_MASK 16 +#define BYTES_PER_MASKS_SET 48 // 4 * 4 * 3 + +#define COUNTER_2_BYTES 2 +#define PARAM_2_BYTES 2 +#define PARAM_4_BYTES 4 + typedef struct { unsigned char targetLogicalAddress; unsigned char protocolIdentifier; unsigned char reserved; unsigned char userApplication; // PACKET HEADER - unsigned char packetID[2]; - unsigned char packetSequenceControl[2]; - unsigned char packetLength[2]; + unsigned char packetID[BYTES_PER_PACKETID]; + unsigned char packetSequenceControl[BYTES_PER_SEQ_CTRL]; + unsigned char packetLength[BYTES_PER_PKT_LEN]; // DATA FIELD HEADER unsigned char spare1_pusVersion_spare2; unsigned char serviceType; unsigned char serviceSubType; unsigned char destinationID; - unsigned char time[6]; + unsigned char time[BYTES_PER_TIME]; // - unsigned char telecommand_pkt_id[2]; - unsigned char pkt_seq_control[2]; + unsigned char telecommand_pkt_id[BYTES_PER_PACKETID]; + unsigned char pkt_seq_control[BYTES_PER_SEQ_CTRL]; } Packet_TM_LFR_TC_EXE_SUCCESS_t; typedef struct { @@ -319,19 +361,19 @@ typedef struct { unsigned char reserved; unsigned char userApplication; // PACKET HEADER - unsigned char packetID[2]; - unsigned char packetSequenceControl[2]; - unsigned char packetLength[2]; + unsigned char packetID[BYTES_PER_PACKETID]; + unsigned char packetSequenceControl[BYTES_PER_SEQ_CTRL]; + unsigned char packetLength[BYTES_PER_PKT_LEN]; // DATA FIELD HEADER unsigned char spare1_pusVersion_spare2; unsigned char serviceType; unsigned char serviceSubType; unsigned char destinationID; - unsigned char time[6]; + unsigned char time[BYTES_PER_TIME]; // - unsigned char telecommand_pkt_id[2]; - unsigned char pkt_seq_control[2]; - unsigned char tc_failure_code[2]; + unsigned char telecommand_pkt_id[BYTES_PER_PACKETID]; + unsigned char pkt_seq_control[BYTES_PER_SEQ_CTRL]; + unsigned char tc_failure_code[BYTES_PER_ERR_CODE]; unsigned char tc_service; unsigned char tc_subtype; unsigned char byte_position; @@ -344,19 +386,19 @@ typedef struct { unsigned char reserved; unsigned char userApplication; // PACKET HEADER - unsigned char packetID[2]; - unsigned char packetSequenceControl[2]; - unsigned char packetLength[2]; + unsigned char packetID[BYTES_PER_PACKETID]; + unsigned char packetSequenceControl[BYTES_PER_SEQ_CTRL]; + unsigned char packetLength[BYTES_PER_PKT_LEN]; // DATA FIELD HEADER unsigned char spare1_pusVersion_spare2; unsigned char serviceType; unsigned char serviceSubType; unsigned char destinationID; - unsigned char time[6]; + unsigned char time[BYTES_PER_TIME]; // - unsigned char telecommand_pkt_id[2]; - unsigned char pkt_seq_control[2]; - unsigned char tc_failure_code[2]; + unsigned char telecommand_pkt_id[BYTES_PER_PACKETID]; + unsigned char pkt_seq_control[BYTES_PER_SEQ_CTRL]; + unsigned char tc_failure_code[BYTES_PER_ERR_CODE]; unsigned char tc_service; unsigned char tc_subtype; unsigned char lfr_status_word[2]; @@ -368,19 +410,19 @@ typedef struct { unsigned char reserved; unsigned char userApplication; // PACKET HEADER - unsigned char packetID[2]; - unsigned char packetSequenceControl[2]; - unsigned char packetLength[2]; + unsigned char packetID[BYTES_PER_PACKETID]; + unsigned char packetSequenceControl[BYTES_PER_SEQ_CTRL]; + unsigned char packetLength[BYTES_PER_PKT_LEN]; // DATA FIELD HEADER unsigned char spare1_pusVersion_spare2; unsigned char serviceType; unsigned char serviceSubType; unsigned char destinationID; - unsigned char time[6]; + unsigned char time[BYTES_PER_TIME]; // - unsigned char telecommand_pkt_id[2]; - unsigned char pkt_seq_control[2]; - unsigned char tc_failure_code[2]; + unsigned char telecommand_pkt_id[BYTES_PER_PACKETID]; + unsigned char pkt_seq_control[BYTES_PER_SEQ_CTRL]; + unsigned char tc_failure_code[BYTES_PER_ERR_CODE]; unsigned char tc_service; unsigned char tc_subtype; } Packet_TM_LFR_TC_EXE_NOT_IMPLEMENTED_t; @@ -391,19 +433,19 @@ typedef struct { unsigned char reserved; unsigned char userApplication; // PACKET HEADER - unsigned char packetID[2]; - unsigned char packetSequenceControl[2]; - unsigned char packetLength[2]; + unsigned char packetID[BYTES_PER_PACKETID]; + unsigned char packetSequenceControl[BYTES_PER_SEQ_CTRL]; + unsigned char packetLength[BYTES_PER_PKT_LEN]; // DATA FIELD HEADER unsigned char spare1_pusVersion_spare2; unsigned char serviceType; unsigned char serviceSubType; unsigned char destinationID; - unsigned char time[6]; + unsigned char time[BYTES_PER_TIME]; // - unsigned char telecommand_pkt_id[2]; - unsigned char pkt_seq_control[2]; - unsigned char tc_failure_code[2]; + unsigned char telecommand_pkt_id[BYTES_PER_PACKETID]; + unsigned char pkt_seq_control[BYTES_PER_SEQ_CTRL]; + unsigned char tc_failure_code[BYTES_PER_ERR_CODE]; unsigned char tc_service; unsigned char tc_subtype; } Packet_TM_LFR_TC_EXE_ERROR_t; @@ -414,25 +456,25 @@ typedef struct { unsigned char reserved; unsigned char userApplication; // PACKET HEADER - unsigned char packetID[2]; - unsigned char packetSequenceControl[2]; - unsigned char packetLength[2]; + unsigned char packetID[BYTES_PER_PACKETID]; + unsigned char packetSequenceControl[BYTES_PER_SEQ_CTRL]; + unsigned char packetLength[BYTES_PER_PKT_LEN]; // DATA FIELD HEADER unsigned char spare1_pusVersion_spare2; unsigned char serviceType; unsigned char serviceSubType; unsigned char destinationID; - unsigned char time[6]; + unsigned char time[BYTES_PER_TIME]; // - unsigned char telecommand_pkt_id[2]; - unsigned char pkt_seq_control[2]; - unsigned char tc_failure_code[2]; + unsigned char telecommand_pkt_id[BYTES_PER_PACKETID]; + unsigned char pkt_seq_control[BYTES_PER_SEQ_CTRL]; + unsigned char tc_failure_code[BYTES_PER_ERR_CODE]; unsigned char tc_service; unsigned char tc_subtype; - unsigned char pkt_len_rcv_value[2]; - unsigned char pkt_datafieldsize_cnt[2]; - unsigned char rcv_crc[2]; - unsigned char computed_crc[2]; + unsigned char pkt_len_rcv_value[BYTES_PER_PKT_LEN]; + unsigned char pkt_datafieldsize_cnt[BYTES_PER_PKT_LEN]; + unsigned char rcv_crc[BYTES_PER_CRC]; + unsigned char computed_crc[BYTES_PER_CRC]; } Packet_TM_LFR_TC_EXE_CORRUPTED_t; typedef struct { @@ -440,15 +482,15 @@ typedef struct { unsigned char protocolIdentifier; unsigned char reserved; unsigned char userApplication; - unsigned char packetID[2]; - unsigned char packetSequenceControl[2]; - unsigned char packetLength[2]; + unsigned char packetID[BYTES_PER_PACKETID]; + unsigned char packetSequenceControl[BYTES_PER_SEQ_CTRL]; + unsigned char packetLength[BYTES_PER_PKT_LEN]; // DATA FIELD HEADER unsigned char spare1_pusVersion_spare2; unsigned char serviceType; unsigned char serviceSubType; unsigned char destinationID; - unsigned char time[6]; + unsigned char time[BYTES_PER_TIME]; // AUXILIARY HEADER unsigned char sid; unsigned char pa_bia_status_info; @@ -456,31 +498,36 @@ typedef struct { unsigned char sy_lfr_common_parameters; unsigned char pktCnt; unsigned char pktNr; - unsigned char acquisitionTime[6]; - unsigned char blkNr[2]; + unsigned char acquisitionTime[BYTES_PER_TIME]; + unsigned char blkNr[BYTES_PER_BLKNR]; } Header_TM_LFR_SCIENCE_SWF_t; +//******************* +// TM_LFR_SCIENCE_CWF + +#define CWF_BLK_SIZE 6 + typedef struct { unsigned char targetLogicalAddress; unsigned char protocolIdentifier; unsigned char reserved; unsigned char userApplication; - unsigned char packetID[2]; - unsigned char packetSequenceControl[2]; - unsigned char packetLength[2]; + unsigned char packetID[BYTES_PER_PACKETID]; + unsigned char packetSequenceControl[BYTES_PER_SEQ_CTRL]; + unsigned char packetLength[BYTES_PER_PKT_LEN]; // DATA FIELD HEADER unsigned char spare1_pusVersion_spare2; unsigned char serviceType; unsigned char serviceSubType; unsigned char destinationID; - unsigned char time[6]; + unsigned char time[BYTES_PER_TIME]; // AUXILIARY DATA HEADER unsigned char sid; unsigned char pa_bia_status_info; unsigned char sy_lfr_common_parameters_spare; unsigned char sy_lfr_common_parameters; - unsigned char acquisitionTime[6]; - unsigned char blkNr[2]; + unsigned char acquisitionTime[BYTES_PER_TIME]; + unsigned char blkNr[BYTES_PER_BLKNR]; } Header_TM_LFR_SCIENCE_CWF_t; typedef struct { @@ -488,15 +535,15 @@ typedef struct { unsigned char protocolIdentifier; unsigned char reserved; unsigned char userApplication; - unsigned char packetID[2]; - unsigned char packetSequenceControl[2]; - unsigned char packetLength[2]; + unsigned char packetID[BYTES_PER_PACKETID]; + unsigned char packetSequenceControl[BYTES_PER_SEQ_CTRL]; + unsigned char packetLength[BYTES_PER_PKT_LEN]; // DATA FIELD HEADER unsigned char spare1_pusVersion_spare2; unsigned char serviceType; unsigned char serviceSubType; unsigned char destinationID; - unsigned char time[6]; + unsigned char time[BYTES_PER_TIME]; // AUXILIARY HEADER unsigned char sid; unsigned char pa_bia_status_info; @@ -504,8 +551,8 @@ typedef struct { unsigned char sy_lfr_common_parameters; unsigned char pa_lfr_pkt_cnt_asm; unsigned char pa_lfr_pkt_nr_asm; - unsigned char acquisitionTime[6]; - unsigned char pa_lfr_asm_blk_nr[2]; + unsigned char acquisitionTime[BYTES_PER_TIME]; + unsigned char pa_lfr_asm_blk_nr[BYTES_PER_BLKNR]; } Header_TM_LFR_SCIENCE_ASM_t; typedef struct { @@ -513,23 +560,23 @@ typedef struct { unsigned char protocolIdentifier; unsigned char reserved; unsigned char userApplication; - unsigned char packetID[2]; - unsigned char packetSequenceControl[2]; - unsigned char packetLength[2]; + unsigned char packetID[BYTES_PER_PACKETID]; + unsigned char packetSequenceControl[BYTES_PER_SEQ_CTRL]; + unsigned char packetLength[BYTES_PER_PKT_LEN]; // DATA FIELD HEADER unsigned char spare1_pusVersion_spare2; unsigned char serviceType; unsigned char serviceSubType; unsigned char destinationID; - unsigned char time[6]; + unsigned char time[BYTES_PER_TIME]; // AUXILIARY HEADER unsigned char sid; unsigned char pa_bia_status_info; unsigned char sy_lfr_common_parameters_spare; unsigned char sy_lfr_common_parameters; - unsigned char acquisitionTime[6]; + unsigned char acquisitionTime[BYTES_PER_TIME]; unsigned char source_data_spare; - unsigned char pa_lfr_bp_blk_nr[2]; + unsigned char pa_lfr_bp_blk_nr[BYTES_PER_BLKNR]; } Header_TM_LFR_SCIENCE_BP_with_spare_t; typedef struct { @@ -537,22 +584,22 @@ typedef struct { unsigned char protocolIdentifier; unsigned char reserved; unsigned char userApplication; - unsigned char packetID[2]; - unsigned char packetSequenceControl[2]; - unsigned char packetLength[2]; + unsigned char packetID[BYTES_PER_PACKETID]; + unsigned char packetSequenceControl[BYTES_PER_SEQ_CTRL]; + unsigned char packetLength[BYTES_PER_PKT_LEN]; // DATA FIELD HEADER unsigned char spare1_pusVersion_spare2; unsigned char serviceType; unsigned char serviceSubType; unsigned char destinationID; - unsigned char time[6]; + unsigned char time[BYTES_PER_TIME]; // AUXILIARY HEADER unsigned char sid; unsigned char pa_bia_status_info; unsigned char sy_lfr_common_parameters_spare; unsigned char sy_lfr_common_parameters; - unsigned char acquisitionTime[6]; - unsigned char pa_lfr_bp_blk_nr[2]; + unsigned char acquisitionTime[BYTES_PER_TIME]; + unsigned char pa_lfr_bp_blk_nr[BYTES_PER_BLKNR]; } Header_TM_LFR_SCIENCE_BP_t; typedef struct { @@ -560,9 +607,9 @@ typedef struct { unsigned char protocolIdentifier; unsigned char reserved; unsigned char userApplication; - unsigned char packetID[2]; - unsigned char packetSequenceControl[2]; - unsigned char packetLength[2]; + unsigned char packetID[BYTES_PER_PACKETID]; + unsigned char packetSequenceControl[BYTES_PER_SEQ_CTRL]; + unsigned char packetLength[BYTES_PER_PKT_LEN]; // DATA FIELD HEADER unsigned char headerFlag_pusVersion_Ack; unsigned char serviceType; @@ -571,26 +618,47 @@ typedef struct { unsigned char dataAndCRC[CCSDS_TC_PKT_MAX_SIZE-10]; } ccsdsTelecommandPacket_t; +//********** +//********** +// TM_LFR_HK + +#define STATUS_WORD_SC_POTENTIAL_FLAG_BIT 0x40 // [0100 0000] +#define STATUS_WORD_SC_POTENTIAL_FLAG_MASK 0xbf // [1011 1111] +#define STATUS_WORD_PAS_FILTER_ENABLED_BIT 0x20 // [0010 0000] +#define STATUS_WORD_PAS_FILTER_ENABLED_MASK 0xdf // [1101 1111] +#define STATUS_WORD_WATCHDOG_BIT 0x10 // [0001 0000] +#define STATUS_WORD_WATCHDOG_MASK 0xef // [1110 1111] +#define STATUS_WORD_CALIB_BIT 0x08 // [0000 1000] +#define STATUS_WORD_CALIB_MASK 0xf7 // [1111 0111] +#define STATUS_WORD_RESET_CAUSE_BITS 0x07 // [0000 0111] +#define STATUS_WORD_RESET_CAUSE_MASK 0xf8 // [1111 1000] +#define STATUS_WORD_LINK_STATE_BITS 0x03 // [0000 0111] +#define STATUS_WORD_LINK_STATE_MASK 0xf8 // [1111 1000] +#define STATUS_WORD_LFR_MODE_SHIFT 4 +#define STATUS_WORD_LFR_MODE_BITS 0xf0 // [1111 0000] +#define STATUS_WORD_LFR_MODE_MASK 0x0f // [0000 1111] +#define STATUS_WORD_0_DEFAULT 0x0d // [0000 1101] + typedef struct { unsigned char targetLogicalAddress; unsigned char protocolIdentifier; unsigned char reserved; unsigned char userApplication; - unsigned char packetID[2]; - unsigned char packetSequenceControl[2]; - unsigned char packetLength[2]; + unsigned char packetID[BYTES_PER_PACKETID]; + unsigned char packetSequenceControl[BYTES_PER_SEQ_CTRL]; + unsigned char packetLength[BYTES_PER_PKT_LEN]; unsigned char spare1_pusVersion_spare2; unsigned char serviceType; unsigned char serviceSubType; unsigned char destinationID; - unsigned char time[6]; + unsigned char time[BYTES_PER_TIME]; unsigned char sid; //************** // HK PARAMETERS - unsigned char lfr_status_word[2]; - unsigned char lfr_sw_version[4]; - unsigned char lfr_fpga_version[3]; + unsigned char lfr_status_word[BYTES_PER_STA_WRD]; + unsigned char lfr_sw_version[BYTES_PER_SW_VER]; + unsigned char lfr_fpga_version[BYTES_PER_VHD_VER]; // ressource statistics unsigned char hk_lfr_cpu_load; unsigned char hk_lfr_cpu_load_max; @@ -606,45 +674,45 @@ typedef struct { unsigned char hk_lfr_q_p2_fifo_size_max; unsigned char hk_lfr_q_p2_fifo_size; // tc statistics - unsigned char hk_lfr_update_info_tc_cnt[2]; - unsigned char hk_lfr_update_time_tc_cnt[2]; - unsigned char hk_lfr_exe_tc_cnt[2]; - unsigned char hk_lfr_rej_tc_cnt[2]; - unsigned char hk_lfr_last_exe_tc_id[2]; - unsigned char hk_lfr_last_exe_tc_type[2]; - unsigned char hk_lfr_last_exe_tc_subtype[2]; - unsigned char hk_lfr_last_exe_tc_time[6]; - unsigned char hk_lfr_last_rej_tc_id[2]; - unsigned char hk_lfr_last_rej_tc_type[2]; - unsigned char hk_lfr_last_rej_tc_subtype[2]; - unsigned char hk_lfr_last_rej_tc_time[6]; + unsigned char hk_lfr_update_info_tc_cnt[COUNTER_2_BYTES]; + unsigned char hk_lfr_update_time_tc_cnt[COUNTER_2_BYTES]; + unsigned char hk_lfr_exe_tc_cnt[COUNTER_2_BYTES]; + unsigned char hk_lfr_rej_tc_cnt[COUNTER_2_BYTES]; + unsigned char hk_lfr_last_exe_tc_id[BYTES_PER_PACKETID]; + unsigned char hk_lfr_last_exe_tc_type[BYTES_PER_TYPE]; + unsigned char hk_lfr_last_exe_tc_subtype[BYTES_PER_SUBTYPE]; + unsigned char hk_lfr_last_exe_tc_time[BYTES_PER_TIME]; + unsigned char hk_lfr_last_rej_tc_id[BYTES_PER_PACKETID]; + unsigned char hk_lfr_last_rej_tc_type[BYTES_PER_TYPE]; + unsigned char hk_lfr_last_rej_tc_subtype[BYTES_PER_SUBTYPE]; + unsigned char hk_lfr_last_rej_tc_time[BYTES_PER_TIME]; // anomaly statistics - unsigned char hk_lfr_le_cnt[2]; - unsigned char hk_lfr_me_cnt[2]; - unsigned char hk_lfr_he_cnt[2]; - unsigned char hk_lfr_last_er_rid[2]; + unsigned char hk_lfr_le_cnt[COUNTER_2_BYTES]; + unsigned char hk_lfr_me_cnt[COUNTER_2_BYTES]; + unsigned char hk_lfr_he_cnt[COUNTER_2_BYTES]; + unsigned char hk_lfr_last_er_rid[COUNTER_2_BYTES]; unsigned char hk_lfr_last_er_code; - unsigned char hk_lfr_last_er_time[6]; + unsigned char hk_lfr_last_er_time[BYTES_PER_TIME]; // vhdl_blk_status unsigned char hk_lfr_vhdl_aa_sm; unsigned char hk_lfr_vhdl_fft_sr; unsigned char hk_lfr_vhdl_cic_hk; unsigned char hk_lfr_vhdl_iir_cal; // spacewire_if_statistics - unsigned char hk_lfr_dpu_spw_pkt_rcv_cnt[2]; - unsigned char hk_lfr_dpu_spw_pkt_sent_cnt[2]; + unsigned char hk_lfr_dpu_spw_pkt_rcv_cnt[COUNTER_2_BYTES]; + unsigned char hk_lfr_dpu_spw_pkt_sent_cnt[COUNTER_2_BYTES]; unsigned char hk_lfr_dpu_spw_tick_out_cnt; unsigned char hk_lfr_dpu_spw_last_timc; // ahb error statistics - unsigned char hk_lfr_last_fail_addr[4]; + unsigned char hk_lfr_last_fail_addr[BYTES_PER_ADDR]; // temperatures - unsigned char hk_lfr_temp_scm[2]; - unsigned char hk_lfr_temp_pcb[2]; - unsigned char hk_lfr_temp_fpga[2]; + unsigned char hk_lfr_temp_scm[BYTES_PER_TEMP]; + unsigned char hk_lfr_temp_pcb[BYTES_PER_TEMP]; + unsigned char hk_lfr_temp_fpga[BYTES_PER_TEMP]; // spacecraft potential - unsigned char hk_lfr_sc_v_f3[2]; - unsigned char hk_lfr_sc_e1_f3[2]; - unsigned char hk_lfr_sc_e2_f3[2]; + unsigned char hk_lfr_sc_v_f3[BYTES_PER_V]; + unsigned char hk_lfr_sc_e1_f3[BYTES_PER_V]; + unsigned char hk_lfr_sc_e2_f3[BYTES_PER_V]; // lfr common parameters unsigned char sy_lfr_common_parameters_spare; unsigned char sy_lfr_common_parameters; @@ -678,20 +746,27 @@ typedef struct { unsigned char hk_lfr_sc_rw_f_flags; } Packet_TM_LFR_HK_t; +//*************** +//*************** +// PARAMETER_DUMP + +#define BIT_PAS_FILTER_ENABLED 0x01 +#define BIT_CWF_LONG_F3 0x01 + typedef struct { unsigned char targetLogicalAddress; unsigned char protocolIdentifier; unsigned char reserved; unsigned char userApplication; - unsigned char packetID[2]; - unsigned char packetSequenceControl[2]; - unsigned char packetLength[2]; + unsigned char packetID[BYTES_PER_PACKETID]; + unsigned char packetSequenceControl[BYTES_PER_SEQ_CTRL]; + unsigned char packetLength[BYTES_PER_PKT_LEN]; // DATA FIELD HEADER unsigned char spare1_pusVersion_spare2; unsigned char serviceType; unsigned char serviceSubType; unsigned char destinationID; - unsigned char time[6]; + unsigned char time[BYTES_PER_TIME]; unsigned char sid; //****************** @@ -701,9 +776,9 @@ typedef struct { //****************** // NORMAL PARAMETERS - unsigned char sy_lfr_n_swf_l[2]; - unsigned char sy_lfr_n_swf_p[2]; - unsigned char sy_lfr_n_asm_p[2]; + unsigned char sy_lfr_n_swf_l[PARAM_2_BYTES]; + unsigned char sy_lfr_n_swf_p[PARAM_2_BYTES]; + unsigned char sy_lfr_n_asm_p[PARAM_2_BYTES]; unsigned char sy_lfr_n_bp_p0; unsigned char sy_lfr_n_bp_p1; unsigned char sy_lfr_n_cwf_long_f3; @@ -727,72 +802,83 @@ typedef struct { // mask F0 union{ struct{ - unsigned char f0_word1[4]; - unsigned char f0_word2[4]; - unsigned char f0_word3[4]; - unsigned char f0_word4[4]; + unsigned char f0_word1[BYTES_PER_WORD]; + unsigned char f0_word2[BYTES_PER_WORD]; + unsigned char f0_word3[BYTES_PER_WORD]; + unsigned char f0_word4[BYTES_PER_WORD]; // mask F1 - unsigned char f1_word1[4]; - unsigned char f1_word2[4]; - unsigned char f1_word3[4]; - unsigned char f1_word4[4]; + unsigned char f1_word1[BYTES_PER_WORD]; + unsigned char f1_word2[BYTES_PER_WORD]; + unsigned char f1_word3[BYTES_PER_WORD]; + unsigned char f1_word4[BYTES_PER_WORD]; // mask F2 - unsigned char f2_word1[4]; - unsigned char f2_word2[4]; - unsigned char f2_word3[4]; - unsigned char f2_word4[4]; + unsigned char f2_word1[BYTES_PER_WORD]; + unsigned char f2_word2[BYTES_PER_WORD]; + unsigned char f2_word3[BYTES_PER_WORD]; + unsigned char f2_word4[BYTES_PER_WORD]; } fx; - unsigned char raw[ 4 * 4 * 3 ]; + unsigned char raw[ BYTES_PER_MASKS_SET ]; } sy_lfr_fbins; // PAS FILTER PARAMETERS unsigned char pa_rpw_spare8_2; unsigned char spare_sy_lfr_pas_filter_enabled; unsigned char sy_lfr_pas_filter_modulus; - unsigned char sy_lfr_pas_filter_tbad[4]; + unsigned char sy_lfr_pas_filter_tbad[PARAM_4_BYTES]; unsigned char sy_lfr_pas_filter_offset; - unsigned char sy_lfr_pas_filter_shift[4]; - unsigned char sy_lfr_sc_rw_delta_f[4]; + unsigned char sy_lfr_pas_filter_shift[PARAM_4_BYTES]; + unsigned char sy_lfr_sc_rw_delta_f[PARAM_4_BYTES]; // LFR_RW_MASK union{ struct{ - unsigned char f0_word1[4]; - unsigned char f0_word2[4]; - unsigned char f0_word3[4]; - unsigned char f0_word4[4]; + unsigned char f0_word1[BYTES_PER_WORD]; + unsigned char f0_word2[BYTES_PER_WORD]; + unsigned char f0_word3[BYTES_PER_WORD]; + unsigned char f0_word4[BYTES_PER_WORD]; // mask F1 - unsigned char f1_word1[4]; - unsigned char f1_word2[4]; - unsigned char f1_word3[4]; - unsigned char f1_word4[4]; + unsigned char f1_word1[BYTES_PER_WORD]; + unsigned char f1_word2[BYTES_PER_WORD]; + unsigned char f1_word3[BYTES_PER_WORD]; + unsigned char f1_word4[BYTES_PER_WORD]; // mask F2 - unsigned char f2_word1[4]; - unsigned char f2_word2[4]; - unsigned char f2_word3[4]; - unsigned char f2_word4[4]; + unsigned char f2_word1[BYTES_PER_WORD]; + unsigned char f2_word2[BYTES_PER_WORD]; + unsigned char f2_word3[BYTES_PER_WORD]; + unsigned char f2_word4[BYTES_PER_WORD]; } fx; - unsigned char raw[ 4 * 4 * 3 ]; + unsigned char raw[ BYTES_PER_MASKS_SET ]; } sy_lfr_rw_mask; // SPARE unsigned char pa_rpw_spare8_3; } Packet_TM_LFR_PARAMETER_DUMP_t; +//************************** +//************************** +// TM_LFR_KCOEFFICIENTS_DUMP + +#define KCOEFF_BLK_NR_PKT1 30 +#define KCOEFF_BLK_NR_PKT2 6 +#define KCOEFF_BLK_SIZE 130 +#define KCOEFF_PKTCNT 2 +#define PKTNR_1 1 +#define PKTNR_2 2 + typedef struct { unsigned char targetLogicalAddress; unsigned char protocolIdentifier; unsigned char reserved; unsigned char userApplication; - unsigned char packetID[2]; - unsigned char packetSequenceControl[2]; - unsigned char packetLength[2]; + unsigned char packetID[BYTES_PER_PACKETID]; + unsigned char packetSequenceControl[BYTES_PER_SEQ_CTRL]; + unsigned char packetLength[BYTES_PER_PKT_LEN]; // DATA FIELD HEADER unsigned char spare1_pusVersion_spare2; unsigned char serviceType; unsigned char serviceSubType; unsigned char destinationID; - unsigned char time[6]; + unsigned char time[BYTES_PER_TIME]; unsigned char sid; unsigned char pkt_cnt; unsigned char pkt_nr; diff --git a/fsw_params.h b/fsw_params.h --- a/fsw_params.h +++ b/fsw_params.h @@ -9,6 +9,76 @@ #define GRSPW_DEVICE_NAME "/dev/grspw0" #define UART_DEVICE_NAME "/dev/console" +//******* +// MACROS +#ifdef PRINT_MESSAGES_ON_CONSOLE +#define PRINTF(x) printf(x); +#define PRINTF1(x,y) printf(x,y); +#define PRINTF2(x,y,z) printf(x,y,z); +#else +#define PRINTF(x) ; +#define PRINTF1(x,y) ; +#define PRINTF2(x,y,z) ; +#endif + +#ifdef BOOT_MESSAGES +#define BOOT_PRINTF(x) printf(x); +#define BOOT_PRINTF1(x,y) printf(x,y); +#define BOOT_PRINTF2(x,y,z) printf(x,y,z); +#else +#define BOOT_PRINTF(x) ; +#define BOOT_PRINTF1(x,y) ; +#define BOOT_PRINTF2(x,y,z) ; +#endif + +#ifdef DEBUG_MESSAGES +#define DEBUG_PRINTF(x) printf(x); +#define DEBUG_PRINTF1(x,y) printf(x,y); +#define DEBUG_PRINTF2(x,y,z) printf(x,y,z); +#else +#define DEBUG_PRINTF(x) ; +#define DEBUG_PRINTF1(x,y) ; +#define DEBUG_PRINTF2(x,y,z) ; +#endif + +#define CONST_65536 65536 // 2^16 +#define CONST_2048 2048 // 2^11 +#define CONST_512 512 // 2^9 +#define CONST_256 256 // 2^8 +#define CONST_128 128 // 2^7 +#define UINT8_MAX 255 + +#define FLOAT_MSBYTE 0 +#define FLOAT_LSBYTE 3 +#define BITS_PER_BYTE 8 +#define INIT_FLOAT 0. +#define INIT_CHAR 0x00 +#define INT8_ALL_F 0xff +#define INT16_ALL_F 0xffff +#define INT32_ALL_F 0xffffffff +#define INT32_ALL_0 0x00000000 +#define SHIFT_1_BYTE 8 +#define SHIFT_2_BYTES 16 +#define SHIFT_3_BYTES 24 +#define SHIFT_4_BYTES 32 +#define SHIFT_5_BYTES 40 +#define SHIFT_2_BITS 2 +#define SHIFT_3_BITS 3 +#define SHIFT_4_BITS 4 +#define SHIFT_5_BITS 5 +#define SHIFT_6_BITS 6 +#define SHIFT_7_BITS 7 +#define BYTE_0 0 +#define BYTE_1 1 +#define BYTE_2 2 +#define BYTE_3 3 +#define BYTE_4 4 +#define BYTE_5 5 +#define BYTE_6 6 +#define BYTE_7 7 +#define BYTE0_MASK 0xff00 +#define BYTE1_MASK 0x00ff + enum lfr_transition_type_t{ TRANSITION_NOT_SPECIFIC, TRANSITION_NORM_TO_S1, @@ -93,35 +163,56 @@ typedef struct ring_node #define RTEMS_EVENT_BURST_BP2_F1 RTEMS_EVENT_22 #define RTEMS_EVENT_SWF_RESYNCH RTEMS_EVENT_23 -//**************************** -// LFR DEFAULT MODE PARAMETERS +//******************************************** +//******************************************** +// LFR PARAMETERS: DEFAULT, MIN AND MAX VALUES + #define DEFAULT_LAST_VALID_TRANSITION_DATE 0xffffffff + // COMMON #define DEFAULT_SY_LFR_COMMON0 0x00 #define DEFAULT_SY_LFR_COMMON1 0x20 // default value bw sp0 sp1 r0 r1 r2 = 1 0 0 0 0 0 + // NORM #define DFLT_SY_LFR_N_SWF_L 2048 // nb sample #define DFLT_SY_LFR_N_SWF_P 300 // sec +#define MIN_SY_LFR_N_SWF_P 22 // sec #define DFLT_SY_LFR_N_ASM_P 3600 // sec #define DFLT_SY_LFR_N_BP_P0 4 // sec #define DFLT_SY_LFR_N_BP_P1 20 // sec #define DFLT_SY_LFR_N_CWF_LONG_F3 0 // 0 => production of light continuous waveforms at f3 #define MIN_DELTA_SNAPSHOT 16 // sec + // BURST #define DEFAULT_SY_LFR_B_BP_P0 1 // sec #define DEFAULT_SY_LFR_B_BP_P1 5 // sec + // SBM1 -#define DEFAULT_SY_LFR_S1_BP_P0 1 // sec +#define S1_BP_P0_SCALE 0.25 +#define DEFAULT_SY_LFR_S1_BP_P0 1 // 0.25 sec #define DEFAULT_SY_LFR_S1_BP_P1 1 // sec + // SBM2 #define DEFAULT_SY_LFR_S2_BP_P0 1 // sec #define DEFAULT_SY_LFR_S2_BP_P1 5 // sec + // ADDITIONAL PARAMETERS #define TIME_BETWEEN_TWO_SWF_PACKETS 30 // nb x 10 ms => 300 ms #define TIME_BETWEEN_TWO_CWF3_PACKETS 1000 // nb x 10 ms => 10 s + // STATUS WORD #define DEFAULT_STATUS_WORD_BYTE0 0x0d // [0000] [1] [101] mode 4 bits / SPW enabled 1 bit / state is run 3 bits + #define DEFAULT_STATUS_WORD_BYTE1 0x00 +// TC_LFR_LOAD_FILTER_PAR +#define MIN_PAS_FILTER_MODULUS 4 +#define MAX_PAS_FILTER_MODULUS 8 +#define MIN_PAS_FILTER_TBAD 0.0 +#define MAX_PAS_FILTER_TBAD 4.0 +#define MIN_PAS_FILTER_OFFSET 0 +#define MAX_PAS_FILTER_OFFSET 7 +#define MIN_PAS_FILTER_SHIFT 0.0 +#define MAX_PAS_FILTER_SHIFT 1.0 // #define SY_LFR_DPU_CONNECT_TIMEOUT 100 // 100 * 10 ms = 1 s #define SY_LFR_DPU_CONNECT_ATTEMPT 3 @@ -139,6 +230,7 @@ typedef struct ring_node #define REGS_ADDR_SPECTRAL_MATRIX 0x80000f00 #define REGS_ADDR_WAVEFORM_PICKER 0x80000f54 // PDB >= 0.1.28 +#define APB_OFFSET_VHDL_REV 0xb0 #define REGS_ADDR_VHDL_VERSION 0x80000ff0 #define APBUART_CTRL_REG_MASK_DB 0xfffff7ff @@ -163,6 +255,8 @@ typedef struct ring_node #define HK_PERIOD 100 // 100 * 10ms => 1s #define AVGV_PERIOD 6 // 6 * 10ms => 60ms (1 / 16 = 62.5ms) #define SY_LFR_TIME_SYN_TIMEOUT_in_ticks 200 // 200 * 10 ms = 2 s +#define HK_SYNC_WAIT 10 // 10 * 10 ms = 100 ms +#define SPW_LINK_WAIT 10 // 10 * 10 ms = 100 ms #define TIMECODE_TIMER_TIMEOUT 120 // 120 * 10 ms = 1.2 s #define TIMECODE_TIMER_TIMEOUT_INIT 200 // 200 * 10 ms = 2.0 s #define TIMECODE_MASK 0x3f // 0011 1111 @@ -175,6 +269,8 @@ typedef struct ring_node //****** // RTEMS +#define STACK_SIZE_MULT 2 + #define TASKID_AVGV 0 #define TASKID_RECV 1 #define TASKID_ACTN 2 @@ -234,38 +330,6 @@ typedef struct ring_node #define QUEUE_PRC1 3 #define QUEUE_PRC2 4 -//******* -// MACROS -#ifdef PRINT_MESSAGES_ON_CONSOLE -#define PRINTF(x) printf(x); -#define PRINTF1(x,y) printf(x,y); -#define PRINTF2(x,y,z) printf(x,y,z); -#else -#define PRINTF(x) ; -#define PRINTF1(x,y) ; -#define PRINTF2(x,y,z) ; -#endif - -#ifdef BOOT_MESSAGES -#define BOOT_PRINTF(x) printf(x); -#define BOOT_PRINTF1(x,y) printf(x,y); -#define BOOT_PRINTF2(x,y,z) printf(x,y,z); -#else -#define BOOT_PRINTF(x) ; -#define BOOT_PRINTF1(x,y) ; -#define BOOT_PRINTF2(x,y,z) ; -#endif - -#ifdef DEBUG_MESSAGES -#define DEBUG_PRINTF(x) printf(x); -#define DEBUG_PRINTF1(x,y) printf(x,y); -#define DEBUG_PRINTF2(x,y,z) printf(x,y,z); -#else -#define DEBUG_PRINTF(x) ; -#define DEBUG_PRINTF1(x,y) ; -#define DEBUG_PRINTF2(x,y,z) ; -#endif - #define CPU_USAGE_REPORT_PERIOD 6 // * 10 s = period struct param_local_str{ @@ -275,10 +339,15 @@ struct param_local_str{ unsigned int local_sbm2_nb_cwf_max; }; +//************ +// FBINS MASKS + +#define BYTES_PER_FBINS_MASK 16 + typedef struct { - unsigned char merged_fbins_mask_f0[16]; - unsigned char merged_fbins_mask_f1[16]; - unsigned char merged_fbins_mask_f2[16]; + unsigned char merged_fbins_mask_f0[BYTES_PER_FBINS_MASK]; + unsigned char merged_fbins_mask_f1[BYTES_PER_FBINS_MASK]; + unsigned char merged_fbins_mask_f2[BYTES_PER_FBINS_MASK]; } fbins_masks_t; #define DEFAULT_SY_LFR_PAS_FILTER_ENABLED 0 @@ -297,6 +366,7 @@ typedef struct{ float sy_lfr_sc_rw_delta_f; } filterPar_t; +#define NB_ACQUISITION_DURATION 3 #define ACQUISITION_DURATION_F0 683 // 256 / 24576 * 65536 #define ACQUISITION_DURATION_F1 4096 // 256 / 4096 * 65536 #define ACQUISITION_DURATION_F2 65536 // 256 / 256 * 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 @@ -1,10 +1,12 @@ -#ifndef TM_BYTE_POSITIONS_H -#define TM_BYTE_POSITIONS_H +#ifndef FSW_PARAMS_NB_BYTES_H +#define FSW_PARAMS_NB_BYTES_H #define PACKET_POS_SEQUENCE_CNT 6 // 4 + 2 #define PACKET_POS_PA_LFR_SID_PKT 20 // 4 + 16 #define PACKET_POS_SERVICE_TYPE 11 // 4 + 7 +#define DATAFIELD_OFFSET 10 + // TC_LFR_LOAD_COMMON_PAR // TC_LFR_LOAD_NORMAL_PAR @@ -42,14 +44,18 @@ #define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW4_F2 72 #define BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW_F_FLAGS 77 +#define BITS_LFR_MODE 0x1e +#define SHIFT_LFR_MODE 1 +#define BITS_TDS_MODE 0xf0 +#define SHIFT_TDS_MODE 4 +#define BITS_THR_MODE 0x0f +#define BITS_BIA 0xfe + // TC_LFR_ENTER_MODE #define BYTE_POS_CP_MODE_LFR_SET 11 #define BYTE_POS_CP_LFR_ENTER_MODE_TIME 12 //TC_LFR_LOAD_FBINS_MASK -#define NB_FBINS_MASKS 12 -#define NB_BYTES_PER_FREQ_MASK 16 -#define NB_BYTES_PER_FBINS_MASK 4 // TC_LFR_LOAD_FILTER_PAR #define DATAFIELD_POS_PA_RPW_SPARE8_2 0 // 8 bits @@ -62,7 +68,10 @@ // TC_LFR_LOAD_KCOEFFICIENTS #define NB_BYTES_PER_FLOAT 4 -#define DATAFIELD_POS_SY_LFR_KCOEFF_FREQUENCY 0 // 10 - 10 -#define DATAFIELD_POS_SY_LFR_KCOEFF_1 2 // 12 - 10 +#define DATAFIELD_POS_SY_LFR_KCOEFF_FREQUENCY 0 // 10 - 10 +#define DATAFIELD_POS_SY_LFR_KCOEFF_1 2 // 12 - 10 -#endif // TM_BYTE_POSITIONS_H +// TM_LFR_KCOEFFICIENTS_DUMP +#define BYTE_POS_KCOEFFICIENTS_PARAMETES 20 + +#endif // FSW_PARAMS_NB_BYTES_H diff --git a/fsw_params_processing.h b/fsw_params_processing.h --- a/fsw_params_processing.h +++ b/fsw_params_processing.h @@ -4,7 +4,30 @@ #define CHANNELF0 0 #define CHANNELF1 1 #define CHANNELF2 2 +#define CHANNELF3 3 +#define NB_SM_PER_S_F0 96 +#define NB_SM_PER_S_F1 16 +#define NB_SM_PER_S_F2 1 +#define NB_SM_PER_S1_BP_P0 24 + +#define ASM_COMP_B1B2 1 +#define ASM_COMP_B1B3 3 +#define ASM_COMP_B1E1 5 +#define ASM_COMP_B1E2 7 +#define ASM_COMP_B2B3 10 +#define ASM_COMP_B2E1 12 +#define ASM_COMP_B2E2 14 +#define ASM_COMP_B3E1 17 +#define ASM_COMP_B3E2 19 +#define ASM_COMP_E1E2 22 +#define ASM_COMP_B1B1 0 +#define ASM_COMP_B2B2 9 +#define ASM_COMP_B3B3 16 +#define ASM_COMP_E1E1 21 +#define ASM_COMP_E2E2 24 + +#define SM_BYTES_PER_VAL 2 #define NB_BINS_PER_SM 128 #define NB_VALUES_PER_SM 25 #define TOTAL_SIZE_SM 3200 // 25 * 128 = 0xC80 @@ -50,6 +73,7 @@ #define ASM_F2_INDICE_STOP 101 // 102 - 1, 2 packets of 48 bins // #define KCOEFF_BLK_SIZE 130 +#define KCOEFF_FREQ 2 #define NB_BINS_COMPRESSED_SM_F0 11 #define NB_BINS_COMPRESSED_SM_F1 13 #define NB_BINS_COMPRESSED_SM_F2 12 @@ -77,8 +101,7 @@ #define TOTAL_SIZE_BP2_NORM_F0 330 // 30 * 11 UNSIGNED CHAR #define TOTAL_SIZE_BP1_SBM_F0 198 // 9 * 22 UNSIGNED CHAR // GENERAL -#define NB_SM_BEFORE_AVF0 8 // must be 8 due to the SM_average() function -#define NB_SM_BEFORE_AVF1 8 // must be 8 due to the SM_average() function +#define NB_SM_BEFORE_AVF0_F1 8 // must be 8 due to the SM_average() function #define NB_SM_BEFORE_AVF2 1 // must be 1 due to the SM_average_f2() function #endif // FSW_PARAMS_PROCESSING_H diff --git a/tm_byte_positions.h b/tm_byte_positions.h --- a/tm_byte_positions.h +++ b/tm_byte_positions.h @@ -11,4 +11,8 @@ #define BYTE_POS_SY_LFR_N_BP_P1 7 #define BYTE_POS_SY_LFR_N_CWF_LONG_F3 8 +// TM_LFR_HK +#define BYTE_POS_HK_LFR_CPU_LOAD 26 +#define BYTE_POS_HK_REACTION_WHEELS_FREQUENCY 135 + #endif // TM_BYTE_POSITIONS_H