##// END OF EJS Templates
3.1.0.7...
paul -
r337:e784d0191567 R3_plus draft
parent child
Show More
@@ -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 );
@@ -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 "6" 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)
@@ -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)
General Comments 0
You need to be logged in to leave comments. Login now