Target:
Source:
Actions:
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 " |
|
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 |
|
|
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_ |
|
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_ |
|
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 = ( |
|
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 |
|
|
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 |
|
|
182 | copyInt32ByChar( (char*) &transitionCoarseTime, &bytePosPtr[ BYTE_POS_CP_LFR_ENTER_MODE_TIME ] ); | |
185 |
transitionCoarseTime = |
|
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( |
|
1387 | val = CAL_A0 * sin( CAL_W0 * k * Ts ) | |
1391 |
+ sin( |
|
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 |
|
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 |
|
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 |
|
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) |
|
1034 | binAbove = (int) ( ceil( ((double) freqToFilterOut) / ((double) deltaFreq)) ); | |
1029 |
deltaAbove = binAbove * deltaFreq - |
|
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 ); |
|
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 ); |
|
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 ); |
|
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 ); |
|
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 ); |
|
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 ); |
|
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 ); |
|
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 |
|
|
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]; |