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