##// END OF EJS Templates

Compare Commits r331:a05d13cb0957...r337:e784d0191567

Target:

Source:

Compare was calculated based on this common ancestor commit: 5af3ab05fe7b
Time Author Commit Description
7 commits hidden, click expand to show them.
@@ -1,2 +1,2
1 3081d1f9bb20b2b64a192585337a292a9804e0c5 LFR_basic-parameters
1 3081d1f9bb20b2b64a192585337a292a9804e0c5 LFR_basic-parameters
2 7c46de6059673d3239fcc7103e16510727f35923 header/lfr_common_headers
2 a34c50cabb1bc5e778bfc8374242e4683e4defc2 header/lfr_common_headers
@@ -26,8 +26,12
26 #define STATUS_8 8
26 #define STATUS_8 8
27 #define STATUS_9 9
27 #define STATUS_9 9
28
28
29 #define CAL_F0 625
29 #define CAL_F0 625.
30 #define CAL_F1 10000
30 #define CAL_F1 10000.
31 #define CAL_W0 (2. * pi * CAL_F0)
32 #define CAL_W1 (2. * pi * CAL_F1)
33 #define CAL_A0 1.
34 #define CAL_A1 2.
31 #define CAL_FS 160256.410
35 #define CAL_FS 160256.410
32 #define CAL_SCALE_FACTOR (0.250 / 0.000654) // 191, 500 mVpp, 2 sinus waves => 500 mVpp each, amplitude = 250 mV
36 #define CAL_SCALE_FACTOR (0.250 / 0.000654) // 191, 500 mVpp, 2 sinus waves => 500 mVpp each, amplitude = 250 mV
33 #define CAL_NB_PTS 256
37 #define CAL_NB_PTS 256
@@ -77,7 +77,7 unsigned int check_update_info_hk_lfr_mo
77 unsigned int check_update_info_hk_tds_mode( unsigned char mode );
77 unsigned int check_update_info_hk_tds_mode( unsigned char mode );
78 unsigned int check_update_info_hk_thr_mode( unsigned char mode );
78 unsigned int check_update_info_hk_thr_mode( unsigned char mode );
79 void getReactionWheelsFrequencies( ccsdsTelecommandPacket_t *TC );
79 void getReactionWheelsFrequencies( ccsdsTelecommandPacket_t *TC );
80 void setFBinMask(unsigned char *fbins_mask, float rw_f, unsigned char deltaFreq, unsigned char flag );
80 void setFBinMask(unsigned char *fbins_mask, float rw_f, unsigned char deltaFreq, unsigned char flag, float sy_lfr_rw_k );
81 void build_sy_lfr_rw_mask( unsigned int channel );
81 void build_sy_lfr_rw_mask( unsigned int channel );
82 void build_sy_lfr_rw_masks();
82 void build_sy_lfr_rw_masks();
83 void merge_fbins_masks( void );
83 void merge_fbins_masks( void );
@@ -91,6 +91,8 int check_sy_lfr_filter_parameters( ccsd
91 // KCOEFFICIENTS
91 // KCOEFFICIENTS
92 int set_sy_lfr_kcoeff(ccsdsTelecommandPacket_t *TC , rtems_id queue_id);
92 int set_sy_lfr_kcoeff(ccsdsTelecommandPacket_t *TC , rtems_id queue_id);
93 void copyFloatByChar( unsigned char *destination, unsigned char *source );
93 void copyFloatByChar( unsigned char *destination, unsigned char *source );
94 void copyInt32ByChar( unsigned char *destination, unsigned char *source );
95 void copyInt16ByChar( unsigned char *destination, unsigned char *source );
94 void floatToChar( float value, unsigned char* ptr);
96 void floatToChar( float value, unsigned char* ptr);
95
97
96 void init_parameter_dump( void );
98 void init_parameter_dump( void );
@@ -64,7 +64,7 option(FSW_debug_tch "?" OFF)
64 set(SW_VERSION_N1 "3" CACHE STRING "Choose N1 FSW Version." FORCE)
64 set(SW_VERSION_N1 "3" CACHE STRING "Choose N1 FSW Version." FORCE)
65 set(SW_VERSION_N2 "1" CACHE STRING "Choose N2 FSW Version." FORCE)
65 set(SW_VERSION_N2 "1" CACHE STRING "Choose N2 FSW Version." FORCE)
66 set(SW_VERSION_N3 "0" CACHE STRING "Choose N3 FSW Version." FORCE)
66 set(SW_VERSION_N3 "0" CACHE STRING "Choose N3 FSW Version." FORCE)
67 set(SW_VERSION_N4 "5" CACHE STRING "Choose N4 FSW Version." FORCE)
67 set(SW_VERSION_N4 "7" CACHE STRING "Choose N4 FSW Version." FORCE)
68
68
69 if(FSW_verbose)
69 if(FSW_verbose)
70 add_definitions(-DPRINT_MESSAGES_ON_CONSOLE)
70 add_definitions(-DPRINT_MESSAGES_ON_CONSOLE)
@@ -408,7 +408,7 rtems_task avgv_task(rtems_task_argument
408 if (k == (MOVING_AVERAGE-1))
408 if (k == (MOVING_AVERAGE-1))
409 {
409 {
410 k = 0;
410 k = 0;
411 printf("tick\n");
411 PRINTF("tick\n");
412 }
412 }
413 else
413 else
414 {
414 {
@@ -727,12 +727,12 void set_sy_lfr_pas_filter_enabled( bool
727 if (state == true)
727 if (state == true)
728 {
728 {
729 housekeeping_packet.lfr_status_word[1] =
729 housekeeping_packet.lfr_status_word[1] =
730 housekeeping_packet.lfr_status_word[1] | STATUS_WORD_SC_POTENTIAL_FLAG_BIT; // [0010 0000]
730 housekeeping_packet.lfr_status_word[1] | STATUS_WORD_PAS_FILTER_ENABLED_BIT; // [0010 0000]
731 }
731 }
732 else
732 else
733 {
733 {
734 housekeeping_packet.lfr_status_word[1] =
734 housekeeping_packet.lfr_status_word[1] =
735 housekeeping_packet.lfr_status_word[1] & STATUS_WORD_SC_POTENTIAL_FLAG_MASK; // [1101 1111]
735 housekeeping_packet.lfr_status_word[1] & STATUS_WORD_PAS_FILTER_ENABLED_MASK; // [1101 1111]
736 }
736 }
737 }
737 }
738
738
@@ -786,7 +786,7 void increment_hk_counter( unsigned char
786 }
786 }
787 else
787 else
788 {
788 {
789 delta = (255 - oldValue) + newValue;
789 delta = (CONST_256 - oldValue) + newValue;
790 }
790 }
791
791
792 *counter = *counter + delta;
792 *counter = *counter + delta;
@@ -798,7 +798,7 void hk_lfr_le_update( void )
798 hk_lfr_le_t new_hk_lfr_le;
798 hk_lfr_le_t new_hk_lfr_le;
799 unsigned int counter;
799 unsigned int counter;
800
800
801 counter = (((unsigned int) housekeeping_packet.hk_lfr_le_cnt[0]) * 256) + housekeeping_packet.hk_lfr_le_cnt[1];
801 counter = (((unsigned int) housekeeping_packet.hk_lfr_le_cnt[0]) * CONST_256) + housekeeping_packet.hk_lfr_le_cnt[1];
802
802
803 // DPU
803 // DPU
804 new_hk_lfr_le.dpu_spw_parity = housekeeping_packet.hk_lfr_dpu_spw_parity;
804 new_hk_lfr_le.dpu_spw_parity = housekeeping_packet.hk_lfr_dpu_spw_parity;
@@ -868,7 +868,7 void hk_lfr_me_update( void )
868 hk_lfr_me_t new_hk_lfr_me;
868 hk_lfr_me_t new_hk_lfr_me;
869 unsigned int counter;
869 unsigned int counter;
870
870
871 counter = (((unsigned int) housekeeping_packet.hk_lfr_me_cnt[0]) * 256) + housekeeping_packet.hk_lfr_me_cnt[1];
871 counter = (((unsigned int) housekeeping_packet.hk_lfr_me_cnt[0]) * CONST_256) + housekeeping_packet.hk_lfr_me_cnt[1];
872
872
873 // get the current values
873 // get the current values
874 new_hk_lfr_me.dpu_spw_early_eop = housekeeping_packet.hk_lfr_dpu_spw_early_eop;
874 new_hk_lfr_me.dpu_spw_early_eop = housekeeping_packet.hk_lfr_dpu_spw_early_eop;
@@ -124,7 +124,7 rtems_task recv_task( rtems_task_argumen
124 */
124 */
125
125
126 int len;
126 int len;
127 ccsdsTelecommandPacket_t currentTC;
127 ccsdsTelecommandPacket_t __attribute__((aligned(4))) currentTC;
128 unsigned char computed_CRC[ BYTES_PER_CRC ];
128 unsigned char computed_CRC[ BYTES_PER_CRC ];
129 unsigned char currentTC_LEN_RCV[ BYTES_PER_PKT_LEN ];
129 unsigned char currentTC_LEN_RCV[ BYTES_PER_PKT_LEN ];
130 unsigned char destinationID;
130 unsigned char destinationID;
@@ -167,7 +167,7 rtems_task recv_task( rtems_task_argumen
167 }
167 }
168 else {
168 else {
169 estimatedPacketLength = (unsigned int) (len - CCSDS_TC_TM_PACKET_OFFSET - PROTID_RES_APP); // => -3 is for Prot ID, Reserved and User App bytes
169 estimatedPacketLength = (unsigned int) (len - CCSDS_TC_TM_PACKET_OFFSET - PROTID_RES_APP); // => -3 is for Prot ID, Reserved and User App bytes
170 //PRINTF1("incoming TC with Length (byte): %d\n", len - 3);
170 PRINTF1("incoming TC with Length (byte): %d\n", len - 3);
171 currentTC_LEN_RCV[ 0 ] = (unsigned char) (estimatedPacketLength >> SHIFT_1_BYTE);
171 currentTC_LEN_RCV[ 0 ] = (unsigned char) (estimatedPacketLength >> SHIFT_1_BYTE);
172 currentTC_LEN_RCV[ 1 ] = (unsigned char) (estimatedPacketLength );
172 currentTC_LEN_RCV[ 1 ] = (unsigned char) (estimatedPacketLength );
173 // CHECK THE TC
173 // CHECK THE TC
@@ -190,10 +190,10 rtems_task prc0_task( rtems_task_argumen
190 rtems_status_code status;
190 rtems_status_code status;
191 rtems_id queue_id;
191 rtems_id queue_id;
192 rtems_id queue_id_q_p0;
192 rtems_id queue_id_q_p0;
193 bp_packet_with_spare packet_norm_bp1;
193 bp_packet_with_spare __attribute__((aligned(4))) packet_norm_bp1;
194 bp_packet packet_norm_bp2;
194 bp_packet __attribute__((aligned(4))) packet_norm_bp2;
195 bp_packet packet_sbm_bp1;
195 bp_packet __attribute__((aligned(4))) packet_sbm_bp1;
196 bp_packet packet_sbm_bp2;
196 bp_packet __attribute__((aligned(4))) packet_sbm_bp2;
197 ring_node *current_ring_node_to_send_asm_f0;
197 ring_node *current_ring_node_to_send_asm_f0;
198 float nbSMInASMNORM;
198 float nbSMInASMNORM;
199 float nbSMInASMSBM;
199 float nbSMInASMSBM;
@@ -191,10 +191,10 rtems_task prc1_task( rtems_task_argumen
191 rtems_status_code status;
191 rtems_status_code status;
192 rtems_id queue_id_send;
192 rtems_id queue_id_send;
193 rtems_id queue_id_q_p1;
193 rtems_id queue_id_q_p1;
194 bp_packet_with_spare packet_norm_bp1;
194 bp_packet_with_spare __attribute__((aligned(4))) packet_norm_bp1;
195 bp_packet packet_norm_bp2;
195 bp_packet __attribute__((aligned(4))) packet_norm_bp2;
196 bp_packet packet_sbm_bp1;
196 bp_packet __attribute__((aligned(4))) packet_sbm_bp1;
197 bp_packet packet_sbm_bp2;
197 bp_packet __attribute__((aligned(4))) packet_sbm_bp2;
198 ring_node *current_ring_node_to_send_asm_f1;
198 ring_node *current_ring_node_to_send_asm_f1;
199 float nbSMInASMNORM;
199 float nbSMInASMNORM;
200 float nbSMInASMSBM;
200 float nbSMInASMSBM;
@@ -139,8 +139,8 rtems_task prc2_task( rtems_task_argumen
139 rtems_status_code status;
139 rtems_status_code status;
140 rtems_id queue_id_send;
140 rtems_id queue_id_send;
141 rtems_id queue_id_q_p2;
141 rtems_id queue_id_q_p2;
142 bp_packet packet_norm_bp1;
142 bp_packet __attribute__((aligned(4))) packet_norm_bp1;
143 bp_packet packet_norm_bp2;
143 bp_packet __attribute__((aligned(4))) packet_norm_bp2;
144 ring_node *current_ring_node_to_send_asm_f2;
144 ring_node *current_ring_node_to_send_asm_f2;
145 float nbSMInASMNORM;
145 float nbSMInASMNORM;
146
146
@@ -29,7 +29,7 rtems_task actn_task( rtems_task_argumen
29
29
30 int result;
30 int result;
31 rtems_status_code status; // RTEMS status code
31 rtems_status_code status; // RTEMS status code
32 ccsdsTelecommandPacket_t TC; // TC sent to the ACTN task
32 ccsdsTelecommandPacket_t __attribute__((aligned(4))) TC; // TC sent to the ACTN task
33 size_t size; // size of the incoming TC packet
33 size_t size; // size of the incoming TC packet
34 unsigned char subtype; // subtype of the current TC packet
34 unsigned char subtype; // subtype of the current TC packet
35 unsigned char time[BYTES_PER_TIME];
35 unsigned char time[BYTES_PER_TIME];
@@ -174,16 +174,13 int action_enter_mode(ccsdsTelecommandPa
174
174
175 rtems_status_code status;
175 rtems_status_code status;
176 unsigned char requestedMode;
176 unsigned char requestedMode;
177 unsigned int *transitionCoarseTime_ptr;
178 unsigned int transitionCoarseTime;
177 unsigned int transitionCoarseTime;
179 unsigned char * bytePosPtr;
178 unsigned char * bytePosPtr;
180
179
181 bytePosPtr = (unsigned char *) &TC->packetID;
180 bytePosPtr = (unsigned char *) &TC->packetID;
182
183 requestedMode = bytePosPtr[ BYTE_POS_CP_MODE_LFR_SET ];
181 requestedMode = bytePosPtr[ BYTE_POS_CP_MODE_LFR_SET ];
184 transitionCoarseTime_ptr = (unsigned int *) ( &bytePosPtr[ BYTE_POS_CP_LFR_ENTER_MODE_TIME ] );
182 copyInt32ByChar( (char*) &transitionCoarseTime, &bytePosPtr[ BYTE_POS_CP_LFR_ENTER_MODE_TIME ] );
185 transitionCoarseTime = (*transitionCoarseTime_ptr) & COARSE_TIME_MASK;
183 transitionCoarseTime = transitionCoarseTime & COARSE_TIME_MASK;
186
187 status = check_mode_value( requestedMode );
184 status = check_mode_value( requestedMode );
188
185
189 if ( status != LFR_SUCCESSFUL ) // the mode value is inconsistent
186 if ( status != LFR_SUCCESSFUL ) // the mode value is inconsistent
@@ -1387,8 +1384,8 void setCalibrationData( void )
1387 // build the signal for the SCM calibration
1384 // build the signal for the SCM calibration
1388 for (k = 0; k < CAL_NB_PTS; k++)
1385 for (k = 0; k < CAL_NB_PTS; k++)
1389 {
1386 {
1390 val = sin( 2 * pi * CAL_F0 * k * Ts )
1387 val = CAL_A0 * sin( CAL_W0 * k * Ts )
1391 + sin( 2 * pi * CAL_F1 * k * Ts );
1388 + CAL_A1 * sin( CAL_W1 * k * Ts );
1392 data = (unsigned short) ((val * CAL_SCALE_FACTOR) + CONST_2048);
1389 data = (unsigned short) ((val * CAL_SCALE_FACTOR) + CONST_2048);
1393 time_management_regs->calData = data & CAL_DATA_MASK;
1390 time_management_regs->calData = data & CAL_DATA_MASK;
1394 }
1391 }
@@ -978,7 +978,7 void getReactionWheelsFrequencies( ccsds
978 (unsigned char*) &bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW4_F2 ] );
978 (unsigned char*) &bytePosPtr[ BYTE_POS_UPDATE_INFO_CP_RPW_SC_RW4_F2 ] );
979 }
979 }
980
980
981 void setFBinMask( unsigned char *fbins_mask, float rw_f, unsigned char deltaFreq, unsigned char flag )
981 void setFBinMask( unsigned char *fbins_mask, float rw_f, unsigned char deltaFreq, unsigned char flag, float sy_lfr_rw_k )
982 {
982 {
983 /** This function executes specific actions when a TC_LFR_UPDATE_INFO TeleCommand has been received.
983 /** This function executes specific actions when a TC_LFR_UPDATE_INFO TeleCommand has been received.
984 *
984 *
@@ -998,6 +998,7 void setFBinMask( unsigned char *fbins_m
998 float fi;
998 float fi;
999 float deltaBelow;
999 float deltaBelow;
1000 float deltaAbove;
1000 float deltaAbove;
1001 float freqToFilterOut;
1001 int binBelow;
1002 int binBelow;
1002 int binAbove;
1003 int binAbove;
1003 int closestBin;
1004 int closestBin;
@@ -1006,77 +1007,98 void setFBinMask( unsigned char *fbins_m
1006 int bin;
1007 int bin;
1007 int binToRemove[NB_BINS_TO_REMOVE];
1008 int binToRemove[NB_BINS_TO_REMOVE];
1008 int k;
1009 int k;
1010 bool filteringSet;
1009
1011
1010 closestBin = 0;
1012 closestBin = 0;
1011 whichByte = 0;
1013 whichByte = 0;
1012 bin = 0;
1014 bin = 0;
1015 filteringSet = false;
1013
1016
1014 for (k = 0; k < NB_BINS_TO_REMOVE; k++)
1017 for (k = 0; k < NB_BINS_TO_REMOVE; k++)
1015 {
1018 {
1016 binToRemove[k] = -1;
1019 binToRemove[k] = -1;
1017 }
1020 }
1018
1021
1019 // compute the frequency range to filter [ rw_f - delta_f/2; rw_f + delta_f/2 ]
1022 // compute the frequency range to filter [ rw_f - delta_f; rw_f + delta_f ]
1020 f_RW_min = rw_f - (filterPar.sy_lfr_sc_rw_delta_f / 2.);
1023 f_RW_min = rw_f - ((filterPar.sy_lfr_sc_rw_delta_f) * sy_lfr_rw_k);
1021 f_RW_MAX = rw_f + (filterPar.sy_lfr_sc_rw_delta_f / 2.);
1024 f_RW_MAX = rw_f + ((filterPar.sy_lfr_sc_rw_delta_f) * sy_lfr_rw_k);
1022
1025
1023 // compute the index of the frequency bin immediately below rw_f
1026 freqToFilterOut = f_RW_min;
1024 binBelow = (int) ( floor( ((double) rw_f) / ((double) deltaFreq)) );
1027 while ( filteringSet == false )
1025 deltaBelow = rw_f - binBelow * deltaFreq;
1028 {
1029 // compute the index of the frequency bin immediately below rw_f
1030 binBelow = (int) ( floor( ((double) freqToFilterOut) / ((double) deltaFreq)) );
1031 deltaBelow = freqToFilterOut - binBelow * deltaFreq;
1026
1032
1027 // compute the index of the frequency bin immediately above rw_f
1033 // compute the index of the frequency bin immediately above rw_f
1028 binAbove = (int) ( ceil( ((double) rw_f) / ((double) deltaFreq)) );
1034 binAbove = (int) ( ceil( ((double) freqToFilterOut) / ((double) deltaFreq)) );
1029 deltaAbove = binAbove * deltaFreq - rw_f;
1035 deltaAbove = binAbove * deltaFreq - freqToFilterOut;
1030
1036
1031 // search the closest bin
1037 // search the closest bin
1032 if (deltaAbove > deltaBelow)
1038 if (deltaAbove > deltaBelow)
1033 {
1039 {
1034 closestBin = binBelow;
1040 closestBin = binBelow;
1035 }
1041 }
1036 else
1042 else
1037 {
1043 {
1038 closestBin = binAbove;
1044 closestBin = binAbove;
1039 }
1045 }
1040
1046
1041 // compute the fi interval [fi - deltaFreq * 0.285, fi + deltaFreq * 0.285]
1047 // compute the fi interval [fi - deltaFreq * 0.285, fi + deltaFreq * 0.285]
1042 fi = closestBin * deltaFreq;
1048 fi = closestBin * deltaFreq;
1043 fi_min = fi - (deltaFreq * FI_INTERVAL_COEFF);
1049 fi_min = fi - (deltaFreq * FI_INTERVAL_COEFF);
1044 fi_MAX = fi + (deltaFreq * FI_INTERVAL_COEFF);
1050 fi_MAX = fi + (deltaFreq * FI_INTERVAL_COEFF);
1051
1052 //**************************************************************************************
1053 // be careful here, one shall take into account that the bin 0 IS DROPPED in the spectra
1054 // thus, the index 0 in a mask corresponds to the bin 1 of the spectrum
1055 //**************************************************************************************
1045
1056
1046 //**************************************************************************************
1057 // 1. IF freqToFilterOut is included in [ fi_min; fi_MAX ]
1047 // be careful here, one shall take into account that the bin 0 IS DROPPED in the spectra
1058 // => remove f_(i), f_(i-1) and f_(i+1)
1048 // thus, the index 0 in a mask corresponds to the bin 1 of the spectrum
1059 if ( ( freqToFilterOut > fi_min ) && ( freqToFilterOut < fi_MAX ) )
1049 //**************************************************************************************
1060 {
1061 binToRemove[0] = (closestBin - 1) - 1;
1062 binToRemove[1] = (closestBin) - 1;
1063 binToRemove[2] = (closestBin + 1) - 1;
1064 }
1065 // 2. ELSE
1066 // => remove the two f_(i) which are around f_RW
1067 else
1068 {
1069 binToRemove[0] = (binBelow) - 1;
1070 binToRemove[1] = (binAbove) - 1;
1071 binToRemove[2] = (-1);
1072 }
1050
1073
1051 // 1. IF [ f_RW_min, f_RW_MAX] is included in [ fi_min; fi_MAX ]
1074 for (k = 0; k < NB_BINS_TO_REMOVE; k++)
1052 // => remove f_(i), f_(i-1) and f_(i+1)
1075 {
1053 if ( ( f_RW_min > fi_min ) && ( f_RW_MAX < fi_MAX ) )
1076 bin = binToRemove[k];
1054 {
1077 if ( (bin >= BIN_MIN) && (bin <= BIN_MAX) )
1055 binToRemove[0] = (closestBin - 1) - 1;
1078 {
1056 binToRemove[1] = (closestBin) - 1;
1079 if (flag == 1)
1057 binToRemove[2] = (closestBin + 1) - 1;
1080 {
1058 }
1081 whichByte = (bin >> SHIFT_3_BITS); // division by 8
1059 // 2. ELSE
1082 selectedByte = ( 1 << (bin - (whichByte * BITS_PER_BYTE)) );
1060 // => remove the two f_(i) which are around f_RW
1083 fbins_mask[BYTES_PER_MASK - 1 - whichByte] =
1061 else
1084 fbins_mask[BYTES_PER_MASK - 1 - whichByte] & ((unsigned char) (~selectedByte)); // bytes are ordered MSB first in the packets
1062 {
1085 }
1063 binToRemove[0] = (binBelow) - 1;
1086 }
1064 binToRemove[1] = (binAbove) - 1;
1087 }
1065 binToRemove[2] = (-1);
1066 }
1067
1088
1068 for (k = 0; k < NB_BINS_TO_REMOVE; k++)
1089 // update freqToFilterOut
1069 {
1090 if ( freqToFilterOut == f_RW_MAX )
1070 bin = binToRemove[k];
1091 {
1071 if ( (bin >= BIN_MIN) && (bin <= BIN_MAX) )
1092 filteringSet = true; // end of the loop
1093 }
1094 else
1072 {
1095 {
1073 if (flag == 1)
1096 freqToFilterOut = freqToFilterOut + deltaFreq;
1074 {
1097 }
1075 whichByte = (bin >> SHIFT_3_BITS); // division by 8
1098
1076 selectedByte = ( 1 << (bin - (whichByte * BITS_PER_BYTE)) );
1099 if ( freqToFilterOut > f_RW_MAX)
1077 fbins_mask[BYTES_PER_MASK - 1 - whichByte] =
1100 {
1078 fbins_mask[BYTES_PER_MASK - 1 - whichByte] & ((unsigned char) (~selectedByte)); // bytes are ordered MSB first in the packets
1101 freqToFilterOut = f_RW_MAX;
1079 }
1080 }
1102 }
1081 }
1103 }
1082 }
1104 }
@@ -1117,28 +1139,28 void build_sy_lfr_rw_mask( unsigned int
1117 }
1139 }
1118
1140
1119 // RW1 F1
1141 // RW1 F1
1120 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw1_f1, deltaF, (cp_rpw_sc_rw_f_flags & BIT_RW1_F1) >> SHIFT_7_BITS ); // [1000 0000]
1142 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw1_f1, deltaF, (cp_rpw_sc_rw_f_flags & BIT_RW1_F1) >> SHIFT_7_BITS, 1. ); // [1000 0000]
1121
1143
1122 // RW1 F2
1144 // RW1 F2
1123 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw1_f2, deltaF, (cp_rpw_sc_rw_f_flags & BIT_RW1_F2) >> SHIFT_6_BITS ); // [0100 0000]
1145 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw1_f2, deltaF, (cp_rpw_sc_rw_f_flags & BIT_RW1_F2) >> SHIFT_6_BITS, 1. ); // [0100 0000]
1124
1146
1125 // RW2 F1
1147 // RW2 F1
1126 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw2_f1, deltaF, (cp_rpw_sc_rw_f_flags & BIT_RW2_F1) >> SHIFT_5_BITS ); // [0010 0000]
1148 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw2_f1, deltaF, (cp_rpw_sc_rw_f_flags & BIT_RW2_F1) >> SHIFT_5_BITS, 1. ); // [0010 0000]
1127
1149
1128 // RW2 F2
1150 // RW2 F2
1129 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw2_f2, deltaF, (cp_rpw_sc_rw_f_flags & BIT_RW2_F2) >> SHIFT_4_BITS ); // [0001 0000]
1151 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw2_f2, deltaF, (cp_rpw_sc_rw_f_flags & BIT_RW2_F2) >> SHIFT_4_BITS, 1. ); // [0001 0000]
1130
1152
1131 // RW3 F1
1153 // RW3 F1
1132 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw3_f1, deltaF, (cp_rpw_sc_rw_f_flags & BIT_RW3_F1) >> SHIFT_3_BITS ); // [0000 1000]
1154 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw3_f1, deltaF, (cp_rpw_sc_rw_f_flags & BIT_RW3_F1) >> SHIFT_3_BITS, 1. ); // [0000 1000]
1133
1155
1134 // RW3 F2
1156 // RW3 F2
1135 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw3_f2, deltaF, (cp_rpw_sc_rw_f_flags & BIT_RW3_F2) >> SHIFT_2_BITS ); // [0000 0100]
1157 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw3_f2, deltaF, (cp_rpw_sc_rw_f_flags & BIT_RW3_F2) >> SHIFT_2_BITS, 1. ); // [0000 0100]
1136
1158
1137 // RW4 F1
1159 // RW4 F1
1138 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw4_f1, deltaF, (cp_rpw_sc_rw_f_flags & BIT_RW4_F1) >> 1 ); // [0000 0010]
1160 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw4_f1, deltaF, (cp_rpw_sc_rw_f_flags & BIT_RW4_F1) >> 1 , 1. ); // [0000 0010]
1139
1161
1140 // RW4 F2
1162 // RW4 F2
1141 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw4_f2, deltaF, (cp_rpw_sc_rw_f_flags & BIT_RW4_F2) ); // [0000 0001]
1163 setFBinMask( local_rw_fbins_mask, cp_rpw_sc_rw4_f2, deltaF, (cp_rpw_sc_rw_f_flags & BIT_RW4_F2) , 1.); // [0000 0001]
1142
1164
1143 // update the value of the fbins related to reaction wheels frequency filtering
1165 // update the value of the fbins related to reaction wheels frequency filtering
1144 if (maskPtr != NULL)
1166 if (maskPtr != NULL)
@@ -1318,7 +1340,6 int set_sy_lfr_kcoeff( ccsdsTelecommandP
1318 unsigned int kcoeff;
1340 unsigned int kcoeff;
1319 unsigned short sy_lfr_kcoeff_frequency;
1341 unsigned short sy_lfr_kcoeff_frequency;
1320 unsigned short bin;
1342 unsigned short bin;
1321 unsigned short *freqPtr;
1322 float *kcoeffPtr_norm;
1343 float *kcoeffPtr_norm;
1323 float *kcoeffPtr_sbm;
1344 float *kcoeffPtr_sbm;
1324 int status;
1345 int status;
@@ -1327,14 +1348,14 int set_sy_lfr_kcoeff( ccsdsTelecommandP
1327 unsigned char *kcoeffSbmPtr_a;
1348 unsigned char *kcoeffSbmPtr_a;
1328 unsigned char *kcoeffSbmPtr_b;
1349 unsigned char *kcoeffSbmPtr_b;
1329
1350
1330 status = LFR_SUCCESSFUL;
1351 sy_lfr_kcoeff_frequency = 0;
1331
1352 bin = 0;
1332 kcoeffPtr_norm = NULL;
1353 kcoeffPtr_norm = NULL;
1333 kcoeffPtr_sbm = NULL;
1354 kcoeffPtr_sbm = NULL;
1334 bin = 0;
1355 status = LFR_SUCCESSFUL;
1335
1356
1336 freqPtr = (unsigned short *) &TC->dataAndCRC[DATAFIELD_POS_SY_LFR_KCOEFF_FREQUENCY];
1357 // copy the value of the frequency byte by byte DO NOT USE A SHORT* POINTER
1337 sy_lfr_kcoeff_frequency = *freqPtr;
1358 copyInt16ByChar( (unsigned char*) &sy_lfr_kcoeff_frequency, &TC->dataAndCRC[DATAFIELD_POS_SY_LFR_KCOEFF_FREQUENCY] );
1338
1359
1339 if ( sy_lfr_kcoeff_frequency >= NB_BINS_COMPRESSED_SM )
1360 if ( sy_lfr_kcoeff_frequency >= NB_BINS_COMPRESSED_SM )
1340 {
1361 {
@@ -1396,7 +1417,7 int set_sy_lfr_kcoeff( ccsdsTelecommandP
1396 }
1417 }
1397 }
1418 }
1398
1419
1399 // print_k_coeff();
1420 //print_k_coeff();
1400
1421
1401 return status;
1422 return status;
1402 }
1423 }
@@ -1409,11 +1430,26 void copyFloatByChar( unsigned char *des
1409 destination[BYTE_3] = source[BYTE_3];
1430 destination[BYTE_3] = source[BYTE_3];
1410 }
1431 }
1411
1432
1433 void copyInt32ByChar( unsigned char *destination, unsigned char *source )
1434 {
1435 destination[BYTE_0] = source[BYTE_0];
1436 destination[BYTE_1] = source[BYTE_1];
1437 destination[BYTE_2] = source[BYTE_2];
1438 destination[BYTE_3] = source[BYTE_3];
1439 }
1440
1441 void copyInt16ByChar( unsigned char *destination, unsigned char *source )
1442 {
1443 destination[BYTE_0] = source[BYTE_0];
1444 destination[BYTE_1] = source[BYTE_1];
1445 }
1446
1412 void floatToChar( float value, unsigned char* ptr)
1447 void floatToChar( float value, unsigned char* ptr)
1413 {
1448 {
1414 unsigned char* valuePtr;
1449 unsigned char* valuePtr;
1415
1450
1416 valuePtr = (unsigned char*) &value;
1451 valuePtr = (unsigned char*) &value;
1452
1417 ptr[BYTE_0] = valuePtr[BYTE_0];
1453 ptr[BYTE_0] = valuePtr[BYTE_0];
1418 ptr[BYTE_1] = valuePtr[BYTE_1];
1454 ptr[BYTE_1] = valuePtr[BYTE_1];
1419 ptr[BYTE_2] = valuePtr[BYTE_2];
1455 ptr[BYTE_2] = valuePtr[BYTE_2];