##// END OF EJS Templates
New version of ASM packets transmission...
paul -
r173:c2ac646b3bc4 VHDL_0_1_28
parent child
Show More
@@ -1,273 +1,273
1 1 #############################################################################
2 2 # Makefile for building: bin/fsw
3 # Generated by qmake (2.01a) (Qt 4.8.6) on: Thu Nov 13 07:59:00 2014
3 # Generated by qmake (2.01a) (Qt 4.8.6) on: Fri Nov 14 07:56:09 2014
4 4 # Project: fsw-qt.pro
5 5 # Template: app
6 6 # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
7 7 #############################################################################
8 8
9 9 ####### Compiler, tools and options
10 10
11 11 CC = sparc-rtems-gcc
12 12 CXX = sparc-rtems-g++
13 13 DEFINES = -DSW_VERSION_N1=2 -DSW_VERSION_N2=0 -DSW_VERSION_N3=1 -DSW_VERSION_N4=1 -DLPP_DPU_DESTID -DPRINT_MESSAGES_ON_CONSOLE
14 14 CFLAGS = -pipe -O3 -Wall $(DEFINES)
15 15 CXXFLAGS = -pipe -O3 -Wall $(DEFINES)
16 16 INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header -I../header/processing -I../src/LFR_basic-parameters
17 17 LINK = sparc-rtems-g++
18 18 LFLAGS =
19 19 LIBS = $(SUBLIBS)
20 20 AR = sparc-rtems-ar rcs
21 21 RANLIB =
22 22 QMAKE = /usr/bin/qmake-qt4
23 23 TAR = tar -cf
24 24 COMPRESS = gzip -9f
25 25 COPY = cp -f
26 26 SED = sed
27 27 COPY_FILE = $(COPY)
28 28 COPY_DIR = $(COPY) -r
29 29 STRIP = sparc-rtems-strip
30 30 INSTALL_FILE = install -m 644 -p
31 31 INSTALL_DIR = $(COPY_DIR)
32 32 INSTALL_PROGRAM = install -m 755 -p
33 33 DEL_FILE = rm -f
34 34 SYMLINK = ln -f -s
35 35 DEL_DIR = rmdir
36 36 MOVE = mv -f
37 37 CHK_DIR_EXISTS= test -d
38 38 MKDIR = mkdir -p
39 39
40 40 ####### Output directory
41 41
42 42 OBJECTS_DIR = obj/
43 43
44 44 ####### Files
45 45
46 46 SOURCES = ../src/wf_handler.c \
47 47 ../src/tc_handler.c \
48 48 ../src/fsw_misc.c \
49 49 ../src/fsw_init.c \
50 50 ../src/fsw_globals.c \
51 51 ../src/fsw_spacewire.c \
52 52 ../src/tc_load_dump_parameters.c \
53 53 ../src/tm_lfr_tc_exe.c \
54 54 ../src/tc_acceptance.c \
55 55 ../src/processing/fsw_processing.c \
56 56 ../src/processing/avf0_prc0.c \
57 57 ../src/processing/avf1_prc1.c \
58 58 ../src/processing/avf2_prc2.c \
59 59 ../src/lfr_cpu_usage_report.c \
60 60 ../src/LFR_basic-parameters/basic_parameters.c
61 61 OBJECTS = obj/wf_handler.o \
62 62 obj/tc_handler.o \
63 63 obj/fsw_misc.o \
64 64 obj/fsw_init.o \
65 65 obj/fsw_globals.o \
66 66 obj/fsw_spacewire.o \
67 67 obj/tc_load_dump_parameters.o \
68 68 obj/tm_lfr_tc_exe.o \
69 69 obj/tc_acceptance.o \
70 70 obj/fsw_processing.o \
71 71 obj/avf0_prc0.o \
72 72 obj/avf1_prc1.o \
73 73 obj/avf2_prc2.o \
74 74 obj/lfr_cpu_usage_report.o \
75 75 obj/basic_parameters.o
76 76 DIST = /usr/lib64/qt4/mkspecs/common/unix.conf \
77 77 /usr/lib64/qt4/mkspecs/common/linux.conf \
78 78 /usr/lib64/qt4/mkspecs/common/gcc-base.conf \
79 79 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
80 80 /usr/lib64/qt4/mkspecs/common/g++-base.conf \
81 81 /usr/lib64/qt4/mkspecs/common/g++-unix.conf \
82 82 /usr/lib64/qt4/mkspecs/qconfig.pri \
83 83 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
84 84 /usr/lib64/qt4/mkspecs/features/qt_functions.prf \
85 85 /usr/lib64/qt4/mkspecs/features/qt_config.prf \
86 86 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
87 87 /usr/lib64/qt4/mkspecs/features/default_pre.prf \
88 88 sparc.pri \
89 89 /usr/lib64/qt4/mkspecs/features/release.prf \
90 90 /usr/lib64/qt4/mkspecs/features/default_post.prf \
91 91 /usr/lib64/qt4/mkspecs/features/shared.prf \
92 92 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
93 93 /usr/lib64/qt4/mkspecs/features/warn_on.prf \
94 94 /usr/lib64/qt4/mkspecs/features/resources.prf \
95 95 /usr/lib64/qt4/mkspecs/features/uic.prf \
96 96 /usr/lib64/qt4/mkspecs/features/yacc.prf \
97 97 /usr/lib64/qt4/mkspecs/features/lex.prf \
98 98 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf \
99 99 fsw-qt.pro
100 100 QMAKE_TARGET = fsw
101 101 DESTDIR = bin/
102 102 TARGET = bin/fsw
103 103
104 104 first: all
105 105 ####### Implicit rules
106 106
107 107 .SUFFIXES: .o .c .cpp .cc .cxx .C
108 108
109 109 .cpp.o:
110 110 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
111 111
112 112 .cc.o:
113 113 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
114 114
115 115 .cxx.o:
116 116 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
117 117
118 118 .C.o:
119 119 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
120 120
121 121 .c.o:
122 122 $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
123 123
124 124 ####### Build rules
125 125
126 126 all: Makefile $(TARGET)
127 127
128 128 $(TARGET): $(OBJECTS)
129 129 @$(CHK_DIR_EXISTS) bin/ || $(MKDIR) bin/
130 130 $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
131 131
132 132 Makefile: fsw-qt.pro /usr/lib64/qt4/mkspecs/linux-g++/qmake.conf /usr/lib64/qt4/mkspecs/common/unix.conf \
133 133 /usr/lib64/qt4/mkspecs/common/linux.conf \
134 134 /usr/lib64/qt4/mkspecs/common/gcc-base.conf \
135 135 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
136 136 /usr/lib64/qt4/mkspecs/common/g++-base.conf \
137 137 /usr/lib64/qt4/mkspecs/common/g++-unix.conf \
138 138 /usr/lib64/qt4/mkspecs/qconfig.pri \
139 139 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
140 140 /usr/lib64/qt4/mkspecs/features/qt_functions.prf \
141 141 /usr/lib64/qt4/mkspecs/features/qt_config.prf \
142 142 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
143 143 /usr/lib64/qt4/mkspecs/features/default_pre.prf \
144 144 sparc.pri \
145 145 /usr/lib64/qt4/mkspecs/features/release.prf \
146 146 /usr/lib64/qt4/mkspecs/features/default_post.prf \
147 147 /usr/lib64/qt4/mkspecs/features/shared.prf \
148 148 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
149 149 /usr/lib64/qt4/mkspecs/features/warn_on.prf \
150 150 /usr/lib64/qt4/mkspecs/features/resources.prf \
151 151 /usr/lib64/qt4/mkspecs/features/uic.prf \
152 152 /usr/lib64/qt4/mkspecs/features/yacc.prf \
153 153 /usr/lib64/qt4/mkspecs/features/lex.prf \
154 154 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf
155 155 $(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
156 156 /usr/lib64/qt4/mkspecs/common/unix.conf:
157 157 /usr/lib64/qt4/mkspecs/common/linux.conf:
158 158 /usr/lib64/qt4/mkspecs/common/gcc-base.conf:
159 159 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf:
160 160 /usr/lib64/qt4/mkspecs/common/g++-base.conf:
161 161 /usr/lib64/qt4/mkspecs/common/g++-unix.conf:
162 162 /usr/lib64/qt4/mkspecs/qconfig.pri:
163 163 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri:
164 164 /usr/lib64/qt4/mkspecs/features/qt_functions.prf:
165 165 /usr/lib64/qt4/mkspecs/features/qt_config.prf:
166 166 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf:
167 167 /usr/lib64/qt4/mkspecs/features/default_pre.prf:
168 168 sparc.pri:
169 169 /usr/lib64/qt4/mkspecs/features/release.prf:
170 170 /usr/lib64/qt4/mkspecs/features/default_post.prf:
171 171 /usr/lib64/qt4/mkspecs/features/shared.prf:
172 172 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf:
173 173 /usr/lib64/qt4/mkspecs/features/warn_on.prf:
174 174 /usr/lib64/qt4/mkspecs/features/resources.prf:
175 175 /usr/lib64/qt4/mkspecs/features/uic.prf:
176 176 /usr/lib64/qt4/mkspecs/features/yacc.prf:
177 177 /usr/lib64/qt4/mkspecs/features/lex.prf:
178 178 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf:
179 179 qmake: FORCE
180 180 @$(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
181 181
182 182 dist:
183 183 @$(CHK_DIR_EXISTS) obj/fsw1.0.0 || $(MKDIR) obj/fsw1.0.0
184 184 $(COPY_FILE) --parents $(SOURCES) $(DIST) obj/fsw1.0.0/ && (cd `dirname obj/fsw1.0.0` && $(TAR) fsw1.0.0.tar fsw1.0.0 && $(COMPRESS) fsw1.0.0.tar) && $(MOVE) `dirname obj/fsw1.0.0`/fsw1.0.0.tar.gz . && $(DEL_FILE) -r obj/fsw1.0.0
185 185
186 186
187 187 clean:compiler_clean
188 188 -$(DEL_FILE) $(OBJECTS)
189 189 -$(DEL_FILE) *~ core *.core
190 190
191 191
192 192 ####### Sub-libraries
193 193
194 194 distclean: clean
195 195 -$(DEL_FILE) $(TARGET)
196 196 -$(DEL_FILE) Makefile
197 197
198 198
199 199 grmon:
200 200 cd bin && C:/opt/grmon-eval-2.0.29b/win32/bin/grmon.exe -uart COM4 -u
201 201
202 202 check: first
203 203
204 204 compiler_rcc_make_all:
205 205 compiler_rcc_clean:
206 206 compiler_uic_make_all:
207 207 compiler_uic_clean:
208 208 compiler_image_collection_make_all: qmake_image_collection.cpp
209 209 compiler_image_collection_clean:
210 210 -$(DEL_FILE) qmake_image_collection.cpp
211 211 compiler_yacc_decl_make_all:
212 212 compiler_yacc_decl_clean:
213 213 compiler_yacc_impl_make_all:
214 214 compiler_yacc_impl_clean:
215 215 compiler_lex_make_all:
216 216 compiler_lex_clean:
217 217 compiler_clean:
218 218
219 219 ####### Compile
220 220
221 221 obj/wf_handler.o: ../src/wf_handler.c
222 222 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/wf_handler.o ../src/wf_handler.c
223 223
224 224 obj/tc_handler.o: ../src/tc_handler.c
225 225 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tc_handler.o ../src/tc_handler.c
226 226
227 227 obj/fsw_misc.o: ../src/fsw_misc.c
228 228 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_misc.o ../src/fsw_misc.c
229 229
230 230 obj/fsw_init.o: ../src/fsw_init.c ../src/fsw_config.c
231 231 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_init.o ../src/fsw_init.c
232 232
233 233 obj/fsw_globals.o: ../src/fsw_globals.c
234 234 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_globals.o ../src/fsw_globals.c
235 235
236 236 obj/fsw_spacewire.o: ../src/fsw_spacewire.c
237 237 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_spacewire.o ../src/fsw_spacewire.c
238 238
239 239 obj/tc_load_dump_parameters.o: ../src/tc_load_dump_parameters.c
240 240 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tc_load_dump_parameters.o ../src/tc_load_dump_parameters.c
241 241
242 242 obj/tm_lfr_tc_exe.o: ../src/tm_lfr_tc_exe.c
243 243 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tm_lfr_tc_exe.o ../src/tm_lfr_tc_exe.c
244 244
245 245 obj/tc_acceptance.o: ../src/tc_acceptance.c
246 246 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tc_acceptance.o ../src/tc_acceptance.c
247 247
248 248 obj/fsw_processing.o: ../src/processing/fsw_processing.c
249 249 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_processing.o ../src/processing/fsw_processing.c
250 250
251 251 obj/avf0_prc0.o: ../src/processing/avf0_prc0.c
252 252 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/avf0_prc0.o ../src/processing/avf0_prc0.c
253 253
254 254 obj/avf1_prc1.o: ../src/processing/avf1_prc1.c
255 255 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/avf1_prc1.o ../src/processing/avf1_prc1.c
256 256
257 257 obj/avf2_prc2.o: ../src/processing/avf2_prc2.c
258 258 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/avf2_prc2.o ../src/processing/avf2_prc2.c
259 259
260 260 obj/lfr_cpu_usage_report.o: ../src/lfr_cpu_usage_report.c
261 261 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/lfr_cpu_usage_report.o ../src/lfr_cpu_usage_report.c
262 262
263 263 obj/basic_parameters.o: ../src/LFR_basic-parameters/basic_parameters.c
264 264 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/basic_parameters.o ../src/LFR_basic-parameters/basic_parameters.c
265 265
266 266 ####### Install
267 267
268 268 install: FORCE
269 269
270 270 uninstall: FORCE
271 271
272 272 FORCE:
273 273
@@ -1,208 +1,208
1 1 <?xml version="1.0" encoding="UTF-8"?>
2 2 <!DOCTYPE QtCreatorProject>
3 <!-- Written by QtCreator 3.2.1, 2014-11-12T16:01:52. -->
3 <!-- Written by QtCreator 3.2.1, 2014-11-13T16:06:58. -->
4 4 <qtcreator>
5 5 <data>
6 6 <variable>EnvironmentId</variable>
7 7 <value type="QByteArray">{2e58a81f-9962-4bba-ae6b-760177f0656c}</value>
8 8 </data>
9 9 <data>
10 10 <variable>ProjectExplorer.Project.ActiveTarget</variable>
11 11 <value type="int">0</value>
12 12 </data>
13 13 <data>
14 14 <variable>ProjectExplorer.Project.EditorSettings</variable>
15 15 <valuemap type="QVariantMap">
16 16 <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
17 17 <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
18 18 <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
19 19 <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
20 20 <value type="QString" key="language">Cpp</value>
21 21 <valuemap type="QVariantMap" key="value">
22 22 <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
23 23 </valuemap>
24 24 </valuemap>
25 25 <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
26 26 <value type="QString" key="language">QmlJS</value>
27 27 <valuemap type="QVariantMap" key="value">
28 28 <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
29 29 </valuemap>
30 30 </valuemap>
31 31 <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
32 32 <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
33 33 <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
34 34 <value type="int" key="EditorConfiguration.IndentSize">4</value>
35 35 <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
36 36 <value type="int" key="EditorConfiguration.MarginColumn">80</value>
37 37 <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
38 38 <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
39 39 <value type="int" key="EditorConfiguration.PaddingMode">1</value>
40 40 <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
41 41 <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
42 42 <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
43 43 <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
44 44 <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
45 45 <value type="int" key="EditorConfiguration.TabSize">8</value>
46 46 <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
47 47 <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
48 48 <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
49 49 <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
50 50 <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
51 51 <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
52 52 </valuemap>
53 53 </data>
54 54 <data>
55 55 <variable>ProjectExplorer.Project.PluginSettings</variable>
56 56 <valuemap type="QVariantMap"/>
57 57 </data>
58 58 <data>
59 59 <variable>ProjectExplorer.Project.Target.0</variable>
60 60 <valuemap type="QVariantMap">
61 61 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop-Qt 4.8.2 in PATH (System)</value>
62 62 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop-Qt 4.8.2 in PATH (System)</value>
63 63 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{5289e843-9ef2-45ce-88c6-ad27d8e08def}</value>
64 64 <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
65 65 <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
66 66 <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
67 67 <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
68 68 <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory"></value>
69 69 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
70 70 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
71 71 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
72 72 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
73 73 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
74 74 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
75 75 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
76 76 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">false</value>
77 77 <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
78 78 <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
79 79 </valuemap>
80 80 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
81 81 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
82 82 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
83 83 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
84 84 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
85 85 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
86 86 <value type="QString">-w</value>
87 87 <value type="QString">-r</value>
88 88 </valuelist>
89 89 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
90 90 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
91 91 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
92 92 </valuemap>
93 93 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
94 94 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
95 95 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
96 96 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
97 97 </valuemap>
98 98 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
99 99 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
100 100 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
101 101 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
102 102 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
103 103 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
104 104 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
105 105 <value type="QString">-w</value>
106 106 <value type="QString">-r</value>
107 107 </valuelist>
108 108 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
109 109 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
110 110 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
111 111 </valuemap>
112 112 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
113 113 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
114 114 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
115 115 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
116 116 </valuemap>
117 117 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
118 118 <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
119 119 <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
120 120 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
121 121 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
122 122 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
123 123 <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
124 124 <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
125 125 </valuemap>
126 126 <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
127 127 <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
128 128 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
129 129 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
130 130 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
131 131 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
132 132 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
133 133 </valuemap>
134 134 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
135 135 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy locally</value>
136 136 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
137 137 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
138 138 </valuemap>
139 139 <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
140 140 <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
141 141 <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
142 142 <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
143 143 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
144 144 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
145 145 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
146 146 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
147 147 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
148 148 <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
149 149 <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
150 150 <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
151 151 <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
152 152 <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
153 153 <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
154 154 <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
155 155 <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
156 156 <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
157 157 <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
158 158 <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
159 159 <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
160 160 <value type="int">0</value>
161 161 <value type="int">1</value>
162 162 <value type="int">2</value>
163 163 <value type="int">3</value>
164 164 <value type="int">4</value>
165 165 <value type="int">5</value>
166 166 <value type="int">6</value>
167 167 <value type="int">7</value>
168 168 <value type="int">8</value>
169 169 <value type="int">9</value>
170 170 <value type="int">10</value>
171 171 <value type="int">11</value>
172 172 <value type="int">12</value>
173 173 <value type="int">13</value>
174 174 <value type="int">14</value>
175 175 </valuelist>
176 176 <value type="int" key="PE.EnvironmentAspect.Base">2</value>
177 177 <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
178 178 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">fsw-qt</value>
179 179 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
180 180 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/opt/DEV_PLE/FSW-qt/fsw-qt.pro</value>
181 181 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
182 182 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">fsw-qt.pro</value>
183 183 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
184 184 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">true</value>
185 185 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
186 186 <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
187 187 <value type="bool" key="RunConfiguration.UseCppDebugger">true</value>
188 188 <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">false</value>
189 189 <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
190 190 <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
191 191 <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
192 192 </valuemap>
193 193 <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
194 194 </valuemap>
195 195 </data>
196 196 <data>
197 197 <variable>ProjectExplorer.Project.TargetCount</variable>
198 198 <value type="int">1</value>
199 199 </data>
200 200 <data>
201 201 <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
202 202 <value type="int">16</value>
203 203 </data>
204 204 <data>
205 205 <variable>Version</variable>
206 206 <value type="int">16</value>
207 207 </data>
208 208 </qtcreator>
@@ -1,71 +1,73
1 1 #ifndef FSW_PARAMS_PROCESSING_H
2 2 #define FSW_PARAMS_PROCESSING_H
3 3
4 4 #define NB_BINS_PER_SM 128
5 5 #define NB_VALUES_PER_SM 25
6 6 #define TOTAL_SIZE_SM 3200 // 25 * 128 = 0xC80
7 7 #define TOTAL_SIZE_NORM_BP1_F0 99 // 11 * 9 = 99
8 8 #define TOTAL_SIZE_NORM_BP1_F1 117 // 13 * 9 = 117
9 9 #define TOTAL_SIZE_NORM_BP1_F2 108 // 12 * 9 = 108
10 10 #define TOTAL_SIZE_SBM1_BP1_F0 198 // 22 * 9 = 198
11 11 //
12 12 #define NB_RING_NODES_SM_F0 12 // AT LEAST 8 due to the way the averaging is done
13 13 #define NB_RING_NODES_ASM_BURST_SBM_F0 10 // AT LEAST 3
14 14 #define NB_RING_NODES_ASM_NORM_F0 10 // AT LEAST 3
15 15 #define NB_RING_NODES_ASM_F0 3 // AT LEAST 3
16 16 #define NB_RING_NODES_SM_F1 12 // AT LEAST 8 due to the way the averaging is done
17 17 #define NB_RING_NODES_ASM_BURST_SBM_F1 5 // AT LEAST 3
18 18 #define NB_RING_NODES_ASM_NORM_F1 5 // AT LEAST 3
19 #define NB_RING_NODES_ASM_F1 3 // AT LEAST 3
19 20 #define NB_RING_NODES_SM_F2 3 // AT LEAST 3
20 21 #define NB_RING_NODES_ASM_BURST_SBM_F2 3 // AT LEAST 3
21 22 #define NB_RING_NODES_ASM_NORM_F2 3 // AT LEAST 3
23 #define NB_RING_NODES_ASM_F2 3 // AT LEAST 3
22 24 //
23 25 #define NB_BINS_PER_ASM_F0 88
24 26 #define NB_BINS_PER_PKT_ASM_F0 44
25 27 #define TOTAL_SIZE_ASM_F0_IN_BYTES 4400 // 25 * 88 * 2
26 28 #define ASM_F0_INDICE_START 17 // 88 bins
27 29 #define ASM_F0_INDICE_STOP 104 // 2 packets of 44 bins
28 30 //
29 31 #define NB_BINS_PER_ASM_F1 104
30 32 #define NB_BINS_PER_PKT_ASM_F1 52
31 33 #define TOTAL_SIZE_ASM_F1_IN_BYTES 5200 // 25 * 104 * 2
32 34 #define ASM_F1_INDICE_START 6 // 104 bins
33 35 #define ASM_F1_INDICE_STOP 109 // 2 packets of 52 bins
34 36 //
35 37 #define NB_BINS_PER_ASM_F2 96
36 38 #define NB_BINS_PER_PKT_ASM_F2 48
37 39 #define TOTAL_SIZE_ASM_F2_IN_BYTES 4800 // 25 * 96 * 2
38 40 #define ASM_F2_INDICE_START 7 // 96 bins
39 41 #define ASM_F2_INDICE_STOP 102 // 2 packets of 48 bins
40 42 //
41 43 #define NB_BINS_COMPRESSED_SM_F0 11
42 44 #define NB_BINS_COMPRESSED_SM_F1 13
43 45 #define NB_BINS_COMPRESSED_SM_F2 12
44 46 #define NB_BINS_COMPRESSED_SM_SBM_F0 22
45 47 #define NB_BINS_COMPRESSED_SM_SBM_F1 26
46 48 #define NB_BINS_COMPRESSED_SM_SBM_F2 24
47 49 //
48 50 #define NB_BYTES_PER_BP1 9
49 51 //
50 52 #define NB_BINS_TO_AVERAGE_ASM_F0 8
51 53 #define NB_BINS_TO_AVERAGE_ASM_F1 8
52 54 #define NB_BINS_TO_AVERAGE_ASM_F2 8
53 55 #define NB_BINS_TO_AVERAGE_ASM_SBM_F0 4
54 56 #define NB_BINS_TO_AVERAGE_ASM_SBM_F1 4
55 57 #define NB_BINS_TO_AVERAGE_ASM_SBM_F2 4
56 58 //
57 59 #define TOTAL_SIZE_COMPRESSED_ASM_NORM_F0 275 // 11 * 25 WORDS
58 60 #define TOTAL_SIZE_COMPRESSED_ASM_NORM_F1 325 // 13 * 25 WORDS
59 61 #define TOTAL_SIZE_COMPRESSED_ASM_NORM_F2 300 // 12 * 25 WORDS
60 62 #define TOTAL_SIZE_COMPRESSED_ASM_SBM_F0 550 // 22 * 25 WORDS
61 63 #define TOTAL_SIZE_COMPRESSED_ASM_SBM_F1 650 // 26 * 25 WORDS
62 64 #define TOTAL_SIZE_COMPRESSED_ASM_SBM_F2 600 // 24 * 25 WORDS
63 65 #define TOTAL_SIZE_BP1_NORM_F0 99 // 9 * 11 UNSIGNED CHAR
64 66 #define TOTAL_SIZE_BP1_SBM_F0 198 // 9 * 22 UNSIGNED CHAR
65 67 // GENERAL
66 68 #define NB_SM_BEFORE_AVF0 8 // must be 8 due to the SM_average() function
67 69 #define NB_SM_BEFORE_AVF1 8 // must be 8 due to the SM_average() function
68 70 #define NB_SM_BEFORE_AVF2 1 // must be 1 due to the SM_average_f2() function
69 71
70 72 #endif // FSW_PARAMS_PROCESSING_H
71 73
@@ -1,36 +1,36
1 1 #ifndef AVF0_PRC0_H_INCLUDED
2 2 #define AVF0_PRC0_H_INCLUDED
3 3
4 4 #include "fsw_processing.h"
5 5 #include "basic_parameters.h"
6 6
7 7 typedef struct {
8 8 unsigned int norm_bp1;
9 9 unsigned int norm_bp2;
10 10 unsigned int norm_asm;
11 11 unsigned int burst_sbm_bp1;
12 12 unsigned int burst_sbm_bp2;
13 13 unsigned int burst_bp1;
14 14 unsigned int burst_bp2;
15 15 unsigned int sbm1_bp1;
16 16 unsigned int sbm1_bp2;
17 17 unsigned int sbm2_bp1;
18 18 unsigned int sbm2_bp2;
19 19 } nb_sm_before_bp_asm_f0;
20 20
21 21 //************
22 22 // RTEMS TASKS
23 23 rtems_task avf0_task( rtems_task_argument lfrRequestedMode );
24 24 rtems_task prc0_task( rtems_task_argument lfrRequestedMode );
25 25
26 26 //**********
27 27 // FUNCTIONS
28 28
29 29 void reset_nb_sm_f0( unsigned char lfrMode );
30 30
31 31 //*******
32 32 // EXTERN
33 extern ring_node_sm *ring_node_for_averaging_sm_f0;
33 extern ring_node *ring_node_for_averaging_sm_f0;
34 34 extern rtems_status_code get_message_queue_id_prc0( rtems_id *queue_id );
35 35
36 36 #endif // AVF0_PRC0_H_INCLUDED
@@ -1,33 +1,33
1 1 #ifndef AVF1_PRC1_H
2 2 #define AVF1_PRC1_H
3 3
4 4 #include "fsw_processing.h"
5 5
6 6 typedef struct {
7 7 unsigned int norm_bp1;
8 8 unsigned int norm_bp2;
9 9 unsigned int norm_asm;
10 10 unsigned int burst_sbm_bp1;
11 11 unsigned int burst_sbm_bp2;
12 12 unsigned int burst_bp1;
13 13 unsigned int burst_bp2;
14 14 unsigned int sbm2_bp1;
15 15 unsigned int sbm2_bp2;
16 16 } nb_sm_before_bp_asm_f1;
17 17
18 18 //************
19 19 // RTEMS TASKS
20 20 rtems_task avf1_task( rtems_task_argument lfrRequestedMode );
21 21 rtems_task prc1_task( rtems_task_argument lfrRequestedMode );
22 22
23 23 //**********
24 24 // FUNCTIONS
25 25
26 26 void reset_nb_sm_f1( unsigned char lfrMode );
27 27
28 28 //*******
29 29 // EXTERN
30 extern struct ring_node_sm *ring_node_for_averaging_sm_f1;
30 extern struct ring_node *ring_node_for_averaging_sm_f1;
31 31 extern rtems_status_code get_message_queue_id_prc1( rtems_id *queue_id );
32 32
33 33 #endif // AVF1_PRC1_H
@@ -1,28 +1,28
1 1 #ifndef AVF2_PRC2_H
2 2 #define AVF2_PRC2_H
3 3
4 4 #include "fsw_processing.h"
5 5
6 6 typedef struct {
7 7 unsigned int norm_bp1;
8 8 unsigned int norm_bp2;
9 9 unsigned int norm_asm;
10 10 } nb_sm_before_bp_asm_f2;
11 11
12 12 //************
13 13 // RTEMS TASKS
14 14 rtems_task avf2_task( rtems_task_argument lfrRequestedMode );
15 15 rtems_task prc2_task( rtems_task_argument lfrRequestedMode );
16 16
17 17 //**********
18 18 // FUNCTIONS
19 19
20 20 void reset_nb_sm_f2( void );
21 void SM_average_f2(float *averaged_spec_mat_f2, ring_node_sm *ring_node, unsigned int nbAverageNormF2 );
21 void SM_average_f2(float *averaged_spec_mat_f2, ring_node *ring_node, unsigned int nbAverageNormF2 );
22 22
23 23 //*******
24 24 // EXTERN
25 extern struct ring_node_sm *ring_node_for_averaging_sm_f2;
25 extern struct ring_node *ring_node_for_averaging_sm_f2;
26 26 extern rtems_status_code get_message_queue_id_prc2( rtems_id *queue_id );
27 27
28 28 #endif // AVF2_PRC2_H
@@ -1,279 +1,266
1 1 #ifndef FSW_PROCESSING_H_INCLUDED
2 2 #define FSW_PROCESSING_H_INCLUDED
3 3
4 4 #include <rtems.h>
5 5 #include <grspw.h>
6 6 #include <math.h>
7 7 #include <stdlib.h> // abs() is in the stdlib
8 8 #include <stdio.h> // printf()
9 9 #include <math.h>
10 10
11 11 #include "fsw_params.h"
12 12 #include "fsw_spacewire.h"
13 13
14 typedef struct ring_node_sm
15 {
16 struct ring_node_sm *previous;
17 struct ring_node_sm *next;
18 int buffer_address;
19 unsigned int status;
20 unsigned int coarseTime;
21 unsigned int fineTime;
22 } ring_node_sm;
23
24 14 typedef struct ring_node_asm
25 15 {
26 16 struct ring_node_asm *next;
27 17 float matrix[ TOTAL_SIZE_SM ];
28 18 unsigned int status;
29 19 } ring_node_asm;
30 20
31 21 typedef struct
32 22 {
33 23 Header_TM_LFR_SCIENCE_BP_t header;
34 24 unsigned char data[ 30 * 22 ]; // MAX size is 22 * 30 [TM_LFR_SCIENCE_BURST_BP2_F1]
35 25 } bp_packet;
36 26
37 27 typedef struct
38 28 {
39 29 Header_TM_LFR_SCIENCE_BP_with_spare_t header;
40 30 unsigned char data[ 9 * 13 ]; // only for TM_LFR_SCIENCE_NORMAL_BP1_F0 and F1
41 31 } bp_packet_with_spare;
42 32
43 33 typedef struct
44 34 {
45 35 ring_node_asm *norm;
46 36 ring_node_asm *burst_sbm;
47 37 rtems_event_set event;
48 38 unsigned int coarseTime;
49 39 unsigned int fineTime;
50 40 } asm_msg;
51 41
52 42 extern volatile int sm_f0[ ];
53 43 extern volatile int sm_f1[ ];
54 44 extern volatile int sm_f2[ ];
55 45
56 46 // parameters
57 47 extern struct param_local_str param_local;
58 48
59 49 // registers
60 50 extern time_management_regs_t *time_management_regs;
61 51 extern spectral_matrix_regs_t *spectral_matrix_regs;
62 52
63 53 extern rtems_name misc_name[5];
64 54 extern rtems_id Task_id[20]; /* array of task ids */
65 55
66 56 // ISR
67 57 rtems_isr spectral_matrices_isr( rtems_vector_number vector );
68 58 rtems_isr spectral_matrices_isr_simu( rtems_vector_number vector );
69 59
70 60 //******************
71 61 // Spectral Matrices
72 62 void reset_nb_sm( void );
73 63 // SM
74 64 void SM_init_rings( void );
75 65 void SM_reset_current_ring_nodes( void );
76 66 // ASM
77 67 void ASM_generic_init_ring(ring_node_asm *ring, unsigned char nbNodes );
78 void ASM_init_header( Header_TM_LFR_SCIENCE_ASM_t *header);
79 void ASM_send(Header_TM_LFR_SCIENCE_ASM_t *header, char *spectral_matrix,
80 unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send, rtems_id queue_id);
81 68
82 69 //*****************
83 70 // Basic Parameters
84 71
85 72 void BP_reset_current_ring_nodes( void );
86 73 void BP_init_header( Header_TM_LFR_SCIENCE_BP_t *header,
87 74 unsigned int apid, unsigned char sid,
88 75 unsigned int packetLength , unsigned char blkNr);
89 76 void BP_init_header_with_spare( Header_TM_LFR_SCIENCE_BP_with_spare_t *header,
90 77 unsigned int apid, unsigned char sid,
91 78 unsigned int packetLength, unsigned char blkNr );
92 79 void BP_send( char *data,
93 80 rtems_id queue_id ,
94 81 unsigned int nbBytesToSend , unsigned int sid );
95 82
96 83 //******************
97 84 // general functions
98 85 void reset_sm_status( void );
99 86 void reset_spectral_matrix_regs( void );
100 87 void set_time(unsigned char *time, unsigned char *timeInBuffer );
101 88 unsigned long long int get_acquisition_time( unsigned char *timePtr );
102 89 void close_matrix_actions( unsigned int *nb_sm, unsigned int nb_sm_before_avf, rtems_id avf_task_id,
103 ring_node_sm *node_for_averaging, ring_node_sm *ringNode, unsigned long long int time );
90 ring_node *node_for_averaging, ring_node *ringNode, unsigned long long int time );
104 91 unsigned char getSID( rtems_event_set event );
105 92
106 93 extern rtems_status_code get_message_queue_id_prc1( rtems_id *queue_id );
107 94 extern rtems_status_code get_message_queue_id_prc2( rtems_id *queue_id );
108 95
109 96 //***************************************
110 97 // DEFINITIONS OF STATIC INLINE FUNCTIONS
111 98 static inline void SM_average(float *averaged_spec_mat_NORM, float *averaged_spec_mat_SBM,
112 ring_node_sm *ring_node_tab[],
99 ring_node *ring_node_tab[],
113 100 unsigned int nbAverageNORM, unsigned int nbAverageSBM );
114 101 static inline void SM_average_debug( float *averaged_spec_mat_NORM, float *averaged_spec_mat_SBM,
115 ring_node_sm *ring_node_tab[],
102 ring_node *ring_node_tab[],
116 103 unsigned int nbAverageNORM, unsigned int nbAverageSBM );
117 104 static inline void ASM_reorganize_and_divide(float *averaged_spec_mat, float *averaged_spec_mat_reorganized,
118 105 float divider );
119 106 static inline void ASM_compress_reorganize_and_divide(float *averaged_spec_mat, float *compressed_spec_mat,
120 107 float divider,
121 108 unsigned char nbBinsCompressedMatrix, unsigned char nbBinsToAverage , unsigned char ASMIndexStart);
122 109 static inline void ASM_convert(volatile float *input_matrix, char *output_matrix);
123 110
124 void SM_average_debug( float *averaged_spec_mat_NORM, float *averaged_spec_mat_SBM,
125 ring_node_sm *ring_node_tab[],
111 void SM_average( float *averaged_spec_mat_NORM, float *averaged_spec_mat_SBM,
112 ring_node *ring_node_tab[],
126 113 unsigned int nbAverageNORM, unsigned int nbAverageSBM )
127 114 {
128 115 float sum;
129 116 unsigned int i;
130 117
131 118 for(i=0; i<TOTAL_SIZE_SM; i++)
132 119 {
133 120 sum = ( (int *) (ring_node_tab[0]->buffer_address) ) [ i ]
134 121 + ( (int *) (ring_node_tab[1]->buffer_address) ) [ i ]
135 122 + ( (int *) (ring_node_tab[2]->buffer_address) ) [ i ]
136 123 + ( (int *) (ring_node_tab[3]->buffer_address) ) [ i ]
137 124 + ( (int *) (ring_node_tab[4]->buffer_address) ) [ i ]
138 125 + ( (int *) (ring_node_tab[5]->buffer_address) ) [ i ]
139 126 + ( (int *) (ring_node_tab[6]->buffer_address) ) [ i ]
140 127 + ( (int *) (ring_node_tab[7]->buffer_address) ) [ i ];
141 128
142 129 if ( (nbAverageNORM == 0) && (nbAverageSBM == 0) )
143 130 {
144 131 averaged_spec_mat_NORM[ i ] = sum;
145 132 averaged_spec_mat_SBM[ i ] = sum;
146 133 }
147 134 else if ( (nbAverageNORM != 0) && (nbAverageSBM != 0) )
148 135 {
149 136 averaged_spec_mat_NORM[ i ] = ( averaged_spec_mat_NORM[ i ] + sum );
150 137 averaged_spec_mat_SBM[ i ] = ( averaged_spec_mat_SBM[ i ] + sum );
151 138 }
152 139 else if ( (nbAverageNORM != 0) && (nbAverageSBM == 0) )
153 140 {
154 141 averaged_spec_mat_NORM[ i ] = ( averaged_spec_mat_NORM[ i ] + sum );
155 142 averaged_spec_mat_SBM[ i ] = sum;
156 143 }
157 144 else
158 145 {
159 146 PRINTF2("ERR *** in SM_average *** unexpected parameters %d %d\n", nbAverageNORM, nbAverageSBM)
160 147 }
161 148 }
162 149 }
163 150
164 void SM_average( float *averaged_spec_mat_NORM, float *averaged_spec_mat_SBM,
165 ring_node_sm *ring_node_tab[],
151 void SM_average_debug( float *averaged_spec_mat_NORM, float *averaged_spec_mat_SBM,
152 ring_node *ring_node_tab[],
166 153 unsigned int nbAverageNORM, unsigned int nbAverageSBM )
167 154 {
168 155 float sum;
169 156 unsigned int i;
170 157
171 158 for(i=0; i<TOTAL_SIZE_SM; i++)
172 159 {
173 160 sum = ( (int *) (ring_node_tab[0]->buffer_address) ) [ i ];
174 161
175 162 if ( (nbAverageNORM == 0) && (nbAverageSBM == 0) )
176 163 {
177 164 averaged_spec_mat_NORM[ i ] = sum;
178 165 averaged_spec_mat_SBM[ i ] = sum;
179 166 }
180 167 else if ( (nbAverageNORM != 0) && (nbAverageSBM != 0) )
181 168 {
182 169 averaged_spec_mat_NORM[ i ] = sum;
183 170 averaged_spec_mat_SBM[ i ] = sum;
184 171 }
185 172 else if ( (nbAverageNORM != 0) && (nbAverageSBM == 0) )
186 173 {
187 174 averaged_spec_mat_NORM[ i ] = sum;
188 175 averaged_spec_mat_SBM[ i ] = sum;
189 176 }
190 177 else
191 178 {
192 179 PRINTF2("ERR *** in SM_average *** unexpected parameters %d %d\n", nbAverageNORM, nbAverageSBM)
193 180 }
194 181 }
195 182 }
196 183
197 184 void ASM_reorganize_and_divide( float *averaged_spec_mat, float *averaged_spec_mat_reorganized, float divider )
198 185 {
199 186 int frequencyBin;
200 187 int asmComponent;
201 188 unsigned int offsetAveragedSpecMatReorganized;
202 189 unsigned int offsetAveragedSpecMat;
203 190
204 191 for (asmComponent = 0; asmComponent < NB_VALUES_PER_SM; asmComponent++)
205 192 {
206 193 for( frequencyBin = 0; frequencyBin < NB_BINS_PER_SM; frequencyBin++ )
207 194 {
208 195 offsetAveragedSpecMatReorganized =
209 196 frequencyBin * NB_VALUES_PER_SM
210 197 + asmComponent;
211 198 offsetAveragedSpecMat =
212 199 asmComponent * NB_BINS_PER_SM
213 200 + frequencyBin;
214 201 averaged_spec_mat_reorganized[offsetAveragedSpecMatReorganized ] =
215 202 averaged_spec_mat[ offsetAveragedSpecMat ] / divider;
216 203 }
217 204 }
218 205 }
219 206
220 207 void ASM_compress_reorganize_and_divide(float *averaged_spec_mat, float *compressed_spec_mat , float divider,
221 208 unsigned char nbBinsCompressedMatrix, unsigned char nbBinsToAverage, unsigned char ASMIndexStart )
222 209 {
223 210 int frequencyBin;
224 211 int asmComponent;
225 212 int offsetASM;
226 213 int offsetCompressed;
227 214 int k;
228 215
229 216 // build data
230 217 for (asmComponent = 0; asmComponent < NB_VALUES_PER_SM; asmComponent++)
231 218 {
232 219 for( frequencyBin = 0; frequencyBin < nbBinsCompressedMatrix; frequencyBin++ )
233 220 {
234 221 offsetCompressed = // NO TIME OFFSET
235 222 frequencyBin * NB_VALUES_PER_SM
236 223 + asmComponent;
237 224 offsetASM = // NO TIME OFFSET
238 225 asmComponent * NB_BINS_PER_SM
239 226 + ASMIndexStart
240 227 + frequencyBin * nbBinsToAverage;
241 228 compressed_spec_mat[ offsetCompressed ] = 0;
242 229 for ( k = 0; k < nbBinsToAverage; k++ )
243 230 {
244 231 compressed_spec_mat[offsetCompressed ] =
245 232 ( compressed_spec_mat[ offsetCompressed ]
246 233 + averaged_spec_mat[ offsetASM + k ] ) / (divider * nbBinsToAverage);
247 234 }
248 235 }
249 236 }
250 237 }
251 238
252 239 void ASM_convert( volatile float *input_matrix, char *output_matrix)
253 240 {
254 241 unsigned int frequencyBin;
255 242 unsigned int asmComponent;
256 243 char * pt_char_input;
257 244 char * pt_char_output;
258 245 unsigned int offsetInput;
259 246 unsigned int offsetOutput;
260 247
261 248 pt_char_input = (char*) &input_matrix;
262 249 pt_char_output = (char*) &output_matrix;
263 250
264 251 // convert all other data
265 252 for( frequencyBin=0; frequencyBin<NB_BINS_PER_SM; frequencyBin++)
266 253 {
267 254 for ( asmComponent=0; asmComponent<NB_VALUES_PER_SM; asmComponent++)
268 255 {
269 256 offsetInput = (frequencyBin*NB_VALUES_PER_SM) + asmComponent ;
270 257 offsetOutput = 2 * ( (frequencyBin*NB_VALUES_PER_SM) + asmComponent ) ;
271 258 pt_char_input = (char*) &input_matrix [ offsetInput ];
272 259 pt_char_output = (char*) &output_matrix[ offsetOutput ];
273 260 pt_char_output[0] = pt_char_input[0]; // bits 31 downto 24 of the float
274 261 pt_char_output[1] = pt_char_input[1]; // bits 23 downto 16 of the float
275 262 }
276 263 }
277 264 }
278 265
279 266 #endif // FSW_PROCESSING_H_INCLUDED
@@ -1,401 +1,387
1 1 /** Functions related to data processing.
2 2 *
3 3 * @file
4 4 * @author P. LEROY
5 5 *
6 6 * These function are related to data processing, i.e. spectral matrices averaging and basic parameters computation.
7 7 *
8 8 */
9 9
10 10 #include "avf0_prc0.h"
11 11 #include "fsw_processing.h"
12 12
13 13 nb_sm_before_bp_asm_f0 nb_sm_before_f0;
14 14
15 15 //***
16 16 // F0
17 17 ring_node_asm asm_ring_norm_f0 [ NB_RING_NODES_ASM_NORM_F0 ];
18 18 ring_node_asm asm_ring_burst_sbm_f0 [ NB_RING_NODES_ASM_BURST_SBM_F0 ];
19 19
20 20 ring_node ring_to_send_asm_f0 [ NB_RING_NODES_ASM_F0 ];
21 char buffer_asm_f0 [ NB_RING_NODES_ASM_F0 * TOTAL_SIZE_SM ];
21 int buffer_asm_f0 [ NB_RING_NODES_ASM_F0 * TOTAL_SIZE_SM ];
22 22
23 23 float asm_f0_reorganized [ TOTAL_SIZE_SM ];
24 24 char asm_f0_char [ TIME_OFFSET_IN_BYTES + (TOTAL_SIZE_SM * 2) ];
25 25 float compressed_sm_norm_f0[ TOTAL_SIZE_COMPRESSED_ASM_NORM_F0];
26 26 float compressed_sm_sbm_f0 [ TOTAL_SIZE_COMPRESSED_ASM_SBM_F0 ];
27 27 //unsigned char bp1_norm_f0 [ TOTAL_SIZE_BP1_NORM_F0 ];
28 28 //unsigned char bp1_sbm_f0 [ TOTAL_SIZE_BP1_SBM_F0 ];
29 29
30 30 //************
31 31 // RTEMS TASKS
32 32
33 33 rtems_task avf0_task( rtems_task_argument lfrRequestedMode )
34 34 {
35 35 int i;
36 36
37 37 rtems_event_set event_out;
38 38 rtems_status_code status;
39 39 rtems_id queue_id_prc0;
40 40 asm_msg msgForMATR;
41 ring_node_sm *ring_node_tab[8];
41 ring_node *ring_node_tab[8];
42 42 ring_node_asm *current_ring_node_asm_burst_sbm_f0;
43 43 ring_node_asm *current_ring_node_asm_norm_f0;
44 44
45 45 unsigned int nb_norm_bp1;
46 46 unsigned int nb_norm_bp2;
47 47 unsigned int nb_norm_asm;
48 48 unsigned int nb_sbm_bp1;
49 49 unsigned int nb_sbm_bp2;
50 50
51 51 nb_norm_bp1 = 0;
52 52 nb_norm_bp2 = 0;
53 53 nb_norm_asm = 0;
54 54 nb_sbm_bp1 = 0;
55 55 nb_sbm_bp2 = 0;
56 56
57 57 reset_nb_sm_f0( lfrRequestedMode ); // reset the sm counters that drive the BP and ASM computations / transmissions
58 58 ASM_generic_init_ring( asm_ring_norm_f0, NB_RING_NODES_ASM_NORM_F0 );
59 59 ASM_generic_init_ring( asm_ring_burst_sbm_f0, NB_RING_NODES_ASM_BURST_SBM_F0 );
60 60 current_ring_node_asm_norm_f0 = asm_ring_norm_f0;
61 61 current_ring_node_asm_burst_sbm_f0 = asm_ring_burst_sbm_f0;
62 62
63 63 BOOT_PRINTF1("in AVFO *** lfrRequestedMode = %d\n", (int) lfrRequestedMode)
64 64
65 65 status = get_message_queue_id_prc0( &queue_id_prc0 );
66 66 if (status != RTEMS_SUCCESSFUL)
67 67 {
68 68 PRINTF1("in MATR *** ERR get_message_queue_id_prc0 %d\n", status)
69 69 }
70 70
71 71 while(1){
72 72 rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0
73 73
74 74 //****************************************
75 75 // initialize the mesage for the MATR task
76 76 msgForMATR.norm = current_ring_node_asm_norm_f0;
77 77 msgForMATR.burst_sbm = current_ring_node_asm_burst_sbm_f0;
78 msgForMATR.event = 0x00; // this composite event will be sent to the MATR task
78 msgForMATR.event = 0x00; // this composite event will be sent to the PRC0 task
79 79 msgForMATR.coarseTime = ring_node_for_averaging_sm_f0->coarseTime;
80 80 msgForMATR.fineTime = ring_node_for_averaging_sm_f0->fineTime;
81 81 //
82 82 //****************************************
83 83
84 84 ring_node_tab[NB_SM_BEFORE_AVF0-1] = ring_node_for_averaging_sm_f0;
85 85 for ( i = 2; i < (NB_SM_BEFORE_AVF0+1); i++ )
86 86 {
87 87 ring_node_for_averaging_sm_f0 = ring_node_for_averaging_sm_f0->previous;
88 88 ring_node_tab[NB_SM_BEFORE_AVF0-i] = ring_node_for_averaging_sm_f0;
89 89 }
90 90
91 91 // compute the average and store it in the averaged_sm_f1 buffer
92 92 SM_average( current_ring_node_asm_norm_f0->matrix,
93 93 current_ring_node_asm_burst_sbm_f0->matrix,
94 94 ring_node_tab,
95 95 nb_norm_bp1, nb_sbm_bp1 );
96 96
97 97 // update nb_average
98 98 nb_norm_bp1 = nb_norm_bp1 + NB_SM_BEFORE_AVF0;
99 99 nb_norm_bp2 = nb_norm_bp2 + NB_SM_BEFORE_AVF0;
100 100 nb_norm_asm = nb_norm_asm + NB_SM_BEFORE_AVF0;
101 101 nb_sbm_bp1 = nb_sbm_bp1 + NB_SM_BEFORE_AVF0;
102 102 nb_sbm_bp2 = nb_sbm_bp2 + NB_SM_BEFORE_AVF0;
103 103
104 104 if (nb_sbm_bp1 == nb_sm_before_f0.burst_sbm_bp1)
105 105 {
106 106 nb_sbm_bp1 = 0;
107 107 // set another ring for the ASM storage
108 108 current_ring_node_asm_burst_sbm_f0 = current_ring_node_asm_burst_sbm_f0->next;
109 109 if ( lfrCurrentMode == LFR_MODE_BURST )
110 110 {
111 111 msgForMATR.event = msgForMATR.event | RTEMS_EVENT_BURST_BP1_F0;
112 112 }
113 113 else if ( (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) )
114 114 {
115 115 msgForMATR.event = msgForMATR.event | RTEMS_EVENT_SBM_BP1_F0;
116 116 }
117 117 }
118 118
119 119 if (nb_sbm_bp2 == nb_sm_before_f0.burst_sbm_bp2)
120 120 {
121 121 nb_sbm_bp2 = 0;
122 122 if ( lfrCurrentMode == LFR_MODE_BURST )
123 123 {
124 124 msgForMATR.event = msgForMATR.event | RTEMS_EVENT_BURST_BP2_F0;
125 125 }
126 126 else if ( (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) )
127 127 {
128 128 msgForMATR.event = msgForMATR.event | RTEMS_EVENT_SBM_BP2_F0;
129 129 }
130 130 }
131 131
132 132 if (nb_norm_bp1 == nb_sm_before_f0.norm_bp1)
133 133 {
134 134 nb_norm_bp1 = 0;
135 135 // set another ring for the ASM storage
136 136 current_ring_node_asm_norm_f0 = current_ring_node_asm_norm_f0->next;
137 137 if ( (lfrCurrentMode == LFR_MODE_NORMAL)
138 138 || (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) )
139 139 {
140 140 msgForMATR.event = msgForMATR.event | RTEMS_EVENT_NORM_BP1_F0;
141 141 }
142 142 }
143 143
144 144 if (nb_norm_bp2 == nb_sm_before_f0.norm_bp2)
145 145 {
146 146 nb_norm_bp2 = 0;
147 147 if ( (lfrCurrentMode == LFR_MODE_NORMAL)
148 148 || (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) )
149 149 {
150 150 msgForMATR.event = msgForMATR.event | RTEMS_EVENT_NORM_BP2_F0;
151 151 }
152 152 }
153 153
154 154 if (nb_norm_asm == nb_sm_before_f0.norm_asm)
155 155 {
156 156 nb_norm_asm = 0;
157 157 if ( (lfrCurrentMode == LFR_MODE_NORMAL)
158 158 || (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) )
159 159 {
160 160 // PRINTF1("%lld\n", localTime)
161 161 msgForMATR.event = msgForMATR.event | RTEMS_EVENT_NORM_ASM_F0;
162 162 }
163 163 }
164 164
165 165 //*************************
166 166 // send the message to MATR
167 167 if (msgForMATR.event != 0x00)
168 168 {
169 169 status = rtems_message_queue_send( queue_id_prc0, (char *) &msgForMATR, MSG_QUEUE_SIZE_PRC0);
170 170 }
171 171
172 172 if (status != RTEMS_SUCCESSFUL) {
173 173 printf("in AVF0 *** Error sending message to MATR, code %d\n", status);
174 174 }
175 175 }
176 176 }
177 177
178 178 rtems_task prc0_task( rtems_task_argument lfrRequestedMode )
179 179 {
180 180 char incomingData[MSG_QUEUE_SIZE_SEND]; // incoming data buffer
181 181 size_t size; // size of the incoming TC packet
182 182 asm_msg *incomingMsg;
183 183 //
184 184 unsigned char sid;
185 spw_ioctl_pkt_send spw_ioctl_send_ASM;
186 185 rtems_status_code status;
187 186 rtems_id queue_id;
188 187 rtems_id queue_id_q_p0;
189 Header_TM_LFR_SCIENCE_ASM_t headerASM;
190 bp_packet_with_spare packet_norm_bp1_f0;
191 bp_packet packet_norm_bp2_f0;
192 bp_packet packet_sbm_bp1_f0;
193 bp_packet packet_sbm_bp2_f0;
194 ring_node *current_ring_node_to_send_asm_f0;
188 bp_packet_with_spare packet_norm_bp1_f0;
189 bp_packet packet_norm_bp2_f0;
190 bp_packet packet_sbm_bp1_f0;
191 bp_packet packet_sbm_bp2_f0;
192 ring_node *current_ring_node_to_send_asm_f0;
195 193
196 194 unsigned long long int localTime;
197 195
198 ASM_init_header( &headerASM );
199
200 196 // init the ring of the averaged spectral matrices which will be transmitted to the DPU
201 197 init_ring( ring_to_send_asm_f0, NB_RING_NODES_ASM_F0, (volatile int*) buffer_asm_f0, TOTAL_SIZE_SM );
202 198 current_ring_node_to_send_asm_f0 = ring_to_send_asm_f0;
203 199
204 200 //*************
205 201 // NORM headers
206 202 BP_init_header_with_spare( &packet_norm_bp1_f0.header,
207 203 APID_TM_SCIENCE_NORMAL_BURST, SID_NORM_BP1_F0,
208 204 PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP1_F0, NB_BINS_COMPRESSED_SM_F0 );
209 205 BP_init_header( &packet_norm_bp2_f0.header,
210 206 APID_TM_SCIENCE_NORMAL_BURST, SID_NORM_BP2_F0,
211 207 PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP2_F0, NB_BINS_COMPRESSED_SM_F0);
212 208
213 209 //****************************
214 210 // BURST SBM1 and SBM2 headers
215 211 if ( lfrRequestedMode == LFR_MODE_BURST )
216 212 {
217 213 BP_init_header( &packet_sbm_bp1_f0.header,
218 214 APID_TM_SCIENCE_NORMAL_BURST, SID_BURST_BP1_F0,
219 215 PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP1_F0, NB_BINS_COMPRESSED_SM_SBM_F0);
220 216 BP_init_header( &packet_sbm_bp2_f0.header,
221 217 APID_TM_SCIENCE_NORMAL_BURST, SID_BURST_BP2_F0,
222 218 PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP2_F0, NB_BINS_COMPRESSED_SM_SBM_F0);
223 219 }
224 220 else if ( lfrRequestedMode == LFR_MODE_SBM1 )
225 221 {
226 222 BP_init_header( &packet_sbm_bp1_f0.header,
227 223 APID_TM_SCIENCE_SBM1_SBM2, SID_SBM1_BP1_F0,
228 224 PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP1_F0, NB_BINS_COMPRESSED_SM_SBM_F0);
229 225 BP_init_header( &packet_sbm_bp2_f0.header,
230 226 APID_TM_SCIENCE_SBM1_SBM2, SID_SBM1_BP2_F0,
231 227 PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP2_F0, NB_BINS_COMPRESSED_SM_SBM_F0);
232 228 }
233 229 else if ( lfrRequestedMode == LFR_MODE_SBM2 )
234 230 {
235 231 BP_init_header( &packet_sbm_bp1_f0.header,
236 232 APID_TM_SCIENCE_SBM1_SBM2, SID_SBM2_BP1_F0,
237 233 PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP1_F0, NB_BINS_COMPRESSED_SM_SBM_F0);
238 234 BP_init_header( &packet_sbm_bp2_f0.header,
239 235 APID_TM_SCIENCE_SBM1_SBM2, SID_SBM2_BP2_F0,
240 236 PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP2_F0, NB_BINS_COMPRESSED_SM_SBM_F0);
241 237 }
242 238 else
243 239 {
244 240 PRINTF1("in PRC0 *** lfrRequestedMode is %d, several headers not initialized\n", (unsigned int) lfrRequestedMode)
245 241 }
246 242
247 243 status = get_message_queue_id_send( &queue_id );
248 244 if (status != RTEMS_SUCCESSFUL)
249 245 {
250 246 PRINTF1("in PRC0 *** ERR get_message_queue_id_send %d\n", status)
251 247 }
252 248 status = get_message_queue_id_prc0( &queue_id_q_p0);
253 249 if (status != RTEMS_SUCCESSFUL)
254 250 {
255 251 PRINTF1("in PRC0 *** ERR get_message_queue_id_prc0 %d\n", status)
256 252 }
257 253
258 254 BOOT_PRINTF1("in PRC0 *** lfrRequestedMode = %d\n", (int) lfrRequestedMode)
259 255
260 256 while(1){
261 257 status = rtems_message_queue_receive( queue_id_q_p0, incomingData, &size, //************************************
262 258 RTEMS_WAIT, RTEMS_NO_TIMEOUT ); // wait for a message coming from AVF0
263 259
264 260 incomingMsg = (asm_msg*) incomingData;
265 261
266 262 localTime = getTimeAsUnsignedLongLongInt( );
267 263
268 264 //****************
269 265 //****************
270 266 // BURST SBM1 SBM2
271 267 //****************
272 268 //****************
273 269 if ( (incomingMsg->event & RTEMS_EVENT_BURST_BP1_F0 ) || (incomingMsg->event & RTEMS_EVENT_SBM_BP1_F0 ) )
274 270 {
275 271 sid = getSID( incomingMsg->event );
276 272 // 1) compress the matrix for Basic Parameters calculation
277 273 ASM_compress_reorganize_and_divide( incomingMsg->burst_sbm->matrix, compressed_sm_sbm_f0,
278 274 nb_sm_before_f0.burst_sbm_bp1,
279 275 NB_BINS_COMPRESSED_SM_SBM_F0, NB_BINS_TO_AVERAGE_ASM_SBM_F0,
280 276 ASM_F0_INDICE_START);
281 277 // 2) compute the BP1 set
282 278 // BP1_set( compressed_sm_norm_f0, NB_BINS_COMPRESSED_SM_SBM_F0, bp1_sbm_f0 );
283 279 // 3) send the BP1 set
284 280 set_time( packet_sbm_bp1_f0.header.time, (unsigned char *) &incomingMsg->coarseTime );
285 281 set_time( packet_sbm_bp1_f0.header.acquisitionTime, (unsigned char *) &incomingMsg->coarseTime );
286 282 BP_send( (char *) &packet_sbm_bp1_f0, queue_id,
287 283 PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP1_F0 + PACKET_LENGTH_DELTA,
288 284 sid);
289 285 // 4) compute the BP2 set if needed
290 286 if ( (incomingMsg->event & RTEMS_EVENT_BURST_BP2_F0) || (incomingMsg->event & RTEMS_EVENT_SBM_BP2_F0) )
291 287 {
292 288 // 1) compute the BP2 set
293 289
294 290 // 2) send the BP2 set
295 291 set_time( packet_sbm_bp2_f0.header.time, (unsigned char *) &incomingMsg->coarseTime );
296 292 set_time( packet_sbm_bp2_f0.header.acquisitionTime, (unsigned char *) &incomingMsg->coarseTime );
297 293 BP_send( (char *) &packet_sbm_bp2_f0, queue_id,
298 294 PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP2_F0 + PACKET_LENGTH_DELTA,
299 295 sid);
300 296 }
301 297 }
302 298
303 299 //*****
304 300 //*****
305 301 // NORM
306 302 //*****
307 303 //*****
308 304 if (incomingMsg->event & RTEMS_EVENT_NORM_BP1_F0)
309 305 {
310 306 // 1) compress the matrix for Basic Parameters calculation
311 307 ASM_compress_reorganize_and_divide( incomingMsg->norm->matrix, compressed_sm_norm_f0,
312 308 nb_sm_before_f0.norm_bp1,
313 309 NB_BINS_COMPRESSED_SM_F0, NB_BINS_TO_AVERAGE_ASM_F0,
314 310 ASM_F0_INDICE_START );
315 311 // 2) compute the BP1 set
316 312 // BP1_set( compressed_sm_norm_f0, NB_BINS_COMPRESSED_SM_F0, bp1_norm_f0 );
317 313 // 3) send the BP1 set
318 314 set_time( packet_norm_bp1_f0.header.time, (unsigned char *) &incomingMsg->coarseTime );
319 315 set_time( packet_norm_bp1_f0.header.acquisitionTime, (unsigned char *) &incomingMsg->coarseTime );
320 316 BP_send( (char *) &packet_norm_bp1_f0, queue_id,
321 317 PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP1_F0 + PACKET_LENGTH_DELTA,
322 318 SID_NORM_BP1_F0 );
323 319 if (incomingMsg->event & RTEMS_EVENT_NORM_BP2_F0)
324 320 {
325 321 // 1) compute the BP2 set using the same ASM as the one used for BP1
326 322
327 323 // 2) send the BP2 set
328 324 set_time( packet_norm_bp2_f0.header.time, (unsigned char *) &incomingMsg->coarseTime );
329 325 set_time( packet_norm_bp2_f0.header.acquisitionTime, (unsigned char *) &incomingMsg->coarseTime );
330 326 BP_send( (char *) &packet_norm_bp2_f0, queue_id,
331 327 PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP2_F0 + PACKET_LENGTH_DELTA,
332 328 SID_NORM_BP2_F0);
333 329 }
334 330 }
335 331
336 332 if (incomingMsg->event & RTEMS_EVENT_NORM_ASM_F0)
337 333 {
338 // // 1) reorganize the ASM and divide
339 // ASM_reorganize_and_divide( incomingMsg->norm->matrix,
340 // asm_f0_reorganized,
341 // nb_sm_before_f0.norm_bp1 );
342 // // 2) convert the float array in a char array
343 // ASM_convert( asm_f0_reorganized, (char*) current_ring_node_to_send_asm_f0->buffer_address );
344 // current_ring_node_to_send_asm_f0->coarseTime = incomingMsg->coarseTime;
345 // current_ring_node_to_send_asm_f0->fineTime = incomingMsg->fineTime;
346 // current_ring_node_to_send_asm_f0->sid = SID_NORM_ASM_F0;
347 // // 3) send the spectral matrix packets
348 // status = rtems_message_queue_send( queue_id, &current_ring_node_to_send_asm_f0, sizeof( ring_node* ) );
349 // // change asm ring node
350 // current_ring_node_to_send_asm_f0 = current_ring_node_to_send_asm_f0->next;
351 334 // 1) reorganize the ASM and divide
352 335 ASM_reorganize_and_divide( incomingMsg->norm->matrix,
353 asm_f0_reorganized,
354 nb_sm_before_f0.norm_bp1 );
336 asm_f0_reorganized,
337 nb_sm_before_f0.norm_bp1 );
355 338 // 2) convert the float array in a char array
356 ASM_convert( asm_f0_reorganized, asm_f0_char);
339 ASM_convert( asm_f0_reorganized, (char*) current_ring_node_to_send_asm_f0->buffer_address );
340 current_ring_node_to_send_asm_f0->coarseTime = incomingMsg->coarseTime;
341 current_ring_node_to_send_asm_f0->fineTime = incomingMsg->fineTime;
342 current_ring_node_to_send_asm_f0->sid = SID_NORM_ASM_F0;
357 343 // 3) send the spectral matrix packets
358 set_time( headerASM.time , (unsigned char *) &incomingMsg->coarseTime );
359 set_time( headerASM.acquisitionTime, (unsigned char *) &incomingMsg->coarseTime );
360 ASM_send( &headerASM, asm_f0_char, SID_NORM_ASM_F0, &spw_ioctl_send_ASM, queue_id);
344 status = rtems_message_queue_send( queue_id, &current_ring_node_to_send_asm_f0, sizeof( ring_node* ) );
345 // change asm ring node
346 current_ring_node_to_send_asm_f0 = current_ring_node_to_send_asm_f0->next;
361 347 }
362 348
363 349 }
364 350 }
365 351
366 352 //**********
367 353 // FUNCTIONS
368 354
369 355 void reset_nb_sm_f0( unsigned char lfrMode )
370 356 {
371 357 nb_sm_before_f0.norm_bp1 = parameter_dump_packet.sy_lfr_n_bp_p0 * 96;
372 358 nb_sm_before_f0.norm_bp2 = parameter_dump_packet.sy_lfr_n_bp_p1 * 96;
373 359 nb_sm_before_f0.norm_asm = (parameter_dump_packet.sy_lfr_n_asm_p[0] * 256 + parameter_dump_packet.sy_lfr_n_asm_p[1]) * 96;
374 360 nb_sm_before_f0.sbm1_bp1 = parameter_dump_packet.sy_lfr_s1_bp_p0 * 24; // 0.25 s per digit
375 361 nb_sm_before_f0.sbm1_bp2 = parameter_dump_packet.sy_lfr_s1_bp_p1 * 96;
376 362 nb_sm_before_f0.sbm2_bp1 = parameter_dump_packet.sy_lfr_s2_bp_p0 * 96;
377 363 nb_sm_before_f0.sbm2_bp2 = parameter_dump_packet.sy_lfr_s2_bp_p1 * 96;
378 364 nb_sm_before_f0.burst_bp1 = parameter_dump_packet.sy_lfr_b_bp_p0 * 96;
379 365 nb_sm_before_f0.burst_bp2 = parameter_dump_packet.sy_lfr_b_bp_p1 * 96;
380 366
381 367 if (lfrMode == LFR_MODE_SBM1)
382 368 {
383 369 nb_sm_before_f0.burst_sbm_bp1 = nb_sm_before_f0.sbm1_bp1;
384 370 nb_sm_before_f0.burst_sbm_bp2 = nb_sm_before_f0.sbm1_bp2;
385 371 }
386 372 else if (lfrMode == LFR_MODE_SBM2)
387 373 {
388 374 nb_sm_before_f0.burst_sbm_bp1 = nb_sm_before_f0.sbm2_bp1;
389 375 nb_sm_before_f0.burst_sbm_bp2 = nb_sm_before_f0.sbm2_bp2;
390 376 }
391 377 else if (lfrMode == LFR_MODE_BURST)
392 378 {
393 379 nb_sm_before_f0.burst_sbm_bp1 = nb_sm_before_f0.burst_bp1;
394 380 nb_sm_before_f0.burst_sbm_bp2 = nb_sm_before_f0.burst_bp2;
395 381 }
396 382 else
397 383 {
398 384 nb_sm_before_f0.burst_sbm_bp1 = nb_sm_before_f0.burst_bp1;
399 385 nb_sm_before_f0.burst_sbm_bp2 = nb_sm_before_f0.burst_bp2;
400 386 }
401 387 }
@@ -1,360 +1,367
1 1 /** Functions related to data processing.
2 2 *
3 3 * @file
4 4 * @author P. LEROY
5 5 *
6 6 * These function are related to data processing, i.e. spectral matrices averaging and basic parameters computation.
7 7 *
8 8 */
9 9
10 10 #include "avf1_prc1.h"
11 11
12 12 nb_sm_before_bp_asm_f1 nb_sm_before_f1;
13 13
14 14 //***
15 15 // F1
16 ring_node_asm asm_ring_norm_f1 [ NB_RING_NODES_ASM_NORM_F1 ];
17 ring_node_asm asm_ring_burst_sbm_f1[ NB_RING_NODES_ASM_BURST_SBM_F1 ];
16 ring_node_asm asm_ring_norm_f1 [ NB_RING_NODES_ASM_NORM_F1 ];
17 ring_node_asm asm_ring_burst_sbm_f1 [ NB_RING_NODES_ASM_BURST_SBM_F1 ];
18
19 ring_node ring_to_send_asm_f1 [ NB_RING_NODES_ASM_F1 ];
20 int buffer_asm_f1 [ NB_RING_NODES_ASM_F1 * TOTAL_SIZE_SM ];
18 21
19 22 float asm_f1_reorganized [ TOTAL_SIZE_SM ];
20 23 char asm_f1_char [ TIME_OFFSET_IN_BYTES + (TOTAL_SIZE_SM * 2) ];
21 24 float compressed_sm_norm_f1[ TOTAL_SIZE_COMPRESSED_ASM_NORM_F1];
22 25 float compressed_sm_sbm_f1 [ TOTAL_SIZE_COMPRESSED_ASM_SBM_F1 ];
23 26
24 27 //************
25 28 // RTEMS TASKS
26 29
27 30 rtems_task avf1_task( rtems_task_argument lfrRequestedMode )
28 31 {
29 32 int i;
30 33
31 34 rtems_event_set event_out;
32 35 rtems_status_code status;
33 36 rtems_id queue_id_prc1;
34 37 asm_msg msgForMATR;
35 ring_node_sm *ring_node_tab[8];
38 ring_node *ring_node_tab[8];
36 39 ring_node_asm *current_ring_node_asm_burst_sbm_f1;
37 40 ring_node_asm *current_ring_node_asm_norm_f1;
38 41
39 42 unsigned int nb_norm_bp1;
40 43 unsigned int nb_norm_bp2;
41 44 unsigned int nb_norm_asm;
42 45 unsigned int nb_sbm_bp1;
43 46 unsigned int nb_sbm_bp2;
44 47
45 48 nb_norm_bp1 = 0;
46 49 nb_norm_bp2 = 0;
47 50 nb_norm_asm = 0;
48 51 nb_sbm_bp1 = 0;
49 52 nb_sbm_bp2 = 0;
50 53
51 54 reset_nb_sm_f1( lfrRequestedMode ); // reset the sm counters that drive the BP and ASM computations / transmissions
52 55 ASM_generic_init_ring( asm_ring_norm_f1, NB_RING_NODES_ASM_NORM_F1 );
53 56 ASM_generic_init_ring( asm_ring_burst_sbm_f1, NB_RING_NODES_ASM_BURST_SBM_F1 );
54 57 current_ring_node_asm_norm_f1 = asm_ring_norm_f1;
55 58 current_ring_node_asm_burst_sbm_f1 = asm_ring_burst_sbm_f1;
56 59
57 60 BOOT_PRINTF1("in AVF1 *** lfrRequestedMode = %d\n", (int) lfrRequestedMode)
58 61
59 62 status = get_message_queue_id_prc1( &queue_id_prc1 );
60 63 if (status != RTEMS_SUCCESSFUL)
61 64 {
62 65 PRINTF1("in AVF1 *** ERR get_message_queue_id_prc1 %d\n", status)
63 66 }
64 67
65 68 while(1){
66 69 rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0
67 70
68 71 //****************************************
69 72 // initialize the mesage for the MATR task
70 msgForMATR.event = 0x00; // this composite event will be sent to the PRC1 task
73 msgForMATR.norm = current_ring_node_asm_norm_f1;
71 74 msgForMATR.burst_sbm = current_ring_node_asm_burst_sbm_f1;
72 msgForMATR.norm = current_ring_node_asm_norm_f1;
75 msgForMATR.event = 0x00; // this composite event will be sent to the PRC1 task
73 76 msgForMATR.coarseTime = ring_node_for_averaging_sm_f1->coarseTime;
74 77 msgForMATR.fineTime = ring_node_for_averaging_sm_f1->fineTime;
75 78 //
76 79 //****************************************
77 80
78 81 ring_node_tab[NB_SM_BEFORE_AVF1-1] = ring_node_for_averaging_sm_f1;
79 82 for ( i = 2; i < (NB_SM_BEFORE_AVF1+1); i++ )
80 83 {
81 84 ring_node_for_averaging_sm_f1 = ring_node_for_averaging_sm_f1->previous;
82 85 ring_node_tab[NB_SM_BEFORE_AVF1-i] = ring_node_for_averaging_sm_f1;
83 86 }
84 87
85 88 // compute the average and store it in the averaged_sm_f1 buffer
86 89 SM_average( current_ring_node_asm_norm_f1->matrix,
87 90 current_ring_node_asm_burst_sbm_f1->matrix,
88 91 ring_node_tab,
89 92 nb_norm_bp1, nb_sbm_bp1 );
90 93
91 94 // update nb_average
92 95 nb_norm_bp1 = nb_norm_bp1 + NB_SM_BEFORE_AVF1;
93 96 nb_norm_bp2 = nb_norm_bp2 + NB_SM_BEFORE_AVF1;
94 97 nb_norm_asm = nb_norm_asm + NB_SM_BEFORE_AVF1;
95 98 nb_sbm_bp1 = nb_sbm_bp1 + NB_SM_BEFORE_AVF1;
96 99 nb_sbm_bp2 = nb_sbm_bp2 + NB_SM_BEFORE_AVF1;
97 100
98 101 if (nb_sbm_bp1 == nb_sm_before_f1.burst_sbm_bp1)
99 102 {
100 103 nb_sbm_bp1 = 0;
101 104 // set another ring for the ASM storage
102 105 current_ring_node_asm_burst_sbm_f1 = current_ring_node_asm_burst_sbm_f1->next;
103 106 if ( lfrCurrentMode == LFR_MODE_BURST )
104 107 {
105 108 msgForMATR.event = msgForMATR.event | RTEMS_EVENT_BURST_BP1_F1;
106 109 }
107 110 else if ( lfrCurrentMode == LFR_MODE_SBM2 )
108 111 {
109 112 msgForMATR.event = msgForMATR.event | RTEMS_EVENT_SBM_BP1_F1;
110 113 }
111 114 }
112 115
113 116 if (nb_sbm_bp2 == nb_sm_before_f1.burst_sbm_bp2)
114 117 {
115 118 nb_sbm_bp2 = 0;
116 119 if ( lfrCurrentMode == LFR_MODE_BURST )
117 120 {
118 121 msgForMATR.event = msgForMATR.event | RTEMS_EVENT_BURST_BP2_F1;
119 122 }
120 123 else if ( lfrCurrentMode == LFR_MODE_SBM2 )
121 124 {
122 125 msgForMATR.event = msgForMATR.event | RTEMS_EVENT_SBM_BP2_F1;
123 126 }
124 127 }
125 128
126 129 if (nb_norm_bp1 == nb_sm_before_f1.norm_bp1)
127 130 {
128 131 nb_norm_bp1 = 0;
129 132 // set another ring for the ASM storage
130 133 current_ring_node_asm_norm_f1 = current_ring_node_asm_norm_f1->next;
131 134 if ( (lfrCurrentMode == LFR_MODE_NORMAL)
132 135 || (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) )
133 136 {
134 137 msgForMATR.event = msgForMATR.event | RTEMS_EVENT_NORM_BP1_F1;
135 138 }
136 139 }
137 140
138 141 if (nb_norm_bp2 == nb_sm_before_f1.norm_bp2)
139 142 {
140 143 nb_norm_bp2 = 0;
141 144 if ( (lfrCurrentMode == LFR_MODE_NORMAL)
142 145 || (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) )
143 146 {
144 147 msgForMATR.event = msgForMATR.event | RTEMS_EVENT_NORM_BP2_F1;
145 148 }
146 149 }
147 150
148 151 if (nb_norm_asm == nb_sm_before_f1.norm_asm)
149 152 {
150 153 nb_norm_asm = 0;
151 154 if ( (lfrCurrentMode == LFR_MODE_NORMAL)
152 155 || (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) )
153 156 {
154 157 msgForMATR.event = msgForMATR.event | RTEMS_EVENT_NORM_ASM_F1;
155 158 }
156 159 }
157 160
158 161 //*************************
159 162 // send the message to MATR
160 163 if (msgForMATR.event != 0x00)
161 164 {
162 165 status = rtems_message_queue_send( queue_id_prc1, (char *) &msgForMATR, MSG_QUEUE_SIZE_PRC1);
163 166 }
164 167
165 168 if (status != RTEMS_SUCCESSFUL) {
166 169 printf("in AVF1 *** Error sending message to PRC1, code %d\n", status);
167 170 }
168 171 }
169 172 }
170 173
171 174 rtems_task prc1_task( rtems_task_argument lfrRequestedMode )
172 175 {
173 176 char incomingData[MSG_QUEUE_SIZE_SEND]; // incoming data buffer
174 177 size_t size; // size of the incoming TC packet
175 178 asm_msg *incomingMsg;
176 179 //
177 180 unsigned char sid;
178 spw_ioctl_pkt_send spw_ioctl_send_ASM;
179 181 rtems_status_code status;
180 182 rtems_id queue_id_send;
181 183 rtems_id queue_id_q_p1;
182 Header_TM_LFR_SCIENCE_ASM_t headerASM;
183 bp_packet_with_spare packet_norm_bp1;
184 bp_packet packet_norm_bp2;
185 bp_packet packet_sbm_bp1;
186 bp_packet packet_sbm_bp2;
184 bp_packet_with_spare packet_norm_bp1;
185 bp_packet packet_norm_bp2;
186 bp_packet packet_sbm_bp1;
187 bp_packet packet_sbm_bp2;
188 ring_node *current_ring_node_to_send_asm_f1;
187 189
188 190 unsigned long long int localTime;
189 191
190 ASM_init_header( &headerASM );
192 // init the ring of the averaged spectral matrices which will be transmitted to the DPU
193 init_ring( ring_to_send_asm_f1, NB_RING_NODES_ASM_F1, (volatile int*) buffer_asm_f1, TOTAL_SIZE_SM );
194 current_ring_node_to_send_asm_f1 = ring_to_send_asm_f1;
191 195
192 196 //*************
193 197 // NORM headers
194 198 BP_init_header_with_spare( &packet_norm_bp1.header,
195 199 APID_TM_SCIENCE_NORMAL_BURST, SID_NORM_BP1_F1,
196 200 PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP1_F1, NB_BINS_COMPRESSED_SM_F1 );
197 201 BP_init_header( &packet_norm_bp2.header,
198 202 APID_TM_SCIENCE_NORMAL_BURST, SID_NORM_BP2_F1,
199 203 PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP2_F1, NB_BINS_COMPRESSED_SM_F1);
200 204
201 205 //***********************
202 206 // BURST and SBM2 headers
203 207 if ( lfrRequestedMode == LFR_MODE_BURST )
204 208 {
205 209 BP_init_header( &packet_sbm_bp1.header,
206 210 APID_TM_SCIENCE_NORMAL_BURST, SID_BURST_BP1_F1,
207 211 PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP1_F1, NB_BINS_COMPRESSED_SM_SBM_F1);
208 212 BP_init_header( &packet_sbm_bp2.header,
209 213 APID_TM_SCIENCE_NORMAL_BURST, SID_BURST_BP2_F1,
210 214 PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP2_F1, NB_BINS_COMPRESSED_SM_SBM_F1);
211 215 }
212 216 else if ( lfrRequestedMode == LFR_MODE_SBM2 )
213 217 {
214 218 BP_init_header( &packet_sbm_bp1.header,
215 219 APID_TM_SCIENCE_SBM1_SBM2, SID_SBM2_BP1_F1,
216 220 PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP1_F1, NB_BINS_COMPRESSED_SM_SBM_F1);
217 221 BP_init_header( &packet_sbm_bp2.header,
218 222 APID_TM_SCIENCE_SBM1_SBM2, SID_SBM2_BP2_F1,
219 223 PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP2_F1, NB_BINS_COMPRESSED_SM_SBM_F1);
220 224 }
221 225 else
222 226 {
223 227 PRINTF1("in PRC1 *** lfrRequestedMode is %d, several headers not initialized\n", (unsigned int) lfrRequestedMode)
224 228 }
225 229
226 230 status = get_message_queue_id_send( &queue_id_send );
227 231 if (status != RTEMS_SUCCESSFUL)
228 232 {
229 233 PRINTF1("in PRC1 *** ERR get_message_queue_id_send %d\n", status)
230 234 }
231 235 status = get_message_queue_id_prc1( &queue_id_q_p1);
232 236 if (status != RTEMS_SUCCESSFUL)
233 237 {
234 238 PRINTF1("in PRC1 *** ERR get_message_queue_id_prc1 %d\n", status)
235 239 }
236 240
237 241 BOOT_PRINTF1("in PRC1 *** lfrRequestedMode = %d\n", (int) lfrRequestedMode)
238 242
239 243 while(1){
240 244 status = rtems_message_queue_receive( queue_id_q_p1, incomingData, &size, //************************************
241 245 RTEMS_WAIT, RTEMS_NO_TIMEOUT ); // wait for a message coming from AVF0
242 246
243 247 incomingMsg = (asm_msg*) incomingData;
244 248
245 249 localTime = getTimeAsUnsignedLongLongInt( );
246 250 //***********
247 251 //***********
248 252 // BURST SBM2
249 253 //***********
250 254 //***********
251 255 if ( (incomingMsg->event & RTEMS_EVENT_BURST_BP1_F1) || (incomingMsg->event & RTEMS_EVENT_SBM_BP1_F1) )
252 256 {
253 257 sid = getSID( incomingMsg->event );
254 258 // 1) compress the matrix for Basic Parameters calculation
255 259 ASM_compress_reorganize_and_divide( incomingMsg->burst_sbm->matrix, compressed_sm_sbm_f1,
256 260 nb_sm_before_f1.burst_sbm_bp1,
257 261 NB_BINS_COMPRESSED_SM_SBM_F1, NB_BINS_TO_AVERAGE_ASM_SBM_F1,
258 262 ASM_F1_INDICE_START);
259 263 // 2) compute the BP1 set
260 264
261 265 // 3) send the BP1 set
262 266 set_time( packet_sbm_bp1.header.time, (unsigned char *) &incomingMsg->coarseTime );
263 267 set_time( packet_sbm_bp1.header.acquisitionTime, (unsigned char *) &incomingMsg->coarseTime );
264 268 BP_send( (char *) &packet_sbm_bp1, queue_id_send,
265 269 PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP1_F1 + PACKET_LENGTH_DELTA,
266 270 sid );
267 271 // 4) compute the BP2 set if needed
268 272 if ( (incomingMsg->event & RTEMS_EVENT_BURST_BP2_F1) || (incomingMsg->event & RTEMS_EVENT_SBM_BP2_F1) )
269 273 {
270 274 // 1) compute the BP2 set
271 275
272 276 // 2) send the BP2 set
273 277 set_time( packet_sbm_bp2.header.time, (unsigned char *) &incomingMsg->coarseTime );
274 278 set_time( packet_sbm_bp2.header.acquisitionTime, (unsigned char *) &incomingMsg->coarseTime );
275 279 BP_send( (char *) &packet_sbm_bp2, queue_id_send,
276 280 PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP2_F1 + PACKET_LENGTH_DELTA,
277 281 sid );
278 282 }
279 283 }
280 284
281 285 //*****
282 286 //*****
283 287 // NORM
284 288 //*****
285 289 //*****
286 290 if (incomingMsg->event & RTEMS_EVENT_NORM_BP1_F1)
287 291 {
288 292 // 1) compress the matrix for Basic Parameters calculation
289 293 ASM_compress_reorganize_and_divide( incomingMsg->norm->matrix, compressed_sm_norm_f1,
290 294 nb_sm_before_f1.norm_bp1,
291 295 NB_BINS_COMPRESSED_SM_F0, NB_BINS_TO_AVERAGE_ASM_F0,
292 296 ASM_F0_INDICE_START );
293 297 // 2) compute the BP1 set
294 298
295 299 // 3) send the BP1 set
296 300 set_time( packet_norm_bp1.header.time, (unsigned char *) &incomingMsg->coarseTime );
297 301 set_time( packet_norm_bp1.header.acquisitionTime, (unsigned char *) &incomingMsg->coarseTime );
298 302 BP_send( (char *) &packet_norm_bp1, queue_id_send,
299 303 PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP1_F1 + PACKET_LENGTH_DELTA,
300 304 SID_NORM_BP1_F1 );
301 305 if (incomingMsg->event & RTEMS_EVENT_NORM_BP2_F1)
302 306 {
303 307 // 1) compute the BP2 set
304 308
305 309 // 2) send the BP2 set
306 310 set_time( packet_norm_bp2.header.time, (unsigned char *) &incomingMsg->coarseTime );
307 311 set_time( packet_norm_bp2.header.acquisitionTime, (unsigned char *) &incomingMsg->coarseTime );
308 312 BP_send( (char *) &packet_norm_bp2, queue_id_send,
309 313 PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP2_F1 + PACKET_LENGTH_DELTA,
310 314 SID_NORM_BP2_F1 );
311 315 }
312 316 }
313 317
314 318 if (incomingMsg->event & RTEMS_EVENT_NORM_ASM_F1)
315 319 {
316 320 // 1) reorganize the ASM and divide
317 321 ASM_reorganize_and_divide( incomingMsg->norm->matrix,
318 322 asm_f1_reorganized,
319 323 nb_sm_before_f1.norm_bp1 );
320 324 // 2) convert the float array in a char array
321 ASM_convert( asm_f1_reorganized, asm_f1_char);
325 ASM_convert( asm_f1_reorganized, (char*) current_ring_node_to_send_asm_f1->buffer_address );
326 current_ring_node_to_send_asm_f1->coarseTime = incomingMsg->coarseTime;
327 current_ring_node_to_send_asm_f1->fineTime = incomingMsg->fineTime;
328 current_ring_node_to_send_asm_f1->sid = SID_NORM_ASM_F1;
322 329 // 3) send the spectral matrix packets
323 set_time( headerASM.time , (unsigned char *) &incomingMsg->coarseTime );
324 set_time( headerASM.acquisitionTime, (unsigned char *) &incomingMsg->coarseTime );
325 ASM_send( &headerASM, asm_f1_char, SID_NORM_ASM_F1, &spw_ioctl_send_ASM, queue_id_send);
330 status = rtems_message_queue_send( queue_id_send, &current_ring_node_to_send_asm_f1, sizeof( ring_node* ) );
331 // change asm ring node
332 current_ring_node_to_send_asm_f1 = current_ring_node_to_send_asm_f1->next;
326 333 }
327 334
328 335 }
329 336 }
330 337
331 338 //**********
332 339 // FUNCTIONS
333 340
334 341 void reset_nb_sm_f1( unsigned char lfrMode )
335 342 {
336 343 nb_sm_before_f1.norm_bp1 = parameter_dump_packet.sy_lfr_n_bp_p0 * 16;
337 344 nb_sm_before_f1.norm_bp2 = parameter_dump_packet.sy_lfr_n_bp_p1 * 16;
338 345 nb_sm_before_f1.norm_asm = (parameter_dump_packet.sy_lfr_n_asm_p[0] * 256 + parameter_dump_packet.sy_lfr_n_asm_p[1]) * 16;
339 346 nb_sm_before_f1.sbm2_bp1 = parameter_dump_packet.sy_lfr_s2_bp_p0 * 16;
340 347 nb_sm_before_f1.sbm2_bp2 = parameter_dump_packet.sy_lfr_s2_bp_p1 * 16;
341 348 nb_sm_before_f1.burst_bp1 = parameter_dump_packet.sy_lfr_b_bp_p0 * 16;
342 349 nb_sm_before_f1.burst_bp2 = parameter_dump_packet.sy_lfr_b_bp_p1 * 16;
343 350
344 351 if (lfrMode == LFR_MODE_SBM2)
345 352 {
346 353 nb_sm_before_f1.burst_sbm_bp1 = nb_sm_before_f1.sbm2_bp1;
347 354 nb_sm_before_f1.burst_sbm_bp2 = nb_sm_before_f1.sbm2_bp2;
348 355 }
349 356 else if (lfrMode == LFR_MODE_BURST)
350 357 {
351 358 nb_sm_before_f1.burst_sbm_bp1 = nb_sm_before_f1.burst_bp1;
352 359 nb_sm_before_f1.burst_sbm_bp2 = nb_sm_before_f1.burst_bp2;
353 360 }
354 361 else
355 362 {
356 363 nb_sm_before_f1.burst_sbm_bp1 = nb_sm_before_f1.burst_bp1;
357 364 nb_sm_before_f1.burst_sbm_bp2 = nb_sm_before_f1.burst_bp2;
358 365 }
359 366 }
360 367
@@ -1,255 +1,262
1 1 /** Functions related to data processing.
2 2 *
3 3 * @file
4 4 * @author P. LEROY
5 5 *
6 6 * These function are related to data processing, i.e. spectral matrices averaging and basic parameters computation.
7 7 *
8 8 */
9 9
10 10 #include "avf2_prc2.h"
11 11
12 12 nb_sm_before_bp_asm_f2 nb_sm_before_f2;
13 13
14 14 //***
15 15 // F2
16 16 ring_node_asm asm_ring_norm_f2 [ NB_RING_NODES_ASM_NORM_F2 ];
17 17 ring_node_asm asm_ring_burst_sbm_f2[ NB_RING_NODES_ASM_BURST_SBM_F2 ];
18 18
19 ring_node ring_to_send_asm_f2 [ NB_RING_NODES_ASM_F2 ];
20 int buffer_asm_f2 [ NB_RING_NODES_ASM_F2 * TOTAL_SIZE_SM ];
21
19 22 float asm_f2_reorganized [ TOTAL_SIZE_SM ];
20 23 char asm_f2_char [ TIME_OFFSET_IN_BYTES + (TOTAL_SIZE_SM * 2) ];
21 24 float compressed_sm_norm_f2[ TOTAL_SIZE_COMPRESSED_ASM_NORM_F2];
22 25 float compressed_sm_sbm_f2 [ TOTAL_SIZE_COMPRESSED_ASM_SBM_F2 ];
23 26
24 27 //************
25 28 // RTEMS TASKS
26 29
27 30 //***
28 31 // F2
29 32 rtems_task avf2_task( rtems_task_argument argument )
30 33 {
31 34 rtems_event_set event_out;
32 35 rtems_status_code status;
33 36 rtems_id queue_id_prc2;
34 37 asm_msg msgForMATR;
35 38 ring_node_asm *current_ring_node_asm_norm_f2;
36 39
37 40 unsigned int nb_norm_bp1;
38 41 unsigned int nb_norm_bp2;
39 42 unsigned int nb_norm_asm;
40 43
41 44 nb_norm_bp1 = 0;
42 45 nb_norm_bp2 = 0;
43 46 nb_norm_asm = 0;
44 47
45 48 reset_nb_sm_f2( ); // reset the sm counters that drive the BP and ASM computations / transmissions
46 49 ASM_generic_init_ring( asm_ring_norm_f2, NB_RING_NODES_ASM_NORM_F2 );
47 50 current_ring_node_asm_norm_f2 = asm_ring_norm_f2;
48 51
49 52 BOOT_PRINTF("in AVF2 ***\n")
50 53
51 54 status = get_message_queue_id_prc2( &queue_id_prc2 );
52 55 if (status != RTEMS_SUCCESSFUL)
53 56 {
54 57 PRINTF1("in AVF2 *** ERR get_message_queue_id_prc2 %d\n", status)
55 58 }
56 59
57 60 while(1){
58 61 rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0
59 62
60 63 //****************************************
61 64 // initialize the mesage for the MATR task
62 msgForMATR.event = 0x00; // this composite event will be sent to the MATR task
65 msgForMATR.norm = current_ring_node_asm_norm_f2;
63 66 msgForMATR.burst_sbm = NULL;
64 msgForMATR.norm = current_ring_node_asm_norm_f2;
67 msgForMATR.event = 0x00; // this composite event will be sent to the PRC2 task
65 68 msgForMATR.coarseTime = ring_node_for_averaging_sm_f2->coarseTime;
66 69 msgForMATR.fineTime = ring_node_for_averaging_sm_f2->fineTime;
67 70 //
68 71 //****************************************
69 72
70 73 // compute the average and store it in the averaged_sm_f2 buffer
71 74 SM_average_f2( current_ring_node_asm_norm_f2->matrix,
72 75 ring_node_for_averaging_sm_f2,
73 76 nb_norm_bp1 );
74 77
75 78 // update nb_average
76 79 nb_norm_bp1 = nb_norm_bp1 + NB_SM_BEFORE_AVF2;
77 80 nb_norm_bp2 = nb_norm_bp2 + NB_SM_BEFORE_AVF2;
78 81 nb_norm_asm = nb_norm_asm + NB_SM_BEFORE_AVF2;
79 82
80 83 if (nb_norm_bp1 == nb_sm_before_f2.norm_bp1)
81 84 {
82 85 nb_norm_bp1 = 0;
83 86 // set another ring for the ASM storage
84 87 current_ring_node_asm_norm_f2 = current_ring_node_asm_norm_f2->next;
85 88 if ( (lfrCurrentMode == LFR_MODE_NORMAL) || (lfrCurrentMode == LFR_MODE_SBM1)
86 89 || (lfrCurrentMode == LFR_MODE_SBM2) )
87 90 {
88 91 msgForMATR.event = msgForMATR.event | RTEMS_EVENT_NORM_BP1_F2;
89 92 }
90 93 }
91 94
92 95 if (nb_norm_bp2 == nb_sm_before_f2.norm_bp2)
93 96 {
94 97 nb_norm_bp2 = 0;
95 98 if ( (lfrCurrentMode == LFR_MODE_NORMAL) || (lfrCurrentMode == LFR_MODE_SBM1)
96 99 || (lfrCurrentMode == LFR_MODE_SBM2) )
97 100 {
98 101 msgForMATR.event = msgForMATR.event | RTEMS_EVENT_NORM_BP2_F2;
99 102 }
100 103 }
101 104
102 105 if (nb_norm_asm == nb_sm_before_f2.norm_asm)
103 106 {
104 107 nb_norm_asm = 0;
105 108 if ( (lfrCurrentMode == LFR_MODE_NORMAL) || (lfrCurrentMode == LFR_MODE_SBM1)
106 109 || (lfrCurrentMode == LFR_MODE_SBM2) )
107 110 {
108 111 // PRINTF1("%lld\n", localTime)
109 112 msgForMATR.event = msgForMATR.event | RTEMS_EVENT_NORM_ASM_F2;
110 113 }
111 114 }
112 115
113 116 //*************************
114 117 // send the message to MATR
115 118 if (msgForMATR.event != 0x00)
116 119 {
117 120 status = rtems_message_queue_send( queue_id_prc2, (char *) &msgForMATR, MSG_QUEUE_SIZE_PRC0);
118 121 }
119 122
120 123 if (status != RTEMS_SUCCESSFUL) {
121 124 printf("in AVF2 *** Error sending message to MATR, code %d\n", status);
122 125 }
123 126 }
124 127 }
125 128
126 129 rtems_task prc2_task( rtems_task_argument argument )
127 130 {
128 131 char incomingData[MSG_QUEUE_SIZE_SEND]; // incoming data buffer
129 132 size_t size; // size of the incoming TC packet
130 133 asm_msg *incomingMsg;
131 134 //
132 spw_ioctl_pkt_send spw_ioctl_send_ASM;
133 135 rtems_status_code status;
134 136 rtems_id queue_id;
135 137 rtems_id queue_id_q_p2;
136 Header_TM_LFR_SCIENCE_ASM_t headerASM;
137 bp_packet packet_norm_bp1_f2;
138 bp_packet packet_norm_bp2_f2;
138 bp_packet packet_norm_bp1_f2;
139 bp_packet packet_norm_bp2_f2;
140 ring_node *current_ring_node_to_send_asm_f2;
139 141
140 142 unsigned long long int localTime;
141 143
142 incomingMsg = NULL;
144 // init the ring of the averaged spectral matrices which will be transmitted to the DPU
145 init_ring( ring_to_send_asm_f2, NB_RING_NODES_ASM_F2, (volatile int*) buffer_asm_f2, TOTAL_SIZE_SM );
146 current_ring_node_to_send_asm_f2 = ring_to_send_asm_f2;
143 147
144 ASM_init_header( &headerASM );
148 incomingMsg = NULL;
145 149
146 150 //*************
147 151 // NORM headers
148 152 BP_init_header( &packet_norm_bp1_f2.header,
149 153 APID_TM_SCIENCE_NORMAL_BURST, SID_NORM_BP1_F2,
150 154 PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP1_F2, NB_BINS_COMPRESSED_SM_F2 );
151 155 BP_init_header( &packet_norm_bp2_f2.header,
152 156 APID_TM_SCIENCE_NORMAL_BURST, SID_NORM_BP2_F2,
153 157 PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP2_F2, NB_BINS_COMPRESSED_SM_F2 );
154 158
155 159 status = get_message_queue_id_send( &queue_id );
156 160 if (status != RTEMS_SUCCESSFUL)
157 161 {
158 162 PRINTF1("in PRC2 *** ERR get_message_queue_id_send %d\n", status)
159 163 }
160 164 status = get_message_queue_id_prc2( &queue_id_q_p2);
161 165 if (status != RTEMS_SUCCESSFUL)
162 166 {
163 167 PRINTF1("in PRC2 *** ERR get_message_queue_id_prc2 %d\n", status)
164 168 }
165 169
166 170 BOOT_PRINTF("in PRC2 ***\n")
167 171
168 172 while(1){
169 173 status = rtems_message_queue_receive( queue_id_q_p2, incomingData, &size, //************************************
170 174 RTEMS_WAIT, RTEMS_NO_TIMEOUT ); // wait for a message coming from AVF0
171 175
172 176 incomingMsg = (asm_msg*) incomingData;
173 177
174 178 localTime = getTimeAsUnsignedLongLongInt( );
175 179
176 180 //*****
177 181 //*****
178 182 // NORM
179 183 //*****
180 184 //*****
181 185 if (incomingMsg->event & RTEMS_EVENT_NORM_BP1_F2)
182 186 {
183 187 // 1) compress the matrix for Basic Parameters calculation
184 188 ASM_compress_reorganize_and_divide( incomingMsg->norm->matrix, compressed_sm_norm_f2,
185 189 nb_sm_before_f2.norm_bp1,
186 190 NB_BINS_COMPRESSED_SM_F2, NB_BINS_TO_AVERAGE_ASM_F2,
187 191 ASM_F2_INDICE_START );
188 192 // 2) compute the BP1 set
189 193
190 194 // 3) send the BP1 set
191 195 set_time( packet_norm_bp1_f2.header.time, (unsigned char *) &incomingMsg->coarseTime );
192 196 set_time( packet_norm_bp1_f2.header.acquisitionTime, (unsigned char *) &incomingMsg->coarseTime );
193 197 BP_send( (char *) &packet_norm_bp1_f2, queue_id,
194 198 PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP1_F2 + PACKET_LENGTH_DELTA,
195 199 SID_NORM_BP1_F2 );
196 200 if (incomingMsg->event & RTEMS_EVENT_NORM_BP2_F2)
197 201 {
198 202 // 1) compute the BP2 set using the same ASM as the one used for BP1
199 203
200 204 // 2) send the BP2 set
201 205 set_time( packet_norm_bp2_f2.header.time, (unsigned char *) &incomingMsg->coarseTime );
202 206 set_time( packet_norm_bp2_f2.header.acquisitionTime, (unsigned char *) &incomingMsg->coarseTime );
203 207 BP_send( (char *) &packet_norm_bp2_f2, queue_id,
204 208 PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP2_F2 + PACKET_LENGTH_DELTA,
205 209 SID_NORM_BP2_F2 );
206 210 }
207 211 }
208 212
209 213 if (incomingMsg->event & RTEMS_EVENT_NORM_ASM_F2)
210 214 {
211 215 // 1) reorganize the ASM and divide
212 216 ASM_reorganize_and_divide( incomingMsg->norm->matrix,
213 217 asm_f2_reorganized,
214 218 nb_sm_before_f2.norm_bp1 );
215 219 // 2) convert the float array in a char array
216 ASM_convert( asm_f2_reorganized, asm_f2_char);
220 ASM_convert( asm_f2_reorganized, (char*) current_ring_node_to_send_asm_f2->buffer_address );
221 current_ring_node_to_send_asm_f2->coarseTime = incomingMsg->coarseTime;
222 current_ring_node_to_send_asm_f2->fineTime = incomingMsg->fineTime;
223 current_ring_node_to_send_asm_f2->sid = SID_NORM_ASM_F2;
217 224 // 3) send the spectral matrix packets
218 set_time( headerASM.time , (unsigned char *) &incomingMsg->coarseTime );
219 set_time( headerASM.acquisitionTime, (unsigned char *) &incomingMsg->coarseTime );
220 ASM_send( &headerASM, asm_f2_char, SID_NORM_ASM_F2, &spw_ioctl_send_ASM, queue_id);
225 status = rtems_message_queue_send( queue_id, &current_ring_node_to_send_asm_f2, sizeof( ring_node* ) );
226 // change asm ring node
227 current_ring_node_to_send_asm_f2 = current_ring_node_to_send_asm_f2->next;
221 228 }
222 229
223 230 }
224 231 }
225 232
226 233 //**********
227 234 // FUNCTIONS
228 235
229 236 void reset_nb_sm_f2( void )
230 237 {
231 238 nb_sm_before_f2.norm_bp1 = parameter_dump_packet.sy_lfr_n_bp_p0;
232 239 nb_sm_before_f2.norm_bp2 = parameter_dump_packet.sy_lfr_n_bp_p1;
233 240 nb_sm_before_f2.norm_asm = parameter_dump_packet.sy_lfr_n_asm_p[0] * 256 + parameter_dump_packet.sy_lfr_n_asm_p[1];
234 241 }
235 242
236 243 void SM_average_f2( float *averaged_spec_mat_f2,
237 ring_node_sm *ring_node,
244 ring_node *ring_node,
238 245 unsigned int nbAverageNormF2 )
239 246 {
240 247 float sum;
241 248 unsigned int i;
242 249
243 250 for(i=0; i<TOTAL_SIZE_SM; i++)
244 251 {
245 252 sum = ( (int *) (ring_node->buffer_address) ) [ i ];
246 253 if ( (nbAverageNormF2 == 0) )
247 254 {
248 255 averaged_spec_mat_f2[ i ] = sum;
249 256 }
250 257 else
251 258 {
252 259 averaged_spec_mat_f2[ i ] = ( averaged_spec_mat_f2[ i ] + sum );
253 260 }
254 261 }
255 262 }
@@ -1,688 +1,519
1 1 /** Functions related to data processing.
2 2 *
3 3 * @file
4 4 * @author P. LEROY
5 5 *
6 6 * These function are related to data processing, i.e. spectral matrices averaging and basic parameters computation.
7 7 *
8 8 */
9 9
10 10 #include "fsw_processing.h"
11 11 #include "fsw_processing_globals.c"
12 12
13 13 unsigned int nb_sm_f0;
14 14 unsigned int nb_sm_f0_aux_f1;
15 15 unsigned int nb_sm_f1;
16 16 unsigned int nb_sm_f0_aux_f2;
17 17
18 18 //************************
19 19 // spectral matrices rings
20 ring_node_sm sm_ring_f0[ NB_RING_NODES_SM_F0 ];
21 ring_node_sm sm_ring_f1[ NB_RING_NODES_SM_F1 ];
22 ring_node_sm sm_ring_f2[ NB_RING_NODES_SM_F2 ];
23 ring_node_sm *current_ring_node_sm_f0;
24 ring_node_sm *current_ring_node_sm_f1;
25 ring_node_sm *current_ring_node_sm_f2;
26 ring_node_sm *ring_node_for_averaging_sm_f0;
27 ring_node_sm *ring_node_for_averaging_sm_f1;
28 ring_node_sm *ring_node_for_averaging_sm_f2;
20 ring_node sm_ring_f0[ NB_RING_NODES_SM_F0 ];
21 ring_node sm_ring_f1[ NB_RING_NODES_SM_F1 ];
22 ring_node sm_ring_f2[ NB_RING_NODES_SM_F2 ];
23 ring_node *current_ring_node_sm_f0;
24 ring_node *current_ring_node_sm_f1;
25 ring_node *current_ring_node_sm_f2;
26 ring_node *ring_node_for_averaging_sm_f0;
27 ring_node *ring_node_for_averaging_sm_f1;
28 ring_node *ring_node_for_averaging_sm_f2;
29 29
30 30 //***********************************************************
31 31 // Interrupt Service Routine for spectral matrices processing
32 32
33 33 void spectral_matrices_isr_f0( void )
34 34 {
35 35 unsigned char status;
36 36 unsigned long long int time_0;
37 37 unsigned long long int time_1;
38 38 unsigned long long int syncBit0;
39 39 unsigned long long int syncBit1;
40 40
41 41 status = spectral_matrix_regs->status & 0x03; // [0011] get the status_ready_matrix_f0_x bits
42 42
43 43 time_0 = get_acquisition_time( (unsigned char *) &spectral_matrix_regs->f0_0_coarse_time );
44 44 time_1 = get_acquisition_time( (unsigned char *) &spectral_matrix_regs->f0_1_coarse_time );
45 45 syncBit0 = ( (unsigned long long int) (spectral_matrix_regs->f0_0_coarse_time & 0x80000000) ) << 16;
46 46 syncBit1 = ( (unsigned long long int) (spectral_matrix_regs->f0_1_coarse_time & 0x80000000) ) << 16;
47 47
48 48 switch(status)
49 49 {
50 50 case 0:
51 51 break;
52 52 case 3:
53 53 if ( time_0 < time_1 )
54 54 {
55 55 close_matrix_actions( &nb_sm_f0, NB_SM_BEFORE_AVF0, Task_id[TASKID_AVF0],
56 56 ring_node_for_averaging_sm_f0, current_ring_node_sm_f0, time_0 | syncBit0);
57 57 current_ring_node_sm_f0 = current_ring_node_sm_f0->next;
58 58 spectral_matrix_regs->f0_0_address = current_ring_node_sm_f0->buffer_address;
59 59 close_matrix_actions( &nb_sm_f0, NB_SM_BEFORE_AVF0, Task_id[TASKID_AVF0],
60 60 ring_node_for_averaging_sm_f0, current_ring_node_sm_f0, time_1 | syncBit1);
61 61 current_ring_node_sm_f0 = current_ring_node_sm_f0->next;
62 62 spectral_matrix_regs->f0_1_address = current_ring_node_sm_f0->buffer_address;
63 63 }
64 64 else
65 65 {
66 66 close_matrix_actions( &nb_sm_f0, NB_SM_BEFORE_AVF0, Task_id[TASKID_AVF0],
67 67 ring_node_for_averaging_sm_f0, current_ring_node_sm_f0, time_1 | syncBit1);
68 68 current_ring_node_sm_f0 = current_ring_node_sm_f0->next;
69 69 spectral_matrix_regs->f0_1_address = current_ring_node_sm_f0->buffer_address;
70 70 close_matrix_actions( &nb_sm_f0, NB_SM_BEFORE_AVF0, Task_id[TASKID_AVF0],
71 71 ring_node_for_averaging_sm_f0, current_ring_node_sm_f0, time_0 | syncBit0);
72 72 current_ring_node_sm_f0 = current_ring_node_sm_f0->next;
73 73 spectral_matrix_regs->f0_0_address = current_ring_node_sm_f0->buffer_address;
74 74 }
75 75 spectral_matrix_regs->status = 0x03; // [0011]
76 76 break;
77 77 case 1:
78 78 close_matrix_actions( &nb_sm_f0, NB_SM_BEFORE_AVF0, Task_id[TASKID_AVF0],
79 79 ring_node_for_averaging_sm_f0, current_ring_node_sm_f0, time_0 | syncBit0);
80 80 current_ring_node_sm_f0 = current_ring_node_sm_f0->next;
81 81 spectral_matrix_regs->f0_0_address = current_ring_node_sm_f0->buffer_address;
82 82 spectral_matrix_regs->status = 0x01; // [0001]
83 83 break;
84 84 case 2:
85 85 close_matrix_actions( &nb_sm_f0, NB_SM_BEFORE_AVF0, Task_id[TASKID_AVF0],
86 86 ring_node_for_averaging_sm_f0, current_ring_node_sm_f0, time_1 | syncBit1);
87 87 current_ring_node_sm_f0 = current_ring_node_sm_f0->next;
88 88 spectral_matrix_regs->f0_1_address = current_ring_node_sm_f0->buffer_address;
89 89 spectral_matrix_regs->status = 0x02; // [0010]
90 90 break;
91 91 }
92 92 }
93 93
94 94 void spectral_matrices_isr_f1( void )
95 95 {
96 96 unsigned char status;
97 97 unsigned long long int time;
98 98 unsigned long long int syncBit;
99 99 rtems_status_code status_code;
100 100
101 101 status = (spectral_matrix_regs->status & 0x0c) >> 2; // [1100] get the status_ready_matrix_f0_x bits
102 102
103 103 switch(status)
104 104 {
105 105 case 0:
106 106 break;
107 107 case 3:
108 108 // UNEXPECTED VALUE
109 109 spectral_matrix_regs->status = 0xc0; // [1100]
110 110 status_code = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_11 );
111 111 break;
112 112 case 1:
113 113 time = get_acquisition_time( (unsigned char *) &spectral_matrix_regs->f1_0_coarse_time );
114 114 syncBit = ( (unsigned long long int) (spectral_matrix_regs->f1_0_coarse_time & 0x80000000) ) << 16;
115 115 close_matrix_actions( &nb_sm_f1, NB_SM_BEFORE_AVF1, Task_id[TASKID_AVF1],
116 116 ring_node_for_averaging_sm_f1, current_ring_node_sm_f1, time | syncBit);
117 117 current_ring_node_sm_f1 = current_ring_node_sm_f1->next;
118 118 spectral_matrix_regs->f1_0_address = current_ring_node_sm_f1->buffer_address;
119 119 spectral_matrix_regs->status = 0x04; // [0100]
120 120 break;
121 121 case 2:
122 122 time = get_acquisition_time( (unsigned char *) &spectral_matrix_regs->f1_1_coarse_time );
123 123 syncBit = ( (unsigned long long int) (spectral_matrix_regs->f1_1_coarse_time & 0x80000000) ) << 16;
124 124 close_matrix_actions( &nb_sm_f1, NB_SM_BEFORE_AVF1, Task_id[TASKID_AVF1],
125 125 ring_node_for_averaging_sm_f1, current_ring_node_sm_f1, time | syncBit);
126 126 current_ring_node_sm_f1 = current_ring_node_sm_f1->next;
127 127 spectral_matrix_regs->f1_1_address = current_ring_node_sm_f1->buffer_address;
128 128 spectral_matrix_regs->status = 0x08; // [1000]
129 129 break;
130 130 }
131 131 }
132 132
133 133 void spectral_matrices_isr_f2( void )
134 134 {
135 135 unsigned char status;
136 136 rtems_status_code status_code;
137 137
138 138 status = (spectral_matrix_regs->status & 0x30) >> 4; // [0011 0000] get the status_ready_matrix_f0_x bits
139 139
140 140 ring_node_for_averaging_sm_f2 = current_ring_node_sm_f2;
141 141
142 142 current_ring_node_sm_f2 = current_ring_node_sm_f2->next;
143 143
144 144 switch(status)
145 145 {
146 146 case 0:
147 147 break;
148 148 case 3:
149 149 // UNEXPECTED VALUE
150 150 spectral_matrix_regs->status = 0x30; // [0011 0000]
151 151 status_code = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_11 );
152 152 break;
153 153 case 1:
154 154 ring_node_for_averaging_sm_f2->coarseTime = spectral_matrix_regs->f2_0_coarse_time;
155 155 ring_node_for_averaging_sm_f2->fineTime = spectral_matrix_regs->f2_0_fine_time;
156 156 spectral_matrix_regs->f2_0_address = current_ring_node_sm_f2->buffer_address;
157 157 spectral_matrix_regs->status = 0x10; // [0001 0000]
158 158 if (rtems_event_send( Task_id[TASKID_AVF2], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL)
159 159 {
160 160 status_code = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 );
161 161 }
162 162 break;
163 163 case 2:
164 164 ring_node_for_averaging_sm_f2->coarseTime = spectral_matrix_regs->f2_1_coarse_time;
165 165 ring_node_for_averaging_sm_f2->fineTime = spectral_matrix_regs->f2_1_fine_time;
166 166 spectral_matrix_regs->f2_1_address = current_ring_node_sm_f2->buffer_address;
167 167 spectral_matrix_regs->status = 0x20; // [0010 0000]
168 168 if (rtems_event_send( Task_id[TASKID_AVF2], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL)
169 169 {
170 170 status_code = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 );
171 171 }
172 172 break;
173 173 }
174 174 }
175 175
176 176 void spectral_matrix_isr_error_handler( void )
177 177 {
178 178 rtems_status_code status_code;
179 179
180 180 if (spectral_matrix_regs->status & 0x7c0) // [0111 1100 0000]
181 181 {
182 182 status_code = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_8 );
183 183 }
184 184 }
185 185
186 186 rtems_isr spectral_matrices_isr( rtems_vector_number vector )
187 187 {
188 188 // STATUS REGISTER
189 189 // input_fifo_write(2) *** input_fifo_write(1) *** input_fifo_write(0)
190 190 // 10 9 8
191 191 // buffer_full ** bad_component_err ** f2_1 ** f2_0 ** f1_1 ** f1_0 ** f0_1 ** f0_0
192 192 // 7 6 5 4 3 2 1 0
193 193
194 194 spectral_matrices_isr_f0();
195 195
196 196 spectral_matrices_isr_f1();
197 197
198 198 spectral_matrices_isr_f2();
199 199
200 200 // spectral_matrix_isr_error_handler();
201 201 }
202 202
203 203 rtems_isr spectral_matrices_isr_simu( rtems_vector_number vector )
204 204 {
205 205 rtems_status_code status_code;
206 206
207 207 //***
208 208 // F0
209 209 nb_sm_f0 = nb_sm_f0 + 1;
210 210 if (nb_sm_f0 == NB_SM_BEFORE_AVF0 )
211 211 {
212 212 ring_node_for_averaging_sm_f0 = current_ring_node_sm_f0;
213 213 if (rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL)
214 214 {
215 215 status_code = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 );
216 216 }
217 217 nb_sm_f0 = 0;
218 218 }
219 219
220 220 //***
221 221 // F1
222 222 nb_sm_f0_aux_f1 = nb_sm_f0_aux_f1 + 1;
223 223 if (nb_sm_f0_aux_f1 == 6)
224 224 {
225 225 nb_sm_f0_aux_f1 = 0;
226 226 nb_sm_f1 = nb_sm_f1 + 1;
227 227 }
228 228 if (nb_sm_f1 == NB_SM_BEFORE_AVF1 )
229 229 {
230 230 ring_node_for_averaging_sm_f1 = current_ring_node_sm_f1;
231 231 if (rtems_event_send( Task_id[TASKID_AVF1], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL)
232 232 {
233 233 status_code = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 );
234 234 }
235 235 nb_sm_f1 = 0;
236 236 }
237 237
238 238 //***
239 239 // F2
240 240 nb_sm_f0_aux_f2 = nb_sm_f0_aux_f2 + 1;
241 241 if (nb_sm_f0_aux_f2 == 96)
242 242 {
243 243 nb_sm_f0_aux_f2 = 0;
244 244 ring_node_for_averaging_sm_f2 = current_ring_node_sm_f2;
245 245 if (rtems_event_send( Task_id[TASKID_AVF2], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL)
246 246 {
247 247 status_code = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 );
248 248 }
249 249 }
250 250 }
251 251
252 252 //******************
253 253 // Spectral Matrices
254 254
255 255 void reset_nb_sm( void )
256 256 {
257 257 nb_sm_f0 = 0;
258 258 nb_sm_f0_aux_f1 = 0;
259 259 nb_sm_f0_aux_f2 = 0;
260 260
261 261 nb_sm_f1 = 0;
262 262 }
263 263
264 //void SM_init_rings_alt( void )
265 //{
266 // init_ring( sm_ring_f0, NB_RING_NODES_SM_F0, sm_f0, TOTAL_SIZE_SM );
267 // init_ring( sm_ring_f1, NB_RING_NODES_SM_F1, sm_f0, TOTAL_SIZE_SM );
268 // init_ring( sm_ring_f2, NB_RING_NODES_SM_F2, sm_f0, TOTAL_SIZE_SM );
269
270 // DEBUG_PRINTF1("sm_ring_f0 @%x\n", (unsigned int) sm_ring_f0)
271 // DEBUG_PRINTF1("sm_ring_f1 @%x\n", (unsigned int) sm_ring_f1)
272 // DEBUG_PRINTF1("sm_ring_f2 @%x\n", (unsigned int) sm_ring_f2)
273 // DEBUG_PRINTF1("sm_f0 @%x\n", (unsigned int) sm_f0)
274 // DEBUG_PRINTF1("sm_f1 @%x\n", (unsigned int) sm_f1)
275 // DEBUG_PRINTF1("sm_f2 @%x\n", (unsigned int) sm_f2)
276 //}
277
278 264 void SM_init_rings( void )
279 265 {
280 unsigned char i;
281 // F0 RING
282 sm_ring_f0[0].next = (ring_node_sm*) &sm_ring_f0[1];
283 sm_ring_f0[0].previous = (ring_node_sm*) &sm_ring_f0[NB_RING_NODES_SM_F0-1];
284 sm_ring_f0[0].buffer_address =
285 (int) &sm_f0[ 0 ];
286 sm_ring_f0[NB_RING_NODES_SM_F0-1].next = (ring_node_sm*) &sm_ring_f0[0];
287 sm_ring_f0[NB_RING_NODES_SM_F0-1].previous = (ring_node_sm*) &sm_ring_f0[NB_RING_NODES_SM_F0-2];
288 sm_ring_f0[NB_RING_NODES_SM_F0-1].buffer_address =
289 (int) &sm_f0[ (NB_RING_NODES_SM_F0-1) * TOTAL_SIZE_SM ];
290 for(i=1; i<NB_RING_NODES_SM_F0-1; i++)
291 {
292 sm_ring_f0[i].next = (ring_node_sm*) &sm_ring_f0[i+1];
293 sm_ring_f0[i].previous = (ring_node_sm*) &sm_ring_f0[i-1];
294 sm_ring_f0[i].buffer_address =
295 (int) &sm_f0[ i * TOTAL_SIZE_SM ];
296 }
297 // F1 RING
298 sm_ring_f1[0].next = (ring_node_sm*) &sm_ring_f1[1];
299 sm_ring_f1[0].previous = (ring_node_sm*) &sm_ring_f1[NB_RING_NODES_SM_F1-1];
300 sm_ring_f1[0].buffer_address =
301 (int) &sm_f1[ 0 ];
302 sm_ring_f1[NB_RING_NODES_SM_F1-1].next = (ring_node_sm*) &sm_ring_f1[0];
303 sm_ring_f1[NB_RING_NODES_SM_F1-1].previous = (ring_node_sm*) &sm_ring_f1[NB_RING_NODES_SM_F1-2];
304 sm_ring_f1[NB_RING_NODES_SM_F1-1].buffer_address =
305 (int) &sm_f1[ (NB_RING_NODES_SM_F1-1) * TOTAL_SIZE_SM ];
306 for(i=1; i<NB_RING_NODES_SM_F1-1; i++)
307 {
308 sm_ring_f1[i].next = (ring_node_sm*) &sm_ring_f1[i+1];
309 sm_ring_f1[i].previous = (ring_node_sm*) &sm_ring_f1[i-1];
310 sm_ring_f1[i].buffer_address =
311 (int) &sm_f1[ i * TOTAL_SIZE_SM ];
312 }
313 // F2 RING
314 sm_ring_f2[0].next = (ring_node_sm*) &sm_ring_f2[1];
315 sm_ring_f2[0].previous = (ring_node_sm*) &sm_ring_f2[NB_RING_NODES_SM_F2-1];
316 sm_ring_f2[0].buffer_address =
317 (int) &sm_f2[ 0 ];
318 sm_ring_f2[NB_RING_NODES_SM_F2-1].next = (ring_node_sm*) &sm_ring_f2[0];
319 sm_ring_f2[NB_RING_NODES_SM_F2-1].previous = (ring_node_sm*) &sm_ring_f2[NB_RING_NODES_SM_F2-2];
320 sm_ring_f2[NB_RING_NODES_SM_F2-1].buffer_address =
321 (int) &sm_f2[ (NB_RING_NODES_SM_F2-1) * TOTAL_SIZE_SM ];
322 for(i=1; i<NB_RING_NODES_SM_F2-1; i++)
323 {
324 sm_ring_f2[i].next = (ring_node_sm*) &sm_ring_f2[i+1];
325 sm_ring_f2[i].previous = (ring_node_sm*) &sm_ring_f2[i-1];
326 sm_ring_f2[i].buffer_address =
327 (int) &sm_f2[ i * TOTAL_SIZE_SM ];
328 }
329 DEBUG_PRINTF1("asm_ring_f0 @%x\n", (unsigned int) sm_ring_f0)
330 DEBUG_PRINTF1("asm_ring_f1 @%x\n", (unsigned int) sm_ring_f1)
331 DEBUG_PRINTF1("asm_ring_f2 @%x\n", (unsigned int) sm_ring_f2)
332 spectral_matrix_regs->f0_0_address = sm_ring_f0[0].buffer_address;
333 DEBUG_PRINTF1("spectral_matrix_regs->matrixF0_Address0 @%x\n", spectral_matrix_regs->f0_0_address)
266 init_ring( sm_ring_f0, NB_RING_NODES_SM_F0, sm_f0, TOTAL_SIZE_SM );
267 init_ring( sm_ring_f1, NB_RING_NODES_SM_F1, sm_f1, TOTAL_SIZE_SM );
268 init_ring( sm_ring_f2, NB_RING_NODES_SM_F2, sm_f2, TOTAL_SIZE_SM );
269
270 DEBUG_PRINTF1("sm_ring_f0 @%x\n", (unsigned int) sm_ring_f0)
271 DEBUG_PRINTF1("sm_ring_f1 @%x\n", (unsigned int) sm_ring_f1)
272 DEBUG_PRINTF1("sm_ring_f2 @%x\n", (unsigned int) sm_ring_f2)
273 DEBUG_PRINTF1("sm_f0 @%x\n", (unsigned int) sm_f0)
274 DEBUG_PRINTF1("sm_f1 @%x\n", (unsigned int) sm_f1)
275 DEBUG_PRINTF1("sm_f2 @%x\n", (unsigned int) sm_f2)
334 276 }
335 277
336
337 278 void ASM_generic_init_ring( ring_node_asm *ring, unsigned char nbNodes )
338 279 {
339 280 unsigned char i;
340 281
341 282 ring[ nbNodes - 1 ].next
342 283 = (ring_node_asm*) &ring[ 0 ];
343 284
344 285 for(i=0; i<nbNodes-1; i++)
345 286 {
346 287 ring[ i ].next = (ring_node_asm*) &ring[ i + 1 ];
347 288 }
348 289 }
349 290
350 291 void SM_reset_current_ring_nodes( void )
351 292 {
352 293 current_ring_node_sm_f0 = sm_ring_f0[0].next;
353 294 current_ring_node_sm_f1 = sm_ring_f1[0].next;
354 295 current_ring_node_sm_f2 = sm_ring_f2[0].next;
355 296
356 297 ring_node_for_averaging_sm_f0 = sm_ring_f0;
357 298 ring_node_for_averaging_sm_f1 = sm_ring_f1;
358 299 ring_node_for_averaging_sm_f2 = sm_ring_f2;
359 300 }
360 301
361 void ASM_init_header( Header_TM_LFR_SCIENCE_ASM_t *header)
362 {
363 header->targetLogicalAddress = CCSDS_DESTINATION_ID;
364 header->protocolIdentifier = CCSDS_PROTOCOLE_ID;
365 header->reserved = 0x00;
366 header->userApplication = CCSDS_USER_APP;
367 header->packetID[0] = (unsigned char) (APID_TM_SCIENCE_NORMAL_BURST >> 8);
368 header->packetID[1] = (unsigned char) (APID_TM_SCIENCE_NORMAL_BURST);
369 header->packetSequenceControl[0] = 0xc0;
370 header->packetSequenceControl[1] = 0x00;
371 header->packetLength[0] = 0x00;
372 header->packetLength[1] = 0x00;
373 // DATA FIELD HEADER
374 header->spare1_pusVersion_spare2 = 0x10;
375 header->serviceType = TM_TYPE_LFR_SCIENCE; // service type
376 header->serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
377 header->destinationID = TM_DESTINATION_ID_GROUND;
378 header->time[0] = 0x00;
379 header->time[0] = 0x00;
380 header->time[0] = 0x00;
381 header->time[0] = 0x00;
382 header->time[0] = 0x00;
383 header->time[0] = 0x00;
384 // AUXILIARY DATA HEADER
385 header->sid = 0x00;
386 header->biaStatusInfo = 0x00;
387 header->pa_lfr_pkt_cnt_asm = 0x00;
388 header->pa_lfr_pkt_nr_asm = 0x00;
389 header->pa_lfr_asm_blk_nr[0] = 0x00; // BLK_NR MSB
390 header->pa_lfr_asm_blk_nr[1] = 0x00; // BLK_NR LSB
391 }
392
393 void ASM_send(Header_TM_LFR_SCIENCE_ASM_t *header, char *spectral_matrix,
394 unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send, rtems_id queue_id)
395 {
396 unsigned int i;
397 unsigned int length = 0;
398 rtems_status_code status;
399
400 for (i=0; i<2; i++)
401 {
402 // (1) BUILD THE DATA
403 switch(sid)
404 {
405 case SID_NORM_ASM_F0:
406 spw_ioctl_send->dlen = TOTAL_SIZE_ASM_F0_IN_BYTES / 2; // 2 packets will be sent
407 spw_ioctl_send->data = &spectral_matrix[
408 ( (ASM_F0_INDICE_START + (i*NB_BINS_PER_PKT_ASM_F0) ) * NB_VALUES_PER_SM ) * 2
409 ];
410 length = PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F0;
411 header->pa_lfr_asm_blk_nr[0] = (unsigned char) ( (NB_BINS_PER_PKT_ASM_F0) >> 8 ); // BLK_NR MSB
412 header->pa_lfr_asm_blk_nr[1] = (unsigned char) (NB_BINS_PER_PKT_ASM_F0); // BLK_NR LSB
413 break;
414 case SID_NORM_ASM_F1:
415 spw_ioctl_send->dlen = TOTAL_SIZE_ASM_F1_IN_BYTES / 2; // 2 packets will be sent
416 spw_ioctl_send->data = &spectral_matrix[
417 ( (ASM_F1_INDICE_START + (i*NB_BINS_PER_PKT_ASM_F1) ) * NB_VALUES_PER_SM ) * 2
418 ];
419 length = PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F1;
420 header->pa_lfr_asm_blk_nr[0] = (unsigned char) ( (NB_BINS_PER_PKT_ASM_F1) >> 8 ); // BLK_NR MSB
421 header->pa_lfr_asm_blk_nr[1] = (unsigned char) (NB_BINS_PER_PKT_ASM_F1); // BLK_NR LSB
422 break;
423 case SID_NORM_ASM_F2:
424 spw_ioctl_send->dlen = TOTAL_SIZE_ASM_F2_IN_BYTES / 2; // 2 packets will be sent
425 spw_ioctl_send->data = &spectral_matrix[
426 ( (ASM_F2_INDICE_START + (i*NB_BINS_PER_PKT_ASM_F2) ) * NB_VALUES_PER_SM ) * 2
427 ];
428 length = PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F2;
429 header->pa_lfr_asm_blk_nr[0] = (unsigned char) ( (NB_BINS_PER_PKT_ASM_F2) >> 8 ); // BLK_NR MSB
430 header->pa_lfr_asm_blk_nr[1] = (unsigned char) (NB_BINS_PER_PKT_ASM_F2); // BLK_NR LSB
431 break;
432 default:
433 PRINTF1("ERR *** in ASM_send *** unexpected sid %d\n", sid)
434 break;
435 }
436 spw_ioctl_send->hlen = HEADER_LENGTH_TM_LFR_SCIENCE_ASM + CCSDS_PROTOCOLE_EXTRA_BYTES;
437 spw_ioctl_send->hdr = (char *) header;
438 spw_ioctl_send->options = 0;
439
440 // (2) BUILD THE HEADER
441 increment_seq_counter_source_id( header->packetSequenceControl, sid );
442 header->packetLength[0] = (unsigned char) (length>>8);
443 header->packetLength[1] = (unsigned char) (length);
444 header->sid = (unsigned char) sid; // SID
445 header->pa_lfr_pkt_cnt_asm = 2;
446 header->pa_lfr_pkt_nr_asm = (unsigned char) (i+1);
447
448 // (3) SET PACKET TIME
449 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
450 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
451 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
452 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
453 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
454 header->time[5] = (unsigned char) (time_management_regs->fine_time);
455 //
456 header->acquisitionTime[0] = header->time[0];
457 header->acquisitionTime[1] = header->time[1];
458 header->acquisitionTime[2] = header->time[2];
459 header->acquisitionTime[3] = header->time[3];
460 header->acquisitionTime[4] = header->time[4];
461 header->acquisitionTime[5] = header->time[5];
462
463 // (4) SEND PACKET
464 status = rtems_message_queue_send( queue_id, spw_ioctl_send, ACTION_MSG_SPW_IOCTL_SEND_SIZE);
465 if (status != RTEMS_SUCCESSFUL) {
466 printf("in ASM_send *** ERR %d\n", (int) status);
467 }
468 }
469 }
470
471 302 //*****************
472 303 // Basic Parameters
473 304
474 305 void BP_init_header( Header_TM_LFR_SCIENCE_BP_t *header,
475 306 unsigned int apid, unsigned char sid,
476 307 unsigned int packetLength, unsigned char blkNr )
477 308 {
478 309 header->targetLogicalAddress = CCSDS_DESTINATION_ID;
479 310 header->protocolIdentifier = CCSDS_PROTOCOLE_ID;
480 311 header->reserved = 0x00;
481 312 header->userApplication = CCSDS_USER_APP;
482 313 header->packetID[0] = (unsigned char) (apid >> 8);
483 314 header->packetID[1] = (unsigned char) (apid);
484 315 header->packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_STANDALONE;
485 316 header->packetSequenceControl[1] = 0x00;
486 317 header->packetLength[0] = (unsigned char) (packetLength >> 8);
487 318 header->packetLength[1] = (unsigned char) (packetLength);
488 319 // DATA FIELD HEADER
489 320 header->spare1_pusVersion_spare2 = 0x10;
490 321 header->serviceType = TM_TYPE_LFR_SCIENCE; // service type
491 322 header->serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
492 323 header->destinationID = TM_DESTINATION_ID_GROUND;
493 324 // AUXILIARY DATA HEADER
494 325 header->sid = sid;
495 326 header->biaStatusInfo = 0x00;
496 327 header->time[0] = 0x00;
497 328 header->time[0] = 0x00;
498 329 header->time[0] = 0x00;
499 330 header->time[0] = 0x00;
500 331 header->time[0] = 0x00;
501 332 header->time[0] = 0x00;
502 333 header->pa_lfr_bp_blk_nr[0] = 0x00; // BLK_NR MSB
503 334 header->pa_lfr_bp_blk_nr[1] = blkNr; // BLK_NR LSB
504 335 }
505 336
506 337 void BP_init_header_with_spare(Header_TM_LFR_SCIENCE_BP_with_spare_t *header,
507 338 unsigned int apid, unsigned char sid,
508 339 unsigned int packetLength , unsigned char blkNr)
509 340 {
510 341 header->targetLogicalAddress = CCSDS_DESTINATION_ID;
511 342 header->protocolIdentifier = CCSDS_PROTOCOLE_ID;
512 343 header->reserved = 0x00;
513 344 header->userApplication = CCSDS_USER_APP;
514 345 header->packetID[0] = (unsigned char) (apid >> 8);
515 346 header->packetID[1] = (unsigned char) (apid);
516 347 header->packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_STANDALONE;
517 348 header->packetSequenceControl[1] = 0x00;
518 349 header->packetLength[0] = (unsigned char) (packetLength >> 8);
519 350 header->packetLength[1] = (unsigned char) (packetLength);
520 351 // DATA FIELD HEADER
521 352 header->spare1_pusVersion_spare2 = 0x10;
522 353 header->serviceType = TM_TYPE_LFR_SCIENCE; // service type
523 354 header->serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
524 355 header->destinationID = TM_DESTINATION_ID_GROUND;
525 356 // AUXILIARY DATA HEADER
526 357 header->sid = sid;
527 358 header->biaStatusInfo = 0x00;
528 359 header->time[0] = 0x00;
529 360 header->time[0] = 0x00;
530 361 header->time[0] = 0x00;
531 362 header->time[0] = 0x00;
532 363 header->time[0] = 0x00;
533 364 header->time[0] = 0x00;
534 365 header->source_data_spare = 0x00;
535 366 header->pa_lfr_bp_blk_nr[0] = 0x00; // BLK_NR MSB
536 367 header->pa_lfr_bp_blk_nr[1] = blkNr; // BLK_NR LSB
537 368 }
538 369
539 370 void BP_send(char *data, rtems_id queue_id, unsigned int nbBytesToSend, unsigned int sid )
540 371 {
541 372 rtems_status_code status;
542 373
543 374 // SET THE SEQUENCE_CNT PARAMETER
544 375 increment_seq_counter_source_id( (unsigned char*) &data[ PACKET_POS_SEQUENCE_CNT ], sid );
545 376 // SEND PACKET
546 377 status = rtems_message_queue_send( queue_id, data, nbBytesToSend);
547 378 if (status != RTEMS_SUCCESSFUL)
548 379 {
549 380 printf("ERR *** in BP_send *** ERR %d\n", (int) status);
550 381 }
551 382 }
552 383
553 384 //******************
554 385 // general functions
555 386
556 387 void reset_sm_status( void )
557 388 {
558 389 // error
559 390 // 10 --------------- 9 ---------------- 8 ---------------- 7 ---------
560 391 // input_fif0_write_2 input_fifo_write_1 input_fifo_write_0 buffer_full
561 392 // ---------- 5 -- 4 -- 3 -- 2 -- 1 -- 0 --
562 393 // ready bits f2_1 f2_0 f1_1 f1_1 f0_1 f0_0
563 394
564 395 spectral_matrix_regs->status = 0x7ff; // [0111 1111 1111]
565 396 }
566 397
567 398 void reset_spectral_matrix_regs( void )
568 399 {
569 400 /** This function resets the spectral matrices module registers.
570 401 *
571 402 * The registers affected by this function are located at the following offset addresses:
572 403 *
573 404 * - 0x00 config
574 405 * - 0x04 status
575 406 * - 0x08 matrixF0_Address0
576 407 * - 0x10 matrixFO_Address1
577 408 * - 0x14 matrixF1_Address
578 409 * - 0x18 matrixF2_Address
579 410 *
580 411 */
581 412
582 413 set_sm_irq_onError( 0 );
583 414
584 415 set_sm_irq_onNewMatrix( 0 );
585 416
586 417 reset_sm_status();
587 418
588 419 spectral_matrix_regs->f0_0_address = current_ring_node_sm_f0->previous->buffer_address;
589 420 spectral_matrix_regs->f0_1_address = current_ring_node_sm_f0->buffer_address;
590 421 spectral_matrix_regs->f1_0_address = current_ring_node_sm_f1->previous->buffer_address;
591 422 spectral_matrix_regs->f1_1_address = current_ring_node_sm_f1->buffer_address;
592 423 spectral_matrix_regs->f2_0_address = current_ring_node_sm_f2->previous->buffer_address;
593 424 spectral_matrix_regs->f2_1_address = current_ring_node_sm_f2->buffer_address;
594 425
595 426 spectral_matrix_regs->matrix_length = 0xc8; // 25 * 128 / 16 = 200 = 0xc8
596 427 }
597 428
598 429 void set_time( unsigned char *time, unsigned char * timeInBuffer )
599 430 {
600 431 time[0] = timeInBuffer[0];
601 432 time[1] = timeInBuffer[1];
602 433 time[2] = timeInBuffer[2];
603 434 time[3] = timeInBuffer[3];
604 435 time[4] = timeInBuffer[6];
605 436 time[5] = timeInBuffer[7];
606 437 }
607 438
608 439 unsigned long long int get_acquisition_time( unsigned char *timePtr )
609 440 {
610 441 unsigned long long int acquisitionTimeAslong;
611 442 acquisitionTimeAslong = 0x00;
612 443 acquisitionTimeAslong = ( (unsigned long long int) (timePtr[0] & 0x7f) << 40 ) // [0111 1111] mask the synchronization bit
613 444 + ( (unsigned long long int) timePtr[1] << 32 )
614 445 + ( (unsigned long long int) timePtr[2] << 24 )
615 446 + ( (unsigned long long int) timePtr[3] << 16 )
616 447 + ( (unsigned long long int) timePtr[6] << 8 )
617 448 + ( (unsigned long long int) timePtr[7] );
618 449 return acquisitionTimeAslong;
619 450 }
620 451
621 452 void close_matrix_actions(unsigned int *nb_sm, unsigned int nb_sm_before_avf, rtems_id avf_task_id,
622 ring_node_sm *node_for_averaging, ring_node_sm *ringNode,
453 ring_node *node_for_averaging, ring_node *ringNode,
623 454 unsigned long long int time )
624 455 {
625 456 unsigned char *timePtr;
626 457 unsigned char *coarseTimePtr;
627 458 unsigned char *fineTimePtr;
628 459 rtems_status_code status_code;
629 460
630 461 timePtr = (unsigned char *) &time;
631 462 coarseTimePtr = (unsigned char *) &node_for_averaging->coarseTime;
632 463 fineTimePtr = (unsigned char *) &node_for_averaging->fineTime;
633 464
634 465 *nb_sm = *nb_sm + 1;
635 466 if (*nb_sm == nb_sm_before_avf)
636 467 {
637 468 node_for_averaging = ringNode;
638 469 coarseTimePtr[0] = timePtr[2];
639 470 coarseTimePtr[1] = timePtr[3];
640 471 coarseTimePtr[2] = timePtr[4];
641 472 coarseTimePtr[3] = timePtr[5];
642 473 fineTimePtr[2] = timePtr[6];
643 474 fineTimePtr[3] = timePtr[7];
644 475 if (rtems_event_send( avf_task_id, RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL)
645 476 {
646 477 status_code = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 );
647 478 }
648 479 *nb_sm = 0;
649 480 }
650 481 }
651 482
652 483 unsigned char getSID( rtems_event_set event )
653 484 {
654 485 unsigned char sid;
655 486
656 487 rtems_event_set eventSetBURST;
657 488 rtems_event_set eventSetSBM;
658 489
659 490 //******
660 491 // BURST
661 492 eventSetBURST = RTEMS_EVENT_BURST_BP1_F0
662 493 | RTEMS_EVENT_BURST_BP1_F1
663 494 | RTEMS_EVENT_BURST_BP2_F0
664 495 | RTEMS_EVENT_BURST_BP2_F1;
665 496
666 497 //****
667 498 // SBM
668 499 eventSetSBM = RTEMS_EVENT_SBM_BP1_F0
669 500 | RTEMS_EVENT_SBM_BP1_F1
670 501 | RTEMS_EVENT_SBM_BP2_F0
671 502 | RTEMS_EVENT_SBM_BP2_F1;
672 503
673 504 if (event & eventSetBURST)
674 505 {
675 506 sid = SID_BURST_BP1_F0;
676 507 }
677 508 else if (event & eventSetSBM)
678 509 {
679 510 sid = SID_SBM1_BP1_F0;
680 511 }
681 512 else
682 513 {
683 514 sid = 0;
684 515 }
685 516
686 517 return sid;
687 518 }
688 519
General Comments 0
You need to be logged in to leave comments. Login now