##// END OF EJS Templates
rtems_message_queue_urgent is replaced by rtems_message_queue_send...
paul -
r36:303e7beebcc8 default
parent child
Show More
@@ -1,233 +1,233
1 #############################################################################
1 #############################################################################
2 # Makefile for building: bin/fsw
2 # Makefile for building: bin/fsw
3 # Generated by qmake (2.01a) (Qt 4.8.5) on: Tue Oct 8 10:15:40 2013
3 # Generated by qmake (2.01a) (Qt 4.8.5) on: Thu Oct 10 08:47:12 2013
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=0 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=13 -DPRINT_MESSAGES_ON_CONSOLE
13 DEFINES = -DSW_VERSION_N1=0 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=14 -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
16 INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header
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_processing.c \
48 ../src/fsw_processing.c \
49 ../src/fsw_misc.c \
49 ../src/fsw_misc.c \
50 ../src/fsw_init.c \
50 ../src/fsw_init.c \
51 ../src/fsw_globals.c \
51 ../src/fsw_globals.c \
52 ../src/fsw_spacewire.c
52 ../src/fsw_spacewire.c
53 OBJECTS = obj/wf_handler.o \
53 OBJECTS = obj/wf_handler.o \
54 obj/tc_handler.o \
54 obj/tc_handler.o \
55 obj/fsw_processing.o \
55 obj/fsw_processing.o \
56 obj/fsw_misc.o \
56 obj/fsw_misc.o \
57 obj/fsw_init.o \
57 obj/fsw_init.o \
58 obj/fsw_globals.o \
58 obj/fsw_globals.o \
59 obj/fsw_spacewire.o
59 obj/fsw_spacewire.o
60 DIST = /usr/lib64/qt4/mkspecs/common/unix.conf \
60 DIST = /usr/lib64/qt4/mkspecs/common/unix.conf \
61 /usr/lib64/qt4/mkspecs/common/linux.conf \
61 /usr/lib64/qt4/mkspecs/common/linux.conf \
62 /usr/lib64/qt4/mkspecs/common/gcc-base.conf \
62 /usr/lib64/qt4/mkspecs/common/gcc-base.conf \
63 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
63 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
64 /usr/lib64/qt4/mkspecs/common/g++-base.conf \
64 /usr/lib64/qt4/mkspecs/common/g++-base.conf \
65 /usr/lib64/qt4/mkspecs/common/g++-unix.conf \
65 /usr/lib64/qt4/mkspecs/common/g++-unix.conf \
66 /usr/lib64/qt4/mkspecs/qconfig.pri \
66 /usr/lib64/qt4/mkspecs/qconfig.pri \
67 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
67 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
68 /usr/lib64/qt4/mkspecs/features/qt_functions.prf \
68 /usr/lib64/qt4/mkspecs/features/qt_functions.prf \
69 /usr/lib64/qt4/mkspecs/features/qt_config.prf \
69 /usr/lib64/qt4/mkspecs/features/qt_config.prf \
70 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
70 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
71 /usr/lib64/qt4/mkspecs/features/default_pre.prf \
71 /usr/lib64/qt4/mkspecs/features/default_pre.prf \
72 sparc.pri \
72 sparc.pri \
73 /usr/lib64/qt4/mkspecs/features/release.prf \
73 /usr/lib64/qt4/mkspecs/features/release.prf \
74 /usr/lib64/qt4/mkspecs/features/default_post.prf \
74 /usr/lib64/qt4/mkspecs/features/default_post.prf \
75 /usr/lib64/qt4/mkspecs/features/shared.prf \
75 /usr/lib64/qt4/mkspecs/features/shared.prf \
76 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
76 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
77 /usr/lib64/qt4/mkspecs/features/warn_on.prf \
77 /usr/lib64/qt4/mkspecs/features/warn_on.prf \
78 /usr/lib64/qt4/mkspecs/features/resources.prf \
78 /usr/lib64/qt4/mkspecs/features/resources.prf \
79 /usr/lib64/qt4/mkspecs/features/uic.prf \
79 /usr/lib64/qt4/mkspecs/features/uic.prf \
80 /usr/lib64/qt4/mkspecs/features/yacc.prf \
80 /usr/lib64/qt4/mkspecs/features/yacc.prf \
81 /usr/lib64/qt4/mkspecs/features/lex.prf \
81 /usr/lib64/qt4/mkspecs/features/lex.prf \
82 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf \
82 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf \
83 fsw-qt.pro
83 fsw-qt.pro
84 QMAKE_TARGET = fsw
84 QMAKE_TARGET = fsw
85 DESTDIR = bin/
85 DESTDIR = bin/
86 TARGET = bin/fsw
86 TARGET = bin/fsw
87
87
88 first: all
88 first: all
89 ####### Implicit rules
89 ####### Implicit rules
90
90
91 .SUFFIXES: .o .c .cpp .cc .cxx .C
91 .SUFFIXES: .o .c .cpp .cc .cxx .C
92
92
93 .cpp.o:
93 .cpp.o:
94 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
94 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
95
95
96 .cc.o:
96 .cc.o:
97 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
97 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
98
98
99 .cxx.o:
99 .cxx.o:
100 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
100 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
101
101
102 .C.o:
102 .C.o:
103 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
103 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
104
104
105 .c.o:
105 .c.o:
106 $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
106 $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
107
107
108 ####### Build rules
108 ####### Build rules
109
109
110 all: Makefile $(TARGET)
110 all: Makefile $(TARGET)
111
111
112 $(TARGET): $(OBJECTS)
112 $(TARGET): $(OBJECTS)
113 @$(CHK_DIR_EXISTS) bin/ || $(MKDIR) bin/
113 @$(CHK_DIR_EXISTS) bin/ || $(MKDIR) bin/
114 $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
114 $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
115
115
116 Makefile: fsw-qt.pro /usr/lib64/qt4/mkspecs/linux-g++/qmake.conf /usr/lib64/qt4/mkspecs/common/unix.conf \
116 Makefile: fsw-qt.pro /usr/lib64/qt4/mkspecs/linux-g++/qmake.conf /usr/lib64/qt4/mkspecs/common/unix.conf \
117 /usr/lib64/qt4/mkspecs/common/linux.conf \
117 /usr/lib64/qt4/mkspecs/common/linux.conf \
118 /usr/lib64/qt4/mkspecs/common/gcc-base.conf \
118 /usr/lib64/qt4/mkspecs/common/gcc-base.conf \
119 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
119 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
120 /usr/lib64/qt4/mkspecs/common/g++-base.conf \
120 /usr/lib64/qt4/mkspecs/common/g++-base.conf \
121 /usr/lib64/qt4/mkspecs/common/g++-unix.conf \
121 /usr/lib64/qt4/mkspecs/common/g++-unix.conf \
122 /usr/lib64/qt4/mkspecs/qconfig.pri \
122 /usr/lib64/qt4/mkspecs/qconfig.pri \
123 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
123 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
124 /usr/lib64/qt4/mkspecs/features/qt_functions.prf \
124 /usr/lib64/qt4/mkspecs/features/qt_functions.prf \
125 /usr/lib64/qt4/mkspecs/features/qt_config.prf \
125 /usr/lib64/qt4/mkspecs/features/qt_config.prf \
126 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
126 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
127 /usr/lib64/qt4/mkspecs/features/default_pre.prf \
127 /usr/lib64/qt4/mkspecs/features/default_pre.prf \
128 sparc.pri \
128 sparc.pri \
129 /usr/lib64/qt4/mkspecs/features/release.prf \
129 /usr/lib64/qt4/mkspecs/features/release.prf \
130 /usr/lib64/qt4/mkspecs/features/default_post.prf \
130 /usr/lib64/qt4/mkspecs/features/default_post.prf \
131 /usr/lib64/qt4/mkspecs/features/shared.prf \
131 /usr/lib64/qt4/mkspecs/features/shared.prf \
132 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
132 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
133 /usr/lib64/qt4/mkspecs/features/warn_on.prf \
133 /usr/lib64/qt4/mkspecs/features/warn_on.prf \
134 /usr/lib64/qt4/mkspecs/features/resources.prf \
134 /usr/lib64/qt4/mkspecs/features/resources.prf \
135 /usr/lib64/qt4/mkspecs/features/uic.prf \
135 /usr/lib64/qt4/mkspecs/features/uic.prf \
136 /usr/lib64/qt4/mkspecs/features/yacc.prf \
136 /usr/lib64/qt4/mkspecs/features/yacc.prf \
137 /usr/lib64/qt4/mkspecs/features/lex.prf \
137 /usr/lib64/qt4/mkspecs/features/lex.prf \
138 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf
138 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf
139 $(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
139 $(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
140 /usr/lib64/qt4/mkspecs/common/unix.conf:
140 /usr/lib64/qt4/mkspecs/common/unix.conf:
141 /usr/lib64/qt4/mkspecs/common/linux.conf:
141 /usr/lib64/qt4/mkspecs/common/linux.conf:
142 /usr/lib64/qt4/mkspecs/common/gcc-base.conf:
142 /usr/lib64/qt4/mkspecs/common/gcc-base.conf:
143 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf:
143 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf:
144 /usr/lib64/qt4/mkspecs/common/g++-base.conf:
144 /usr/lib64/qt4/mkspecs/common/g++-base.conf:
145 /usr/lib64/qt4/mkspecs/common/g++-unix.conf:
145 /usr/lib64/qt4/mkspecs/common/g++-unix.conf:
146 /usr/lib64/qt4/mkspecs/qconfig.pri:
146 /usr/lib64/qt4/mkspecs/qconfig.pri:
147 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri:
147 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri:
148 /usr/lib64/qt4/mkspecs/features/qt_functions.prf:
148 /usr/lib64/qt4/mkspecs/features/qt_functions.prf:
149 /usr/lib64/qt4/mkspecs/features/qt_config.prf:
149 /usr/lib64/qt4/mkspecs/features/qt_config.prf:
150 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf:
150 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf:
151 /usr/lib64/qt4/mkspecs/features/default_pre.prf:
151 /usr/lib64/qt4/mkspecs/features/default_pre.prf:
152 sparc.pri:
152 sparc.pri:
153 /usr/lib64/qt4/mkspecs/features/release.prf:
153 /usr/lib64/qt4/mkspecs/features/release.prf:
154 /usr/lib64/qt4/mkspecs/features/default_post.prf:
154 /usr/lib64/qt4/mkspecs/features/default_post.prf:
155 /usr/lib64/qt4/mkspecs/features/shared.prf:
155 /usr/lib64/qt4/mkspecs/features/shared.prf:
156 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf:
156 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf:
157 /usr/lib64/qt4/mkspecs/features/warn_on.prf:
157 /usr/lib64/qt4/mkspecs/features/warn_on.prf:
158 /usr/lib64/qt4/mkspecs/features/resources.prf:
158 /usr/lib64/qt4/mkspecs/features/resources.prf:
159 /usr/lib64/qt4/mkspecs/features/uic.prf:
159 /usr/lib64/qt4/mkspecs/features/uic.prf:
160 /usr/lib64/qt4/mkspecs/features/yacc.prf:
160 /usr/lib64/qt4/mkspecs/features/yacc.prf:
161 /usr/lib64/qt4/mkspecs/features/lex.prf:
161 /usr/lib64/qt4/mkspecs/features/lex.prf:
162 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf:
162 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf:
163 qmake: FORCE
163 qmake: FORCE
164 @$(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
164 @$(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
165
165
166 dist:
166 dist:
167 @$(CHK_DIR_EXISTS) obj/fsw1.0.0 || $(MKDIR) obj/fsw1.0.0
167 @$(CHK_DIR_EXISTS) obj/fsw1.0.0 || $(MKDIR) obj/fsw1.0.0
168 $(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
168 $(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
169
169
170
170
171 clean:compiler_clean
171 clean:compiler_clean
172 -$(DEL_FILE) $(OBJECTS)
172 -$(DEL_FILE) $(OBJECTS)
173 -$(DEL_FILE) *~ core *.core
173 -$(DEL_FILE) *~ core *.core
174
174
175
175
176 ####### Sub-libraries
176 ####### Sub-libraries
177
177
178 distclean: clean
178 distclean: clean
179 -$(DEL_FILE) $(TARGET)
179 -$(DEL_FILE) $(TARGET)
180 -$(DEL_FILE) Makefile
180 -$(DEL_FILE) Makefile
181
181
182
182
183 grmon:
183 grmon:
184 cd bin && C:/opt/grmon-eval-2.0.29b/win32/bin/grmon.exe -uart COM4 -u
184 cd bin && C:/opt/grmon-eval-2.0.29b/win32/bin/grmon.exe -uart COM4 -u
185
185
186 check: first
186 check: first
187
187
188 compiler_rcc_make_all:
188 compiler_rcc_make_all:
189 compiler_rcc_clean:
189 compiler_rcc_clean:
190 compiler_uic_make_all:
190 compiler_uic_make_all:
191 compiler_uic_clean:
191 compiler_uic_clean:
192 compiler_image_collection_make_all: qmake_image_collection.cpp
192 compiler_image_collection_make_all: qmake_image_collection.cpp
193 compiler_image_collection_clean:
193 compiler_image_collection_clean:
194 -$(DEL_FILE) qmake_image_collection.cpp
194 -$(DEL_FILE) qmake_image_collection.cpp
195 compiler_yacc_decl_make_all:
195 compiler_yacc_decl_make_all:
196 compiler_yacc_decl_clean:
196 compiler_yacc_decl_clean:
197 compiler_yacc_impl_make_all:
197 compiler_yacc_impl_make_all:
198 compiler_yacc_impl_clean:
198 compiler_yacc_impl_clean:
199 compiler_lex_make_all:
199 compiler_lex_make_all:
200 compiler_lex_clean:
200 compiler_lex_clean:
201 compiler_clean:
201 compiler_clean:
202
202
203 ####### Compile
203 ####### Compile
204
204
205 obj/wf_handler.o: ../src/wf_handler.c
205 obj/wf_handler.o: ../src/wf_handler.c
206 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/wf_handler.o ../src/wf_handler.c
206 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/wf_handler.o ../src/wf_handler.c
207
207
208 obj/tc_handler.o: ../src/tc_handler.c
208 obj/tc_handler.o: ../src/tc_handler.c
209 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tc_handler.o ../src/tc_handler.c
209 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tc_handler.o ../src/tc_handler.c
210
210
211 obj/fsw_processing.o: ../src/fsw_processing.c
211 obj/fsw_processing.o: ../src/fsw_processing.c
212 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_processing.o ../src/fsw_processing.c
212 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_processing.o ../src/fsw_processing.c
213
213
214 obj/fsw_misc.o: ../src/fsw_misc.c
214 obj/fsw_misc.o: ../src/fsw_misc.c
215 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_misc.o ../src/fsw_misc.c
215 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_misc.o ../src/fsw_misc.c
216
216
217 obj/fsw_init.o: ../src/fsw_init.c
217 obj/fsw_init.o: ../src/fsw_init.c
218 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_init.o ../src/fsw_init.c
218 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_init.o ../src/fsw_init.c
219
219
220 obj/fsw_globals.o: ../src/fsw_globals.c
220 obj/fsw_globals.o: ../src/fsw_globals.c
221 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_globals.o ../src/fsw_globals.c
221 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_globals.o ../src/fsw_globals.c
222
222
223 obj/fsw_spacewire.o: ../src/fsw_spacewire.c
223 obj/fsw_spacewire.o: ../src/fsw_spacewire.c
224 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_spacewire.o ../src/fsw_spacewire.c
224 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_spacewire.o ../src/fsw_spacewire.c
225
225
226 ####### Install
226 ####### Install
227
227
228 install: FORCE
228 install: FORCE
229
229
230 uninstall: FORCE
230 uninstall: FORCE
231
231
232 FORCE:
232 FORCE:
233
233
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -1,62 +1,62
1 TEMPLATE = app
1 TEMPLATE = app
2 # CONFIG += console v8 sim
2 # CONFIG += console v8 sim
3 # CONFIG options = verbose *** boot_messages *** debug_messages *** cpu_usage_report *** stack_report *** gsa
3 # CONFIG options = verbose *** boot_messages *** debug_messages *** cpu_usage_report *** stack_report *** gsa
4 CONFIG += console verbose
4 CONFIG += console verbose
5 CONFIG -= qt
5 CONFIG -= qt
6
6
7 include(./sparc.pri)
7 include(./sparc.pri)
8
8
9 # flight software version
9 # flight software version
10 SWVERSION=-0-13
10 SWVERSION=-0-14
11 DEFINES += SW_VERSION_N1=0
11 DEFINES += SW_VERSION_N1=0
12 DEFINES += SW_VERSION_N2=0
12 DEFINES += SW_VERSION_N2=0
13 DEFINES += SW_VERSION_N3=0
13 DEFINES += SW_VERSION_N3=0
14 DEFINES += SW_VERSION_N4=13
14 DEFINES += SW_VERSION_N4=14
15
15
16 contains( CONFIG, verbose ) {
16 contains( CONFIG, verbose ) {
17 DEFINES += PRINT_MESSAGES_ON_CONSOLE
17 DEFINES += PRINT_MESSAGES_ON_CONSOLE
18 }
18 }
19
19
20 contains( CONFIG, cpu_usage_report ) {
20 contains( CONFIG, cpu_usage_report ) {
21 DEFINES += PRINT_TASK_STATISTICS
21 DEFINES += PRINT_TASK_STATISTICS
22 }
22 }
23
23
24 contains( CONFIG, stack_report ) {
24 contains( CONFIG, stack_report ) {
25 DEFINES += PRINT_STACK_REPORT
25 DEFINES += PRINT_STACK_REPORT
26 }
26 }
27
27
28 contains( CONFIG, boot_messages ) {
28 contains( CONFIG, boot_messages ) {
29 DEFINES += BOOT_MESSAGES
29 DEFINES += BOOT_MESSAGES
30 }
30 }
31
31
32 TARGET = fsw
32 TARGET = fsw
33 contains( CONFIG, gsa ) {
33 contains( CONFIG, gsa ) {
34 DEFINES += GSA
34 DEFINES += GSA
35 TARGET = fsw-gsa
35 TARGET = fsw-gsa
36 }
36 }
37
37
38 INCLUDEPATH += \
38 INCLUDEPATH += \
39 ../src \
39 ../src \
40 ../header
40 ../header
41
41
42 SOURCES += \
42 SOURCES += \
43 ../src/wf_handler.c \
43 ../src/wf_handler.c \
44 ../src/tc_handler.c \
44 ../src/tc_handler.c \
45 ../src/fsw_processing.c \
45 ../src/fsw_processing.c \
46 ../src/fsw_misc.c \
46 ../src/fsw_misc.c \
47 ../src/fsw_init.c \
47 ../src/fsw_init.c \
48 ../src/fsw_globals.c \
48 ../src/fsw_globals.c \
49 ../src/fsw_spacewire.c
49 ../src/fsw_spacewire.c
50
50
51 HEADERS += \
51 HEADERS += \
52 ../header/wf_handler.h \
52 ../header/wf_handler.h \
53 ../header/tc_handler.h \
53 ../header/tc_handler.h \
54 ../header/grlib_regs.h \
54 ../header/grlib_regs.h \
55 ../header/fsw_processing.h \
55 ../header/fsw_processing.h \
56 ../header/fsw_params.h \
56 ../header/fsw_params.h \
57 ../header/fsw_misc.h \
57 ../header/fsw_misc.h \
58 ../header/fsw_init.h \
58 ../header/fsw_init.h \
59 ../header/ccsds_types.h \
59 ../header/ccsds_types.h \
60 ../header/fsw_params_processing.h \
60 ../header/fsw_params_processing.h \
61 ../header/fsw_spacewire.h
61 ../header/fsw_spacewire.h
62
62
@@ -1,257 +1,257
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 2.8.0, 2013-10-08T06:59:51. -->
3 <!-- Written by QtCreator 2.8.0, 2013-10-10T08:42:40. -->
4 <qtcreator>
4 <qtcreator>
5 <data>
5 <data>
6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
7 <value type="int">0</value>
7 <value type="int">0</value>
8 </data>
8 </data>
9 <data>
9 <data>
10 <variable>ProjectExplorer.Project.EditorSettings</variable>
10 <variable>ProjectExplorer.Project.EditorSettings</variable>
11 <valuemap type="QVariantMap">
11 <valuemap type="QVariantMap">
12 <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
12 <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
13 <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
13 <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
14 <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
14 <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
15 <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
15 <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
16 <value type="QString" key="language">Cpp</value>
16 <value type="QString" key="language">Cpp</value>
17 <valuemap type="QVariantMap" key="value">
17 <valuemap type="QVariantMap" key="value">
18 <value type="QString" key="CurrentPreferences">CppGlobal</value>
18 <value type="QString" key="CurrentPreferences">CppGlobal</value>
19 </valuemap>
19 </valuemap>
20 </valuemap>
20 </valuemap>
21 <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
21 <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
22 <value type="QString" key="language">QmlJS</value>
22 <value type="QString" key="language">QmlJS</value>
23 <valuemap type="QVariantMap" key="value">
23 <valuemap type="QVariantMap" key="value">
24 <value type="QString" key="CurrentPreferences">QmlJSGlobal</value>
24 <value type="QString" key="CurrentPreferences">QmlJSGlobal</value>
25 </valuemap>
25 </valuemap>
26 </valuemap>
26 </valuemap>
27 <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
27 <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
28 <value type="QByteArray" key="EditorConfiguration.Codec">System</value>
28 <value type="QByteArray" key="EditorConfiguration.Codec">System</value>
29 <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
29 <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
30 <value type="int" key="EditorConfiguration.IndentSize">4</value>
30 <value type="int" key="EditorConfiguration.IndentSize">4</value>
31 <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
31 <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
32 <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
32 <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
33 <value type="int" key="EditorConfiguration.PaddingMode">1</value>
33 <value type="int" key="EditorConfiguration.PaddingMode">1</value>
34 <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
34 <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
35 <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
35 <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
36 <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
36 <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
37 <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
37 <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
38 <value type="int" key="EditorConfiguration.TabSize">8</value>
38 <value type="int" key="EditorConfiguration.TabSize">8</value>
39 <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
39 <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
40 <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
40 <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
41 <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
41 <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
42 <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
42 <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
43 <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
43 <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
44 <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
44 <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
45 </valuemap>
45 </valuemap>
46 </data>
46 </data>
47 <data>
47 <data>
48 <variable>ProjectExplorer.Project.PluginSettings</variable>
48 <variable>ProjectExplorer.Project.PluginSettings</variable>
49 <valuemap type="QVariantMap"/>
49 <valuemap type="QVariantMap"/>
50 </data>
50 </data>
51 <data>
51 <data>
52 <variable>ProjectExplorer.Project.Target.0</variable>
52 <variable>ProjectExplorer.Project.Target.0</variable>
53 <valuemap type="QVariantMap">
53 <valuemap type="QVariantMap">
54 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop-Qt 4.8.2 in PATH (System)</value>
54 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop-Qt 4.8.2 in PATH (System)</value>
55 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop-Qt 4.8.2 in PATH (System)</value>
55 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop-Qt 4.8.2 in PATH (System)</value>
56 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{5289e843-9ef2-45ce-88c6-ad27d8e08def}</value>
56 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{5289e843-9ef2-45ce-88c6-ad27d8e08def}</value>
57 <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
57 <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
58 <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
58 <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
59 <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
59 <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
60 <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
60 <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
61 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
61 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
62 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
62 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
63 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
63 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
64 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
64 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
65 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
65 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
66 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
66 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
67 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
67 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
68 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
68 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
69 <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
69 <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
70 <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
70 <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
71 </valuemap>
71 </valuemap>
72 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
72 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
73 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
73 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
74 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
74 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
75 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
75 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
76 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
76 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
77 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
77 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
78 <value type="QString">-w</value>
78 <value type="QString">-w</value>
79 <value type="QString">-r</value>
79 <value type="QString">-r</value>
80 </valuelist>
80 </valuelist>
81 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
81 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
82 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">-r -w </value>
82 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">-r -w </value>
83 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
83 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
84 </valuemap>
84 </valuemap>
85 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
85 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
86 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
86 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
87 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
87 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
88 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
88 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
89 </valuemap>
89 </valuemap>
90 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
90 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
91 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
91 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
92 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
92 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
93 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
93 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
94 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
94 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
95 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
95 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
96 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
96 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
97 <value type="QString">-w</value>
97 <value type="QString">-w</value>
98 <value type="QString">-r</value>
98 <value type="QString">-r</value>
99 </valuelist>
99 </valuelist>
100 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
100 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
101 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">-r -w clean</value>
101 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">-r -w clean</value>
102 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
102 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
103 </valuemap>
103 </valuemap>
104 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
104 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
105 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
105 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
106 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
106 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
107 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
107 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
108 </valuemap>
108 </valuemap>
109 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
109 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
110 <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
110 <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
111 <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
111 <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
112 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.8.2 in PATH (System) Release</value>
112 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.8.2 in PATH (System) Release</value>
113 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
113 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
114 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
114 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
115 <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
115 <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
116 <value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/opt/DEV_PLE/FSW-qt</value>
116 <value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/opt/DEV_PLE/FSW-qt</value>
117 <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
117 <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
118 </valuemap>
118 </valuemap>
119 <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
119 <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
120 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
120 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
121 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
121 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
122 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
122 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
123 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
123 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
124 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
124 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
125 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
125 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
126 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
126 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
127 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
127 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
128 <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
128 <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
129 <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
129 <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
130 </valuemap>
130 </valuemap>
131 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
131 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
132 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
132 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
133 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
133 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
134 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
134 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
135 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
135 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
136 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
136 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
137 <value type="QString">-w</value>
137 <value type="QString">-w</value>
138 <value type="QString">-r</value>
138 <value type="QString">-r</value>
139 </valuelist>
139 </valuelist>
140 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
140 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
141 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">-r -w </value>
141 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">-r -w </value>
142 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
142 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
143 </valuemap>
143 </valuemap>
144 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
144 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
145 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
145 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
146 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
146 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
147 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
147 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
148 </valuemap>
148 </valuemap>
149 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
149 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
150 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
150 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
151 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
151 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
152 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
152 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
153 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
153 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
154 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
154 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
155 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
155 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
156 <value type="QString">-w</value>
156 <value type="QString">-w</value>
157 <value type="QString">-r</value>
157 <value type="QString">-r</value>
158 </valuelist>
158 </valuelist>
159 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
159 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
160 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">-r -w clean</value>
160 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">-r -w clean</value>
161 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
161 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
162 </valuemap>
162 </valuemap>
163 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
163 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
164 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
164 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
165 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
165 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
166 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
166 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
167 </valuemap>
167 </valuemap>
168 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
168 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
169 <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
169 <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
170 <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
170 <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
171 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.8.2 in PATH (System) Debug</value>
171 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.8.2 in PATH (System) Debug</value>
172 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
172 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
173 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
173 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
174 <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
174 <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
175 <value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/opt/DEV_PLE/FSW-qt</value>
175 <value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/opt/DEV_PLE/FSW-qt</value>
176 <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
176 <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
177 </valuemap>
177 </valuemap>
178 <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
178 <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
179 <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
179 <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
180 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
180 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
181 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
181 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
182 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
182 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
183 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
183 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
184 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
184 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
185 </valuemap>
185 </valuemap>
186 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
186 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
187 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">No deployment</value>
187 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">No deployment</value>
188 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
188 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
189 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
189 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
190 </valuemap>
190 </valuemap>
191 <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
191 <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
192 <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
192 <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
193 <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
193 <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
194 <value type="bool" key="Analyzer.Project.UseGlobal">true</value>
194 <value type="bool" key="Analyzer.Project.UseGlobal">true</value>
195 <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
195 <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
196 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
196 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
197 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
197 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
198 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
198 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
199 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
199 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
200 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
200 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
201 <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
201 <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
202 <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
202 <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
203 <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
203 <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
204 <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
204 <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
205 <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
205 <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
206 <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
206 <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
207 <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
207 <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
208 <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
208 <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
209 <value type="int">0</value>
209 <value type="int">0</value>
210 <value type="int">1</value>
210 <value type="int">1</value>
211 <value type="int">2</value>
211 <value type="int">2</value>
212 <value type="int">3</value>
212 <value type="int">3</value>
213 <value type="int">4</value>
213 <value type="int">4</value>
214 <value type="int">5</value>
214 <value type="int">5</value>
215 <value type="int">6</value>
215 <value type="int">6</value>
216 <value type="int">7</value>
216 <value type="int">7</value>
217 <value type="int">8</value>
217 <value type="int">8</value>
218 <value type="int">9</value>
218 <value type="int">9</value>
219 <value type="int">10</value>
219 <value type="int">10</value>
220 <value type="int">11</value>
220 <value type="int">11</value>
221 <value type="int">12</value>
221 <value type="int">12</value>
222 <value type="int">13</value>
222 <value type="int">13</value>
223 <value type="int">14</value>
223 <value type="int">14</value>
224 </valuelist>
224 </valuelist>
225 <value type="int" key="PE.EnvironmentAspect.Base">2</value>
225 <value type="int" key="PE.EnvironmentAspect.Base">2</value>
226 <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
226 <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
227 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">fsw-qt</value>
227 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">fsw-qt</value>
228 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
228 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
229 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/opt/DEV_PLE/FSW-qt/fsw-qt.pro</value>
229 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/opt/DEV_PLE/FSW-qt/fsw-qt.pro</value>
230 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
230 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
231 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">fsw-qt.pro</value>
231 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">fsw-qt.pro</value>
232 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
232 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
233 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">true</value>
233 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">true</value>
234 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
234 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
235 <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
235 <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
236 <value type="bool" key="RunConfiguration.UseCppDebugger">true</value>
236 <value type="bool" key="RunConfiguration.UseCppDebugger">true</value>
237 <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">false</value>
237 <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">false</value>
238 <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
238 <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
239 <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
239 <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
240 <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">false</value>
240 <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">false</value>
241 </valuemap>
241 </valuemap>
242 <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
242 <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
243 </valuemap>
243 </valuemap>
244 </data>
244 </data>
245 <data>
245 <data>
246 <variable>ProjectExplorer.Project.TargetCount</variable>
246 <variable>ProjectExplorer.Project.TargetCount</variable>
247 <value type="int">1</value>
247 <value type="int">1</value>
248 </data>
248 </data>
249 <data>
249 <data>
250 <variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
250 <variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
251 <value type="QByteArray">{2e58a81f-9962-4bba-ae6b-760177f0656c}</value>
251 <value type="QByteArray">{2e58a81f-9962-4bba-ae6b-760177f0656c}</value>
252 </data>
252 </data>
253 <data>
253 <data>
254 <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
254 <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
255 <value type="int">14</value>
255 <value type="int">14</value>
256 </data>
256 </data>
257 </qtcreator>
257 </qtcreator>
@@ -1,1414 +1,1410
1 #include <tc_handler.h>
1 #include <tc_handler.h>
2 #include <fsw_params.h>
2 #include <fsw_params.h>
3
3
4 char *DumbMessages[6] = {"in DUMB *** default", // RTEMS_EVENT_0
4 char *DumbMessages[6] = {"in DUMB *** default", // RTEMS_EVENT_0
5 "in DUMB *** timecode_irq_handler", // RTEMS_EVENT_1
5 "in DUMB *** timecode_irq_handler", // RTEMS_EVENT_1
6 "in DUMB *** waveforms_isr", // RTEMS_EVENT_2
6 "in DUMB *** waveforms_isr", // RTEMS_EVENT_2
7 "in DUMB *** in SMIQ *** Error sending event to AVF0", // RTEMS_EVENT_3
7 "in DUMB *** in SMIQ *** Error sending event to AVF0", // RTEMS_EVENT_3
8 "in DUMB *** spectral_matrices_isr *** Error sending event to SMIQ", // RTEMS_EVENT_4
8 "in DUMB *** spectral_matrices_isr *** Error sending event to SMIQ", // RTEMS_EVENT_4
9 "in DUMB *** waveforms_simulator_isr" // RTEMS_EVENT_5
9 "in DUMB *** waveforms_simulator_isr" // RTEMS_EVENT_5
10 };
10 };
11
11
12 unsigned char currentTC_LEN_RCV[2]; // SHALL be equal to the current TC packet estimated packet length field
12 unsigned char currentTC_LEN_RCV[2]; // SHALL be equal to the current TC packet estimated packet length field
13 unsigned char currentTC_COMPUTED_CRC[2];
13 unsigned char currentTC_COMPUTED_CRC[2];
14 unsigned int currentTC_LEN_RCV_AsUnsignedInt;
14 unsigned int currentTC_LEN_RCV_AsUnsignedInt;
15 unsigned int currentTM_length;
15 unsigned int currentTM_length;
16 unsigned char currentTC_processedFlag;
16 unsigned char currentTC_processedFlag;
17
17
18 unsigned int lookUpTableForCRC[256];
18 unsigned int lookUpTableForCRC[256];
19
19
20 //**********************
20 //**********************
21 // GENERAL USE FUNCTIONS
21 // GENERAL USE FUNCTIONS
22 unsigned int Crc_opt( unsigned char D, unsigned int Chk)
22 unsigned int Crc_opt( unsigned char D, unsigned int Chk)
23 {
23 {
24 return(((Chk << 8) & 0xff00)^lookUpTableForCRC [(((Chk >> 8)^D) & 0x00ff)]);
24 return(((Chk << 8) & 0xff00)^lookUpTableForCRC [(((Chk >> 8)^D) & 0x00ff)]);
25 }
25 }
26
26
27 void initLookUpTableForCRC( void )
27 void initLookUpTableForCRC( void )
28 {
28 {
29 unsigned int i;
29 unsigned int i;
30 unsigned int tmp;
30 unsigned int tmp;
31
31
32 for (i=0; i<256; i++)
32 for (i=0; i<256; i++)
33 {
33 {
34 tmp = 0;
34 tmp = 0;
35 if((i & 1) != 0) {
35 if((i & 1) != 0) {
36 tmp = tmp ^ 0x1021;
36 tmp = tmp ^ 0x1021;
37 }
37 }
38 if((i & 2) != 0) {
38 if((i & 2) != 0) {
39 tmp = tmp ^ 0x2042;
39 tmp = tmp ^ 0x2042;
40 }
40 }
41 if((i & 4) != 0) {
41 if((i & 4) != 0) {
42 tmp = tmp ^ 0x4084;
42 tmp = tmp ^ 0x4084;
43 }
43 }
44 if((i & 8) != 0) {
44 if((i & 8) != 0) {
45 tmp = tmp ^ 0x8108;
45 tmp = tmp ^ 0x8108;
46 }
46 }
47 if((i & 16) != 0) {
47 if((i & 16) != 0) {
48 tmp = tmp ^ 0x1231;
48 tmp = tmp ^ 0x1231;
49 }
49 }
50 if((i & 32) != 0) {
50 if((i & 32) != 0) {
51 tmp = tmp ^ 0x2462;
51 tmp = tmp ^ 0x2462;
52 }
52 }
53 if((i & 64) != 0) {
53 if((i & 64) != 0) {
54 tmp = tmp ^ 0x48c4;
54 tmp = tmp ^ 0x48c4;
55 }
55 }
56 if((i & 128) != 0) {
56 if((i & 128) != 0) {
57 tmp = tmp ^ 0x9188;
57 tmp = tmp ^ 0x9188;
58 }
58 }
59 lookUpTableForCRC[i] = tmp;
59 lookUpTableForCRC[i] = tmp;
60 }
60 }
61 }
61 }
62
62
63 void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData)
63 void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData)
64 {
64 {
65 unsigned int Chk;
65 unsigned int Chk;
66 int j;
66 int j;
67 Chk = 0xffff; // reset the syndrom to all ones
67 Chk = 0xffff; // reset the syndrom to all ones
68 for (j=0; j<sizeOfData; j++) {
68 for (j=0; j<sizeOfData; j++) {
69 Chk = Crc_opt(data[j], Chk);
69 Chk = Crc_opt(data[j], Chk);
70 }
70 }
71 crcAsTwoBytes[0] = (unsigned char) (Chk >> 8);
71 crcAsTwoBytes[0] = (unsigned char) (Chk >> 8);
72 crcAsTwoBytes[1] = (unsigned char) (Chk & 0x00ff);
72 crcAsTwoBytes[1] = (unsigned char) (Chk & 0x00ff);
73 }
73 }
74
74
75 void updateLFRCurrentMode()
75 void updateLFRCurrentMode()
76 {
76 {
77 lfrCurrentMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
77 lfrCurrentMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
78 }
78 }
79
79
80 //*********************
80 //*********************
81 // ACCEPTANCE FUNCTIONS
81 // ACCEPTANCE FUNCTIONS
82 int TC_acceptance(ccsdsTelecommandPacket_t *TC, unsigned int tc_len_recv, rtems_id queue_id)
82 int TC_acceptance(ccsdsTelecommandPacket_t *TC, unsigned int tc_len_recv, rtems_id queue_id)
83 {
83 {
84 int ret = 0;
84 int ret = 0;
85 rtems_status_code status;
85 rtems_status_code status;
86 Packet_TM_LFR_TC_EXE_CORRUPTED_t packet;
86 Packet_TM_LFR_TC_EXE_CORRUPTED_t packet;
87 unsigned int parserCode = 0;
87 unsigned int parserCode = 0;
88 unsigned char computed_CRC[2];
88 unsigned char computed_CRC[2];
89 unsigned int packetLength;
89 unsigned int packetLength;
90
90
91 GetCRCAsTwoBytes( (unsigned char*) TC->packetID, computed_CRC, tc_len_recv + 5 );
91 GetCRCAsTwoBytes( (unsigned char*) TC->packetID, computed_CRC, tc_len_recv + 5 );
92 parserCode = TC_parser( TC, tc_len_recv ) ;
92 parserCode = TC_parser( TC, tc_len_recv ) ;
93 if ( (parserCode == ILLEGAL_APID) | (parserCode == WRONG_LEN_PACKET) | (parserCode == INCOR_CHECKSUM)
93 if ( (parserCode == ILLEGAL_APID) | (parserCode == WRONG_LEN_PACKET) | (parserCode == INCOR_CHECKSUM)
94 | (parserCode == ILL_TYPE) | (parserCode == ILL_SUBTYPE) | (parserCode == WRONG_APP_DATA) )
94 | (parserCode == ILL_TYPE) | (parserCode == ILL_SUBTYPE) | (parserCode == WRONG_APP_DATA) )
95 { // generate TM_LFR_TC_EXE_CORRUPTED
95 { // generate TM_LFR_TC_EXE_CORRUPTED
96 packetLength = (TC->packetLength[0] * 256) + TC->packetLength[1];
96 packetLength = (TC->packetLength[0] * 256) + TC->packetLength[1];
97 packet.targetLogicalAddress = CCSDS_DESTINATION_ID;
97 packet.targetLogicalAddress = CCSDS_DESTINATION_ID;
98 packet.protocolIdentifier = CCSDS_PROTOCOLE_ID;
98 packet.protocolIdentifier = CCSDS_PROTOCOLE_ID;
99 packet.reserved = DEFAULT_RESERVED;
99 packet.reserved = DEFAULT_RESERVED;
100 packet.userApplication = CCSDS_USER_APP;
100 packet.userApplication = CCSDS_USER_APP;
101 // PACKET HEADER
101 // PACKET HEADER
102 packet.packetID[0] = (unsigned char) (TM_PACKET_ID_TC_EXE >> 8);
102 packet.packetID[0] = (unsigned char) (TM_PACKET_ID_TC_EXE >> 8);
103 packet.packetID[1] = (unsigned char) (TM_PACKET_ID_TC_EXE );
103 packet.packetID[1] = (unsigned char) (TM_PACKET_ID_TC_EXE );
104 packet.packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_STANDALONE;
104 packet.packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_STANDALONE;
105 packet.packetSequenceControl[1] = TM_PACKET_SEQ_CNT_DEFAULT;
105 packet.packetSequenceControl[1] = TM_PACKET_SEQ_CNT_DEFAULT;
106 packet.packetLength[0] = (unsigned char) (PACKET_LENGTH_TC_EXE_CORRUPTED >> 8);
106 packet.packetLength[0] = (unsigned char) (PACKET_LENGTH_TC_EXE_CORRUPTED >> 8);
107 packet.packetLength[1] = (unsigned char) (PACKET_LENGTH_TC_EXE_CORRUPTED );
107 packet.packetLength[1] = (unsigned char) (PACKET_LENGTH_TC_EXE_CORRUPTED );
108 // DATA FIELD HEADER
108 // DATA FIELD HEADER
109 packet.spare1_pusVersion_spare2 = DEFAULT_SPARE1_PUSVERSION_SPARE2;
109 packet.spare1_pusVersion_spare2 = DEFAULT_SPARE1_PUSVERSION_SPARE2;
110 packet.serviceType = TM_TYPE_TC_EXE;
110 packet.serviceType = TM_TYPE_TC_EXE;
111 packet.serviceSubType = TM_SUBTYPE_EXE_NOK;
111 packet.serviceSubType = TM_SUBTYPE_EXE_NOK;
112 packet.destinationID = TM_DESTINATION_ID_GROUND;
112 packet.destinationID = TM_DESTINATION_ID_GROUND;
113 packet.time[0] = (time_management_regs->coarse_time>>24 );
113 packet.time[0] = (time_management_regs->coarse_time>>24 );
114 packet.time[1] = (time_management_regs->coarse_time>>16 );
114 packet.time[1] = (time_management_regs->coarse_time>>16 );
115 packet.time[2] = (time_management_regs->coarse_time>>8 );
115 packet.time[2] = (time_management_regs->coarse_time>>8 );
116 packet.time[3] = (time_management_regs->coarse_time );
116 packet.time[3] = (time_management_regs->coarse_time );
117 packet.time[4] = (time_management_regs->fine_time>>8 );
117 packet.time[4] = (time_management_regs->fine_time>>8 );
118 packet.time[5] = (time_management_regs->fine_time );
118 packet.time[5] = (time_management_regs->fine_time );
119 //
119 //
120 packet.tc_failure_code[0] = (unsigned char) (FAILURE_CODE_CORRUPTED >> 8);
120 packet.tc_failure_code[0] = (unsigned char) (FAILURE_CODE_CORRUPTED >> 8);
121 packet.tc_failure_code[1] = (unsigned char) (FAILURE_CODE_CORRUPTED );
121 packet.tc_failure_code[1] = (unsigned char) (FAILURE_CODE_CORRUPTED );
122 packet.telecommand_pkt_id[0] = TC->packetID[0];
122 packet.telecommand_pkt_id[0] = TC->packetID[0];
123 packet.telecommand_pkt_id[1] = TC->packetID[1];
123 packet.telecommand_pkt_id[1] = TC->packetID[1];
124 packet.pkt_seq_control[0] = TC->packetSequenceControl[0];
124 packet.pkt_seq_control[0] = TC->packetSequenceControl[0];
125 packet.pkt_seq_control[0] = TC->packetSequenceControl[1];
125 packet.pkt_seq_control[0] = TC->packetSequenceControl[1];
126 packet.tc_service = TC->serviceType;
126 packet.tc_service = TC->serviceType;
127 packet.tc_subtype = TC->serviceSubType;
127 packet.tc_subtype = TC->serviceSubType;
128 packet.pkt_len_rcv_value[0] = TC->packetLength[0];
128 packet.pkt_len_rcv_value[0] = TC->packetLength[0];
129 packet.pkt_len_rcv_value[1] = TC->packetLength[1];
129 packet.pkt_len_rcv_value[1] = TC->packetLength[1];
130 packet.pkt_datafieldsize_cnt[0] = currentTC_LEN_RCV[0];
130 packet.pkt_datafieldsize_cnt[0] = currentTC_LEN_RCV[0];
131 packet.pkt_datafieldsize_cnt[1] = currentTC_LEN_RCV[1];
131 packet.pkt_datafieldsize_cnt[1] = currentTC_LEN_RCV[1];
132 packet.rcv_crc[0] = TC->dataAndCRC[packetLength];
132 packet.rcv_crc[0] = TC->dataAndCRC[packetLength];
133 packet.rcv_crc[1] = TC->dataAndCRC[packetLength];
133 packet.rcv_crc[1] = TC->dataAndCRC[packetLength];
134 packet.computed_crc[0] = computed_CRC[0];
134 packet.computed_crc[0] = computed_CRC[0];
135 packet.computed_crc[1] = computed_CRC[1];
135 packet.computed_crc[1] = computed_CRC[1];
136 // SEND PACKET
136 // SEND PACKET
137 status = write( fdSPW, (char *) &packet, PACKET_LENGTH_TC_EXE_CORRUPTED + CCSDS_TC_TM_PACKET_OFFSET + 4);
137 status = write( fdSPW, (char *) &packet, PACKET_LENGTH_TC_EXE_CORRUPTED + CCSDS_TC_TM_PACKET_OFFSET + 4);
138 }
138 }
139 else { // send valid TC to the action launcher
139 else { // send valid TC to the action launcher
140 status = rtems_message_queue_send( queue_id, TC, tc_len_recv + CCSDS_TC_TM_PACKET_OFFSET + 3);
140 status = rtems_message_queue_send( queue_id, TC, tc_len_recv + CCSDS_TC_TM_PACKET_OFFSET + 3);
141 ret = -1;
141 ret = -1;
142 }
142 }
143 return ret;
143 return ret;
144 }
144 }
145
145
146 unsigned char TC_parser(ccsdsTelecommandPacket_t * TMPacket, unsigned int TC_LEN_RCV)
146 unsigned char TC_parser(ccsdsTelecommandPacket_t * TMPacket, unsigned int TC_LEN_RCV)
147 {
147 {
148 unsigned char ret = 0;
148 unsigned char ret = 0;
149 unsigned char pid = 0;
149 unsigned char pid = 0;
150 unsigned char category = 0;
150 unsigned char category = 0;
151 unsigned int length = 0;
151 unsigned int length = 0;
152 unsigned char packetType = 0;
152 unsigned char packetType = 0;
153 unsigned char packetSubtype = 0;
153 unsigned char packetSubtype = 0;
154 unsigned char * CCSDSContent = NULL;
154 unsigned char * CCSDSContent = NULL;
155
155
156 // APID check *** APID on 2 bytes
156 // APID check *** APID on 2 bytes
157 pid = ((TMPacket->packetID[0] & 0x07)<<4) + ( (TMPacket->packetID[1]>>4) & 0x0f ); // PID = 11 *** 7 bits xxxxx210 7654xxxx
157 pid = ((TMPacket->packetID[0] & 0x07)<<4) + ( (TMPacket->packetID[1]>>4) & 0x0f ); // PID = 11 *** 7 bits xxxxx210 7654xxxx
158 category = (TMPacket->packetID[1] & 0x0f); // PACKET_CATEGORY = 12 *** 4 bits xxxxxxxx xxxx3210
158 category = (TMPacket->packetID[1] & 0x0f); // PACKET_CATEGORY = 12 *** 4 bits xxxxxxxx xxxx3210
159 length = (TMPacket->packetLength[0] * 256) + TMPacket->packetLength[1];
159 length = (TMPacket->packetLength[0] * 256) + TMPacket->packetLength[1];
160 packetType = TMPacket->serviceType;
160 packetType = TMPacket->serviceType;
161 packetSubtype = TMPacket->serviceSubType;
161 packetSubtype = TMPacket->serviceSubType;
162
162
163 if ( pid != CCSDS_PROCESS_ID ) {
163 if ( pid != CCSDS_PROCESS_ID ) {
164 ret = ILLEGAL_APID;
164 ret = ILLEGAL_APID;
165 }
165 }
166 else if ( category != CCSDS_PACKET_CATEGORY ) {
166 else if ( category != CCSDS_PACKET_CATEGORY ) {
167 ret = ILLEGAL_APID;
167 ret = ILLEGAL_APID;
168 }
168 }
169 else if (length != TC_LEN_RCV ) { // packet length check
169 else if (length != TC_LEN_RCV ) { // packet length check
170 ret = WRONG_LEN_PACKET; // LEN RCV != SIZE FIELD
170 ret = WRONG_LEN_PACKET; // LEN RCV != SIZE FIELD
171 }
171 }
172 else if ( length >= CCSDS_TC_PKT_MAX_SIZE ) {
172 else if ( length >= CCSDS_TC_PKT_MAX_SIZE ) {
173 ret = WRONG_LEN_PACKET; // check that the packet does not exceed the MAX size
173 ret = WRONG_LEN_PACKET; // check that the packet does not exceed the MAX size
174 }
174 }
175 else if ( packetType == TC_TYPE_GEN ){ // service type, subtype and packet length check
175 else if ( packetType == TC_TYPE_GEN ){ // service type, subtype and packet length check
176 switch(packetSubtype){ //subtype, autorized values are 3, 20, 21, 24, 27, 28, 30, 40, 50, 60, 61
176 switch(packetSubtype){ //subtype, autorized values are 3, 20, 21, 24, 27, 28, 30, 40, 50, 60, 61
177 case TC_SUBTYPE_RESET:
177 case TC_SUBTYPE_RESET:
178 if (length!=(TC_LEN_RESET-CCSDS_TC_TM_PACKET_OFFSET)) {
178 if (length!=(TC_LEN_RESET-CCSDS_TC_TM_PACKET_OFFSET)) {
179 ret = WRONG_LEN_PACKET;
179 ret = WRONG_LEN_PACKET;
180 }
180 }
181 else {
181 else {
182 ret = CCSDS_TM_VALID;
182 ret = CCSDS_TM_VALID;
183 }
183 }
184 break;
184 break;
185 case TC_SUBTYPE_LOAD_COMM:
185 case TC_SUBTYPE_LOAD_COMM:
186 if (length!=(TC_LEN_LOAD_COMM-CCSDS_TC_TM_PACKET_OFFSET)) {
186 if (length!=(TC_LEN_LOAD_COMM-CCSDS_TC_TM_PACKET_OFFSET)) {
187 ret = WRONG_LEN_PACKET;
187 ret = WRONG_LEN_PACKET;
188 }
188 }
189 else {
189 else {
190 ret = CCSDS_TM_VALID;
190 ret = CCSDS_TM_VALID;
191 }
191 }
192 break;
192 break;
193 case TC_SUBTYPE_LOAD_NORM:
193 case TC_SUBTYPE_LOAD_NORM:
194 if (length!=(TC_LEN_LOAD_NORM-CCSDS_TC_TM_PACKET_OFFSET)) {
194 if (length!=(TC_LEN_LOAD_NORM-CCSDS_TC_TM_PACKET_OFFSET)) {
195 ret = WRONG_LEN_PACKET;
195 ret = WRONG_LEN_PACKET;
196 }
196 }
197 else {
197 else {
198 ret = CCSDS_TM_VALID;
198 ret = CCSDS_TM_VALID;
199 }
199 }
200 break;
200 break;
201 case TC_SUBTYPE_LOAD_BURST:
201 case TC_SUBTYPE_LOAD_BURST:
202 if (length!=(TC_LEN_LOAD_BURST-CCSDS_TC_TM_PACKET_OFFSET)) {
202 if (length!=(TC_LEN_LOAD_BURST-CCSDS_TC_TM_PACKET_OFFSET)) {
203 ret = WRONG_LEN_PACKET;
203 ret = WRONG_LEN_PACKET;
204 }
204 }
205 else {
205 else {
206 ret = CCSDS_TM_VALID;
206 ret = CCSDS_TM_VALID;
207 }
207 }
208 break;
208 break;
209 case TC_SUBTYPE_LOAD_SBM1:
209 case TC_SUBTYPE_LOAD_SBM1:
210 if (length!=(TC_LEN_LOAD_SBM1-CCSDS_TC_TM_PACKET_OFFSET)) {
210 if (length!=(TC_LEN_LOAD_SBM1-CCSDS_TC_TM_PACKET_OFFSET)) {
211 ret = WRONG_LEN_PACKET;
211 ret = WRONG_LEN_PACKET;
212 }
212 }
213 else {
213 else {
214 ret = CCSDS_TM_VALID;
214 ret = CCSDS_TM_VALID;
215 }
215 }
216 break;
216 break;
217 case TC_SUBTYPE_LOAD_SBM2:
217 case TC_SUBTYPE_LOAD_SBM2:
218 if (length!=(TC_LEN_LOAD_SBM2-CCSDS_TC_TM_PACKET_OFFSET)) {
218 if (length!=(TC_LEN_LOAD_SBM2-CCSDS_TC_TM_PACKET_OFFSET)) {
219 ret = WRONG_LEN_PACKET;
219 ret = WRONG_LEN_PACKET;
220 }
220 }
221 else {
221 else {
222 ret = CCSDS_TM_VALID;
222 ret = CCSDS_TM_VALID;
223 }
223 }
224 break;
224 break;
225 case TC_SUBTYPE_DUMP:
225 case TC_SUBTYPE_DUMP:
226 if (length!=(TC_LEN_DUMP-CCSDS_TC_TM_PACKET_OFFSET)) {
226 if (length!=(TC_LEN_DUMP-CCSDS_TC_TM_PACKET_OFFSET)) {
227 ret = WRONG_LEN_PACKET;
227 ret = WRONG_LEN_PACKET;
228 }
228 }
229 else {
229 else {
230 ret = CCSDS_TM_VALID;
230 ret = CCSDS_TM_VALID;
231 }
231 }
232 break;
232 break;
233 case TC_SUBTYPE_ENTER:
233 case TC_SUBTYPE_ENTER:
234 if (length!=(TC_LEN_ENTER-CCSDS_TC_TM_PACKET_OFFSET)) {
234 if (length!=(TC_LEN_ENTER-CCSDS_TC_TM_PACKET_OFFSET)) {
235 ret = WRONG_LEN_PACKET;
235 ret = WRONG_LEN_PACKET;
236 }
236 }
237 else {
237 else {
238 ret = CCSDS_TM_VALID;
238 ret = CCSDS_TM_VALID;
239 }
239 }
240 break;
240 break;
241 case TC_SUBTYPE_UPDT_INFO:
241 case TC_SUBTYPE_UPDT_INFO:
242 if (length!=(TC_LEN_UPDT_INFO-CCSDS_TC_TM_PACKET_OFFSET)) {
242 if (length!=(TC_LEN_UPDT_INFO-CCSDS_TC_TM_PACKET_OFFSET)) {
243 ret = WRONG_LEN_PACKET;
243 ret = WRONG_LEN_PACKET;
244 }
244 }
245 else {
245 else {
246 ret = CCSDS_TM_VALID;
246 ret = CCSDS_TM_VALID;
247 }
247 }
248 break;
248 break;
249 case TC_SUBTYPE_EN_CAL:
249 case TC_SUBTYPE_EN_CAL:
250 if (length!=(TC_LEN_EN_CAL-CCSDS_TC_TM_PACKET_OFFSET)) {
250 if (length!=(TC_LEN_EN_CAL-CCSDS_TC_TM_PACKET_OFFSET)) {
251 ret = WRONG_LEN_PACKET;
251 ret = WRONG_LEN_PACKET;
252 }
252 }
253 else {
253 else {
254 ret = CCSDS_TM_VALID;
254 ret = CCSDS_TM_VALID;
255 }
255 }
256 break;
256 break;
257 case TC_SUBTYPE_DIS_CAL:
257 case TC_SUBTYPE_DIS_CAL:
258 if (length!=(TC_LEN_DIS_CAL-CCSDS_TC_TM_PACKET_OFFSET)) {
258 if (length!=(TC_LEN_DIS_CAL-CCSDS_TC_TM_PACKET_OFFSET)) {
259 ret = WRONG_LEN_PACKET;
259 ret = WRONG_LEN_PACKET;
260 }
260 }
261 else {
261 else {
262 ret = CCSDS_TM_VALID;
262 ret = CCSDS_TM_VALID;
263 }
263 }
264 break;
264 break;
265 default:
265 default:
266 ret = ILL_SUBTYPE;
266 ret = ILL_SUBTYPE;
267 break;
267 break;
268 }
268 }
269 }
269 }
270 else if ( packetType == TC_TYPE_TIME ){
270 else if ( packetType == TC_TYPE_TIME ){
271 if (packetSubtype!=TC_SUBTYPE_UPDT_TIME) {
271 if (packetSubtype!=TC_SUBTYPE_UPDT_TIME) {
272 ret = ILL_SUBTYPE;
272 ret = ILL_SUBTYPE;
273 }
273 }
274 else if (length!=(TC_LEN_UPDT_TIME-CCSDS_TC_TM_PACKET_OFFSET)) {
274 else if (length!=(TC_LEN_UPDT_TIME-CCSDS_TC_TM_PACKET_OFFSET)) {
275 ret = WRONG_LEN_PACKET;
275 ret = WRONG_LEN_PACKET;
276 }
276 }
277 else {
277 else {
278 ret = CCSDS_TM_VALID;
278 ret = CCSDS_TM_VALID;
279 }
279 }
280 }
280 }
281 else {
281 else {
282 ret = ILL_TYPE;
282 ret = ILL_TYPE;
283 }
283 }
284
284
285 // source ID check // Source ID not documented in the ICD
285 // source ID check // Source ID not documented in the ICD
286
286
287 // packet error control, CRC check
287 // packet error control, CRC check
288 if ( ret == CCSDS_TM_VALID ) {
288 if ( ret == CCSDS_TM_VALID ) {
289 CCSDSContent = (unsigned char*) TMPacket->packetID;
289 CCSDSContent = (unsigned char*) TMPacket->packetID;
290 GetCRCAsTwoBytes(CCSDSContent, currentTC_COMPUTED_CRC, length + CCSDS_TC_TM_PACKET_OFFSET - 2); // 2 CRC bytes removed from the calculation of the CRC
290 GetCRCAsTwoBytes(CCSDSContent, currentTC_COMPUTED_CRC, length + CCSDS_TC_TM_PACKET_OFFSET - 2); // 2 CRC bytes removed from the calculation of the CRC
291 if (currentTC_COMPUTED_CRC[0] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -2]) {
291 if (currentTC_COMPUTED_CRC[0] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -2]) {
292 ret = INCOR_CHECKSUM;
292 ret = INCOR_CHECKSUM;
293 }
293 }
294 else if (currentTC_COMPUTED_CRC[1] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -1]) {
294 else if (currentTC_COMPUTED_CRC[1] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -1]) {
295 ret = INCOR_CHECKSUM;
295 ret = INCOR_CHECKSUM;
296 }
296 }
297 else {
297 else {
298 ret = CCSDS_TM_VALID;
298 ret = CCSDS_TM_VALID;
299 }
299 }
300 }
300 }
301
301
302 return ret;
302 return ret;
303 }
303 }
304
304
305 unsigned char TM_build_header( enum TM_TYPE tm_type, unsigned int packetLength,
305 unsigned char TM_build_header( enum TM_TYPE tm_type, unsigned int packetLength,
306 TMHeader_t *TMHeader, unsigned char tc_sid)
306 TMHeader_t *TMHeader, unsigned char tc_sid)
307 {
307 {
308 TMHeader->targetLogicalAddress = CCSDS_DESTINATION_ID;
308 TMHeader->targetLogicalAddress = CCSDS_DESTINATION_ID;
309 TMHeader->protocolIdentifier = CCSDS_PROTOCOLE_ID;
309 TMHeader->protocolIdentifier = CCSDS_PROTOCOLE_ID;
310 TMHeader->reserved = 0x00;
310 TMHeader->reserved = 0x00;
311 TMHeader->userApplication = 0x00;
311 TMHeader->userApplication = 0x00;
312 TMHeader->packetID[0] = 0x0c;
312 TMHeader->packetID[0] = 0x0c;
313 TMHeader->packetSequenceControl[0] = 0xc0;
313 TMHeader->packetSequenceControl[0] = 0xc0;
314 TMHeader->packetSequenceControl[1] = 0x00;
314 TMHeader->packetSequenceControl[1] = 0x00;
315 TMHeader->packetLength[0] = (unsigned char) (packetLength>>8);
315 TMHeader->packetLength[0] = (unsigned char) (packetLength>>8);
316 TMHeader->packetLength[1] = (unsigned char) packetLength;
316 TMHeader->packetLength[1] = (unsigned char) packetLength;
317 TMHeader->spare1_pusVersion_spare2 = 0x10;
317 TMHeader->spare1_pusVersion_spare2 = 0x10;
318 TMHeader->destinationID = TM_DESTINATION_ID_GROUND; // default destination id
318 TMHeader->destinationID = TM_DESTINATION_ID_GROUND; // default destination id
319 switch (tm_type){
319 switch (tm_type){
320 case(TM_LFR_TC_EXE_OK):
320 case(TM_LFR_TC_EXE_OK):
321 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_TC_EXE;
321 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_TC_EXE;
322 TMHeader->serviceType = TM_TYPE_TC_EXE; // type
322 TMHeader->serviceType = TM_TYPE_TC_EXE; // type
323 TMHeader->serviceSubType = TM_SUBTYPE_EXE_OK; // subtype
323 TMHeader->serviceSubType = TM_SUBTYPE_EXE_OK; // subtype
324 TMHeader->destinationID = tc_sid; // destination id
324 TMHeader->destinationID = tc_sid; // destination id
325 break;
325 break;
326 case(TM_LFR_TC_EXE_ERR):
326 case(TM_LFR_TC_EXE_ERR):
327 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_TC_EXE;
327 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_TC_EXE;
328 TMHeader->serviceType = TM_TYPE_TC_EXE; // type
328 TMHeader->serviceType = TM_TYPE_TC_EXE; // type
329 TMHeader->serviceSubType = TM_SUBTYPE_EXE_NOK; // subtype
329 TMHeader->serviceSubType = TM_SUBTYPE_EXE_NOK; // subtype
330 TMHeader->destinationID = tc_sid;
330 TMHeader->destinationID = tc_sid;
331 break;
331 break;
332 case(TM_LFR_HK):
332 case(TM_LFR_HK):
333 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_HK;
333 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_HK;
334 TMHeader->serviceType = TM_TYPE_HK; // type
334 TMHeader->serviceType = TM_TYPE_HK; // type
335 TMHeader->serviceSubType = TM_SUBTYPE_HK; // subtype
335 TMHeader->serviceSubType = TM_SUBTYPE_HK; // subtype
336 break;
336 break;
337 case(TM_LFR_SCI):
337 case(TM_LFR_SCI):
338 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_SCIENCE_NORMAL_BURST;
338 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_SCIENCE_NORMAL_BURST;
339 TMHeader->serviceType = TM_TYPE_LFR_SCIENCE; // type
339 TMHeader->serviceType = TM_TYPE_LFR_SCIENCE; // type
340 TMHeader->serviceSubType = TM_SUBTYPE_SCIENCE; // subtype
340 TMHeader->serviceSubType = TM_SUBTYPE_SCIENCE; // subtype
341 break;
341 break;
342 case(TM_LFR_SCI_SBM):
342 case(TM_LFR_SCI_SBM):
343 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_SCIENCE_SBM1_SBM2;
343 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_SCIENCE_SBM1_SBM2;
344 TMHeader->serviceType = TM_TYPE_LFR_SCIENCE; // type
344 TMHeader->serviceType = TM_TYPE_LFR_SCIENCE; // type
345 TMHeader->serviceSubType = TM_SUBTYPE_SCIENCE; // subtype
345 TMHeader->serviceSubType = TM_SUBTYPE_SCIENCE; // subtype
346 break;
346 break;
347 case(TM_LFR_PAR_DUMP):
347 case(TM_LFR_PAR_DUMP):
348 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_PARAMETER_DUMP;
348 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_PARAMETER_DUMP;
349 TMHeader->serviceType = TM_TYPE_HK; // type
349 TMHeader->serviceType = TM_TYPE_HK; // type
350 TMHeader->serviceSubType = TM_SUBTYPE_HK; // subtype
350 TMHeader->serviceSubType = TM_SUBTYPE_HK; // subtype
351 break;
351 break;
352 default:
352 default:
353 return 0;
353 return 0;
354 }
354 }
355 TMHeader->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
355 TMHeader->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
356 TMHeader->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
356 TMHeader->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
357 TMHeader->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
357 TMHeader->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
358 TMHeader->time[3] = (unsigned char) (time_management_regs->coarse_time);
358 TMHeader->time[3] = (unsigned char) (time_management_regs->coarse_time);
359 TMHeader->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
359 TMHeader->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
360 TMHeader->time[5] = (unsigned char) (time_management_regs->fine_time);
360 TMHeader->time[5] = (unsigned char) (time_management_regs->fine_time);
361
361
362 return LFR_SUCCESSFUL;
362 return LFR_SUCCESSFUL;
363 }
363 }
364
364
365 //***********
365 //***********
366 // RTEMS TASK
366 // RTEMS TASK
367 rtems_task recv_task( rtems_task_argument unused )
367 rtems_task recv_task( rtems_task_argument unused )
368 {
368 {
369 int len = 0;
369 int len = 0;
370 unsigned int i = 0;
370 unsigned int i = 0;
371 unsigned int data_length = 0;
371 unsigned int data_length = 0;
372 ccsdsTelecommandPacket_t currentTC;
372 ccsdsTelecommandPacket_t currentTC;
373 char data[100];
373 char data[100];
374 rtems_status_code status;
374 rtems_status_code status;
375 rtems_id queue_id;
375 rtems_id queue_id;
376
376
377 for(i=0; i<100; i++) data[i] = 0;
377 for(i=0; i<100; i++) data[i] = 0;
378
378
379 status = rtems_message_queue_ident( misc_name[QUEUE_QUEU], 0, &queue_id );
379 status = rtems_message_queue_ident( misc_name[QUEUE_QUEU], 0, &queue_id );
380 if (status != RTEMS_SUCCESSFUL)
380 if (status != RTEMS_SUCCESSFUL)
381 {
381 {
382 PRINTF1("in RECV *** ERR getting queue id, %d\n", status)
382 PRINTF1("in RECV *** ERR getting queue id, %d\n", status)
383 }
383 }
384
384
385 BOOT_PRINTF("in RECV *** \n")
385 BOOT_PRINTF("in RECV *** \n")
386
386
387 while(1)
387 while(1)
388 {
388 {
389 len = read(fdSPW, (char*) &currentTC, CCSDS_TC_PKT_MAX_SIZE); // the call to read is blocking
389 len = read(fdSPW, (char*) &currentTC, CCSDS_TC_PKT_MAX_SIZE); // the call to read is blocking
390 if (len == -1){ // error during the read call
390 if (len == -1){ // error during the read call
391 PRINTF("In RECV *** last read call returned -1\n")
391 PRINTF("In RECV *** last read call returned -1\n")
392 //if (rtems_event_send( Task_id[TASKID_SPIQ], SPW_LINKERR_EVENT ) != RTEMS_SUCCESSFUL) {
392 //if (rtems_event_send( Task_id[TASKID_SPIQ], SPW_LINKERR_EVENT ) != RTEMS_SUCCESSFUL) {
393 // PRINTF("IN RECV *** Error: rtems_event_send SPW_LINKERR_EVENT\n")
393 // PRINTF("IN RECV *** Error: rtems_event_send SPW_LINKERR_EVENT\n")
394 //}
394 //}
395 //if (rtems_task_suspend(RTEMS_SELF) != RTEMS_SUCCESSFUL) {
395 //if (rtems_task_suspend(RTEMS_SELF) != RTEMS_SUCCESSFUL) {
396 // PRINTF("In RECV *** Error: rtems_task_suspend(RTEMS_SELF)\n")
396 // PRINTF("In RECV *** Error: rtems_task_suspend(RTEMS_SELF)\n")
397 //}
397 //}
398 }
398 }
399 else {
399 else {
400 if ( (len+1) < CCSDS_TC_PKT_MIN_SIZE ) {
400 if ( (len+1) < CCSDS_TC_PKT_MIN_SIZE ) {
401 PRINTF("In RECV *** packet lenght too short\n")
401 PRINTF("In RECV *** packet lenght too short\n")
402 }
402 }
403 else {
403 else {
404 currentTC_LEN_RCV[0] = 0x00;
404 currentTC_LEN_RCV[0] = 0x00;
405 currentTC_LEN_RCV[1] = (unsigned char) (len - CCSDS_TC_TM_PACKET_OFFSET - 3); // build the corresponding packet size field
405 currentTC_LEN_RCV[1] = (unsigned char) (len - CCSDS_TC_TM_PACKET_OFFSET - 3); // build the corresponding packet size field
406 currentTC_LEN_RCV_AsUnsignedInt = (unsigned int) (len - CCSDS_TC_TM_PACKET_OFFSET - 3); // => -3 is for Prot ID, Reserved and User App bytes
406 currentTC_LEN_RCV_AsUnsignedInt = (unsigned int) (len - CCSDS_TC_TM_PACKET_OFFSET - 3); // => -3 is for Prot ID, Reserved and User App bytes
407 // CHECK THE TC AND BUILD THE APPROPRIATE TM
407 // CHECK THE TC AND BUILD THE APPROPRIATE TM
408 data_length = TC_acceptance(&currentTC, currentTC_LEN_RCV_AsUnsignedInt, queue_id);
408 data_length = TC_acceptance(&currentTC, currentTC_LEN_RCV_AsUnsignedInt, queue_id);
409 if (data_length!=-1)
409 if (data_length!=-1)
410 {
410 {
411 }
411 }
412 }
412 }
413 }
413 }
414 }
414 }
415 }
415 }
416
416
417 rtems_task actn_task( rtems_task_argument unused )
417 rtems_task actn_task( rtems_task_argument unused )
418 {
418 {
419 int result;
419 int result;
420 rtems_status_code status; // RTEMS status code
420 rtems_status_code status; // RTEMS status code
421 ccsdsTelecommandPacket_t TC; // TC sent to the ACTN task
421 ccsdsTelecommandPacket_t TC; // TC sent to the ACTN task
422 size_t size; // size of the incoming TC packet
422 size_t size; // size of the incoming TC packet
423 unsigned char subtype; // subtype of the current TC packet
423 unsigned char subtype; // subtype of the current TC packet
424 rtems_id queue_rcv_id;
424 rtems_id queue_rcv_id;
425 rtems_id queue_snd_id;
425 rtems_id queue_snd_id;
426
426
427 status = rtems_message_queue_ident( misc_name[QUEUE_QUEU], 0, &queue_rcv_id );
427 status = rtems_message_queue_ident( misc_name[QUEUE_QUEU], 0, &queue_rcv_id );
428 if (status != RTEMS_SUCCESSFUL)
428 if (status != RTEMS_SUCCESSFUL)
429 {
429 {
430 PRINTF1("in ACTN *** ERR getting queue_rcv_id %d\n", status)
430 PRINTF1("in ACTN *** ERR getting queue_rcv_id %d\n", status)
431 }
431 }
432
432
433 status = rtems_message_queue_ident( misc_name[QUEUE_PKTS], 0, &queue_snd_id );
433 status = rtems_message_queue_ident( misc_name[QUEUE_PKTS], 0, &queue_snd_id );
434 if (status != RTEMS_SUCCESSFUL)
434 if (status != RTEMS_SUCCESSFUL)
435 {
435 {
436 PRINTF1("in ACTN *** ERR getting queue_snd_id %d\n", status)
436 PRINTF1("in ACTN *** ERR getting queue_snd_id %d\n", status)
437 }
437 }
438
438
439 result = LFR_SUCCESSFUL;
439 result = LFR_SUCCESSFUL;
440 subtype = 0; // subtype of the current TC packet
440 subtype = 0; // subtype of the current TC packet
441
441
442 BOOT_PRINTF("in ACTN *** \n")
442 BOOT_PRINTF("in ACTN *** \n")
443
443
444 while(1)
444 while(1)
445 {
445 {
446 status = rtems_message_queue_receive( queue_rcv_id, (char*) &TC, &size,
446 status = rtems_message_queue_receive( queue_rcv_id, (char*) &TC, &size,
447 RTEMS_WAIT, RTEMS_NO_TIMEOUT);
447 RTEMS_WAIT, RTEMS_NO_TIMEOUT);
448 if (status!=RTEMS_SUCCESSFUL) PRINTF1("ERR *** in task ACTN *** error receiving a message, code %d \n", status)
448 if (status!=RTEMS_SUCCESSFUL) PRINTF1("ERR *** in task ACTN *** error receiving a message, code %d \n", status)
449 else
449 else
450 {
450 {
451 subtype = TC.serviceSubType;
451 subtype = TC.serviceSubType;
452 switch(subtype)
452 switch(subtype)
453 {
453 {
454 case TC_SUBTYPE_RESET:
454 case TC_SUBTYPE_RESET:
455 result = action_reset( &TC, queue_snd_id );
455 result = action_reset( &TC, queue_snd_id );
456 close_action( &TC, result, queue_snd_id );
456 close_action( &TC, result, queue_snd_id );
457 break;
457 break;
458 //
458 //
459 case TC_SUBTYPE_LOAD_COMM:
459 case TC_SUBTYPE_LOAD_COMM:
460 result = action_load_common_par( &TC );
460 result = action_load_common_par( &TC );
461 close_action( &TC, result, queue_snd_id );
461 close_action( &TC, result, queue_snd_id );
462 break;
462 break;
463 //
463 //
464 case TC_SUBTYPE_LOAD_NORM:
464 case TC_SUBTYPE_LOAD_NORM:
465 result = action_load_normal_par( &TC, queue_snd_id );
465 result = action_load_normal_par( &TC, queue_snd_id );
466 close_action( &TC, result, queue_snd_id );
466 close_action( &TC, result, queue_snd_id );
467 break;
467 break;
468 //
468 //
469 case TC_SUBTYPE_LOAD_BURST:
469 case TC_SUBTYPE_LOAD_BURST:
470 result = action_load_burst_par( &TC, queue_snd_id );
470 result = action_load_burst_par( &TC, queue_snd_id );
471 close_action( &TC, result, queue_snd_id );
471 close_action( &TC, result, queue_snd_id );
472 break;
472 break;
473 //
473 //
474 case TC_SUBTYPE_LOAD_SBM1:
474 case TC_SUBTYPE_LOAD_SBM1:
475 result = action_load_sbm1_par( &TC, queue_snd_id );
475 result = action_load_sbm1_par( &TC, queue_snd_id );
476 close_action( &TC, result, queue_snd_id );
476 close_action( &TC, result, queue_snd_id );
477 break;
477 break;
478 //
478 //
479 case TC_SUBTYPE_LOAD_SBM2:
479 case TC_SUBTYPE_LOAD_SBM2:
480 result = action_load_sbm2_par( &TC, queue_snd_id );
480 result = action_load_sbm2_par( &TC, queue_snd_id );
481 close_action( &TC, result, queue_snd_id );
481 close_action( &TC, result, queue_snd_id );
482 break;
482 break;
483 //
483 //
484 case TC_SUBTYPE_DUMP:
484 case TC_SUBTYPE_DUMP:
485 result = action_dump_par( &TC );
485 result = action_dump_par( &TC );
486 close_action( &TC, result, queue_snd_id );
486 close_action( &TC, result, queue_snd_id );
487 break;
487 break;
488 //
488 //
489 case TC_SUBTYPE_ENTER:
489 case TC_SUBTYPE_ENTER:
490 result = action_enter_mode( &TC, queue_snd_id );
490 result = action_enter_mode( &TC, queue_snd_id );
491 close_action( &TC, result, queue_snd_id );
491 close_action( &TC, result, queue_snd_id );
492 break;
492 break;
493 //
493 //
494 case TC_SUBTYPE_UPDT_INFO:
494 case TC_SUBTYPE_UPDT_INFO:
495 result = action_update_info( &TC, queue_snd_id );
495 result = action_update_info( &TC, queue_snd_id );
496 close_action( &TC, result, queue_snd_id );
496 close_action( &TC, result, queue_snd_id );
497 break;
497 break;
498 //
498 //
499 case TC_SUBTYPE_EN_CAL:
499 case TC_SUBTYPE_EN_CAL:
500 result = action_enable_calibration( &TC, queue_snd_id );
500 result = action_enable_calibration( &TC, queue_snd_id );
501 close_action( &TC, result, queue_snd_id );
501 close_action( &TC, result, queue_snd_id );
502 break;
502 break;
503 //
503 //
504 case TC_SUBTYPE_DIS_CAL:
504 case TC_SUBTYPE_DIS_CAL:
505 result = action_disable_calibration( &TC, queue_snd_id );
505 result = action_disable_calibration( &TC, queue_snd_id );
506 close_action( &TC, result, queue_snd_id );
506 close_action( &TC, result, queue_snd_id );
507 break;
507 break;
508 //
508 //
509 case TC_SUBTYPE_UPDT_TIME:
509 case TC_SUBTYPE_UPDT_TIME:
510 result = action_update_time( &TC );
510 result = action_update_time( &TC );
511 close_action( &TC, result, queue_snd_id );
511 close_action( &TC, result, queue_snd_id );
512 break;
512 break;
513 //
513 //
514 default:
514 default:
515 break;
515 break;
516 }
516 }
517 }
517 }
518 }
518 }
519 }
519 }
520
520
521 rtems_task dumb_task( rtems_task_argument unused )
521 rtems_task dumb_task( rtems_task_argument unused )
522 {
522 {
523 unsigned int i;
523 unsigned int i;
524 unsigned int intEventOut;
524 unsigned int intEventOut;
525 unsigned int coarse_time = 0;
525 unsigned int coarse_time = 0;
526 unsigned int fine_time = 0;
526 unsigned int fine_time = 0;
527 rtems_event_set event_out;
527 rtems_event_set event_out;
528
528
529 BOOT_PRINTF("in DUMB *** \n")
529 BOOT_PRINTF("in DUMB *** \n")
530
530
531 while(1){
531 while(1){
532 rtems_event_receive(RTEMS_EVENT_0 | RTEMS_EVENT_1 | RTEMS_EVENT_2 | RTEMS_EVENT_3 | RTEMS_EVENT_4 | RTEMS_EVENT_5,
532 rtems_event_receive(RTEMS_EVENT_0 | RTEMS_EVENT_1 | RTEMS_EVENT_2 | RTEMS_EVENT_3 | RTEMS_EVENT_4 | RTEMS_EVENT_5,
533 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT
533 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT
534 intEventOut = (unsigned int) event_out;
534 intEventOut = (unsigned int) event_out;
535 for ( i=0; i<32; i++)
535 for ( i=0; i<32; i++)
536 {
536 {
537 if ( ((intEventOut >> i) & 0x0001) != 0)
537 if ( ((intEventOut >> i) & 0x0001) != 0)
538 {
538 {
539 coarse_time = time_management_regs->coarse_time;
539 coarse_time = time_management_regs->coarse_time;
540 fine_time = time_management_regs->fine_time;
540 fine_time = time_management_regs->fine_time;
541 printf("in DUMB *** time = coarse: %x, fine: %x, %s\n", coarse_time, fine_time, DumbMessages[i]);
541 printf("in DUMB *** time = coarse: %x, fine: %x, %s\n", coarse_time, fine_time, DumbMessages[i]);
542 }
542 }
543 }
543 }
544 }
544 }
545 }
545 }
546
546
547 //***********
547 //***********
548 // TC ACTIONS
548 // TC ACTIONS
549
549
550 int action_reset(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
550 int action_reset(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
551 {
551 {
552 send_tm_lfr_tc_exe_not_implemented( TC, queue_id );
552 send_tm_lfr_tc_exe_not_implemented( TC, queue_id );
553 return LFR_DEFAULT;
553 return LFR_DEFAULT;
554 }
554 }
555
555
556 int action_load_common_par(ccsdsTelecommandPacket_t *TC)
556 int action_load_common_par(ccsdsTelecommandPacket_t *TC)
557 {
557 {
558 parameter_dump_packet.unused0 = TC->dataAndCRC[0];
558 parameter_dump_packet.unused0 = TC->dataAndCRC[0];
559 parameter_dump_packet.bw_sp0_sp1_r0_r1 = TC->dataAndCRC[1];
559 parameter_dump_packet.bw_sp0_sp1_r0_r1 = TC->dataAndCRC[1];
560
560
561 set_wfp_data_shaping(parameter_dump_packet.bw_sp0_sp1_r0_r1);
561 set_wfp_data_shaping(parameter_dump_packet.bw_sp0_sp1_r0_r1);
562
562
563 return LFR_SUCCESSFUL;
563 return LFR_SUCCESSFUL;
564 }
564 }
565
565
566 int action_load_normal_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
566 int action_load_normal_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
567 {
567 {
568 int result;
568 int result;
569 unsigned int tmp;
569 unsigned int tmp;
570
570
571 result = LFR_SUCCESSFUL;
571 result = LFR_SUCCESSFUL;
572
572
573 if ( lfrCurrentMode == LFR_MODE_NORMAL ) {
573 if ( lfrCurrentMode == LFR_MODE_NORMAL ) {
574 send_tm_lfr_tc_exe_not_executable( TC, queue_id );
574 send_tm_lfr_tc_exe_not_executable( TC, queue_id );
575 result = LFR_DEFAULT;
575 result = LFR_DEFAULT;
576 }
576 }
577 else {
577 else {
578 // sy_lfr_n_swf_l
578 // sy_lfr_n_swf_l
579 parameter_dump_packet.sy_lfr_n_swf_l[0] = TC->dataAndCRC[0];
579 parameter_dump_packet.sy_lfr_n_swf_l[0] = TC->dataAndCRC[0];
580 parameter_dump_packet.sy_lfr_n_swf_l[1] = TC->dataAndCRC[1];
580 parameter_dump_packet.sy_lfr_n_swf_l[1] = TC->dataAndCRC[1];
581
581
582 // sy_lfr_n_swf_p
582 // sy_lfr_n_swf_p
583 tmp = (unsigned int ) floor(
583 tmp = (unsigned int ) floor(
584 (TC->dataAndCRC[2] * 256
584 (TC->dataAndCRC[2] * 256
585 + TC->dataAndCRC[3])/8
585 + TC->dataAndCRC[3])/8
586 ) * 8;
586 ) * 8;
587 if ( (tmp < 16) || (tmp>65528) )
587 if ( (tmp < 16) || (tmp>65528) )
588 {
588 {
589 result = LFR_DEFAULT;
589 result = LFR_DEFAULT;
590 }
590 }
591 else
591 else
592 {
592 {
593 parameter_dump_packet.sy_lfr_n_swf_p[0] = (unsigned char) (tmp >> 8);
593 parameter_dump_packet.sy_lfr_n_swf_p[0] = (unsigned char) (tmp >> 8);
594 parameter_dump_packet.sy_lfr_n_swf_p[1] = (unsigned char) (tmp );
594 parameter_dump_packet.sy_lfr_n_swf_p[1] = (unsigned char) (tmp );
595 }
595 }
596
596
597 // sy_lfr_n_asm_p
597 // sy_lfr_n_asm_p
598 parameter_dump_packet.sy_lfr_n_asm_p[0] = TC->dataAndCRC[4];
598 parameter_dump_packet.sy_lfr_n_asm_p[0] = TC->dataAndCRC[4];
599 parameter_dump_packet.sy_lfr_n_asm_p[1] = TC->dataAndCRC[5];
599 parameter_dump_packet.sy_lfr_n_asm_p[1] = TC->dataAndCRC[5];
600
600
601 // sy_lfr_n_bp_p0
601 // sy_lfr_n_bp_p0
602 parameter_dump_packet.sy_lfr_n_bp_p0 = TC->dataAndCRC[6];
602 parameter_dump_packet.sy_lfr_n_bp_p0 = TC->dataAndCRC[6];
603
603
604 // sy_lfr_n_bp_p1
604 // sy_lfr_n_bp_p1
605 parameter_dump_packet.sy_lfr_n_bp_p1 = TC->dataAndCRC[7];
605 parameter_dump_packet.sy_lfr_n_bp_p1 = TC->dataAndCRC[7];
606 }
606 }
607
607
608 return result;
608 return result;
609 }
609 }
610
610
611 int action_load_burst_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
611 int action_load_burst_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
612 {
612 {
613 int result;
613 int result;
614 unsigned char lfrMode;
614 unsigned char lfrMode;
615
615
616 result = LFR_DEFAULT;
616 result = LFR_DEFAULT;
617 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
617 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
618
618
619 if ( lfrMode == LFR_MODE_BURST ) {
619 if ( lfrMode == LFR_MODE_BURST ) {
620 send_tm_lfr_tc_exe_not_executable( TC, queue_id );
620 send_tm_lfr_tc_exe_not_executable( TC, queue_id );
621 result = LFR_DEFAULT;
621 result = LFR_DEFAULT;
622 }
622 }
623 else {
623 else {
624 parameter_dump_packet.sy_lfr_b_bp_p0 = TC->dataAndCRC[0];
624 parameter_dump_packet.sy_lfr_b_bp_p0 = TC->dataAndCRC[0];
625 parameter_dump_packet.sy_lfr_b_bp_p1 = TC->dataAndCRC[1];
625 parameter_dump_packet.sy_lfr_b_bp_p1 = TC->dataAndCRC[1];
626
626
627 result = LFR_SUCCESSFUL;
627 result = LFR_SUCCESSFUL;
628 }
628 }
629
629
630 return result;
630 return result;
631 }
631 }
632
632
633 int action_load_sbm1_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
633 int action_load_sbm1_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
634 {
634 {
635 int result;
635 int result;
636 unsigned char lfrMode;
636 unsigned char lfrMode;
637
637
638 result = LFR_DEFAULT;
638 result = LFR_DEFAULT;
639 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
639 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
640
640
641 if ( lfrMode == LFR_MODE_SBM1 ) {
641 if ( lfrMode == LFR_MODE_SBM1 ) {
642 send_tm_lfr_tc_exe_not_executable( TC, queue_id );
642 send_tm_lfr_tc_exe_not_executable( TC, queue_id );
643 result = LFR_DEFAULT;
643 result = LFR_DEFAULT;
644 }
644 }
645 else {
645 else {
646 parameter_dump_packet.sy_lfr_s1_bp_p0 = TC->dataAndCRC[0];
646 parameter_dump_packet.sy_lfr_s1_bp_p0 = TC->dataAndCRC[0];
647 parameter_dump_packet.sy_lfr_s1_bp_p1 = TC->dataAndCRC[1];
647 parameter_dump_packet.sy_lfr_s1_bp_p1 = TC->dataAndCRC[1];
648
648
649 result = LFR_SUCCESSFUL;
649 result = LFR_SUCCESSFUL;
650 }
650 }
651
651
652 return result;
652 return result;
653 }
653 }
654
654
655 int action_load_sbm2_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
655 int action_load_sbm2_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
656 {
656 {
657 int result;
657 int result;
658 unsigned char lfrMode;
658 unsigned char lfrMode;
659
659
660 result = LFR_DEFAULT;
660 result = LFR_DEFAULT;
661 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
661 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
662
662
663 if ( lfrMode == LFR_MODE_SBM2 ) {
663 if ( lfrMode == LFR_MODE_SBM2 ) {
664 send_tm_lfr_tc_exe_not_executable( TC, queue_id );
664 send_tm_lfr_tc_exe_not_executable( TC, queue_id );
665 result = LFR_DEFAULT;
665 result = LFR_DEFAULT;
666 }
666 }
667 else {
667 else {
668 parameter_dump_packet.sy_lfr_s2_bp_p0 = TC->dataAndCRC[0];
668 parameter_dump_packet.sy_lfr_s2_bp_p0 = TC->dataAndCRC[0];
669 parameter_dump_packet.sy_lfr_s2_bp_p1 = TC->dataAndCRC[1];
669 parameter_dump_packet.sy_lfr_s2_bp_p1 = TC->dataAndCRC[1];
670
670
671 result = LFR_SUCCESSFUL;
671 result = LFR_SUCCESSFUL;
672 }
672 }
673
673
674 return result;
674 return result;
675 }
675 }
676
676
677 int action_dump_par(ccsdsTelecommandPacket_t *TC)
677 int action_dump_par(ccsdsTelecommandPacket_t *TC)
678 {
678 {
679 int status;
679 int status;
680 // send parameter dump packet
680 // send parameter dump packet
681 status = write(fdSPW, (char *) &parameter_dump_packet,
681 status = write(fdSPW, (char *) &parameter_dump_packet,
682 PACKET_LENGTH_PARAMETER_DUMP + CCSDS_TC_TM_PACKET_OFFSET + 4);
682 PACKET_LENGTH_PARAMETER_DUMP + CCSDS_TC_TM_PACKET_OFFSET + 4);
683 if (status == -1)
683 if (status == -1)
684 {
684 {
685 PRINTF1("in action_dump *** ERR sending packet, code %d", status)
685 PRINTF1("in action_dump *** ERR sending packet, code %d", status)
686 status = RTEMS_UNSATISFIED;
686 status = RTEMS_UNSATISFIED;
687 }
687 }
688 else
688 else
689 {
689 {
690 status = RTEMS_SUCCESSFUL;
690 status = RTEMS_SUCCESSFUL;
691 }
691 }
692
692
693 return status;
693 return status;
694 }
694 }
695
695
696 int action_enter_mode(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
696 int action_enter_mode(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
697 {
697 {
698 rtems_status_code status;
698 rtems_status_code status;
699 unsigned char requestedMode;
699 unsigned char requestedMode;
700
700
701 requestedMode = TC->dataAndCRC[1];
701 requestedMode = TC->dataAndCRC[1];
702
702
703 printf("try to enter mode %d\n", requestedMode);
703 printf("try to enter mode %d\n", requestedMode);
704
704
705 #ifdef PRINT_TASK_STATISTICS
705 #ifdef PRINT_TASK_STATISTICS
706 if (requestedMode != LFR_MODE_STANDBY)
706 if (requestedMode != LFR_MODE_STANDBY)
707 {
707 {
708 rtems_cpu_usage_reset();
708 rtems_cpu_usage_reset();
709 maxCount = 0;
709 maxCount = 0;
710 }
710 }
711 #endif
711 #endif
712
712
713 status = transition_validation(requestedMode);
713 status = transition_validation(requestedMode);
714
714
715 if ( status == LFR_SUCCESSFUL ) {
715 if ( status == LFR_SUCCESSFUL ) {
716 if ( lfrCurrentMode != LFR_MODE_STANDBY)
716 if ( lfrCurrentMode != LFR_MODE_STANDBY)
717 {
717 {
718 status = stop_current_mode();
718 status = stop_current_mode();
719 }
719 }
720 if (status != RTEMS_SUCCESSFUL)
720 if (status != RTEMS_SUCCESSFUL)
721 {
721 {
722 PRINTF("ERR *** in action_enter *** stop_current_mode\n")
722 PRINTF("ERR *** in action_enter *** stop_current_mode\n")
723 }
723 }
724 status = enter_mode(requestedMode, TC);
724 status = enter_mode(requestedMode, TC);
725 }
725 }
726 else
726 else
727 {
727 {
728 PRINTF("ERR *** in action_enter *** transition rejected\n")
728 PRINTF("ERR *** in action_enter *** transition rejected\n")
729 send_tm_lfr_tc_exe_not_executable( TC, queue_id );
729 send_tm_lfr_tc_exe_not_executable( TC, queue_id );
730 }
730 }
731
731
732 return status;
732 return status;
733 }
733 }
734
734
735 int action_update_info(ccsdsTelecommandPacket_t *TC, rtems_id queue_id) {
735 int action_update_info(ccsdsTelecommandPacket_t *TC, rtems_id queue_id) {
736 unsigned int val;
736 unsigned int val;
737 int result;
737 int result;
738 unsigned char lfrMode;
738 unsigned char lfrMode;
739
739
740 result = LFR_DEFAULT;
740 result = LFR_DEFAULT;
741 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
741 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
742
742
743 if ( (lfrMode == LFR_MODE_STANDBY) ) {
743 if ( (lfrMode == LFR_MODE_STANDBY) ) {
744 send_tm_lfr_tc_exe_not_implemented( TC, queue_id );
744 send_tm_lfr_tc_exe_not_implemented( TC, queue_id );
745 result = LFR_DEFAULT;
745 result = LFR_DEFAULT;
746 }
746 }
747 else {
747 else {
748 val = housekeeping_packet.hk_lfr_update_info_tc_cnt[0] * 256
748 val = housekeeping_packet.hk_lfr_update_info_tc_cnt[0] * 256
749 + housekeeping_packet.hk_lfr_update_info_tc_cnt[1];
749 + housekeeping_packet.hk_lfr_update_info_tc_cnt[1];
750 val++;
750 val++;
751 housekeeping_packet.hk_lfr_update_info_tc_cnt[0] = (unsigned char) (val >> 8);
751 housekeeping_packet.hk_lfr_update_info_tc_cnt[0] = (unsigned char) (val >> 8);
752 housekeeping_packet.hk_lfr_update_info_tc_cnt[1] = (unsigned char) (val);
752 housekeeping_packet.hk_lfr_update_info_tc_cnt[1] = (unsigned char) (val);
753 result = LFR_SUCCESSFUL;
753 result = LFR_SUCCESSFUL;
754 }
754 }
755
755
756 return result;
756 return result;
757 }
757 }
758
758
759 int action_enable_calibration(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
759 int action_enable_calibration(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
760 {
760 {
761 int result;
761 int result;
762 unsigned char lfrMode;
762 unsigned char lfrMode;
763
763
764 result = LFR_DEFAULT;
764 result = LFR_DEFAULT;
765 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
765 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
766
766
767 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_BURST) | (lfrMode == LFR_MODE_SBM2) ) {
767 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_BURST) | (lfrMode == LFR_MODE_SBM2) ) {
768 send_tm_lfr_tc_exe_not_executable( TC, queue_id );
768 send_tm_lfr_tc_exe_not_executable( TC, queue_id );
769 result = LFR_DEFAULT;
769 result = LFR_DEFAULT;
770 }
770 }
771 else {
771 else {
772 send_tm_lfr_tc_exe_not_implemented( TC, queue_id );
772 send_tm_lfr_tc_exe_not_implemented( TC, queue_id );
773 result = LFR_DEFAULT;
773 result = LFR_DEFAULT;
774 }
774 }
775 return result;
775 return result;
776 }
776 }
777
777
778 int action_disable_calibration(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
778 int action_disable_calibration(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
779 {
779 {
780 int result;
780 int result;
781 unsigned char lfrMode;
781 unsigned char lfrMode;
782
782
783 result = LFR_DEFAULT;
783 result = LFR_DEFAULT;
784 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
784 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
785
785
786 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_BURST) | (lfrMode == LFR_MODE_SBM2) ) {
786 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_BURST) | (lfrMode == LFR_MODE_SBM2) ) {
787 send_tm_lfr_tc_exe_not_executable( TC, queue_id );
787 send_tm_lfr_tc_exe_not_executable( TC, queue_id );
788 result = LFR_DEFAULT;
788 result = LFR_DEFAULT;
789 }
789 }
790 else {
790 else {
791 send_tm_lfr_tc_exe_not_implemented( TC, queue_id );
791 send_tm_lfr_tc_exe_not_implemented( TC, queue_id );
792 result = LFR_DEFAULT;
792 result = LFR_DEFAULT;
793 }
793 }
794 return result;
794 return result;
795 }
795 }
796
796
797 int action_update_time(ccsdsTelecommandPacket_t *TC)
797 int action_update_time(ccsdsTelecommandPacket_t *TC)
798 {
798 {
799 unsigned int val;
799 unsigned int val;
800
800
801 time_management_regs->coarse_time_load = (TC->dataAndCRC[0] << 24)
801 time_management_regs->coarse_time_load = (TC->dataAndCRC[0] << 24)
802 + (TC->dataAndCRC[1] << 16)
802 + (TC->dataAndCRC[1] << 16)
803 + (TC->dataAndCRC[2] << 8)
803 + (TC->dataAndCRC[2] << 8)
804 + TC->dataAndCRC[3];
804 + TC->dataAndCRC[3];
805 val = housekeeping_packet.hk_lfr_update_time_tc_cnt[0] * 256
805 val = housekeeping_packet.hk_lfr_update_time_tc_cnt[0] * 256
806 + housekeeping_packet.hk_lfr_update_time_tc_cnt[1];
806 + housekeeping_packet.hk_lfr_update_time_tc_cnt[1];
807 val++;
807 val++;
808 housekeeping_packet.hk_lfr_update_time_tc_cnt[0] = (unsigned char) (val >> 8);
808 housekeeping_packet.hk_lfr_update_time_tc_cnt[0] = (unsigned char) (val >> 8);
809 housekeeping_packet.hk_lfr_update_time_tc_cnt[1] = (unsigned char) (val);
809 housekeeping_packet.hk_lfr_update_time_tc_cnt[1] = (unsigned char) (val);
810 time_management_regs->ctrl = time_management_regs->ctrl | 1;
810 time_management_regs->ctrl = time_management_regs->ctrl | 1;
811
811
812 return LFR_SUCCESSFUL;
812 return LFR_SUCCESSFUL;
813 }
813 }
814
814
815 //*******************
815 //*******************
816 // ENTERING THE MODES
816 // ENTERING THE MODES
817
817
818 int transition_validation(unsigned char requestedMode)
818 int transition_validation(unsigned char requestedMode)
819 {
819 {
820 int status;
820 int status;
821
821
822 switch (requestedMode)
822 switch (requestedMode)
823 {
823 {
824 case LFR_MODE_STANDBY:
824 case LFR_MODE_STANDBY:
825 if ( lfrCurrentMode == LFR_MODE_STANDBY ) {
825 if ( lfrCurrentMode == LFR_MODE_STANDBY ) {
826 status = LFR_DEFAULT;
826 status = LFR_DEFAULT;
827 }
827 }
828 else
828 else
829 {
829 {
830 status = LFR_SUCCESSFUL;
830 status = LFR_SUCCESSFUL;
831 }
831 }
832 break;
832 break;
833 case LFR_MODE_NORMAL:
833 case LFR_MODE_NORMAL:
834 if ( lfrCurrentMode == LFR_MODE_NORMAL ) {
834 if ( lfrCurrentMode == LFR_MODE_NORMAL ) {
835 status = LFR_DEFAULT;
835 status = LFR_DEFAULT;
836 }
836 }
837 else {
837 else {
838 status = LFR_SUCCESSFUL;
838 status = LFR_SUCCESSFUL;
839 }
839 }
840 break;
840 break;
841 case LFR_MODE_BURST:
841 case LFR_MODE_BURST:
842 if ( lfrCurrentMode == LFR_MODE_BURST ) {
842 if ( lfrCurrentMode == LFR_MODE_BURST ) {
843 status = LFR_DEFAULT;
843 status = LFR_DEFAULT;
844 }
844 }
845 else {
845 else {
846 status = LFR_SUCCESSFUL;
846 status = LFR_SUCCESSFUL;
847 }
847 }
848 break;
848 break;
849 case LFR_MODE_SBM1:
849 case LFR_MODE_SBM1:
850 if ( lfrCurrentMode == LFR_MODE_SBM1 ) {
850 if ( lfrCurrentMode == LFR_MODE_SBM1 ) {
851 status = LFR_DEFAULT;
851 status = LFR_DEFAULT;
852 }
852 }
853 else {
853 else {
854 status = LFR_SUCCESSFUL;
854 status = LFR_SUCCESSFUL;
855 }
855 }
856 break;
856 break;
857 case LFR_MODE_SBM2:
857 case LFR_MODE_SBM2:
858 if ( lfrCurrentMode == LFR_MODE_SBM2 ) {
858 if ( lfrCurrentMode == LFR_MODE_SBM2 ) {
859 status = LFR_DEFAULT;
859 status = LFR_DEFAULT;
860 }
860 }
861 else {
861 else {
862 status = LFR_SUCCESSFUL;
862 status = LFR_SUCCESSFUL;
863 }
863 }
864 break;
864 break;
865 default:
865 default:
866 status = LFR_DEFAULT;
866 status = LFR_DEFAULT;
867 break;
867 break;
868 }
868 }
869
869
870 return status;
870 return status;
871 }
871 }
872
872
873 int stop_current_mode()
873 int stop_current_mode()
874 {
874 {
875 rtems_status_code status;
875 rtems_status_code status;
876
876
877 status = RTEMS_SUCCESSFUL;
877 status = RTEMS_SUCCESSFUL;
878
878
879 // mask all IRQ lines related to signal processing
879 // mask all IRQ lines related to signal processing
880 LEON_Mask_interrupt( IRQ_SM ); // mask spectral matrices interrupt (coming from the timer VHDL IP)
880 LEON_Mask_interrupt( IRQ_SM ); // mask spectral matrices interrupt (coming from the timer VHDL IP)
881 LEON_Clear_interrupt( IRQ_SM ); // clear spectral matrices interrupt (coming from the timer VHDL IP)
881 LEON_Clear_interrupt( IRQ_SM ); // clear spectral matrices interrupt (coming from the timer VHDL IP)
882
882
883 #ifdef GSA
883 #ifdef GSA
884 LEON_Mask_interrupt( IRQ_WF ); // mask waveform interrupt (coming from the timer VHDL IP)
884 LEON_Mask_interrupt( IRQ_WF ); // mask waveform interrupt (coming from the timer VHDL IP)
885 LEON_Clear_interrupt( IRQ_WF ); // clear waveform interrupt (coming from the timer VHDL IP)
885 LEON_Clear_interrupt( IRQ_WF ); // clear waveform interrupt (coming from the timer VHDL IP)
886 timer_stop( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_WF_SIMULATOR );
886 timer_stop( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_WF_SIMULATOR );
887 #else
887 #else
888 LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER ); // mask waveform picker interrupt
888 LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER ); // mask waveform picker interrupt
889 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); // clear waveform picker interrupt
889 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); // clear waveform picker interrupt
890 LEON_Mask_interrupt( IRQ_SPECTRAL_MATRIX ); // mask spectral matrix interrupt
890 LEON_Mask_interrupt( IRQ_SPECTRAL_MATRIX ); // mask spectral matrix interrupt
891 LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt
891 LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt
892 LEON_Mask_interrupt( IRQ_SM ); // for SM simulation
892 LEON_Mask_interrupt( IRQ_SM ); // for SM simulation
893 LEON_Clear_interrupt( IRQ_SM ); // for SM simulation
893 LEON_Clear_interrupt( IRQ_SM ); // for SM simulation
894 #endif
894 #endif
895 //**********************
895 //**********************
896 // suspend several tasks
896 // suspend several tasks
897 if (lfrCurrentMode != LFR_MODE_STANDBY) {
897 if (lfrCurrentMode != LFR_MODE_STANDBY) {
898 suspend_science_tasks();
898 suspend_science_tasks();
899 }
899 }
900
900
901 if (status != RTEMS_SUCCESSFUL)
901 if (status != RTEMS_SUCCESSFUL)
902 {
902 {
903 PRINTF("ERR *** in stop_current_mode *** suspending tasks\n")
903 PRINTF("ERR *** in stop_current_mode *** suspending tasks\n")
904 }
904 }
905
905
906 //*************************
906 //*************************
907 // initialize the registers
907 // initialize the registers
908 #ifdef GSA
908 #ifdef GSA
909 #else
909 #else
910 reset_wfp_burst_enable(); // reset burst and enable bits
910 reset_wfp_burst_enable(); // reset burst and enable bits
911 reset_wfp_status(); // reset all the status bits
911 reset_wfp_status(); // reset all the status bits
912 #endif
912 #endif
913
913
914 return status;
914 return status;
915 }
915 }
916
916
917 int enter_mode(unsigned char mode, ccsdsTelecommandPacket_t *TC )
917 int enter_mode(unsigned char mode, ccsdsTelecommandPacket_t *TC )
918 {
918 {
919 rtems_status_code status;
919 rtems_status_code status;
920
920
921 status = RTEMS_UNSATISFIED;
921 status = RTEMS_UNSATISFIED;
922
922
923 housekeeping_packet.lfr_status_word[0] = (unsigned char) ((mode << 4) + 0x0d);
923 housekeeping_packet.lfr_status_word[0] = (unsigned char) ((mode << 4) + 0x0d);
924 lfrCurrentMode = mode;
924 lfrCurrentMode = mode;
925
925
926 switch(mode){
926 switch(mode){
927 case LFR_MODE_STANDBY:
927 case LFR_MODE_STANDBY:
928 status = enter_standby_mode( TC );
928 status = enter_standby_mode( TC );
929 break;
929 break;
930 case LFR_MODE_NORMAL:
930 case LFR_MODE_NORMAL:
931 status = enter_normal_mode( TC );
931 status = enter_normal_mode( TC );
932 break;
932 break;
933 case LFR_MODE_BURST:
933 case LFR_MODE_BURST:
934 status = enter_burst_mode( TC );
934 status = enter_burst_mode( TC );
935 break;
935 break;
936 case LFR_MODE_SBM1:
936 case LFR_MODE_SBM1:
937 status = enter_sbm1_mode( TC );
937 status = enter_sbm1_mode( TC );
938 break;
938 break;
939 case LFR_MODE_SBM2:
939 case LFR_MODE_SBM2:
940 status = enter_sbm2_mode( TC );
940 status = enter_sbm2_mode( TC );
941 break;
941 break;
942 default:
942 default:
943 status = RTEMS_UNSATISFIED;
943 status = RTEMS_UNSATISFIED;
944 }
944 }
945
945
946 if (status != RTEMS_SUCCESSFUL)
946 if (status != RTEMS_SUCCESSFUL)
947 {
947 {
948 PRINTF("in enter_mode *** ERR\n")
948 PRINTF("in enter_mode *** ERR\n")
949 status = RTEMS_UNSATISFIED;
949 status = RTEMS_UNSATISFIED;
950 }
950 }
951
951
952 return status;
952 return status;
953 }
953 }
954
954
955 int enter_standby_mode()
955 int enter_standby_mode()
956 {
956 {
957 reset_waveform_picker_regs();
957 reset_waveform_picker_regs();
958
958
959 PRINTF1("maxCount = %d\n", maxCount)
959 PRINTF1("maxCount = %d\n", maxCount)
960
960
961 #ifdef PRINT_TASK_STATISTICS
961 #ifdef PRINT_TASK_STATISTICS
962 rtems_cpu_usage_report();
962 rtems_cpu_usage_report();
963 #endif
963 #endif
964
964
965 #ifdef PRINT_STACK_REPORT
965 #ifdef PRINT_STACK_REPORT
966 rtems_stack_checker_report_usage();
966 rtems_stack_checker_report_usage();
967 #endif
967 #endif
968
968
969 return LFR_SUCCESSFUL;
969 return LFR_SUCCESSFUL;
970 }
970 }
971
971
972 int enter_normal_mode()
972 int enter_normal_mode()
973 {
973 {
974 rtems_status_code status;
974 rtems_status_code status;
975
975
976 status = restart_science_tasks();
976 status = restart_science_tasks();
977
977
978 #ifdef GSA
978 #ifdef GSA
979 timer_start( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_WF_SIMULATOR );
979 timer_start( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_WF_SIMULATOR );
980 timer_start( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR );
980 timer_start( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR );
981 LEON_Clear_interrupt( IRQ_WF );
981 LEON_Clear_interrupt( IRQ_WF );
982 LEON_Unmask_interrupt( IRQ_WF );
982 LEON_Unmask_interrupt( IRQ_WF );
983 //
983 //
984 set_local_nb_interrupt_f0_MAX();
984 set_local_nb_interrupt_f0_MAX();
985 LEON_Clear_interrupt( IRQ_SM ); // the IRQ_SM seems to be incompatible with the IRQ_WF on the xilinx board
985 LEON_Clear_interrupt( IRQ_SM ); // the IRQ_SM seems to be incompatible with the IRQ_WF on the xilinx board
986 LEON_Unmask_interrupt( IRQ_SM );
986 LEON_Unmask_interrupt( IRQ_SM );
987 #else
987 #else
988 //****************
988 //****************
989 // waveform picker
989 // waveform picker
990 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
990 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
991 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
991 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
992 reset_waveform_picker_regs();
992 reset_waveform_picker_regs();
993 set_wfp_burst_enable_register(LFR_MODE_NORMAL);
993 set_wfp_burst_enable_register(LFR_MODE_NORMAL);
994 //****************
994 //****************
995 // spectral matrix
995 // spectral matrix
996 // set_local_nb_interrupt_f0_MAX();
996 // set_local_nb_interrupt_f0_MAX();
997 // LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); // the IRQ_SM seems to be incompatible with the IRQ_WF on the xilinx board
997 // LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); // the IRQ_SM seems to be incompatible with the IRQ_WF on the xilinx board
998 // LEON_Unmask_interrupt( IRQ_SPECTRAL_MATRIX );
998 // LEON_Unmask_interrupt( IRQ_SPECTRAL_MATRIX );
999 // spectral_matrix_regs->config = 0x01;
999 // spectral_matrix_regs->config = 0x01;
1000 // spectral_matrix_regs->status = 0x00;
1000 // spectral_matrix_regs->status = 0x00;
1001 #endif
1001 #endif
1002
1002
1003 return status;
1003 return status;
1004 }
1004 }
1005
1005
1006 int enter_burst_mode()
1006 int enter_burst_mode()
1007 {
1007 {
1008 rtems_status_code status;
1008 rtems_status_code status;
1009
1009
1010 status = restart_science_tasks();
1010 status = restart_science_tasks();
1011
1011
1012 #ifdef GSA
1012 #ifdef GSA
1013 LEON_Unmask_interrupt( IRQ_SM );
1013 LEON_Unmask_interrupt( IRQ_SM );
1014 #else
1014 #else
1015 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
1015 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
1016 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
1016 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
1017 reset_waveform_picker_regs();
1017 reset_waveform_picker_regs();
1018 set_wfp_burst_enable_register(LFR_MODE_BURST);
1018 set_wfp_burst_enable_register(LFR_MODE_BURST);
1019 #endif
1019 #endif
1020
1020
1021 return status;
1021 return status;
1022 }
1022 }
1023
1023
1024 int enter_sbm1_mode()
1024 int enter_sbm1_mode()
1025 {
1025 {
1026 rtems_status_code status;
1026 rtems_status_code status;
1027
1027
1028 status = restart_science_tasks();
1028 status = restart_science_tasks();
1029
1029
1030 set_local_sbm1_nb_cwf_max();
1030 set_local_sbm1_nb_cwf_max();
1031
1031
1032 reset_local_sbm1_nb_cwf_sent();
1032 reset_local_sbm1_nb_cwf_sent();
1033
1033
1034 #ifdef GSA
1034 #ifdef GSA
1035 LEON_Unmask_interrupt( IRQ_SM );
1035 LEON_Unmask_interrupt( IRQ_SM );
1036 #else
1036 #else
1037 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
1037 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
1038 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
1038 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
1039 reset_waveform_picker_regs();
1039 reset_waveform_picker_regs();
1040 set_wfp_burst_enable_register(LFR_MODE_SBM1);
1040 set_wfp_burst_enable_register(LFR_MODE_SBM1);
1041 // SM simulation
1041 // SM simulation
1042 // timer_start( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR );
1042 // timer_start( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR );
1043 // LEON_Clear_interrupt( IRQ_SM ); // the IRQ_SM seems to be incompatible with the IRQ_WF on the xilinx board
1043 // LEON_Clear_interrupt( IRQ_SM ); // the IRQ_SM seems to be incompatible with the IRQ_WF on the xilinx board
1044 // LEON_Unmask_interrupt( IRQ_SM );
1044 // LEON_Unmask_interrupt( IRQ_SM );
1045 #endif
1045 #endif
1046
1046
1047 return status;
1047 return status;
1048 }
1048 }
1049
1049
1050 int enter_sbm2_mode()
1050 int enter_sbm2_mode()
1051 {
1051 {
1052 rtems_status_code status;
1052 rtems_status_code status;
1053
1053
1054 status = restart_science_tasks();
1054 status = restart_science_tasks();
1055
1055
1056 set_local_sbm2_nb_cwf_max();
1056 set_local_sbm2_nb_cwf_max();
1057
1057
1058 reset_local_sbm2_nb_cwf_sent();
1058 reset_local_sbm2_nb_cwf_sent();
1059
1059
1060 #ifdef GSA
1060 #ifdef GSA
1061 LEON_Unmask_interrupt( IRQ_SM );
1061 LEON_Unmask_interrupt( IRQ_SM );
1062 #else
1062 #else
1063 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
1063 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
1064 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
1064 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
1065 reset_waveform_picker_regs();
1065 reset_waveform_picker_regs();
1066 set_wfp_burst_enable_register(LFR_MODE_SBM2);
1066 set_wfp_burst_enable_register(LFR_MODE_SBM2);
1067 #endif
1067 #endif
1068
1068
1069 return status;
1069 return status;
1070 }
1070 }
1071
1071
1072 int restart_science_tasks()
1072 int restart_science_tasks()
1073 {
1073 {
1074 rtems_status_code status[6];
1074 rtems_status_code status[6];
1075 rtems_status_code ret;
1075 rtems_status_code ret;
1076
1076
1077 ret = RTEMS_SUCCESSFUL;
1077 ret = RTEMS_SUCCESSFUL;
1078
1078
1079 status[0] = rtems_task_restart( Task_id[TASKID_AVF0], 1 );
1079 status[0] = rtems_task_restart( Task_id[TASKID_AVF0], 1 );
1080 if (status[0] != RTEMS_SUCCESSFUL)
1080 if (status[0] != RTEMS_SUCCESSFUL)
1081 {
1081 {
1082 PRINTF1("in restart_science_task *** 0 ERR %d\n", status[0])
1082 PRINTF1("in restart_science_task *** 0 ERR %d\n", status[0])
1083 }
1083 }
1084
1084
1085 status[1] = rtems_task_restart( Task_id[TASKID_BPF0],1 );
1085 status[1] = rtems_task_restart( Task_id[TASKID_BPF0],1 );
1086 if (status[1] != RTEMS_SUCCESSFUL)
1086 if (status[1] != RTEMS_SUCCESSFUL)
1087 {
1087 {
1088 PRINTF1("in restart_science_task *** 1 ERR %d\n", status[1])
1088 PRINTF1("in restart_science_task *** 1 ERR %d\n", status[1])
1089 }
1089 }
1090
1090
1091 status[2] = rtems_task_restart( Task_id[TASKID_WFRM],1 );
1091 status[2] = rtems_task_restart( Task_id[TASKID_WFRM],1 );
1092 if (status[2] != RTEMS_SUCCESSFUL)
1092 if (status[2] != RTEMS_SUCCESSFUL)
1093 {
1093 {
1094 PRINTF1("in restart_science_task *** 2 ERR %d\n", status[2])
1094 PRINTF1("in restart_science_task *** 2 ERR %d\n", status[2])
1095 }
1095 }
1096
1096
1097 status[3] = rtems_task_restart( Task_id[TASKID_CWF3],1 );
1097 status[3] = rtems_task_restart( Task_id[TASKID_CWF3],1 );
1098 if (status[3] != RTEMS_SUCCESSFUL)
1098 if (status[3] != RTEMS_SUCCESSFUL)
1099 {
1099 {
1100 PRINTF1("in restart_science_task *** 3 ERR %d\n", status[3])
1100 PRINTF1("in restart_science_task *** 3 ERR %d\n", status[3])
1101 }
1101 }
1102
1102
1103 status[4] = rtems_task_restart( Task_id[TASKID_CWF2],1 );
1103 status[4] = rtems_task_restart( Task_id[TASKID_CWF2],1 );
1104 if (status[4] != RTEMS_SUCCESSFUL)
1104 if (status[4] != RTEMS_SUCCESSFUL)
1105 {
1105 {
1106 PRINTF1("in restart_science_task *** 4 ERR %d\n", status[4])
1106 PRINTF1("in restart_science_task *** 4 ERR %d\n", status[4])
1107 }
1107 }
1108
1108
1109 status[5] = rtems_task_restart( Task_id[TASKID_CWF1],1 );
1109 status[5] = rtems_task_restart( Task_id[TASKID_CWF1],1 );
1110 if (status[5] != RTEMS_SUCCESSFUL)
1110 if (status[5] != RTEMS_SUCCESSFUL)
1111 {
1111 {
1112 PRINTF1("in restart_science_task *** 5 ERR %d\n", status[5])
1112 PRINTF1("in restart_science_task *** 5 ERR %d\n", status[5])
1113 }
1113 }
1114
1114
1115 if ( (status[0] != RTEMS_SUCCESSFUL) || (status[1] != RTEMS_SUCCESSFUL) || (status[2] != RTEMS_SUCCESSFUL) ||
1115 if ( (status[0] != RTEMS_SUCCESSFUL) || (status[1] != RTEMS_SUCCESSFUL) || (status[2] != RTEMS_SUCCESSFUL) ||
1116 (status[3] != RTEMS_SUCCESSFUL) || (status[4] != RTEMS_SUCCESSFUL) || (status[5] != RTEMS_SUCCESSFUL) )
1116 (status[3] != RTEMS_SUCCESSFUL) || (status[4] != RTEMS_SUCCESSFUL) || (status[5] != RTEMS_SUCCESSFUL) )
1117 {
1117 {
1118 ret = RTEMS_UNSATISFIED;
1118 ret = RTEMS_UNSATISFIED;
1119 }
1119 }
1120
1120
1121 return ret;
1121 return ret;
1122 }
1122 }
1123
1123
1124 int suspend_science_tasks()
1124 int suspend_science_tasks()
1125 {
1125 {
1126 rtems_status_code status[6];
1126 rtems_status_code status[6];
1127 rtems_status_code ret;
1127 rtems_status_code ret;
1128
1128
1129 ret = RTEMS_SUCCESSFUL;
1129 ret = RTEMS_SUCCESSFUL;
1130
1130
1131 status[0] = rtems_task_suspend( Task_id[TASKID_AVF0] );
1131 status[0] = rtems_task_suspend( Task_id[TASKID_AVF0] );
1132 if (status[0] != RTEMS_SUCCESSFUL)
1132 if (status[0] != RTEMS_SUCCESSFUL)
1133 {
1133 {
1134 PRINTF1("in suspend_science_task *** 0 ERR %d\n", status[0])
1134 PRINTF1("in suspend_science_task *** 0 ERR %d\n", status[0])
1135 }
1135 }
1136
1136
1137 status[1] = rtems_task_suspend( Task_id[TASKID_BPF0] );
1137 status[1] = rtems_task_suspend( Task_id[TASKID_BPF0] );
1138 if (status[1] != RTEMS_SUCCESSFUL)
1138 if (status[1] != RTEMS_SUCCESSFUL)
1139 {
1139 {
1140 PRINTF1("in suspend_science_task *** 1 ERR %d\n", status[1])
1140 PRINTF1("in suspend_science_task *** 1 ERR %d\n", status[1])
1141 }
1141 }
1142
1142
1143 status[2] = rtems_task_suspend( Task_id[TASKID_WFRM] );
1143 status[2] = rtems_task_suspend( Task_id[TASKID_WFRM] );
1144 if (status[2] != RTEMS_SUCCESSFUL)
1144 if (status[2] != RTEMS_SUCCESSFUL)
1145 {
1145 {
1146 PRINTF1("in suspend_science_task *** 2 ERR %d\n", status[2])
1146 PRINTF1("in suspend_science_task *** 2 ERR %d\n", status[2])
1147 }
1147 }
1148
1148
1149 status[3] = rtems_task_suspend( Task_id[TASKID_CWF3] );
1149 status[3] = rtems_task_suspend( Task_id[TASKID_CWF3] );
1150 if (status[3] != RTEMS_SUCCESSFUL)
1150 if (status[3] != RTEMS_SUCCESSFUL)
1151 {
1151 {
1152 PRINTF1("in suspend_science_task *** 3 ERR %d\n", status[3])
1152 PRINTF1("in suspend_science_task *** 3 ERR %d\n", status[3])
1153 }
1153 }
1154
1154
1155 status[4] = rtems_task_suspend( Task_id[TASKID_CWF2] );
1155 status[4] = rtems_task_suspend( Task_id[TASKID_CWF2] );
1156 if (status[4] != RTEMS_SUCCESSFUL)
1156 if (status[4] != RTEMS_SUCCESSFUL)
1157 {
1157 {
1158 PRINTF1("in suspend_science_task *** 4 ERR %d\n", status[4])
1158 PRINTF1("in suspend_science_task *** 4 ERR %d\n", status[4])
1159 }
1159 }
1160
1160
1161 status[5] = rtems_task_suspend( Task_id[TASKID_CWF1] );
1161 status[5] = rtems_task_suspend( Task_id[TASKID_CWF1] );
1162 if (status[5] != RTEMS_SUCCESSFUL)
1162 if (status[5] != RTEMS_SUCCESSFUL)
1163 {
1163 {
1164 PRINTF1("in suspend_science_task *** 5 ERR %d\n", status[5])
1164 PRINTF1("in suspend_science_task *** 5 ERR %d\n", status[5])
1165 }
1165 }
1166
1166
1167 if ( (status[0] != RTEMS_SUCCESSFUL) || (status[1] != RTEMS_SUCCESSFUL) || (status[2] != RTEMS_SUCCESSFUL) ||
1167 if ( (status[0] != RTEMS_SUCCESSFUL) || (status[1] != RTEMS_SUCCESSFUL) || (status[2] != RTEMS_SUCCESSFUL) ||
1168 (status[3] != RTEMS_SUCCESSFUL) || (status[4] != RTEMS_SUCCESSFUL) || (status[5] != RTEMS_SUCCESSFUL) )
1168 (status[3] != RTEMS_SUCCESSFUL) || (status[4] != RTEMS_SUCCESSFUL) || (status[5] != RTEMS_SUCCESSFUL) )
1169 {
1169 {
1170 ret = RTEMS_UNSATISFIED;
1170 ret = RTEMS_UNSATISFIED;
1171 }
1171 }
1172
1172
1173 return ret;
1173 return ret;
1174 }
1174 }
1175
1175
1176 //****************
1176 //****************
1177 // CLOSING ACTIONS
1177 // CLOSING ACTIONS
1178
1178
1179 int send_tm_lfr_tc_exe_success(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
1179 int send_tm_lfr_tc_exe_success(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
1180 {
1180 {
1181 int ret;
1181 int ret;
1182 rtems_status_code status;
1182 rtems_status_code status;
1183 TMHeader_t TM_header;
1183 TMHeader_t TM_header;
1184 char data[4];
1184 char data[4];
1185 spw_ioctl_pkt_send spw_ioctl_send;
1185 spw_ioctl_pkt_send spw_ioctl_send;
1186
1186
1187 ret = LFR_SUCCESSFUL;
1187 ret = LFR_SUCCESSFUL;
1188
1188
1189 TM_build_header( TM_LFR_TC_EXE_OK, PACKET_LENGTH_TC_EXE_SUCCESS,
1189 TM_build_header( TM_LFR_TC_EXE_OK, PACKET_LENGTH_TC_EXE_SUCCESS,
1190 &TM_header,
1190 &TM_header,
1191 TC->sourceID); // TC source ID
1191 TC->sourceID); // TC source ID
1192
1192
1193 data[0] = TC->packetID[0];
1193 data[0] = TC->packetID[0];
1194 data[1] = TC->packetID[1];
1194 data[1] = TC->packetID[1];
1195 data[2] = TC->packetSequenceControl[0];
1195 data[2] = TC->packetSequenceControl[0];
1196 data[3] = TC->packetSequenceControl[1];
1196 data[3] = TC->packetSequenceControl[1];
1197
1197
1198 // filling the structure for the spacewire transmission
1198 // filling the structure for the spacewire transmission
1199 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1199 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1200 spw_ioctl_send.hdr = (char*) &TM_header;
1200 spw_ioctl_send.hdr = (char*) &TM_header;
1201 spw_ioctl_send.dlen = 4;
1201 spw_ioctl_send.dlen = 4;
1202 spw_ioctl_send.data = data;
1202 spw_ioctl_send.data = data;
1203 spw_ioctl_send.options = 0;
1203 spw_ioctl_send.options = 0;
1204
1204
1205 // SEND DATA
1205 // SEND DATA
1206 //status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1207 status = rtems_message_queue_urgent( queue_id, &spw_ioctl_send, sizeof(spw_ioctl_send));
1206 status = rtems_message_queue_urgent( queue_id, &spw_ioctl_send, sizeof(spw_ioctl_send));
1208 if (status != RTEMS_SUCCESSFUL) {
1207 if (status != RTEMS_SUCCESSFUL) {
1209 PRINTF("in send_tm_lfr_tc_exe_success *** ERR\n")
1208 PRINTF("in send_tm_lfr_tc_exe_success *** ERR\n")
1210 ret = LFR_DEFAULT;
1209 ret = LFR_DEFAULT;
1211 }
1210 }
1212
1211
1213 return ret;
1212 return ret;
1214 }
1213 }
1215
1214
1216 int send_tm_lfr_tc_exe_not_executable(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
1215 int send_tm_lfr_tc_exe_not_executable(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
1217 {
1216 {
1218 int ret;
1217 int ret;
1219 rtems_status_code status;
1218 rtems_status_code status;
1220 TMHeader_t TM_header;
1219 TMHeader_t TM_header;
1221 char data[10];
1220 char data[10];
1222 spw_ioctl_pkt_send spw_ioctl_send;
1221 spw_ioctl_pkt_send spw_ioctl_send;
1223
1222
1224 ret = LFR_SUCCESSFUL;
1223 ret = LFR_SUCCESSFUL;
1225
1224
1226 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_NOT_EXECUTABLE,
1225 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_NOT_EXECUTABLE,
1227 &TM_header,
1226 &TM_header,
1228 TC->sourceID); // TC source ID
1227 TC->sourceID); // TC source ID
1229
1228
1230 data[0] = (char) (FAILURE_CODE_NOT_EXECUTABLE >> 8);
1229 data[0] = (char) (FAILURE_CODE_NOT_EXECUTABLE >> 8);
1231 data[1] = (char) FAILURE_CODE_NOT_EXECUTABLE;
1230 data[1] = (char) FAILURE_CODE_NOT_EXECUTABLE;
1232 data[2] = TC->packetID[0];
1231 data[2] = TC->packetID[0];
1233 data[3] = TC->packetID[1];
1232 data[3] = TC->packetID[1];
1234 data[4] = TC->packetSequenceControl[0];
1233 data[4] = TC->packetSequenceControl[0];
1235 data[5] = TC->packetSequenceControl[1];
1234 data[5] = TC->packetSequenceControl[1];
1236 data[6] = TC->serviceType; // type of the rejected TC
1235 data[6] = TC->serviceType; // type of the rejected TC
1237 data[7] = TC->serviceSubType; // subtype of the rejected TC
1236 data[7] = TC->serviceSubType; // subtype of the rejected TC
1238 data[8] = housekeeping_packet.lfr_status_word[0];
1237 data[8] = housekeeping_packet.lfr_status_word[0];
1239 data[6] = housekeeping_packet.lfr_status_word[1];
1238 data[6] = housekeeping_packet.lfr_status_word[1];
1240
1239
1241 // filling the structure for the spacewire transmission
1240 // filling the structure for the spacewire transmission
1242 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1241 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1243 spw_ioctl_send.hdr = (char*) &TM_header;
1242 spw_ioctl_send.hdr = (char*) &TM_header;
1244 spw_ioctl_send.dlen = 10;
1243 spw_ioctl_send.dlen = 10;
1245 spw_ioctl_send.data = data;
1244 spw_ioctl_send.data = data;
1246 spw_ioctl_send.options = 0;
1245 spw_ioctl_send.options = 0;
1247
1246
1248 // SEND DATA
1247 // SEND DATA
1249 //status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1250 status = rtems_message_queue_urgent( queue_id, &spw_ioctl_send, sizeof(spw_ioctl_send));
1248 status = rtems_message_queue_urgent( queue_id, &spw_ioctl_send, sizeof(spw_ioctl_send));
1251 if (status != RTEMS_SUCCESSFUL) {
1249 if (status != RTEMS_SUCCESSFUL) {
1252 PRINTF("in send_tm_lfr_tc_exe_success *** ERR\n")
1250 PRINTF("in send_tm_lfr_tc_exe_success *** ERR\n")
1253 ret = LFR_DEFAULT;
1251 ret = LFR_DEFAULT;
1254 }
1252 }
1255
1253
1256 return LFR_SUCCESSFUL;
1254 return LFR_SUCCESSFUL;
1257 }
1255 }
1258
1256
1259 int send_tm_lfr_tc_exe_not_implemented(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
1257 int send_tm_lfr_tc_exe_not_implemented(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
1260 {
1258 {
1261 int ret;
1259 int ret;
1262 rtems_status_code status;
1260 rtems_status_code status;
1263 TMHeader_t TM_header;
1261 TMHeader_t TM_header;
1264 char data[8];
1262 char data[8];
1265 spw_ioctl_pkt_send spw_ioctl_send;
1263 spw_ioctl_pkt_send spw_ioctl_send;
1266
1264
1267 ret = LFR_SUCCESSFUL;
1265 ret = LFR_SUCCESSFUL;
1268
1266
1269 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED,
1267 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED,
1270 &TM_header,
1268 &TM_header,
1271 TC->sourceID); // TC source ID
1269 TC->sourceID); // TC source ID
1272
1270
1273 data[0] = (char) (FAILURE_CODE_NOT_IMPLEMENTED >> 8);
1271 data[0] = (char) (FAILURE_CODE_NOT_IMPLEMENTED >> 8);
1274 data[1] = (char) FAILURE_CODE_NOT_IMPLEMENTED;
1272 data[1] = (char) FAILURE_CODE_NOT_IMPLEMENTED;
1275 data[2] = TC->packetID[0];
1273 data[2] = TC->packetID[0];
1276 data[3] = TC->packetID[1];
1274 data[3] = TC->packetID[1];
1277 data[4] = TC->packetSequenceControl[0];
1275 data[4] = TC->packetSequenceControl[0];
1278 data[5] = TC->packetSequenceControl[1];
1276 data[5] = TC->packetSequenceControl[1];
1279 data[6] = TC->serviceType; // type of the rejected TC
1277 data[6] = TC->serviceType; // type of the rejected TC
1280 data[7] = TC->serviceSubType; // subtype of the rejected TC
1278 data[7] = TC->serviceSubType; // subtype of the rejected TC
1281
1279
1282 // filling the structure for the spacewire transmission
1280 // filling the structure for the spacewire transmission
1283 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1281 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1284 spw_ioctl_send.hdr = (char*) &TM_header;
1282 spw_ioctl_send.hdr = (char*) &TM_header;
1285 spw_ioctl_send.dlen = 8;
1283 spw_ioctl_send.dlen = 8;
1286 spw_ioctl_send.data = data;
1284 spw_ioctl_send.data = data;
1287 spw_ioctl_send.options = 0;
1285 spw_ioctl_send.options = 0;
1288
1286
1289 // SEND DATA
1287 // SEND DATA
1290 //status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1291 status = rtems_message_queue_urgent( queue_id, &spw_ioctl_send, sizeof(spw_ioctl_send));
1288 status = rtems_message_queue_urgent( queue_id, &spw_ioctl_send, sizeof(spw_ioctl_send));
1292 if (status != RTEMS_SUCCESSFUL) {
1289 if (status != RTEMS_SUCCESSFUL) {
1293 PRINTF("in send_tm_lfr_tc_exe_not_implemented *** ERR\n")
1290 PRINTF("in send_tm_lfr_tc_exe_not_implemented *** ERR\n")
1294 ret = LFR_DEFAULT;
1291 ret = LFR_DEFAULT;
1295 }
1292 }
1296
1293
1297 return LFR_SUCCESSFUL;
1294 return LFR_SUCCESSFUL;
1298 }
1295 }
1299
1296
1300 int send_tm_lfr_tc_exe_error(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
1297 int send_tm_lfr_tc_exe_error(ccsdsTelecommandPacket_t *TC, rtems_id queue_id)
1301 {
1298 {
1302 int ret;
1299 int ret;
1303 rtems_status_code status;
1300 rtems_status_code status;
1304 TMHeader_t TM_header;
1301 TMHeader_t TM_header;
1305 char data[8];
1302 char data[8];
1306 spw_ioctl_pkt_send spw_ioctl_send;
1303 spw_ioctl_pkt_send spw_ioctl_send;
1307
1304
1308 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_ERROR,
1305 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_ERROR,
1309 &TM_header,
1306 &TM_header,
1310 TC->sourceID); // TC source ID
1307 TC->sourceID); // TC source ID
1311
1308
1312 data[0] = (char) (FAILURE_CODE_ERROR >> 8);
1309 data[0] = (char) (FAILURE_CODE_ERROR >> 8);
1313 data[1] = (char) FAILURE_CODE_ERROR;
1310 data[1] = (char) FAILURE_CODE_ERROR;
1314 data[2] = TC->packetID[0];
1311 data[2] = TC->packetID[0];
1315 data[3] = TC->packetID[1];
1312 data[3] = TC->packetID[1];
1316 data[4] = TC->packetSequenceControl[0];
1313 data[4] = TC->packetSequenceControl[0];
1317 data[5] = TC->packetSequenceControl[1];
1314 data[5] = TC->packetSequenceControl[1];
1318 data[6] = TC->serviceType; // type of the rejected TC
1315 data[6] = TC->serviceType; // type of the rejected TC
1319 data[7] = TC->serviceSubType; // subtype of the rejected TC
1316 data[7] = TC->serviceSubType; // subtype of the rejected TC
1320
1317
1321 // filling the structure for the spacewire transmission
1318 // filling the structure for the spacewire transmission
1322 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1319 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1323 spw_ioctl_send.hdr = (char*) &TM_header;
1320 spw_ioctl_send.hdr = (char*) &TM_header;
1324 spw_ioctl_send.dlen = 8;
1321 spw_ioctl_send.dlen = 8;
1325 spw_ioctl_send.data = data;
1322 spw_ioctl_send.data = data;
1326 spw_ioctl_send.options = 0;
1323 spw_ioctl_send.options = 0;
1327
1324
1328 // SEND DATA
1325 // SEND DATA
1329 //status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1330 status = rtems_message_queue_urgent( queue_id, &spw_ioctl_send, sizeof(spw_ioctl_send));
1326 status = rtems_message_queue_urgent( queue_id, &spw_ioctl_send, sizeof(spw_ioctl_send));
1331 if (status != RTEMS_SUCCESSFUL) {
1327 if (status != RTEMS_SUCCESSFUL) {
1332 PRINTF("in send_tm_lfr_tc_exe_error *** ERR\n")
1328 PRINTF("in send_tm_lfr_tc_exe_error *** ERR\n")
1333 ret = LFR_DEFAULT;
1329 ret = LFR_DEFAULT;
1334 }
1330 }
1335
1331
1336 return LFR_SUCCESSFUL;
1332 return LFR_SUCCESSFUL;
1337 }
1333 }
1338
1334
1339 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC)
1335 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC)
1340 {
1336 {
1341 housekeeping_packet.hk_lfr_last_exe_tc_id[0] = TC->packetID[0];
1337 housekeeping_packet.hk_lfr_last_exe_tc_id[0] = TC->packetID[0];
1342 housekeeping_packet.hk_lfr_last_exe_tc_id[1] = TC->packetID[1];
1338 housekeeping_packet.hk_lfr_last_exe_tc_id[1] = TC->packetID[1];
1343 housekeeping_packet.hk_lfr_last_exe_tc_type[0] = 0x00;
1339 housekeeping_packet.hk_lfr_last_exe_tc_type[0] = 0x00;
1344 housekeeping_packet.hk_lfr_last_exe_tc_type[1] = TC->serviceType;
1340 housekeeping_packet.hk_lfr_last_exe_tc_type[1] = TC->serviceType;
1345 housekeeping_packet.hk_lfr_last_exe_tc_subtype[0] = 0x00;
1341 housekeeping_packet.hk_lfr_last_exe_tc_subtype[0] = 0x00;
1346 housekeeping_packet.hk_lfr_last_exe_tc_subtype[1] = TC->serviceSubType;
1342 housekeeping_packet.hk_lfr_last_exe_tc_subtype[1] = TC->serviceSubType;
1347 housekeeping_packet.hk_lfr_last_exe_tc_time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
1343 housekeeping_packet.hk_lfr_last_exe_tc_time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
1348 housekeeping_packet.hk_lfr_last_exe_tc_time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
1344 housekeeping_packet.hk_lfr_last_exe_tc_time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
1349 housekeeping_packet.hk_lfr_last_exe_tc_time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
1345 housekeeping_packet.hk_lfr_last_exe_tc_time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
1350 housekeeping_packet.hk_lfr_last_exe_tc_time[3] = (unsigned char) (time_management_regs->coarse_time);
1346 housekeeping_packet.hk_lfr_last_exe_tc_time[3] = (unsigned char) (time_management_regs->coarse_time);
1351 housekeeping_packet.hk_lfr_last_exe_tc_time[4] = (unsigned char) (time_management_regs->fine_time>>8);
1347 housekeeping_packet.hk_lfr_last_exe_tc_time[4] = (unsigned char) (time_management_regs->fine_time>>8);
1352 housekeeping_packet.hk_lfr_last_exe_tc_time[5] = (unsigned char) (time_management_regs->fine_time);
1348 housekeeping_packet.hk_lfr_last_exe_tc_time[5] = (unsigned char) (time_management_regs->fine_time);
1353 }
1349 }
1354
1350
1355 void update_last_TC_rej(ccsdsTelecommandPacket_t *TC)
1351 void update_last_TC_rej(ccsdsTelecommandPacket_t *TC)
1356 {
1352 {
1357 housekeeping_packet.hk_lfr_last_rej_tc_id[0] = TC->packetID[0];
1353 housekeeping_packet.hk_lfr_last_rej_tc_id[0] = TC->packetID[0];
1358 housekeeping_packet.hk_lfr_last_rej_tc_id[1] = TC->packetID[1];
1354 housekeeping_packet.hk_lfr_last_rej_tc_id[1] = TC->packetID[1];
1359 housekeeping_packet.hk_lfr_last_rej_tc_type[0] = 0x00;
1355 housekeeping_packet.hk_lfr_last_rej_tc_type[0] = 0x00;
1360 housekeeping_packet.hk_lfr_last_rej_tc_type[1] = TC->serviceType;
1356 housekeeping_packet.hk_lfr_last_rej_tc_type[1] = TC->serviceType;
1361 housekeeping_packet.hk_lfr_last_rej_tc_subtype[0] = 0x00;
1357 housekeeping_packet.hk_lfr_last_rej_tc_subtype[0] = 0x00;
1362 housekeeping_packet.hk_lfr_last_rej_tc_subtype[1] = TC->serviceSubType;
1358 housekeeping_packet.hk_lfr_last_rej_tc_subtype[1] = TC->serviceSubType;
1363 housekeeping_packet.hk_lfr_last_rej_tc_time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
1359 housekeeping_packet.hk_lfr_last_rej_tc_time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
1364 housekeeping_packet.hk_lfr_last_rej_tc_time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
1360 housekeeping_packet.hk_lfr_last_rej_tc_time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
1365 housekeeping_packet.hk_lfr_last_rej_tc_time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
1361 housekeeping_packet.hk_lfr_last_rej_tc_time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
1366 housekeeping_packet.hk_lfr_last_rej_tc_time[3] = (unsigned char) (time_management_regs->coarse_time);
1362 housekeeping_packet.hk_lfr_last_rej_tc_time[3] = (unsigned char) (time_management_regs->coarse_time);
1367 housekeeping_packet.hk_lfr_last_rej_tc_time[4] = (unsigned char) (time_management_regs->fine_time>>8);
1363 housekeeping_packet.hk_lfr_last_rej_tc_time[4] = (unsigned char) (time_management_regs->fine_time>>8);
1368 housekeeping_packet.hk_lfr_last_rej_tc_time[5] = (unsigned char) (time_management_regs->fine_time);
1364 housekeeping_packet.hk_lfr_last_rej_tc_time[5] = (unsigned char) (time_management_regs->fine_time);
1369 }
1365 }
1370
1366
1371 void close_action(ccsdsTelecommandPacket_t *TC, int result, rtems_id queue_id)
1367 void close_action(ccsdsTelecommandPacket_t *TC, int result, rtems_id queue_id)
1372 {
1368 {
1373 unsigned int val = 0;
1369 unsigned int val = 0;
1374 if (result == LFR_SUCCESSFUL)
1370 if (result == LFR_SUCCESSFUL)
1375 {
1371 {
1376 if ( !( (TC->serviceType==TC_TYPE_TIME) && (TC->serviceSubType==TC_SUBTYPE_UPDT_TIME) ) )
1372 if ( !( (TC->serviceType==TC_TYPE_TIME) && (TC->serviceSubType==TC_SUBTYPE_UPDT_TIME) ) )
1377 {
1373 {
1378 send_tm_lfr_tc_exe_success( TC, queue_id );
1374 send_tm_lfr_tc_exe_success( TC, queue_id );
1379 }
1375 }
1380 update_last_TC_exe( TC );
1376 update_last_TC_exe( TC );
1381 val = housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[0] * 256 + housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[1];
1377 val = housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[0] * 256 + housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[1];
1382 val++;
1378 val++;
1383 housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[0] = (unsigned char) (val >> 8);
1379 housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[0] = (unsigned char) (val >> 8);
1384 housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[1] = (unsigned char) (val);
1380 housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[1] = (unsigned char) (val);
1385 }
1381 }
1386 else
1382 else
1387 {
1383 {
1388 update_last_TC_rej( TC );
1384 update_last_TC_rej( TC );
1389 val = housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[0] * 256 + housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[1];
1385 val = housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[0] * 256 + housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[1];
1390 val++;
1386 val++;
1391 housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[0] = (unsigned char) (val >> 8);
1387 housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[0] = (unsigned char) (val >> 8);
1392 housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[1] = (unsigned char) (val);
1388 housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[1] = (unsigned char) (val);
1393 }
1389 }
1394 }
1390 }
1395
1391
1396 //***************************
1392 //***************************
1397 // Interrupt Service Routines
1393 // Interrupt Service Routines
1398 rtems_isr commutation_isr1( rtems_vector_number vector )
1394 rtems_isr commutation_isr1( rtems_vector_number vector )
1399 {
1395 {
1400 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
1396 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
1401 printf("In commutation_isr1 *** Error sending event to DUMB\n");
1397 printf("In commutation_isr1 *** Error sending event to DUMB\n");
1402 }
1398 }
1403 }
1399 }
1404
1400
1405 rtems_isr commutation_isr2( rtems_vector_number vector )
1401 rtems_isr commutation_isr2( rtems_vector_number vector )
1406 {
1402 {
1407 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
1403 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
1408 printf("In commutation_isr2 *** Error sending event to DUMB\n");
1404 printf("In commutation_isr2 *** Error sending event to DUMB\n");
1409 }
1405 }
1410 }
1406 }
1411
1407
1412
1408
1413
1409
1414
1410
@@ -1,841 +1,841
1 #include <wf_handler.h>
1 #include <wf_handler.h>
2
2
3 // SWF
3 // SWF
4 Header_TM_LFR_SCIENCE_SWF_t headerSWF_F0[7];
4 Header_TM_LFR_SCIENCE_SWF_t headerSWF_F0[7];
5 Header_TM_LFR_SCIENCE_SWF_t headerSWF_F1[7];
5 Header_TM_LFR_SCIENCE_SWF_t headerSWF_F1[7];
6 Header_TM_LFR_SCIENCE_SWF_t headerSWF_F2[7];
6 Header_TM_LFR_SCIENCE_SWF_t headerSWF_F2[7];
7 // CWF
7 // CWF
8 Header_TM_LFR_SCIENCE_CWF_t headerCWF_F1[7];
8 Header_TM_LFR_SCIENCE_CWF_t headerCWF_F1[7];
9 Header_TM_LFR_SCIENCE_CWF_t headerCWF_F2_BURST[7];
9 Header_TM_LFR_SCIENCE_CWF_t headerCWF_F2_BURST[7];
10 Header_TM_LFR_SCIENCE_CWF_t headerCWF_F2_SBM2[7];
10 Header_TM_LFR_SCIENCE_CWF_t headerCWF_F2_SBM2[7];
11 Header_TM_LFR_SCIENCE_CWF_t headerCWF_F3[7];
11 Header_TM_LFR_SCIENCE_CWF_t headerCWF_F3[7];
12
12
13 unsigned char doubleSendCWF1 = 0;
13 unsigned char doubleSendCWF1 = 0;
14 unsigned char doubleSendCWF2 = 0;
14 unsigned char doubleSendCWF2 = 0;
15
15
16 rtems_isr waveforms_isr( rtems_vector_number vector )
16 rtems_isr waveforms_isr( rtems_vector_number vector )
17 {
17 {
18
18
19 #ifdef GSA
19 #ifdef GSA
20 #else
20 #else
21 if ( (lfrCurrentMode == LFR_MODE_NORMAL)
21 if ( (lfrCurrentMode == LFR_MODE_NORMAL)
22 || (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) )
22 || (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) )
23 { // in modes other than STANDBY and BURST, send the CWF_F3 data
23 { // in modes other than STANDBY and BURST, send the CWF_F3 data
24 if ((waveform_picker_regs->status & 0x08) == 0x08){ // [1000] f3 is full
24 if ((waveform_picker_regs->status & 0x08) == 0x08){ // [1000] f3 is full
25 // (1) change the receiving buffer for the waveform picker
25 // (1) change the receiving buffer for the waveform picker
26 if (waveform_picker_regs->addr_data_f3 == (int) wf_cont_f3) {
26 if (waveform_picker_regs->addr_data_f3 == (int) wf_cont_f3) {
27 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3_bis);
27 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3_bis);
28 }
28 }
29 else {
29 else {
30 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3);
30 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3);
31 }
31 }
32 // (2) send an event for the waveforms transmission
32 // (2) send an event for the waveforms transmission
33 if (rtems_event_send( Task_id[TASKID_CWF3], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
33 if (rtems_event_send( Task_id[TASKID_CWF3], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
34 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
34 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
35 }
35 }
36 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffff777; // reset f3 bits to 0, [1111 0111 0111 0111]
36 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffff777; // reset f3 bits to 0, [1111 0111 0111 0111]
37 }
37 }
38 }
38 }
39 #endif
39 #endif
40
40
41 switch(lfrCurrentMode)
41 switch(lfrCurrentMode)
42 {
42 {
43 //********
43 //********
44 // STANDBY
44 // STANDBY
45 case(LFR_MODE_STANDBY):
45 case(LFR_MODE_STANDBY):
46 break;
46 break;
47
47
48 //******
48 //******
49 // NORMAL
49 // NORMAL
50 case(LFR_MODE_NORMAL):
50 case(LFR_MODE_NORMAL):
51 #ifdef GSA
51 #ifdef GSA
52 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
52 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
53 #else
53 #else
54 if ( (waveform_picker_regs->burst_enable & 0x7) == 0x0 ){ // if no channel is enable
54 if ( (waveform_picker_regs->burst_enable & 0x7) == 0x0 ){ // if no channel is enable
55 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
55 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
56 }
56 }
57 else {
57 else {
58 if ( (waveform_picker_regs->status & 0x7) == 0x7 ){ // f2 f1 and f0 are full
58 if ( (waveform_picker_regs->status & 0x7) == 0x7 ){ // f2 f1 and f0 are full
59 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable & 0x08;
59 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable & 0x08;
60 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
60 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
61 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
61 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
62 }
62 }
63 waveform_picker_regs->status = waveform_picker_regs->status & 0x00;
63 waveform_picker_regs->status = waveform_picker_regs->status & 0x00;
64 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x07; // [0111] enable f2 f1 f0
64 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x07; // [0111] enable f2 f1 f0
65 }
65 }
66 }
66 }
67 #endif
67 #endif
68 break;
68 break;
69
69
70 //******
70 //******
71 // BURST
71 // BURST
72 case(LFR_MODE_BURST):
72 case(LFR_MODE_BURST):
73 #ifdef GSA
73 #ifdef GSA
74 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
74 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
75 #else
75 #else
76 if ((waveform_picker_regs->status & 0x04) == 0x04){ // [0100] check the f2 full bit
76 if ((waveform_picker_regs->status & 0x04) == 0x04){ // [0100] check the f2 full bit
77 // (1) change the receiving buffer for the waveform picker
77 // (1) change the receiving buffer for the waveform picker
78 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
78 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
79 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_bis);
79 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_bis);
80 }
80 }
81 else {
81 else {
82 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
82 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
83 }
83 }
84 // (2) send an event for the waveforms transmission
84 // (2) send an event for the waveforms transmission
85 if (rtems_event_send( Task_id[TASKID_CWF2], RTEMS_EVENT_MODE_BURST ) != RTEMS_SUCCESSFUL) {
85 if (rtems_event_send( Task_id[TASKID_CWF2], RTEMS_EVENT_MODE_BURST ) != RTEMS_SUCCESSFUL) {
86 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
86 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
87 }
87 }
88 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffbbb; // [1111 1011 1011 1011] f2 bits = 0
88 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffbbb; // [1111 1011 1011 1011] f2 bits = 0
89 }
89 }
90 #endif
90 #endif
91 break;
91 break;
92
92
93 //*****
93 //*****
94 // SBM1
94 // SBM1
95 case(LFR_MODE_SBM1):
95 case(LFR_MODE_SBM1):
96 #ifdef GSA
96 #ifdef GSA
97 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
97 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
98 #else
98 #else
99 if ((waveform_picker_regs->status & 0x02) == 0x02){ // [0010] check the f1 full bit
99 if ((waveform_picker_regs->status & 0x02) == 0x02){ // [0010] check the f1 full bit
100 // (1) change the receiving buffer for the waveform picker
100 // (1) change the receiving buffer for the waveform picker
101 if ( param_local.local_sbm1_nb_cwf_sent == (param_local.local_sbm1_nb_cwf_max-1) )
101 if ( param_local.local_sbm1_nb_cwf_sent == (param_local.local_sbm1_nb_cwf_max-1) )
102 {
102 {
103 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1_norm);
103 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1_norm);
104 }
104 }
105 else if ( waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1_norm )
105 else if ( waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1_norm )
106 {
106 {
107 doubleSendCWF1 = 1;
107 doubleSendCWF1 = 1;
108 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1);
108 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1);
109 }
109 }
110 else if ( waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1 ) {
110 else if ( waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1 ) {
111 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1_bis);
111 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1_bis);
112 }
112 }
113 else {
113 else {
114 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1);
114 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1);
115 }
115 }
116 // (2) send an event for the waveforms transmission
116 // (2) send an event for the waveforms transmission
117 if (rtems_event_send( Task_id[TASKID_CWF1], RTEMS_EVENT_MODE_SBM1 ) != RTEMS_SUCCESSFUL) {
117 if (rtems_event_send( Task_id[TASKID_CWF1], RTEMS_EVENT_MODE_SBM1 ) != RTEMS_SUCCESSFUL) {
118 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
118 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
119 }
119 }
120 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffddd; // [1111 1101 1101 1101] f1 bit = 0
120 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffddd; // [1111 1101 1101 1101] f1 bit = 0
121 }
121 }
122 if ( ( (waveform_picker_regs->status & 0x05) == 0x05 ) ) { // [0101] check the f2 and f0 full bit
122 if ( ( (waveform_picker_regs->status & 0x05) == 0x05 ) ) { // [0101] check the f2 and f0 full bit
123 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
123 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
124 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
124 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
125 }
125 }
126 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffaaa; // [1111 1010 1010 1010] f2 and f0 bits = 0
126 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffaaa; // [1111 1010 1010 1010] f2 and f0 bits = 0
127 reset_local_sbm1_nb_cwf_sent();
127 reset_local_sbm1_nb_cwf_sent();
128 }
128 }
129
129
130 #endif
130 #endif
131 break;
131 break;
132
132
133 //*****
133 //*****
134 // SBM2
134 // SBM2
135 case(LFR_MODE_SBM2):
135 case(LFR_MODE_SBM2):
136 #ifdef GSA
136 #ifdef GSA
137 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
137 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
138 #else
138 #else
139 if ((waveform_picker_regs->status & 0x04) == 0x04){ // [0100] check the f2 full bit
139 if ((waveform_picker_regs->status & 0x04) == 0x04){ // [0100] check the f2 full bit
140 // (1) change the receiving buffer for the waveform picker
140 // (1) change the receiving buffer for the waveform picker
141 if ( param_local.local_sbm2_nb_cwf_sent == (param_local.local_sbm2_nb_cwf_max-1) )
141 if ( param_local.local_sbm2_nb_cwf_sent == (param_local.local_sbm2_nb_cwf_max-1) )
142 {
142 {
143 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_norm);
143 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_norm);
144 }
144 }
145 else if ( waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2_norm ) {
145 else if ( waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2_norm ) {
146 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
146 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
147 doubleSendCWF2 = 1;
147 doubleSendCWF2 = 1;
148 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_SBM2_WFRM ) != RTEMS_SUCCESSFUL) {
148 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_SBM2_WFRM ) != RTEMS_SUCCESSFUL) {
149 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
149 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
150 }
150 }
151 reset_local_sbm2_nb_cwf_sent();
151 reset_local_sbm2_nb_cwf_sent();
152 }
152 }
153 else if ( waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2 ) {
153 else if ( waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2 ) {
154 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_bis);
154 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_bis);
155 }
155 }
156 else {
156 else {
157 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
157 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
158 }
158 }
159 // (2) send an event for the waveforms transmission
159 // (2) send an event for the waveforms transmission
160 if (rtems_event_send( Task_id[TASKID_CWF2], RTEMS_EVENT_MODE_SBM2 ) != RTEMS_SUCCESSFUL) {
160 if (rtems_event_send( Task_id[TASKID_CWF2], RTEMS_EVENT_MODE_SBM2 ) != RTEMS_SUCCESSFUL) {
161 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
161 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
162 }
162 }
163 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffbbb; // [1111 1011 1011 1011] f2 bit = 0
163 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffbbb; // [1111 1011 1011 1011] f2 bit = 0
164 }
164 }
165 if ( ( (waveform_picker_regs->status & 0x03) == 0x03 ) ) { // [0011] f3 f2 f1 f0, f1 and f0 are full
165 if ( ( (waveform_picker_regs->status & 0x03) == 0x03 ) ) { // [0011] f3 f2 f1 f0, f1 and f0 are full
166 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_SBM2 ) != RTEMS_SUCCESSFUL) {
166 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_SBM2 ) != RTEMS_SUCCESSFUL) {
167 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
167 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
168 }
168 }
169 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffccc; // [1111 1100 1100 1100] f1, f0 bits = 0
169 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffccc; // [1111 1100 1100 1100] f1, f0 bits = 0
170 }
170 }
171 #endif
171 #endif
172 break;
172 break;
173
173
174 //********
174 //********
175 // DEFAULT
175 // DEFAULT
176 default:
176 default:
177 break;
177 break;
178 }
178 }
179 }
179 }
180
180
181 rtems_isr waveforms_simulator_isr( rtems_vector_number vector )
181 rtems_isr waveforms_simulator_isr( rtems_vector_number vector )
182 {
182 {
183 unsigned char lfrMode;
183 unsigned char lfrMode;
184 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
184 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
185
185
186 switch(lfrMode) {
186 switch(lfrMode) {
187 case (LFR_MODE_STANDBY):
187 case (LFR_MODE_STANDBY):
188 break;
188 break;
189 case (LFR_MODE_NORMAL):
189 case (LFR_MODE_NORMAL):
190 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
190 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
191 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_5 );
191 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_5 );
192 }
192 }
193 break;
193 break;
194 case (LFR_MODE_BURST):
194 case (LFR_MODE_BURST):
195 break;
195 break;
196 case (LFR_MODE_SBM1):
196 case (LFR_MODE_SBM1):
197 break;
197 break;
198 case (LFR_MODE_SBM2):
198 case (LFR_MODE_SBM2):
199 break;
199 break;
200 }
200 }
201 }
201 }
202
202
203 rtems_task wfrm_task(rtems_task_argument argument) //used with the waveform picker VHDL IP
203 rtems_task wfrm_task(rtems_task_argument argument) //used with the waveform picker VHDL IP
204 {
204 {
205 rtems_event_set event_out;
205 rtems_event_set event_out;
206 rtems_id queue_id;
206 rtems_id queue_id;
207 rtems_status_code status;
207 rtems_status_code status;
208
208
209 init_header_snapshot_wf_table( SID_NORM_SWF_F0, headerSWF_F0 );
209 init_header_snapshot_wf_table( SID_NORM_SWF_F0, headerSWF_F0 );
210 init_header_snapshot_wf_table( SID_NORM_SWF_F1, headerSWF_F1 );
210 init_header_snapshot_wf_table( SID_NORM_SWF_F1, headerSWF_F1 );
211 init_header_snapshot_wf_table( SID_NORM_SWF_F2, headerSWF_F2 );
211 init_header_snapshot_wf_table( SID_NORM_SWF_F2, headerSWF_F2 );
212
212
213 init_waveforms();
213 init_waveforms();
214
214
215 status = rtems_message_queue_ident( misc_name[QUEUE_PKTS], 0, &queue_id );
215 status = rtems_message_queue_ident( misc_name[QUEUE_PKTS], 0, &queue_id );
216 if (status != RTEMS_SUCCESSFUL)
216 if (status != RTEMS_SUCCESSFUL)
217 {
217 {
218 PRINTF1("in WFRM *** ERR getting queue id, %d\n", status)
218 PRINTF1("in WFRM *** ERR getting queue id, %d\n", status)
219 }
219 }
220
220
221 BOOT_PRINTF("in WFRM ***\n")
221 BOOT_PRINTF("in WFRM ***\n")
222
222
223 while(1){
223 while(1){
224 // wait for an RTEMS_EVENT
224 // wait for an RTEMS_EVENT
225 rtems_event_receive(RTEMS_EVENT_MODE_NORMAL | RTEMS_EVENT_MODE_SBM1
225 rtems_event_receive(RTEMS_EVENT_MODE_NORMAL | RTEMS_EVENT_MODE_SBM1
226 | RTEMS_EVENT_MODE_SBM2 | RTEMS_EVENT_MODE_SBM2_WFRM,
226 | RTEMS_EVENT_MODE_SBM2 | RTEMS_EVENT_MODE_SBM2_WFRM,
227 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
227 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
228
228
229 if (event_out == RTEMS_EVENT_MODE_NORMAL)
229 if (event_out == RTEMS_EVENT_MODE_NORMAL)
230 {
230 {
231 send_waveform_SWF(wf_snap_f0, SID_NORM_SWF_F0, headerSWF_F0, queue_id);
231 send_waveform_SWF(wf_snap_f0, SID_NORM_SWF_F0, headerSWF_F0, queue_id);
232 send_waveform_SWF(wf_snap_f1, SID_NORM_SWF_F1, headerSWF_F1, queue_id);
232 send_waveform_SWF(wf_snap_f1, SID_NORM_SWF_F1, headerSWF_F1, queue_id);
233 send_waveform_SWF(wf_snap_f2, SID_NORM_SWF_F2, headerSWF_F2, queue_id);
233 send_waveform_SWF(wf_snap_f2, SID_NORM_SWF_F2, headerSWF_F2, queue_id);
234 #ifdef GSA
234 #ifdef GSA
235 waveform_picker_regs->status = waveform_picker_regs->status & 0xf888; // [1111 1000 1000 1000] f2, f1, f0 bits =0
235 waveform_picker_regs->status = waveform_picker_regs->status & 0xf888; // [1111 1000 1000 1000] f2, f1, f0 bits =0
236 #endif
236 #endif
237 }
237 }
238 else if (event_out == RTEMS_EVENT_MODE_SBM1)
238 else if (event_out == RTEMS_EVENT_MODE_SBM1)
239 {
239 {
240 send_waveform_SWF(wf_snap_f0, SID_NORM_SWF_F0, headerSWF_F0, queue_id);
240 send_waveform_SWF(wf_snap_f0, SID_NORM_SWF_F0, headerSWF_F0, queue_id);
241 send_waveform_SWF(wf_snap_f1_norm, SID_NORM_SWF_F1, headerSWF_F1, queue_id);
241 send_waveform_SWF(wf_snap_f1_norm, SID_NORM_SWF_F1, headerSWF_F1, queue_id);
242 send_waveform_SWF(wf_snap_f2, SID_NORM_SWF_F2, headerSWF_F2, queue_id);
242 send_waveform_SWF(wf_snap_f2, SID_NORM_SWF_F2, headerSWF_F2, queue_id);
243 #ifdef GSA
243 #ifdef GSA
244 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffaaa; // [1111 1010 1010 1010] f2, f0 bits = 0
244 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffaaa; // [1111 1010 1010 1010] f2, f0 bits = 0
245 #endif
245 #endif
246 }
246 }
247 else if (event_out == RTEMS_EVENT_MODE_SBM2)
247 else if (event_out == RTEMS_EVENT_MODE_SBM2)
248 {
248 {
249 send_waveform_SWF(wf_snap_f0, SID_NORM_SWF_F0, headerSWF_F0, queue_id);
249 send_waveform_SWF(wf_snap_f0, SID_NORM_SWF_F0, headerSWF_F0, queue_id);
250 send_waveform_SWF(wf_snap_f1, SID_NORM_SWF_F1, headerSWF_F1, queue_id);
250 send_waveform_SWF(wf_snap_f1, SID_NORM_SWF_F1, headerSWF_F1, queue_id);
251 #ifdef GSA
251 #ifdef GSA
252 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffccc; // [1111 1100 1100 1100] f1, f0 bits = 0
252 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffccc; // [1111 1100 1100 1100] f1, f0 bits = 0
253 #endif
253 #endif
254 }
254 }
255 else if (event_out == RTEMS_EVENT_MODE_SBM2_WFRM)
255 else if (event_out == RTEMS_EVENT_MODE_SBM2_WFRM)
256 {
256 {
257 send_waveform_SWF(wf_snap_f2_norm, SID_NORM_SWF_F2, headerSWF_F2, queue_id);
257 send_waveform_SWF(wf_snap_f2_norm, SID_NORM_SWF_F2, headerSWF_F2, queue_id);
258 }
258 }
259 else
259 else
260 {
260 {
261 PRINTF("in WFRM *** unexpected event")
261 PRINTF("in WFRM *** unexpected event")
262 }
262 }
263
263
264
264
265 #ifdef GSA
265 #ifdef GSA
266 // irq processed, reset the related register of the timer unit
266 // irq processed, reset the related register of the timer unit
267 gptimer_regs->timer[TIMER_WF_SIMULATOR].ctrl = gptimer_regs->timer[TIMER_WF_SIMULATOR].ctrl | 0x00000010;
267 gptimer_regs->timer[TIMER_WF_SIMULATOR].ctrl = gptimer_regs->timer[TIMER_WF_SIMULATOR].ctrl | 0x00000010;
268 // clear the interruption
268 // clear the interruption
269 LEON_Unmask_interrupt( IRQ_WF );
269 LEON_Unmask_interrupt( IRQ_WF );
270 #endif
270 #endif
271 }
271 }
272 }
272 }
273
273
274 rtems_task cwf3_task(rtems_task_argument argument) //used with the waveform picker VHDL IP
274 rtems_task cwf3_task(rtems_task_argument argument) //used with the waveform picker VHDL IP
275 {
275 {
276 rtems_event_set event_out;
276 rtems_event_set event_out;
277 rtems_id queue_id;
277 rtems_id queue_id;
278
278
279 init_header_continuous_wf_table( SID_NORM_CWF_F3, headerCWF_F3 );
279 init_header_continuous_wf_table( SID_NORM_CWF_F3, headerCWF_F3 );
280
280
281 queue_id = get_pkts_queue_id();
281 queue_id = get_pkts_queue_id();
282
282
283 BOOT_PRINTF("in CWF3 ***\n")
283 BOOT_PRINTF("in CWF3 ***\n")
284
284
285 while(1){
285 while(1){
286 // wait for an RTEMS_EVENT
286 // wait for an RTEMS_EVENT
287 rtems_event_receive( RTEMS_EVENT_0,
287 rtems_event_receive( RTEMS_EVENT_0,
288 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
288 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
289 PRINTF("send CWF F3 \n")
289 PRINTF("send CWF F3 \n")
290 #ifdef GSA
290 #ifdef GSA
291 #else
291 #else
292 if (waveform_picker_regs->addr_data_f3 == (int) wf_cont_f3) {
292 if (waveform_picker_regs->addr_data_f3 == (int) wf_cont_f3) {
293 send_waveform_CWF( wf_cont_f3_bis, SID_NORM_CWF_F3, headerCWF_F3, queue_id );
293 send_waveform_CWF( wf_cont_f3_bis, SID_NORM_CWF_F3, headerCWF_F3, queue_id );
294 }
294 }
295 else {
295 else {
296 send_waveform_CWF( wf_cont_f3, SID_NORM_CWF_F3, headerCWF_F3, queue_id );
296 send_waveform_CWF( wf_cont_f3, SID_NORM_CWF_F3, headerCWF_F3, queue_id );
297 }
297 }
298 #endif
298 #endif
299 }
299 }
300 }
300 }
301
301
302 rtems_task cwf2_task(rtems_task_argument argument) // ONLY USED IN BURST AND SBM2
302 rtems_task cwf2_task(rtems_task_argument argument) // ONLY USED IN BURST AND SBM2
303 {
303 {
304 rtems_event_set event_out;
304 rtems_event_set event_out;
305 rtems_id queue_id;
305 rtems_id queue_id;
306
306
307 init_header_continuous_wf_table( SID_BURST_CWF_F2, headerCWF_F2_BURST );
307 init_header_continuous_wf_table( SID_BURST_CWF_F2, headerCWF_F2_BURST );
308 init_header_continuous_wf_table( SID_SBM2_CWF_F2, headerCWF_F2_SBM2 );
308 init_header_continuous_wf_table( SID_SBM2_CWF_F2, headerCWF_F2_SBM2 );
309
309
310 queue_id = get_pkts_queue_id();
310 queue_id = get_pkts_queue_id();
311
311
312 BOOT_PRINTF("in CWF2 ***\n")
312 BOOT_PRINTF("in CWF2 ***\n")
313
313
314 while(1){
314 while(1){
315 // wait for an RTEMS_EVENT
315 // wait for an RTEMS_EVENT
316 rtems_event_receive( RTEMS_EVENT_MODE_BURST | RTEMS_EVENT_MODE_SBM2,
316 rtems_event_receive( RTEMS_EVENT_MODE_BURST | RTEMS_EVENT_MODE_SBM2,
317 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
317 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
318 if (event_out == RTEMS_EVENT_MODE_BURST)
318 if (event_out == RTEMS_EVENT_MODE_BURST)
319 {
319 {
320 // F2
320 // F2
321 #ifdef GSA
321 #ifdef GSA
322 #else
322 #else
323 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
323 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
324 send_waveform_CWF( wf_snap_f2_bis, SID_BURST_CWF_F2, headerCWF_F2_BURST, queue_id );
324 send_waveform_CWF( wf_snap_f2_bis, SID_BURST_CWF_F2, headerCWF_F2_BURST, queue_id );
325 }
325 }
326 else {
326 else {
327 send_waveform_CWF( wf_snap_f2, SID_BURST_CWF_F2, headerCWF_F2_BURST, queue_id );
327 send_waveform_CWF( wf_snap_f2, SID_BURST_CWF_F2, headerCWF_F2_BURST, queue_id );
328 }
328 }
329 #endif
329 #endif
330 }
330 }
331 else if (event_out == RTEMS_EVENT_MODE_SBM2)
331 else if (event_out == RTEMS_EVENT_MODE_SBM2)
332 {
332 {
333 #ifdef GSA
333 #ifdef GSA
334 #else
334 #else
335 if (doubleSendCWF2 == 1)
335 if (doubleSendCWF2 == 1)
336 {
336 {
337 doubleSendCWF2 = 0;
337 doubleSendCWF2 = 0;
338 send_waveform_CWF( wf_snap_f2_norm, SID_SBM2_CWF_F2, headerCWF_F2_SBM2, queue_id );
338 send_waveform_CWF( wf_snap_f2_norm, SID_SBM2_CWF_F2, headerCWF_F2_SBM2, queue_id );
339 }
339 }
340 else if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
340 else if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
341 send_waveform_CWF( wf_snap_f2_bis, SID_SBM2_CWF_F2, headerCWF_F2_SBM2, queue_id );
341 send_waveform_CWF( wf_snap_f2_bis, SID_SBM2_CWF_F2, headerCWF_F2_SBM2, queue_id );
342 }
342 }
343 else {
343 else {
344 send_waveform_CWF( wf_snap_f2, SID_SBM2_CWF_F2, headerCWF_F2_SBM2, queue_id );
344 send_waveform_CWF( wf_snap_f2, SID_SBM2_CWF_F2, headerCWF_F2_SBM2, queue_id );
345 }
345 }
346 param_local.local_sbm2_nb_cwf_sent ++;
346 param_local.local_sbm2_nb_cwf_sent ++;
347 #endif
347 #endif
348 }
348 }
349 else
349 else
350 {
350 {
351 PRINTF1("in CWF2 *** ERR mode = %d\n", lfrCurrentMode)
351 PRINTF1("in CWF2 *** ERR mode = %d\n", lfrCurrentMode)
352 }
352 }
353 }
353 }
354 }
354 }
355
355
356 rtems_task cwf1_task(rtems_task_argument argument) // ONLY USED IN SBM1
356 rtems_task cwf1_task(rtems_task_argument argument) // ONLY USED IN SBM1
357 {
357 {
358 rtems_event_set event_out;
358 rtems_event_set event_out;
359 rtems_id queue_id;
359 rtems_id queue_id;
360
360
361 init_header_continuous_wf_table( SID_SBM1_CWF_F1, headerCWF_F1 );
361 init_header_continuous_wf_table( SID_SBM1_CWF_F1, headerCWF_F1 );
362
362
363 queue_id = get_pkts_queue_id();
363 queue_id = get_pkts_queue_id();
364
364
365 BOOT_PRINTF("in CWF1 ***\n")
365 BOOT_PRINTF("in CWF1 ***\n")
366
366
367 while(1){
367 while(1){
368 // wait for an RTEMS_EVENT
368 // wait for an RTEMS_EVENT
369 rtems_event_receive( RTEMS_EVENT_MODE_SBM1,
369 rtems_event_receive( RTEMS_EVENT_MODE_SBM1,
370 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
370 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
371 if (event_out == RTEMS_EVENT_MODE_SBM1)
371 if (event_out == RTEMS_EVENT_MODE_SBM1)
372 {
372 {
373 #ifdef GSA
373 #ifdef GSA
374 #else
374 #else
375 if (doubleSendCWF1 == 1)
375 if (doubleSendCWF1 == 1)
376 {
376 {
377 doubleSendCWF1 = 0;
377 doubleSendCWF1 = 0;
378 send_waveform_CWF( wf_snap_f1_norm, SID_SBM1_CWF_F1, headerCWF_F1, queue_id );
378 send_waveform_CWF( wf_snap_f1_norm, SID_SBM1_CWF_F1, headerCWF_F1, queue_id );
379 }
379 }
380 else if (waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) {
380 else if (waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) {
381 send_waveform_CWF( wf_snap_f1_bis, SID_SBM1_CWF_F1, headerCWF_F1, queue_id );
381 send_waveform_CWF( wf_snap_f1_bis, SID_SBM1_CWF_F1, headerCWF_F1, queue_id );
382 }
382 }
383 else {
383 else {
384 send_waveform_CWF( wf_snap_f1, SID_SBM1_CWF_F1, headerCWF_F1, queue_id );
384 send_waveform_CWF( wf_snap_f1, SID_SBM1_CWF_F1, headerCWF_F1, queue_id );
385 }
385 }
386 param_local.local_sbm1_nb_cwf_sent ++;
386 param_local.local_sbm1_nb_cwf_sent ++;
387 #endif
387 #endif
388 }
388 }
389 else
389 else
390 {
390 {
391 PRINTF1("in CWF1 *** ERR mode = %d\n", lfrCurrentMode)
391 PRINTF1("in CWF1 *** ERR mode = %d\n", lfrCurrentMode)
392 }
392 }
393 }
393 }
394 }
394 }
395
395
396 //******************
396 //******************
397 // general functions
397 // general functions
398 void init_waveforms( void )
398 void init_waveforms( void )
399 {
399 {
400 int i = 0;
400 int i = 0;
401
401
402 for (i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++)
402 for (i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++)
403 {
403 {
404 //***
404 //***
405 // F0
405 // F0
406 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x88887777; //
406 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x88887777; //
407 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x22221111; //
407 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x22221111; //
408 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0x44443333; //
408 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0x44443333; //
409
409
410 //***
410 //***
411 // F1
411 // F1
412 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x22221111;
412 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x22221111;
413 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x44443333;
413 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x44443333;
414 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000;
414 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000;
415
415
416 //***
416 //***
417 // F2
417 // F2
418 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x44443333;
418 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x44443333;
419 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x22221111;
419 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x22221111;
420 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000;
420 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000;
421
421
422 //***
422 //***
423 // F3
423 // F3
424 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 0 ] = val1;
424 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 0 ] = val1;
425 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 1 ] = val2;
425 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 1 ] = val2;
426 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 2 ] = 0xaaaa0000;
426 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 2 ] = 0xaaaa0000;
427 }
427 }
428 }
428 }
429
429
430 int init_header_snapshot_wf_table( unsigned int sid, Header_TM_LFR_SCIENCE_SWF_t *headerSWF)
430 int init_header_snapshot_wf_table( unsigned int sid, Header_TM_LFR_SCIENCE_SWF_t *headerSWF)
431 {
431 {
432 unsigned char i;
432 unsigned char i;
433
433
434 for (i=0; i<7; i++)
434 for (i=0; i<7; i++)
435 {
435 {
436 headerSWF[ i ].targetLogicalAddress = CCSDS_DESTINATION_ID;
436 headerSWF[ i ].targetLogicalAddress = CCSDS_DESTINATION_ID;
437 headerSWF[ i ].protocolIdentifier = CCSDS_PROTOCOLE_ID;
437 headerSWF[ i ].protocolIdentifier = CCSDS_PROTOCOLE_ID;
438 headerSWF[ i ].reserved = DEFAULT_RESERVED;
438 headerSWF[ i ].reserved = DEFAULT_RESERVED;
439 headerSWF[ i ].userApplication = CCSDS_USER_APP;
439 headerSWF[ i ].userApplication = CCSDS_USER_APP;
440 headerSWF[ i ].packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL_BURST >> 8);
440 headerSWF[ i ].packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL_BURST >> 8);
441 headerSWF[ i ].packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL_BURST);
441 headerSWF[ i ].packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL_BURST);
442 if (i == 0)
442 if (i == 0)
443 {
443 {
444 headerSWF[ i ].packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_FIRST;
444 headerSWF[ i ].packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_FIRST;
445 headerSWF[ i ].packetLength[0] = (unsigned char) (TM_LEN_SCI_SWF_340 >> 8);
445 headerSWF[ i ].packetLength[0] = (unsigned char) (TM_LEN_SCI_SWF_340 >> 8);
446 headerSWF[ i ].packetLength[1] = (unsigned char) (TM_LEN_SCI_SWF_340 );
446 headerSWF[ i ].packetLength[1] = (unsigned char) (TM_LEN_SCI_SWF_340 );
447 headerSWF[ i ].blkNr[0] = (unsigned char) (BLK_NR_340 >> 8);
447 headerSWF[ i ].blkNr[0] = (unsigned char) (BLK_NR_340 >> 8);
448 headerSWF[ i ].blkNr[1] = (unsigned char) (BLK_NR_340 );
448 headerSWF[ i ].blkNr[1] = (unsigned char) (BLK_NR_340 );
449 }
449 }
450 else if (i == 6)
450 else if (i == 6)
451 {
451 {
452 headerSWF[ i ].packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_LAST;
452 headerSWF[ i ].packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_LAST;
453 headerSWF[ i ].packetLength[0] = (unsigned char) (TM_LEN_SCI_SWF_8 >> 8);
453 headerSWF[ i ].packetLength[0] = (unsigned char) (TM_LEN_SCI_SWF_8 >> 8);
454 headerSWF[ i ].packetLength[1] = (unsigned char) (TM_LEN_SCI_SWF_8 );
454 headerSWF[ i ].packetLength[1] = (unsigned char) (TM_LEN_SCI_SWF_8 );
455 headerSWF[ i ].blkNr[0] = (unsigned char) (BLK_NR_8 >> 8);
455 headerSWF[ i ].blkNr[0] = (unsigned char) (BLK_NR_8 >> 8);
456 headerSWF[ i ].blkNr[1] = (unsigned char) (BLK_NR_8 );
456 headerSWF[ i ].blkNr[1] = (unsigned char) (BLK_NR_8 );
457 }
457 }
458 else
458 else
459 {
459 {
460 headerSWF[ i ].packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_CONTINUATION;
460 headerSWF[ i ].packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_CONTINUATION;
461 headerSWF[ i ].packetLength[0] = (unsigned char) (TM_LEN_SCI_SWF_340 >> 8);
461 headerSWF[ i ].packetLength[0] = (unsigned char) (TM_LEN_SCI_SWF_340 >> 8);
462 headerSWF[ i ].packetLength[1] = (unsigned char) (TM_LEN_SCI_SWF_340 );
462 headerSWF[ i ].packetLength[1] = (unsigned char) (TM_LEN_SCI_SWF_340 );
463 headerSWF[ i ].blkNr[0] = (unsigned char) (BLK_NR_340 >> 8);
463 headerSWF[ i ].blkNr[0] = (unsigned char) (BLK_NR_340 >> 8);
464 headerSWF[ i ].blkNr[1] = (unsigned char) (BLK_NR_340 );
464 headerSWF[ i ].blkNr[1] = (unsigned char) (BLK_NR_340 );
465 }
465 }
466 headerSWF[ i ].packetSequenceControl[1] = TM_PACKET_SEQ_CNT_DEFAULT;
466 headerSWF[ i ].packetSequenceControl[1] = TM_PACKET_SEQ_CNT_DEFAULT;
467 headerSWF[ i ].pktCnt = DEFAULT_PKTCNT; // PKT_CNT
467 headerSWF[ i ].pktCnt = DEFAULT_PKTCNT; // PKT_CNT
468 headerSWF[ i ].pktNr = i+1; // PKT_NR
468 headerSWF[ i ].pktNr = i+1; // PKT_NR
469 // DATA FIELD HEADER
469 // DATA FIELD HEADER
470 headerSWF[ i ].spare1_pusVersion_spare2 = DEFAULT_SPARE1_PUSVERSION_SPARE2;
470 headerSWF[ i ].spare1_pusVersion_spare2 = DEFAULT_SPARE1_PUSVERSION_SPARE2;
471 headerSWF[ i ].serviceType = TM_TYPE_LFR_SCIENCE; // service type
471 headerSWF[ i ].serviceType = TM_TYPE_LFR_SCIENCE; // service type
472 headerSWF[ i ].serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
472 headerSWF[ i ].serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
473 headerSWF[ i ].destinationID = TM_DESTINATION_ID_GROUND;
473 headerSWF[ i ].destinationID = TM_DESTINATION_ID_GROUND;
474 // AUXILIARY DATA HEADER
474 // AUXILIARY DATA HEADER
475 headerSWF[ i ].sid = sid;
475 headerSWF[ i ].sid = sid;
476 headerSWF[ i ].hkBIA = DEFAULT_HKBIA;
476 headerSWF[ i ].hkBIA = DEFAULT_HKBIA;
477 headerSWF[ i ].time[0] = 0x00;
477 headerSWF[ i ].time[0] = 0x00;
478 headerSWF[ i ].time[0] = 0x00;
478 headerSWF[ i ].time[0] = 0x00;
479 headerSWF[ i ].time[0] = 0x00;
479 headerSWF[ i ].time[0] = 0x00;
480 headerSWF[ i ].time[0] = 0x00;
480 headerSWF[ i ].time[0] = 0x00;
481 headerSWF[ i ].time[0] = 0x00;
481 headerSWF[ i ].time[0] = 0x00;
482 headerSWF[ i ].time[0] = 0x00;
482 headerSWF[ i ].time[0] = 0x00;
483 }
483 }
484 return LFR_SUCCESSFUL;
484 return LFR_SUCCESSFUL;
485 }
485 }
486
486
487 int init_header_continuous_wf_table( unsigned int sid, Header_TM_LFR_SCIENCE_CWF_t *headerCWF )
487 int init_header_continuous_wf_table( unsigned int sid, Header_TM_LFR_SCIENCE_CWF_t *headerCWF )
488 {
488 {
489 unsigned int i;
489 unsigned int i;
490
490
491 for (i=0; i<7; i++)
491 for (i=0; i<7; i++)
492 {
492 {
493 headerCWF[ i ].targetLogicalAddress = CCSDS_DESTINATION_ID;
493 headerCWF[ i ].targetLogicalAddress = CCSDS_DESTINATION_ID;
494 headerCWF[ i ].protocolIdentifier = CCSDS_PROTOCOLE_ID;
494 headerCWF[ i ].protocolIdentifier = CCSDS_PROTOCOLE_ID;
495 headerCWF[ i ].reserved = DEFAULT_RESERVED;
495 headerCWF[ i ].reserved = DEFAULT_RESERVED;
496 headerCWF[ i ].userApplication = CCSDS_USER_APP;
496 headerCWF[ i ].userApplication = CCSDS_USER_APP;
497 if (SID_SBM1_CWF_F1 || SID_SBM2_CWF_F2)
497 if (SID_SBM1_CWF_F1 || SID_SBM2_CWF_F2)
498 {
498 {
499 headerCWF[ i ].packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_SBM1_SBM2 >> 8);
499 headerCWF[ i ].packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_SBM1_SBM2 >> 8);
500 headerCWF[ i ].packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_SBM1_SBM2);
500 headerCWF[ i ].packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_SBM1_SBM2);
501 }
501 }
502 else
502 else
503 {
503 {
504 headerCWF[ i ].packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL_BURST >> 8);
504 headerCWF[ i ].packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL_BURST >> 8);
505 headerCWF[ i ].packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL_BURST);
505 headerCWF[ i ].packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL_BURST);
506 }
506 }
507 if (i == 0)
507 if (i == 0)
508 {
508 {
509 headerCWF[ i ].packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_FIRST;
509 headerCWF[ i ].packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_FIRST;
510 headerCWF[ i ].packetLength[0] = (unsigned char) (TM_LEN_SCI_CWF_340 >> 8);
510 headerCWF[ i ].packetLength[0] = (unsigned char) (TM_LEN_SCI_CWF_340 >> 8);
511 headerCWF[ i ].packetLength[1] = (unsigned char) (TM_LEN_SCI_CWF_340 );
511 headerCWF[ i ].packetLength[1] = (unsigned char) (TM_LEN_SCI_CWF_340 );
512 headerCWF[ i ].blkNr[0] = (unsigned char) (BLK_NR_340 >> 8);
512 headerCWF[ i ].blkNr[0] = (unsigned char) (BLK_NR_340 >> 8);
513 headerCWF[ i ].blkNr[1] = (unsigned char) (BLK_NR_340 );
513 headerCWF[ i ].blkNr[1] = (unsigned char) (BLK_NR_340 );
514 }
514 }
515 else if (i == 6)
515 else if (i == 6)
516 {
516 {
517 headerCWF[ i ].packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_LAST;
517 headerCWF[ i ].packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_LAST;
518 headerCWF[ i ].packetLength[0] = (unsigned char) (TM_LEN_SCI_CWF_8 >> 8);
518 headerCWF[ i ].packetLength[0] = (unsigned char) (TM_LEN_SCI_CWF_8 >> 8);
519 headerCWF[ i ].packetLength[1] = (unsigned char) (TM_LEN_SCI_CWF_8 );
519 headerCWF[ i ].packetLength[1] = (unsigned char) (TM_LEN_SCI_CWF_8 );
520 headerCWF[ i ].blkNr[0] = (unsigned char) (BLK_NR_8 >> 8);
520 headerCWF[ i ].blkNr[0] = (unsigned char) (BLK_NR_8 >> 8);
521 headerCWF[ i ].blkNr[1] = (unsigned char) (BLK_NR_8 );
521 headerCWF[ i ].blkNr[1] = (unsigned char) (BLK_NR_8 );
522 }
522 }
523 else
523 else
524 {
524 {
525 headerCWF[ i ].packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_CONTINUATION;
525 headerCWF[ i ].packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_CONTINUATION;
526 headerCWF[ i ].packetLength[0] = (unsigned char) (TM_LEN_SCI_CWF_340 >> 8);
526 headerCWF[ i ].packetLength[0] = (unsigned char) (TM_LEN_SCI_CWF_340 >> 8);
527 headerCWF[ i ].packetLength[1] = (unsigned char) (TM_LEN_SCI_CWF_340 );
527 headerCWF[ i ].packetLength[1] = (unsigned char) (TM_LEN_SCI_CWF_340 );
528 headerCWF[ i ].blkNr[0] = (unsigned char) (BLK_NR_340 >> 8);
528 headerCWF[ i ].blkNr[0] = (unsigned char) (BLK_NR_340 >> 8);
529 headerCWF[ i ].blkNr[1] = (unsigned char) (BLK_NR_340 );
529 headerCWF[ i ].blkNr[1] = (unsigned char) (BLK_NR_340 );
530 }
530 }
531 headerCWF[ i ].packetSequenceControl[1] = TM_PACKET_SEQ_CNT_DEFAULT;
531 headerCWF[ i ].packetSequenceControl[1] = TM_PACKET_SEQ_CNT_DEFAULT;
532 // PKT_CNT
532 // PKT_CNT
533 // PKT_NR
533 // PKT_NR
534 // DATA FIELD HEADER
534 // DATA FIELD HEADER
535 headerCWF[ i ].spare1_pusVersion_spare2 = DEFAULT_SPARE1_PUSVERSION_SPARE2;
535 headerCWF[ i ].spare1_pusVersion_spare2 = DEFAULT_SPARE1_PUSVERSION_SPARE2;
536 headerCWF[ i ].serviceType = TM_TYPE_LFR_SCIENCE; // service type
536 headerCWF[ i ].serviceType = TM_TYPE_LFR_SCIENCE; // service type
537 headerCWF[ i ].serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
537 headerCWF[ i ].serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
538 headerCWF[ i ].destinationID = TM_DESTINATION_ID_GROUND;
538 headerCWF[ i ].destinationID = TM_DESTINATION_ID_GROUND;
539 // AUXILIARY DATA HEADER
539 // AUXILIARY DATA HEADER
540 headerCWF[ i ].sid = sid;
540 headerCWF[ i ].sid = sid;
541 headerCWF[ i ].hkBIA = DEFAULT_HKBIA;
541 headerCWF[ i ].hkBIA = DEFAULT_HKBIA;
542 headerCWF[ i ].time[0] = 0x00;
542 headerCWF[ i ].time[0] = 0x00;
543 headerCWF[ i ].time[0] = 0x00;
543 headerCWF[ i ].time[0] = 0x00;
544 headerCWF[ i ].time[0] = 0x00;
544 headerCWF[ i ].time[0] = 0x00;
545 headerCWF[ i ].time[0] = 0x00;
545 headerCWF[ i ].time[0] = 0x00;
546 headerCWF[ i ].time[0] = 0x00;
546 headerCWF[ i ].time[0] = 0x00;
547 headerCWF[ i ].time[0] = 0x00;
547 headerCWF[ i ].time[0] = 0x00;
548 }
548 }
549 return LFR_SUCCESSFUL;
549 return LFR_SUCCESSFUL;
550 }
550 }
551
551
552 void reset_waveforms( void )
552 void reset_waveforms( void )
553 {
553 {
554 int i = 0;
554 int i = 0;
555
555
556 for (i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++)
556 for (i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++)
557 {
557 {
558 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x10002000;
558 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x10002000;
559 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET] = 0x20001000;
559 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET] = 0x20001000;
560 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x40008000;
560 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x40008000;
561
561
562 //***
562 //***
563 // F1
563 // F1
564 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x1000f000;
564 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x1000f000;
565 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET] = 0xf0001000;
565 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET] = 0xf0001000;
566 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x40008000;
566 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x40008000;
567
567
568 //***
568 //***
569 // F2
569 // F2
570 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x40008000;
570 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x40008000;
571 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET] = 0x20001000;
571 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET] = 0x20001000;
572 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x10002000;
572 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x10002000;
573
573
574 //***
574 //***
575 // F3
575 // F3
576 /*wf_cont_f3[ i* NB_WORDS_SWF_BLK + 0 ] = build_value( i, i ); // v and 1
576 /*wf_cont_f3[ i* NB_WORDS_SWF_BLK + 0 ] = build_value( i, i ); // v and 1
577 wf_cont_f3[ i* NB_WORDS_SWF_BLK + 1 ] = build_value( i, i ); // e2 and b1
577 wf_cont_f3[ i* NB_WORDS_SWF_BLK + 1 ] = build_value( i, i ); // e2 and b1
578 wf_cont_f3[ i* NB_WORDS_SWF_BLK + 2 ] = build_value( i, i ); // b2 and b3*/
578 wf_cont_f3[ i* NB_WORDS_SWF_BLK + 2 ] = build_value( i, i ); // b2 and b3*/
579 }
579 }
580 }
580 }
581
581
582 int send_waveform_SWF( volatile int *waveform, unsigned int sid,
582 int send_waveform_SWF( volatile int *waveform, unsigned int sid,
583 Header_TM_LFR_SCIENCE_SWF_t *headerSWF, rtems_id queue_id )
583 Header_TM_LFR_SCIENCE_SWF_t *headerSWF, rtems_id queue_id )
584 {
584 {
585 unsigned int i;
585 unsigned int i;
586 int ret;
586 int ret;
587 rtems_status_code status;
587 rtems_status_code status;
588 spw_ioctl_pkt_send spw_ioctl_send_SWF;
588 spw_ioctl_pkt_send spw_ioctl_send_SWF;
589
589
590 spw_ioctl_send_SWF.hlen = TM_HEADER_LEN + 4 + 12; // + 4 is for the protocole extra header, + 12 is for the auxiliary header
590 spw_ioctl_send_SWF.hlen = TM_HEADER_LEN + 4 + 12; // + 4 is for the protocole extra header, + 12 is for the auxiliary header
591 spw_ioctl_send_SWF.options = 0;
591 spw_ioctl_send_SWF.options = 0;
592
592
593 ret = LFR_DEFAULT;
593 ret = LFR_DEFAULT;
594
594
595 for (i=0; i<7; i++) // send waveform
595 for (i=0; i<7; i++) // send waveform
596 {
596 {
597 spw_ioctl_send_SWF.data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) ];
597 spw_ioctl_send_SWF.data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) ];
598 spw_ioctl_send_SWF.hdr = (char*) &headerSWF[ i ];
598 spw_ioctl_send_SWF.hdr = (char*) &headerSWF[ i ];
599 // BUILD THE DATA
599 // BUILD THE DATA
600 if (i==6) {
600 if (i==6) {
601 spw_ioctl_send_SWF.dlen = 8 * NB_BYTES_SWF_BLK;
601 spw_ioctl_send_SWF.dlen = 8 * NB_BYTES_SWF_BLK;
602 }
602 }
603 else {
603 else {
604 spw_ioctl_send_SWF.dlen = 340 * NB_BYTES_SWF_BLK;
604 spw_ioctl_send_SWF.dlen = 340 * NB_BYTES_SWF_BLK;
605 }
605 }
606 // SET PACKET TIME
606 // SET PACKET TIME
607 headerSWF[ i ].time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
607 headerSWF[ i ].time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
608 headerSWF[ i ].time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
608 headerSWF[ i ].time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
609 headerSWF[ i ].time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
609 headerSWF[ i ].time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
610 headerSWF[ i ].time[3] = (unsigned char) (time_management_regs->coarse_time);
610 headerSWF[ i ].time[3] = (unsigned char) (time_management_regs->coarse_time);
611 headerSWF[ i ].time[4] = (unsigned char) (time_management_regs->fine_time>>8);
611 headerSWF[ i ].time[4] = (unsigned char) (time_management_regs->fine_time>>8);
612 headerSWF[ i ].time[5] = (unsigned char) (time_management_regs->fine_time);
612 headerSWF[ i ].time[5] = (unsigned char) (time_management_regs->fine_time);
613 headerSWF[ i ].acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24);
613 headerSWF[ i ].acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24);
614 headerSWF[ i ].acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16);
614 headerSWF[ i ].acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16);
615 headerSWF[ i ].acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8);
615 headerSWF[ i ].acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8);
616 headerSWF[ i ].acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time);
616 headerSWF[ i ].acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time);
617 headerSWF[ i ].acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8);
617 headerSWF[ i ].acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8);
618 headerSWF[ i ].acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time);
618 headerSWF[ i ].acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time);
619 // SEND PACKET
619 // SEND PACKET
620 status = rtems_message_queue_send( queue_id, &spw_ioctl_send_SWF, ACTION_MSG_PKTS_SIZE);
620 status = rtems_message_queue_send( queue_id, &spw_ioctl_send_SWF, ACTION_MSG_PKTS_SIZE);
621 if (status != RTEMS_SUCCESSFUL) {
621 if (status != RTEMS_SUCCESSFUL) {
622 printf("%d-%d, ERR %d\n", sid, i, (int) status);
622 printf("%d-%d, ERR %d\n", sid, i, (int) status);
623 ret = LFR_DEFAULT;
623 ret = LFR_DEFAULT;
624 }
624 }
625 rtems_task_wake_after(TIME_BETWEEN_TWO_SWF_PACKETS); // 300 ms between each packet => 7 * 3 = 21 packets => 6.3 seconds
625 rtems_task_wake_after(TIME_BETWEEN_TWO_SWF_PACKETS); // 300 ms between each packet => 7 * 3 = 21 packets => 6.3 seconds
626 }
626 }
627
627
628 return ret;
628 return ret;
629 }
629 }
630
630
631 int send_waveform_CWF(volatile int *waveform, unsigned int sid,
631 int send_waveform_CWF(volatile int *waveform, unsigned int sid,
632 Header_TM_LFR_SCIENCE_CWF_t *headerCWF, rtems_id queue_id)
632 Header_TM_LFR_SCIENCE_CWF_t *headerCWF, rtems_id queue_id)
633 {
633 {
634 unsigned int i;
634 unsigned int i;
635 int ret;
635 int ret;
636 rtems_status_code status;
636 rtems_status_code status;
637 spw_ioctl_pkt_send spw_ioctl_send_CWF;
637 spw_ioctl_pkt_send spw_ioctl_send_CWF;
638
638
639 spw_ioctl_send_CWF.hlen = TM_HEADER_LEN + 4 + 10; // + 4 is for the protocole extra header, + 10 is for the auxiliary header
639 spw_ioctl_send_CWF.hlen = TM_HEADER_LEN + 4 + 10; // + 4 is for the protocole extra header, + 10 is for the auxiliary header
640 spw_ioctl_send_CWF.options = 0;
640 spw_ioctl_send_CWF.options = 0;
641
641
642 ret = LFR_DEFAULT;
642 ret = LFR_DEFAULT;
643
643
644 for (i=0; i<7; i++) // send waveform
644 for (i=0; i<7; i++) // send waveform
645 {
645 {
646 int coarseTime = 0x00;
646 int coarseTime = 0x00;
647 int fineTime = 0x00;
647 int fineTime = 0x00;
648 spw_ioctl_send_CWF.data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) ];
648 spw_ioctl_send_CWF.data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) ];
649 spw_ioctl_send_CWF.hdr = (char*) &headerCWF[ i ];
649 spw_ioctl_send_CWF.hdr = (char*) &headerCWF[ i ];
650 // BUILD THE DATA
650 // BUILD THE DATA
651 if (i==6) {
651 if (i==6) {
652 spw_ioctl_send_CWF.dlen = 8 * NB_BYTES_SWF_BLK;
652 spw_ioctl_send_CWF.dlen = 8 * NB_BYTES_SWF_BLK;
653 }
653 }
654 else {
654 else {
655 spw_ioctl_send_CWF.dlen = 340 * NB_BYTES_SWF_BLK;
655 spw_ioctl_send_CWF.dlen = 340 * NB_BYTES_SWF_BLK;
656 }
656 }
657 // SET PACKET TIME
657 // SET PACKET TIME
658 coarseTime = time_management_regs->coarse_time;
658 coarseTime = time_management_regs->coarse_time;
659 fineTime = time_management_regs->fine_time;
659 fineTime = time_management_regs->fine_time;
660 headerCWF[ i ].time[0] = (unsigned char) (coarseTime>>24);
660 headerCWF[ i ].time[0] = (unsigned char) (coarseTime>>24);
661 headerCWF[ i ].time[1] = (unsigned char) (coarseTime>>16);
661 headerCWF[ i ].time[1] = (unsigned char) (coarseTime>>16);
662 headerCWF[ i ].time[2] = (unsigned char) (coarseTime>>8);
662 headerCWF[ i ].time[2] = (unsigned char) (coarseTime>>8);
663 headerCWF[ i ].time[3] = (unsigned char) (coarseTime);
663 headerCWF[ i ].time[3] = (unsigned char) (coarseTime);
664 headerCWF[ i ].time[4] = (unsigned char) (fineTime>>8);
664 headerCWF[ i ].time[4] = (unsigned char) (fineTime>>8);
665 headerCWF[ i ].time[5] = (unsigned char) (fineTime);
665 headerCWF[ i ].time[5] = (unsigned char) (fineTime);
666 headerCWF[ i ].acquisitionTime[0] = (unsigned char) (coarseTime>>24);
666 headerCWF[ i ].acquisitionTime[0] = (unsigned char) (coarseTime>>24);
667 headerCWF[ i ].acquisitionTime[1] = (unsigned char) (coarseTime>>16);
667 headerCWF[ i ].acquisitionTime[1] = (unsigned char) (coarseTime>>16);
668 headerCWF[ i ].acquisitionTime[2] = (unsigned char) (coarseTime>>8);
668 headerCWF[ i ].acquisitionTime[2] = (unsigned char) (coarseTime>>8);
669 headerCWF[ i ].acquisitionTime[3] = (unsigned char) (coarseTime);
669 headerCWF[ i ].acquisitionTime[3] = (unsigned char) (coarseTime);
670 headerCWF[ i ].acquisitionTime[4] = (unsigned char) (fineTime>>8);
670 headerCWF[ i ].acquisitionTime[4] = (unsigned char) (fineTime>>8);
671 headerCWF[ i ].acquisitionTime[5] = (unsigned char) (fineTime);
671 headerCWF[ i ].acquisitionTime[5] = (unsigned char) (fineTime);
672 // SEND PACKET
672 // SEND PACKET
673 if (sid == SID_NORM_CWF_F3)
673 if (sid == SID_NORM_CWF_F3)
674 {
674 {
675 status = rtems_message_queue_send( queue_id, &spw_ioctl_send_CWF, sizeof(spw_ioctl_send_CWF));
675 status = rtems_message_queue_send( queue_id, &spw_ioctl_send_CWF, sizeof(spw_ioctl_send_CWF));
676 if (status != RTEMS_SUCCESSFUL) {
676 if (status != RTEMS_SUCCESSFUL) {
677 printf("%d-%d, ERR %d\n", sid, i, (int) status);
677 printf("%d-%d, ERR %d\n", sid, i, (int) status);
678 ret = LFR_DEFAULT;
678 ret = LFR_DEFAULT;
679 }
679 }
680 rtems_task_wake_after(TIME_BETWEEN_TWO_CWF3_PACKETS);
680 rtems_task_wake_after(TIME_BETWEEN_TWO_CWF3_PACKETS);
681 }
681 }
682 else
682 else
683 {
683 {
684 status = rtems_message_queue_urgent( queue_id, &spw_ioctl_send_CWF, sizeof(spw_ioctl_send_CWF));
684 status = rtems_message_queue_send( queue_id, &spw_ioctl_send_CWF, sizeof(spw_ioctl_send_CWF));
685 if (status != RTEMS_SUCCESSFUL) {
685 if (status != RTEMS_SUCCESSFUL) {
686 printf("%d-%d, ERR %d\n", sid, i, (int) status);
686 printf("%d-%d, ERR %d\n", sid, i, (int) status);
687 ret = LFR_DEFAULT;
687 ret = LFR_DEFAULT;
688 }
688 }
689 }
689 }
690 }
690 }
691
691
692 return ret;
692 return ret;
693 }
693 }
694
694
695 //**************
695 //**************
696 // wfp registers
696 // wfp registers
697 void set_wfp_data_shaping()
697 void set_wfp_data_shaping()
698 {
698 {
699 unsigned char data_shaping;
699 unsigned char data_shaping;
700
700
701 // get the parameters for the data shaping [BW SP0 SP1 R0 R1] in sy_lfr_common1 and configure the register
701 // get the parameters for the data shaping [BW SP0 SP1 R0 R1] in sy_lfr_common1 and configure the register
702 // waveform picker : [R1 R0 SP1 SP0 BW]
702 // waveform picker : [R1 R0 SP1 SP0 BW]
703
703
704 data_shaping = parameter_dump_packet.bw_sp0_sp1_r0_r1;
704 data_shaping = parameter_dump_packet.bw_sp0_sp1_r0_r1;
705
705
706 #ifdef GSA
706 #ifdef GSA
707 #else
707 #else
708 waveform_picker_regs->data_shaping =
708 waveform_picker_regs->data_shaping =
709 ( (data_shaping & 0x10) >> 4 ) // BW
709 ( (data_shaping & 0x10) >> 4 ) // BW
710 + ( (data_shaping & 0x08) >> 2 ) // SP0
710 + ( (data_shaping & 0x08) >> 2 ) // SP0
711 + ( (data_shaping & 0x04) ) // SP1
711 + ( (data_shaping & 0x04) ) // SP1
712 + ( (data_shaping & 0x02) << 2 ) // R0
712 + ( (data_shaping & 0x02) << 2 ) // R0
713 + ( (data_shaping & 0x01) << 4 ); // R1
713 + ( (data_shaping & 0x01) << 4 ); // R1
714 #endif
714 #endif
715 }
715 }
716
716
717 char set_wfp_delta_snapshot()
717 char set_wfp_delta_snapshot()
718 {
718 {
719 char ret;
719 char ret;
720 unsigned int delta_snapshot;
720 unsigned int delta_snapshot;
721 ret = LFR_DEFAULT;
721 ret = LFR_DEFAULT;
722
722
723 delta_snapshot = parameter_dump_packet.sy_lfr_n_swf_p[0]*256
723 delta_snapshot = parameter_dump_packet.sy_lfr_n_swf_p[0]*256
724 + parameter_dump_packet.sy_lfr_n_swf_p[1];
724 + parameter_dump_packet.sy_lfr_n_swf_p[1];
725
725
726 #ifdef GSA
726 #ifdef GSA
727 #else
727 #else
728 unsigned char aux = 0;
728 unsigned char aux = 0;
729 if ( delta_snapshot < MIN_DELTA_SNAPSHOT )
729 if ( delta_snapshot < MIN_DELTA_SNAPSHOT )
730 {
730 {
731 aux = MIN_DELTA_SNAPSHOT;
731 aux = MIN_DELTA_SNAPSHOT;
732 ret = LFR_DEFAULT;
732 ret = LFR_DEFAULT;
733 }
733 }
734 else
734 else
735 {
735 {
736 aux = delta_snapshot ;
736 aux = delta_snapshot ;
737 ret = LFR_SUCCESSFUL;
737 ret = LFR_SUCCESSFUL;
738 }
738 }
739 waveform_picker_regs->delta_snapshot = aux; // max 2 bytes
739 waveform_picker_regs->delta_snapshot = aux; // max 2 bytes
740 #endif
740 #endif
741
741
742 return ret;
742 return ret;
743 }
743 }
744
744
745 void set_wfp_burst_enable_register( unsigned char mode)
745 void set_wfp_burst_enable_register( unsigned char mode)
746 {
746 {
747 #ifdef GSA
747 #ifdef GSA
748 #else
748 #else
749 // [0000 0000] burst f2, f1, f0 enable f3 f2 f1 f0
749 // [0000 0000] burst f2, f1, f0 enable f3 f2 f1 f0
750 // the burst bits shall be set first, before the enable bits
750 // the burst bits shall be set first, before the enable bits
751 switch(mode) {
751 switch(mode) {
752 case(LFR_MODE_NORMAL):
752 case(LFR_MODE_NORMAL):
753 waveform_picker_regs->burst_enable = 0x00; // [0000 0000] no burst enable
753 waveform_picker_regs->burst_enable = 0x00; // [0000 0000] no burst enable
754 waveform_picker_regs->burst_enable = 0x0f; // [0000 1111] enable f3 f2 f1 f0
754 waveform_picker_regs->burst_enable = 0x0f; // [0000 1111] enable f3 f2 f1 f0
755 break;
755 break;
756 case(LFR_MODE_BURST):
756 case(LFR_MODE_BURST):
757 waveform_picker_regs->burst_enable = 0x40; // [0100 0000] f2 burst enabled
757 waveform_picker_regs->burst_enable = 0x40; // [0100 0000] f2 burst enabled
758 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x04; // [0100] enable f2
758 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x04; // [0100] enable f2
759 break;
759 break;
760 case(LFR_MODE_SBM1):
760 case(LFR_MODE_SBM1):
761 waveform_picker_regs->burst_enable = 0x20; // [0010 0000] f1 burst enabled
761 waveform_picker_regs->burst_enable = 0x20; // [0010 0000] f1 burst enabled
762 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x0f; // [1111] enable f3 f2 f1 f0
762 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x0f; // [1111] enable f3 f2 f1 f0
763 break;
763 break;
764 case(LFR_MODE_SBM2):
764 case(LFR_MODE_SBM2):
765 waveform_picker_regs->burst_enable = 0x40; // [0100 0000] f2 burst enabled
765 waveform_picker_regs->burst_enable = 0x40; // [0100 0000] f2 burst enabled
766 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x0f; // [1111] enable f3 f2 f1 f0
766 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x0f; // [1111] enable f3 f2 f1 f0
767 break;
767 break;
768 default:
768 default:
769 waveform_picker_regs->burst_enable = 0x00; // [0000 0000] no burst enabled, no waveform enabled
769 waveform_picker_regs->burst_enable = 0x00; // [0000 0000] no burst enabled, no waveform enabled
770 break;
770 break;
771 }
771 }
772 #endif
772 #endif
773 }
773 }
774
774
775 void reset_wfp_burst_enable()
775 void reset_wfp_burst_enable()
776 {
776 {
777 #ifdef GSA
777 #ifdef GSA
778 #else
778 #else
779 waveform_picker_regs->burst_enable = 0x00; // burst f2, f1, f0 enable f3, f2, f1, f0
779 waveform_picker_regs->burst_enable = 0x00; // burst f2, f1, f0 enable f3, f2, f1, f0
780 #endif
780 #endif
781 }
781 }
782
782
783 void reset_wfp_status()
783 void reset_wfp_status()
784 {
784 {
785 #ifdef GSA
785 #ifdef GSA
786 #else
786 #else
787 waveform_picker_regs->status = 0x00; // burst f2, f1, f0 enable f3, f2, f1, f0
787 waveform_picker_regs->status = 0x00; // burst f2, f1, f0 enable f3, f2, f1, f0
788 #endif
788 #endif
789 }
789 }
790
790
791 void reset_waveform_picker_regs()
791 void reset_waveform_picker_regs()
792 {
792 {
793 #ifdef GSA
793 #ifdef GSA
794 #else
794 #else
795 set_wfp_data_shaping();
795 set_wfp_data_shaping();
796 reset_wfp_burst_enable();
796 reset_wfp_burst_enable();
797 waveform_picker_regs->addr_data_f0 = (int) (wf_snap_f0); //
797 waveform_picker_regs->addr_data_f0 = (int) (wf_snap_f0); //
798 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1); //
798 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1); //
799 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2); //
799 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2); //
800 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3); //
800 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3); //
801 set_wfp_delta_snapshot(); // time in seconds between two snapshots
801 set_wfp_delta_snapshot(); // time in seconds between two snapshots
802 waveform_picker_regs->delta_f2_f1 = 0xffff; // 0x16800 => 92160 (max 4 bytes)
802 waveform_picker_regs->delta_f2_f1 = 0xffff; // 0x16800 => 92160 (max 4 bytes)
803 waveform_picker_regs->delta_f2_f0 = 0x17c00; // 97 280 (max 5 bytes)
803 waveform_picker_regs->delta_f2_f0 = 0x17c00; // 97 280 (max 5 bytes)
804 waveform_picker_regs->nb_burst_available = 0x180; // max 3 bytes, size of the buffer in burst (1 burst = 16 x 4 octets)
804 waveform_picker_regs->nb_burst_available = 0x180; // max 3 bytes, size of the buffer in burst (1 burst = 16 x 4 octets)
805 waveform_picker_regs->nb_snapshot_param = 0x7ff; // max 3 octets, 2048 - 1
805 waveform_picker_regs->nb_snapshot_param = 0x7ff; // max 3 octets, 2048 - 1
806 waveform_picker_regs->status = 0x00; //
806 waveform_picker_regs->status = 0x00; //
807 #endif
807 #endif
808 }
808 }
809
809
810 //*****************
810 //*****************
811 // local parameters
811 // local parameters
812 void set_local_sbm1_nb_cwf_max()
812 void set_local_sbm1_nb_cwf_max()
813 {
813 {
814 // (2 snapshots of 2048 points per seconds) * (period of the NORM snashots) - 8 s (duration of the f2 snapshot)
814 // (2 snapshots of 2048 points per seconds) * (period of the NORM snashots) - 8 s (duration of the f2 snapshot)
815 param_local.local_sbm1_nb_cwf_max = 2 *
815 param_local.local_sbm1_nb_cwf_max = 2 *
816 (parameter_dump_packet.sy_lfr_n_swf_p[0] * 256
816 (parameter_dump_packet.sy_lfr_n_swf_p[0] * 256
817 + parameter_dump_packet.sy_lfr_n_swf_p[1]) - 8; // 16 CWF1 parts during 1 SWF2
817 + parameter_dump_packet.sy_lfr_n_swf_p[1]) - 8; // 16 CWF1 parts during 1 SWF2
818 }
818 }
819
819
820 void set_local_sbm2_nb_cwf_max()
820 void set_local_sbm2_nb_cwf_max()
821 {
821 {
822 // (period of the NORM snashots) / (8 seconds per snapshot at f2 = 256 Hz)
822 // (period of the NORM snashots) / (8 seconds per snapshot at f2 = 256 Hz)
823 param_local.local_sbm2_nb_cwf_max = (parameter_dump_packet.sy_lfr_n_swf_p[0] * 256
823 param_local.local_sbm2_nb_cwf_max = (parameter_dump_packet.sy_lfr_n_swf_p[0] * 256
824 + parameter_dump_packet.sy_lfr_n_swf_p[1]) / 8;
824 + parameter_dump_packet.sy_lfr_n_swf_p[1]) / 8;
825 }
825 }
826
826
827 void set_local_nb_interrupt_f0_MAX()
827 void set_local_nb_interrupt_f0_MAX()
828 {
828 {
829 param_local.local_nb_interrupt_f0_MAX = ( (parameter_dump_packet.sy_lfr_n_asm_p[0]) * 256
829 param_local.local_nb_interrupt_f0_MAX = ( (parameter_dump_packet.sy_lfr_n_asm_p[0]) * 256
830 + parameter_dump_packet.sy_lfr_n_asm_p[1] ) * 100;
830 + parameter_dump_packet.sy_lfr_n_asm_p[1] ) * 100;
831 }
831 }
832
832
833 void reset_local_sbm1_nb_cwf_sent()
833 void reset_local_sbm1_nb_cwf_sent()
834 {
834 {
835 param_local.local_sbm1_nb_cwf_sent = 0;
835 param_local.local_sbm1_nb_cwf_sent = 0;
836 }
836 }
837
837
838 void reset_local_sbm2_nb_cwf_sent()
838 void reset_local_sbm2_nb_cwf_sent()
839 {
839 {
840 param_local.local_sbm2_nb_cwf_sent = 0;
840 param_local.local_sbm2_nb_cwf_sent = 0;
841 }
841 }
General Comments 0
You need to be logged in to leave comments. Login now