##// END OF EJS Templates
SOLVED: compatibility of fsw-gsa with the WF simulator interruption
paul -
r30:f599a59313eb default
parent child
Show More
@@ -1,225 +1,225
1 #############################################################################
1 #############################################################################
2 # Makefile for building: bin/fsw
2 # Makefile for building: bin/fsw
3 # Generated by qmake (2.01a) (Qt 4.8.4) on: Tue Jul 16 13:03:12 2013
3 # Generated by qmake (2.01a) (Qt 4.8.4) on: Fri Jul 19 08:56:46 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=8 -DPRINT_MESSAGES_ON_CONSOLE
13 DEFINES = -DSW_VERSION_N1=0 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=9 -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 OBJECTS = obj/wf_handler.o \
52 OBJECTS = obj/wf_handler.o \
53 obj/tc_handler.o \
53 obj/tc_handler.o \
54 obj/fsw_processing.o \
54 obj/fsw_processing.o \
55 obj/fsw_misc.o \
55 obj/fsw_misc.o \
56 obj/fsw_init.o \
56 obj/fsw_init.o \
57 obj/fsw_globals.o
57 obj/fsw_globals.o
58 DIST = /usr/lib64/qt4/mkspecs/common/unix.conf \
58 DIST = /usr/lib64/qt4/mkspecs/common/unix.conf \
59 /usr/lib64/qt4/mkspecs/common/linux.conf \
59 /usr/lib64/qt4/mkspecs/common/linux.conf \
60 /usr/lib64/qt4/mkspecs/common/gcc-base.conf \
60 /usr/lib64/qt4/mkspecs/common/gcc-base.conf \
61 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
61 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
62 /usr/lib64/qt4/mkspecs/common/g++-base.conf \
62 /usr/lib64/qt4/mkspecs/common/g++-base.conf \
63 /usr/lib64/qt4/mkspecs/common/g++-unix.conf \
63 /usr/lib64/qt4/mkspecs/common/g++-unix.conf \
64 /usr/lib64/qt4/mkspecs/qconfig.pri \
64 /usr/lib64/qt4/mkspecs/qconfig.pri \
65 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
65 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
66 /usr/lib64/qt4/mkspecs/features/qt_functions.prf \
66 /usr/lib64/qt4/mkspecs/features/qt_functions.prf \
67 /usr/lib64/qt4/mkspecs/features/qt_config.prf \
67 /usr/lib64/qt4/mkspecs/features/qt_config.prf \
68 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
68 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
69 /usr/lib64/qt4/mkspecs/features/default_pre.prf \
69 /usr/lib64/qt4/mkspecs/features/default_pre.prf \
70 sparc.pri \
70 sparc.pri \
71 /usr/lib64/qt4/mkspecs/features/release.prf \
71 /usr/lib64/qt4/mkspecs/features/release.prf \
72 /usr/lib64/qt4/mkspecs/features/default_post.prf \
72 /usr/lib64/qt4/mkspecs/features/default_post.prf \
73 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
73 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
74 /usr/lib64/qt4/mkspecs/features/warn_on.prf \
74 /usr/lib64/qt4/mkspecs/features/warn_on.prf \
75 /usr/lib64/qt4/mkspecs/features/resources.prf \
75 /usr/lib64/qt4/mkspecs/features/resources.prf \
76 /usr/lib64/qt4/mkspecs/features/uic.prf \
76 /usr/lib64/qt4/mkspecs/features/uic.prf \
77 /usr/lib64/qt4/mkspecs/features/yacc.prf \
77 /usr/lib64/qt4/mkspecs/features/yacc.prf \
78 /usr/lib64/qt4/mkspecs/features/lex.prf \
78 /usr/lib64/qt4/mkspecs/features/lex.prf \
79 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf \
79 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf \
80 fsw-qt.pro
80 fsw-qt.pro
81 QMAKE_TARGET = fsw
81 QMAKE_TARGET = fsw
82 DESTDIR = bin/
82 DESTDIR = bin/
83 TARGET = bin/fsw
83 TARGET = bin/fsw
84
84
85 first: all
85 first: all
86 ####### Implicit rules
86 ####### Implicit rules
87
87
88 .SUFFIXES: .o .c .cpp .cc .cxx .C
88 .SUFFIXES: .o .c .cpp .cc .cxx .C
89
89
90 .cpp.o:
90 .cpp.o:
91 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
91 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
92
92
93 .cc.o:
93 .cc.o:
94 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
94 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
95
95
96 .cxx.o:
96 .cxx.o:
97 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
97 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
98
98
99 .C.o:
99 .C.o:
100 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
100 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
101
101
102 .c.o:
102 .c.o:
103 $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
103 $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
104
104
105 ####### Build rules
105 ####### Build rules
106
106
107 all: Makefile $(TARGET)
107 all: Makefile $(TARGET)
108
108
109 $(TARGET): $(OBJECTS)
109 $(TARGET): $(OBJECTS)
110 @$(CHK_DIR_EXISTS) bin/ || $(MKDIR) bin/
110 @$(CHK_DIR_EXISTS) bin/ || $(MKDIR) bin/
111 $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
111 $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
112
112
113 Makefile: fsw-qt.pro /usr/lib64/qt4/mkspecs/linux-g++/qmake.conf /usr/lib64/qt4/mkspecs/common/unix.conf \
113 Makefile: fsw-qt.pro /usr/lib64/qt4/mkspecs/linux-g++/qmake.conf /usr/lib64/qt4/mkspecs/common/unix.conf \
114 /usr/lib64/qt4/mkspecs/common/linux.conf \
114 /usr/lib64/qt4/mkspecs/common/linux.conf \
115 /usr/lib64/qt4/mkspecs/common/gcc-base.conf \
115 /usr/lib64/qt4/mkspecs/common/gcc-base.conf \
116 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
116 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
117 /usr/lib64/qt4/mkspecs/common/g++-base.conf \
117 /usr/lib64/qt4/mkspecs/common/g++-base.conf \
118 /usr/lib64/qt4/mkspecs/common/g++-unix.conf \
118 /usr/lib64/qt4/mkspecs/common/g++-unix.conf \
119 /usr/lib64/qt4/mkspecs/qconfig.pri \
119 /usr/lib64/qt4/mkspecs/qconfig.pri \
120 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
120 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
121 /usr/lib64/qt4/mkspecs/features/qt_functions.prf \
121 /usr/lib64/qt4/mkspecs/features/qt_functions.prf \
122 /usr/lib64/qt4/mkspecs/features/qt_config.prf \
122 /usr/lib64/qt4/mkspecs/features/qt_config.prf \
123 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
123 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
124 /usr/lib64/qt4/mkspecs/features/default_pre.prf \
124 /usr/lib64/qt4/mkspecs/features/default_pre.prf \
125 sparc.pri \
125 sparc.pri \
126 /usr/lib64/qt4/mkspecs/features/release.prf \
126 /usr/lib64/qt4/mkspecs/features/release.prf \
127 /usr/lib64/qt4/mkspecs/features/default_post.prf \
127 /usr/lib64/qt4/mkspecs/features/default_post.prf \
128 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
128 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
129 /usr/lib64/qt4/mkspecs/features/warn_on.prf \
129 /usr/lib64/qt4/mkspecs/features/warn_on.prf \
130 /usr/lib64/qt4/mkspecs/features/resources.prf \
130 /usr/lib64/qt4/mkspecs/features/resources.prf \
131 /usr/lib64/qt4/mkspecs/features/uic.prf \
131 /usr/lib64/qt4/mkspecs/features/uic.prf \
132 /usr/lib64/qt4/mkspecs/features/yacc.prf \
132 /usr/lib64/qt4/mkspecs/features/yacc.prf \
133 /usr/lib64/qt4/mkspecs/features/lex.prf \
133 /usr/lib64/qt4/mkspecs/features/lex.prf \
134 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf
134 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf
135 $(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
135 $(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
136 /usr/lib64/qt4/mkspecs/common/unix.conf:
136 /usr/lib64/qt4/mkspecs/common/unix.conf:
137 /usr/lib64/qt4/mkspecs/common/linux.conf:
137 /usr/lib64/qt4/mkspecs/common/linux.conf:
138 /usr/lib64/qt4/mkspecs/common/gcc-base.conf:
138 /usr/lib64/qt4/mkspecs/common/gcc-base.conf:
139 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf:
139 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf:
140 /usr/lib64/qt4/mkspecs/common/g++-base.conf:
140 /usr/lib64/qt4/mkspecs/common/g++-base.conf:
141 /usr/lib64/qt4/mkspecs/common/g++-unix.conf:
141 /usr/lib64/qt4/mkspecs/common/g++-unix.conf:
142 /usr/lib64/qt4/mkspecs/qconfig.pri:
142 /usr/lib64/qt4/mkspecs/qconfig.pri:
143 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri:
143 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri:
144 /usr/lib64/qt4/mkspecs/features/qt_functions.prf:
144 /usr/lib64/qt4/mkspecs/features/qt_functions.prf:
145 /usr/lib64/qt4/mkspecs/features/qt_config.prf:
145 /usr/lib64/qt4/mkspecs/features/qt_config.prf:
146 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf:
146 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf:
147 /usr/lib64/qt4/mkspecs/features/default_pre.prf:
147 /usr/lib64/qt4/mkspecs/features/default_pre.prf:
148 sparc.pri:
148 sparc.pri:
149 /usr/lib64/qt4/mkspecs/features/release.prf:
149 /usr/lib64/qt4/mkspecs/features/release.prf:
150 /usr/lib64/qt4/mkspecs/features/default_post.prf:
150 /usr/lib64/qt4/mkspecs/features/default_post.prf:
151 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf:
151 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf:
152 /usr/lib64/qt4/mkspecs/features/warn_on.prf:
152 /usr/lib64/qt4/mkspecs/features/warn_on.prf:
153 /usr/lib64/qt4/mkspecs/features/resources.prf:
153 /usr/lib64/qt4/mkspecs/features/resources.prf:
154 /usr/lib64/qt4/mkspecs/features/uic.prf:
154 /usr/lib64/qt4/mkspecs/features/uic.prf:
155 /usr/lib64/qt4/mkspecs/features/yacc.prf:
155 /usr/lib64/qt4/mkspecs/features/yacc.prf:
156 /usr/lib64/qt4/mkspecs/features/lex.prf:
156 /usr/lib64/qt4/mkspecs/features/lex.prf:
157 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf:
157 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf:
158 qmake: FORCE
158 qmake: FORCE
159 @$(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
159 @$(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
160
160
161 dist:
161 dist:
162 @$(CHK_DIR_EXISTS) obj/fsw1.0.0 || $(MKDIR) obj/fsw1.0.0
162 @$(CHK_DIR_EXISTS) obj/fsw1.0.0 || $(MKDIR) obj/fsw1.0.0
163 $(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
163 $(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
164
164
165
165
166 clean:compiler_clean
166 clean:compiler_clean
167 -$(DEL_FILE) $(OBJECTS)
167 -$(DEL_FILE) $(OBJECTS)
168 -$(DEL_FILE) *~ core *.core
168 -$(DEL_FILE) *~ core *.core
169
169
170
170
171 ####### Sub-libraries
171 ####### Sub-libraries
172
172
173 distclean: clean
173 distclean: clean
174 -$(DEL_FILE) $(TARGET)
174 -$(DEL_FILE) $(TARGET)
175 -$(DEL_FILE) Makefile
175 -$(DEL_FILE) Makefile
176
176
177
177
178 grmon:
178 grmon:
179 cd bin && C:/opt/grmon-eval-2.0.29b/win32/bin/grmon.exe -uart COM4 -u
179 cd bin && C:/opt/grmon-eval-2.0.29b/win32/bin/grmon.exe -uart COM4 -u
180
180
181 check: first
181 check: first
182
182
183 compiler_rcc_make_all:
183 compiler_rcc_make_all:
184 compiler_rcc_clean:
184 compiler_rcc_clean:
185 compiler_uic_make_all:
185 compiler_uic_make_all:
186 compiler_uic_clean:
186 compiler_uic_clean:
187 compiler_image_collection_make_all: qmake_image_collection.cpp
187 compiler_image_collection_make_all: qmake_image_collection.cpp
188 compiler_image_collection_clean:
188 compiler_image_collection_clean:
189 -$(DEL_FILE) qmake_image_collection.cpp
189 -$(DEL_FILE) qmake_image_collection.cpp
190 compiler_yacc_decl_make_all:
190 compiler_yacc_decl_make_all:
191 compiler_yacc_decl_clean:
191 compiler_yacc_decl_clean:
192 compiler_yacc_impl_make_all:
192 compiler_yacc_impl_make_all:
193 compiler_yacc_impl_clean:
193 compiler_yacc_impl_clean:
194 compiler_lex_make_all:
194 compiler_lex_make_all:
195 compiler_lex_clean:
195 compiler_lex_clean:
196 compiler_clean:
196 compiler_clean:
197
197
198 ####### Compile
198 ####### Compile
199
199
200 obj/wf_handler.o: ../src/wf_handler.c
200 obj/wf_handler.o: ../src/wf_handler.c
201 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/wf_handler.o ../src/wf_handler.c
201 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/wf_handler.o ../src/wf_handler.c
202
202
203 obj/tc_handler.o: ../src/tc_handler.c
203 obj/tc_handler.o: ../src/tc_handler.c
204 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tc_handler.o ../src/tc_handler.c
204 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tc_handler.o ../src/tc_handler.c
205
205
206 obj/fsw_processing.o: ../src/fsw_processing.c
206 obj/fsw_processing.o: ../src/fsw_processing.c
207 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_processing.o ../src/fsw_processing.c
207 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_processing.o ../src/fsw_processing.c
208
208
209 obj/fsw_misc.o: ../src/fsw_misc.c
209 obj/fsw_misc.o: ../src/fsw_misc.c
210 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_misc.o ../src/fsw_misc.c
210 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_misc.o ../src/fsw_misc.c
211
211
212 obj/fsw_init.o: ../src/fsw_init.c
212 obj/fsw_init.o: ../src/fsw_init.c
213 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_init.o ../src/fsw_init.c
213 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_init.o ../src/fsw_init.c
214
214
215 obj/fsw_globals.o: ../src/fsw_globals.c
215 obj/fsw_globals.o: ../src/fsw_globals.c
216 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_globals.o ../src/fsw_globals.c
216 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_globals.o ../src/fsw_globals.c
217
217
218 ####### Install
218 ####### Install
219
219
220 install: FORCE
220 install: FORCE
221
221
222 uninstall: FORCE
222 uninstall: FORCE
223
223
224 FORCE:
224 FORCE:
225
225
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -1,51 +1,51
1 TEMPLATE = app
1 TEMPLATE = app
2 # CONFIG += console v8 sim
2 # CONFIG += console v8 sim
3 # CONFIG options = verbose *** cpu_usage_report *** gsa
3 # CONFIG options = verbose *** cpu_usage_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-8
10 SWVERSION=-0-9
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=8
14 DEFINES += SW_VERSION_N4=9
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 TARGET = fsw
24 TARGET = fsw
25 contains( CONFIG, gsa ) {
25 contains( CONFIG, gsa ) {
26 DEFINES += GSA
26 DEFINES += GSA
27 TARGET = fsw-gsa
27 TARGET = fsw-gsa
28 }
28 }
29
29
30 INCLUDEPATH += \
30 INCLUDEPATH += \
31 ../src \
31 ../src \
32 ../header
32 ../header
33
33
34 SOURCES += \
34 SOURCES += \
35 ../src/wf_handler.c \
35 ../src/wf_handler.c \
36 ../src/tc_handler.c \
36 ../src/tc_handler.c \
37 ../src/fsw_processing.c \
37 ../src/fsw_processing.c \
38 ../src/fsw_misc.c \
38 ../src/fsw_misc.c \
39 ../src/fsw_init.c \
39 ../src/fsw_init.c \
40 ../src/fsw_globals.c
40 ../src/fsw_globals.c
41
41
42 HEADERS += \
42 HEADERS += \
43 ../header/wf_handler.h \
43 ../header/wf_handler.h \
44 ../header/tc_handler.h \
44 ../header/tc_handler.h \
45 ../header/grlib_regs.h \
45 ../header/grlib_regs.h \
46 ../header/fsw_processing.h \
46 ../header/fsw_processing.h \
47 ../header/fsw_params.h \
47 ../header/fsw_params.h \
48 ../header/fsw_misc.h \
48 ../header/fsw_misc.h \
49 ../header/fsw_init.h \
49 ../header/fsw_init.h \
50 ../header/ccsds_types.h
50 ../header/ccsds_types.h
51
51
@@ -1,255 +1,255
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.7.0, 2013-07-16T11:27:54. -->
3 <!-- Written by QtCreator 2.7.0, 2013-07-19T08:53:16. -->
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="QByteArray" key="language">Cpp</value>
16 <value type="QByteArray" 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="QByteArray" key="language">QmlJS</value>
22 <value type="QByteArray" 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="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">{5289e843-9ef2-45ce-88c6-ad27d8e08def}</value>
56 <value type="QByteArray" 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="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
66 <value type="QByteArray" 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="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
76 <value type="QByteArray" 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="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
88 <value type="QByteArray" 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="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
95 <value type="QByteArray" 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="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
107 <value type="QByteArray" 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="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
114 <value type="QByteArray" 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="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
125 <value type="QByteArray" 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="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
135 <value type="QByteArray" 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="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
147 <value type="QByteArray" 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="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
154 <value type="QByteArray" 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="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
166 <value type="QByteArray" 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="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
173 <value type="QByteArray" 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="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
184 <value type="QByteArray" 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="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
189 <value type="QByteArray" 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.RunConfiguration.0">
192 <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
193 <value type="bool" key="Analyzer.Project.UseGlobal">true</value>
193 <value type="bool" key="Analyzer.Project.UseGlobal">true</value>
194 <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
194 <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
195 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
195 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
196 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
196 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
197 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
197 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
198 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
198 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
199 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
199 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
200 <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
200 <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
201 <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
201 <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
202 <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
202 <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
203 <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
203 <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
204 <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
204 <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
205 <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
205 <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
206 <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
206 <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
207 <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
207 <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
208 <value type="int">0</value>
208 <value type="int">0</value>
209 <value type="int">1</value>
209 <value type="int">1</value>
210 <value type="int">2</value>
210 <value type="int">2</value>
211 <value type="int">3</value>
211 <value type="int">3</value>
212 <value type="int">4</value>
212 <value type="int">4</value>
213 <value type="int">5</value>
213 <value type="int">5</value>
214 <value type="int">6</value>
214 <value type="int">6</value>
215 <value type="int">7</value>
215 <value type="int">7</value>
216 <value type="int">8</value>
216 <value type="int">8</value>
217 <value type="int">9</value>
217 <value type="int">9</value>
218 <value type="int">10</value>
218 <value type="int">10</value>
219 <value type="int">11</value>
219 <value type="int">11</value>
220 <value type="int">12</value>
220 <value type="int">12</value>
221 <value type="int">13</value>
221 <value type="int">13</value>
222 <value type="int">14</value>
222 <value type="int">14</value>
223 </valuelist>
223 </valuelist>
224 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">fsw-qt</value>
224 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">fsw-qt</value>
225 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
225 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
226 <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/opt/DEV_PLE/FSW-qt/fsw-qt.pro</value>
226 <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/opt/DEV_PLE/FSW-qt/fsw-qt.pro</value>
227 <value type="int" key="Qt4ProjectManager.Qt4RunConfiguration.BaseEnvironmentBase">2</value>
227 <value type="int" key="Qt4ProjectManager.Qt4RunConfiguration.BaseEnvironmentBase">2</value>
228 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
228 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
229 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">fsw-qt.pro</value>
229 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">fsw-qt.pro</value>
230 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
230 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
231 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">true</value>
231 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">true</value>
232 <valuelist type="QVariantList" key="Qt4ProjectManager.Qt4RunConfiguration.UserEnvironmentChanges"/>
232 <valuelist type="QVariantList" key="Qt4ProjectManager.Qt4RunConfiguration.UserEnvironmentChanges"/>
233 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
233 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
234 <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
234 <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
235 <value type="bool" key="RunConfiguration.UseCppDebugger">true</value>
235 <value type="bool" key="RunConfiguration.UseCppDebugger">true</value>
236 <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
236 <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
237 <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
237 <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
238 <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">false</value>
238 <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">false</value>
239 </valuemap>
239 </valuemap>
240 <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
240 <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
241 </valuemap>
241 </valuemap>
242 </data>
242 </data>
243 <data>
243 <data>
244 <variable>ProjectExplorer.Project.TargetCount</variable>
244 <variable>ProjectExplorer.Project.TargetCount</variable>
245 <value type="int">1</value>
245 <value type="int">1</value>
246 </data>
246 </data>
247 <data>
247 <data>
248 <variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
248 <variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
249 <value type="QString">{2e58a81f-9962-4bba-ae6b-760177f0656c}</value>
249 <value type="QString">{2e58a81f-9962-4bba-ae6b-760177f0656c}</value>
250 </data>
250 </data>
251 <data>
251 <data>
252 <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
252 <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
253 <value type="int">12</value>
253 <value type="int">12</value>
254 </data>
254 </data>
255 </qtcreator>
255 </qtcreator>
@@ -1,590 +1,595
1 //*************************
1 //*************************
2 // GPL reminder to be added
2 // GPL reminder to be added
3 //*************************
3 //*************************
4
4
5 #include <rtems.h>
5 #include <rtems.h>
6
6
7 /* configuration information */
7 /* configuration information */
8
8
9 #define CONFIGURE_INIT
9 #define CONFIGURE_INIT
10
10
11 #include <bsp.h> /* for device driver prototypes */
11 #include <bsp.h> /* for device driver prototypes */
12
12
13 /* configuration information */
13 /* configuration information */
14
14
15 #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
15 #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
16 #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
16 #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
17
17
18 #define CONFIGURE_MAXIMUM_TASKS 15
18 #define CONFIGURE_MAXIMUM_TASKS 15
19 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
19 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
20 #define CONFIGURE_EXTRA_TASK_STACKS (3 * RTEMS_MINIMUM_STACK_SIZE)
20 #define CONFIGURE_EXTRA_TASK_STACKS (3 * RTEMS_MINIMUM_STACK_SIZE)
21 #define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 32
21 #define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 32
22 #define CONFIGURE_INIT_TASK_PRIORITY 100
22 #define CONFIGURE_INIT_TASK_PRIORITY 100
23 #define CONFIGURE_MAXIMUM_DRIVERS 16
23 #define CONFIGURE_MAXIMUM_DRIVERS 16
24 #define CONFIGURE_MAXIMUM_PERIODS 5
24 #define CONFIGURE_MAXIMUM_PERIODS 5
25 #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
25 #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
26
26
27 #include <rtems/confdefs.h>
27 #include <rtems/confdefs.h>
28
28
29 /* If --drvmgr was enabled during the configuration of the RTEMS kernel */
29 /* If --drvmgr was enabled during the configuration of the RTEMS kernel */
30 #ifdef RTEMS_DRVMGR_STARTUP
30 #ifdef RTEMS_DRVMGR_STARTUP
31 #ifdef LEON3
31 #ifdef LEON3
32 /* Add Timer and UART Driver */
32 /* Add Timer and UART Driver */
33 #ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
33 #ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
34 #define CONFIGURE_DRIVER_AMBAPP_GAISLER_GPTIMER
34 #define CONFIGURE_DRIVER_AMBAPP_GAISLER_GPTIMER
35 #endif
35 #endif
36 #ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
36 #ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
37 #define CONFIGURE_DRIVER_AMBAPP_GAISLER_APBUART
37 #define CONFIGURE_DRIVER_AMBAPP_GAISLER_APBUART
38 #endif
38 #endif
39 #endif
39 #endif
40 #define CONFIGURE_DRIVER_AMBAPP_GAISLER_GRSPW /* GRSPW Driver */
40 #define CONFIGURE_DRIVER_AMBAPP_GAISLER_GRSPW /* GRSPW Driver */
41 #include <drvmgr/drvmgr_confdefs.h>
41 #include <drvmgr/drvmgr_confdefs.h>
42 #endif
42 #endif
43
43
44 #include <fsw_init.h>
44 #include <fsw_init.h>
45 #include <fsw_config.c>
45 #include <fsw_config.c>
46
46
47 char *lstates[6] = {"Error-reset",
47 char *lstates[6] = {"Error-reset",
48 "Error-wait",
48 "Error-wait",
49 "Ready",
49 "Ready",
50 "Started",
50 "Started",
51 "Connecting",
51 "Connecting",
52 "Run"
52 "Run"
53 };
53 };
54
54
55 rtems_task Init( rtems_task_argument ignored )
55 rtems_task Init( rtems_task_argument ignored )
56 {
56 {
57 rtems_status_code status;
57 rtems_status_code status;
58 rtems_isr_entry old_isr_handler;
58 rtems_isr_entry old_isr_handler;
59
59
60 PRINTF("\n\n\n\n\n")
60 PRINTF("\n\n\n\n\n")
61 PRINTF("***************************\n")
61 PRINTF("***************************\n")
62 PRINTF("** START Flight Software **\n")
62 PRINTF("** START Flight Software **\n")
63 PRINTF("***************************\n")
63 PRINTF("***************************\n")
64 PRINTF("\n\n")
64 PRINTF("\n\n")
65
65
66 //send_console_outputs_on_apbuart_port();
66 //send_console_outputs_on_apbuart_port();
67 set_apbuart_scaler_reload_register(REGS_ADDR_APBUART, APBUART_SCALER_RELOAD_VALUE);
67 set_apbuart_scaler_reload_register(REGS_ADDR_APBUART, APBUART_SCALER_RELOAD_VALUE);
68
68
69 initLookUpTableForCRC(); // in tc_handler.h
69 initLookUpTableForCRC(); // in tc_handler.h
70 init_parameter_dump();
70 init_parameter_dump();
71 init_local_mode_parameters();
71 init_local_mode_parameters();
72 init_housekeeping_parameters();
72 init_housekeeping_parameters();
73 create_message_queue();
73 create_message_queue();
74
74
75 create_names(); // create all names
75 create_names(); // create all names
76 create_all_tasks(); // create all tasks
76 create_all_tasks(); // create all tasks
77 start_all_tasks(); // start all tasks
77 start_all_tasks(); // start all tasks
78 stop_current_mode(); // go in STANDBY mode
78 stop_current_mode(); // go in STANDBY mode
79
79
80 grspw_timecode_callback = &timecode_irq_handler;
80 grspw_timecode_callback = &timecode_irq_handler;
81
81
82 spacewire_configure_link();
82 spacewire_configure_link();
83
83
84 //****************************
84 //****************************
85 // Spectral Matrices simulator
85 // Spectral Matrices simulator
86 configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR, CLKDIV_SM_SIMULATOR,
86 configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR, CLKDIV_SM_SIMULATOR,
87 IRQ_SPARC_SM, spectral_matrices_isr );
87 IRQ_SPARC_SM, spectral_matrices_isr );
88
88
89 //**********
89 //**********
90 // WAVEFORMS
90 // WAVEFORMS
91 // simulator
92
91
93 #ifdef GSA
92 #ifdef GSA
93 // simulator
94 PRINTF("GSA is defined *** fsw-gsa is running \n")
94 configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_WF_SIMULATOR, CLKDIV_WF_SIMULATOR,
95 configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_WF_SIMULATOR, CLKDIV_WF_SIMULATOR,
95 IRQ_SPARC_WF, waveforms_simulator_isr );
96 IRQ_SPARC_WF, waveforms_simulator_isr );
96 #else
97 #else
97 // configure the registers of the waveform picker
98 // configure the registers of the waveform picker
98 reset_wfp_regs();
99 reset_wfp_regs();
99 // configure the waveform picker interrupt service routine
100 // configure the waveform picker interrupt service routine
100 status = rtems_interrupt_catch( waveforms_isr,
101 status = rtems_interrupt_catch( waveforms_isr,
101 IRQ_SPARC_WAVEFORM_PICKER,
102 IRQ_SPARC_WAVEFORM_PICKER,
102 &old_isr_handler) ;
103 &old_isr_handler) ;
103 LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER );
104 LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER );
104 #endif
105 #endif
105
106
106 //**********
107 //**********
107
108
108 //*****************************************
109 //*****************************************
109 // irq handling of the time management unit
110 // irq handling of the time management unit
110 status = rtems_interrupt_catch( commutation_isr1,
111 status = rtems_interrupt_catch( commutation_isr1,
111 IRQ_SPARC_TIME1,
112 IRQ_SPARC_TIME1,
112 &old_isr_handler) ; // see sparcv8.pdf p.76 for interrupt levels
113 &old_isr_handler) ; // see sparcv8.pdf p.76 for interrupt levels
113 if (status==RTEMS_SUCCESSFUL) {
114 if (status==RTEMS_SUCCESSFUL) {
114 PRINTF("OK *** commutation_isr1 *** rtems_interrupt_catch successfullly configured\n")
115 PRINTF("OK *** commutation_isr1 *** rtems_interrupt_catch successfullly configured\n")
115 }
116 }
116
117
117 status = rtems_interrupt_catch( commutation_isr2,
118 status = rtems_interrupt_catch( commutation_isr2,
118 IRQ_SPARC_TIME2,
119 IRQ_SPARC_TIME2,
119 &old_isr_handler) ; // see sparcv8.pdf p.76 for interrupt levels
120 &old_isr_handler) ; // see sparcv8.pdf p.76 for interrupt levels
120 if (status==RTEMS_SUCCESSFUL) {
121 if (status==RTEMS_SUCCESSFUL) {
121 PRINTF("OK *** commutation_isr2 *** rtems_interrupt_catch successfullly configured\n")
122 PRINTF("OK *** commutation_isr2 *** rtems_interrupt_catch successfullly configured\n")
122 }
123 }
123
124
124 LEON_Unmask_interrupt( IRQ_TIME1 );
125 LEON_Unmask_interrupt( IRQ_TIME1 );
125 LEON_Unmask_interrupt( IRQ_TIME2 );
126 LEON_Unmask_interrupt( IRQ_TIME2 );
126
127
127 #ifdef GSA
128 #ifdef GSA
128 //if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
129 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
129 // printf("in INIT *** Error sending event to WFRM\n");
130 PRINTF("in INIT *** Error sending event to WFRM\n")
130 //}
131 }
131 #endif
132 #endif
132
133
134 LEON_Force_interrupt(IRQ_WF);
135
133 status = rtems_task_delete(RTEMS_SELF);
136 status = rtems_task_delete(RTEMS_SELF);
134
137
135 }
138 }
136
139
137 rtems_task spiq_task(rtems_task_argument unused)
138 {
139 rtems_event_set event_out;
140 rtems_status_code status;
141 unsigned char lfrMode;
142
143 while(true){
144 PRINTF("in SPIQ *** Waiting for SPW_LINKERR_EVENT\n")
145 rtems_event_receive(SPW_LINKERR_EVENT, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an SPW_LINKERR_EVENT
146
147 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4; // get the current mode
148
149 status = spacewire_wait_for_link();
150
151 if (status != RTEMS_SUCCESSFUL)
152 {
153 //****************
154 // STOP THE SYSTEM
155 spacewire_compute_stats_offsets();
156 stop_current_mode();
157 if (rtems_task_suspend(Task_id[TASKID_RECV])!=RTEMS_SUCCESSFUL) { // suspend RECV task
158 PRINTF("in SPIQ *** Error suspending RECV Task\n")
159 }
160 if (rtems_task_suspend(Task_id[TASKID_HOUS])!=RTEMS_SUCCESSFUL) { // suspend HOUS task
161 PRINTF("in SPIQ *** Error suspending HOUS Task\n")
162 }
163
164 //***************************
165 // RESTART THE SPACEWIRE LINK
166 spacewire_configure_link();
167
168 //*******************
169 // RESTART THE SYSTEM
170 //ioctl(fdSPW, SPACEWIRE_IOCTRL_CLR_STATISTICS); // clear statistics
171 status = rtems_task_restart( Task_id[TASKID_HOUS], 1 );
172 if (status != RTEMS_SUCCESSFUL) {
173 PRINTF1("in SPIQ *** Error restarting HOUS Task *** code %d\n", status)
174 }
175 if (rtems_task_restart(Task_id[TASKID_RECV], 1) != RTEMS_SUCCESSFUL) { // restart RECV task
176 PRINTF("in SPIQ *** Error restarting RECV Task\n")
177 }
178 //enter_mode(lfrMode, NULL); // enter the mode that was running before the SpaceWire interruption
179 }
180 }
181 }
182
183 void init_parameter_dump(void)
140 void init_parameter_dump(void)
184 {
141 {
185 parameter_dump_packet.targetLogicalAddress = CCSDS_DESTINATION_ID;
142 parameter_dump_packet.targetLogicalAddress = CCSDS_DESTINATION_ID;
186 parameter_dump_packet.protocolIdentifier = CCSDS_PROTOCOLE_ID;
143 parameter_dump_packet.protocolIdentifier = CCSDS_PROTOCOLE_ID;
187 parameter_dump_packet.reserved = CCSDS_RESERVED;
144 parameter_dump_packet.reserved = CCSDS_RESERVED;
188 parameter_dump_packet.userApplication = CCSDS_USER_APP;
145 parameter_dump_packet.userApplication = CCSDS_USER_APP;
189 parameter_dump_packet.packetID[0] = (unsigned char) (TM_PACKET_ID_PARAMETER_DUMP >> 8);
146 parameter_dump_packet.packetID[0] = (unsigned char) (TM_PACKET_ID_PARAMETER_DUMP >> 8);
190 parameter_dump_packet.packetID[1] = (unsigned char) TM_PACKET_ID_PARAMETER_DUMP;
147 parameter_dump_packet.packetID[1] = (unsigned char) TM_PACKET_ID_PARAMETER_DUMP;
191 parameter_dump_packet.packetSequenceControl[0] = (unsigned char) (TM_PACKET_SEQ_CTRL_STANDALONE << 6);
148 parameter_dump_packet.packetSequenceControl[0] = (unsigned char) (TM_PACKET_SEQ_CTRL_STANDALONE << 6);
192 parameter_dump_packet.packetSequenceControl[1] = 0x00;
149 parameter_dump_packet.packetSequenceControl[1] = 0x00;
193 parameter_dump_packet.packetLength[0] = (unsigned char) (PACKET_LENGTH_PARAMETER_DUMP >> 8);
150 parameter_dump_packet.packetLength[0] = (unsigned char) (PACKET_LENGTH_PARAMETER_DUMP >> 8);
194 parameter_dump_packet.packetLength[1] = (unsigned char) PACKET_LENGTH_PARAMETER_DUMP;
151 parameter_dump_packet.packetLength[1] = (unsigned char) PACKET_LENGTH_PARAMETER_DUMP;
195 // DATA FIELD HEADER
152 // DATA FIELD HEADER
196 parameter_dump_packet.spare1_pusVersion_spare2 = SPARE1_PUSVERSION_SPARE2;
153 parameter_dump_packet.spare1_pusVersion_spare2 = SPARE1_PUSVERSION_SPARE2;
197 parameter_dump_packet.serviceType = TM_TYPE_PARAMETER_DUMP;
154 parameter_dump_packet.serviceType = TM_TYPE_PARAMETER_DUMP;
198 parameter_dump_packet.serviceSubType = TM_SUBTYPE_PARAMETER_DUMP;
155 parameter_dump_packet.serviceSubType = TM_SUBTYPE_PARAMETER_DUMP;
199 parameter_dump_packet.destinationID = TM_DESTINATION_ID_GROUND;
156 parameter_dump_packet.destinationID = TM_DESTINATION_ID_GROUND;
200 parameter_dump_packet.time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
157 parameter_dump_packet.time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
201 parameter_dump_packet.time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
158 parameter_dump_packet.time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
202 parameter_dump_packet.time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
159 parameter_dump_packet.time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
203 parameter_dump_packet.time[3] = (unsigned char) (time_management_regs->coarse_time);
160 parameter_dump_packet.time[3] = (unsigned char) (time_management_regs->coarse_time);
204 parameter_dump_packet.time[4] = (unsigned char) (time_management_regs->fine_time>>8);
161 parameter_dump_packet.time[4] = (unsigned char) (time_management_regs->fine_time>>8);
205 parameter_dump_packet.time[5] = (unsigned char) (time_management_regs->fine_time);
162 parameter_dump_packet.time[5] = (unsigned char) (time_management_regs->fine_time);
206 parameter_dump_packet.sid = SID_PARAMETER_DUMP;
163 parameter_dump_packet.sid = SID_PARAMETER_DUMP;
207
164
208 //******************
165 //******************
209 // COMMON PARAMETERS
166 // COMMON PARAMETERS
210 parameter_dump_packet.unused0 = DEFAULT_SY_LFR_COMMON0;
167 parameter_dump_packet.unused0 = DEFAULT_SY_LFR_COMMON0;
211 parameter_dump_packet.bw_sp0_sp1_r0_r1 = DEFAULT_SY_LFR_COMMON1;
168 parameter_dump_packet.bw_sp0_sp1_r0_r1 = DEFAULT_SY_LFR_COMMON1;
212
169
213 //******************
170 //******************
214 // NORMAL PARAMETERS
171 // NORMAL PARAMETERS
215 parameter_dump_packet.sy_lfr_n_swf_l[0] = (unsigned char) (DEFAULT_SY_LFR_N_SWF_L >> 8);
172 parameter_dump_packet.sy_lfr_n_swf_l[0] = (unsigned char) (DEFAULT_SY_LFR_N_SWF_L >> 8);
216 parameter_dump_packet.sy_lfr_n_swf_l[1] = (unsigned char) DEFAULT_SY_LFR_N_SWF_L;
173 parameter_dump_packet.sy_lfr_n_swf_l[1] = (unsigned char) DEFAULT_SY_LFR_N_SWF_L;
217 parameter_dump_packet.sy_lfr_n_swf_p[0] = (unsigned char) (DEFAULT_SY_LFR_N_SWF_P >> 8);
174 parameter_dump_packet.sy_lfr_n_swf_p[0] = (unsigned char) (DEFAULT_SY_LFR_N_SWF_P >> 8);
218 parameter_dump_packet.sy_lfr_n_swf_p[1] = (unsigned char) DEFAULT_SY_LFR_N_SWF_P;
175 parameter_dump_packet.sy_lfr_n_swf_p[1] = (unsigned char) DEFAULT_SY_LFR_N_SWF_P;
219 parameter_dump_packet.sy_lfr_n_asm_p[0] = (unsigned char) (DEFAULT_SY_LFR_N_ASM_P >> 8);
176 parameter_dump_packet.sy_lfr_n_asm_p[0] = (unsigned char) (DEFAULT_SY_LFR_N_ASM_P >> 8);
220 parameter_dump_packet.sy_lfr_n_asm_p[1] = (unsigned char) DEFAULT_SY_LFR_N_ASM_P;
177 parameter_dump_packet.sy_lfr_n_asm_p[1] = (unsigned char) DEFAULT_SY_LFR_N_ASM_P;
221 parameter_dump_packet.sy_lfr_n_bp_p0 = (unsigned char) DEFAULT_SY_LFR_N_BP_P0;
178 parameter_dump_packet.sy_lfr_n_bp_p0 = (unsigned char) DEFAULT_SY_LFR_N_BP_P0;
222 parameter_dump_packet.sy_lfr_n_bp_p1 = (unsigned char) DEFAULT_SY_LFR_N_BP_P1;
179 parameter_dump_packet.sy_lfr_n_bp_p1 = (unsigned char) DEFAULT_SY_LFR_N_BP_P1;
223
180
224 //*****************
181 //*****************
225 // BURST PARAMETERS
182 // BURST PARAMETERS
226 parameter_dump_packet.sy_lfr_b_bp_p0 = (unsigned char) DEFAULT_SY_LFR_B_BP_P0;
183 parameter_dump_packet.sy_lfr_b_bp_p0 = (unsigned char) DEFAULT_SY_LFR_B_BP_P0;
227 parameter_dump_packet.sy_lfr_b_bp_p1 = (unsigned char) DEFAULT_SY_LFR_B_BP_P1;
184 parameter_dump_packet.sy_lfr_b_bp_p1 = (unsigned char) DEFAULT_SY_LFR_B_BP_P1;
228
185
229 //****************
186 //****************
230 // SBM1 PARAMETERS
187 // SBM1 PARAMETERS
231 parameter_dump_packet.sy_lfr_s1_bp_p0 = (unsigned char) DEFAULT_SY_LFR_S1_BP_P0;
188 parameter_dump_packet.sy_lfr_s1_bp_p0 = (unsigned char) DEFAULT_SY_LFR_S1_BP_P0;
232 parameter_dump_packet.sy_lfr_s1_bp_p1 = (unsigned char) DEFAULT_SY_LFR_S1_BP_P0;
189 parameter_dump_packet.sy_lfr_s1_bp_p1 = (unsigned char) DEFAULT_SY_LFR_S1_BP_P0;
233
190
234 //****************
191 //****************
235 // SBM2 PARAMETERS
192 // SBM2 PARAMETERS
236 parameter_dump_packet.sy_lfr_s2_bp_p0 = (unsigned char) DEFAULT_SY_LFR_S2_BP_P0;
193 parameter_dump_packet.sy_lfr_s2_bp_p0 = (unsigned char) DEFAULT_SY_LFR_S2_BP_P0;
237 parameter_dump_packet.sy_lfr_s2_bp_p1 = (unsigned char) DEFAULT_SY_LFR_S2_BP_P0;
194 parameter_dump_packet.sy_lfr_s2_bp_p1 = (unsigned char) DEFAULT_SY_LFR_S2_BP_P0;
238 }
195 }
239
196
240 void init_local_mode_parameters(void)
197 void init_local_mode_parameters(void)
241 {
198 {
242 // LOCAL PARAMETERS
199 // LOCAL PARAMETERS
243 // (2 snapshots of 2048 points per seconds) * (period of the NORM snashots)
200 // (2 snapshots of 2048 points per seconds) * (period of the NORM snashots)
244 param_local.local_sbm1_nb_cwf_max = 2 * (
201 param_local.local_sbm1_nb_cwf_max = 2 * (
245 parameter_dump_packet.sy_lfr_n_swf_p[0] * 256
202 parameter_dump_packet.sy_lfr_n_swf_p[0] * 256
246 + parameter_dump_packet.sy_lfr_n_swf_p[1]
203 + parameter_dump_packet.sy_lfr_n_swf_p[1]
247 );
204 );
248 // (period of the NORM snashots) / (8 seconds per snapshot at f2 = 256 Hz)
205 // (period of the NORM snashots) / (8 seconds per snapshot at f2 = 256 Hz)
249 param_local.local_sbm2_nb_cwf_max = (
206 param_local.local_sbm2_nb_cwf_max = (
250 parameter_dump_packet.sy_lfr_n_swf_p[0] * 256
207 parameter_dump_packet.sy_lfr_n_swf_p[0] * 256
251 + parameter_dump_packet.sy_lfr_n_swf_p[1]
208 + parameter_dump_packet.sy_lfr_n_swf_p[1]
252 )/ 8;
209 )/ 8;
253
210
254 PRINTF1("local_sbm1_nb_cwf_max %d \n", param_local.local_sbm1_nb_cwf_max)
211 PRINTF1("local_sbm1_nb_cwf_max %d \n", param_local.local_sbm1_nb_cwf_max)
255 PRINTF1("local_sbm2_nb_cwf_max %d \n", param_local.local_sbm2_nb_cwf_max)
212 PRINTF1("local_sbm2_nb_cwf_max %d \n", param_local.local_sbm2_nb_cwf_max)
256
213
257 param_local.local_sbm1_nb_cwf_sent = 0;
214 param_local.local_sbm1_nb_cwf_sent = 0;
258 param_local.local_sbm2_nb_cwf_sent = 0;
215 param_local.local_sbm2_nb_cwf_sent = 0;
259 }
216 }
260
217
261 void init_housekeeping_parameters(void)
218 void init_housekeeping_parameters(void)
262 {
219 {
263 unsigned int i = 0;
220 unsigned int i = 0;
264 unsigned int j = 0;
221 unsigned int j = 0;
265 unsigned int k = 0;
222 unsigned int k = 0;
266 char *parameters;
223 char *parameters;
267
224
268 parameters = (char*) &housekeeping_packet.lfr_status_word;
225 parameters = (char*) &housekeeping_packet.lfr_status_word;
269 for(i = 0; i< SIZE_HK_PARAMETERS; i++)
226 for(i = 0; i< SIZE_HK_PARAMETERS; i++)
270 {
227 {
271 parameters[i] = 0x00;
228 parameters[i] = 0x00;
272 }
229 }
273 // init status word
230 // init status word
274 housekeeping_packet.lfr_status_word[0] = 0x00;
231 housekeeping_packet.lfr_status_word[0] = 0x00;
275 housekeeping_packet.lfr_status_word[1] = 0x00;
232 housekeeping_packet.lfr_status_word[1] = 0x00;
276 // init software version
233 // init software version
277 housekeeping_packet.lfr_sw_version[0] = SW_VERSION_N1;
234 housekeeping_packet.lfr_sw_version[0] = SW_VERSION_N1;
278 housekeeping_packet.lfr_sw_version[1] = SW_VERSION_N2;
235 housekeeping_packet.lfr_sw_version[1] = SW_VERSION_N2;
279 housekeeping_packet.lfr_sw_version[2] = SW_VERSION_N3;
236 housekeeping_packet.lfr_sw_version[2] = SW_VERSION_N3;
280 housekeeping_packet.lfr_sw_version[3] = SW_VERSION_N4;
237 housekeeping_packet.lfr_sw_version[3] = SW_VERSION_N4;
281 // init sequence counters
238 // init sequence counters
282 for (i = 0; i<SEQ_CNT_NB_PID; i++)
239 for (i = 0; i<SEQ_CNT_NB_PID; i++)
283 {
240 {
284 for(j = 0; j<SEQ_CNT_NB_CAT; j++)
241 for(j = 0; j<SEQ_CNT_NB_CAT; j++)
285 {
242 {
286 for(k = 0; k<SEQ_CNT_NB_DEST_ID; k++)
243 for(k = 0; k<SEQ_CNT_NB_DEST_ID; k++)
287 {
244 {
288 sequenceCounters[i][j][k] = 0x00;
245 sequenceCounters[i][j][k] = 0x00;
289 }
246 }
290 }
247 }
291 }
248 }
292 }
249 }
293
250
294 int create_names( void )
251 int create_names( void )
295 {
252 {
296 // task names
253 // task names
297 Task_name[TASKID_RECV] = rtems_build_name( 'R', 'E', 'C', 'V' );
254 Task_name[TASKID_RECV] = rtems_build_name( 'R', 'E', 'C', 'V' );
298 Task_name[TASKID_ACTN] = rtems_build_name( 'A', 'C', 'T', 'N' );
255 Task_name[TASKID_ACTN] = rtems_build_name( 'A', 'C', 'T', 'N' );
299 Task_name[TASKID_SPIQ] = rtems_build_name( 'S', 'P', 'I', 'Q' );
256 Task_name[TASKID_SPIQ] = rtems_build_name( 'S', 'P', 'I', 'Q' );
300 Task_name[TASKID_SMIQ] = rtems_build_name( 'S', 'M', 'I', 'Q' );
257 Task_name[TASKID_SMIQ] = rtems_build_name( 'S', 'M', 'I', 'Q' );
301 Task_name[TASKID_STAT] = rtems_build_name( 'S', 'T', 'A', 'T' );
258 Task_name[TASKID_STAT] = rtems_build_name( 'S', 'T', 'A', 'T' );
302 Task_name[TASKID_AVF0] = rtems_build_name( 'A', 'V', 'F', '0' );
259 Task_name[TASKID_AVF0] = rtems_build_name( 'A', 'V', 'F', '0' );
303 Task_name[TASKID_BPF0] = rtems_build_name( 'B', 'P', 'F', '0' );
260 Task_name[TASKID_BPF0] = rtems_build_name( 'B', 'P', 'F', '0' );
304 Task_name[TASKID_WFRM] = rtems_build_name( 'W', 'F', 'R', 'M' );
261 Task_name[TASKID_WFRM] = rtems_build_name( 'W', 'F', 'R', 'M' );
305 Task_name[TASKID_DUMB] = rtems_build_name( 'D', 'U', 'M', 'B' );
262 Task_name[TASKID_DUMB] = rtems_build_name( 'D', 'U', 'M', 'B' );
306 Task_name[TASKID_HOUS] = rtems_build_name( 'H', 'O', 'U', 'S' );
263 Task_name[TASKID_HOUS] = rtems_build_name( 'H', 'O', 'U', 'S' );
307
264
308 // rate monotonic period name
265 // rate monotonic period name
309 HK_name = rtems_build_name( 'H', 'O', 'U', 'S' );
266 HK_name = rtems_build_name( 'H', 'O', 'U', 'S' );
310
267
311 return 0;
268 return 0;
312 }
269 }
313
270
314 int create_all_tasks( void )
271 int create_all_tasks( void )
315 {
272 {
316 rtems_status_code status;
273 rtems_status_code status;
317
274
318 // RECV
275 // RECV
319 status = rtems_task_create(
276 status = rtems_task_create(
320 Task_name[TASKID_RECV], 200, RTEMS_MINIMUM_STACK_SIZE * 2,
277 Task_name[TASKID_RECV], 200, RTEMS_MINIMUM_STACK_SIZE * 2,
321 RTEMS_DEFAULT_MODES,
278 RTEMS_DEFAULT_MODES,
322 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_RECV]
279 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_RECV]
323 );
280 );
324 // ACTN
281 // ACTN
325 status = rtems_task_create(
282 status = rtems_task_create(
326 Task_name[TASKID_ACTN], 100, RTEMS_MINIMUM_STACK_SIZE * 2,
283 Task_name[TASKID_ACTN], 100, RTEMS_MINIMUM_STACK_SIZE * 2,
327 RTEMS_DEFAULT_MODES,
284 RTEMS_DEFAULT_MODES,
328 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_ACTN]
285 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_ACTN]
329 );
286 );
330 // SPIQ
287 // SPIQ
331 status = rtems_task_create(
288 status = rtems_task_create(
332 Task_name[TASKID_SPIQ], 5, RTEMS_MINIMUM_STACK_SIZE * 2,
289 Task_name[TASKID_SPIQ], 5, RTEMS_MINIMUM_STACK_SIZE * 2,
333 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
290 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
334 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_SPIQ]
291 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_SPIQ]
335 );
292 );
336 // SMIQ
293 // SMIQ
337 status = rtems_task_create(
294 status = rtems_task_create(
338 Task_name[TASKID_SMIQ], 10, RTEMS_MINIMUM_STACK_SIZE * 2,
295 Task_name[TASKID_SMIQ], 10, RTEMS_MINIMUM_STACK_SIZE * 2,
339 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
296 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
340 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_SMIQ]
297 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_SMIQ]
341 );
298 );
342 // STAT
299 // STAT
343 status = rtems_task_create(
300 status = rtems_task_create(
344 Task_name[TASKID_STAT], 150, RTEMS_MINIMUM_STACK_SIZE * 2,
301 Task_name[TASKID_STAT], 150, RTEMS_MINIMUM_STACK_SIZE * 2,
345 RTEMS_DEFAULT_MODES,
302 RTEMS_DEFAULT_MODES,
346 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_STAT]
303 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_STAT]
347 );
304 );
348 // AVF0
305 // AVF0
349 status = rtems_task_create(
306 status = rtems_task_create(
350 Task_name[TASKID_AVF0], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
307 Task_name[TASKID_AVF0], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
351 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
308 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
352 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_AVF0]
309 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_AVF0]
353 );
310 );
354 // BPF0
311 // BPF0
355 status = rtems_task_create(
312 status = rtems_task_create(
356 Task_name[TASKID_BPF0], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
313 Task_name[TASKID_BPF0], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
357 RTEMS_DEFAULT_MODES,
314 RTEMS_DEFAULT_MODES,
358 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_BPF0]
315 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_BPF0]
359 );
316 );
360 // WFRM
317 // WFRM
361 status = rtems_task_create(
318 status = rtems_task_create(
362 Task_name[TASKID_WFRM], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
319 Task_name[TASKID_WFRM], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
363 RTEMS_DEFAULT_MODES,
320 RTEMS_DEFAULT_MODES,
364 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_WFRM]
321 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_WFRM]
365 );
322 );
366 // DUMB
323 // DUMB
367 status = rtems_task_create(
324 status = rtems_task_create(
368 Task_name[TASKID_DUMB], 200, RTEMS_MINIMUM_STACK_SIZE * 2,
325 Task_name[TASKID_DUMB], 200, RTEMS_MINIMUM_STACK_SIZE * 2,
369 RTEMS_DEFAULT_MODES,
326 RTEMS_DEFAULT_MODES,
370 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_DUMB]
327 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_DUMB]
371 );
328 );
372 // HOUS
329 // HOUS
373 status = rtems_task_create(
330 status = rtems_task_create(
374 Task_name[TASKID_HOUS], 199, RTEMS_MINIMUM_STACK_SIZE * 2,
331 Task_name[TASKID_HOUS], 199, RTEMS_MINIMUM_STACK_SIZE * 2,
375 RTEMS_DEFAULT_MODES,
332 RTEMS_DEFAULT_MODES,
376 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_HOUS]
333 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_HOUS]
377 );
334 );
378
335
379 return 0;
336 return 0;
380 }
337 }
381
338
382 int start_all_tasks( void )
339 int start_all_tasks( void )
383 {
340 {
384 rtems_status_code status;
341 rtems_status_code status;
385
342
386 status = rtems_task_start( Task_id[TASKID_SPIQ], spiq_task, 1 );
343 status = rtems_task_start( Task_id[TASKID_SPIQ], spiq_task, 1 );
387 if (status!=RTEMS_SUCCESSFUL) {
344 if (status!=RTEMS_SUCCESSFUL) {
388 PRINTF("In INIT *** Error starting TASK_SPIQ\n")
345 PRINTF("In INIT *** Error starting TASK_SPIQ\n")
389 }
346 }
390
347
391 status = rtems_task_start( Task_id[TASKID_RECV], recv_task, 1 );
348 status = rtems_task_start( Task_id[TASKID_RECV], recv_task, 1 );
392 if (status!=RTEMS_SUCCESSFUL) {
349 if (status!=RTEMS_SUCCESSFUL) {
393 PRINTF("In INIT *** Error starting TASK_RECV\n")
350 PRINTF("In INIT *** Error starting TASK_RECV\n")
394 }
351 }
395
352
396 status = rtems_task_start( Task_id[TASKID_ACTN], actn_task, 1 );
353 status = rtems_task_start( Task_id[TASKID_ACTN], actn_task, 1 );
397 if (status!=RTEMS_SUCCESSFUL) {
354 if (status!=RTEMS_SUCCESSFUL) {
398 PRINTF("In INIT *** Error starting TASK_ACTN\n")
355 PRINTF("In INIT *** Error starting TASK_ACTN\n")
399 }
356 }
400
357
401 status = rtems_task_start( Task_id[TASKID_SMIQ], smiq_task, 1 );
358 status = rtems_task_start( Task_id[TASKID_SMIQ], smiq_task, 1 );
402 if (status!=RTEMS_SUCCESSFUL) {
359 if (status!=RTEMS_SUCCESSFUL) {
403 PRINTF("In INIT *** Error starting TASK_BPPR\n")
360 PRINTF("In INIT *** Error starting TASK_BPPR\n")
404 }
361 }
405
362
406 status = rtems_task_start( Task_id[TASKID_STAT], stat_task, 1 );
363 status = rtems_task_start( Task_id[TASKID_STAT], stat_task, 1 );
407 if (status!=RTEMS_SUCCESSFUL) {
364 if (status!=RTEMS_SUCCESSFUL) {
408 PRINTF("In INIT *** Error starting TASK_STAT\n")
365 PRINTF("In INIT *** Error starting TASK_STAT\n")
409 }
366 }
410
367
411 status = rtems_task_start( Task_id[TASKID_AVF0], avf0_task, 1 );
368 status = rtems_task_start( Task_id[TASKID_AVF0], avf0_task, 1 );
412 if (status!=RTEMS_SUCCESSFUL) {
369 if (status!=RTEMS_SUCCESSFUL) {
413 PRINTF("In INIT *** Error starting TASK_AVF0\n")
370 PRINTF("In INIT *** Error starting TASK_AVF0\n")
414 }
371 }
415
372
416 status = rtems_task_start( Task_id[TASKID_BPF0], bpf0_task, 1 );
373 status = rtems_task_start( Task_id[TASKID_BPF0], bpf0_task, 1 );
417 if (status!=RTEMS_SUCCESSFUL) {
374 if (status!=RTEMS_SUCCESSFUL) {
418 PRINTF("In INIT *** Error starting TASK_BPF0\n")
375 PRINTF("In INIT *** Error starting TASK_BPF0\n")
419 }
376 }
420
377
421 status = rtems_task_start( Task_id[TASKID_WFRM], wfrm_task, 1 );
378 status = rtems_task_start( Task_id[TASKID_WFRM], wfrm_task, 1 );
422 if (status!=RTEMS_SUCCESSFUL) {
379 if (status!=RTEMS_SUCCESSFUL) {
423 PRINTF("In INIT *** Error starting TASK_WFRM\n")
380 PRINTF("In INIT *** Error starting TASK_WFRM\n")
424 }
381 }
425
382
426 status = rtems_task_start( Task_id[TASKID_DUMB], dumb_task, 1 );
383 status = rtems_task_start( Task_id[TASKID_DUMB], dumb_task, 1 );
427 if (status!=RTEMS_SUCCESSFUL) {
384 if (status!=RTEMS_SUCCESSFUL) {
428 PRINTF("In INIT *** Error starting TASK_DUMB\n")
385 PRINTF("In INIT *** Error starting TASK_DUMB\n")
429 }
386 }
430
387
431 status = rtems_task_start( Task_id[TASKID_HOUS], hous_task, 1 );
388 status = rtems_task_start( Task_id[TASKID_HOUS], hous_task, 1 );
432 if (status!=RTEMS_SUCCESSFUL) {
389 if (status!=RTEMS_SUCCESSFUL) {
433 PRINTF("In INIT *** Error starting TASK_HOUS\n")
390 PRINTF("In INIT *** Error starting TASK_HOUS\n")
434 }
391 }
435
392
436 return 0;
393 return 0;
437 }
394 }
438
395
396 // SPACEWIRE
397
398 rtems_task spiq_task(rtems_task_argument unused)
399 {
400 rtems_event_set event_out;
401 rtems_status_code status;
402 unsigned char lfrMode;
403
404 while(true){
405 PRINTF("in SPIQ *** Waiting for SPW_LINKERR_EVENT\n")
406 rtems_event_receive(SPW_LINKERR_EVENT, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an SPW_LINKERR_EVENT
407
408 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4; // get the current mode
409
410 status = spacewire_wait_for_link();
411
412 if (status != RTEMS_SUCCESSFUL)
413 {
414 //****************
415 // STOP THE SYSTEM
416 spacewire_compute_stats_offsets();
417 stop_current_mode();
418 if (rtems_task_suspend(Task_id[TASKID_RECV])!=RTEMS_SUCCESSFUL) { // suspend RECV task
419 PRINTF("in SPIQ *** Error suspending RECV Task\n")
420 }
421 if (rtems_task_suspend(Task_id[TASKID_HOUS])!=RTEMS_SUCCESSFUL) { // suspend HOUS task
422 PRINTF("in SPIQ *** Error suspending HOUS Task\n")
423 }
424
425 //***************************
426 // RESTART THE SPACEWIRE LINK
427 spacewire_configure_link();
428
429 //*******************
430 // RESTART THE SYSTEM
431 //ioctl(fdSPW, SPACEWIRE_IOCTRL_CLR_STATISTICS); // clear statistics
432 status = rtems_task_restart( Task_id[TASKID_HOUS], 1 );
433 if (status != RTEMS_SUCCESSFUL) {
434 PRINTF1("in SPIQ *** Error restarting HOUS Task *** code %d\n", status)
435 }
436 if (rtems_task_restart(Task_id[TASKID_RECV], 1) != RTEMS_SUCCESSFUL) { // restart RECV task
437 PRINTF("in SPIQ *** Error restarting RECV Task\n")
438 }
439 //enter_mode(lfrMode, NULL); // enter the mode that was running before the SpaceWire interruption
440 }
441 }
442 }
443
439 int spacewire_configure_link( void )
444 int spacewire_configure_link( void )
440 {
445 {
441 rtems_status_code status;
446 rtems_status_code status;
442
447
443 close(fdSPW); // close the device if it is already open
448 close(fdSPW); // close the device if it is already open
444 PRINTF("OK *** in configure_spw_link *** try to open "GRSPW_DEVICE_NAME"\n")
449 PRINTF("OK *** in configure_spw_link *** try to open "GRSPW_DEVICE_NAME"\n")
445 fdSPW = open(GRSPW_DEVICE_NAME, O_RDWR); // open the device. the open call reset the hardware
450 fdSPW = open(GRSPW_DEVICE_NAME, O_RDWR); // open the device. the open call reset the hardware
446 if ( fdSPW<0 ) {
451 if ( fdSPW<0 ) {
447 PRINTF("ERR *** in configure_spw_link *** Error opening"GRSPW_DEVICE_NAME"\n")
452 PRINTF("ERR *** in configure_spw_link *** Error opening"GRSPW_DEVICE_NAME"\n")
448 }
453 }
449
454
450 while(ioctl(fdSPW, SPACEWIRE_IOCTRL_START, -1) != RTEMS_SUCCESSFUL){
455 while(ioctl(fdSPW, SPACEWIRE_IOCTRL_START, -1) != RTEMS_SUCCESSFUL){
451 PRINTF(".")
456 PRINTF(".")
452 fflush( stdout );
457 fflush( stdout );
453 close( fdSPW ); // close the device
458 close( fdSPW ); // close the device
454 fdSPW = open( GRSPW_DEVICE_NAME, O_RDWR ); // open the device. the open call reset the hardware
459 fdSPW = open( GRSPW_DEVICE_NAME, O_RDWR ); // open the device. the open call reset the hardware
455 if (fdSPW<0) {
460 if (fdSPW<0) {
456 PRINTF("ERR *** In configure_spw_link *** Error opening"GRSPW_DEVICE_NAME"\n")
461 PRINTF("ERR *** In configure_spw_link *** Error opening"GRSPW_DEVICE_NAME"\n")
457 }
462 }
458 rtems_task_wake_after(100);
463 rtems_task_wake_after(100);
459 }
464 }
460
465
461 PRINTF("OK *** In configure_spw_link *** "GRSPW_DEVICE_NAME" opened and started successfully\n")
466 PRINTF("OK *** In configure_spw_link *** "GRSPW_DEVICE_NAME" opened and started successfully\n")
462
467
463 spacewire_set_NP(1, REGS_ADDR_GRSPW); // No Port force
468 spacewire_set_NP(1, REGS_ADDR_GRSPW); // No Port force
464 spacewire_set_RE(1, REGS_ADDR_GRSPW); // the dedicated call seems to break the no port force configuration
469 spacewire_set_RE(1, REGS_ADDR_GRSPW); // the dedicated call seems to break the no port force configuration
465
470
466 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_RXBLOCK, 1); // sets the blocking mode for reception
471 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_RXBLOCK, 1); // sets the blocking mode for reception
467 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_RXBLOCK\n")
472 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_RXBLOCK\n")
468 //
473 //
469 //status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_EVENT_ID, Task_id[TASKID_SPIQ]); // sets the task ID to which an event is sent when a
474 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_EVENT_ID, Task_id[TASKID_SPIQ]); // sets the task ID to which an event is sent when a
470 //if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_EVENT_ID\n") // link-error interrupt occurs
475 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_EVENT_ID\n") // link-error interrupt occurs
471 //
476 //
472 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_DISABLE_ERR, 0); // automatic link-disabling due to link-error interrupts
477 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_DISABLE_ERR, 0); // automatic link-disabling due to link-error interrupts
473 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_DISABLE_ERR\n")
478 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_DISABLE_ERR\n")
474 //
479 //
475 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ, 0); // sets the link-error interrupt bit
480 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ, 1); // sets the link-error interrupt bit
476 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n")
481 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n")
477 //
482 //
478 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TXBLOCK, 0); // transmission blocks
483 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TXBLOCK, 0); // transmission blocks
479 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TXBLOCK\n")
484 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TXBLOCK\n")
480 //
485 //
481 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL, 0); // transmission blocks on full
486 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL, 0); // transmission blocks on full
482 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL\n")
487 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL\n")
483 //
488 //
484 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TCODE_CTRL, 0x0909);
489 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TCODE_CTRL, 0x0909);
485 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TCODE_CTRL,\n")
490 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TCODE_CTRL,\n")
486
491
487 PRINTF("OK *** in configure_spw_link *** "GRSPW_DEVICE_NAME" configured successfully\n")
492 PRINTF("OK *** in configure_spw_link *** "GRSPW_DEVICE_NAME" configured successfully\n")
488
493
489 return RTEMS_SUCCESSFUL;
494 return RTEMS_SUCCESSFUL;
490 }
495 }
491
496
492 int spacewire_wait_for_link(void)
497 int spacewire_wait_for_link(void)
493 {
498 {
494 unsigned int i;
499 unsigned int i;
495 int linkStatus;
500 int linkStatus;
496 rtems_status_code status = RTEMS_UNSATISFIED;
501 rtems_status_code status = RTEMS_UNSATISFIED;
497
502
498 for(i = 0; i< 10; i++){
503 for(i = 0; i< 10; i++){
499 PRINTF(".")
504 PRINTF(".")
500 fflush( stdout );
505 fflush( stdout );
501 ioctl(fdSPW, SPACEWIRE_IOCTRL_GET_LINK_STATUS, &linkStatus); // get the link status
506 ioctl(fdSPW, SPACEWIRE_IOCTRL_GET_LINK_STATUS, &linkStatus); // get the link status
502 PRINTF1("in spacewire_wait_for_link *** link status is: %s\n", lstates[linkStatus])
507 PRINTF1("in spacewire_wait_for_link *** link status is: %s\n", lstates[linkStatus])
503 if ( linkStatus == 5) {
508 if ( linkStatus == 5) {
504 PRINTF("in spacewire_wait_for_link *** link is running\n")
509 PRINTF("in spacewire_wait_for_link *** link is running\n")
505 status = RTEMS_SUCCESSFUL;
510 status = RTEMS_SUCCESSFUL;
506 break;
511 break;
507 }
512 }
508 rtems_task_wake_after(100);
513 rtems_task_wake_after(100);
509 }
514 }
510
515
511 return status;
516 return status;
512 }
517 }
513
518
514 void spacewire_set_NP(unsigned char val, unsigned int regAddr) // [N]o [P]ort force
519 void spacewire_set_NP(unsigned char val, unsigned int regAddr) // [N]o [P]ort force
515 {
520 {
516 unsigned int *spwptr = (unsigned int*) regAddr;
521 unsigned int *spwptr = (unsigned int*) regAddr;
517
522
518 if (val == 1) {
523 if (val == 1) {
519 *spwptr = *spwptr | 0x00100000; // [NP] set the No port force bit
524 *spwptr = *spwptr | 0x00100000; // [NP] set the No port force bit
520 }
525 }
521 if (val== 0) {
526 if (val== 0) {
522 *spwptr = *spwptr & 0xffdfffff;
527 *spwptr = *spwptr & 0xffdfffff;
523 }
528 }
524 }
529 }
525
530
526 void spacewire_set_RE(unsigned char val, unsigned int regAddr) // [R]MAP [E]nable
531 void spacewire_set_RE(unsigned char val, unsigned int regAddr) // [R]MAP [E]nable
527 {
532 {
528 unsigned int *spwptr = (unsigned int*) regAddr;
533 unsigned int *spwptr = (unsigned int*) regAddr;
529
534
530 if (val == 1)
535 if (val == 1)
531 {
536 {
532 *spwptr = *spwptr | 0x00010000; // [RE] set the RMAP Enable bit
537 *spwptr = *spwptr | 0x00010000; // [RE] set the RMAP Enable bit
533 }
538 }
534 if (val== 0)
539 if (val== 0)
535 {
540 {
536 *spwptr = *spwptr & 0xfffdffff;
541 *spwptr = *spwptr & 0xfffdffff;
537 }
542 }
538 }
543 }
539
544
540 void spacewire_compute_stats_offsets()
545 void spacewire_compute_stats_offsets()
541 {
546 {
542 spw_stats spacewire_stats_grspw;
547 spw_stats spacewire_stats_grspw;
543 rtems_status_code status;
548 rtems_status_code status;
544
549
545 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_GET_STATISTICS, &spacewire_stats_grspw );
550 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_GET_STATISTICS, &spacewire_stats_grspw );
546
551
547 spacewire_stats_backup.packets_received = spacewire_stats_grspw.packets_received
552 spacewire_stats_backup.packets_received = spacewire_stats_grspw.packets_received
548 + spacewire_stats.packets_received;
553 + spacewire_stats.packets_received;
549 spacewire_stats_backup.packets_sent = spacewire_stats_grspw.packets_sent
554 spacewire_stats_backup.packets_sent = spacewire_stats_grspw.packets_sent
550 + spacewire_stats.packets_sent;
555 + spacewire_stats.packets_sent;
551 spacewire_stats_backup.parity_err = spacewire_stats_grspw.parity_err
556 spacewire_stats_backup.parity_err = spacewire_stats_grspw.parity_err
552 + spacewire_stats.parity_err;
557 + spacewire_stats.parity_err;
553 spacewire_stats_backup.disconnect_err = spacewire_stats_grspw.disconnect_err
558 spacewire_stats_backup.disconnect_err = spacewire_stats_grspw.disconnect_err
554 + spacewire_stats.disconnect_err;
559 + spacewire_stats.disconnect_err;
555 spacewire_stats_backup.escape_err = spacewire_stats_grspw.escape_err
560 spacewire_stats_backup.escape_err = spacewire_stats_grspw.escape_err
556 + spacewire_stats.escape_err;
561 + spacewire_stats.escape_err;
557 spacewire_stats_backup.credit_err = spacewire_stats_grspw.credit_err
562 spacewire_stats_backup.credit_err = spacewire_stats_grspw.credit_err
558 + spacewire_stats.credit_err;
563 + spacewire_stats.credit_err;
559 spacewire_stats_backup.write_sync_err = spacewire_stats_grspw.write_sync_err
564 spacewire_stats_backup.write_sync_err = spacewire_stats_grspw.write_sync_err
560 + spacewire_stats.write_sync_err;
565 + spacewire_stats.write_sync_err;
561 spacewire_stats_backup.rx_rmap_header_crc_err = spacewire_stats_grspw.rx_rmap_header_crc_err
566 spacewire_stats_backup.rx_rmap_header_crc_err = spacewire_stats_grspw.rx_rmap_header_crc_err
562 + spacewire_stats.rx_rmap_header_crc_err;
567 + spacewire_stats.rx_rmap_header_crc_err;
563 spacewire_stats_backup.rx_rmap_data_crc_err = spacewire_stats_grspw.rx_rmap_data_crc_err
568 spacewire_stats_backup.rx_rmap_data_crc_err = spacewire_stats_grspw.rx_rmap_data_crc_err
564 + spacewire_stats.rx_rmap_data_crc_err;
569 + spacewire_stats.rx_rmap_data_crc_err;
565 spacewire_stats_backup.early_ep = spacewire_stats_grspw.early_ep
570 spacewire_stats_backup.early_ep = spacewire_stats_grspw.early_ep
566 + spacewire_stats.early_ep;
571 + spacewire_stats.early_ep;
567 spacewire_stats_backup.invalid_address = spacewire_stats_grspw.invalid_address
572 spacewire_stats_backup.invalid_address = spacewire_stats_grspw.invalid_address
568 + spacewire_stats.invalid_address;
573 + spacewire_stats.invalid_address;
569 spacewire_stats_backup.rx_eep_err = spacewire_stats_grspw.rx_eep_err
574 spacewire_stats_backup.rx_eep_err = spacewire_stats_grspw.rx_eep_err
570 + spacewire_stats.rx_eep_err;
575 + spacewire_stats.rx_eep_err;
571 spacewire_stats_backup.rx_truncated = spacewire_stats_grspw.rx_truncated
576 spacewire_stats_backup.rx_truncated = spacewire_stats_grspw.rx_truncated
572 + spacewire_stats.rx_truncated;
577 + spacewire_stats.rx_truncated;
573 }
578 }
574
579
575 rtems_status_code write_spw(spw_ioctl_pkt_send* spw_ioctl_send)
580 rtems_status_code write_spw(spw_ioctl_pkt_send* spw_ioctl_send)
576 {
581 {
577 rtems_status_code status;
582 rtems_status_code status;
578 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, spw_ioctl_send );
583 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, spw_ioctl_send );
579 if (status != RTEMS_SUCCESSFUL){
584 if (status != RTEMS_SUCCESSFUL){
580 //PRINTF1("ERR *** in write_spw *** write operation failed with code: %d\n", status)
585 //PRINTF1("ERR *** in write_spw *** write operation failed with code: %d\n", status)
581 }
586 }
582 return status;
587 return status;
583 }
588 }
584
589
585 void timecode_irq_handler(void *pDev, void *regs, int minor, unsigned int tc)
590 void timecode_irq_handler(void *pDev, void *regs, int minor, unsigned int tc)
586 {
591 {
587 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_1 ) != RTEMS_SUCCESSFUL) {
592 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_1 ) != RTEMS_SUCCESSFUL) {
588 printf("In timecode_irq_handler *** Error sending event to DUMB\n");
593 printf("In timecode_irq_handler *** Error sending event to DUMB\n");
589 }
594 }
590 }
595 }
@@ -1,1281 +1,1280
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[5] = {"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 };
10 };
10
11
11 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
12 unsigned char currentTC_COMPUTED_CRC[2];
13 unsigned char currentTC_COMPUTED_CRC[2];
13 unsigned int currentTC_LEN_RCV_AsUnsignedInt;
14 unsigned int currentTC_LEN_RCV_AsUnsignedInt;
14 unsigned int currentTM_length;
15 unsigned int currentTM_length;
15 unsigned char currentTC_processedFlag;
16 unsigned char currentTC_processedFlag;
16
17
17 unsigned int lookUpTableForCRC[256];
18 unsigned int lookUpTableForCRC[256];
18
19
19 //**********************
20 //**********************
20 // GENERAL USE FUNCTIONS
21 // GENERAL USE FUNCTIONS
21 unsigned int Crc_opt( unsigned char D, unsigned int Chk)
22 unsigned int Crc_opt( unsigned char D, unsigned int Chk)
22 {
23 {
23 return(((Chk << 8) & 0xff00)^lookUpTableForCRC [(((Chk >> 8)^D) & 0x00ff)]);
24 return(((Chk << 8) & 0xff00)^lookUpTableForCRC [(((Chk >> 8)^D) & 0x00ff)]);
24 }
25 }
25
26
26 void initLookUpTableForCRC( void )
27 void initLookUpTableForCRC( void )
27 {
28 {
28 unsigned int i;
29 unsigned int i;
29 unsigned int tmp;
30 unsigned int tmp;
30
31
31 for (i=0; i<256; i++)
32 for (i=0; i<256; i++)
32 {
33 {
33 tmp = 0;
34 tmp = 0;
34 if((i & 1) != 0) {
35 if((i & 1) != 0) {
35 tmp = tmp ^ 0x1021;
36 tmp = tmp ^ 0x1021;
36 }
37 }
37 if((i & 2) != 0) {
38 if((i & 2) != 0) {
38 tmp = tmp ^ 0x2042;
39 tmp = tmp ^ 0x2042;
39 }
40 }
40 if((i & 4) != 0) {
41 if((i & 4) != 0) {
41 tmp = tmp ^ 0x4084;
42 tmp = tmp ^ 0x4084;
42 }
43 }
43 if((i & 8) != 0) {
44 if((i & 8) != 0) {
44 tmp = tmp ^ 0x8108;
45 tmp = tmp ^ 0x8108;
45 }
46 }
46 if((i & 16) != 0) {
47 if((i & 16) != 0) {
47 tmp = tmp ^ 0x1231;
48 tmp = tmp ^ 0x1231;
48 }
49 }
49 if((i & 32) != 0) {
50 if((i & 32) != 0) {
50 tmp = tmp ^ 0x2462;
51 tmp = tmp ^ 0x2462;
51 }
52 }
52 if((i & 64) != 0) {
53 if((i & 64) != 0) {
53 tmp = tmp ^ 0x48c4;
54 tmp = tmp ^ 0x48c4;
54 }
55 }
55 if((i & 128) != 0) {
56 if((i & 128) != 0) {
56 tmp = tmp ^ 0x9188;
57 tmp = tmp ^ 0x9188;
57 }
58 }
58 lookUpTableForCRC[i] = tmp;
59 lookUpTableForCRC[i] = tmp;
59 }
60 }
60 }
61 }
61
62
62 void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData)
63 void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData)
63 {
64 {
64 unsigned int Chk;
65 unsigned int Chk;
65 int j;
66 int j;
66 Chk = 0xffff; // reset the syndrom to all ones
67 Chk = 0xffff; // reset the syndrom to all ones
67 for (j=0; j<sizeOfData; j++) {
68 for (j=0; j<sizeOfData; j++) {
68 Chk = Crc_opt(data[j], Chk);
69 Chk = Crc_opt(data[j], Chk);
69 }
70 }
70 crcAsTwoBytes[0] = (unsigned char) (Chk >> 8);
71 crcAsTwoBytes[0] = (unsigned char) (Chk >> 8);
71 crcAsTwoBytes[1] = (unsigned char) (Chk & 0x00ff);
72 crcAsTwoBytes[1] = (unsigned char) (Chk & 0x00ff);
72 }
73 }
73
74
74 //*********************
75 //*********************
75 // ACCEPTANCE FUNCTIONS
76 // ACCEPTANCE FUNCTIONS
76 int TC_acceptance(ccsdsTelecommandPacket_t *TC, unsigned int tc_len_recv)
77 int TC_acceptance(ccsdsTelecommandPacket_t *TC, unsigned int tc_len_recv)
77 {
78 {
78 int ret = 0;
79 int ret = 0;
79 rtems_status_code status;
80 rtems_status_code status;
80 spw_ioctl_pkt_send spw_ioctl_send;
81 spw_ioctl_pkt_send spw_ioctl_send;
81 TMHeader_t TM_header;
82 TMHeader_t TM_header;
82 unsigned int code = 0;
83 unsigned int code = 0;
83 unsigned char computed_CRC[2];
84 unsigned char computed_CRC[2];
84 char data[ PACKET_LENGTH_TC_EXE_CORRUPTED + CCSDS_TC_TM_PACKET_OFFSET - TM_HEADER_LEN ];
85 char data[ PACKET_LENGTH_TC_EXE_CORRUPTED + CCSDS_TC_TM_PACKET_OFFSET - TM_HEADER_LEN ];
85
86
86 GetCRCAsTwoBytes( (unsigned char*) TC->packetID, computed_CRC, tc_len_recv + 5 );
87 GetCRCAsTwoBytes( (unsigned char*) TC->packetID, computed_CRC, tc_len_recv + 5 );
87 code = TC_parser( TC, tc_len_recv ) ;
88 code = TC_parser( TC, tc_len_recv ) ;
88 if ( (code == ILLEGAL_APID) | (code == WRONG_LEN_PACKET) | (code == INCOR_CHECKSUM)
89 if ( (code == ILLEGAL_APID) | (code == WRONG_LEN_PACKET) | (code == INCOR_CHECKSUM)
89 | (code == ILL_TYPE) | (code == ILL_SUBTYPE) | (code == WRONG_APP_DATA) )
90 | (code == ILL_TYPE) | (code == ILL_SUBTYPE) | (code == WRONG_APP_DATA) )
90 { // generate TM_LFR_TC_EXE_CORRUPTED
91 { // generate TM_LFR_TC_EXE_CORRUPTED
91 // BUILD HEADER
92 // BUILD HEADER
92 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_CORRUPTED,
93 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_CORRUPTED,
93 &TM_header, TC->sourceID); // TC source ID
94 &TM_header, TC->sourceID); // TC source ID
94 // BUILD DATA
95 // BUILD DATA
95 TM_build_data( TC, data, SID_EXE_CORR, computed_CRC);
96 TM_build_data( TC, data, SID_EXE_CORR, computed_CRC);
96 // PREPARE TM SENDING
97 // PREPARE TM SENDING
97 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
98 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
98 spw_ioctl_send.hdr = (char*) &TM_header;
99 spw_ioctl_send.hdr = (char*) &TM_header;
99 spw_ioctl_send.dlen = 16;
100 spw_ioctl_send.dlen = 16;
100 spw_ioctl_send.data = data;
101 spw_ioctl_send.data = data;
101 // SEND PACKET
102 // SEND PACKET
102 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
103 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
103 }
104 }
104 else { // send valid TC to the action launcher
105 else { // send valid TC to the action launcher
105 status = rtems_message_queue_send( misc_id[0], TC, tc_len_recv + CCSDS_TC_TM_PACKET_OFFSET + 3);
106 status = rtems_message_queue_send( misc_id[0], TC, tc_len_recv + CCSDS_TC_TM_PACKET_OFFSET + 3);
106 ret = -1;
107 ret = -1;
107 }
108 }
108 return ret;
109 return ret;
109 }
110 }
110
111
111 unsigned char TC_parser(ccsdsTelecommandPacket_t * TMPacket, unsigned int TC_LEN_RCV)
112 unsigned char TC_parser(ccsdsTelecommandPacket_t * TMPacket, unsigned int TC_LEN_RCV)
112 {
113 {
113 unsigned char ret = 0;
114 unsigned char ret = 0;
114 unsigned char pid = 0;
115 unsigned char pid = 0;
115 unsigned char category = 0;
116 unsigned char category = 0;
116 unsigned int length = 0;
117 unsigned int length = 0;
117 unsigned char packetType = 0;
118 unsigned char packetType = 0;
118 unsigned char packetSubtype = 0;
119 unsigned char packetSubtype = 0;
119 unsigned char * CCSDSContent = NULL;
120 unsigned char * CCSDSContent = NULL;
120
121
121 // APID check *** APID on 2 bytes
122 // APID check *** APID on 2 bytes
122 pid = ((TMPacket->packetID[0] & 0x07)<<4) + ( (TMPacket->packetID[1]>>4) & 0x0f ); // PID = 11 *** 7 bits xxxxx210 7654xxxx
123 pid = ((TMPacket->packetID[0] & 0x07)<<4) + ( (TMPacket->packetID[1]>>4) & 0x0f ); // PID = 11 *** 7 bits xxxxx210 7654xxxx
123 category = (TMPacket->packetID[1] & 0x0f); // PACKET_CATEGORY = 12 *** 4 bits xxxxxxxx xxxx3210
124 category = (TMPacket->packetID[1] & 0x0f); // PACKET_CATEGORY = 12 *** 4 bits xxxxxxxx xxxx3210
124 length = (TMPacket->packetLength[0] * 256) + TMPacket->packetLength[1];
125 length = (TMPacket->packetLength[0] * 256) + TMPacket->packetLength[1];
125 packetType = TMPacket->serviceType;
126 packetType = TMPacket->serviceType;
126 packetSubtype = TMPacket->serviceSubType;
127 packetSubtype = TMPacket->serviceSubType;
127
128
128 if ( pid != CCSDS_PROCESS_ID ) {
129 if ( pid != CCSDS_PROCESS_ID ) {
129 ret = ILLEGAL_APID;
130 ret = ILLEGAL_APID;
130 }
131 }
131 else if ( category != CCSDS_PACKET_CATEGORY ) {
132 else if ( category != CCSDS_PACKET_CATEGORY ) {
132 ret = ILLEGAL_APID;
133 ret = ILLEGAL_APID;
133 }
134 }
134 else if (length != TC_LEN_RCV ) { // packet length check
135 else if (length != TC_LEN_RCV ) { // packet length check
135 ret = WRONG_LEN_PACKET; // LEN RCV != SIZE FIELD
136 ret = WRONG_LEN_PACKET; // LEN RCV != SIZE FIELD
136 }
137 }
137 else if ( length >= CCSDS_TC_PKT_MAX_SIZE ) {
138 else if ( length >= CCSDS_TC_PKT_MAX_SIZE ) {
138 ret = WRONG_LEN_PACKET; // check that the packet does not exceed the MAX size
139 ret = WRONG_LEN_PACKET; // check that the packet does not exceed the MAX size
139 }
140 }
140 else if ( packetType == TC_TYPE_GEN ){ // service type, subtype and packet length check
141 else if ( packetType == TC_TYPE_GEN ){ // service type, subtype and packet length check
141 switch(packetSubtype){ //subtype, autorized values are 3, 20, 21, 24, 27, 28, 30, 40, 50, 60, 61
142 switch(packetSubtype){ //subtype, autorized values are 3, 20, 21, 24, 27, 28, 30, 40, 50, 60, 61
142 case TC_SUBTYPE_RESET:
143 case TC_SUBTYPE_RESET:
143 if (length!=(TC_LEN_RESET-CCSDS_TC_TM_PACKET_OFFSET)) {
144 if (length!=(TC_LEN_RESET-CCSDS_TC_TM_PACKET_OFFSET)) {
144 ret = WRONG_LEN_PACKET;
145 ret = WRONG_LEN_PACKET;
145 }
146 }
146 else {
147 else {
147 ret = CCSDS_TM_VALID;
148 ret = CCSDS_TM_VALID;
148 }
149 }
149 break;
150 break;
150 case TC_SUBTYPE_LOAD_COMM:
151 case TC_SUBTYPE_LOAD_COMM:
151 if (length!=(TC_LEN_LOAD_COMM-CCSDS_TC_TM_PACKET_OFFSET)) {
152 if (length!=(TC_LEN_LOAD_COMM-CCSDS_TC_TM_PACKET_OFFSET)) {
152 ret = WRONG_LEN_PACKET;
153 ret = WRONG_LEN_PACKET;
153 }
154 }
154 else {
155 else {
155 ret = CCSDS_TM_VALID;
156 ret = CCSDS_TM_VALID;
156 }
157 }
157 break;
158 break;
158 case TC_SUBTYPE_LOAD_NORM:
159 case TC_SUBTYPE_LOAD_NORM:
159 if (length!=(TC_LEN_LOAD_NORM-CCSDS_TC_TM_PACKET_OFFSET)) {
160 if (length!=(TC_LEN_LOAD_NORM-CCSDS_TC_TM_PACKET_OFFSET)) {
160 ret = WRONG_LEN_PACKET;
161 ret = WRONG_LEN_PACKET;
161 }
162 }
162 else {
163 else {
163 ret = CCSDS_TM_VALID;
164 ret = CCSDS_TM_VALID;
164 }
165 }
165 break;
166 break;
166 case TC_SUBTYPE_LOAD_BURST:
167 case TC_SUBTYPE_LOAD_BURST:
167 if (length!=(TC_LEN_LOAD_BURST-CCSDS_TC_TM_PACKET_OFFSET)) {
168 if (length!=(TC_LEN_LOAD_BURST-CCSDS_TC_TM_PACKET_OFFSET)) {
168 ret = WRONG_LEN_PACKET;
169 ret = WRONG_LEN_PACKET;
169 }
170 }
170 else {
171 else {
171 ret = CCSDS_TM_VALID;
172 ret = CCSDS_TM_VALID;
172 }
173 }
173 break;
174 break;
174 case TC_SUBTYPE_LOAD_SBM1:
175 case TC_SUBTYPE_LOAD_SBM1:
175 if (length!=(TC_LEN_LOAD_SBM1-CCSDS_TC_TM_PACKET_OFFSET)) {
176 if (length!=(TC_LEN_LOAD_SBM1-CCSDS_TC_TM_PACKET_OFFSET)) {
176 ret = WRONG_LEN_PACKET;
177 ret = WRONG_LEN_PACKET;
177 }
178 }
178 else {
179 else {
179 ret = CCSDS_TM_VALID;
180 ret = CCSDS_TM_VALID;
180 }
181 }
181 break;
182 break;
182 case TC_SUBTYPE_LOAD_SBM2:
183 case TC_SUBTYPE_LOAD_SBM2:
183 if (length!=(TC_LEN_LOAD_SBM2-CCSDS_TC_TM_PACKET_OFFSET)) {
184 if (length!=(TC_LEN_LOAD_SBM2-CCSDS_TC_TM_PACKET_OFFSET)) {
184 ret = WRONG_LEN_PACKET;
185 ret = WRONG_LEN_PACKET;
185 }
186 }
186 else {
187 else {
187 ret = CCSDS_TM_VALID;
188 ret = CCSDS_TM_VALID;
188 }
189 }
189 break;
190 break;
190 case TC_SUBTYPE_DUMP:
191 case TC_SUBTYPE_DUMP:
191 if (length!=(TC_LEN_DUMP-CCSDS_TC_TM_PACKET_OFFSET)) {
192 if (length!=(TC_LEN_DUMP-CCSDS_TC_TM_PACKET_OFFSET)) {
192 ret = WRONG_LEN_PACKET;
193 ret = WRONG_LEN_PACKET;
193 }
194 }
194 else {
195 else {
195 ret = CCSDS_TM_VALID;
196 ret = CCSDS_TM_VALID;
196 }
197 }
197 break;
198 break;
198 case TC_SUBTYPE_ENTER:
199 case TC_SUBTYPE_ENTER:
199 if (length!=(TC_LEN_ENTER-CCSDS_TC_TM_PACKET_OFFSET)) {
200 if (length!=(TC_LEN_ENTER-CCSDS_TC_TM_PACKET_OFFSET)) {
200 ret = WRONG_LEN_PACKET;
201 ret = WRONG_LEN_PACKET;
201 }
202 }
202 else {
203 else {
203 ret = CCSDS_TM_VALID;
204 ret = CCSDS_TM_VALID;
204 }
205 }
205 break;
206 break;
206 case TC_SUBTYPE_UPDT_INFO:
207 case TC_SUBTYPE_UPDT_INFO:
207 if (length!=(TC_LEN_UPDT_INFO-CCSDS_TC_TM_PACKET_OFFSET)) {
208 if (length!=(TC_LEN_UPDT_INFO-CCSDS_TC_TM_PACKET_OFFSET)) {
208 ret = WRONG_LEN_PACKET;
209 ret = WRONG_LEN_PACKET;
209 }
210 }
210 else {
211 else {
211 ret = CCSDS_TM_VALID;
212 ret = CCSDS_TM_VALID;
212 }
213 }
213 break;
214 break;
214 case TC_SUBTYPE_EN_CAL:
215 case TC_SUBTYPE_EN_CAL:
215 if (length!=(TC_LEN_EN_CAL-CCSDS_TC_TM_PACKET_OFFSET)) {
216 if (length!=(TC_LEN_EN_CAL-CCSDS_TC_TM_PACKET_OFFSET)) {
216 ret = WRONG_LEN_PACKET;
217 ret = WRONG_LEN_PACKET;
217 }
218 }
218 else {
219 else {
219 ret = CCSDS_TM_VALID;
220 ret = CCSDS_TM_VALID;
220 }
221 }
221 break;
222 break;
222 case TC_SUBTYPE_DIS_CAL:
223 case TC_SUBTYPE_DIS_CAL:
223 if (length!=(TC_LEN_DIS_CAL-CCSDS_TC_TM_PACKET_OFFSET)) {
224 if (length!=(TC_LEN_DIS_CAL-CCSDS_TC_TM_PACKET_OFFSET)) {
224 ret = WRONG_LEN_PACKET;
225 ret = WRONG_LEN_PACKET;
225 }
226 }
226 else {
227 else {
227 ret = CCSDS_TM_VALID;
228 ret = CCSDS_TM_VALID;
228 }
229 }
229 break;
230 break;
230 default:
231 default:
231 ret = ILL_SUBTYPE;
232 ret = ILL_SUBTYPE;
232 break;
233 break;
233 }
234 }
234 }
235 }
235 else if ( packetType == TC_TYPE_TIME ){
236 else if ( packetType == TC_TYPE_TIME ){
236 if (packetSubtype!=TC_SUBTYPE_UPDT_TIME) {
237 if (packetSubtype!=TC_SUBTYPE_UPDT_TIME) {
237 ret = ILL_SUBTYPE;
238 ret = ILL_SUBTYPE;
238 }
239 }
239 else if (length!=(TC_LEN_UPDT_TIME-CCSDS_TC_TM_PACKET_OFFSET)) {
240 else if (length!=(TC_LEN_UPDT_TIME-CCSDS_TC_TM_PACKET_OFFSET)) {
240 ret = WRONG_LEN_PACKET;
241 ret = WRONG_LEN_PACKET;
241 }
242 }
242 else {
243 else {
243 ret = CCSDS_TM_VALID;
244 ret = CCSDS_TM_VALID;
244 }
245 }
245 }
246 }
246 else {
247 else {
247 ret = ILL_TYPE;
248 ret = ILL_TYPE;
248 }
249 }
249
250
250 // source ID check // Source ID not documented in the ICD
251 // source ID check // Source ID not documented in the ICD
251
252
252 // packet error control, CRC check
253 // packet error control, CRC check
253 if ( ret == CCSDS_TM_VALID ) {
254 if ( ret == CCSDS_TM_VALID ) {
254 CCSDSContent = (unsigned char*) TMPacket->packetID;
255 CCSDSContent = (unsigned char*) TMPacket->packetID;
255 GetCRCAsTwoBytes(CCSDSContent, currentTC_COMPUTED_CRC, length + CCSDS_TC_TM_PACKET_OFFSET - 2); // 2 CRC bytes removed from the calculation of the CRC
256 GetCRCAsTwoBytes(CCSDSContent, currentTC_COMPUTED_CRC, length + CCSDS_TC_TM_PACKET_OFFSET - 2); // 2 CRC bytes removed from the calculation of the CRC
256 if (currentTC_COMPUTED_CRC[0] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -2]) {
257 if (currentTC_COMPUTED_CRC[0] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -2]) {
257 ret = INCOR_CHECKSUM;
258 ret = INCOR_CHECKSUM;
258 }
259 }
259 else if (currentTC_COMPUTED_CRC[1] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -1]) {
260 else if (currentTC_COMPUTED_CRC[1] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -1]) {
260 ret = INCOR_CHECKSUM;
261 ret = INCOR_CHECKSUM;
261 }
262 }
262 else {
263 else {
263 ret = CCSDS_TM_VALID;
264 ret = CCSDS_TM_VALID;
264 }
265 }
265 }
266 }
266
267
267 return ret;
268 return ret;
268 }
269 }
269
270
270 unsigned char TM_build_header( enum TM_TYPE tm_type, unsigned int packetLength,
271 unsigned char TM_build_header( enum TM_TYPE tm_type, unsigned int packetLength,
271 TMHeader_t *TMHeader, unsigned char tc_sid)
272 TMHeader_t *TMHeader, unsigned char tc_sid)
272 {
273 {
273 TMHeader->targetLogicalAddress = CCSDS_DESTINATION_ID;
274 TMHeader->targetLogicalAddress = CCSDS_DESTINATION_ID;
274 TMHeader->protocolIdentifier = CCSDS_PROTOCOLE_ID;
275 TMHeader->protocolIdentifier = CCSDS_PROTOCOLE_ID;
275 TMHeader->reserved = 0x00;
276 TMHeader->reserved = 0x00;
276 TMHeader->userApplication = 0x00;
277 TMHeader->userApplication = 0x00;
277 TMHeader->packetID[0] = 0x0c;
278 TMHeader->packetID[0] = 0x0c;
278 TMHeader->packetSequenceControl[0] = 0xc0;
279 TMHeader->packetSequenceControl[0] = 0xc0;
279 TMHeader->packetSequenceControl[1] = 0x00;
280 TMHeader->packetSequenceControl[1] = 0x00;
280 TMHeader->packetLength[0] = (unsigned char) (packetLength>>8);
281 TMHeader->packetLength[0] = (unsigned char) (packetLength>>8);
281 TMHeader->packetLength[1] = (unsigned char) packetLength;
282 TMHeader->packetLength[1] = (unsigned char) packetLength;
282 TMHeader->spare1_pusVersion_spare2 = 0x10;
283 TMHeader->spare1_pusVersion_spare2 = 0x10;
283 TMHeader->destinationID = CCSDS_DESTINATION_ID; // default destination id
284 TMHeader->destinationID = CCSDS_DESTINATION_ID; // default destination id
284 switch (tm_type){
285 switch (tm_type){
285 case(TM_LFR_TC_EXE_OK):
286 case(TM_LFR_TC_EXE_OK):
286 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_TC_EXE;
287 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_TC_EXE;
287 TMHeader->serviceType = TM_TYPE_TC_EXE; // type
288 TMHeader->serviceType = TM_TYPE_TC_EXE; // type
288 TMHeader->serviceSubType = TM_SUBTYPE_EXE_OK; // subtype
289 TMHeader->serviceSubType = TM_SUBTYPE_EXE_OK; // subtype
289 TMHeader->destinationID = tc_sid; // destination id
290 TMHeader->destinationID = tc_sid; // destination id
290 break;
291 break;
291 case(TM_LFR_TC_EXE_ERR):
292 case(TM_LFR_TC_EXE_ERR):
292 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_TC_EXE;
293 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_TC_EXE;
293 TMHeader->serviceType = TM_TYPE_TC_EXE; // type
294 TMHeader->serviceType = TM_TYPE_TC_EXE; // type
294 TMHeader->serviceSubType = TM_SUBTYPE_EXE_NOK; // subtype
295 TMHeader->serviceSubType = TM_SUBTYPE_EXE_NOK; // subtype
295 break;
296 break;
296 case(TM_LFR_HK):
297 case(TM_LFR_HK):
297 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_HK;
298 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_HK;
298 TMHeader->serviceType = TM_TYPE_HK; // type
299 TMHeader->serviceType = TM_TYPE_HK; // type
299 TMHeader->serviceSubType = TM_SUBTYPE_HK; // subtype
300 TMHeader->serviceSubType = TM_SUBTYPE_HK; // subtype
300 break;
301 break;
301 case(TM_LFR_SCI):
302 case(TM_LFR_SCI):
302 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_SCIENCE_NORMAL;
303 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_SCIENCE_NORMAL;
303 TMHeader->serviceType = TM_TYPE_LFR_SCIENCE; // type
304 TMHeader->serviceType = TM_TYPE_LFR_SCIENCE; // type
304 TMHeader->serviceSubType = TM_SUBTYPE_SCIENCE; // subtype
305 TMHeader->serviceSubType = TM_SUBTYPE_SCIENCE; // subtype
305 break;
306 break;
306 case(TM_LFR_SCI_SBM):
307 case(TM_LFR_SCI_SBM):
307 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2;
308 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2;
308 TMHeader->serviceType = TM_TYPE_LFR_SCIENCE; // type
309 TMHeader->serviceType = TM_TYPE_LFR_SCIENCE; // type
309 TMHeader->serviceSubType = TM_SUBTYPE_SCIENCE; // subtype
310 TMHeader->serviceSubType = TM_SUBTYPE_SCIENCE; // subtype
310 break;
311 break;
311 case(TM_LFR_PAR_DUMP):
312 case(TM_LFR_PAR_DUMP):
312 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_PARAMETER_DUMP;
313 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_PARAMETER_DUMP;
313 TMHeader->serviceType = TM_TYPE_HK; // type
314 TMHeader->serviceType = TM_TYPE_HK; // type
314 TMHeader->serviceSubType = TM_SUBTYPE_HK; // subtype
315 TMHeader->serviceSubType = TM_SUBTYPE_HK; // subtype
315 break;
316 break;
316 default:
317 default:
317 return 0;
318 return 0;
318 }
319 }
319 TMHeader->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
320 TMHeader->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
320 TMHeader->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
321 TMHeader->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
321 TMHeader->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
322 TMHeader->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
322 TMHeader->time[3] = (unsigned char) (time_management_regs->coarse_time);
323 TMHeader->time[3] = (unsigned char) (time_management_regs->coarse_time);
323 TMHeader->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
324 TMHeader->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
324 TMHeader->time[5] = (unsigned char) (time_management_regs->fine_time);
325 TMHeader->time[5] = (unsigned char) (time_management_regs->fine_time);
325
326
326 return LFR_SUCCESSFUL;
327 return LFR_SUCCESSFUL;
327 }
328 }
328
329
329 unsigned char TM_build_data(ccsdsTelecommandPacket_t *TC, char* data, unsigned int SID, unsigned char *computed_CRC)
330 unsigned char TM_build_data(ccsdsTelecommandPacket_t *TC, char* data, unsigned int SID, unsigned char *computed_CRC)
330 {
331 {
331 unsigned int packetLength;
332 unsigned int packetLength;
332 packetLength = (TC->packetLength[0] * 256) + TC->packetLength[1];
333 packetLength = (TC->packetLength[0] * 256) + TC->packetLength[1];
333 switch (SID){
334 switch (SID){
334 case (SID_NOT_EXE):
335 case (SID_NOT_EXE):
335 break;
336 break;
336 case (SID_NOT_IMP):
337 case (SID_NOT_IMP):
337 data[0] = (unsigned char) (SID_NOT_IMP >> 8);
338 data[0] = (unsigned char) (SID_NOT_IMP >> 8);
338 data[1] = (unsigned char) SID_NOT_IMP;
339 data[1] = (unsigned char) SID_NOT_IMP;
339 data[2] = TC->packetID[0];
340 data[2] = TC->packetID[0];
340 data[3] = TC->packetID[1];
341 data[3] = TC->packetID[1];
341 data[4] = TC->packetSequenceControl[0];
342 data[4] = TC->packetSequenceControl[0];
342 data[5] = TC->packetSequenceControl[1];
343 data[5] = TC->packetSequenceControl[1];
343 data[6] = TC->serviceType; // type
344 data[6] = TC->serviceType; // type
344 data[7] = TC->serviceSubType; // subtype
345 data[7] = TC->serviceSubType; // subtype
345 break;
346 break;
346 case (SID_EXE_ERR):
347 case (SID_EXE_ERR):
347 break;
348 break;
348 case (SID_EXE_CORR):
349 case (SID_EXE_CORR):
349 data[0] = (unsigned char) (SID_EXE_CORR >> 8);
350 data[0] = (unsigned char) (SID_EXE_CORR >> 8);
350 data[1] = (unsigned char) SID_EXE_CORR;
351 data[1] = (unsigned char) SID_EXE_CORR;
351 data[2] = TC->packetID[0];
352 data[2] = TC->packetID[0];
352 data[3] = TC->packetID[1];
353 data[3] = TC->packetID[1];
353 data[4] = TC->packetSequenceControl[0];
354 data[4] = TC->packetSequenceControl[0];
354 data[5] = TC->packetSequenceControl[1];
355 data[5] = TC->packetSequenceControl[1];
355 data[6] = TC->serviceType; // type
356 data[6] = TC->serviceType; // type
356 data[7] = TC->serviceSubType; // subtype
357 data[7] = TC->serviceSubType; // subtype
357 data[8] = currentTC_LEN_RCV[0];
358 data[8] = currentTC_LEN_RCV[0];
358 data[9] = currentTC_LEN_RCV[1];
359 data[9] = currentTC_LEN_RCV[1];
359 data[10] = TC->packetLength[0];
360 data[10] = TC->packetLength[0];
360 data[11] = TC->packetLength[1];
361 data[11] = TC->packetLength[1];
361 data[12] = TC->dataAndCRC[packetLength];
362 data[12] = TC->dataAndCRC[packetLength];
362 data[13] = TC->dataAndCRC[packetLength+1];
363 data[13] = TC->dataAndCRC[packetLength+1];
363 data[14] = computed_CRC[0];
364 data[14] = computed_CRC[0];
364 data[15] = computed_CRC[1];
365 data[15] = computed_CRC[1];
365 break;
366 break;
366 default:
367 default:
367 return 0;
368 return 0;
368 }
369 }
369 return 1;
370 return 1;
370 }
371 }
371
372
372 int create_message_queue( void )
373 int create_message_queue( void )
373 {
374 {
374 rtems_status_code status;
375 rtems_status_code status;
375 misc_name[0] = rtems_build_name( 'Q', 'U', 'E', 'U' );
376 misc_name[0] = rtems_build_name( 'Q', 'U', 'E', 'U' );
376 status = rtems_message_queue_create( misc_name[0], ACTION_MSG_QUEUE_COUNT, CCSDS_TC_PKT_MAX_SIZE,
377 status = rtems_message_queue_create( misc_name[0], ACTION_MSG_QUEUE_COUNT, CCSDS_TC_PKT_MAX_SIZE,
377 RTEMS_FIFO | RTEMS_LOCAL, &misc_id[0] );
378 RTEMS_FIFO | RTEMS_LOCAL, &misc_id[0] );
378 if (status!=RTEMS_SUCCESSFUL) {
379 if (status!=RTEMS_SUCCESSFUL) {
379 PRINTF("in create_message_queue *** error creating message queue\n")
380 PRINTF("in create_message_queue *** error creating message queue\n")
380 }
381 }
381
382
382 return 0;
383 return 0;
383 }
384 }
384
385
385 //***********
386 //***********
386 // RTEMS TASK
387 // RTEMS TASK
387 rtems_task recv_task( rtems_task_argument unused )
388 rtems_task recv_task( rtems_task_argument unused )
388 {
389 {
389 int len = 0;
390 int len = 0;
390 unsigned int i = 0;
391 unsigned int i = 0;
391 unsigned int data_length = 0;
392 unsigned int data_length = 0;
392 ccsdsTelecommandPacket_t currentTC;
393 ccsdsTelecommandPacket_t currentTC;
393 char data[100];
394 char data[100];
394
395
395 for(i=0; i<100; i++) data[i] = 0;
396 for(i=0; i<100; i++) data[i] = 0;
396
397
397 PRINTF("in RECV *** \n")
398 PRINTF("in RECV *** \n")
398
399
399 while(1)
400 while(1)
400 {
401 {
401 len = read(fdSPW, (char*) &currentTC, CCSDS_TC_PKT_MAX_SIZE); // the call to read is blocking
402 len = read(fdSPW, (char*) &currentTC, CCSDS_TC_PKT_MAX_SIZE); // the call to read is blocking
402 if (len == -1){ // error during the read call
403 if (len == -1){ // error during the read call
403 PRINTF("In RECV *** last read call returned -1\n")
404 PRINTF("In RECV *** last read call returned -1\n")
404 //if (rtems_event_send( Task_id[TASKID_SPIQ], SPW_LINKERR_EVENT ) != RTEMS_SUCCESSFUL) {
405 //if (rtems_event_send( Task_id[TASKID_SPIQ], SPW_LINKERR_EVENT ) != RTEMS_SUCCESSFUL) {
405 // PRINTF("IN RECV *** Error: rtems_event_send SPW_LINKERR_EVENT\n")
406 // PRINTF("IN RECV *** Error: rtems_event_send SPW_LINKERR_EVENT\n")
406 //}
407 //}
407 //if (rtems_task_suspend(RTEMS_SELF) != RTEMS_SUCCESSFUL) {
408 //if (rtems_task_suspend(RTEMS_SELF) != RTEMS_SUCCESSFUL) {
408 // PRINTF("In RECV *** Error: rtems_task_suspend(RTEMS_SELF)\n")
409 // PRINTF("In RECV *** Error: rtems_task_suspend(RTEMS_SELF)\n")
409 //}
410 //}
410 }
411 }
411 else {
412 else {
412 PRINTF1("Got pck of length %d\n", len+1)
413 PRINTF1("Got pck of length %d\n", len+1)
413 if ( (len+1) < CCSDS_TC_PKT_MIN_SIZE ) {
414 if ( (len+1) < CCSDS_TC_PKT_MIN_SIZE ) {
414 PRINTF("In RECV *** packet lenght too short\n")
415 PRINTF("In RECV *** packet lenght too short\n")
415 }
416 }
416 else {
417 else {
417 currentTC_LEN_RCV[0] = 0x00;
418 currentTC_LEN_RCV[0] = 0x00;
418 currentTC_LEN_RCV[1] = (unsigned char) (len - CCSDS_TC_TM_PACKET_OFFSET - 3); // build the corresponding packet size field
419 currentTC_LEN_RCV[1] = (unsigned char) (len - CCSDS_TC_TM_PACKET_OFFSET - 3); // build the corresponding packet size field
419 currentTC_LEN_RCV_AsUnsignedInt = (unsigned int) (len - CCSDS_TC_TM_PACKET_OFFSET - 3); // => -3 is for Prot ID, Reserved and User App bytes
420 currentTC_LEN_RCV_AsUnsignedInt = (unsigned int) (len - CCSDS_TC_TM_PACKET_OFFSET - 3); // => -3 is for Prot ID, Reserved and User App bytes
420 // CHECK THE TC AND BUILD THE APPROPRIATE TM
421 // CHECK THE TC AND BUILD THE APPROPRIATE TM
421 data_length = TC_acceptance(&currentTC, currentTC_LEN_RCV_AsUnsignedInt);
422 data_length = TC_acceptance(&currentTC, currentTC_LEN_RCV_AsUnsignedInt);
422 if (data_length!=-1)
423 if (data_length!=-1)
423 {
424 {
424 }
425 }
425 }
426 }
426 }
427 }
427 }
428 }
428 }
429 }
429
430
430 rtems_task actn_task( rtems_task_argument unused )
431 rtems_task actn_task( rtems_task_argument unused )
431 {
432 {
432 int result;
433 int result;
433 rtems_status_code status; // RTEMS status code
434 rtems_status_code status; // RTEMS status code
434 ccsdsTelecommandPacket_t TC; // TC sent to the ACTN task
435 ccsdsTelecommandPacket_t TC; // TC sent to the ACTN task
435 size_t size; // size of the incoming TC packet
436 size_t size; // size of the incoming TC packet
436 unsigned char subtype; // subtype of the current TC packet
437 unsigned char subtype; // subtype of the current TC packet
437
438
438 result = LFR_SUCCESSFUL;
439 result = LFR_SUCCESSFUL;
439 subtype = 0; // subtype of the current TC packet
440 subtype = 0; // subtype of the current TC packet
440
441
441 PRINTF("in ACTN *** \n")
442 PRINTF("in ACTN *** \n")
442
443
443 while(1)
444 while(1)
444 {
445 {
445 status = rtems_message_queue_receive(misc_id[0], (char*) &TC, &size,
446 status = rtems_message_queue_receive(misc_id[0], (char*) &TC, &size,
446 RTEMS_WAIT, RTEMS_NO_TIMEOUT);
447 RTEMS_WAIT, RTEMS_NO_TIMEOUT);
447 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)
448 else
449 else
449 {
450 {
450 subtype = TC.serviceSubType;
451 subtype = TC.serviceSubType;
451 switch(subtype)
452 switch(subtype)
452 {
453 {
453 case TC_SUBTYPE_RESET:
454 case TC_SUBTYPE_RESET:
454 result = action_default( &TC );
455 result = action_default( &TC );
455 break;
456 break;
456 //
457 //
457 case TC_SUBTYPE_LOAD_COMM:
458 case TC_SUBTYPE_LOAD_COMM:
458 result = action_load_comm( &TC );
459 result = action_load_comm( &TC );
459 close_action( &TC, result );
460 close_action( &TC, result );
460 break;
461 break;
461 //
462 //
462 case TC_SUBTYPE_LOAD_NORM:
463 case TC_SUBTYPE_LOAD_NORM:
463 result = action_load_norm( &TC );
464 result = action_load_norm( &TC );
464 close_action( &TC, result );
465 close_action( &TC, result );
465 break;
466 break;
466 //
467 //
467 case TC_SUBTYPE_LOAD_BURST:
468 case TC_SUBTYPE_LOAD_BURST:
468 result = action_default( &TC );
469 result = action_default( &TC );
469 close_action( &TC, result );
470 close_action( &TC, result );
470 break;
471 break;
471 //
472 //
472 case TC_SUBTYPE_LOAD_SBM1:
473 case TC_SUBTYPE_LOAD_SBM1:
473 result = action_default( &TC );
474 result = action_default( &TC );
474 close_action( &TC, result );
475 close_action( &TC, result );
475 break;
476 break;
476 //
477 //
477 case TC_SUBTYPE_LOAD_SBM2:
478 case TC_SUBTYPE_LOAD_SBM2:
478 result = action_default( &TC );
479 result = action_default( &TC );
479 close_action( &TC, result );
480 close_action( &TC, result );
480 break;
481 break;
481 //
482 //
482 case TC_SUBTYPE_DUMP:
483 case TC_SUBTYPE_DUMP:
483 result = action_dump( &TC );
484 result = action_dump( &TC );
484 close_action( &TC, result );
485 close_action( &TC, result );
485 break;
486 break;
486 //
487 //
487 case TC_SUBTYPE_ENTER:
488 case TC_SUBTYPE_ENTER:
488 result = action_enter( &TC );
489 result = action_enter( &TC );
489 close_action( &TC, result );
490 close_action( &TC, result );
490 break;
491 break;
491 //
492 //
492 case TC_SUBTYPE_UPDT_INFO:
493 case TC_SUBTYPE_UPDT_INFO:
493 result = action_updt_info( &TC );
494 result = action_updt_info( &TC );
494 close_action( &TC, result );
495 close_action( &TC, result );
495 break;
496 break;
496 //
497 //
497 case TC_SUBTYPE_EN_CAL:
498 case TC_SUBTYPE_EN_CAL:
498 result = action_enable_calibration( &TC );
499 result = action_enable_calibration( &TC );
499 close_action( &TC, result );
500 close_action( &TC, result );
500 break;
501 break;
501 //
502 //
502 case TC_SUBTYPE_DIS_CAL:
503 case TC_SUBTYPE_DIS_CAL:
503 result = action_disable_calibration( &TC );
504 result = action_disable_calibration( &TC );
504 close_action( &TC, result );
505 close_action( &TC, result );
505 break;
506 break;
506 //
507 //
507 case TC_SUBTYPE_UPDT_TIME:
508 case TC_SUBTYPE_UPDT_TIME:
508 result = action_updt_time( &TC );
509 result = action_updt_time( &TC );
509 break;
510 break;
510 //
511 //
511 default:
512 default:
512 break;
513 break;
513 }
514 }
514 }
515 }
515 }
516 }
516 }
517 }
517
518
518 rtems_task dumb_task( rtems_task_argument unused )
519 rtems_task dumb_task( rtems_task_argument unused )
519 {
520 {
520 unsigned int i;
521 unsigned int i;
521 unsigned int intEventOut;
522 unsigned int intEventOut;
522 unsigned int coarse_time = 0;
523 unsigned int coarse_time = 0;
523 unsigned int fine_time = 0;
524 unsigned int fine_time = 0;
524 rtems_event_set event_out;
525 rtems_event_set event_out;
525
526
526 PRINTF("in DUMB *** \n")
527 PRINTF("in DUMB *** \n")
527
528
528 while(1){
529 while(1){
529 rtems_event_receive(RTEMS_EVENT_0 | RTEMS_EVENT_1 | RTEMS_EVENT_2 | RTEMS_EVENT_3 | RTEMS_EVENT_4,
530 rtems_event_receive(RTEMS_EVENT_0 | RTEMS_EVENT_1 | RTEMS_EVENT_2 | RTEMS_EVENT_3 | RTEMS_EVENT_4 | RTEMS_EVENT_5,
530 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT
531 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT
531 intEventOut = (unsigned int) event_out;
532 intEventOut = (unsigned int) event_out;
532 PRINTF1("in DUMB *** event_out %x\n", (int) event_out)
533 for ( i=0; i<32; i++)
533 for ( i=0; i<32; i++)
534 {
534 {
535 if ( ((intEventOut >> i) & 0x0001) != 0)
535 if ( ((intEventOut >> i) & 0x0001) != 0)
536 {
536 {
537 coarse_time = time_management_regs->coarse_time;
537 coarse_time = time_management_regs->coarse_time;
538 fine_time = time_management_regs->fine_time;
538 fine_time = time_management_regs->fine_time;
539 printf("in DUMB *** time = coarse: %x, fine: %x, %s\n", coarse_time, fine_time, DumbMessages[i]);
539 printf("in DUMB *** time = coarse: %x, fine: %x, %s\n", coarse_time, fine_time, DumbMessages[i]);
540 }
540 }
541 }
541 }
542 }
542 }
543 }
543 }
544
544
545 //***********
545 //***********
546 // TC ACTIONS
546 // TC ACTIONS
547
547
548 int action_default(ccsdsTelecommandPacket_t *TC)
548 int action_default(ccsdsTelecommandPacket_t *TC)
549 {
549 {
550 rtems_status_code status;
550 rtems_status_code status;
551 TMHeader_t header;
551 TMHeader_t header;
552 spw_ioctl_pkt_send spw_ioctl_send;
552 spw_ioctl_pkt_send spw_ioctl_send;
553 unsigned char data[10];
553 unsigned char data[10];
554
554
555 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED,
555 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED,
556 &header, TC->sourceID);
556 &header, TC->sourceID);
557
557
558 spw_ioctl_send.hlen = TM_HEADER_LEN + 4;
558 spw_ioctl_send.hlen = TM_HEADER_LEN + 4;
559 spw_ioctl_send.hdr = (char *) &header;
559 spw_ioctl_send.hdr = (char *) &header;
560 spw_ioctl_send.dlen = 8;
560 spw_ioctl_send.dlen = 8;
561 spw_ioctl_send.data = (char *) data;
561 spw_ioctl_send.data = (char *) data;
562 spw_ioctl_send.options = 0;
562 spw_ioctl_send.options = 0;
563
563
564 data[0] = (char) (FAILURE_CODE_NOT_IMPLEMENTED >> 8);
564 data[0] = (char) (FAILURE_CODE_NOT_IMPLEMENTED >> 8);
565 data[1] = (char) FAILURE_CODE_NOT_IMPLEMENTED;
565 data[1] = (char) FAILURE_CODE_NOT_IMPLEMENTED;
566 data[2] = TC->packetID[0];
566 data[2] = TC->packetID[0];
567 data[3] = TC->packetID[1];
567 data[3] = TC->packetID[1];
568 data[4] = TC->packetSequenceControl[0];
568 data[4] = TC->packetSequenceControl[0];
569 data[5] = TC->packetSequenceControl[1];
569 data[5] = TC->packetSequenceControl[1];
570 data[6] = TC->serviceType; // type
570 data[6] = TC->serviceType; // type
571 data[7] = TC->serviceSubType; // subtype
571 data[7] = TC->serviceSubType; // subtype
572
572
573 // SEND DATA
573 // SEND DATA
574 status = write_spw(&spw_ioctl_send);
574 status = write_spw(&spw_ioctl_send);
575 if (status != RTEMS_SUCCESSFUL)
575 if (status != RTEMS_SUCCESSFUL)
576 {
576 {
577 PRINTF("ERR *** in action_default *** send TM packet\n")
577 PRINTF("ERR *** in action_default *** send TM packet\n")
578 }
578 }
579
579
580 return LFR_DEFAULT;
580 return LFR_DEFAULT;
581 }
581 }
582
582
583 int action_enter(ccsdsTelecommandPacket_t *TC)
583 int action_enter(ccsdsTelecommandPacket_t *TC)
584 {
584 {
585 rtems_status_code status;
585 rtems_status_code status;
586 unsigned char requestedMode;
586 unsigned char requestedMode;
587
587
588 requestedMode = TC->dataAndCRC[1];
588 requestedMode = TC->dataAndCRC[1];
589
589
590 printf("try to enter mode %d\n", requestedMode);
590 printf("try to enter mode %d\n", requestedMode);
591
591
592 status = transition_validation(requestedMode);
592 status = transition_validation(requestedMode);
593
593
594 if ( status == LFR_SUCCESSFUL ) {
594 if ( status == LFR_SUCCESSFUL ) {
595 if ( (housekeeping_packet.lfr_status_word[0] & 0xf0) != LFR_MODE_STANDBY)
595 if ( (housekeeping_packet.lfr_status_word[0] & 0xf0) != LFR_MODE_STANDBY)
596 {
596 {
597 status = stop_current_mode();
597 status = stop_current_mode();
598 }
598 }
599 if (status != RTEMS_SUCCESSFUL)
599 if (status != RTEMS_SUCCESSFUL)
600 {
600 {
601 PRINTF("ERR *** in action_enter *** stop_current_mode\n")
601 PRINTF("ERR *** in action_enter *** stop_current_mode\n")
602 }
602 }
603 status = enter_mode(requestedMode, TC);
603 status = enter_mode(requestedMode, TC);
604 }
604 }
605 else
605 else
606 {
606 {
607 PRINTF("ERR *** in action_enter *** transition rejected\n")
607 PRINTF("ERR *** in action_enter *** transition rejected\n")
608 send_tm_lfr_tc_exe_not_executable( TC );
608 send_tm_lfr_tc_exe_not_executable( TC );
609 }
609 }
610
610
611 return status;
611 return status;
612 }
612 }
613
613
614 int action_load_comm(ccsdsTelecommandPacket_t *TC)
614 int action_load_comm(ccsdsTelecommandPacket_t *TC)
615 {
615 {
616 parameter_dump_packet.unused0 = TC->dataAndCRC[0];
616 parameter_dump_packet.unused0 = TC->dataAndCRC[0];
617 parameter_dump_packet.bw_sp0_sp1_r0_r1 = TC->dataAndCRC[1];
617 parameter_dump_packet.bw_sp0_sp1_r0_r1 = TC->dataAndCRC[1];
618
618
619 set_wfp_data_shaping(parameter_dump_packet.bw_sp0_sp1_r0_r1);
619 set_wfp_data_shaping(parameter_dump_packet.bw_sp0_sp1_r0_r1);
620
620
621 return LFR_SUCCESSFUL;
621 return LFR_SUCCESSFUL;
622 }
622 }
623
623
624 int action_load_norm(ccsdsTelecommandPacket_t *TC)
624 int action_load_norm(ccsdsTelecommandPacket_t *TC)
625 {
625 {
626 int result;
626 int result;
627 unsigned char lfrMode;
627 unsigned char lfrMode;
628
628
629 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
629 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
630
630
631 if ( lfrMode == LFR_MODE_NORMAL ) {
631 if ( lfrMode == LFR_MODE_NORMAL ) {
632 send_tm_lfr_tc_exe_not_executable( TC );
632 send_tm_lfr_tc_exe_not_executable( TC );
633 result = LFR_DEFAULT;
633 result = LFR_DEFAULT;
634 }
634 }
635 else {
635 else {
636 parameter_dump_packet.sy_lfr_n_swf_l[0] = TC->dataAndCRC[0];
636 parameter_dump_packet.sy_lfr_n_swf_l[0] = TC->dataAndCRC[0];
637 parameter_dump_packet.sy_lfr_n_swf_l[1] = TC->dataAndCRC[1];
637 parameter_dump_packet.sy_lfr_n_swf_l[1] = TC->dataAndCRC[1];
638
638
639 parameter_dump_packet.sy_lfr_n_swf_p[0] = TC->dataAndCRC[2];
639 parameter_dump_packet.sy_lfr_n_swf_p[0] = TC->dataAndCRC[2];
640 parameter_dump_packet.sy_lfr_n_swf_p[1] = TC->dataAndCRC[3];
640 parameter_dump_packet.sy_lfr_n_swf_p[1] = TC->dataAndCRC[3];
641
641
642 parameter_dump_packet.sy_lfr_n_asm_p[0] = TC->dataAndCRC[4];
642 parameter_dump_packet.sy_lfr_n_asm_p[0] = TC->dataAndCRC[4];
643 parameter_dump_packet.sy_lfr_n_asm_p[1] = TC->dataAndCRC[5];
643 parameter_dump_packet.sy_lfr_n_asm_p[1] = TC->dataAndCRC[5];
644
644
645 parameter_dump_packet.sy_lfr_n_bp_p0 = TC->dataAndCRC[6];
645 parameter_dump_packet.sy_lfr_n_bp_p0 = TC->dataAndCRC[6];
646 parameter_dump_packet.sy_lfr_n_bp_p1 = TC->dataAndCRC[7];
646 parameter_dump_packet.sy_lfr_n_bp_p1 = TC->dataAndCRC[7];
647
647
648 result = LFR_SUCCESSFUL;
648 result = LFR_SUCCESSFUL;
649 }
649 }
650
650
651 return result;
651 return result;
652 }
652 }
653
653
654 int action_load_burst(ccsdsTelecommandPacket_t *TC)
654 int action_load_burst(ccsdsTelecommandPacket_t *TC)
655 {
655 {
656 int result;
656 int result;
657 unsigned char lfrMode;
657 unsigned char lfrMode;
658
658
659 result = LFR_DEFAULT;
659 result = LFR_DEFAULT;
660 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
660 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
661
661
662 if ( lfrMode == LFR_MODE_BURST ) {
662 if ( lfrMode == LFR_MODE_BURST ) {
663 send_tm_lfr_tc_exe_not_executable( TC );
663 send_tm_lfr_tc_exe_not_executable( TC );
664 result = LFR_DEFAULT;
664 result = LFR_DEFAULT;
665 }
665 }
666 else {
666 else {
667 send_tm_lfr_tc_exe_not_implemented( TC );
667 send_tm_lfr_tc_exe_not_implemented( TC );
668 result = LFR_DEFAULT;
668 result = LFR_DEFAULT;
669 }
669 }
670
670
671 return result;
671 return result;
672 }
672 }
673
673
674 int action_load_sbm1(ccsdsTelecommandPacket_t *TC)
674 int action_load_sbm1(ccsdsTelecommandPacket_t *TC)
675 {
675 {
676 int result;
676 int result;
677 unsigned char lfrMode;
677 unsigned char lfrMode;
678
678
679 result = LFR_DEFAULT;
679 result = LFR_DEFAULT;
680 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
680 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
681
681
682 if ( (lfrMode == LFR_MODE_SBM1) | (lfrMode == LFR_MODE_SBM2) ) {
682 if ( (lfrMode == LFR_MODE_SBM1) | (lfrMode == LFR_MODE_SBM2) ) {
683 send_tm_lfr_tc_exe_not_executable( TC );
683 send_tm_lfr_tc_exe_not_executable( TC );
684 result = LFR_DEFAULT;
684 result = LFR_DEFAULT;
685 }
685 }
686 else {
686 else {
687 send_tm_lfr_tc_exe_not_implemented( TC );
687 send_tm_lfr_tc_exe_not_implemented( TC );
688 result = LFR_DEFAULT;
688 result = LFR_DEFAULT;
689 }
689 }
690
690
691 return result;
691 return result;
692 }
692 }
693
693
694 int action_load_sbm2(ccsdsTelecommandPacket_t *TC)
694 int action_load_sbm2(ccsdsTelecommandPacket_t *TC)
695 {
695 {
696 int result;
696 int result;
697 unsigned char lfrMode;
697 unsigned char lfrMode;
698
698
699 result = LFR_DEFAULT;
699 result = LFR_DEFAULT;
700 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
700 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
701
701
702 if ( (lfrMode == LFR_MODE_SBM1) | (lfrMode == LFR_MODE_SBM2) ) {
702 if ( (lfrMode == LFR_MODE_SBM1) | (lfrMode == LFR_MODE_SBM2) ) {
703 send_tm_lfr_tc_exe_not_executable( TC );
703 send_tm_lfr_tc_exe_not_executable( TC );
704 result = LFR_DEFAULT;
704 result = LFR_DEFAULT;
705 }
705 }
706 else {
706 else {
707 send_tm_lfr_tc_exe_not_implemented( TC );
707 send_tm_lfr_tc_exe_not_implemented( TC );
708 result = LFR_DEFAULT;
708 result = LFR_DEFAULT;
709 }
709 }
710
710
711 return result;
711 return result;
712 }
712 }
713
713
714 int action_dump(ccsdsTelecommandPacket_t *TC)
714 int action_dump(ccsdsTelecommandPacket_t *TC)
715 {
715 {
716 int status;
716 int status;
717 // send parameter dump packet
717 // send parameter dump packet
718 status = write(fdSPW, (char *) &parameter_dump_packet,
718 status = write(fdSPW, (char *) &parameter_dump_packet,
719 PACKET_LENGTH_PARAMETER_DUMP + CCSDS_TC_TM_PACKET_OFFSET + 4);
719 PACKET_LENGTH_PARAMETER_DUMP + CCSDS_TC_TM_PACKET_OFFSET + 4);
720 if (status == -1)
720 if (status == -1)
721 {
721 {
722 PRINTF1("in action_dump *** ERR sending packet, code %d", status)
722 PRINTF1("in action_dump *** ERR sending packet, code %d", status)
723 status = RTEMS_UNSATISFIED;
723 status = RTEMS_UNSATISFIED;
724 }
724 }
725 else
725 else
726 {
726 {
727 status = RTEMS_SUCCESSFUL;
727 status = RTEMS_SUCCESSFUL;
728 }
728 }
729
729
730 return status;
730 return status;
731 }
731 }
732
732
733 int action_updt_info(ccsdsTelecommandPacket_t *TC) {
733 int action_updt_info(ccsdsTelecommandPacket_t *TC) {
734 unsigned int val;
734 unsigned int val;
735 int result;
735 int result;
736 unsigned char lfrMode;
736 unsigned char lfrMode;
737
737
738 result = LFR_DEFAULT;
738 result = LFR_DEFAULT;
739 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
739 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
740
740
741 if ( (lfrMode == LFR_MODE_STANDBY) ) {
741 if ( (lfrMode == LFR_MODE_STANDBY) ) {
742 send_tm_lfr_tc_exe_not_executable( TC );
742 send_tm_lfr_tc_exe_not_executable( TC );
743 result = LFR_DEFAULT;
743 result = LFR_DEFAULT;
744 }
744 }
745 else {
745 else {
746 val = housekeeping_packet.hk_lfr_update_info_tc_cnt[0] * 256
746 val = housekeeping_packet.hk_lfr_update_info_tc_cnt[0] * 256
747 + housekeeping_packet.hk_lfr_update_info_tc_cnt[1];
747 + housekeeping_packet.hk_lfr_update_info_tc_cnt[1];
748 val++;
748 val++;
749 housekeeping_packet.hk_lfr_update_info_tc_cnt[0] = (unsigned char) (val >> 8);
749 housekeeping_packet.hk_lfr_update_info_tc_cnt[0] = (unsigned char) (val >> 8);
750 housekeeping_packet.hk_lfr_update_info_tc_cnt[1] = (unsigned char) (val);
750 housekeeping_packet.hk_lfr_update_info_tc_cnt[1] = (unsigned char) (val);
751 result = LFR_SUCCESSFUL;
751 result = LFR_SUCCESSFUL;
752 }
752 }
753
753
754 return result;
754 return result;
755 }
755 }
756
756
757 int action_enable_calibration(ccsdsTelecommandPacket_t *TC)
757 int action_enable_calibration(ccsdsTelecommandPacket_t *TC)
758 {
758 {
759 int result;
759 int result;
760 unsigned char lfrMode;
760 unsigned char lfrMode;
761
761
762 result = LFR_DEFAULT;
762 result = LFR_DEFAULT;
763 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
763 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
764
764
765 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_BURST) | (lfrMode == LFR_MODE_SBM2) ) {
765 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_BURST) | (lfrMode == LFR_MODE_SBM2) ) {
766 send_tm_lfr_tc_exe_not_executable( TC );
766 send_tm_lfr_tc_exe_not_executable( TC );
767 result = LFR_DEFAULT;
767 result = LFR_DEFAULT;
768 }
768 }
769 else {
769 else {
770 send_tm_lfr_tc_exe_not_implemented( TC );
770 send_tm_lfr_tc_exe_not_implemented( TC );
771 result = LFR_DEFAULT;
771 result = LFR_DEFAULT;
772 }
772 }
773 return result;
773 return result;
774 }
774 }
775
775
776 int action_disable_calibration(ccsdsTelecommandPacket_t *TC)
776 int action_disable_calibration(ccsdsTelecommandPacket_t *TC)
777 {
777 {
778 int result;
778 int result;
779 unsigned char lfrMode;
779 unsigned char lfrMode;
780
780
781 result = LFR_DEFAULT;
781 result = LFR_DEFAULT;
782 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
782 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
783
783
784 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_BURST) | (lfrMode == LFR_MODE_SBM2) ) {
784 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_BURST) | (lfrMode == LFR_MODE_SBM2) ) {
785 send_tm_lfr_tc_exe_not_executable( TC );
785 send_tm_lfr_tc_exe_not_executable( TC );
786 result = LFR_DEFAULT;
786 result = LFR_DEFAULT;
787 }
787 }
788 else {
788 else {
789 send_tm_lfr_tc_exe_not_implemented( TC );
789 send_tm_lfr_tc_exe_not_implemented( TC );
790 result = LFR_DEFAULT;
790 result = LFR_DEFAULT;
791 }
791 }
792 return result;
792 return result;
793 }
793 }
794
794
795 int action_updt_time(ccsdsTelecommandPacket_t *TC)
795 int action_updt_time(ccsdsTelecommandPacket_t *TC)
796 {
796 {
797 unsigned int val;
797 unsigned int val;
798
798
799 time_management_regs->coarse_time_load = (TC->dataAndCRC[0] << 24)
799 time_management_regs->coarse_time_load = (TC->dataAndCRC[0] << 24)
800 + (TC->dataAndCRC[1] << 16)
800 + (TC->dataAndCRC[1] << 16)
801 + (TC->dataAndCRC[2] << 8)
801 + (TC->dataAndCRC[2] << 8)
802 + TC->dataAndCRC[3];
802 + TC->dataAndCRC[3];
803 val = housekeeping_packet.hk_lfr_update_time_tc_cnt[0] * 256
803 val = housekeeping_packet.hk_lfr_update_time_tc_cnt[0] * 256
804 + housekeeping_packet.hk_lfr_update_time_tc_cnt[1];
804 + housekeeping_packet.hk_lfr_update_time_tc_cnt[1];
805 val++;
805 val++;
806 housekeeping_packet.hk_lfr_update_time_tc_cnt[0] = (unsigned char) (val >> 8);
806 housekeeping_packet.hk_lfr_update_time_tc_cnt[0] = (unsigned char) (val >> 8);
807 housekeeping_packet.hk_lfr_update_time_tc_cnt[1] = (unsigned char) (val);
807 housekeeping_packet.hk_lfr_update_time_tc_cnt[1] = (unsigned char) (val);
808 //time_management_regs->ctrl = time_management_regs->ctrl | 1;
808 //time_management_regs->ctrl = time_management_regs->ctrl | 1;
809
809
810 return LFR_SUCCESSFUL;
810 return LFR_SUCCESSFUL;
811 }
811 }
812
812
813 //*******************
813 //*******************
814 // ENTERING THE MODES
814 // ENTERING THE MODES
815
815
816 int transition_validation(unsigned char requestedMode)
816 int transition_validation(unsigned char requestedMode)
817 {
817 {
818 int status;
818 int status;
819 unsigned char lfrMode;
819 unsigned char lfrMode;
820
820
821 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
821 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
822
822
823 switch (requestedMode)
823 switch (requestedMode)
824 {
824 {
825 case LFR_MODE_STANDBY:
825 case LFR_MODE_STANDBY:
826 if ( (lfrMode == LFR_MODE_STANDBY) ) {
826 if ( lfrMode == LFR_MODE_STANDBY ) {
827 status = LFR_DEFAULT;
827 status = LFR_DEFAULT;
828 }
828 }
829 else
829 else
830 {
830 {
831 status = LFR_SUCCESSFUL;
831 status = LFR_SUCCESSFUL;
832 }
832 }
833 break;
833 break;
834 case LFR_MODE_NORMAL:
834 case LFR_MODE_NORMAL:
835 if ( (lfrMode == LFR_MODE_NORMAL) ) {
835 if ( lfrMode == LFR_MODE_NORMAL ) {
836 status = LFR_DEFAULT;
836 status = LFR_DEFAULT;
837 }
837 }
838 else {
838 else {
839 status = LFR_SUCCESSFUL;
839 status = LFR_SUCCESSFUL;
840 }
840 }
841 break;
841 break;
842 case LFR_MODE_BURST:
842 case LFR_MODE_BURST:
843 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_BURST)
843 if ( lfrMode == LFR_MODE_STANDBY ) {
844 | (lfrMode == LFR_MODE_SBM2) ) {
845 status = LFR_DEFAULT;
844 status = LFR_DEFAULT;
846 }
845 }
847 else {
846 else {
848 status = LFR_SUCCESSFUL;
847 status = LFR_SUCCESSFUL;
849 }
848 }
850 break;
849 break;
851 case LFR_MODE_SBM1:
850 case LFR_MODE_SBM1:
852 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_SBM1) ) {
851 if ( lfrMode == LFR_MODE_SBM1 ) {
853 status = LFR_DEFAULT;
852 status = LFR_DEFAULT;
854 }
853 }
855 else {
854 else {
856 status = LFR_SUCCESSFUL;
855 status = LFR_SUCCESSFUL;
857 }
856 }
858 break;
857 break;
859 case LFR_MODE_SBM2:
858 case LFR_MODE_SBM2:
860 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_NORMAL)
859 if ( lfrMode == LFR_MODE_SBM2 ) {
861 | (lfrMode == LFR_MODE_BURST) | (lfrMode == LFR_MODE_SBM2) ) {
862 status = LFR_DEFAULT;
860 status = LFR_DEFAULT;
863 }
861 }
864 else {
862 else {
865 status = LFR_SUCCESSFUL;
863 status = LFR_SUCCESSFUL;
866 }
864 }
867 break;
865 break;
868 default:
866 default:
869 status = LFR_DEFAULT;
867 status = LFR_DEFAULT;
870 break;
868 break;
871 }
869 }
872
870
873 return status;
871 return status;
874 }
872 }
875
873
876 int stop_current_mode()
874 int stop_current_mode()
877 {
875 {
878 rtems_status_code status;
876 rtems_status_code status;
879 unsigned char lfrMode;
877 unsigned char lfrMode;
880
878
881 status = RTEMS_SUCCESSFUL;
879 status = RTEMS_SUCCESSFUL;
882 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4; // get the current mode
880 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4; // get the current mode
883
881
884 // mask all IRQ lines related to signal processing
882 // mask all IRQ lines related to signal processing
885 LEON_Mask_interrupt( IRQ_WF ); // mask waveform interrupt (coming from the timer VHDL IP)
883 LEON_Mask_interrupt( IRQ_WF ); // mask waveform interrupt (coming from the timer VHDL IP)
886 LEON_Mask_interrupt( IRQ_SM ); // mask spectral matrices interrupt (coming from the timer VHDL IP)
884 LEON_Mask_interrupt( IRQ_SM ); // mask spectral matrices interrupt (coming from the timer VHDL IP)
887 LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER ); // mask waveform picker interrupt
885 LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER ); // mask waveform picker interrupt
888
886
889 // clear all pending interruptions related to signal processing
887 // clear all pending interruptions related to signal processing
890 LEON_Clear_interrupt( IRQ_WF ); // clear waveform interrupt (coming from the timer VHDL IP)
888 LEON_Clear_interrupt( IRQ_WF ); // clear waveform interrupt (coming from the timer VHDL IP)
891 LEON_Clear_interrupt( IRQ_SM ); // clear spectral matrices interrupt (coming from the timer VHDL IP)
889 LEON_Clear_interrupt( IRQ_SM ); // clear spectral matrices interrupt (coming from the timer VHDL IP)
892 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); // clear waveform picker interrupt
890 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); // clear waveform picker interrupt
893
891
894 // suspend several tasks
892 // suspend several tasks
895
893
896 if (lfrMode != LFR_MODE_STANDBY) {
894 if (lfrMode != LFR_MODE_STANDBY) {
897 status = rtems_task_suspend( Task_id[TASKID_AVF0] );
895 status = rtems_task_suspend( Task_id[TASKID_AVF0] );
898 if (status == RTEMS_SUCCESSFUL) {
896 if (status == RTEMS_SUCCESSFUL) {
899 status = rtems_task_suspend( Task_id[TASKID_BPF0] );
897 status = rtems_task_suspend( Task_id[TASKID_BPF0] );
900 if (status == RTEMS_SUCCESSFUL) {
898 if (status == RTEMS_SUCCESSFUL) {
901 status = rtems_task_suspend( Task_id[TASKID_WFRM] );
899 status = rtems_task_suspend( Task_id[TASKID_WFRM] );
902 }
900 }
903 }
901 }
904 }
902 }
905
903
906 if (status != RTEMS_SUCCESSFUL)
904 if (status != RTEMS_SUCCESSFUL)
907 {
905 {
908 PRINTF("ERR *** in stop_current_mode *** suspending tasks\n")
906 PRINTF("ERR *** in stop_current_mode *** suspending tasks\n")
909 }
907 }
910
908
911 // initialize the registers
909 // initialize the registers
912 waveform_picker_regs->burst_enable = 0x00; // initialize
910 waveform_picker_regs->burst_enable = 0x00; // initialize
913
911
914 return status;
912 return status;
915 }
913 }
916
914
917 int enter_mode(unsigned char mode, ccsdsTelecommandPacket_t *TC )
915 int enter_mode(unsigned char mode, ccsdsTelecommandPacket_t *TC )
918 {
916 {
919 rtems_status_code status;
917 rtems_status_code status;
920
918
921 switch(mode){
919 switch(mode){
922 case LFR_MODE_STANDBY:
920 case LFR_MODE_STANDBY:
923 status = enter_standby_mode( TC );
921 status = enter_standby_mode( TC );
924 break;
922 break;
925 case LFR_MODE_NORMAL:
923 case LFR_MODE_NORMAL:
926 status = enter_normal_mode( TC );
924 status = enter_normal_mode( TC );
927 break;
925 break;
928 case LFR_MODE_BURST:
926 case LFR_MODE_BURST:
929 status = enter_burst_mode( TC );
927 status = enter_burst_mode( TC );
930 break;
928 break;
931 case LFR_MODE_SBM1:
929 case LFR_MODE_SBM1:
932 status = enter_sbm1_mode( TC );
930 status = enter_sbm1_mode( TC );
933 break;
931 break;
934 case LFR_MODE_SBM2:
932 case LFR_MODE_SBM2:
935 status = enter_sbm2_mode( TC );
933 status = enter_sbm2_mode( TC );
936 break;
934 break;
937 default:
935 default:
938 status = RTEMS_UNSATISFIED;
936 status = RTEMS_UNSATISFIED;
939 }
937 }
940
938
941 if (status == RTEMS_SUCCESSFUL)
939 if (status == RTEMS_SUCCESSFUL)
942 {
940 {
943 housekeeping_packet.lfr_status_word[0] = (unsigned char) ((mode << 4) + 0x0d);
941 housekeeping_packet.lfr_status_word[0] = (unsigned char) ((mode << 4) + 0x0d);
944 }
942 }
945
943
946 return status;
944 return status;
947 }
945 }
948
946
949 int enter_standby_mode(ccsdsTelecommandPacket_t *TC)
947 int enter_standby_mode(ccsdsTelecommandPacket_t *TC)
950 {
948 {
951 return LFR_SUCCESSFUL;
949 return LFR_SUCCESSFUL;
952 }
950 }
953
951
954 int enter_normal_mode( ccsdsTelecommandPacket_t *TC )
952 int enter_normal_mode( ccsdsTelecommandPacket_t *TC )
955 {
953 {
956 rtems_status_code status;
954 rtems_status_code status;
957
955
958 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
956 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
959 if (status == RTEMS_SUCCESSFUL) {
957 if (status == RTEMS_SUCCESSFUL) {
960 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
958 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
961 if (status == RTEMS_SUCCESSFUL) {
959 if (status == RTEMS_SUCCESSFUL) {
962 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
960 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
963 }
961 }
964 }
962 }
965
963
966 #ifdef GSA
964 #ifdef GSA
967 LEON_Unmask_interrupt( IRQ_WF );
965 LEON_Clear_interrupt( IRQ_WF );
966 LEON_Unmask_interrupt( IRQ_WF );
968 #else
967 #else
969 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
968 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
970 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
969 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
971 waveform_picker_regs->burst_enable = 0x07;
970 waveform_picker_regs->burst_enable = 0x07;
972 waveform_picker_regs->addr_data_f1 = (int) wf_snap_f1;
971 waveform_picker_regs->addr_data_f1 = (int) wf_snap_f1;
973 waveform_picker_regs->status = 0x00;
972 waveform_picker_regs->status = 0x00;
974 #endif
973 #endif
975 LEON_Unmask_interrupt( IRQ_SM );
974 LEON_Unmask_interrupt( IRQ_SM );
976
975
977 return status;
976 return status;
978 }
977 }
979
978
980 int enter_burst_mode(ccsdsTelecommandPacket_t *TC)
979 int enter_burst_mode(ccsdsTelecommandPacket_t *TC)
981 {
980 {
982 rtems_status_code status;
981 rtems_status_code status;
983 unsigned char lfrMode;
982 unsigned char lfrMode;
984
983
985 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
984 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
986
985
987 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
986 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
988 if (status == RTEMS_SUCCESSFUL) {
987 if (status == RTEMS_SUCCESSFUL) {
989 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
988 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
990 if (status == RTEMS_SUCCESSFUL) {
989 if (status == RTEMS_SUCCESSFUL) {
991 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
990 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
992 }
991 }
993 }
992 }
994
993
995 #ifdef GSA
994 #ifdef GSA
996 #else
995 #else
997 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
996 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
998 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
997 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
999 waveform_picker_regs->addr_data_f2 = (int) wf_snap_f2;
998 waveform_picker_regs->addr_data_f2 = (int) wf_snap_f2;
1000 waveform_picker_regs->burst_enable = 0x40; // [0100 0000] burst f2, f1, f0 enable f3 f2 f1 f0
999 waveform_picker_regs->burst_enable = 0x40; // [0100 0000] burst f2, f1, f0 enable f3 f2 f1 f0
1001 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x04;
1000 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x04;
1002 waveform_picker_regs->status = 0x00;
1001 waveform_picker_regs->status = 0x00;
1003 #endif
1002 #endif
1004
1003
1005 LEON_Unmask_interrupt( IRQ_SM );
1004 LEON_Unmask_interrupt( IRQ_SM );
1006
1005
1007 return status;
1006 return status;
1008 }
1007 }
1009
1008
1010 int enter_sbm1_mode(ccsdsTelecommandPacket_t *TC)
1009 int enter_sbm1_mode(ccsdsTelecommandPacket_t *TC)
1011 {
1010 {
1012 rtems_status_code status;
1011 rtems_status_code status;
1013
1012
1014 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
1013 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
1015 if (status == RTEMS_SUCCESSFUL) {
1014 if (status == RTEMS_SUCCESSFUL) {
1016 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
1015 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
1017 if (status == RTEMS_SUCCESSFUL) {
1016 if (status == RTEMS_SUCCESSFUL) {
1018 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
1017 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
1019 }
1018 }
1020 }
1019 }
1021
1020
1022 // at the beginning of the mode, the parameter local_sbm1_nb_cwf_max has a specific value
1021 // at the beginning of the mode, the parameter local_sbm1_nb_cwf_max has a specific value
1023 param_local.local_sbm1_nb_cwf_max = 2 * (
1022 param_local.local_sbm1_nb_cwf_max = 2 * (
1024 (parameter_dump_packet.sy_lfr_n_swf_p[0] * 256)
1023 (parameter_dump_packet.sy_lfr_n_swf_p[0] * 256)
1025 + parameter_dump_packet.sy_lfr_n_swf_p[1]
1024 + parameter_dump_packet.sy_lfr_n_swf_p[1]
1026 )/ 4;
1025 )/ 4;
1027
1026
1028 #ifdef GSA
1027 #ifdef GSA
1029 #else
1028 #else
1030 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
1029 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
1031 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
1030 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
1032 waveform_picker_regs->addr_data_f1 = (int) wf_snap_f1;
1031 waveform_picker_regs->addr_data_f1 = (int) wf_snap_f1;
1033 waveform_picker_regs->burst_enable = 0x20; // [0010 0000] burst f2, f1, f0 enable f3 f2 f1 f0
1032 waveform_picker_regs->burst_enable = 0x20; // [0010 0000] burst f2, f1, f0 enable f3 f2 f1 f0
1034 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x07; // [0111] enable f3 f2 f1 f0
1033 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x07; // [0111] enable f3 f2 f1 f0
1035 waveform_picker_regs->status = 0x00;
1034 waveform_picker_regs->status = 0x00;
1036 #endif
1035 #endif
1037
1036
1038 LEON_Unmask_interrupt( IRQ_SM );
1037 LEON_Unmask_interrupt( IRQ_SM );
1039
1038
1040 return status;
1039 return status;
1041 }
1040 }
1042
1041
1043 int enter_sbm2_mode(ccsdsTelecommandPacket_t *TC)
1042 int enter_sbm2_mode(ccsdsTelecommandPacket_t *TC)
1044 {
1043 {
1045 rtems_status_code status;
1044 rtems_status_code status;
1046
1045
1047 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
1046 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
1048 if (status == RTEMS_SUCCESSFUL) {
1047 if (status == RTEMS_SUCCESSFUL) {
1049 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
1048 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
1050 if (status == RTEMS_SUCCESSFUL) {
1049 if (status == RTEMS_SUCCESSFUL) {
1051 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
1050 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
1052 }
1051 }
1053 }
1052 }
1054
1053
1055 // at the beginning of the mode, the parameter local_sbm2_nb_cwf_max has a specific value
1054 // at the beginning of the mode, the parameter local_sbm2_nb_cwf_max has a specific value
1056 param_local.local_sbm1_nb_cwf_max = (
1055 param_local.local_sbm1_nb_cwf_max = (
1057 (parameter_dump_packet.sy_lfr_n_swf_p[0] * 256)
1056 (parameter_dump_packet.sy_lfr_n_swf_p[0] * 256)
1058 + parameter_dump_packet.sy_lfr_n_swf_p[1]
1057 + parameter_dump_packet.sy_lfr_n_swf_p[1]
1059 ) / 16;
1058 ) / 16;
1060
1059
1061 #ifdef GSA
1060 #ifdef GSA
1062 #else
1061 #else
1063 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
1062 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
1064 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
1063 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
1065 waveform_picker_regs->addr_data_f2 = (int) wf_snap_f2;
1064 waveform_picker_regs->addr_data_f2 = (int) wf_snap_f2;
1066 waveform_picker_regs->burst_enable = 0x40; // [0100 0000] burst f2, f1, f0 enable f3 f2 f1 f0
1065 waveform_picker_regs->burst_enable = 0x40; // [0100 0000] burst f2, f1, f0 enable f3 f2 f1 f0
1067 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x04;
1066 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x04;
1068 waveform_picker_regs->status = 0x00;
1067 waveform_picker_regs->status = 0x00;
1069 #endif
1068 #endif
1070
1069
1071 LEON_Unmask_interrupt( IRQ_SM );
1070 LEON_Unmask_interrupt( IRQ_SM );
1072
1071
1073 return status;
1072 return status;
1074 }
1073 }
1075
1074
1076 //****************
1075 //****************
1077 // CLOSING ACTIONS
1076 // CLOSING ACTIONS
1078
1077
1079 int send_tm_lfr_tc_exe_success(ccsdsTelecommandPacket_t *TC)
1078 int send_tm_lfr_tc_exe_success(ccsdsTelecommandPacket_t *TC)
1080 {
1079 {
1081 rtems_status_code status;
1080 rtems_status_code status;
1082 TMHeader_t TM_header;
1081 TMHeader_t TM_header;
1083 char data[4];
1082 char data[4];
1084 spw_ioctl_pkt_send spw_ioctl_send;
1083 spw_ioctl_pkt_send spw_ioctl_send;
1085
1084
1086 TM_build_header( TM_LFR_TC_EXE_OK, PACKET_LENGTH_TC_EXE_SUCCESS,
1085 TM_build_header( TM_LFR_TC_EXE_OK, PACKET_LENGTH_TC_EXE_SUCCESS,
1087 &TM_header,
1086 &TM_header,
1088 TC->sourceID); // TC source ID
1087 TC->sourceID); // TC source ID
1089
1088
1090 data[0] = TC->packetID[0];
1089 data[0] = TC->packetID[0];
1091 data[1] = TC->packetID[1];
1090 data[1] = TC->packetID[1];
1092 data[2] = TC->packetSequenceControl[0];
1091 data[2] = TC->packetSequenceControl[0];
1093 data[3] = TC->packetSequenceControl[1];
1092 data[3] = TC->packetSequenceControl[1];
1094
1093
1095 // filling the structure for the spacewire transmission
1094 // filling the structure for the spacewire transmission
1096 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1095 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1097 spw_ioctl_send.hdr = (char*) &TM_header;
1096 spw_ioctl_send.hdr = (char*) &TM_header;
1098 spw_ioctl_send.dlen = 4;
1097 spw_ioctl_send.dlen = 4;
1099 spw_ioctl_send.data = data;
1098 spw_ioctl_send.data = data;
1100 spw_ioctl_send.options = 0;
1099 spw_ioctl_send.options = 0;
1101
1100
1102 // SEND DATA
1101 // SEND DATA
1103 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1102 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1104
1103
1105 return LFR_SUCCESSFUL;
1104 return LFR_SUCCESSFUL;
1106 }
1105 }
1107
1106
1108 int send_tm_lfr_tc_exe_not_executable(ccsdsTelecommandPacket_t *TC)
1107 int send_tm_lfr_tc_exe_not_executable(ccsdsTelecommandPacket_t *TC)
1109 {
1108 {
1110 rtems_status_code status;
1109 rtems_status_code status;
1111 TMHeader_t TM_header;
1110 TMHeader_t TM_header;
1112 char data[10];
1111 char data[10];
1113 spw_ioctl_pkt_send spw_ioctl_send;
1112 spw_ioctl_pkt_send spw_ioctl_send;
1114
1113
1115 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_NOT_EXECUTABLE,
1114 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_NOT_EXECUTABLE,
1116 &TM_header,
1115 &TM_header,
1117 TC->sourceID); // TC source ID
1116 TC->sourceID); // TC source ID
1118
1117
1119 data[0] = (char) (FAILURE_CODE_NOT_EXECUTABLE >> 8);
1118 data[0] = (char) (FAILURE_CODE_NOT_EXECUTABLE >> 8);
1120 data[1] = (char) FAILURE_CODE_NOT_EXECUTABLE;
1119 data[1] = (char) FAILURE_CODE_NOT_EXECUTABLE;
1121 data[2] = TC->packetID[0];
1120 data[2] = TC->packetID[0];
1122 data[3] = TC->packetID[1];
1121 data[3] = TC->packetID[1];
1123 data[4] = TC->packetSequenceControl[0];
1122 data[4] = TC->packetSequenceControl[0];
1124 data[5] = TC->packetSequenceControl[1];
1123 data[5] = TC->packetSequenceControl[1];
1125 data[6] = TC->serviceType; // type of the rejected TC
1124 data[6] = TC->serviceType; // type of the rejected TC
1126 data[7] = TC->serviceSubType; // subtype of the rejected TC
1125 data[7] = TC->serviceSubType; // subtype of the rejected TC
1127 data[8] = housekeeping_packet.lfr_status_word[0];
1126 data[8] = housekeeping_packet.lfr_status_word[0];
1128 data[6] = housekeeping_packet.lfr_status_word[1];
1127 data[6] = housekeeping_packet.lfr_status_word[1];
1129
1128
1130 // filling the structure for the spacewire transmission
1129 // filling the structure for the spacewire transmission
1131 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1130 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1132 spw_ioctl_send.hdr = (char*) &TM_header;
1131 spw_ioctl_send.hdr = (char*) &TM_header;
1133 spw_ioctl_send.dlen = 10;
1132 spw_ioctl_send.dlen = 10;
1134 spw_ioctl_send.data = data;
1133 spw_ioctl_send.data = data;
1135 spw_ioctl_send.options = 0;
1134 spw_ioctl_send.options = 0;
1136
1135
1137 // SEND DATA
1136 // SEND DATA
1138 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1137 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1139
1138
1140 return LFR_SUCCESSFUL;
1139 return LFR_SUCCESSFUL;
1141 }
1140 }
1142
1141
1143 int send_tm_lfr_tc_exe_not_implemented(ccsdsTelecommandPacket_t *TC)
1142 int send_tm_lfr_tc_exe_not_implemented(ccsdsTelecommandPacket_t *TC)
1144 {
1143 {
1145 rtems_status_code status;
1144 rtems_status_code status;
1146 TMHeader_t TM_header;
1145 TMHeader_t TM_header;
1147 char data[8];
1146 char data[8];
1148 spw_ioctl_pkt_send spw_ioctl_send;
1147 spw_ioctl_pkt_send spw_ioctl_send;
1149
1148
1150 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED,
1149 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED,
1151 &TM_header,
1150 &TM_header,
1152 TC->sourceID); // TC source ID
1151 TC->sourceID); // TC source ID
1153
1152
1154 data[0] = (char) (FAILURE_CODE_NOT_IMPLEMENTED >> 8);
1153 data[0] = (char) (FAILURE_CODE_NOT_IMPLEMENTED >> 8);
1155 data[1] = (char) FAILURE_CODE_NOT_IMPLEMENTED;
1154 data[1] = (char) FAILURE_CODE_NOT_IMPLEMENTED;
1156 data[2] = TC->packetID[0];
1155 data[2] = TC->packetID[0];
1157 data[3] = TC->packetID[1];
1156 data[3] = TC->packetID[1];
1158 data[4] = TC->packetSequenceControl[0];
1157 data[4] = TC->packetSequenceControl[0];
1159 data[5] = TC->packetSequenceControl[1];
1158 data[5] = TC->packetSequenceControl[1];
1160 data[6] = TC->serviceType; // type of the rejected TC
1159 data[6] = TC->serviceType; // type of the rejected TC
1161 data[7] = TC->serviceSubType; // subtype of the rejected TC
1160 data[7] = TC->serviceSubType; // subtype of the rejected TC
1162
1161
1163 // filling the structure for the spacewire transmission
1162 // filling the structure for the spacewire transmission
1164 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1163 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1165 spw_ioctl_send.hdr = (char*) &TM_header;
1164 spw_ioctl_send.hdr = (char*) &TM_header;
1166 spw_ioctl_send.dlen = 8;
1165 spw_ioctl_send.dlen = 8;
1167 spw_ioctl_send.data = data;
1166 spw_ioctl_send.data = data;
1168 spw_ioctl_send.options = 0;
1167 spw_ioctl_send.options = 0;
1169
1168
1170 // SEND DATA
1169 // SEND DATA
1171 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1170 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1172
1171
1173 return LFR_SUCCESSFUL;
1172 return LFR_SUCCESSFUL;
1174 }
1173 }
1175
1174
1176 int send_tm_lfr_tc_exe_error(ccsdsTelecommandPacket_t *TC)
1175 int send_tm_lfr_tc_exe_error(ccsdsTelecommandPacket_t *TC)
1177 {
1176 {
1178 rtems_status_code status;
1177 rtems_status_code status;
1179 TMHeader_t TM_header;
1178 TMHeader_t TM_header;
1180 char data[8];
1179 char data[8];
1181 spw_ioctl_pkt_send spw_ioctl_send;
1180 spw_ioctl_pkt_send spw_ioctl_send;
1182
1181
1183 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_ERROR,
1182 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_ERROR,
1184 &TM_header,
1183 &TM_header,
1185 TC->sourceID); // TC source ID
1184 TC->sourceID); // TC source ID
1186
1185
1187 data[0] = (char) (FAILURE_CODE_ERROR >> 8);
1186 data[0] = (char) (FAILURE_CODE_ERROR >> 8);
1188 data[1] = (char) FAILURE_CODE_ERROR;
1187 data[1] = (char) FAILURE_CODE_ERROR;
1189 data[2] = TC->packetID[0];
1188 data[2] = TC->packetID[0];
1190 data[3] = TC->packetID[1];
1189 data[3] = TC->packetID[1];
1191 data[4] = TC->packetSequenceControl[0];
1190 data[4] = TC->packetSequenceControl[0];
1192 data[5] = TC->packetSequenceControl[1];
1191 data[5] = TC->packetSequenceControl[1];
1193 data[6] = TC->serviceType; // type of the rejected TC
1192 data[6] = TC->serviceType; // type of the rejected TC
1194 data[7] = TC->serviceSubType; // subtype of the rejected TC
1193 data[7] = TC->serviceSubType; // subtype of the rejected TC
1195
1194
1196 // filling the structure for the spacewire transmission
1195 // filling the structure for the spacewire transmission
1197 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1196 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1198 spw_ioctl_send.hdr = (char*) &TM_header;
1197 spw_ioctl_send.hdr = (char*) &TM_header;
1199 spw_ioctl_send.dlen = 8;
1198 spw_ioctl_send.dlen = 8;
1200 spw_ioctl_send.data = data;
1199 spw_ioctl_send.data = data;
1201 spw_ioctl_send.options = 0;
1200 spw_ioctl_send.options = 0;
1202
1201
1203 // SEND DATA
1202 // SEND DATA
1204 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1203 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1205
1204
1206 return LFR_SUCCESSFUL;
1205 return LFR_SUCCESSFUL;
1207 }
1206 }
1208
1207
1209 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC)
1208 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC)
1210 {
1209 {
1211 housekeeping_packet.hk_lfr_last_exe_tc_id[0] = TC->packetID[0];
1210 housekeeping_packet.hk_lfr_last_exe_tc_id[0] = TC->packetID[0];
1212 housekeeping_packet.hk_lfr_last_exe_tc_id[1] = TC->packetID[1];
1211 housekeeping_packet.hk_lfr_last_exe_tc_id[1] = TC->packetID[1];
1213 housekeeping_packet.hk_lfr_last_exe_tc_type[0] = 0x00;
1212 housekeeping_packet.hk_lfr_last_exe_tc_type[0] = 0x00;
1214 housekeeping_packet.hk_lfr_last_exe_tc_type[1] = TC->serviceType;
1213 housekeeping_packet.hk_lfr_last_exe_tc_type[1] = TC->serviceType;
1215 housekeeping_packet.hk_lfr_last_exe_tc_subtype[0] = 0x00;
1214 housekeeping_packet.hk_lfr_last_exe_tc_subtype[0] = 0x00;
1216 housekeeping_packet.hk_lfr_last_exe_tc_subtype[1] = TC->serviceSubType;
1215 housekeeping_packet.hk_lfr_last_exe_tc_subtype[1] = TC->serviceSubType;
1217 housekeeping_packet.hk_lfr_last_exe_tc_time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
1216 housekeeping_packet.hk_lfr_last_exe_tc_time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
1218 housekeeping_packet.hk_lfr_last_exe_tc_time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
1217 housekeeping_packet.hk_lfr_last_exe_tc_time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
1219 housekeeping_packet.hk_lfr_last_exe_tc_time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
1218 housekeeping_packet.hk_lfr_last_exe_tc_time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
1220 housekeeping_packet.hk_lfr_last_exe_tc_time[3] = (unsigned char) (time_management_regs->coarse_time);
1219 housekeeping_packet.hk_lfr_last_exe_tc_time[3] = (unsigned char) (time_management_regs->coarse_time);
1221 housekeeping_packet.hk_lfr_last_exe_tc_time[4] = (unsigned char) (time_management_regs->fine_time>>8);
1220 housekeeping_packet.hk_lfr_last_exe_tc_time[4] = (unsigned char) (time_management_regs->fine_time>>8);
1222 housekeeping_packet.hk_lfr_last_exe_tc_time[5] = (unsigned char) (time_management_regs->fine_time);
1221 housekeeping_packet.hk_lfr_last_exe_tc_time[5] = (unsigned char) (time_management_regs->fine_time);
1223 }
1222 }
1224
1223
1225 void update_last_TC_rej(ccsdsTelecommandPacket_t *TC)
1224 void update_last_TC_rej(ccsdsTelecommandPacket_t *TC)
1226 {
1225 {
1227 housekeeping_packet.hk_lfr_last_rej_tc_id[0] = TC->packetID[0];
1226 housekeeping_packet.hk_lfr_last_rej_tc_id[0] = TC->packetID[0];
1228 housekeeping_packet.hk_lfr_last_rej_tc_id[1] = TC->packetID[1];
1227 housekeeping_packet.hk_lfr_last_rej_tc_id[1] = TC->packetID[1];
1229 housekeeping_packet.hk_lfr_last_rej_tc_type[0] = 0x00;
1228 housekeeping_packet.hk_lfr_last_rej_tc_type[0] = 0x00;
1230 housekeeping_packet.hk_lfr_last_rej_tc_type[1] = TC->serviceType;
1229 housekeeping_packet.hk_lfr_last_rej_tc_type[1] = TC->serviceType;
1231 housekeeping_packet.hk_lfr_last_rej_tc_subtype[0] = 0x00;
1230 housekeeping_packet.hk_lfr_last_rej_tc_subtype[0] = 0x00;
1232 housekeeping_packet.hk_lfr_last_rej_tc_subtype[1] = TC->serviceSubType;
1231 housekeeping_packet.hk_lfr_last_rej_tc_subtype[1] = TC->serviceSubType;
1233 housekeeping_packet.hk_lfr_last_rej_tc_time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
1232 housekeeping_packet.hk_lfr_last_rej_tc_time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
1234 housekeeping_packet.hk_lfr_last_rej_tc_time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
1233 housekeeping_packet.hk_lfr_last_rej_tc_time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
1235 housekeeping_packet.hk_lfr_last_rej_tc_time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
1234 housekeeping_packet.hk_lfr_last_rej_tc_time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
1236 housekeeping_packet.hk_lfr_last_rej_tc_time[3] = (unsigned char) (time_management_regs->coarse_time);
1235 housekeeping_packet.hk_lfr_last_rej_tc_time[3] = (unsigned char) (time_management_regs->coarse_time);
1237 housekeeping_packet.hk_lfr_last_rej_tc_time[4] = (unsigned char) (time_management_regs->fine_time>>8);
1236 housekeeping_packet.hk_lfr_last_rej_tc_time[4] = (unsigned char) (time_management_regs->fine_time>>8);
1238 housekeeping_packet.hk_lfr_last_rej_tc_time[5] = (unsigned char) (time_management_regs->fine_time);
1237 housekeeping_packet.hk_lfr_last_rej_tc_time[5] = (unsigned char) (time_management_regs->fine_time);
1239 }
1238 }
1240
1239
1241 void close_action(ccsdsTelecommandPacket_t *TC, int result)
1240 void close_action(ccsdsTelecommandPacket_t *TC, int result)
1242 {
1241 {
1243 unsigned int val = 0;
1242 unsigned int val = 0;
1244 if (result == LFR_SUCCESSFUL)
1243 if (result == LFR_SUCCESSFUL)
1245 {
1244 {
1246 send_tm_lfr_tc_exe_success( TC );
1245 send_tm_lfr_tc_exe_success( TC );
1247 update_last_TC_exe( TC );
1246 update_last_TC_exe( TC );
1248 val = housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[0] * 256 + housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[1];
1247 val = housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[0] * 256 + housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[1];
1249 val++;
1248 val++;
1250 housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[0] = (unsigned char) (val >> 8);
1249 housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[0] = (unsigned char) (val >> 8);
1251 housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[1] = (unsigned char) (val);
1250 housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[1] = (unsigned char) (val);
1252 }
1251 }
1253 else
1252 else
1254 {
1253 {
1255 update_last_TC_rej( TC );
1254 update_last_TC_rej( TC );
1256 val = housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[0] * 256 + housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[1];
1255 val = housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[0] * 256 + housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[1];
1257 val++;
1256 val++;
1258 housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[0] = (unsigned char) (val >> 8);
1257 housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[0] = (unsigned char) (val >> 8);
1259 housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[1] = (unsigned char) (val);
1258 housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[1] = (unsigned char) (val);
1260 }
1259 }
1261 }
1260 }
1262
1261
1263 //***************************
1262 //***************************
1264 // Interrupt Service Routines
1263 // Interrupt Service Routines
1265 rtems_isr commutation_isr1( rtems_vector_number vector )
1264 rtems_isr commutation_isr1( rtems_vector_number vector )
1266 {
1265 {
1267 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
1266 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
1268 printf("In commutation_isr1 *** Error sending event to DUMB\n");
1267 printf("In commutation_isr1 *** Error sending event to DUMB\n");
1269 }
1268 }
1270 }
1269 }
1271
1270
1272 rtems_isr commutation_isr2( rtems_vector_number vector )
1271 rtems_isr commutation_isr2( rtems_vector_number vector )
1273 {
1272 {
1274 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
1273 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
1275 printf("In commutation_isr2 *** Error sending event to DUMB\n");
1274 printf("In commutation_isr2 *** Error sending event to DUMB\n");
1276 }
1275 }
1277 }
1276 }
1278
1277
1279
1278
1280
1279
1281
1280
@@ -1,691 +1,695
1 #include <wf_handler.h>
1 #include <wf_handler.h>
2
2
3 rtems_isr waveforms_isr( rtems_vector_number vector )
3 rtems_isr waveforms_isr( rtems_vector_number vector )
4 {
4 {
5 unsigned char lfrMode;
5 unsigned char lfrMode;
6 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
6 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
7
7
8 switch(lfrMode)
8 switch(lfrMode)
9 {
9 {
10 //********
10 //********
11 // STANDBY
11 // STANDBY
12 case(LFR_MODE_STANDBY):
12 case(LFR_MODE_STANDBY):
13 break;
13 break;
14
14
15 //******
15 //******
16 // NORMAL
16 // NORMAL
17 case(LFR_MODE_NORMAL):
17 case(LFR_MODE_NORMAL):
18 #ifdef GSA
18 #ifdef GSA
19 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
19 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
20 #else
20 #else
21 if ( (waveform_picker_regs->burst_enable & 0x7) == 0x0 ){// if no channel is enable
21 if ( (waveform_picker_regs->burst_enable & 0x7) == 0x0 ){// if no channel is enable
22 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 ) != RTEMS_SUCCESSFUL) {
22 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 ) != RTEMS_SUCCESSFUL) {
23 PRINTF("in waveform_isr *** Error sending event to DUMB\n");
23 PRINTF("in waveform_isr *** Error sending event to DUMB\n");
24 }
24 }
25 }
25 }
26 else {
26 else {
27 if ( (waveform_picker_regs->status & 0x7) == 0x7 ){ // f2 f1 and f0 are full
27 if ( (waveform_picker_regs->status & 0x7) == 0x7 ){ // f2 f1 and f0 are full
28 waveform_picker_regs->burst_enable = 0x00;
28 waveform_picker_regs->burst_enable = 0x00;
29 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
29 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
30 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 ) != RTEMS_SUCCESSFUL) {
30 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 ) != RTEMS_SUCCESSFUL) {
31 PRINTF("in waveform_isr *** Error sending event to DUMB\n");
31 PRINTF("in waveform_isr *** Error sending event to DUMB\n");
32 }
32 }
33 }
33 }
34 }
34 }
35 }
35 }
36 #endif
36 #endif
37 break;
37 break;
38
38
39 //******
39 //******
40 // BURST
40 // BURST
41 case(LFR_MODE_BURST):
41 case(LFR_MODE_BURST):
42 #ifdef GSA
42 #ifdef GSA
43 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
43 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
44 #else
44 #else
45 if (waveform_picker_regs->burst_enable == 0x44) {
45 if (waveform_picker_regs->burst_enable == 0x44) {
46 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
46 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
47 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_bis);
47 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_bis);
48 }
48 }
49 else {
49 else {
50 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
50 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
51 }
51 }
52 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_BURST ) != RTEMS_SUCCESSFUL) {
52 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_BURST ) != RTEMS_SUCCESSFUL) {
53 PRINTF("in waveforms_isr *** Error sending event to WFRM\n")
53 PRINTF("in waveforms_isr *** Error sending event to WFRM\n")
54 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
54 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
55 }
55 }
56 }
56 }
57 waveform_picker_regs->status = 0x00;
57 waveform_picker_regs->status = 0x00;
58 #endif
58 #endif
59 break;
59 break;
60
60
61 //*****
61 //*****
62 // SBM1
62 // SBM1
63 case(LFR_MODE_SBM1):
63 case(LFR_MODE_SBM1):
64 #ifdef GSA
64 #ifdef GSA
65 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
65 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
66 #else
66 #else
67 if ((waveform_picker_regs->status & 0x02) == 0x02){ // check the f1 full bit
67 if ((waveform_picker_regs->status & 0x02) == 0x02){ // check the f1 full bit
68 // (1) change the receiving buffer for the waveform picker
68 // (1) change the receiving buffer for the waveform picker
69 if (waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) {
69 if (waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) {
70 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1_bis);
70 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1_bis);
71 }
71 }
72 else {
72 else {
73 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1);
73 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1);
74 }
74 }
75 // (2) send an event for the waveforms transmission
75 // (2) send an event for the waveforms transmission
76 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_SBM1 ) != RTEMS_SUCCESSFUL) {
76 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_SBM1 ) != RTEMS_SUCCESSFUL) {
77 PRINTF("in waveforms_isr *** Error sending event to WFRM\n")
77 PRINTF("in waveforms_isr *** Error sending event to WFRM\n")
78 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
78 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
79 }
79 }
80 waveform_picker_regs->status = waveform_picker_regs->status & 0x000d; // reset the f1 full bit to 0
80 waveform_picker_regs->status = waveform_picker_regs->status & 0x000d; // reset the f1 full bit to 0
81 }
81 }
82 if ( ( (waveform_picker_regs->status & 0x05) == 0x05 ) ) { // [0101] f3 f2 f1 f0, check the f2 and f0 full bit
82 if ( ( (waveform_picker_regs->status & 0x05) == 0x05 ) ) { // [0101] f3 f2 f1 f0, check the f2 and f0 full bit
83 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
83 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
84 PRINTF("in waveforms_isr *** Error sending event to WFRM\n")
84 PRINTF("in waveforms_isr *** Error sending event to WFRM\n")
85 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
85 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
86 }
86 }
87 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x05; // [0101] // enable f2 and f0
87 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x05; // [0101] // enable f2 and f0
88 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffaaa; // set to 0 the bits related to f2 and f0
88 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffaaa; // set to 0 the bits related to f2 and f0
89 }
89 }
90 #endif
90 #endif
91 break;
91 break;
92
92
93 //*****
93 //*****
94 // SBM2
94 // SBM2
95 case(LFR_MODE_SBM2):
95 case(LFR_MODE_SBM2):
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 & 0x04) == 0x04){ // check the f2 full bit
99 if ((waveform_picker_regs->status & 0x04) == 0x04){ // check the f2 full bit
100 // (1) change the receiving buffer for the waveform picker
100 // (1) change the receiving buffer for the waveform picker
101 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
101 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
102 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_bis);
102 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_bis);
103 }
103 }
104 else {
104 else {
105 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
105 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
106 }
106 }
107 // (2) send an event for the waveforms transmission
107 // (2) send an event for the waveforms transmission
108 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_SBM2 ) != RTEMS_SUCCESSFUL) {
108 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_SBM2 ) != RTEMS_SUCCESSFUL) {
109 PRINTF("in waveforms_isr *** Error sending event to WFRM\n")
109 PRINTF("in waveforms_isr *** Error sending event to WFRM\n")
110 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
110 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
111 }
111 }
112 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffbbb; // [1011]
112 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffbbb; // [1011]
113 }
113 }
114 if ( ( (waveform_picker_regs->status & 0x03) == 0x03 ) ) { // [0011] f3 f2 f1 f0, check the f2 and f0 full bit
114 if ( ( (waveform_picker_regs->status & 0x03) == 0x03 ) ) { // [0011] f3 f2 f1 f0, check the f2 and f0 full bit
115 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
115 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
116 PRINTF("in waveforms_isr *** Error sending event to WFRM\n")
116 PRINTF("in waveforms_isr *** Error sending event to WFRM\n")
117 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
117 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
118 }
118 }
119 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x03; // [0011] // enable f2 and f0
119 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x03; // [0011] // enable f2 and f0
120 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffccc; // set to 0 the bits related to f1 and f0
120 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffccc; // set to 0 the bits related to f1 and f0
121 }
121 }
122 #endif
122 #endif
123 break;
123 break;
124
124
125 //********
125 //********
126 // DEFAULT
126 // DEFAULT
127 default:
127 default:
128 break;
128 break;
129 }
129 }
130 }
130 }
131
131
132 rtems_isr waveforms_simulator_isr( rtems_vector_number vector )
132 rtems_isr waveforms_simulator_isr( rtems_vector_number vector )
133 {
133 {
134 unsigned char lfrMode;
134 unsigned char lfrMode;
135 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
135 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
136
136
137 switch(lfrMode)
137 switch(lfrMode)
138 {
138 {
139 //********
139 //********
140 // STANDBY
140 // STANDBY
141 case(LFR_MODE_STANDBY):
141 case(LFR_MODE_STANDBY):
142 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_5 );
142 break;
143 break;
143
144
144 //******
145 //******
145 // NORMAL
146 // NORMAL
146 case(LFR_MODE_NORMAL):
147 case(LFR_MODE_NORMAL):
148 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_5 );
147 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
149 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
148 PRINTF("ERR *** in waveforms_isr *** error sending event to WFRM\n")
150 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_5 );
149 }
151 }
150 break;
152 break;
151
153
152 //******
154 //******
153 // BURST
155 // BURST
154 case(LFR_MODE_BURST):
156 case(LFR_MODE_BURST):
155 break;
157 break;
156
158
157 //*****
159 //*****
158 // SBM1
160 // SBM1
159 case(LFR_MODE_SBM1):
161 case(LFR_MODE_SBM1):
160 break;
162 break;
161
163
162 //*****
164 //*****
163 // SBM2
165 // SBM2
164 case(LFR_MODE_SBM2):
166 case(LFR_MODE_SBM2):
165 break;
167 break;
166
168
167 //********
169 //********
168 // DEFAULT
170 // DEFAULT
169 default:
171 default:
170 break;
172 break;
171 }
173 }
172 }
174 }
173
175
174 rtems_task wfrm_task(rtems_task_argument argument) //used with the waveform picker VHDL IP
176 rtems_task wfrm_task(rtems_task_argument argument) //used with the waveform picker VHDL IP
175 {
177 {
176 unsigned int i;
178 unsigned int i;
177 unsigned int intEventOut;
179 unsigned int intEventOut;
178 spw_ioctl_pkt_send spw_ioctl_send_SWF;
180 spw_ioctl_pkt_send spw_ioctl_send_SWF;
179 spw_ioctl_pkt_send spw_ioctl_send_CWF;
181 spw_ioctl_pkt_send spw_ioctl_send_CWF;
180 rtems_event_set event_out;
182 rtems_event_set event_out;
181 Header_TM_LFR_SCIENCE_SWF_t headerSWF;
183 Header_TM_LFR_SCIENCE_SWF_t headerSWF;
182 Header_TM_LFR_SCIENCE_CWF_t headerCWF;
184 Header_TM_LFR_SCIENCE_CWF_t headerCWF;
183
185
184 init_header_snapshot_wf( &headerSWF );
186 init_header_snapshot_wf( &headerSWF );
185 init_header_continuous_wf( &headerCWF );
187 init_header_continuous_wf( &headerCWF );
186
188
187 // BUILD THE PACKET HEADERS
189 // BUILD THE PACKET HEADERS
188 spw_ioctl_send_SWF.hlen = TM_HEADER_LEN + 4 + 12; // + 4 is for the protocole extra header, + 12 is for the auxiliary header
190 spw_ioctl_send_SWF.hlen = TM_HEADER_LEN + 4 + 12; // + 4 is for the protocole extra header, + 12 is for the auxiliary header
189 spw_ioctl_send_SWF.hdr = (char*) &headerSWF;
191 spw_ioctl_send_SWF.hdr = (char*) &headerSWF;
190 spw_ioctl_send_SWF.options = 0;
192 spw_ioctl_send_SWF.options = 0;
191
193
192 spw_ioctl_send_CWF.hlen = TM_HEADER_LEN + 4 + 10; // + 4 is for the protocole extra header, + 10 is for the auxiliary header
194 spw_ioctl_send_CWF.hlen = TM_HEADER_LEN + 4 + 10; // + 4 is for the protocole extra header, + 10 is for the auxiliary header
193 spw_ioctl_send_CWF.hdr = (char*) &headerCWF;
195 spw_ioctl_send_CWF.hdr = (char*) &headerCWF;
194 spw_ioctl_send_CWF.options = 0;
196 spw_ioctl_send_CWF.options = 0;
195
197
196 init_waveforms();
198 init_waveforms();
197
199
198 PRINTF("in WFRM ***\n")
200 PRINTF("in WFRM ***\n")
199
201
200 while(1){
202 while(1){
201 // wait for an RTEMS_EVENT
203 // wait for an RTEMS_EVENT
202 rtems_event_receive(RTEMS_EVENT_0 | RTEMS_EVENT_1 | RTEMS_EVENT_2 | RTEMS_EVENT_3 | RTEMS_EVENT_4,
204 rtems_event_receive(RTEMS_EVENT_0 | RTEMS_EVENT_1 | RTEMS_EVENT_2 | RTEMS_EVENT_3 | RTEMS_EVENT_4,
203 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
205 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
204 intEventOut = (unsigned int) event_out;
206 intEventOut = (unsigned int) event_out;
205 for (i = 0; i< 5; i++) {
207 for (i = 0; i< 5; i++) {
206 if ( ( (intEventOut >> i) & 0x0001) != 0 ) {
208 if ( ( (intEventOut >> i) & 0x0001) != 0 ) {
207 switch(i) {
209 switch(i) {
208 case(LFR_MODE_NORMAL):
210 case(LFR_MODE_NORMAL):
209 send_waveform_norm( &headerSWF, &spw_ioctl_send_SWF);
211 send_waveform_norm( &headerSWF, &spw_ioctl_send_SWF);
210 break;
212 break;
211 case(LFR_MODE_BURST):
213 case(LFR_MODE_BURST):
212 send_waveform_burst( &headerCWF, &spw_ioctl_send_CWF);
214 send_waveform_burst( &headerCWF, &spw_ioctl_send_CWF);
213 break;
215 break;
214 case(LFR_MODE_SBM1):
216 case(LFR_MODE_SBM1):
215 send_waveform_sbm1( &headerCWF, &spw_ioctl_send_CWF);
217 send_waveform_sbm1( &headerCWF, &spw_ioctl_send_CWF);
216 param_local.local_sbm1_nb_cwf_sent ++;
218 param_local.local_sbm1_nb_cwf_sent ++;
217 if ( param_local.local_sbm1_nb_cwf_sent == (param_local.local_sbm1_nb_cwf_max-1) ) {
219 if ( param_local.local_sbm1_nb_cwf_sent == (param_local.local_sbm1_nb_cwf_max-1) ) {
218 // send the f1 buffer as a NORM snapshot
220 // send the f1 buffer as a NORM snapshot
219 if (waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) {
221 if (waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) {
220 send_waveform_SWF( &headerSWF, wf_snap_f1_bis, SID_NORM_SWF_F1, &spw_ioctl_send_SWF );
222 send_waveform_SWF( &headerSWF, wf_snap_f1_bis, SID_NORM_SWF_F1, &spw_ioctl_send_SWF );
221 }
223 }
222 else {
224 else {
223 send_waveform_SWF( &headerSWF, wf_snap_f1, SID_NORM_SWF_F1, &spw_ioctl_send_SWF );
225 send_waveform_SWF( &headerSWF, wf_snap_f1, SID_NORM_SWF_F1, &spw_ioctl_send_SWF );
224 }
226 }
225 }
227 }
226 break;
228 break;
227 case(LFR_MODE_SBM2):
229 case(LFR_MODE_SBM2):
228 send_waveform_sbm2( &headerCWF, &spw_ioctl_send_CWF);
230 send_waveform_sbm2( &headerCWF, &spw_ioctl_send_CWF);
229 param_local.local_sbm2_nb_cwf_sent ++;
231 param_local.local_sbm2_nb_cwf_sent ++;
230 if ( param_local.local_sbm2_nb_cwf_sent == (param_local.local_sbm2_nb_cwf_max-1) ) {
232 if ( param_local.local_sbm2_nb_cwf_sent == (param_local.local_sbm2_nb_cwf_max-1) ) {
231 // send the f2 buffer as a NORM snapshot
233 // send the f2 buffer as a NORM snapshot
232 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
234 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
233 send_waveform_SWF( &headerSWF, wf_snap_f2_bis, SID_NORM_SWF_F2, &spw_ioctl_send_SWF );
235 send_waveform_SWF( &headerSWF, wf_snap_f2_bis, SID_NORM_SWF_F2, &spw_ioctl_send_SWF );
234 }
236 }
235 else {
237 else {
236 send_waveform_SWF( &headerSWF, wf_snap_f2, SID_NORM_SWF_F2, &spw_ioctl_send_SWF );
238 send_waveform_SWF( &headerSWF, wf_snap_f2, SID_NORM_SWF_F2, &spw_ioctl_send_SWF );
237 }
239 }
238 }
240 }
239 break;
241 break;
240 default:
242 default:
241 break;
243 break;
242 }
244 }
243 }
245 }
244 }
246 }
245 }
247 }
246 }
248 }
247
249
248 //******************
250 //******************
249 // general functions
251 // general functions
250 void init_waveforms( void )
252 void init_waveforms( void )
251 {
253 {
252 int i = 0;
254 int i = 0;
253
255
254 for (i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++)
256 for (i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++)
255 {
257 {
256 //***
258 //***
257 // F0
259 // F0
258 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x88887777; //
260 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x88887777; //
259 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x22221111; //
261 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x22221111; //
260 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0x44443333; //
262 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0x44443333; //
261
263
262 //***
264 //***
263 // F1
265 // F1
264 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x22221111;
266 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x22221111;
265 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x44443333;
267 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x44443333;
266 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000;
268 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000;
267
269
268 //***
270 //***
269 // F2
271 // F2
270 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x44443333;
272 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x44443333;
271 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x22221111;
273 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x22221111;
272 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000;
274 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000;
273
275
274 //***
276 //***
275 // F3
277 // F3
276 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 0 ] = val1;
278 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 0 ] = val1;
277 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 1 ] = val2;
279 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 1 ] = val2;
278 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 2 ] = 0xaaaa0000;
280 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 2 ] = 0xaaaa0000;
279 }
281 }
280 }
282 }
281
283
282 void init_header_snapshot_wf( Header_TM_LFR_SCIENCE_SWF_t *header)
284 void init_header_snapshot_wf( Header_TM_LFR_SCIENCE_SWF_t *header)
283 {
285 {
284 header->targetLogicalAddress = CCSDS_DESTINATION_ID;
286 header->targetLogicalAddress = CCSDS_DESTINATION_ID;
285 header->protocolIdentifier = CCSDS_PROTOCOLE_ID;
287 header->protocolIdentifier = CCSDS_PROTOCOLE_ID;
286 header->reserved = 0x00;
288 header->reserved = 0x00;
287 header->userApplication = CCSDS_USER_APP;
289 header->userApplication = CCSDS_USER_APP;
288 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL >> 8);
290 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL >> 8);
289 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL);
291 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL);
290 header->packetSequenceControl[0] = 0xc0;
292 header->packetSequenceControl[0] = 0xc0;
291 header->packetSequenceControl[1] = 0x00;
293 header->packetSequenceControl[1] = 0x00;
292 header->packetLength[0] = 0x00;
294 header->packetLength[0] = 0x00;
293 header->packetLength[1] = 0x00;
295 header->packetLength[1] = 0x00;
294 // DATA FIELD HEADER
296 // DATA FIELD HEADER
295 header->spare1_pusVersion_spare2 = 0x10;
297 header->spare1_pusVersion_spare2 = 0x10;
296 header->serviceType = TM_TYPE_LFR_SCIENCE; // service type
298 header->serviceType = TM_TYPE_LFR_SCIENCE; // service type
297 header->serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
299 header->serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
298 header->destinationID = TM_DESTINATION_ID_GROUND;
300 header->destinationID = TM_DESTINATION_ID_GROUND;
299 // AUXILIARY DATA HEADER
301 // AUXILIARY DATA HEADER
300 header->sid = 0x00;
302 header->sid = 0x00;
301 header->hkBIA = 0x1f;
303 header->hkBIA = 0x1f;
302 header->pktCnt = 0x07; // PKT_CNT
304 header->pktCnt = 0x07; // PKT_CNT
303 header->pktNr = 0x00; // PKT_NR
305 header->pktNr = 0x00; // PKT_NR
304 header->time[0] = 0x00;
306 header->time[0] = 0x00;
305 header->time[0] = 0x00;
307 header->time[0] = 0x00;
306 header->time[0] = 0x00;
308 header->time[0] = 0x00;
307 header->time[0] = 0x00;
309 header->time[0] = 0x00;
308 header->time[0] = 0x00;
310 header->time[0] = 0x00;
309 header->time[0] = 0x00;
311 header->time[0] = 0x00;
310 header->blkNr[0] = 0x00; // BLK_NR MSB
312 header->blkNr[0] = 0x00; // BLK_NR MSB
311 header->blkNr[1] = 0x00; // BLK_NR LSB
313 header->blkNr[1] = 0x00; // BLK_NR LSB
312 }
314 }
313
315
314 void init_header_continuous_wf( Header_TM_LFR_SCIENCE_CWF_t *header)
316 void init_header_continuous_wf( Header_TM_LFR_SCIENCE_CWF_t *header)
315 {
317 {
316 header->targetLogicalAddress = CCSDS_DESTINATION_ID;
318 header->targetLogicalAddress = CCSDS_DESTINATION_ID;
317 header->protocolIdentifier = CCSDS_PROTOCOLE_ID;
319 header->protocolIdentifier = CCSDS_PROTOCOLE_ID;
318 header->reserved = 0x00;
320 header->reserved = 0x00;
319 header->userApplication = CCSDS_USER_APP;
321 header->userApplication = CCSDS_USER_APP;
320 header->packetID[0] = 0x00;
322 header->packetID[0] = 0x00;
321 header->packetID[1] = 0x00;
323 header->packetID[1] = 0x00;
322 header->packetSequenceControl[0] = 0xc0;
324 header->packetSequenceControl[0] = 0xc0;
323 header->packetSequenceControl[1] = 0x00;
325 header->packetSequenceControl[1] = 0x00;
324 header->packetLength[0] = 0x00;
326 header->packetLength[0] = 0x00;
325 header->packetLength[1] = 0x00;
327 header->packetLength[1] = 0x00;
326 // DATA FIELD HEADER
328 // DATA FIELD HEADER
327 header->spare1_pusVersion_spare2 = 0x10;
329 header->spare1_pusVersion_spare2 = 0x10;
328 header->serviceType = TM_TYPE_LFR_SCIENCE; // service type
330 header->serviceType = TM_TYPE_LFR_SCIENCE; // service type
329 header->serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
331 header->serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
330 header->destinationID = TM_DESTINATION_ID_GROUND;
332 header->destinationID = TM_DESTINATION_ID_GROUND;
331 // AUXILIARY DATA HEADER
333 // AUXILIARY DATA HEADER
332 header->sid = 0x00;
334 header->sid = 0x00;
333 header->hkBIA = 0x1f;
335 header->hkBIA = 0x1f;
334 header->time[0] = 0x00;
336 header->time[0] = 0x00;
335 header->time[0] = 0x00;
337 header->time[0] = 0x00;
336 header->time[0] = 0x00;
338 header->time[0] = 0x00;
337 header->time[0] = 0x00;
339 header->time[0] = 0x00;
338 header->time[0] = 0x00;
340 header->time[0] = 0x00;
339 header->time[0] = 0x00;
341 header->time[0] = 0x00;
340 header->blkNr[0] = 0x00; // BLK_NR MSB
342 header->blkNr[0] = 0x00; // BLK_NR MSB
341 header->blkNr[1] = 0x00; // BLK_NR LSB
343 header->blkNr[1] = 0x00; // BLK_NR LSB
342 }
344 }
343
345
344 void reset_waveforms( void )
346 void reset_waveforms( void )
345 {
347 {
346 int i = 0;
348 int i = 0;
347
349
348 for (i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++)
350 for (i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++)
349 {
351 {
350 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x10002000;
352 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x10002000;
351 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET] = 0x20001000;
353 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET] = 0x20001000;
352 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x40008000;
354 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x40008000;
353
355
354 //***
356 //***
355 // F1
357 // F1
356 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x1000f000;
358 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x1000f000;
357 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET] = 0xf0001000;
359 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET] = 0xf0001000;
358 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x40008000;
360 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x40008000;
359
361
360 //***
362 //***
361 // F2
363 // F2
362 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x40008000;
364 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x40008000;
363 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET] = 0x20001000;
365 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET] = 0x20001000;
364 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x10002000;
366 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x10002000;
365
367
366 //***
368 //***
367 // F3
369 // F3
368 /*wf_cont_f3[ i* NB_WORDS_SWF_BLK + 0 ] = build_value( i, i ); // v and 1
370 /*wf_cont_f3[ i* NB_WORDS_SWF_BLK + 0 ] = build_value( i, i ); // v and 1
369 wf_cont_f3[ i* NB_WORDS_SWF_BLK + 1 ] = build_value( i, i ); // e2 and b1
371 wf_cont_f3[ i* NB_WORDS_SWF_BLK + 1 ] = build_value( i, i ); // e2 and b1
370 wf_cont_f3[ i* NB_WORDS_SWF_BLK + 2 ] = build_value( i, i ); // b2 and b3*/
372 wf_cont_f3[ i* NB_WORDS_SWF_BLK + 2 ] = build_value( i, i ); // b2 and b3*/
371 }
373 }
372 }
374 }
373
375
374 void send_waveform_SWF( Header_TM_LFR_SCIENCE_SWF_t *header, volatile int *waveform,
376 void send_waveform_SWF( Header_TM_LFR_SCIENCE_SWF_t *header, volatile int *waveform,
375 unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send)
377 unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send)
376 {
378 {
377 unsigned int i = 0;
379 unsigned int i = 0;
378 unsigned int length = 0;
380 unsigned int length = 0;
379 rtems_status_code status;
381 rtems_status_code status;
380
382
381 header->sid = (unsigned char) sid;
383 header->sid = (unsigned char) sid;
382
384
383 for (i=0; i<7; i++) // send waveform
385 for (i=0; i<7; i++) // send waveform
384 {
386 {
385 header->pktNr = (unsigned char) i+1; // PKT_NR
387 header->pktNr = (unsigned char) i+1; // PKT_NR
386 // BUILD THE DATA
388 // BUILD THE DATA
387 if (i==6) {
389 if (i==6) {
388 spw_ioctl_send->dlen = 8 * NB_BYTES_SWF_BLK;
390 spw_ioctl_send->dlen = 8 * NB_BYTES_SWF_BLK;
389 length = TM_LEN_SCI_SWF_8;
391 length = TM_LEN_SCI_SWF_8;
390 header->blkNr[0] = 0x00; // BLK_NR MSB
392 header->blkNr[0] = 0x00; // BLK_NR MSB
391 header->blkNr[1] = 0x08; // BLK_NR LSB
393 header->blkNr[1] = 0x08; // BLK_NR LSB
392 }
394 }
393 else {
395 else {
394 spw_ioctl_send->dlen = 340 * NB_BYTES_SWF_BLK;
396 spw_ioctl_send->dlen = 340 * NB_BYTES_SWF_BLK;
395 length = TM_LEN_SCI_SWF_340;
397 length = TM_LEN_SCI_SWF_340;
396 header->blkNr[0] = 0x01; // BLK_NR MSB
398 header->blkNr[0] = 0x01; // BLK_NR MSB
397 header->blkNr[1] = 0x54; // BLK_NR LSB
399 header->blkNr[1] = 0x54; // BLK_NR LSB
398 }
400 }
399 spw_ioctl_send->data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) ];
401 spw_ioctl_send->data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) ];
400 // BUILD THE HEADER
402 // BUILD THE HEADER
401 header->packetLength[0] = (unsigned char) (length>>8);
403 header->packetLength[0] = (unsigned char) (length>>8);
402 header->packetLength[1] = (unsigned char) (length);
404 header->packetLength[1] = (unsigned char) (length);
403 header->sid = (unsigned char) sid; // SID
405 header->sid = (unsigned char) sid; // SID
404 // SET PACKET TIME
406 // SET PACKET TIME
405 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
407 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
406 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
408 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
407 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
409 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
408 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
410 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
409 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
411 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
410 header->time[5] = (unsigned char) (time_management_regs->fine_time);
412 header->time[5] = (unsigned char) (time_management_regs->fine_time);
411 header->acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24);
413 header->acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24);
412 header->acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16);
414 header->acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16);
413 header->acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8);
415 header->acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8);
414 header->acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time);
416 header->acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time);
415 header->acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8);
417 header->acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8);
416 header->acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time);
418 header->acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time);
417 // SEND PACKET
419 // SEND PACKET
418 status = write_spw(spw_ioctl_send);
420 status = write_spw(spw_ioctl_send);
419 if (status != RTEMS_SUCCESSFUL) {
421 if (status != RTEMS_SUCCESSFUL) {
420 while (true) {
422 while (true) {
421 if (status != RTEMS_SUCCESSFUL) {
423 if (status != RTEMS_SUCCESSFUL) {
422 status = write_spw(spw_ioctl_send);
424 status = write_spw(spw_ioctl_send);
423 //PRINTF1("%d", i)
425 //PRINTF1("%d", i)
424 sched_yield();
426 sched_yield();
425 }
427 }
426 else {
428 else {
427 //PRINTF("\n")
429 //PRINTF("\n")
428 break;
430 break;
429 }
431 }
430 }
432 }
431 }
433 }
432 }
434 }
433 }
435 }
434
436
435 void send_waveform_CWF( Header_TM_LFR_SCIENCE_CWF_t *header, volatile int *waveform,
437 void send_waveform_CWF( Header_TM_LFR_SCIENCE_CWF_t *header, volatile int *waveform,
436 unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send)
438 unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send)
437 {
439 {
438 unsigned int i = 0;
440 unsigned int i = 0;
439 unsigned int length = 0;
441 unsigned int length = 0;
440 rtems_status_code status;
442 rtems_status_code status;
441
443
442 header->sid = (unsigned char) sid;
444 header->sid = (unsigned char) sid;
443
445
444 for (i=0; i<7; i++) // send waveform
446 for (i=0; i<7; i++) // send waveform
445 {
447 {
446 // BUILD THE DATA
448 // BUILD THE DATA
447 if (i==6) {
449 if (i==6) {
448 spw_ioctl_send->dlen = 8 * NB_BYTES_SWF_BLK;
450 spw_ioctl_send->dlen = 8 * NB_BYTES_SWF_BLK;
449 length = TM_LEN_SCI_CWF_8;
451 length = TM_LEN_SCI_CWF_8;
450 header->blkNr[0] = 0x00; // BLK_NR MSB
452 header->blkNr[0] = 0x00; // BLK_NR MSB
451 header->blkNr[1] = 0x08; // BLK_NR LSB
453 header->blkNr[1] = 0x08; // BLK_NR LSB
452 }
454 }
453 else {
455 else {
454 spw_ioctl_send->dlen = 340 * NB_BYTES_SWF_BLK;
456 spw_ioctl_send->dlen = 340 * NB_BYTES_SWF_BLK;
455 length = TM_LEN_SCI_CWF_340;
457 length = TM_LEN_SCI_CWF_340;
456 header->blkNr[0] = 0x01; // BLK_NR MSB
458 header->blkNr[0] = 0x01; // BLK_NR MSB
457 header->blkNr[1] = 0x54; // BLK_NR LSB
459 header->blkNr[1] = 0x54; // BLK_NR LSB
458 }
460 }
459 spw_ioctl_send->data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) ];
461 spw_ioctl_send->data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) ];
460 // BUILD THE HEADER
462 // BUILD THE HEADER
461 header->packetLength[0] = (unsigned char) (length>>8);
463 header->packetLength[0] = (unsigned char) (length>>8);
462 header->packetLength[1] = (unsigned char) (length);
464 header->packetLength[1] = (unsigned char) (length);
463 // SET PACKET TIME
465 // SET PACKET TIME
464 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
466 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
465 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
467 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
466 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
468 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
467 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
469 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
468 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
470 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
469 header->time[5] = (unsigned char) (time_management_regs->fine_time);
471 header->time[5] = (unsigned char) (time_management_regs->fine_time);
470 header->acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24);
472 header->acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24);
471 header->acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16);
473 header->acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16);
472 header->acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8);
474 header->acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8);
473 header->acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time);
475 header->acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time);
474 header->acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8);
476 header->acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8);
475 header->acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time);
477 header->acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time);
476 // SEND PACKET
478 // SEND PACKET
477 status = write_spw(spw_ioctl_send);
479 status = write_spw(spw_ioctl_send);
478 if (status != RTEMS_SUCCESSFUL) {
480 if (status != RTEMS_SUCCESSFUL) {
479 while (true) {
481 while (true) {
480 if (status != RTEMS_SUCCESSFUL) {
482 if (status != RTEMS_SUCCESSFUL) {
481 status = write_spw(spw_ioctl_send);
483 status = write_spw(spw_ioctl_send);
482 //PRINTF1("%d", i)
484 //PRINTF1("%d", i)
483 sched_yield();
485 sched_yield();
484 }
486 }
485 else {
487 else {
486 //PRINTF("\n")
488 //PRINTF("\n")
487 break;
489 break;
488 }
490 }
489 }
491 }
490 }
492 }
491 }
493 }
492 }
494 }
493
495
494 int build_value(int value1, int value0)
496 int build_value(int value1, int value0)
495 {
497 {
496 int aux = 0;
498 int aux = 0;
497 int aux1 = 0;
499 int aux1 = 0;
498 int aux0 = 0;
500 int aux0 = 0;
499 int value1_aux = 0;
501 int value1_aux = 0;
500 int value0_aux = 0;
502 int value0_aux = 0;
501
503
502 value1_aux = value1;
504 value1_aux = value1;
503 value0_aux = value0;
505 value0_aux = value0;
504
506
505 //******
507 //******
506 // B3 B2
508 // B3 B2
507 if (value1_aux > 8191) value1_aux = 8191;
509 if (value1_aux > 8191) value1_aux = 8191;
508 if (value1_aux < -8192) value1_aux = -8192;
510 if (value1_aux < -8192) value1_aux = -8192;
509 aux1 = ( (int) ( ( (unsigned char) (value1_aux / 256 ) ) << 8 ) )
511 aux1 = ( (int) ( ( (unsigned char) (value1_aux / 256 ) ) << 8 ) )
510 + ( (int) ( (unsigned char) (value1_aux ) ) );
512 + ( (int) ( (unsigned char) (value1_aux ) ) );
511
513
512 //******
514 //******
513 // B1 B0
515 // B1 B0
514 if (value0_aux > 8191) value0_aux = 8191;
516 if (value0_aux > 8191) value0_aux = 8191;
515 if (value0_aux < -8192) value0_aux = -8192;
517 if (value0_aux < -8192) value0_aux = -8192;
516 aux0 = ( (int) ( ( (unsigned char) (value0_aux / 256) ) << 8 ) )
518 aux0 = ( (int) ( ( (unsigned char) (value0_aux / 256) ) << 8 ) )
517 + ( (int) ( (unsigned char) (value0_aux ) ) );
519 + ( (int) ( (unsigned char) (value0_aux ) ) );
518
520
519 aux = (aux1 << 16) + aux0;
521 aux = (aux1 << 16) + aux0;
520
522
521 return aux;
523 return aux;
522 }
524 }
523
525
524 void send_waveform_norm(Header_TM_LFR_SCIENCE_SWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
526 void send_waveform_norm(Header_TM_LFR_SCIENCE_SWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
525 {
527 {
526 unsigned char lfrMode;
528 unsigned char lfrMode;
527 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
529 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
528
530
529 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL >> 8);
531 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL >> 8);
530 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL);
532 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL);
531 // TIME
533 // TIME
532 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
534 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
533 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
535 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
534 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
536 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
535 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
537 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
536 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
538 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
537 header->time[5] = (unsigned char) (time_management_regs->fine_time);
539 header->time[5] = (unsigned char) (time_management_regs->fine_time);
538
540
539 //***************
541 //***************
540 // send snapshots
542 // send snapshots
541 // F0
543 // F0
542 send_waveform_SWF( header, wf_snap_f0, SID_NORM_SWF_F0, spw_ioctl_send);
544 send_waveform_SWF( header, wf_snap_f0, SID_NORM_SWF_F0, spw_ioctl_send);
543 // F1
545 // F1
544 if (lfrMode == LFR_MODE_NORMAL) // in SBM1 mode, the snapshot is sent by the send_waveform_sbm1 function
546 if (lfrMode == LFR_MODE_NORMAL) // in SBM1 mode, the snapshot is sent by the send_waveform_sbm1 function
545 {
547 {
546 send_waveform_SWF( header, wf_snap_f1, SID_NORM_SWF_F1, spw_ioctl_send);
548 send_waveform_SWF( header, wf_snap_f1, SID_NORM_SWF_F1, spw_ioctl_send);
547 }
549 }
548 // F2
550 // F2
549 send_waveform_SWF( header, wf_snap_f2, SID_NORM_SWF_F2, spw_ioctl_send);
551 send_waveform_SWF( header, wf_snap_f2, SID_NORM_SWF_F2, spw_ioctl_send);
550 #ifdef GSA
552 #ifdef GSA
551 // irq processed, reset the related register of the timer unit
553 // irq processed, reset the related register of the timer unit
552 gptimer_regs->timer[2].ctrl = gptimer_regs->timer[2].ctrl | 0x00000010;
554 gptimer_regs->timer[TIMER_WF_SIMULATOR].ctrl = gptimer_regs->timer[TIMER_WF_SIMULATOR].ctrl | 0x00000010;
555 // clear the interruption
556 LEON_Clear_interrupt(IRQ_WF);
553 #else
557 #else
554 // irq processed, reset the related register of the waveform picker
558 // irq processed, reset the related register of the waveform picker
555 if (lfrMode == LFR_MODE_SBM1) {
559 if (lfrMode == LFR_MODE_SBM1) {
556 param_local.local_sbm1_nb_cwf_sent = 0;
560 param_local.local_sbm1_nb_cwf_sent = 0;
557 // after the first transmission of the swf at F1, the period is set to local_sbm1_nb_cwf_max
561 // after the first transmission of the swf at F1, the period is set to local_sbm1_nb_cwf_max
558 param_local.local_sbm1_nb_cwf_max = 2 * (
562 param_local.local_sbm1_nb_cwf_max = 2 * (
559 ( parameter_dump_packet.sy_lfr_n_swf_p[0] * 256 )
563 ( parameter_dump_packet.sy_lfr_n_swf_p[0] * 256 )
560 + parameter_dump_packet.sy_lfr_n_swf_p[1]
564 + parameter_dump_packet.sy_lfr_n_swf_p[1]
561 );
565 );
562 }
566 }
563 else if (lfrMode == LFR_MODE_SBM2) {
567 else if (lfrMode == LFR_MODE_SBM2) {
564 param_local.local_sbm2_nb_cwf_sent = 0;
568 param_local.local_sbm2_nb_cwf_sent = 0;
565 // after the first transmission of the swf at F2, the period is set to local_sbm2_nb_cwf_max
569 // after the first transmission of the swf at F2, the period is set to local_sbm2_nb_cwf_max
566 param_local.local_sbm2_nb_cwf_max = (
570 param_local.local_sbm2_nb_cwf_max = (
567 ( parameter_dump_packet.sy_lfr_n_swf_p[0] * 256 )
571 ( parameter_dump_packet.sy_lfr_n_swf_p[0] * 256 )
568 + parameter_dump_packet.sy_lfr_n_swf_p[1]
572 + parameter_dump_packet.sy_lfr_n_swf_p[1]
569 )/ 8;
573 )/ 8;
570 }
574 }
571 else {
575 else {
572 waveform_picker_regs->status = waveform_picker_regs->status & 0x00;
576 waveform_picker_regs->status = waveform_picker_regs->status & 0x00;
573 waveform_picker_regs->burst_enable = 0x07; // [0111] enable f2 f1 f0
577 waveform_picker_regs->burst_enable = 0x07; // [0111] enable f2 f1 f0
574 }
578 }
575
579
576 #endif
580 #endif
577 }
581 }
578
582
579 void send_waveform_burst(Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
583 void send_waveform_burst(Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
580 {
584 {
581 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 >> 8);
585 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 >> 8);
582 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2);
586 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2);
583 // TIME
587 // TIME
584 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
588 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
585 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
589 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
586 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
590 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
587 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
591 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
588 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
592 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
589 header->time[5] = (unsigned char) (time_management_regs->fine_time);
593 header->time[5] = (unsigned char) (time_management_regs->fine_time);
590 // ACQUISITION TIME
594 // ACQUISITION TIME
591
595
592 // F2
596 // F2
593 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
597 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
594 send_waveform_CWF( header, wf_snap_f2_bis, SID_BURST_CWF_F2, spw_ioctl_send);
598 send_waveform_CWF( header, wf_snap_f2_bis, SID_BURST_CWF_F2, spw_ioctl_send);
595 }
599 }
596 else {
600 else {
597 send_waveform_CWF( header, wf_snap_f2, SID_BURST_CWF_F2, spw_ioctl_send);
601 send_waveform_CWF( header, wf_snap_f2, SID_BURST_CWF_F2, spw_ioctl_send);
598 }
602 }
599 }
603 }
600
604
601 void send_waveform_sbm1(Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
605 void send_waveform_sbm1(Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
602 {
606 {
603 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 >> 8);
607 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 >> 8);
604 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2);
608 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2);
605 // TIME
609 // TIME
606 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
610 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
607 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
611 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
608 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
612 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
609 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
613 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
610 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
614 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
611 header->time[5] = (unsigned char) (time_management_regs->fine_time);
615 header->time[5] = (unsigned char) (time_management_regs->fine_time);
612
616
613 // F1
617 // F1
614 if (waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) {
618 if (waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) {
615 send_waveform_CWF( header, wf_snap_f1_bis, SID_SBM1_CWF_F1, spw_ioctl_send );
619 send_waveform_CWF( header, wf_snap_f1_bis, SID_SBM1_CWF_F1, spw_ioctl_send );
616 }
620 }
617 else {
621 else {
618 send_waveform_CWF( header, wf_snap_f1, SID_SBM1_CWF_F1, spw_ioctl_send );
622 send_waveform_CWF( header, wf_snap_f1, SID_SBM1_CWF_F1, spw_ioctl_send );
619 }
623 }
620 }
624 }
621
625
622 void send_waveform_sbm2(Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
626 void send_waveform_sbm2(Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
623 {
627 {
624 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 >> 8);
628 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 >> 8);
625 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2);
629 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2);
626 // TIME
630 // TIME
627 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
631 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
628 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
632 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
629 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
633 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
630 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
634 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
631 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
635 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
632 header->time[5] = (unsigned char) (time_management_regs->fine_time);
636 header->time[5] = (unsigned char) (time_management_regs->fine_time);
633
637
634 // F2
638 // F2
635 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
639 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
636 send_waveform_CWF( header, wf_snap_f2_bis, SID_SBM2_CWF_F2, spw_ioctl_send);
640 send_waveform_CWF( header, wf_snap_f2_bis, SID_SBM2_CWF_F2, spw_ioctl_send);
637 }
641 }
638 else {
642 else {
639 send_waveform_CWF( header, wf_snap_f2, SID_SBM2_CWF_F2, spw_ioctl_send);
643 send_waveform_CWF( header, wf_snap_f2, SID_SBM2_CWF_F2, spw_ioctl_send);
640 }
644 }
641 }
645 }
642
646
643 //**************
647 //**************
644 // wfp registers
648 // wfp registers
645 void set_wfp_data_shaping(unsigned char data_shaping)
649 void set_wfp_data_shaping(unsigned char data_shaping)
646 {
650 {
647 // get the parameters for the data shaping [BW SP0 SP1 R0 R1] in sy_lfr_common1 and configure the register
651 // get the parameters for the data shaping [BW SP0 SP1 R0 R1] in sy_lfr_common1 and configure the register
648 // waveform picker : [R1 R0 SP1 SP0 BW]
652 // waveform picker : [R1 R0 SP1 SP0 BW]
649 waveform_picker_regs->data_shaping =
653 waveform_picker_regs->data_shaping =
650 ( (data_shaping & 0x10) >> 4 ) // BW
654 ( (data_shaping & 0x10) >> 4 ) // BW
651 + ( (data_shaping & 0x08) >> 2 ) // SP0
655 + ( (data_shaping & 0x08) >> 2 ) // SP0
652 + ( (data_shaping & 0x04) ) // SP1
656 + ( (data_shaping & 0x04) ) // SP1
653 + ( (data_shaping & 0x02) << 2 ) // R0
657 + ( (data_shaping & 0x02) << 2 ) // R0
654 + ( (data_shaping & 0x01) << 4 ); // R1
658 + ( (data_shaping & 0x01) << 4 ); // R1
655 }
659 }
656
660
657 void set_wfp_delta_snapshot(unsigned int delta_snapshot)
661 void set_wfp_delta_snapshot(unsigned int delta_snapshot)
658 {
662 {
659 unsigned char aux = 0;
663 unsigned char aux = 0;
660 aux = delta_snapshot / 2 ;
664 aux = delta_snapshot / 2 ;
661 waveform_picker_regs->delta_snapshot = aux; // max 2 bytes
665 waveform_picker_regs->delta_snapshot = aux; // max 2 bytes
662 //waveform_picker_regs->delta_snapshot = 0x5; // max 2 bytes
666 //waveform_picker_regs->delta_snapshot = 0x5; // max 2 bytes
663 }
667 }
664
668
665 void reset_wfp_burst_enable()
669 void reset_wfp_burst_enable()
666 {
670 {
667 waveform_picker_regs->burst_enable = 0x00; // burst f2, f1, f0 enable f3, f2, f1, f0
671 waveform_picker_regs->burst_enable = 0x00; // burst f2, f1, f0 enable f3, f2, f1, f0
668 }
672 }
669
673
670 void reset_wfp_regs()
674 void reset_wfp_regs()
671 {
675 {
672 set_wfp_data_shaping(parameter_dump_packet.bw_sp0_sp1_r0_r1);
676 set_wfp_data_shaping(parameter_dump_packet.bw_sp0_sp1_r0_r1);
673 reset_wfp_burst_enable();
677 reset_wfp_burst_enable();
674 waveform_picker_regs->addr_data_f0 = (int) (wf_snap_f0); //
678 waveform_picker_regs->addr_data_f0 = (int) (wf_snap_f0); //
675 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1); //
679 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1); //
676 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2); //
680 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2); //
677 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3); //
681 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3); //
678 waveform_picker_regs->status = 0x00; //
682 waveform_picker_regs->status = 0x00; //
679 set_wfp_delta_snapshot(
683 set_wfp_delta_snapshot(
680 ( parameter_dump_packet.sy_lfr_n_swf_p[0]*256)
684 ( parameter_dump_packet.sy_lfr_n_swf_p[0]*256)
681 + parameter_dump_packet.sy_lfr_n_swf_p[1] ); // time in seconds between two snapshots
685 + parameter_dump_packet.sy_lfr_n_swf_p[1] ); // time in seconds between two snapshots
682 waveform_picker_regs->delta_f2_f1 = 0xffff; // max 4 bytes
686 waveform_picker_regs->delta_f2_f1 = 0xffff; // max 4 bytes
683 waveform_picker_regs->delta_f2_f0 = 0x17c00; // max 5 bytes
687 waveform_picker_regs->delta_f2_f0 = 0x17c00; // max 5 bytes
684 waveform_picker_regs->nb_burst_available = 0x180; // max 3 bytes, size of the buffer in burst (1 burst = 16 x 4 octets)
688 waveform_picker_regs->nb_burst_available = 0x180; // max 3 bytes, size of the buffer in burst (1 burst = 16 x 4 octets)
685 waveform_picker_regs->nb_snapshot_param = 0x7ff; // max 3 octets, 2048 - 1
689 waveform_picker_regs->nb_snapshot_param = 0x7ff; // max 3 octets, 2048 - 1
686 //waveform_picker_regs->delta_snapshot = 0x2; // max 2 bytes, = period / 2
690 //waveform_picker_regs->delta_snapshot = 0x2; // max 2 bytes, = period / 2
687 //waveform_picker_regs->delta_f2_f1 = 0x2d00; // max 4 bytes
691 //waveform_picker_regs->delta_f2_f1 = 0x2d00; // max 4 bytes
688 //waveform_picker_regs->delta_f2_f0 = 0x2f80; // max 5 bytes
692 //waveform_picker_regs->delta_f2_f0 = 0x2f80; // max 5 bytes
689 //waveform_picker_regs->nb_burst_available = 0x30; // max 3 bytes, size of the buffer in burst (1 burst = 16 x 4 octets)
693 //waveform_picker_regs->nb_burst_available = 0x30; // max 3 bytes, size of the buffer in burst (1 burst = 16 x 4 octets)
690 //waveform_picker_regs->nb_snapshot_param = 0xff; // max 3 octets, 256 - 1
694 //waveform_picker_regs->nb_snapshot_param = 0xff; // max 3 octets, 256 - 1
691 }
695 }
General Comments 0
You need to be logged in to leave comments. Login now