##// 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 1 3081d1f9bb20b2b64a192585337a292a9804e0c5 LFR_basic-parameters
2 7c46de6059673d3239fcc7103e16510727f35923 header/lfr_common_headers
2 a34c50cabb1bc5e778bfc8374242e4683e4defc2 header/lfr_common_headers
@@ -26,8 +26,12
26 26 #define STATUS_8 8
27 27 #define STATUS_9 9
28 28
29 #define CAL_F0 625
30 #define CAL_F1 10000
29 #define CAL_F0 625.
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 35 #define CAL_FS 160256.410
32 36 #define CAL_SCALE_FACTOR (0.250 / 0.000654) // 191, 500 mVpp, 2 sinus waves => 500 mVpp each, amplitude = 250 mV
33 37 #define CAL_NB_PTS 256
@@ -77,7 +77,7 unsigned int check_update_info_hk_lfr_mo
77 77 unsigned int check_update_info_hk_tds_mode( unsigned char mode );
78 78 unsigned int check_update_info_hk_thr_mode( unsigned char mode );
79 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 81 void build_sy_lfr_rw_mask( unsigned int channel );
82 82 void build_sy_lfr_rw_masks();
83 83 void merge_fbins_masks( void );
@@ -91,6 +91,8 int check_sy_lfr_filter_parameters( ccsd
91 91 // KCOEFFICIENTS
92 92 int set_sy_lfr_kcoeff(ccsdsTelecommandPacket_t *TC , rtems_id queue_id);
93 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 96 void floatToChar( float value, unsigned char* ptr);
95 97
96 98 void init_parameter_dump( void );
@@ -64,7 +64,7 option(FSW_debug_tch "?" OFF)
64 64 set(SW_VERSION_N1 "3" CACHE STRING "Choose N1 FSW Version." FORCE)
65 65 set(SW_VERSION_N2 "1" CACHE STRING "Choose N2 FSW Version." FORCE)
66 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 69 if(FSW_verbose)
70 70 add_definitions(-DPRINT_MESSAGES_ON_CONSOLE)
@@ -408,7 +408,7 rtems_task avgv_task(rtems_task_argument
408 408 if (k == (MOVING_AVERAGE-1))
409 409 {
410 410 k = 0;
411 printf("tick\n");
411 PRINTF("tick\n");
412 412 }
413 413 else
414 414 {
@@ -727,12 +727,12 void set_sy_lfr_pas_filter_enabled( bool
727 727 if (state == true)
728 728 {
729 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 732 else
733 733 {
734 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 787 else
788 788 {
789 delta = (255 - oldValue) + newValue;
789 delta = (CONST_256 - oldValue) + newValue;
790 790 }
791 791
792 792 *counter = *counter + delta;
@@ -798,7 +798,7 void hk_lfr_le_update( void )
798 798 hk_lfr_le_t new_hk_lfr_le;
799 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 803 // DPU
804 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 868 hk_lfr_me_t new_hk_lfr_me;
869 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 873 // get the current values
874 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 126 int len;
127 ccsdsTelecommandPacket_t currentTC;
127 ccsdsTelecommandPacket_t __attribute__((aligned(4))) currentTC;
128 128 unsigned char computed_CRC[ BYTES_PER_CRC ];
129 129 unsigned char currentTC_LEN_RCV[ BYTES_PER_PKT_LEN ];
130 130 unsigned char destinationID;
@@ -167,7 +167,7 rtems_task recv_task( rtems_task_argumen
167 167 }
168 168 else {
169 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 171 currentTC_LEN_RCV[ 0 ] = (unsigned char) (estimatedPacketLength >> SHIFT_1_BYTE);
172 172 currentTC_LEN_RCV[ 1 ] = (unsigned char) (estimatedPacketLength );
173 173 // CHECK THE TC
@@ -190,10 +190,10 rtems_task prc0_task( rtems_task_argumen
190 190 rtems_status_code status;
191 191 rtems_id queue_id;
192 192 rtems_id queue_id_q_p0;
193 bp_packet_with_spare packet_norm_bp1;
194 bp_packet packet_norm_bp2;
195 bp_packet packet_sbm_bp1;
196 bp_packet packet_sbm_bp2;
193 bp_packet_with_spare __attribute__((aligned(4))) packet_norm_bp1;
194 bp_packet __attribute__((aligned(4))) packet_norm_bp2;
195 bp_packet __attribute__((aligned(4))) packet_sbm_bp1;
196 bp_packet __attribute__((aligned(4))) packet_sbm_bp2;
197 197 ring_node *current_ring_node_to_send_asm_f0;
198 198 float nbSMInASMNORM;
199 199 float nbSMInASMSBM;
@@ -191,10 +191,10 rtems_task prc1_task( rtems_task_argumen
191 191 rtems_status_code status;
192 192 rtems_id queue_id_send;
193 193 rtems_id queue_id_q_p1;
194 bp_packet_with_spare packet_norm_bp1;
195 bp_packet packet_norm_bp2;
196 bp_packet packet_sbm_bp1;
197 bp_packet packet_sbm_bp2;
194 bp_packet_with_spare __attribute__((aligned(4))) packet_norm_bp1;
195 bp_packet __attribute__((aligned(4))) packet_norm_bp2;
196 bp_packet __attribute__((aligned(4))) packet_sbm_bp1;
197 bp_packet __attribute__((aligned(4))) packet_sbm_bp2;
198 198 ring_node *current_ring_node_to_send_asm_f1;
199 199 float nbSMInASMNORM;
200 200 float nbSMInASMSBM;
@@ -139,8 +139,8 rtems_task prc2_task( rtems_task_argumen
139 139 rtems_status_code status;
140 140 rtems_id queue_id_send;
141 141 rtems_id queue_id_q_p2;
142 bp_packet packet_norm_bp1;
143 bp_packet packet_norm_bp2;
142 bp_packet __attribute__((aligned(4))) packet_norm_bp1;
143 bp_packet __attribute__((aligned(4))) packet_norm_bp2;
144 144 ring_node *current_ring_node_to_send_asm_f2;
145 145 float nbSMInASMNORM;
146 146
@@ -29,7 +29,7 rtems_task actn_task( rtems_task_argumen
29 29
30 30 int result;
31 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 33 size_t size; // size of the incoming TC packet
34 34 unsigned char subtype; // subtype of the current TC packet
35 35 unsigned char time[BYTES_PER_TIME];
@@ -174,16 +174,13 int action_enter_mode(ccsdsTelecommandPa
174 174
175 175 rtems_status_code status;
176 176 unsigned char requestedMode;
177 unsigned int *transitionCoarseTime_ptr;
178 177 unsigned int transitionCoarseTime;
179 178 unsigned char * bytePosPtr;
180 179
181 180 bytePosPtr = (unsigned char *) &TC->packetID;
182
183 181 requestedMode = bytePosPtr[ BYTE_POS_CP_MODE_LFR_SET ];
184 transitionCoarseTime_ptr = (unsigned int *) ( &bytePosPtr[ BYTE_POS_CP_LFR_ENTER_MODE_TIME ] );
185 transitionCoarseTime = (*transitionCoarseTime_ptr) & COARSE_TIME_MASK;
186
182 copyInt32ByChar( (char*) &transitionCoarseTime, &bytePosPtr[ BYTE_POS_CP_LFR_ENTER_MODE_TIME ] );
183 transitionCoarseTime = transitionCoarseTime & COARSE_TIME_MASK;
187 184 status = check_mode_value( requestedMode );
188 185
189 186 if ( status != LFR_SUCCESSFUL ) // the mode value is inconsistent
@@ -1387,8 +1384,8 void setCalibrationData( void )
1387 1384 // build the signal for the SCM calibration
1388 1385 for (k = 0; k < CAL_NB_PTS; k++)
1389 1386 {
1390 val = sin( 2 * pi * CAL_F0 * k * Ts )
1391 + sin( 2 * pi * CAL_F1 * k * Ts );
1387 val = CAL_A0 * sin( CAL_W0 * k * Ts )
1388 + CAL_A1 * sin( CAL_W1 * k * Ts );
1392 1389 data = (unsigned short) ((val * CAL_SCALE_FACTOR) + CONST_2048);
1393 1390 time_management_regs->calData = data & CAL_DATA_MASK;
1394 1391 }
@@ -978,7 +978,7 void getReactionWheelsFrequencies( ccsds
978 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 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 998 float fi;
999 999 float deltaBelow;
1000 1000 float deltaAbove;
1001 float freqToFilterOut;
1001 1002 int binBelow;
1002 1003 int binAbove;
1003 1004 int closestBin;
@@ -1006,77 +1007,98 void setFBinMask( unsigned char *fbins_m
1006 1007 int bin;
1007 1008 int binToRemove[NB_BINS_TO_REMOVE];
1008 1009 int k;
1010 bool filteringSet;
1009 1011
1010 1012 closestBin = 0;
1011 1013 whichByte = 0;
1012 1014 bin = 0;
1015 filteringSet = false;
1013 1016
1014 1017 for (k = 0; k < NB_BINS_TO_REMOVE; k++)
1015 1018 {
1016 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 ]
1020 f_RW_min = rw_f - (filterPar.sy_lfr_sc_rw_delta_f / 2.);
1021 f_RW_MAX = rw_f + (filterPar.sy_lfr_sc_rw_delta_f / 2.);
1022 // compute the frequency range to filter [ rw_f - delta_f; rw_f + delta_f ]
1023 f_RW_min = rw_f - ((filterPar.sy_lfr_sc_rw_delta_f) * sy_lfr_rw_k);
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
1024 binBelow = (int) ( floor( ((double) rw_f) / ((double) deltaFreq)) );
1025 deltaBelow = rw_f - binBelow * deltaFreq;
1026 freqToFilterOut = f_RW_min;
1027 while ( filteringSet == false )
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
1028 binAbove = (int) ( ceil( ((double) rw_f) / ((double) deltaFreq)) );
1029 deltaAbove = binAbove * deltaFreq - rw_f;
1033 // compute the index of the frequency bin immediately above rw_f
1034 binAbove = (int) ( ceil( ((double) freqToFilterOut) / ((double) deltaFreq)) );
1035 deltaAbove = binAbove * deltaFreq - freqToFilterOut;
1030 1036
1031 // search the closest bin
1032 if (deltaAbove > deltaBelow)
1033 {
1034 closestBin = binBelow;
1035 }
1036 else
1037 {
1038 closestBin = binAbove;
1039 }
1037 // search the closest bin
1038 if (deltaAbove > deltaBelow)
1039 {
1040 closestBin = binBelow;
1041 }
1042 else
1043 {
1044 closestBin = binAbove;
1045 }
1040 1046
1041 // compute the fi interval [fi - deltaFreq * 0.285, fi + deltaFreq * 0.285]
1042 fi = closestBin * deltaFreq;
1043 fi_min = fi - (deltaFreq * FI_INTERVAL_COEFF);
1044 fi_MAX = fi + (deltaFreq * FI_INTERVAL_COEFF);
1047 // compute the fi interval [fi - deltaFreq * 0.285, fi + deltaFreq * 0.285]
1048 fi = closestBin * deltaFreq;
1049 fi_min = 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 //**************************************************************************************
1047 // be careful here, one shall take into account that the bin 0 IS DROPPED in the spectra
1048 // thus, the index 0 in a mask corresponds to the bin 1 of the spectrum
1049 //**************************************************************************************
1057 // 1. IF freqToFilterOut is included in [ fi_min; fi_MAX ]
1058 // => remove f_(i), f_(i-1) and f_(i+1)
1059 if ( ( freqToFilterOut > fi_min ) && ( freqToFilterOut < fi_MAX ) )
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 ]
1052 // => remove f_(i), f_(i-1) and f_(i+1)
1053 if ( ( f_RW_min > fi_min ) && ( f_RW_MAX < fi_MAX ) )
1054 {
1055 binToRemove[0] = (closestBin - 1) - 1;
1056 binToRemove[1] = (closestBin) - 1;
1057 binToRemove[2] = (closestBin + 1) - 1;
1058 }
1059 // 2. ELSE
1060 // => remove the two f_(i) which are around f_RW
1061 else
1062 {
1063 binToRemove[0] = (binBelow) - 1;
1064 binToRemove[1] = (binAbove) - 1;
1065 binToRemove[2] = (-1);
1066 }
1074 for (k = 0; k < NB_BINS_TO_REMOVE; k++)
1075 {
1076 bin = binToRemove[k];
1077 if ( (bin >= BIN_MIN) && (bin <= BIN_MAX) )
1078 {
1079 if (flag == 1)
1080 {
1081 whichByte = (bin >> SHIFT_3_BITS); // division by 8
1082 selectedByte = ( 1 << (bin - (whichByte * BITS_PER_BYTE)) );
1083 fbins_mask[BYTES_PER_MASK - 1 - whichByte] =
1084 fbins_mask[BYTES_PER_MASK - 1 - whichByte] & ((unsigned char) (~selectedByte)); // bytes are ordered MSB first in the packets
1085 }
1086 }
1087 }
1067 1088
1068 for (k = 0; k < NB_BINS_TO_REMOVE; k++)
1069 {
1070 bin = binToRemove[k];
1071 if ( (bin >= BIN_MIN) && (bin <= BIN_MAX) )
1089 // update freqToFilterOut
1090 if ( freqToFilterOut == f_RW_MAX )
1091 {
1092 filteringSet = true; // end of the loop
1093 }
1094 else
1072 1095 {
1073 if (flag == 1)
1074 {
1075 whichByte = (bin >> SHIFT_3_BITS); // division by 8
1076 selectedByte = ( 1 << (bin - (whichByte * BITS_PER_BYTE)) );
1077 fbins_mask[BYTES_PER_MASK - 1 - whichByte] =
1078 fbins_mask[BYTES_PER_MASK - 1 - whichByte] & ((unsigned char) (~selectedByte)); // bytes are ordered MSB first in the packets
1079 }
1096 freqToFilterOut = freqToFilterOut + deltaFreq;
1097 }
1098
1099 if ( freqToFilterOut > f_RW_MAX)
1100 {
1101 freqToFilterOut = f_RW_MAX;
1080 1102 }
1081 1103 }
1082 1104 }
@@ -1117,28 +1139,28 void build_sy_lfr_rw_mask( unsigned int
1117 1139 }
1118 1140
1119 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 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 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 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 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 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 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 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 1165 // update the value of the fbins related to reaction wheels frequency filtering
1144 1166 if (maskPtr != NULL)
@@ -1318,7 +1340,6 int set_sy_lfr_kcoeff( ccsdsTelecommandP
1318 1340 unsigned int kcoeff;
1319 1341 unsigned short sy_lfr_kcoeff_frequency;
1320 1342 unsigned short bin;
1321 unsigned short *freqPtr;
1322 1343 float *kcoeffPtr_norm;
1323 1344 float *kcoeffPtr_sbm;
1324 1345 int status;
@@ -1327,14 +1348,14 int set_sy_lfr_kcoeff( ccsdsTelecommandP
1327 1348 unsigned char *kcoeffSbmPtr_a;
1328 1349 unsigned char *kcoeffSbmPtr_b;
1329 1350
1330 status = LFR_SUCCESSFUL;
1331
1351 sy_lfr_kcoeff_frequency = 0;
1352 bin = 0;
1332 1353 kcoeffPtr_norm = NULL;
1333 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];
1337 sy_lfr_kcoeff_frequency = *freqPtr;
1357 // copy the value of the frequency byte by byte DO NOT USE A SHORT* POINTER
1358 copyInt16ByChar( (unsigned char*) &sy_lfr_kcoeff_frequency, &TC->dataAndCRC[DATAFIELD_POS_SY_LFR_KCOEFF_FREQUENCY] );
1338 1359
1339 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 1422 return status;
1402 1423 }
@@ -1409,11 +1430,26 void copyFloatByChar( unsigned char *des
1409 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 1447 void floatToChar( float value, unsigned char* ptr)
1413 1448 {
1414 1449 unsigned char* valuePtr;
1415 1450
1416 1451 valuePtr = (unsigned char*) &value;
1452
1417 1453 ptr[BYTE_0] = valuePtr[BYTE_0];
1418 1454 ptr[BYTE_1] = valuePtr[BYTE_1];
1419 1455 ptr[BYTE_2] = valuePtr[BYTE_2];