##// END OF EJS Templates
Release 0.7...
paul@pc-solar1.lab-lpp.local -
r28:bba8bfc08608 default
parent child
Show More
@@ -1,225 +1,225
1 #############################################################################
1 #############################################################################
2 # Makefile for building: bin/fsw
2 # Makefile for building: bin/fsw-gsa
3 # Generated by qmake (2.01a) (Qt 4.8.4) on: Fri Jul 5 13:40:45 2013
3 # Generated by qmake (2.01a) (Qt 4.8.4) on: Fri Jul 12 07:42:51 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=6 -DPRINT_MESSAGES_ON_CONSOLE
13 DEFINES = -DSW_VERSION_N1=0 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=7 -DPRINT_MESSAGES_ON_CONSOLE -DGSA
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-gsa
82 DESTDIR = bin/
82 DESTDIR = bin/
83 TARGET = bin/fsw
83 TARGET = bin/fsw-gsa
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/fsw-gsa1.0.0 || $(MKDIR) obj/fsw-gsa1.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/fsw-gsa1.0.0/ && (cd `dirname obj/fsw-gsa1.0.0` && $(TAR) fsw-gsa1.0.0.tar fsw-gsa1.0.0 && $(COMPRESS) fsw-gsa1.0.0.tar) && $(MOVE) `dirname obj/fsw-gsa1.0.0`/fsw-gsa1.0.0.tar.gz . && $(DEL_FILE) -r obj/fsw-gsa1.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 gsa
4 CONFIG += console verbose gsa
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-6
10 SWVERSION=-0-7
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=6
14 DEFINES += SW_VERSION_N4=7
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,265 +1,265
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 Qt Creator 2.4.1, 2013-07-05T17:38:58. -->
3 <!-- Written by Qt Creator 2.4.1, 2013-07-12T07:17:03. -->
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 <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
14 <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
15 <value type="QString" key="language">Cpp</value>
15 <value type="QString" key="language">Cpp</value>
16 <valuemap type="QVariantMap" key="value">
16 <valuemap type="QVariantMap" key="value">
17 <value type="QString" key="CurrentPreferences">CppGlobal</value>
17 <value type="QString" key="CurrentPreferences">CppGlobal</value>
18 </valuemap>
18 </valuemap>
19 </valuemap>
19 </valuemap>
20 <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
20 <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
21 <value type="QString" key="language">QmlJS</value>
21 <value type="QString" key="language">QmlJS</value>
22 <valuemap type="QVariantMap" key="value">
22 <valuemap type="QVariantMap" key="value">
23 <value type="QString" key="CurrentPreferences">QmlJSGlobal</value>
23 <value type="QString" key="CurrentPreferences">QmlJSGlobal</value>
24 </valuemap>
24 </valuemap>
25 </valuemap>
25 </valuemap>
26 <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
26 <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
27 <value type="QByteArray" key="EditorConfiguration.Codec">System</value>
27 <value type="QByteArray" key="EditorConfiguration.Codec">System</value>
28 <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
28 <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
29 <value type="int" key="EditorConfiguration.IndentSize">4</value>
29 <value type="int" key="EditorConfiguration.IndentSize">4</value>
30 <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
30 <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
31 <value type="int" key="EditorConfiguration.PaddingMode">1</value>
31 <value type="int" key="EditorConfiguration.PaddingMode">1</value>
32 <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
32 <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
33 <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
33 <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
34 <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
34 <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
35 <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
35 <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
36 <value type="int" key="EditorConfiguration.TabSize">8</value>
36 <value type="int" key="EditorConfiguration.TabSize">8</value>
37 <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
37 <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
38 <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
38 <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
39 <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
39 <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
40 <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
40 <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
41 <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
41 <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
42 <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
42 <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
43 </valuemap>
43 </valuemap>
44 </data>
44 </data>
45 <data>
45 <data>
46 <variable>ProjectExplorer.Project.PluginSettings</variable>
46 <variable>ProjectExplorer.Project.PluginSettings</variable>
47 <valuemap type="QVariantMap"/>
47 <valuemap type="QVariantMap"/>
48 </data>
48 </data>
49 <data>
49 <data>
50 <variable>ProjectExplorer.Project.Target.0</variable>
50 <variable>ProjectExplorer.Project.Target.0</variable>
51 <valuemap type="QVariantMap">
51 <valuemap type="QVariantMap">
52 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
52 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
53 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
53 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
54 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Target.DesktopTarget</value>
54 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Target.DesktopTarget</value>
55 <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
55 <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
56 <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
56 <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
57 <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
57 <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
58 <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
58 <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
59 <value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-linux-generic-elf-64bit./usr/bin/gdb</value>
59 <value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:/usr/lib64/ccache/g++.x86-linux-generic-elf-64bit./usr/bin/gdb</value>
60 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
60 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
61 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
61 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
62 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
62 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
63 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
63 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
64 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
64 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
65 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
65 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
66 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
66 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
67 <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
67 <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
68 <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
68 <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
69 </valuemap>
69 </valuemap>
70 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
70 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
71 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
71 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
72 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
72 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
73 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
73 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
74 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
74 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
75 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
75 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
76 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
76 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
77 </valuemap>
77 </valuemap>
78 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
78 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
79 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
79 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
80 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
80 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
81 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
81 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
82 </valuemap>
82 </valuemap>
83 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
83 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
84 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
84 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
85 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
85 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
86 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
86 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
87 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
87 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
88 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
88 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
89 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
89 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
90 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
90 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
91 </valuemap>
91 </valuemap>
92 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
92 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
93 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
93 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
94 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
94 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
95 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
95 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
96 </valuemap>
96 </valuemap>
97 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
97 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
98 <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
98 <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
99 <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
99 <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
100 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.8.2 in PATH (System) Release</value>
100 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.8.2 in PATH (System) Release</value>
101 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
101 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
102 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
102 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
103 <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
103 <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
104 <value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/opt/DEV_PLE/FSW-qt</value>
104 <value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/opt/DEV_PLE/FSW-qt</value>
105 <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">1</value>
105 <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">1</value>
106 <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
106 <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
107 </valuemap>
107 </valuemap>
108 <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
108 <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
109 <value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-linux-generic-elf-64bit./usr/bin/gdb</value>
109 <value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:/usr/lib64/ccache/g++.x86-linux-generic-elf-64bit./usr/bin/gdb</value>
110 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
110 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
111 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
111 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
112 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
112 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
113 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
113 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
114 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
114 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
115 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
115 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
116 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
116 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
117 <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
117 <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
118 <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
118 <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
119 </valuemap>
119 </valuemap>
120 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
120 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
121 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
121 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
122 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
122 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
123 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
123 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
124 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
124 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
125 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
125 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
126 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
126 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
127 </valuemap>
127 </valuemap>
128 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
128 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
129 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
129 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
130 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
130 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
131 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
131 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
132 </valuemap>
132 </valuemap>
133 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
133 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
134 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
134 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
135 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
135 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
136 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
136 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
137 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
137 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
138 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
138 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
139 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
139 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
140 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
140 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
141 </valuemap>
141 </valuemap>
142 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
142 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
143 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
143 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
144 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
144 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
145 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
145 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
146 </valuemap>
146 </valuemap>
147 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
147 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
148 <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
148 <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
149 <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
149 <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
150 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.8.2 in PATH (System) Debug</value>
150 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.8.2 in PATH (System) Debug</value>
151 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
151 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
152 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
152 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
153 <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
153 <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
154 <value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/opt/DEV_PLE/FSW-qt</value>
154 <value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/opt/DEV_PLE/FSW-qt</value>
155 <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">1</value>
155 <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">1</value>
156 <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
156 <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
157 </valuemap>
157 </valuemap>
158 <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
158 <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
159 <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
159 <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
160 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
160 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
161 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
161 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
162 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
162 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
163 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
163 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
164 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
164 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
165 </valuemap>
165 </valuemap>
166 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
166 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
167 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">No deployment</value>
167 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">No deployment</value>
168 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
168 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
169 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
169 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
170 </valuemap>
170 </valuemap>
171 <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
171 <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
172 <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
172 <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
173 <value type="bool" key="Analyzer.Project.UseGlobal">true</value>
173 <value type="bool" key="Analyzer.Project.UseGlobal">true</value>
174 <value type="bool" key="Analyzer.Project.UseGlobal">true</value>
174 <value type="bool" key="Analyzer.Project.UseGlobal">true</value>
175 <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
175 <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
176 <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
176 <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
177 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
177 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
178 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
178 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
179 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
179 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
180 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
180 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
181 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
181 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
182 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
182 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
183 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
183 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
184 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
184 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
185 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
185 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
186 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
186 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
187 <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
187 <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
188 <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
188 <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
189 <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
189 <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
190 <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
190 <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
191 <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
191 <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
192 <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
192 <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
193 <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
193 <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
194 <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
194 <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
195 <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
195 <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
196 <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
196 <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
197 <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
197 <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
198 <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
198 <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
199 <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
199 <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
200 <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
200 <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
201 <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
201 <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
202 <value type="int">0</value>
202 <value type="int">0</value>
203 <value type="int">1</value>
203 <value type="int">1</value>
204 <value type="int">2</value>
204 <value type="int">2</value>
205 <value type="int">3</value>
205 <value type="int">3</value>
206 <value type="int">4</value>
206 <value type="int">4</value>
207 <value type="int">5</value>
207 <value type="int">5</value>
208 <value type="int">6</value>
208 <value type="int">6</value>
209 <value type="int">7</value>
209 <value type="int">7</value>
210 <value type="int">8</value>
210 <value type="int">8</value>
211 <value type="int">9</value>
211 <value type="int">9</value>
212 <value type="int">10</value>
212 <value type="int">10</value>
213 <value type="int">11</value>
213 <value type="int">11</value>
214 <value type="int">12</value>
214 <value type="int">12</value>
215 <value type="int">13</value>
215 <value type="int">13</value>
216 <value type="int">14</value>
216 <value type="int">14</value>
217 </valuelist>
217 </valuelist>
218 <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
218 <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
219 <value type="int">0</value>
219 <value type="int">0</value>
220 <value type="int">1</value>
220 <value type="int">1</value>
221 <value type="int">2</value>
221 <value type="int">2</value>
222 <value type="int">3</value>
222 <value type="int">3</value>
223 <value type="int">4</value>
223 <value type="int">4</value>
224 <value type="int">5</value>
224 <value type="int">5</value>
225 <value type="int">6</value>
225 <value type="int">6</value>
226 <value type="int">7</value>
226 <value type="int">7</value>
227 <value type="int">8</value>
227 <value type="int">8</value>
228 <value type="int">9</value>
228 <value type="int">9</value>
229 <value type="int">10</value>
229 <value type="int">10</value>
230 <value type="int">11</value>
230 <value type="int">11</value>
231 <value type="int">12</value>
231 <value type="int">12</value>
232 <value type="int">13</value>
232 <value type="int">13</value>
233 <value type="int">14</value>
233 <value type="int">14</value>
234 </valuelist>
234 </valuelist>
235 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">fsw-qt</value>
235 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">fsw-qt</value>
236 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
236 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
237 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration</value>
237 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration</value>
238 <value type="int" key="Qt4ProjectManager.Qt4RunConfiguration.BaseEnvironmentBase">2</value>
238 <value type="int" key="Qt4ProjectManager.Qt4RunConfiguration.BaseEnvironmentBase">2</value>
239 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
239 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
240 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">fsw-qt.pro</value>
240 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">fsw-qt.pro</value>
241 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
241 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
242 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">true</value>
242 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">true</value>
243 <valuelist type="QVariantList" key="Qt4ProjectManager.Qt4RunConfiguration.UserEnvironmentChanges"/>
243 <valuelist type="QVariantList" key="Qt4ProjectManager.Qt4RunConfiguration.UserEnvironmentChanges"/>
244 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
244 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
245 <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
245 <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
246 <value type="bool" key="RunConfiguration.UseCppDebugger">true</value>
246 <value type="bool" key="RunConfiguration.UseCppDebugger">true</value>
247 <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
247 <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
248 <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">false</value>
248 <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">false</value>
249 </valuemap>
249 </valuemap>
250 <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
250 <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
251 </valuemap>
251 </valuemap>
252 </data>
252 </data>
253 <data>
253 <data>
254 <variable>ProjectExplorer.Project.TargetCount</variable>
254 <variable>ProjectExplorer.Project.TargetCount</variable>
255 <value type="int">1</value>
255 <value type="int">1</value>
256 </data>
256 </data>
257 <data>
257 <data>
258 <variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
258 <variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
259 <value type="QString">{2e58a81f-9962-4bba-ae6b-760177f0656c}</value>
259 <value type="QString">{2e58a81f-9962-4bba-ae6b-760177f0656c}</value>
260 </data>
260 </data>
261 <data>
261 <data>
262 <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
262 <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
263 <value type="int">10</value>
263 <value type="int">10</value>
264 </data>
264 </data>
265 </qtcreator>
265 </qtcreator>
@@ -1,369 +1,431
1
1 #ifndef CCSDS_H_INCLUDED
2 #ifndef CCSDS_H_INCLUDED
2 #define CCSDS_H_INCLUDED
3 #define CCSDS_H_INCLUDED
3
4
4 #define CCSDS_TELEMETRY_HEADER_LENGTH 16+4
5 #define CCSDS_TELEMETRY_HEADER_LENGTH 16+4
5 #define CCSDS_TM_PKT_MAX_SIZE 4412
6 #define CCSDS_TM_PKT_MAX_SIZE 4412
6 #define CCSDS_TELECOMMAND_HEADER_LENGTH 10+4
7 #define CCSDS_TELECOMMAND_HEADER_LENGTH 10+4
7 #define CCSDS_TC_PKT_MAX_SIZE 256
8 #define CCSDS_TC_PKT_MAX_SIZE 256
8 #define CCSDS_TC_PKT_MIN_SIZE 16
9 #define CCSDS_TC_PKT_MIN_SIZE 16
9 #define CCSDS_TC_TM_PACKET_OFFSET 7
10 #define CCSDS_TC_TM_PACKET_OFFSET 7
10 #define CCSDS_PROCESS_ID 76
11 #define CCSDS_PROCESS_ID 76
11 #define CCSDS_PACKET_CATEGORY 12
12 #define CCSDS_PACKET_CATEGORY 12
12 #define CCSDS_NODE_ADDRESS 0xfe
13 #define CCSDS_NODE_ADDRESS 0xfe
13
14
14 // PACKET IDs
15 // PACKET ID
15 #define TM_PACKET_ID_TC_EXE 0x0cc1 // PID 76 CAT 1
16 #define TM_PACKET_ID_TC_EXE 0x0cc1 // PID 76 CAT 1
16 #define TM_PACKET_ID_HK 0x0cc4 // PID 76 CAT 4
17 #define TM_PACKET_ID_HK 0x0cc4 // PID 76 CAT 4
17 #define TM_PACKET_ID_PARAMETER_DUMP 0x0cc9 // PID 76 CAT 9
18 #define TM_PACKET_ID_PARAMETER_DUMP 0x0cc9 // PID 76 CAT 9
18 #define TM_PACKET_ID_SCIENCE_NORMAL 0x0ccc // PID 76 CAT 12
19 #define TM_PACKET_ID_SCIENCE_NORMAL 0x0ccc // PID 76 CAT 12
19 #define TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 0x0cfc // PID 79 CAT 12
20 #define TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 0x0cfc // PID 79 CAT 12
20
21
22 // PACKET SEQUENCE CONTROL
23 #define TM_PACKET_SEQ_CTRL_CONTINUATION 0
24 #define TM_PACKET_SEQ_CTRL_FIRST 1
25 #define TM_PACKET_SEQ_CTRL_LAST 2
26 #define TM_PACKET_SEQ_CTRL_STANDALONE 3
27
21 // FAILURE CODES
28 // FAILURE CODES
22 #define FAILURE_CODE_INCONSISTENT 5 // 0x00 0x05
29 #define FAILURE_CODE_INCONSISTENT 5 // 0x00 0x05
23 #define FAILURE_CODE_NOT_EXECUTABLE 40000 // 0x9c 0x40
30 #define FAILURE_CODE_NOT_EXECUTABLE 42000 // 0xa4 0x10
24 #define FAILURE_CODE_NOT_IMPLEMENTED 40002 // 0x9c 0x42
31 #define FAILURE_CODE_NOT_IMPLEMENTED 42002 // 0xa4 0x12
25 #define FAILURE_CODE_ERROR 40003 // 0x9c 0x43
32 #define FAILURE_CODE_ERROR 42003 // 0xa4 0x13
26 #define FAILURE_CODE_CORRUPTED 40005 // 0x9c 0x45
33 #define FAILURE_CODE_CORRUPTED 42005 // 0xa4 0x15
27 //
34 //
28 #define TM_DESTINATION_ID_GROUND 0
35 #define TM_DESTINATION_ID_GROUND 0
29 #define TM_DESTINATION_ID_MISSION_TIMELINE 110
36 #define TM_DESTINATION_ID_MISSION_TIMELINE 110
30 #define TM_DESTINATION_ID_TC_SEQUENCES 111
37 #define TM_DESTINATION_ID_TC_SEQUENCES 111
31 #define TM_DESTINATION_ID_RECOVERY_ACTION_COMMAND 112
38 #define TM_DESTINATION_ID_RECOVERY_ACTION_COMMAND 112
32 #define TM_DESTINATION_ID_BACKUP_MISSION_TIMELINE 113
39 #define TM_DESTINATION_ID_BACKUP_MISSION_TIMELINE 113
33 #define TM_DESTINATION_ID_DIRECT_CMD 120
40 #define TM_DESTINATION_ID_DIRECT_CMD 120
34 #define TM_DESTINATION_ID_SPARE_GRD_SRC1 121
41 #define TM_DESTINATION_ID_SPARE_GRD_SRC1 121
35 #define TM_DESTINATION_ID_SPARE_GRD_SRC2 122
42 #define TM_DESTINATION_ID_SPARE_GRD_SRC2 122
36 #define TM_DESTINATION_ID_OBCP 15
43 #define TM_DESTINATION_ID_OBCP 15
37 #define TM_DESTINATION_ID_SYSTEM_CONTROL 14
44 #define TM_DESTINATION_ID_SYSTEM_CONTROL 14
38 #define TM_DESTINATION_ID_AOCS 11
45 #define TM_DESTINATION_ID_AOCS 11
39
46
40 #define CCSDS_DESTINATION_ID 0x01
47 #define CCSDS_DESTINATION_ID 0x01
41 #define CCSDS_PROTOCOLE_ID 0x02
48 #define CCSDS_PROTOCOLE_ID 0x02
49 #define CCSDS_RESERVED 0x00
42 #define CCSDS_USER_APP 0x00
50 #define CCSDS_USER_APP 0x00
43
51
44 #define SIZE_TM_LFR_TC_EXE_NOT_IMPLEMENTED 24
52 #define SIZE_TM_LFR_TC_EXE_NOT_IMPLEMENTED 24
45 #define SIZE_TM_LFR_TC_EXE_CORRUPTED 32
53 #define SIZE_TM_LFR_TC_EXE_CORRUPTED 32
46 #define SIZE_HK_PARAMETERS 112
54 #define SIZE_HK_PARAMETERS 112
47
55
48 #define ILLEGAL_APID 0
56 #define ILLEGAL_APID 0
49 #define WRONG_LEN_PACKET 1
57 #define WRONG_LEN_PACKET 1
50 #define INCOR_CHECKSUM 2
58 #define INCOR_CHECKSUM 2
51 #define ILL_TYPE 3
59 #define ILL_TYPE 3
52 #define ILL_SUBTYPE 4
60 #define ILL_SUBTYPE 4
53 #define WRONG_APP_DATA 5
61 #define WRONG_APP_DATA 5
54 #define WRONG_CMD_CODE 6
62 #define WRONG_CMD_CODE 6
55 #define CCSDS_TM_VALID 7
63 #define CCSDS_TM_VALID 7
56
64
57 // TC TYPES
65 // TC TYPES
58 #define TC_TYPE_GEN 181
66 #define TC_TYPE_GEN 181
59 #define TC_TYPE_TIME 9
67 #define TC_TYPE_TIME 9
60
68
61 // TC SUBTYPES
69 // TC SUBTYPES
62 #define TC_SUBTYPE_RESET 1
70 #define TC_SUBTYPE_RESET 1
63 #define TC_SUBTYPE_LOAD_COMM 11
71 #define TC_SUBTYPE_LOAD_COMM 11
64 #define TC_SUBTYPE_LOAD_NORM 13
72 #define TC_SUBTYPE_LOAD_NORM 13
65 #define TC_SUBTYPE_LOAD_BURST 19
73 #define TC_SUBTYPE_LOAD_BURST 19
66 #define TC_SUBTYPE_LOAD_SBM1 25
74 #define TC_SUBTYPE_LOAD_SBM1 25
67 #define TC_SUBTYPE_LOAD_SBM2 27
75 #define TC_SUBTYPE_LOAD_SBM2 27
68 #define TC_SUBTYPE_DUMP 31
76 #define TC_SUBTYPE_DUMP 31
69 #define TC_SUBTYPE_ENTER 41
77 #define TC_SUBTYPE_ENTER 41
70 #define TC_SUBTYPE_UPDT_INFO 51
78 #define TC_SUBTYPE_UPDT_INFO 51
71 #define TC_SUBTYPE_EN_CAL 61
79 #define TC_SUBTYPE_EN_CAL 61
72 #define TC_SUBTYPE_DIS_CAL 63
80 #define TC_SUBTYPE_DIS_CAL 63
73 #define TC_SUBTYPE_UPDT_TIME 129
81 #define TC_SUBTYPE_UPDT_TIME 129
74
82
75 // TC LEN
83 // TC LEN
76 #define TC_LEN_RESET 12
84 #define TC_LEN_RESET 12
77 #define TC_LEN_LOAD_COMM 14
85 #define TC_LEN_LOAD_COMM 14
78 #define TC_LEN_LOAD_NORM 20
86 #define TC_LEN_LOAD_NORM 20
79 #define TC_LEN_LOAD_BURST 14
87 #define TC_LEN_LOAD_BURST 14
80 #define TC_LEN_LOAD_SBM1 14
88 #define TC_LEN_LOAD_SBM1 14
81 #define TC_LEN_LOAD_SBM2 14
89 #define TC_LEN_LOAD_SBM2 14
82 #define TC_LEN_DUMP 12
90 #define TC_LEN_DUMP 12
83 #define TC_LEN_ENTER 20
91 #define TC_LEN_ENTER 20
84 #define TC_LEN_UPDT_INFO 48
92 #define TC_LEN_UPDT_INFO 48
85 #define TC_LEN_EN_CAL 12
93 #define TC_LEN_EN_CAL 12
86 #define TC_LEN_DIS_CAL 12
94 #define TC_LEN_DIS_CAL 12
87 #define TC_LEN_UPDT_TIME 18
95 #define TC_LEN_UPDT_TIME 18
88
96
89 // TM TYPES
97 // TM TYPES
90 #define TM_TYPE_TC_EXE 1
98 #define TM_TYPE_TC_EXE 1
91 #define TM_TYPE_HK 3
99 #define TM_TYPE_HK 3
100 #define TM_TYPE_PARAMETER_DUMP 3
92 #define TM_TYPE_LFR_SCIENCE 21
101 #define TM_TYPE_LFR_SCIENCE 21
93
102
94 // TM SUBTYPES
103 // TM SUBTYPES
95 #define TM_SUBTYPE_EXE_OK 7
104 #define TM_SUBTYPE_EXE_OK 7
96 #define TM_SUBTYPE_EXE_NOK 8
105 #define TM_SUBTYPE_EXE_NOK 8
97 #define TM_SUBTYPE_HK 25
106 #define TM_SUBTYPE_HK 25
107 #define TM_SUBTYPE_PARAMETER_DUMP 25
98 #define TM_SUBTYPE_SCIENCE 3
108 #define TM_SUBTYPE_SCIENCE 3
99 #define TM_SUBTYPE_LFR_SCIENCE 3
109 #define TM_SUBTYPE_LFR_SCIENCE 3
100
110
101 // TM SID
111 // TM SID
102 #define SID_DEFAULT 0
112 #define SID_DEFAULT 0
113 #define SID_EXE_INC 5
114 #define SID_NOT_EXE 42000 // 0xa4 0x10
115 #define SID_NOT_IMP 42002 // 0xa4 0x12
116 #define SID_EXE_ERR 42003 // 0xa4 0x13
117 #define SID_EXE_CORR 42005 // 0xa4 0x15
103 #define SID_HK 1
118 #define SID_HK 1
104 #define SID_EXE_INC 5
119 #define SID_PARAMETER_DUMP 10
105 #define SID_NOT_EXE 40000
106 #define SID_NOT_IMP 40002
107 #define SID_EXE_ERR 40003
108 #define SID_EXE_CORR 40005
109
120
110 #define SID_NORM_SWF_F0 3
121 #define SID_NORM_SWF_F0 3
111 #define SID_NORM_SWF_F1 4
122 #define SID_NORM_SWF_F1 4
112 #define SID_NORM_SWF_F2 5
123 #define SID_NORM_SWF_F2 5
113 #define SID_NORM_CWF_F3 1
124 #define SID_NORM_CWF_F3 1
114 #define SID_BURST_CWF_F2 2
125 #define SID_BURST_CWF_F2 2
115 #define SID_SBM1_CWF_F1 24
126 #define SID_SBM1_CWF_F1 24
116 #define SID_SBM2_CWF_F2 25
127 #define SID_SBM2_CWF_F2 25
117 #define SID_NORM_ASM_F0 11
128 #define SID_NORM_ASM_F0 11
118 #define SID_NORM_ASM_F1 12
129 #define SID_NORM_ASM_F1 12
119 #define SID_NORM_ASM_F2 13
130 #define SID_NORM_ASM_F2 13
120 #define SID_NORM_BP1_F0 14
131 #define SID_NORM_BP1_F0 14
121 #define SID_NORM_BP1_F1 15
132 #define SID_NORM_BP1_F1 15
122 #define SID_NORM_BP1_F2 16
133 #define SID_NORM_BP1_F2 16
123 #define SID_NORM_BP2_F0 19
134 #define SID_NORM_BP2_F0 19
124 #define SID_NORM_BP2_F1 20
135 #define SID_NORM_BP2_F1 20
125 #define SID_NORM_BP2_F2 21
136 #define SID_NORM_BP2_F2 21
126 #define SID_BURST_BP1_F0 17
137 #define SID_BURST_BP1_F0 17
127 #define SID_BURST_BP2_F0 22
138 #define SID_BURST_BP2_F0 22
128 #define SID_BURST_BP1_F1 18
139 #define SID_BURST_BP1_F1 18
129 #define SID_BURST_BP2_F1 23
140 #define SID_BURST_BP2_F1 23
130 #define SID_SBM1_BP1_F0 28
141 #define SID_SBM1_BP1_F0 28
131 #define SID_SBM1_BP2_F0 31
142 #define SID_SBM1_BP2_F0 31
132 #define SID_SBM2_BP1_F0 29
143 #define SID_SBM2_BP1_F0 29
133 #define SID_SBM2_BP2_F0 32
144 #define SID_SBM2_BP2_F0 32
134 #define SID_SBM1_BP1_F1 30
145 #define SID_SBM1_BP1_F1 30
135 #define SID_SBM1_BP2_F1 33
146 #define SID_SBM1_BP2_F1 33
136
147
137 // LENGTH (BYTES)
148 // LENGTH (BYTES)
138 #define LENGTH_TM_LFR_TC_EXE_MAX 32
149 #define LENGTH_TM_LFR_TC_EXE_MAX 32
139 #define LENGTH_TM_LFR_HK 126
150 #define LENGTH_TM_LFR_HK 126
151
140 // PACKET_LENGTH
152 // PACKET_LENGTH
141 #define PACKET_LENGTH_TC_EXE_SUCCESS 20 - CCSDS_TC_TM_PACKET_OFFSET
153 #define PACKET_LENGTH_TC_EXE_SUCCESS (20 - CCSDS_TC_TM_PACKET_OFFSET)
142 #define PACKET_LENGTH_TC_EXE_INCONSISTENT 26 - CCSDS_TC_TM_PACKET_OFFSET
154 #define PACKET_LENGTH_TC_EXE_INCONSISTENT (26 - CCSDS_TC_TM_PACKET_OFFSET)
143 #define PACKET_LENGTH_TC_EXE_NOT_EXECUTABLE 26 - CCSDS_TC_TM_PACKET_OFFSET
155 #define PACKET_LENGTH_TC_EXE_NOT_EXECUTABLE (26 - CCSDS_TC_TM_PACKET_OFFSET)
144 #define PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED 24 - CCSDS_TC_TM_PACKET_OFFSET
156 #define PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED (24 - CCSDS_TC_TM_PACKET_OFFSET)
145 #define PACKET_LENGTH_TC_EXE_ERROR 24 - CCSDS_TC_TM_PACKET_OFFSET
157 #define PACKET_LENGTH_TC_EXE_ERROR (24 - CCSDS_TC_TM_PACKET_OFFSET)
146 #define PACKET_LENGTH_TC_EXE_CORRUPTED 32 - CCSDS_TC_TM_PACKET_OFFSET
158 #define PACKET_LENGTH_TC_EXE_CORRUPTED (32 - CCSDS_TC_TM_PACKET_OFFSET)
147 #define PACKET_LENGTH_HK 126 - CCSDS_TC_TM_PACKET_OFFSET
159 #define PACKET_LENGTH_HK (126 - CCSDS_TC_TM_PACKET_OFFSET)
148 #define PACKET_LENGTH_PARAMETER_DUMP 28 - CCSDS_TC_TM_PACKET_OFFSET
160 #define PACKET_LENGTH_PARAMETER_DUMP (34 - CCSDS_TC_TM_PACKET_OFFSET)
149 #define TM_HEADER_LEN 16
161 #define TM_HEADER_LEN 16
150
162
163 #define SPARE1_PUSVERSION_SPARE2 0x10
164
151 #define LEN_TM_LFR_HK 126 + 4
165 #define LEN_TM_LFR_HK 126 + 4
152 #define LEN_TM_LFR_TC_EXE_NOT_IMP 24 +4
166 #define LEN_TM_LFR_TC_EXE_NOT_IMP 24 +4
153
167
154 #define TM_LEN_SCI_SWF_340 340 * 12 + 10 + 12 - 1
168 #define TM_LEN_SCI_SWF_340 340 * 12 + 10 + 12 - 1
155 #define TM_LEN_SCI_SWF_8 8 * 12 + 10 + 12 - 1
169 #define TM_LEN_SCI_SWF_8 8 * 12 + 10 + 12 - 1
156 #define TM_LEN_SCI_CWF_340 340 * 12 + 10 + 10 - 1
170 #define TM_LEN_SCI_CWF_340 340 * 12 + 10 + 10 - 1
157 #define TM_LEN_SCI_CWF_8 8 * 12 + 10 + 10 - 1
171 #define TM_LEN_SCI_CWF_8 8 * 12 + 10 + 10 - 1
158
172
159 enum TM_TYPE{
173 enum TM_TYPE{
160 TM_LFR_TC_EXE_OK,
174 TM_LFR_TC_EXE_OK,
161 TM_LFR_TC_EXE_ERR,
175 TM_LFR_TC_EXE_ERR,
162 TM_LFR_HK,
176 TM_LFR_HK,
163 TM_LFR_SCI,
177 TM_LFR_SCI,
164 TM_LFR_SCI_SBM,
178 TM_LFR_SCI_SBM,
165 TM_LFR_PAR_DUMP
179 TM_LFR_PAR_DUMP
166 };
180 };
167
181
168 struct TMHeader_str
182 struct TMHeader_str
169 {
183 {
170 volatile unsigned char targetLogicalAddress;
184 volatile unsigned char targetLogicalAddress;
171 volatile unsigned char protocolIdentifier;
185 volatile unsigned char protocolIdentifier;
172 volatile unsigned char reserved;
186 volatile unsigned char reserved;
173 volatile unsigned char userApplication;
187 volatile unsigned char userApplication;
174 volatile unsigned char packetID[2];
188 volatile unsigned char packetID[2];
175 volatile unsigned char packetSequenceControl[2];
189 volatile unsigned char packetSequenceControl[2];
176 volatile unsigned char packetLength[2];
190 volatile unsigned char packetLength[2];
177 // DATA FIELD HEADER
191 // DATA FIELD HEADER
178 volatile unsigned char spare1_pusVersion_spare2;
192 volatile unsigned char spare1_pusVersion_spare2;
179 volatile unsigned char serviceType;
193 volatile unsigned char serviceType;
180 volatile unsigned char serviceSubType;
194 volatile unsigned char serviceSubType;
181 volatile unsigned char destinationID;
195 volatile unsigned char destinationID;
182 volatile unsigned char time[6];
196 volatile unsigned char time[6];
183 };
197 };
184 typedef struct TMHeader_str TMHeader_t;
198 typedef struct TMHeader_str TMHeader_t;
185
199
186 struct Packet_TM_LFR_TC_EXE_str
200 struct Packet_TM_LFR_TC_EXE_str
187 {
201 {
188 volatile unsigned char targetLogicalAddress;
202 volatile unsigned char targetLogicalAddress;
189 volatile unsigned char protocolIdentifier;
203 volatile unsigned char protocolIdentifier;
190 volatile unsigned char reserved;
204 volatile unsigned char reserved;
191 volatile unsigned char userApplication;
205 volatile unsigned char userApplication;
192 volatile unsigned char packetID[2];
206 volatile unsigned char packetID[2];
193 volatile unsigned char packetSequenceControl[2];
207 volatile unsigned char packetSequenceControl[2];
194 volatile unsigned char packetLength[2];
208 volatile unsigned char packetLength[2];
195 // DATA FIELD HEADER
209 // DATA FIELD HEADER
196 volatile unsigned char spare1_pusVersion_spare2;
210 volatile unsigned char spare1_pusVersion_spare2;
197 volatile unsigned char serviceType;
211 volatile unsigned char serviceType;
198 volatile unsigned char serviceSubType;
212 volatile unsigned char serviceSubType;
199 volatile unsigned char destinationID;
213 volatile unsigned char destinationID;
200 volatile unsigned char time[6];
214 volatile unsigned char time[6];
201 volatile unsigned char data[LENGTH_TM_LFR_TC_EXE_MAX - 10 + 1];
215 volatile unsigned char data[LENGTH_TM_LFR_TC_EXE_MAX - 10 + 1];
202 };
216 };
203 typedef struct Packet_TM_LFR_TC_EXE_str Packet_TM_LFR_TC_EXE_t;
217 typedef struct Packet_TM_LFR_TC_EXE_str Packet_TM_LFR_TC_EXE_t;
204
218
205 struct Header_TM_LFR_SCIENCE_SWF_str
219 struct Header_TM_LFR_SCIENCE_SWF_str
206 {
220 {
207 volatile unsigned char targetLogicalAddress;
221 volatile unsigned char targetLogicalAddress;
208 volatile unsigned char protocolIdentifier;
222 volatile unsigned char protocolIdentifier;
209 volatile unsigned char reserved;
223 volatile unsigned char reserved;
210 volatile unsigned char userApplication;
224 volatile unsigned char userApplication;
211 volatile unsigned char packetID[2];
225 volatile unsigned char packetID[2];
212 volatile unsigned char packetSequenceControl[2];
226 volatile unsigned char packetSequenceControl[2];
213 volatile unsigned char packetLength[2];
227 volatile unsigned char packetLength[2];
214 // DATA FIELD HEADER
228 // DATA FIELD HEADER
215 volatile unsigned char spare1_pusVersion_spare2;
229 volatile unsigned char spare1_pusVersion_spare2;
216 volatile unsigned char serviceType;
230 volatile unsigned char serviceType;
217 volatile unsigned char serviceSubType;
231 volatile unsigned char serviceSubType;
218 volatile unsigned char destinationID;
232 volatile unsigned char destinationID;
219 volatile unsigned char time[6];
233 volatile unsigned char time[6];
220 // AUXILIARY HEADER
234 // AUXILIARY HEADER
221 volatile unsigned char sid;
235 volatile unsigned char sid;
222 volatile unsigned char hkBIA;
236 volatile unsigned char hkBIA;
223 volatile unsigned char pktCnt;
237 volatile unsigned char pktCnt;
224 volatile unsigned char pktNr;
238 volatile unsigned char pktNr;
225 volatile unsigned char acquisitionTime[6];
239 volatile unsigned char acquisitionTime[6];
226 volatile unsigned char blkNr[2];
240 volatile unsigned char blkNr[2];
227 };
241 };
228 typedef struct Header_TM_LFR_SCIENCE_SWF_str Header_TM_LFR_SCIENCE_SWF_t;
242 typedef struct Header_TM_LFR_SCIENCE_SWF_str Header_TM_LFR_SCIENCE_SWF_t;
229
243
230 struct Header_TM_LFR_SCIENCE_CWF_str
244 struct Header_TM_LFR_SCIENCE_CWF_str
231 {
245 {
232 volatile unsigned char targetLogicalAddress;
246 volatile unsigned char targetLogicalAddress;
233 volatile unsigned char protocolIdentifier;
247 volatile unsigned char protocolIdentifier;
234 volatile unsigned char reserved;
248 volatile unsigned char reserved;
235 volatile unsigned char userApplication;
249 volatile unsigned char userApplication;
236 volatile unsigned char packetID[2];
250 volatile unsigned char packetID[2];
237 volatile unsigned char packetSequenceControl[2];
251 volatile unsigned char packetSequenceControl[2];
238 volatile unsigned char packetLength[2];
252 volatile unsigned char packetLength[2];
239 // DATA FIELD HEADER
253 // DATA FIELD HEADER
240 volatile unsigned char spare1_pusVersion_spare2;
254 volatile unsigned char spare1_pusVersion_spare2;
241 volatile unsigned char serviceType;
255 volatile unsigned char serviceType;
242 volatile unsigned char serviceSubType;
256 volatile unsigned char serviceSubType;
243 volatile unsigned char destinationID;
257 volatile unsigned char destinationID;
244 volatile unsigned char time[6];
258 volatile unsigned char time[6];
245 // AUXILIARY DATA HEADER
259 // AUXILIARY DATA HEADER
246 volatile unsigned char sid;
260 volatile unsigned char sid;
247 volatile unsigned char hkBIA;
261 volatile unsigned char hkBIA;
248 volatile unsigned char acquisitionTime[6];
262 volatile unsigned char acquisitionTime[6];
249 volatile unsigned char blkNr[2];
263 volatile unsigned char blkNr[2];
250 };
264 };
251 typedef struct Header_TM_LFR_SCIENCE_CWF_str Header_TM_LFR_SCIENCE_CWF_t;
265 typedef struct Header_TM_LFR_SCIENCE_CWF_str Header_TM_LFR_SCIENCE_CWF_t;
252
266
253 struct ccsdsTelecommandPacket_str
267 struct ccsdsTelecommandPacket_str
254 {
268 {
255 //unsigned char targetLogicalAddress; // removed by the grspw module
269 //unsigned char targetLogicalAddress; // removed by the grspw module
256 volatile unsigned char protocolIdentifier;
270 volatile unsigned char protocolIdentifier;
257 volatile unsigned char reserved;
271 volatile unsigned char reserved;
258 volatile unsigned char userApplication;
272 volatile unsigned char userApplication;
259 volatile unsigned char packetID[2];
273 volatile unsigned char packetID[2];
260 volatile unsigned char packetSequenceControl[2];
274 volatile unsigned char packetSequenceControl[2];
261 volatile unsigned char packetLength[2];
275 volatile unsigned char packetLength[2];
262 // DATA FIELD HEADER
276 // DATA FIELD HEADER
263 volatile unsigned char headerFlag_pusVersion_Ack;
277 volatile unsigned char headerFlag_pusVersion_Ack;
264 volatile unsigned char serviceType;
278 volatile unsigned char serviceType;
265 volatile unsigned char serviceSubType;
279 volatile unsigned char serviceSubType;
266 volatile unsigned char sourceID;
280 volatile unsigned char sourceID;
267 volatile unsigned char dataAndCRC[CCSDS_TC_PKT_MAX_SIZE-10];
281 volatile unsigned char dataAndCRC[CCSDS_TC_PKT_MAX_SIZE-10];
268 };
282 };
269 typedef struct ccsdsTelecommandPacket_str ccsdsTelecommandPacket_t;
283 typedef struct ccsdsTelecommandPacket_str ccsdsTelecommandPacket_t;
270
284
271 struct Packet_TM_LFR_HK_str
285 struct Packet_TM_LFR_HK_str
272 {
286 {
273 volatile unsigned char targetLogicalAddress;
287 volatile unsigned char targetLogicalAddress;
274 volatile unsigned char protocolIdentifier;
288 volatile unsigned char protocolIdentifier;
275 volatile unsigned char reserved;
289 volatile unsigned char reserved;
276 volatile unsigned char userApplication;
290 volatile unsigned char userApplication;
277 volatile unsigned char packetID[2];
291 volatile unsigned char packetID[2];
278 volatile unsigned char packetSequenceControl[2];
292 volatile unsigned char packetSequenceControl[2];
279 volatile unsigned char packetLength[2];
293 volatile unsigned char packetLength[2];
280 volatile unsigned char dataFieldHeader[10];
294 volatile unsigned char dataFieldHeader[10];
281 volatile unsigned char sid;
295 volatile unsigned char sid;
282
296
283 //**************
297 //**************
284 // HK PARAMETERS
298 // HK PARAMETERS
285 unsigned char lfr_status_word[2];
299 unsigned char lfr_status_word[2];
286 unsigned char lfr_sw_version[4];
300 unsigned char lfr_sw_version[4];
287 // tc statistics
301 // tc statistics
288 unsigned char hk_lfr_update_info_tc_cnt[2];
302 unsigned char hk_lfr_update_info_tc_cnt[2];
289 unsigned char hk_lfr_update_time_tc_cnt[2];
303 unsigned char hk_lfr_update_time_tc_cnt[2];
290 unsigned char hk_dpu_exe_tc_lfr_cnt[2];
304 unsigned char hk_dpu_exe_tc_lfr_cnt[2];
291 unsigned char hk_dpu_rej_tc_lfr_cnt[2];
305 unsigned char hk_dpu_rej_tc_lfr_cnt[2];
292 unsigned char hk_lfr_last_exe_tc_id[2];
306 unsigned char hk_lfr_last_exe_tc_id[2];
293 unsigned char hk_lfr_last_exe_tc_type[2];
307 unsigned char hk_lfr_last_exe_tc_type[2];
294 unsigned char hk_lfr_last_exe_tc_subtype[2];
308 unsigned char hk_lfr_last_exe_tc_subtype[2];
295 unsigned char hk_lfr_last_exe_tc_time[6];
309 unsigned char hk_lfr_last_exe_tc_time[6];
296 unsigned char hk_lfr_last_rej_tc_id[2];
310 unsigned char hk_lfr_last_rej_tc_id[2];
297 unsigned char hk_lfr_last_rej_tc_type[2];
311 unsigned char hk_lfr_last_rej_tc_type[2];
298 unsigned char hk_lfr_last_rej_tc_subtype[2];
312 unsigned char hk_lfr_last_rej_tc_subtype[2];
299 unsigned char hk_lfr_last_rej_tc_time[6];
313 unsigned char hk_lfr_last_rej_tc_time[6];
300 // anomaly statistics
314 // anomaly statistics
301 unsigned char hk_lfr_le_cnt[2];
315 unsigned char hk_lfr_le_cnt[2];
302 unsigned char hk_lfr_me_cnt[2];
316 unsigned char hk_lfr_me_cnt[2];
303 unsigned char hk_lfr_he_cnt[2];
317 unsigned char hk_lfr_he_cnt[2];
304 unsigned char hk_lfr_last_er_rid[2];
318 unsigned char hk_lfr_last_er_rid[2];
305 unsigned char hk_lfr_last_er_code;
319 unsigned char hk_lfr_last_er_code;
306 unsigned char hk_lfr_last_er_time[6];
320 unsigned char hk_lfr_last_er_time[6];
307 // vhdl_blk_status
321 // vhdl_blk_status
308 unsigned char hk_lfr_vhdl_aa_sm;
322 unsigned char hk_lfr_vhdl_aa_sm;
309 unsigned char hk_lfr_vhdl_fft_sr;
323 unsigned char hk_lfr_vhdl_fft_sr;
310 unsigned char hk_lfr_vhdl_cic_hk;
324 unsigned char hk_lfr_vhdl_cic_hk;
311 unsigned char hk_lfr_vhdl_iir_cal;
325 unsigned char hk_lfr_vhdl_iir_cal;
312 // spacewire_if_statistics
326 // spacewire_if_statistics
313 unsigned char hk_lfr_dpu_spw_pkt_rcv_cnt[2];
327 unsigned char hk_lfr_dpu_spw_pkt_rcv_cnt[2];
314 unsigned char hk_lfr_dpu_spw_pkt_sent_cnt[2];
328 unsigned char hk_lfr_dpu_spw_pkt_sent_cnt[2];
315 unsigned char hk_lfr_dpu_spw_tick_out_cnt;
329 unsigned char hk_lfr_dpu_spw_tick_out_cnt;
316 unsigned char hk_lfr_dpu_spw_last_timc;
330 unsigned char hk_lfr_dpu_spw_last_timc;
317 // ahb error statistics
331 // ahb error statistics
318 unsigned int hk_lfr_last_fail_addr;
332 unsigned int hk_lfr_last_fail_addr;
319 // temperatures
333 // temperatures
320 unsigned char hk_lfr_temp_scm[2];
334 unsigned char hk_lfr_temp_scm[2];
321 unsigned char hk_lfr_temp_pcb[2];
335 unsigned char hk_lfr_temp_pcb[2];
322 unsigned char hk_lfr_temp_fpga[2];
336 unsigned char hk_lfr_temp_fpga[2];
323 // error counters
337 // error counters
324 unsigned char hk_lfr_dpu_spw_parity;
338 unsigned char hk_lfr_dpu_spw_parity;
325 unsigned char hk_lfr_dpu_spw_disconnect;
339 unsigned char hk_lfr_dpu_spw_disconnect;
326 unsigned char hk_lfr_dpu_spw_escape;
340 unsigned char hk_lfr_dpu_spw_escape;
327 unsigned char hk_lfr_dpu_spw_credit;
341 unsigned char hk_lfr_dpu_spw_credit;
328 unsigned char hk_lfr_dpu_spw_write_sync;
342 unsigned char hk_lfr_dpu_spw_write_sync;
329 unsigned char hk_lfr_dpu_spw_rx_ahb;
343 unsigned char hk_lfr_dpu_spw_rx_ahb;
330 unsigned char hk_lfr_dpu_spw_tx_ahb;
344 unsigned char hk_lfr_dpu_spw_tx_ahb;
331 unsigned char hk_lfr_dpu_spw_header_crc;
345 unsigned char hk_lfr_dpu_spw_header_crc;
332 unsigned char hk_lfr_dpu_spw_data_crc;
346 unsigned char hk_lfr_dpu_spw_data_crc;
333 unsigned char hk_lfr_dpu_spw_early_eop;
347 unsigned char hk_lfr_dpu_spw_early_eop;
334 unsigned char hk_lfr_dpu_spw_invalid_addr;
348 unsigned char hk_lfr_dpu_spw_invalid_addr;
335 unsigned char hk_lfr_dpu_spw_eep;
349 unsigned char hk_lfr_dpu_spw_eep;
336 unsigned char hk_lfr_dpu_spw_rx_too_big;
350 unsigned char hk_lfr_dpu_spw_rx_too_big;
337 // timecode
351 // timecode
338 unsigned char hk_lfr_timecode_erroneous;
352 unsigned char hk_lfr_timecode_erroneous;
339 unsigned char hk_lfr_timecode_missing;
353 unsigned char hk_lfr_timecode_missing;
340 unsigned char hk_lfr_timecode_invalid;
354 unsigned char hk_lfr_timecode_invalid;
341 // time
355 // time
342 unsigned char hk_lfr_time_timecode_it;
356 unsigned char hk_lfr_time_timecode_it;
343 unsigned char hk_lfr_time_not_synchro;
357 unsigned char hk_lfr_time_not_synchro;
344 unsigned char hk_lfr_time_timecode_ctr;
358 unsigned char hk_lfr_time_timecode_ctr;
345 // hk_lfr_buffer_dpu_
359 // hk_lfr_buffer_dpu_
346 unsigned char hk_lfr_buffer_dpu_tc_fifo;
360 unsigned char hk_lfr_buffer_dpu_tc_fifo;
347 unsigned char hk_lfr_buffer_dpu_tm_fifo;
361 unsigned char hk_lfr_buffer_dpu_tm_fifo;
348 // hk_lfr_ahb_
362 // hk_lfr_ahb_
349 unsigned char hk_lfr_ahb_correctable;
363 unsigned char hk_lfr_ahb_correctable;
350 unsigned char hk_lfr_ahb_uncorrectable;
364 unsigned char hk_lfr_ahb_uncorrectable;
351 unsigned char hk_lfr_ahb_fails_trans;
365 unsigned char hk_lfr_ahb_fails_trans;
352 // hk_lfr_adc_
366 // hk_lfr_adc_
353 unsigned char hk_lfr_adc_failure;
367 unsigned char hk_lfr_adc_failure;
354 unsigned char hk_lfr_adc_timeout;
368 unsigned char hk_lfr_adc_timeout;
355 unsigned char hk_lfr_toomany_err;
369 unsigned char hk_lfr_toomany_err;
356 // hk_lfr_cpu_
370 // hk_lfr_cpu_
357 unsigned char hk_lfr_cpu_write_err;
371 unsigned char hk_lfr_cpu_write_err;
358 unsigned char hk_lfr_cpu_ins_access_err;
372 unsigned char hk_lfr_cpu_ins_access_err;
359 unsigned char hk_lfr_cpu_illegal_ins;
373 unsigned char hk_lfr_cpu_illegal_ins;
360 unsigned char hk_lfr_cpu_privilegied_ins;
374 unsigned char hk_lfr_cpu_privilegied_ins;
361 unsigned char hk_lfr_cpu_register_hw;
375 unsigned char hk_lfr_cpu_register_hw;
362 unsigned char hk_lfr_cpu_not_aligned;
376 unsigned char hk_lfr_cpu_not_aligned;
363 unsigned char hk_lfr_cpu_data_exception;
377 unsigned char hk_lfr_cpu_data_exception;
364 unsigned char hk_lfr_cpu_div_exception;
378 unsigned char hk_lfr_cpu_div_exception;
365 unsigned char hk_lfr_cpu_arith_overflow;
379 unsigned char hk_lfr_cpu_arith_overflow;
366 };
380 };
367 typedef struct Packet_TM_LFR_HK_str Packet_TM_LFR_HK_t;
381 typedef struct Packet_TM_LFR_HK_str Packet_TM_LFR_HK_t;
368
382
383 struct Packet_TM_LFR_PARAMETER_DUMP_str
384 {
385 volatile unsigned char targetLogicalAddress;
386 volatile unsigned char protocolIdentifier;
387 volatile unsigned char reserved;
388 volatile unsigned char userApplication;
389 volatile unsigned char packetID[2];
390 volatile unsigned char packetSequenceControl[2];
391 volatile unsigned char packetLength[2];
392 // DATA FIELD HEADER
393 volatile unsigned char spare1_pusVersion_spare2;
394 volatile unsigned char serviceType;
395 volatile unsigned char serviceSubType;
396 volatile unsigned char destinationID;
397 volatile unsigned char time[6];
398 volatile unsigned char sid;
399
400 //******************
401 // COMMON PARAMETERS
402 volatile unsigned char unused0;
403 volatile unsigned char bw_sp0_sp1_r0_r1;
404
405 //******************
406 // NORMAL PARAMETERS
407 volatile unsigned char sy_lfr_n_swf_l[2];
408 volatile unsigned char sy_lfr_n_swf_p[2];
409 volatile unsigned char sy_lfr_n_asm_p[2];
410 volatile unsigned char sy_lfr_n_bp_p0;
411 volatile unsigned char sy_lfr_n_bp_p1;
412
413 //*****************
414 // BURST PARAMETERS
415 volatile unsigned char sy_lfr_b_bp_p0;
416 volatile unsigned char sy_lfr_b_bp_p1;
417
418 //****************
419 // SBM1 PARAMETERS
420 volatile unsigned char sy_lfr_s1_bp_p0;
421 volatile unsigned char sy_lfr_s1_bp_p1;
422
423 //****************
424 // SBM2 PARAMETERS
425 volatile unsigned char sy_lfr_s2_bp_p0;
426 volatile unsigned char sy_lfr_s2_bp_p1;
427 };
428 typedef struct Packet_TM_LFR_PARAMETER_DUMP_str Packet_TM_LFR_PARAMETER_DUMP_t;
429
430
369 #endif // CCSDS_H_INCLUDED
431 #endif // CCSDS_H_INCLUDED
@@ -1,67 +1,64
1 #ifndef FSW_RTEMS_H_INCLUDED
1 #ifndef FSW_RTEMS_H_INCLUDED
2 #define FSW_RTEMS_H_INCLUDED
2 #define FSW_RTEMS_H_INCLUDED
3
3
4 #include <errno.h>
4 #include <errno.h>
5 #include <fcntl.h>
5 #include <fcntl.h>
6 #include <stdio.h>
6 #include <stdio.h>
7 #include <stdlib.h>
7 #include <stdlib.h>
8
8
9 #include <grspw.h>
9 #include <grspw.h>
10 #include <apbuart.h>
10 #include <apbuart.h>
11
11
12 #include <fsw_params.h>
12 #include <fsw_params.h>
13 #include <fsw_misc.h>
13 #include <fsw_misc.h>
14 #include <fsw_processing.h>
14 #include <fsw_processing.h>
15 #include <tc_handler.h>
15 #include <tc_handler.h>
16 #include <wf_handler.h>
16 #include <wf_handler.h>
17 #include <grlib_regs.h>
17 #include <grlib_regs.h>
18 #include <ccsds_types.h>
18 #include <ccsds_types.h>
19
19
20 extern int sched_yield( void );
20 extern int sched_yield( void );
21 extern int errno;
21 extern int errno;
22 extern rtems_id Task_id[ ]; /* array of task ids */
22 extern rtems_id Task_id[ ]; /* array of task ids */
23 extern rtems_name Task_name[ ]; /* array of task names */
23 extern rtems_name Task_name[ ]; /* array of task names */
24 extern rtems_name misc_name[ ]; /* arry of miscellaneous names for rtems objects */
24 extern rtems_name misc_name[ ]; /* arry of miscellaneous names for rtems objects */
25 extern int fdSPW; // grspw file descriptor
25 extern int fdSPW; // grspw file descriptor
26 extern int fdUART; // uart file descriptor
26 extern int fdUART; // uart file descriptor
27
27
28 void timecode_irq_handler(void *pDev, void *regs, int minor, unsigned int tc);
28 void timecode_irq_handler(void *pDev, void *regs, int minor, unsigned int tc);
29
29
30 // MODE PARAMETERS
30 // MODE PARAMETERS
31 extern struct param_local_str param_local;
31 extern struct param_local_str param_local;
32 extern struct param_common_str param_common;
32 extern Packet_TM_LFR_PARAMETER_DUMP_t parameter_dump_packet;
33 extern struct param_norm_str param_norm;
34 extern struct param_burst_str param_burst;
35 extern struct param_sbm1_str param_sbm1;
36 extern struct param_sbm2_str param_sbm2;
37 extern Packet_TM_LFR_HK_t housekeeping_packet;
33 extern Packet_TM_LFR_HK_t housekeeping_packet;
38 extern unsigned short sequenceCounters[SEQ_CNT_NB_PID][SEQ_CNT_NB_CAT][SEQ_CNT_NB_DEST_ID];
34 extern unsigned short sequenceCounters[SEQ_CNT_NB_PID][SEQ_CNT_NB_CAT][SEQ_CNT_NB_DEST_ID];
39
35
40 // RTEMS TASKS
36 // RTEMS TASKS
41 rtems_task Init( rtems_task_argument argument); /* forward declaration needed */
37 rtems_task Init( rtems_task_argument argument); /* forward declaration needed */
42 rtems_task recv_task(rtems_task_argument argument);
38 rtems_task recv_task(rtems_task_argument argument);
43 rtems_task spiq_task(rtems_task_argument argument);
39 rtems_task spiq_task(rtems_task_argument argument);
44 rtems_task stat_task(rtems_task_argument argument);
40 rtems_task stat_task(rtems_task_argument argument);
45 rtems_task wfrm_task(rtems_task_argument argument);
41 rtems_task wfrm_task(rtems_task_argument argument);
46 int create_names( void );
42 int create_names( void );
47 int create_all_tasks( void );
43 int create_all_tasks( void );
48 int start_all_tasks( void );
44 int start_all_tasks( void );
49 int create_message_queue( void );
45 int create_message_queue( void );
50
46
51 // OTHER functions
47 // OTHER functions
52 void init_default_mode_parameters( void );
48 void init_parameter_dump( void );
49 void init_local_mode_parameters( void );
53 void init_housekeeping_parameters( void );
50 void init_housekeeping_parameters( void );
54
51
55 int spacewire_configure_link( void );
52 int spacewire_configure_link( void );
56 int spacewire_wait_for_link(void);
53 int spacewire_wait_for_link(void);
57 void spacewire_set_NP(unsigned char val, unsigned int regAddr); // No Port force
54 void spacewire_set_NP(unsigned char val, unsigned int regAddr); // No Port force
58 void spacewire_set_RE(unsigned char val, unsigned int regAddr); // RMAP Enable
55 void spacewire_set_RE(unsigned char val, unsigned int regAddr); // RMAP Enable
59 void spacewire_compute_stats_offsets();
56 void spacewire_compute_stats_offsets();
60
57
61 extern int rtems_cpu_usage_report( void );
58 extern int rtems_cpu_usage_report( void );
62 extern int rtems_cpu_usage_reset( void );
59 extern int rtems_cpu_usage_reset( void );
63
60
64 rtems_status_code write_spw(spw_ioctl_pkt_send* spw_ioctl_send);
61 rtems_status_code write_spw(spw_ioctl_pkt_send* spw_ioctl_send);
65 void (*grspw_timecode_callback) (void *pDev, void *regs, int minor, unsigned int tc);
62 void (*grspw_timecode_callback) (void *pDev, void *regs, int minor, unsigned int tc);
66
63
67 #endif // FSW_RTEMS_CONFIG_H_INCLUDED
64 #endif // FSW_RTEMS_CONFIG_H_INCLUDED
@@ -1,175 +1,150
1 #ifndef FSW_RTEMS_CONFIG_H_INCLUDED
1 #ifndef FSW_RTEMS_CONFIG_H_INCLUDED
2 #define FSW_RTEMS_CONFIG_H_INCLUDED
2 #define FSW_RTEMS_CONFIG_H_INCLUDED
3
3
4 #define GRSPW_DEVICE_NAME "/dev/grspw0"
4 #define GRSPW_DEVICE_NAME "/dev/grspw0"
5 #define UART_DEVICE_NAME "/dev/console"
5 #define UART_DEVICE_NAME "/dev/console"
6
6
7 //************************
7 //************************
8 // flight software version
8 // flight software version
9 // this parameters is handled by the Qt project options
9 // this parameters is handled by the Qt project options
10
10
11 //**********
11 //**********
12 // LFR MODES
12 // LFR MODES
13 #define LFR_MODE_STANDBY 0
13 #define LFR_MODE_STANDBY 0
14 #define LFR_MODE_NORMAL 1
14 #define LFR_MODE_NORMAL 1
15 #define LFR_MODE_BURST 2
15 #define LFR_MODE_BURST 2
16 #define LFR_MODE_SBM1 3
16 #define LFR_MODE_SBM1 3
17 #define LFR_MODE_SBM2 4
17 #define LFR_MODE_SBM2 4
18
18
19 #define RTEMS_EVENT_MODE_STANDBY RTEMS_EVENT_0
19 #define RTEMS_EVENT_MODE_STANDBY RTEMS_EVENT_0
20 #define RTEMS_EVENT_MODE_NORMAL RTEMS_EVENT_1
20 #define RTEMS_EVENT_MODE_NORMAL RTEMS_EVENT_1
21 #define RTEMS_EVENT_MODE_BURST RTEMS_EVENT_2
21 #define RTEMS_EVENT_MODE_BURST RTEMS_EVENT_2
22 #define RTEMS_EVENT_MODE_SBM1 RTEMS_EVENT_3
22 #define RTEMS_EVENT_MODE_SBM1 RTEMS_EVENT_3
23 #define RTEMS_EVENT_MODE_SBM2 RTEMS_EVENT_4
23 #define RTEMS_EVENT_MODE_SBM2 RTEMS_EVENT_4
24
24
25 //****************************
25 //****************************
26 // LFR DEFAULT MODE PARAMETERS
26 // LFR DEFAULT MODE PARAMETERS
27 // COMMON
28 #define DEFAULT_SY_LFR_COMMON0 0x00
29 #define DEFAULT_SY_LFR_COMMON1 0x10 // default value 0 0 0 1 0 0 0 0
27 // NORM
30 // NORM
28 #define DEFAULT_SY_LFR_N_SWF_L 2048 // nb sample
31 #define DEFAULT_SY_LFR_N_SWF_L 2048 // nb sample
29 #define DEFAULT_SY_LFR_N_SWF_P 16 // sec
32 #define DEFAULT_SY_LFR_N_SWF_P 16 // sec
30 #define DEFAULT_SY_LFR_N_ASM_P 3600 // sec
33 #define DEFAULT_SY_LFR_N_ASM_P 3600 // sec
31 #define DEFAULT_SY_LFR_N_BP_P0 4 // sec
34 #define DEFAULT_SY_LFR_N_BP_P0 4 // sec
32 #define DEFAULT_SY_LFR_N_BP_P1 20 // sec
35 #define DEFAULT_SY_LFR_N_BP_P1 20 // sec
33 // BURST
36 // BURST
34 #define DEFAULT_SY_LFR_B_BP_P0 1 // sec
37 #define DEFAULT_SY_LFR_B_BP_P0 1 // sec
35 #define DEFAULT_SY_LFR_B_BP_P1 5 // sec
38 #define DEFAULT_SY_LFR_B_BP_P1 5 // sec
36 // SBM1
39 // SBM1
37 #define DEFAULT_SY_LFR_S1_BP_P0 1 // sec
40 #define DEFAULT_SY_LFR_S1_BP_P0 1 // sec
38 #define DEFAULT_SY_LFR_S1_BP_P1 1 // sec
41 #define DEFAULT_SY_LFR_S1_BP_P1 1 // sec
39 // SBM2
42 // SBM2
40 #define DEFAULT_SY_LFR_S2_BP_P0 1 // sec
43 #define DEFAULT_SY_LFR_S2_BP_P0 1 // sec
41 #define DEFAULT_SY_LFR_S2_BP_P1 5 // sec
44 #define DEFAULT_SY_LFR_S2_BP_P1 5 // sec
42
45
43 //*****************************
46 //*****************************
44 // APB REGISTERS BASE ADDRESSES
47 // APB REGISTERS BASE ADDRESSES
45 #define REGS_ADDR_APBUART 0x80000100
48 #define REGS_ADDR_APBUART 0x80000100
46 #define REGS_ADDR_GPTIMER 0x80000300
49 #define REGS_ADDR_GPTIMER 0x80000300
47 #define REGS_ADDR_GRSPW 0x80000500
50 #define REGS_ADDR_GRSPW 0x80000500
48 #define REGS_ADDR_TIME_MANAGEMENT 0x80000600
51 #define REGS_ADDR_TIME_MANAGEMENT 0x80000600
49 #define REGS_ADDR_SPECTRAL_MATRICES 0x80000700
52 #define REGS_ADDR_SPECTRAL_MATRICES 0x80000700
50 #define REGS_ADDR_WAVEFORM_PICKER 0x80000f20
53 #define REGS_ADDR_WAVEFORM_PICKER 0x80000f20
51
54
52 #define APBUART_CTRL_REG_MASK_DB 0xfffff7ff
55 #define APBUART_CTRL_REG_MASK_DB 0xfffff7ff
53 #define APBUART_SCALER_RELOAD_VALUE 0x00000050 // 25 MHz => about 38400 (0x50)
56 #define APBUART_SCALER_RELOAD_VALUE 0x00000050 // 25 MHz => about 38400 (0x50)
54
57
55 //**********
58 //**********
56 // IRQ LINES
59 // IRQ LINES
57 #define IRQ_SM 9
60 #define IRQ_SM 9
58 #define IRQ_SPARC_SM 0x19 // see sparcv8.pdf p.76 for interrupt levels
61 #define IRQ_SPARC_SM 0x19 // see sparcv8.pdf p.76 for interrupt levels
59 #define IRQ_WF 10
62 #define IRQ_WF 10
60 #define IRQ_SPARC_WF 0x1a // see sparcv8.pdf p.76 for interrupt levels
63 #define IRQ_SPARC_WF 0x1a // see sparcv8.pdf p.76 for interrupt levels
61 #define IRQ_TIME1 12
64 #define IRQ_TIME1 12
62 #define IRQ_SPARC_TIME1 0x1c // see sparcv8.pdf p.76 for interrupt levels
65 #define IRQ_SPARC_TIME1 0x1c // see sparcv8.pdf p.76 for interrupt levels
63 #define IRQ_TIME2 13
66 #define IRQ_TIME2 13
64 #define IRQ_SPARC_TIME2 0x1d // see sparcv8.pdf p.76 for interrupt levels
67 #define IRQ_SPARC_TIME2 0x1d // see sparcv8.pdf p.76 for interrupt levels
65 #define IRQ_WAVEFORM_PICKER 14
68 #define IRQ_WAVEFORM_PICKER 14
66 #define IRQ_SPARC_WAVEFORM_PICKER 0x1e // see sparcv8.pdf p.76 for interrupt levels
69 #define IRQ_SPARC_WAVEFORM_PICKER 0x1e // see sparcv8.pdf p.76 for interrupt levels
67
70
68 //*****
71 //*****
69 // TIME
72 // TIME
70 #define CLKDIV_SM_SIMULATOR 9999
73 #define CLKDIV_SM_SIMULATOR 9999
71 #define CLKDIV_WF_SIMULATOR 9999999
74 #define CLKDIV_WF_SIMULATOR 9999999
72 #define TIMER_SM_SIMULATOR 1
75 #define TIMER_SM_SIMULATOR 1
73 #define TIMER_WF_SIMULATOR 2
76 #define TIMER_WF_SIMULATOR 2
74 #define HK_PERIOD 100 // 100 * 10ms => 1sec
77 #define HK_PERIOD 100 // 100 * 10ms => 1sec
75
78
76 //**********
79 //**********
77 // LPP CODES
80 // LPP CODES
78 #define LFR_SUCCESSFUL 0
81 #define LFR_SUCCESSFUL 0
79 #define LFR_DEFAULT 1
82 #define LFR_DEFAULT 1
80
83
81 //******
84 //******
82 // RTEMS
85 // RTEMS
83 #define TASKID_RECV 1
86 #define TASKID_RECV 1
84 #define TASKID_ACTN 2
87 #define TASKID_ACTN 2
85 #define TASKID_SPIQ 3
88 #define TASKID_SPIQ 3
86 #define TASKID_SMIQ 4
89 #define TASKID_SMIQ 4
87 #define TASKID_STAT 5
90 #define TASKID_STAT 5
88 #define TASKID_AVF0 6
91 #define TASKID_AVF0 6
89 #define TASKID_BPF0 7
92 #define TASKID_BPF0 7
90 #define TASKID_WFRM 8
93 #define TASKID_WFRM 8
91 #define TASKID_DUMB 9
94 #define TASKID_DUMB 9
92 #define TASKID_HOUS 10
95 #define TASKID_HOUS 10
93
96
94 #define ACTION_MSG_QUEUE_COUNT 10
97 #define ACTION_MSG_QUEUE_COUNT 10
95
98
96 //*******
99 //*******
97 // MACROS
100 // MACROS
98 #ifdef PRINT_MESSAGES_ON_CONSOLE
101 #ifdef PRINT_MESSAGES_ON_CONSOLE
99 #define PRINTF(x) printf(x);
102 #define PRINTF(x) printf(x);
100 #define PRINTF1(x,y) printf(x,y);
103 #define PRINTF1(x,y) printf(x,y);
101 #define PRINTF2(x,y,z) printf(x,y,z);
104 #define PRINTF2(x,y,z) printf(x,y,z);
102 #else
105 #else
103 #define PRINTF(x) ;
106 #define PRINTF(x) ;
104 #define PRINTF1(x,y) ;
107 #define PRINTF1(x,y) ;
105 #define PRINTF2(x,y,z) ;
108 #define PRINTF2(x,y,z) ;
106 #endif
109 #endif
107
110
108 #define NB_SAMPLES_PER_SNAPSHOT 2048
111 #define NB_SAMPLES_PER_SNAPSHOT 2048
109 #define TIME_OFFSET 2
112 #define TIME_OFFSET 2
110 #define WAVEFORM_EXTENDED_HEADER_OFFSET 22
113 #define WAVEFORM_EXTENDED_HEADER_OFFSET 22
111 #define NB_BYTES_SWF_BLK 2 * 6
114 #define NB_BYTES_SWF_BLK 2 * 6
112 #define NB_WORDS_SWF_BLK 3
115 #define NB_WORDS_SWF_BLK 3
113
116
114 //******************
117 //******************
115 // SEQUENCE COUNTERS
118 // SEQUENCE COUNTERS
116 #define SEQ_CNT_NB_PID 2
119 #define SEQ_CNT_NB_PID 2
117 #define SEQ_CNT_NB_CAT 4
120 #define SEQ_CNT_NB_CAT 4
118 #define SEQ_CNT_NB_DEST_ID 11
121 #define SEQ_CNT_NB_DEST_ID 11
119 // pid
122 // pid
120 #define SEQ_CNT_PID_76 0
123 #define SEQ_CNT_PID_76 0
121 #define SEQ_CNT_PID_79 1
124 #define SEQ_CNT_PID_79 1
122 //cat
125 //cat
123 #define SEQ_CNT_CAT_1 0
126 #define SEQ_CNT_CAT_1 0
124 #define SEQ_CNT_CAT_4 1
127 #define SEQ_CNT_CAT_4 1
125 #define SEQ_CNT_CAT_9 2
128 #define SEQ_CNT_CAT_9 2
126 #define SEQ_CNT_CAT_12 3
129 #define SEQ_CNT_CAT_12 3
127 // destination id
130 // destination id
128 #define SEQ_CNT_DST_ID_GROUND 0
131 #define SEQ_CNT_DST_ID_GROUND 0
129 #define SEQ_CNT_DST_ID_MISSION_TIMELINE 1
132 #define SEQ_CNT_DST_ID_MISSION_TIMELINE 1
130 #define SEQ_CNT_DST_ID_TC_SEQUENCES 2
133 #define SEQ_CNT_DST_ID_TC_SEQUENCES 2
131 #define SEQ_CNT_DST_ID_RECOVERY_ACTION_CMD 3
134 #define SEQ_CNT_DST_ID_RECOVERY_ACTION_CMD 3
132 #define SEQ_CNT_DST_ID_BACKUP_MISSION_TIMELINE 4
135 #define SEQ_CNT_DST_ID_BACKUP_MISSION_TIMELINE 4
133 #define SEQ_CNT_DST_ID_DIRECT_CMD 5
136 #define SEQ_CNT_DST_ID_DIRECT_CMD 5
134 #define SEQ_CNT_DST_ID_SPARE_GRD_SRC1 6
137 #define SEQ_CNT_DST_ID_SPARE_GRD_SRC1 6
135 #define SEQ_CNT_DST_ID_SPARE_GRD_SRC2 7
138 #define SEQ_CNT_DST_ID_SPARE_GRD_SRC2 7
136 #define SEQ_CNT_DST_ID_OBCP 8
139 #define SEQ_CNT_DST_ID_OBCP 8
137 #define SEQ_CNT_DST_ID_SYSTEM_CONTROL 9
140 #define SEQ_CNT_DST_ID_SYSTEM_CONTROL 9
138 #define SEQ_CNT_DST_ID_AOCS 10
141 #define SEQ_CNT_DST_ID_AOCS 10
139
142
140 struct param_local_str{
143 struct param_local_str{
141 unsigned int local_sbm1_nb_cwf_sent;
144 unsigned int local_sbm1_nb_cwf_sent;
142 unsigned int local_sbm1_nb_cwf_max;
145 unsigned int local_sbm1_nb_cwf_max;
143 unsigned int local_sbm2_nb_cwf_sent;
146 unsigned int local_sbm2_nb_cwf_sent;
144 unsigned int local_sbm2_nb_cwf_max;
147 unsigned int local_sbm2_nb_cwf_max;
145 };
148 };
146
149
147 struct param_common_str{
148 unsigned char sy_lfr_common0;
149 unsigned char sy_lfr_common1;
150 };
151
152 struct param_norm_str{
153 unsigned int sy_lfr_n_swf_l; // length of the snapshots
154 unsigned int sy_lfr_n_swf_p; // time between two snapshots
155 unsigned int sy_lfr_n_asm_p; // time between two asm
156 unsigned char sy_lfr_n_bp_p0; // timebetween two products BP1 set
157 unsigned char sy_lfr_n_bp_p1; // time between two products BP2 set
158 };
159
160 struct param_burst_str{
161 unsigned char sy_lfr_b_bp_p0; // timebetween two products BP1 set
162 unsigned char sy_lfr_b_bp_p1; // time between two products BP2 set
163 };
164
165 struct param_sbm1_str{
166 unsigned char sy_lfr_s1_bp_p0; // timebetween two products BP1 set
167 unsigned char sy_lfr_s1_bp_p1; // time between two products BP2 set
168 };
169
170 struct param_sbm2_str{
171 unsigned char sy_lfr_s2_bp_p0; // timebetween two products BP1 set
172 unsigned char sy_lfr_s2_bp_p1; // time between two products BP2 set
173 };
174
175 #endif // FSW_RTEMS_CONFIG_H_INCLUDED
150 #endif // FSW_RTEMS_CONFIG_H_INCLUDED
@@ -1,87 +1,88
1 #ifndef TC_HANDLER_H_INCLUDED
1 #ifndef TC_HANDLER_H_INCLUDED
2 #define TC_HANDLER_H_INCLUDED
2 #define TC_HANDLER_H_INCLUDED
3
3
4 #include <rtems.h>
4 #include <rtems.h>
5 #include <bsp.h> // for the LEON_Unmask_interrupt function
5 #include <bsp.h> // for the LEON_Unmask_interrupt function
6 #include <stdio.h>
6 #include <stdio.h>
7 #include <unistd.h> // for the read call
7 #include <unistd.h> // for the read call
8 #include <sys/ioctl.h> // for the ioctl call
8 #include <sys/ioctl.h> // for the ioctl call
9 #include <ccsds_types.h>
9 #include <ccsds_types.h>
10 #include <grspw.h>
10 #include <grspw.h>
11 #include <fsw_init.h>
11 #include <fsw_init.h>
12
12
13 extern int fdSPW;
13 extern int fdSPW;
14 extern rtems_name misc_name[ ];
14 extern rtems_name misc_name[ ];
15 extern rtems_name misc_id[ ];
15 extern rtems_name misc_id[ ];
16 extern rtems_id Task_id[ ]; // array of task ids
16 extern rtems_id Task_id[ ]; // array of task ids
17 // MODE PARAMETERS
17 // MODE PARAMETERS
18 extern struct param_common_str param_common;
19 extern struct param_norm_str param_norm;
20 extern struct param_sbm1_str param_sbm1;
18 extern struct param_sbm1_str param_sbm1;
21 extern struct param_sbm2_str param_sbm2;
19 extern struct param_sbm2_str param_sbm2;
20 extern Packet_TM_LFR_PARAMETER_DUMP_t parameter_dump_packet;
22 extern Packet_TM_LFR_HK_t housekeeping_packet;
21 extern Packet_TM_LFR_HK_t housekeeping_packet;
23 extern time_management_regs_t *time_management_regs;
22 extern time_management_regs_t *time_management_regs;
24 extern waveform_picker_regs_t *waveform_picker_regs;
23 extern waveform_picker_regs_t *waveform_picker_regs;
25 extern gptimer_regs_t *gptimer_regs;
24 extern gptimer_regs_t *gptimer_regs;
26
25
27 //****
26 //****
28 // ISR
27 // ISR
29 rtems_isr commutation_isr1( rtems_vector_number vector );
28 rtems_isr commutation_isr1( rtems_vector_number vector );
30 rtems_isr commutation_isr2( rtems_vector_number vector );
29 rtems_isr commutation_isr2( rtems_vector_number vector );
31
30
32 //**********************
31 //**********************
33 // GENERAL USE FUNCTIONS
32 // GENERAL USE FUNCTIONS
34 void initLookUpTableForCRC( void );
33 void initLookUpTableForCRC( void );
35 void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData);
34 void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData);
36
35
37 //*********************
36 //*********************
38 // ACCEPTANCE FUNCTIONS
37 // ACCEPTANCE FUNCTIONS
39 int TC_acceptance(ccsdsTelecommandPacket_t *TC, unsigned int TC_LEN_RCV);
38 int TC_acceptance(ccsdsTelecommandPacket_t *TC, unsigned int TC_LEN_RCV);
40 unsigned char TC_parser(ccsdsTelecommandPacket_t * TMPacket, unsigned int TC_LEN_RCV);
39 unsigned char TC_parser(ccsdsTelecommandPacket_t * TMPacket, unsigned int TC_LEN_RCV);
41
40
42 unsigned char TM_build_header( enum TM_TYPE tm_type, unsigned int packetLength,
41 unsigned char TM_build_header( enum TM_TYPE tm_type, unsigned int packetLength,
43 TMHeader_t *TMHeader, unsigned char tc_sid);
42 TMHeader_t *TMHeader, unsigned char tc_sid);
44 unsigned char TM_build_data(ccsdsTelecommandPacket_t *TC, char* data, unsigned int SID, unsigned char *computed_CRC);
43 unsigned char TM_build_data(ccsdsTelecommandPacket_t *TC, char* data, unsigned int SID, unsigned char *computed_CRC);
45
44
46 //***********
45 //***********
47 // RTEMS TASK
46 // RTEMS TASK
48 rtems_task recv_task( rtems_task_argument unused );
47 rtems_task recv_task( rtems_task_argument unused );
49 rtems_task actn_task( rtems_task_argument unused );
48 rtems_task actn_task( rtems_task_argument unused );
50 rtems_task dumb_task( rtems_task_argument unused );
49 rtems_task dumb_task( rtems_task_argument unused );
51 int create_message_queue( void );
50 int create_message_queue( void );
52
51
53 //***********
52 //***********
54 // TC ACTIONS
53 // TC ACTIONS
55 int action_default(ccsdsTelecommandPacket_t *TC);
54 int action_default(ccsdsTelecommandPacket_t *TC);
56 int action_enter(ccsdsTelecommandPacket_t *TC);
55 int action_enter(ccsdsTelecommandPacket_t *TC);
57 int action_updt_info(ccsdsTelecommandPacket_t *TC);
56 int action_updt_info(ccsdsTelecommandPacket_t *TC);
58 int action_enable_calibration(ccsdsTelecommandPacket_t *TC);
57 int action_enable_calibration(ccsdsTelecommandPacket_t *TC);
59 int action_disable_calibration(ccsdsTelecommandPacket_t *TC);
58 int action_disable_calibration(ccsdsTelecommandPacket_t *TC);
60 int action_updt_time(ccsdsTelecommandPacket_t *TC);
59 int action_updt_time(ccsdsTelecommandPacket_t *TC);
61 // mode transition
60 // mode transition
62 int transition_validation(unsigned char requestedMode);
61 int transition_validation(unsigned char requestedMode);
63 int stop_current_mode();
62 int stop_current_mode();
64 int enter_mode(unsigned char mode, ccsdsTelecommandPacket_t *TC);
63 int enter_mode(unsigned char mode, ccsdsTelecommandPacket_t *TC);
65 int enter_standby_mode(ccsdsTelecommandPacket_t *TC);
64 int enter_standby_mode(ccsdsTelecommandPacket_t *TC);
66 int enter_normal_mode(ccsdsTelecommandPacket_t *TC);
65 int enter_normal_mode(ccsdsTelecommandPacket_t *TC);
67 int enter_burst_mode(ccsdsTelecommandPacket_t *TC);
66 int enter_burst_mode(ccsdsTelecommandPacket_t *TC);
68 int enter_sbm1_mode(ccsdsTelecommandPacket_t *TC);
67 int enter_sbm1_mode(ccsdsTelecommandPacket_t *TC);
69 int enter_sbm2_mode(ccsdsTelecommandPacket_t *TC);
68 int enter_sbm2_mode(ccsdsTelecommandPacket_t *TC);
70 // parameters loading
69 // parameters loading
71 int action_load_comm(ccsdsTelecommandPacket_t *TC);
70 int action_load_comm(ccsdsTelecommandPacket_t *TC);
72 int action_load_norm(ccsdsTelecommandPacket_t *TC);
71 int action_load_norm(ccsdsTelecommandPacket_t *TC);
73 int action_load_burst(ccsdsTelecommandPacket_t *TC);
72 int action_load_burst(ccsdsTelecommandPacket_t *TC);
74 int action_load_sbm1(ccsdsTelecommandPacket_t *TC);
73 int action_load_sbm1(ccsdsTelecommandPacket_t *TC);
75 int action_load_sbm2(ccsdsTelecommandPacket_t *TC);
74 int action_load_sbm2(ccsdsTelecommandPacket_t *TC);
75 int action_dump(ccsdsTelecommandPacket_t *TC);
76 // other functions
76 // other functions
77 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC);
77 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC);
78 void update_last_TC_rej(ccsdsTelecommandPacket_t *TC);
78 void update_last_TC_rej(ccsdsTelecommandPacket_t *TC);
79 void close_action(ccsdsTelecommandPacket_t *TC, int result);
79 void close_action(ccsdsTelecommandPacket_t *TC, int result);
80 int send_tm_lfr_tc_exe_success(ccsdsTelecommandPacket_t *TC);
80 int send_tm_lfr_tc_exe_success(ccsdsTelecommandPacket_t *TC);
81 int send_tm_lfr_tc_exe_not_executable(ccsdsTelecommandPacket_t *TC);
81 int send_tm_lfr_tc_exe_not_executable(ccsdsTelecommandPacket_t *TC);
82 int send_tm_lfr_tc_exe_not_implemented(ccsdsTelecommandPacket_t *TC);
82 int send_tm_lfr_tc_exe_not_implemented(ccsdsTelecommandPacket_t *TC);
83 int send_tm_lfr_tc_exe_error(ccsdsTelecommandPacket_t *TC);
83
84
84 #endif // TC_HANDLER_H_INCLUDED
85 #endif // TC_HANDLER_H_INCLUDED
85
86
86
87
87
88
@@ -1,60 +1,56
1 #include <fsw_processing.h>
1 #include <fsw_processing.h>
2 #include <rtems.h>
2 #include <rtems.h>
3 #include <grspw.h>
3 #include <grspw.h>
4 #include <ccsds_types.h>
4 #include <ccsds_types.h>
5
5
6 // RTEMS GLOBAL VARIABLES
6 // RTEMS GLOBAL VARIABLES
7 rtems_name misc_name[5];
7 rtems_name misc_name[5];
8 rtems_name misc_id[5];
8 rtems_name misc_id[5];
9 rtems_id Task_id[15]; /* array of task ids */
9 rtems_id Task_id[15]; /* array of task ids */
10 rtems_name Task_name[15]; /* array of task names */
10 rtems_name Task_name[15]; /* array of task names */
11 int fdSPW = 0;
11 int fdSPW = 0;
12 int fdUART = 0;
12 int fdUART = 0;
13
13
14 spectral_matrices_regs_t *spectral_matrices_regs = NULL;
14 spectral_matrices_regs_t *spectral_matrices_regs = NULL;
15
15
16 // APB CONFIGURATION REGISTERS
16 // APB CONFIGURATION REGISTERS
17 time_management_regs_t *time_management_regs = (time_management_regs_t*) REGS_ADDR_TIME_MANAGEMENT;
17 time_management_regs_t *time_management_regs = (time_management_regs_t*) REGS_ADDR_TIME_MANAGEMENT;
18 waveform_picker_regs_t *waveform_picker_regs = (waveform_picker_regs_t*) REGS_ADDR_WAVEFORM_PICKER;
18 waveform_picker_regs_t *waveform_picker_regs = (waveform_picker_regs_t*) REGS_ADDR_WAVEFORM_PICKER;
19 gptimer_regs_t *gptimer_regs = (gptimer_regs_t *) REGS_ADDR_GPTIMER;
19 gptimer_regs_t *gptimer_regs = (gptimer_regs_t *) REGS_ADDR_GPTIMER;
20
20
21 // WAVEFORMS GLOBAL VARIABLES // 2048 * 3 * 4 + 2 * 4 = 24576 + 8 bytes
21 // WAVEFORMS GLOBAL VARIABLES // 2048 * 3 * 4 + 2 * 4 = 24576 + 8 bytes
22 volatile int wf_snap_f0[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
22 volatile int wf_snap_f0[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
23 volatile int wf_snap_f1[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
23 volatile int wf_snap_f1[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
24 volatile int wf_snap_f1_bis[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
24 volatile int wf_snap_f1_bis[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
25 volatile int wf_snap_f2[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
25 volatile int wf_snap_f2[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
26 volatile int wf_snap_f2_bis[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
26 volatile int wf_snap_f2_bis[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
27 volatile int wf_cont_f3[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
27 volatile int wf_cont_f3[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
28
28
29 // SPECTRAL MATRICES GLOBAL VARIABLES
29 // SPECTRAL MATRICES GLOBAL VARIABLES
30 volatile int spec_mat_f0_a[ TOTAL_SIZE_SPEC_MAT ];
30 volatile int spec_mat_f0_a[ TOTAL_SIZE_SPEC_MAT ];
31 volatile int spec_mat_f0_b[ TOTAL_SIZE_SPEC_MAT ];
31 volatile int spec_mat_f0_b[ TOTAL_SIZE_SPEC_MAT ];
32 volatile int spec_mat_f0_c[ TOTAL_SIZE_SPEC_MAT ];
32 volatile int spec_mat_f0_c[ TOTAL_SIZE_SPEC_MAT ];
33 volatile int spec_mat_f0_d[ TOTAL_SIZE_SPEC_MAT ];
33 volatile int spec_mat_f0_d[ TOTAL_SIZE_SPEC_MAT ];
34 volatile int spec_mat_f0_e[ TOTAL_SIZE_SPEC_MAT ];
34 volatile int spec_mat_f0_e[ TOTAL_SIZE_SPEC_MAT ];
35 volatile int spec_mat_f0_f[ TOTAL_SIZE_SPEC_MAT ];
35 volatile int spec_mat_f0_f[ TOTAL_SIZE_SPEC_MAT ];
36 volatile int spec_mat_f0_g[ TOTAL_SIZE_SPEC_MAT ];
36 volatile int spec_mat_f0_g[ TOTAL_SIZE_SPEC_MAT ];
37 volatile int spec_mat_f0_h[ TOTAL_SIZE_SPEC_MAT ];
37 volatile int spec_mat_f0_h[ TOTAL_SIZE_SPEC_MAT ];
38 //
38 //
39 float averaged_spec_mat_f0[ TOTAL_SIZE_SPEC_MAT ];
39 float averaged_spec_mat_f0[ TOTAL_SIZE_SPEC_MAT ];
40 float compressed_spec_mat_f0[ TOTAL_SIZE_COMPRESSED_MATRIX_f0 ];
40 float compressed_spec_mat_f0[ TOTAL_SIZE_COMPRESSED_MATRIX_f0 ];
41
41
42 // MODE PARAMETERS
42 // MODE PARAMETERS
43 Packet_TM_LFR_PARAMETER_DUMP_t parameter_dump_packet;
43 struct param_local_str param_local;
44 struct param_local_str param_local;
44 struct param_common_str param_common;
45 struct param_norm_str param_norm;
46 struct param_burst_str param_burst;
47 struct param_sbm1_str param_sbm1;
48 struct param_sbm2_str param_sbm2;
49
45
50 // HK PACKETS
46 // HK PACKETS
51 Packet_TM_LFR_HK_t housekeeping_packet;
47 Packet_TM_LFR_HK_t housekeeping_packet;
52 // sequence counters are incremented by APID (PID + CAT) and destination ID
48 // sequence counters are incremented by APID (PID + CAT) and destination ID
53 unsigned short sequenceCounters[SEQ_CNT_NB_PID][SEQ_CNT_NB_CAT][SEQ_CNT_NB_DEST_ID];
49 unsigned short sequenceCounters[SEQ_CNT_NB_PID][SEQ_CNT_NB_CAT][SEQ_CNT_NB_DEST_ID];
54 spw_stats spacewire_stats;
50 spw_stats spacewire_stats;
55 spw_stats spacewire_stats_backup;
51 spw_stats spacewire_stats_backup;
56
52
57 // BASIC PARAMETERS GLOBAL VARIABLES
53 // BASIC PARAMETERS GLOBAL VARIABLES
58 unsigned char LFR_BP1_F0[ NB_BINS_COMPRESSED_MATRIX_f0 * 9 ];
54 unsigned char LFR_BP1_F0[ NB_BINS_COMPRESSED_MATRIX_f0 * 9 ];
59 BP1_t data_BP1[ NB_BINS_COMPRESSED_MATRIX_f0 ];
55 BP1_t data_BP1[ NB_BINS_COMPRESSED_MATRIX_f0 ];
60
56
@@ -1,549 +1,590
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_default_mode_parameters();
70 init_parameter_dump();
71 init_local_mode_parameters();
71 init_housekeeping_parameters();
72 init_housekeeping_parameters();
72 create_message_queue();
73 create_message_queue();
73
74
74 create_names(); // create all names
75 create_names(); // create all names
75 create_all_tasks(); // create all tasks
76 create_all_tasks(); // create all tasks
76 start_all_tasks(); // start all tasks
77 start_all_tasks(); // start all tasks
77 stop_current_mode(); // go in STANDBY mode
78 stop_current_mode(); // go in STANDBY mode
78
79
79 grspw_timecode_callback = &timecode_irq_handler;
80 grspw_timecode_callback = &timecode_irq_handler;
80
81
81 spacewire_configure_link();
82 spacewire_configure_link();
82
83
83 //****************************
84 //****************************
84 // Spectral Matrices simulator
85 // Spectral Matrices simulator
85 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,
86 IRQ_SPARC_SM, spectral_matrices_isr );
87 IRQ_SPARC_SM, spectral_matrices_isr );
87
88
88 //**********
89 //**********
89 // WAVEFORMS
90 // WAVEFORMS
90 // simulator
91 // simulator
91
92
92 #ifdef GSA
93 #ifdef GSA
93 configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_WF_SIMULATOR, CLKDIV_WF_SIMULATOR,
94 configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_WF_SIMULATOR, CLKDIV_WF_SIMULATOR,
94 IRQ_SPARC_WF, waveforms_simulator_isr );
95 IRQ_SPARC_WF, waveforms_simulator_isr );
95 #else
96 #else
96 // configure the registers of the waveform picker
97 // configure the registers of the waveform picker
97 reset_wfp_regs();
98 reset_wfp_regs();
98 // configure the waveform picker interrupt service routine
99 // configure the waveform picker interrupt service routine
99 status = rtems_interrupt_catch( waveforms_isr,
100 status = rtems_interrupt_catch( waveforms_isr,
100 IRQ_SPARC_WAVEFORM_PICKER,
101 IRQ_SPARC_WAVEFORM_PICKER,
101 &old_isr_handler) ;
102 &old_isr_handler) ;
102 LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER );
103 LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER );
103 #endif
104 #endif
104
105
105 //**********
106 //**********
106
107
107 //*****************************************
108 //*****************************************
108 // irq handling of the time management unit
109 // irq handling of the time management unit
109 status = rtems_interrupt_catch( commutation_isr1,
110 status = rtems_interrupt_catch( commutation_isr1,
110 IRQ_SPARC_TIME1,
111 IRQ_SPARC_TIME1,
111 &old_isr_handler) ; // see sparcv8.pdf p.76 for interrupt levels
112 &old_isr_handler) ; // see sparcv8.pdf p.76 for interrupt levels
112 if (status==RTEMS_SUCCESSFUL) {
113 if (status==RTEMS_SUCCESSFUL) {
113 PRINTF("OK *** commutation_isr1 *** rtems_interrupt_catch successfullly configured\n")
114 PRINTF("OK *** commutation_isr1 *** rtems_interrupt_catch successfullly configured\n")
114 }
115 }
115
116
116 status = rtems_interrupt_catch( commutation_isr2,
117 status = rtems_interrupt_catch( commutation_isr2,
117 IRQ_SPARC_TIME2,
118 IRQ_SPARC_TIME2,
118 &old_isr_handler) ; // see sparcv8.pdf p.76 for interrupt levels
119 &old_isr_handler) ; // see sparcv8.pdf p.76 for interrupt levels
119 if (status==RTEMS_SUCCESSFUL) {
120 if (status==RTEMS_SUCCESSFUL) {
120 PRINTF("OK *** commutation_isr2 *** rtems_interrupt_catch successfullly configured\n")
121 PRINTF("OK *** commutation_isr2 *** rtems_interrupt_catch successfullly configured\n")
121 }
122 }
122
123
123 LEON_Unmask_interrupt( IRQ_TIME1 );
124 LEON_Unmask_interrupt( IRQ_TIME1 );
124 LEON_Unmask_interrupt( IRQ_TIME2 );
125 LEON_Unmask_interrupt( IRQ_TIME2 );
125
126
126 #ifdef GSA
127 #ifdef GSA
127 //if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
128 //if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
128 // printf("in INIT *** Error sending event to WFRM\n");
129 // printf("in INIT *** Error sending event to WFRM\n");
129 //}
130 //}
130 #endif
131 #endif
131
132
132 status = rtems_task_delete(RTEMS_SELF);
133 status = rtems_task_delete(RTEMS_SELF);
133
134
134 }
135 }
135
136
136 rtems_task spiq_task(rtems_task_argument unused)
137 rtems_task spiq_task(rtems_task_argument unused)
137 {
138 {
138 rtems_event_set event_out;
139 rtems_event_set event_out;
139 rtems_status_code status;
140 rtems_status_code status;
140 unsigned char lfrMode;
141 unsigned char lfrMode;
141
142
142 while(true){
143 while(true){
143 PRINTF("in SPIQ *** Waiting for SPW_LINKERR_EVENT\n")
144 PRINTF("in SPIQ *** Waiting for SPW_LINKERR_EVENT\n")
144 rtems_event_receive(SPW_LINKERR_EVENT, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an SPW_LINKERR_EVENT
145 rtems_event_receive(SPW_LINKERR_EVENT, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an SPW_LINKERR_EVENT
145
146
146 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4; // get the current mode
147 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4; // get the current mode
147
148
148 status = spacewire_wait_for_link();
149 status = spacewire_wait_for_link();
149
150
150 if (status != RTEMS_SUCCESSFUL)
151 if (status != RTEMS_SUCCESSFUL)
151 {
152 {
152 //****************
153 //****************
153 // STOP THE SYSTEM
154 // STOP THE SYSTEM
154 spacewire_compute_stats_offsets();
155 spacewire_compute_stats_offsets();
155 stop_current_mode();
156 stop_current_mode();
156 if (rtems_task_suspend(Task_id[TASKID_RECV])!=RTEMS_SUCCESSFUL) { // suspend RECV task
157 if (rtems_task_suspend(Task_id[TASKID_RECV])!=RTEMS_SUCCESSFUL) { // suspend RECV task
157 PRINTF("in SPIQ *** Error suspending RECV Task\n")
158 PRINTF("in SPIQ *** Error suspending RECV Task\n")
158 }
159 }
159 if (rtems_task_suspend(Task_id[TASKID_HOUS])!=RTEMS_SUCCESSFUL) { // suspend HOUS task
160 if (rtems_task_suspend(Task_id[TASKID_HOUS])!=RTEMS_SUCCESSFUL) { // suspend HOUS task
160 PRINTF("in SPIQ *** Error suspending HOUS Task\n")
161 PRINTF("in SPIQ *** Error suspending HOUS Task\n")
161 }
162 }
162
163
163 //***************************
164 //***************************
164 // RESTART THE SPACEWIRE LINK
165 // RESTART THE SPACEWIRE LINK
165 spacewire_configure_link();
166 spacewire_configure_link();
166
167
167 //*******************
168 //*******************
168 // RESTART THE SYSTEM
169 // RESTART THE SYSTEM
169 //ioctl(fdSPW, SPACEWIRE_IOCTRL_CLR_STATISTICS); // clear statistics
170 //ioctl(fdSPW, SPACEWIRE_IOCTRL_CLR_STATISTICS); // clear statistics
170 status = rtems_task_restart( Task_id[TASKID_HOUS], 1 );
171 status = rtems_task_restart( Task_id[TASKID_HOUS], 1 );
171 if (status != RTEMS_SUCCESSFUL) {
172 if (status != RTEMS_SUCCESSFUL) {
172 PRINTF1("in SPIQ *** Error restarting HOUS Task *** code %d\n", status)
173 PRINTF1("in SPIQ *** Error restarting HOUS Task *** code %d\n", status)
173 }
174 }
174 if (rtems_task_restart(Task_id[TASKID_RECV], 1) != RTEMS_SUCCESSFUL) { // restart RECV task
175 if (rtems_task_restart(Task_id[TASKID_RECV], 1) != RTEMS_SUCCESSFUL) { // restart RECV task
175 PRINTF("in SPIQ *** Error restarting RECV Task\n")
176 PRINTF("in SPIQ *** Error restarting RECV Task\n")
176 }
177 }
177 //enter_mode(lfrMode, NULL); // enter the mode that was running before the SpaceWire interruption
178 //enter_mode(lfrMode, NULL); // enter the mode that was running before the SpaceWire interruption
178 }
179 }
179 }
180 }
180 }
181 }
181
182
182 void init_default_mode_parameters(void)
183 void init_parameter_dump(void)
183 {
184 {
184 // COMMON PARAMETERS
185 parameter_dump_packet.targetLogicalAddress = CCSDS_DESTINATION_ID;
185 param_common.sy_lfr_common0 = 0x00;
186 parameter_dump_packet.protocolIdentifier = CCSDS_PROTOCOLE_ID;
186 param_common.sy_lfr_common1 = 0x10; // default value 0 0 0 1 0 0 0 0
187 parameter_dump_packet.reserved = CCSDS_RESERVED;
188 parameter_dump_packet.userApplication = CCSDS_USER_APP;
189 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;
191 parameter_dump_packet.packetSequenceControl[0] = (unsigned char) (TM_PACKET_SEQ_CTRL_STANDALONE << 6);
192 parameter_dump_packet.packetSequenceControl[1] = 0x00;
193 parameter_dump_packet.packetLength[0] = (unsigned char) (PACKET_LENGTH_PARAMETER_DUMP >> 8);
194 parameter_dump_packet.packetLength[1] = (unsigned char) PACKET_LENGTH_PARAMETER_DUMP;
195 // DATA FIELD HEADER
196 parameter_dump_packet.spare1_pusVersion_spare2 = SPARE1_PUSVERSION_SPARE2;
197 parameter_dump_packet.serviceType = TM_TYPE_PARAMETER_DUMP;
198 parameter_dump_packet.serviceSubType = TM_SUBTYPE_PARAMETER_DUMP;
199 parameter_dump_packet.destinationID = TM_DESTINATION_ID_GROUND;
200 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);
202 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);
204 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);
206 parameter_dump_packet.sid = SID_PARAMETER_DUMP;
187
207
188 // NORMAL MODE
208 //******************
189 param_norm.sy_lfr_n_swf_l = DEFAULT_SY_LFR_N_SWF_L; // nb sample
209 // COMMON PARAMETERS
190 param_norm.sy_lfr_n_swf_p = DEFAULT_SY_LFR_N_SWF_P; // sec
210 parameter_dump_packet.unused0 = DEFAULT_SY_LFR_COMMON0;
191 param_norm.sy_lfr_n_asm_p = DEFAULT_SY_LFR_N_ASM_P; // sec
211 parameter_dump_packet.bw_sp0_sp1_r0_r1 = DEFAULT_SY_LFR_COMMON1;
192 param_norm.sy_lfr_n_bp_p0 = DEFAULT_SY_LFR_N_BP_P0; // sec
193 param_norm.sy_lfr_n_bp_p1 = DEFAULT_SY_LFR_N_BP_P1; // sec
194
212
195 // BURST MODE
213 //******************
196 param_burst.sy_lfr_b_bp_p0 = DEFAULT_SY_LFR_B_BP_P0; // sec
214 // NORMAL PARAMETERS
197 param_burst.sy_lfr_b_bp_p1 = DEFAULT_SY_LFR_B_BP_P1; // sec
215 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;
217 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;
219 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;
221 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;
198
223
199 // SBM1 MODE
224 //*****************
200 param_sbm1.sy_lfr_s1_bp_p0 = DEFAULT_SY_LFR_S1_BP_P0; // sec
225 // BURST PARAMETERS
201 param_sbm1.sy_lfr_s1_bp_p1 = DEFAULT_SY_LFR_B_BP_P1; // sec
226 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;
202
228
203 // SBM2 MODE
229 //****************
204 param_sbm2.sy_lfr_s2_bp_p0 = DEFAULT_SY_LFR_S2_BP_P0; // sec
230 // SBM1 PARAMETERS
205 param_sbm2.sy_lfr_s2_bp_p1 = DEFAULT_SY_LFR_S2_BP_P1; // sec
231 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;
206
233
234 //****************
235 // SBM2 PARAMETERS
236 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;
238 }
239
240 void init_local_mode_parameters(void)
241 {
207 // LOCAL PARAMETERS
242 // LOCAL PARAMETERS
208 // (2 snapshots of 2048 points per seconds) * (period of the NORM snashots)
243 // (2 snapshots of 2048 points per seconds) * (period of the NORM snashots)
209 param_local.local_sbm1_nb_cwf_max = 2 * param_norm.sy_lfr_n_swf_p;
244 param_local.local_sbm1_nb_cwf_max = 2 * (
245 parameter_dump_packet.sy_lfr_n_swf_p[0] * 256
246 + parameter_dump_packet.sy_lfr_n_swf_p[1]
247 );
210 // (period of the NORM snashots) / (8 seconds per snapshot at f2 = 256 Hz)
248 // (period of the NORM snashots) / (8 seconds per snapshot at f2 = 256 Hz)
211 param_local.local_sbm2_nb_cwf_max = param_norm.sy_lfr_n_swf_p / 8;
249 param_local.local_sbm2_nb_cwf_max = (
250 parameter_dump_packet.sy_lfr_n_swf_p[0] * 256
251 + parameter_dump_packet.sy_lfr_n_swf_p[1]
252 )/ 8;
212
253
213 PRINTF1("local_sbm1_nb_cwf_max %d \n", param_local.local_sbm1_nb_cwf_max)
254 PRINTF1("local_sbm1_nb_cwf_max %d \n", param_local.local_sbm1_nb_cwf_max)
214 PRINTF1("local_sbm2_nb_cwf_max %d \n", param_local.local_sbm2_nb_cwf_max)
255 PRINTF1("local_sbm2_nb_cwf_max %d \n", param_local.local_sbm2_nb_cwf_max)
215
256
216 param_local.local_sbm1_nb_cwf_sent = 0;
257 param_local.local_sbm1_nb_cwf_sent = 0;
217 param_local.local_sbm2_nb_cwf_sent = 0;
258 param_local.local_sbm2_nb_cwf_sent = 0;
218 }
259 }
219
260
220 void init_housekeeping_parameters(void)
261 void init_housekeeping_parameters(void)
221 {
262 {
222 unsigned int i = 0;
263 unsigned int i = 0;
223 unsigned int j = 0;
264 unsigned int j = 0;
224 unsigned int k = 0;
265 unsigned int k = 0;
225 char *parameters;
266 char *parameters;
226
267
227 parameters = (char*) &housekeeping_packet.lfr_status_word;
268 parameters = (char*) &housekeeping_packet.lfr_status_word;
228 for(i = 0; i< SIZE_HK_PARAMETERS; i++)
269 for(i = 0; i< SIZE_HK_PARAMETERS; i++)
229 {
270 {
230 parameters[i] = 0x00;
271 parameters[i] = 0x00;
231 }
272 }
232 // init status word
273 // init status word
233 housekeeping_packet.lfr_status_word[0] = 0x00;
274 housekeeping_packet.lfr_status_word[0] = 0x00;
234 housekeeping_packet.lfr_status_word[1] = 0x00;
275 housekeeping_packet.lfr_status_word[1] = 0x00;
235 // init software version
276 // init software version
236 housekeeping_packet.lfr_sw_version[0] = SW_VERSION_N1;
277 housekeeping_packet.lfr_sw_version[0] = SW_VERSION_N1;
237 housekeeping_packet.lfr_sw_version[1] = SW_VERSION_N2;
278 housekeeping_packet.lfr_sw_version[1] = SW_VERSION_N2;
238 housekeeping_packet.lfr_sw_version[2] = SW_VERSION_N3;
279 housekeeping_packet.lfr_sw_version[2] = SW_VERSION_N3;
239 housekeeping_packet.lfr_sw_version[3] = SW_VERSION_N4;
280 housekeeping_packet.lfr_sw_version[3] = SW_VERSION_N4;
240 // init sequence counters
281 // init sequence counters
241 for (i = 0; i<SEQ_CNT_NB_PID; i++)
282 for (i = 0; i<SEQ_CNT_NB_PID; i++)
242 {
283 {
243 for(j = 0; j<SEQ_CNT_NB_CAT; j++)
284 for(j = 0; j<SEQ_CNT_NB_CAT; j++)
244 {
285 {
245 for(k = 0; k<SEQ_CNT_NB_DEST_ID; k++)
286 for(k = 0; k<SEQ_CNT_NB_DEST_ID; k++)
246 {
287 {
247 sequenceCounters[i][j][k] = 0x00;
288 sequenceCounters[i][j][k] = 0x00;
248 }
289 }
249 }
290 }
250 }
291 }
251 }
292 }
252
293
253 int create_names( void )
294 int create_names( void )
254 {
295 {
255 // task names
296 // task names
256 Task_name[TASKID_RECV] = rtems_build_name( 'R', 'E', 'C', 'V' );
297 Task_name[TASKID_RECV] = rtems_build_name( 'R', 'E', 'C', 'V' );
257 Task_name[TASKID_ACTN] = rtems_build_name( 'A', 'C', 'T', 'N' );
298 Task_name[TASKID_ACTN] = rtems_build_name( 'A', 'C', 'T', 'N' );
258 Task_name[TASKID_SPIQ] = rtems_build_name( 'S', 'P', 'I', 'Q' );
299 Task_name[TASKID_SPIQ] = rtems_build_name( 'S', 'P', 'I', 'Q' );
259 Task_name[TASKID_SMIQ] = rtems_build_name( 'S', 'M', 'I', 'Q' );
300 Task_name[TASKID_SMIQ] = rtems_build_name( 'S', 'M', 'I', 'Q' );
260 Task_name[TASKID_STAT] = rtems_build_name( 'S', 'T', 'A', 'T' );
301 Task_name[TASKID_STAT] = rtems_build_name( 'S', 'T', 'A', 'T' );
261 Task_name[TASKID_AVF0] = rtems_build_name( 'A', 'V', 'F', '0' );
302 Task_name[TASKID_AVF0] = rtems_build_name( 'A', 'V', 'F', '0' );
262 Task_name[TASKID_BPF0] = rtems_build_name( 'B', 'P', 'F', '0' );
303 Task_name[TASKID_BPF0] = rtems_build_name( 'B', 'P', 'F', '0' );
263 Task_name[TASKID_WFRM] = rtems_build_name( 'W', 'F', 'R', 'M' );
304 Task_name[TASKID_WFRM] = rtems_build_name( 'W', 'F', 'R', 'M' );
264 Task_name[TASKID_DUMB] = rtems_build_name( 'D', 'U', 'M', 'B' );
305 Task_name[TASKID_DUMB] = rtems_build_name( 'D', 'U', 'M', 'B' );
265 Task_name[TASKID_HOUS] = rtems_build_name( 'H', 'O', 'U', 'S' );
306 Task_name[TASKID_HOUS] = rtems_build_name( 'H', 'O', 'U', 'S' );
266
307
267 // rate monotonic period name
308 // rate monotonic period name
268 HK_name = rtems_build_name( 'H', 'O', 'U', 'S' );
309 HK_name = rtems_build_name( 'H', 'O', 'U', 'S' );
269
310
270 return 0;
311 return 0;
271 }
312 }
272
313
273 int create_all_tasks( void )
314 int create_all_tasks( void )
274 {
315 {
275 rtems_status_code status;
316 rtems_status_code status;
276
317
277 // RECV
318 // RECV
278 status = rtems_task_create(
319 status = rtems_task_create(
279 Task_name[TASKID_RECV], 200, RTEMS_MINIMUM_STACK_SIZE * 2,
320 Task_name[TASKID_RECV], 200, RTEMS_MINIMUM_STACK_SIZE * 2,
280 RTEMS_DEFAULT_MODES,
321 RTEMS_DEFAULT_MODES,
281 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_RECV]
322 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_RECV]
282 );
323 );
283 // ACTN
324 // ACTN
284 status = rtems_task_create(
325 status = rtems_task_create(
285 Task_name[TASKID_ACTN], 100, RTEMS_MINIMUM_STACK_SIZE * 2,
326 Task_name[TASKID_ACTN], 100, RTEMS_MINIMUM_STACK_SIZE * 2,
286 RTEMS_DEFAULT_MODES,
327 RTEMS_DEFAULT_MODES,
287 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_ACTN]
328 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_ACTN]
288 );
329 );
289 // SPIQ
330 // SPIQ
290 status = rtems_task_create(
331 status = rtems_task_create(
291 Task_name[TASKID_SPIQ], 5, RTEMS_MINIMUM_STACK_SIZE * 2,
332 Task_name[TASKID_SPIQ], 5, RTEMS_MINIMUM_STACK_SIZE * 2,
292 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
333 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
293 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_SPIQ]
334 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_SPIQ]
294 );
335 );
295 // SMIQ
336 // SMIQ
296 status = rtems_task_create(
337 status = rtems_task_create(
297 Task_name[TASKID_SMIQ], 10, RTEMS_MINIMUM_STACK_SIZE * 2,
338 Task_name[TASKID_SMIQ], 10, RTEMS_MINIMUM_STACK_SIZE * 2,
298 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
339 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
299 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_SMIQ]
340 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_SMIQ]
300 );
341 );
301 // STAT
342 // STAT
302 status = rtems_task_create(
343 status = rtems_task_create(
303 Task_name[TASKID_STAT], 150, RTEMS_MINIMUM_STACK_SIZE * 2,
344 Task_name[TASKID_STAT], 150, RTEMS_MINIMUM_STACK_SIZE * 2,
304 RTEMS_DEFAULT_MODES,
345 RTEMS_DEFAULT_MODES,
305 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_STAT]
346 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_STAT]
306 );
347 );
307 // AVF0
348 // AVF0
308 status = rtems_task_create(
349 status = rtems_task_create(
309 Task_name[TASKID_AVF0], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
350 Task_name[TASKID_AVF0], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
310 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
351 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
311 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_AVF0]
352 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_AVF0]
312 );
353 );
313 // BPF0
354 // BPF0
314 status = rtems_task_create(
355 status = rtems_task_create(
315 Task_name[TASKID_BPF0], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
356 Task_name[TASKID_BPF0], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
316 RTEMS_DEFAULT_MODES,
357 RTEMS_DEFAULT_MODES,
317 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_BPF0]
358 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_BPF0]
318 );
359 );
319 // WFRM
360 // WFRM
320 status = rtems_task_create(
361 status = rtems_task_create(
321 Task_name[TASKID_WFRM], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
362 Task_name[TASKID_WFRM], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
322 RTEMS_DEFAULT_MODES,
363 RTEMS_DEFAULT_MODES,
323 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_WFRM]
364 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_WFRM]
324 );
365 );
325 // DUMB
366 // DUMB
326 status = rtems_task_create(
367 status = rtems_task_create(
327 Task_name[TASKID_DUMB], 200, RTEMS_MINIMUM_STACK_SIZE * 2,
368 Task_name[TASKID_DUMB], 200, RTEMS_MINIMUM_STACK_SIZE * 2,
328 RTEMS_DEFAULT_MODES,
369 RTEMS_DEFAULT_MODES,
329 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_DUMB]
370 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_DUMB]
330 );
371 );
331 // HOUS
372 // HOUS
332 status = rtems_task_create(
373 status = rtems_task_create(
333 Task_name[TASKID_HOUS], 199, RTEMS_MINIMUM_STACK_SIZE * 2,
374 Task_name[TASKID_HOUS], 199, RTEMS_MINIMUM_STACK_SIZE * 2,
334 RTEMS_DEFAULT_MODES,
375 RTEMS_DEFAULT_MODES,
335 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_HOUS]
376 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_HOUS]
336 );
377 );
337
378
338 return 0;
379 return 0;
339 }
380 }
340
381
341 int start_all_tasks( void )
382 int start_all_tasks( void )
342 {
383 {
343 rtems_status_code status;
384 rtems_status_code status;
344
385
345 status = rtems_task_start( Task_id[TASKID_SPIQ], spiq_task, 1 );
386 status = rtems_task_start( Task_id[TASKID_SPIQ], spiq_task, 1 );
346 if (status!=RTEMS_SUCCESSFUL) {
387 if (status!=RTEMS_SUCCESSFUL) {
347 PRINTF("In INIT *** Error starting TASK_SPIQ\n")
388 PRINTF("In INIT *** Error starting TASK_SPIQ\n")
348 }
389 }
349
390
350 status = rtems_task_start( Task_id[TASKID_RECV], recv_task, 1 );
391 status = rtems_task_start( Task_id[TASKID_RECV], recv_task, 1 );
351 if (status!=RTEMS_SUCCESSFUL) {
392 if (status!=RTEMS_SUCCESSFUL) {
352 PRINTF("In INIT *** Error starting TASK_RECV\n")
393 PRINTF("In INIT *** Error starting TASK_RECV\n")
353 }
394 }
354
395
355 status = rtems_task_start( Task_id[TASKID_ACTN], actn_task, 1 );
396 status = rtems_task_start( Task_id[TASKID_ACTN], actn_task, 1 );
356 if (status!=RTEMS_SUCCESSFUL) {
397 if (status!=RTEMS_SUCCESSFUL) {
357 PRINTF("In INIT *** Error starting TASK_ACTN\n")
398 PRINTF("In INIT *** Error starting TASK_ACTN\n")
358 }
399 }
359
400
360 status = rtems_task_start( Task_id[TASKID_SMIQ], smiq_task, 1 );
401 status = rtems_task_start( Task_id[TASKID_SMIQ], smiq_task, 1 );
361 if (status!=RTEMS_SUCCESSFUL) {
402 if (status!=RTEMS_SUCCESSFUL) {
362 PRINTF("In INIT *** Error starting TASK_BPPR\n")
403 PRINTF("In INIT *** Error starting TASK_BPPR\n")
363 }
404 }
364
405
365 status = rtems_task_start( Task_id[TASKID_STAT], stat_task, 1 );
406 status = rtems_task_start( Task_id[TASKID_STAT], stat_task, 1 );
366 if (status!=RTEMS_SUCCESSFUL) {
407 if (status!=RTEMS_SUCCESSFUL) {
367 PRINTF("In INIT *** Error starting TASK_STAT\n")
408 PRINTF("In INIT *** Error starting TASK_STAT\n")
368 }
409 }
369
410
370 status = rtems_task_start( Task_id[TASKID_AVF0], avf0_task, 1 );
411 status = rtems_task_start( Task_id[TASKID_AVF0], avf0_task, 1 );
371 if (status!=RTEMS_SUCCESSFUL) {
412 if (status!=RTEMS_SUCCESSFUL) {
372 PRINTF("In INIT *** Error starting TASK_AVF0\n")
413 PRINTF("In INIT *** Error starting TASK_AVF0\n")
373 }
414 }
374
415
375 status = rtems_task_start( Task_id[TASKID_BPF0], bpf0_task, 1 );
416 status = rtems_task_start( Task_id[TASKID_BPF0], bpf0_task, 1 );
376 if (status!=RTEMS_SUCCESSFUL) {
417 if (status!=RTEMS_SUCCESSFUL) {
377 PRINTF("In INIT *** Error starting TASK_BPF0\n")
418 PRINTF("In INIT *** Error starting TASK_BPF0\n")
378 }
419 }
379
420
380 status = rtems_task_start( Task_id[TASKID_WFRM], wfrm_task, 1 );
421 status = rtems_task_start( Task_id[TASKID_WFRM], wfrm_task, 1 );
381 if (status!=RTEMS_SUCCESSFUL) {
422 if (status!=RTEMS_SUCCESSFUL) {
382 PRINTF("In INIT *** Error starting TASK_WFRM\n")
423 PRINTF("In INIT *** Error starting TASK_WFRM\n")
383 }
424 }
384
425
385 status = rtems_task_start( Task_id[TASKID_DUMB], dumb_task, 1 );
426 status = rtems_task_start( Task_id[TASKID_DUMB], dumb_task, 1 );
386 if (status!=RTEMS_SUCCESSFUL) {
427 if (status!=RTEMS_SUCCESSFUL) {
387 PRINTF("In INIT *** Error starting TASK_DUMB\n")
428 PRINTF("In INIT *** Error starting TASK_DUMB\n")
388 }
429 }
389
430
390 status = rtems_task_start( Task_id[TASKID_HOUS], hous_task, 1 );
431 status = rtems_task_start( Task_id[TASKID_HOUS], hous_task, 1 );
391 if (status!=RTEMS_SUCCESSFUL) {
432 if (status!=RTEMS_SUCCESSFUL) {
392 PRINTF("In INIT *** Error starting TASK_HOUS\n")
433 PRINTF("In INIT *** Error starting TASK_HOUS\n")
393 }
434 }
394
435
395 return 0;
436 return 0;
396 }
437 }
397
438
398 int spacewire_configure_link( void )
439 int spacewire_configure_link( void )
399 {
440 {
400 rtems_status_code status;
441 rtems_status_code status;
401
442
402 close(fdSPW); // close the device if it is already open
443 close(fdSPW); // close the device if it is already open
403 PRINTF("OK *** in configure_spw_link *** try to open "GRSPW_DEVICE_NAME"\n")
444 PRINTF("OK *** in configure_spw_link *** try to open "GRSPW_DEVICE_NAME"\n")
404 fdSPW = open(GRSPW_DEVICE_NAME, O_RDWR); // open the device. the open call reset the hardware
445 fdSPW = open(GRSPW_DEVICE_NAME, O_RDWR); // open the device. the open call reset the hardware
405 if ( fdSPW<0 ) {
446 if ( fdSPW<0 ) {
406 PRINTF("ERR *** in configure_spw_link *** Error opening"GRSPW_DEVICE_NAME"\n")
447 PRINTF("ERR *** in configure_spw_link *** Error opening"GRSPW_DEVICE_NAME"\n")
407 }
448 }
408
449
409 while(ioctl(fdSPW, SPACEWIRE_IOCTRL_START, -1) != RTEMS_SUCCESSFUL){
450 while(ioctl(fdSPW, SPACEWIRE_IOCTRL_START, -1) != RTEMS_SUCCESSFUL){
410 PRINTF(".")
451 PRINTF(".")
411 fflush( stdout );
452 fflush( stdout );
412 close( fdSPW ); // close the device
453 close( fdSPW ); // close the device
413 fdSPW = open( GRSPW_DEVICE_NAME, O_RDWR ); // open the device. the open call reset the hardware
454 fdSPW = open( GRSPW_DEVICE_NAME, O_RDWR ); // open the device. the open call reset the hardware
414 if (fdSPW<0) {
455 if (fdSPW<0) {
415 PRINTF("ERR *** In configure_spw_link *** Error opening"GRSPW_DEVICE_NAME"\n")
456 PRINTF("ERR *** In configure_spw_link *** Error opening"GRSPW_DEVICE_NAME"\n")
416 }
457 }
417 rtems_task_wake_after(100);
458 rtems_task_wake_after(100);
418 }
459 }
419
460
420 PRINTF("OK *** In configure_spw_link *** "GRSPW_DEVICE_NAME" opened and started successfully\n")
461 PRINTF("OK *** In configure_spw_link *** "GRSPW_DEVICE_NAME" opened and started successfully\n")
421
462
422 spacewire_set_NP(1, REGS_ADDR_GRSPW); // No Port force
463 spacewire_set_NP(1, REGS_ADDR_GRSPW); // No Port force
423 spacewire_set_RE(1, REGS_ADDR_GRSPW); // the dedicated call seems to break the no port force configuration
464 spacewire_set_RE(1, REGS_ADDR_GRSPW); // the dedicated call seems to break the no port force configuration
424
465
425 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_RXBLOCK, 1); // sets the blocking mode for reception
466 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_RXBLOCK, 1); // sets the blocking mode for reception
426 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_RXBLOCK\n")
467 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_RXBLOCK\n")
427 //
468 //
428 //status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_EVENT_ID, Task_id[TASKID_SPIQ]); // sets the task ID to which an event is sent when a
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
429 //if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_EVENT_ID\n") // link-error interrupt occurs
470 //if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_EVENT_ID\n") // link-error interrupt occurs
430 //
471 //
431 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_DISABLE_ERR, 0); // automatic link-disabling due to link-error interrupts
472 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_DISABLE_ERR, 0); // automatic link-disabling due to link-error interrupts
432 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_DISABLE_ERR\n")
473 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_DISABLE_ERR\n")
433 //
474 //
434 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ, 1); // sets the link-error interrupt bit
475 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ, 1); // sets the link-error interrupt bit
435 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n")
476 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n")
436 //
477 //
437 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TXBLOCK, 0); // transmission blocks
478 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TXBLOCK, 0); // transmission blocks
438 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TXBLOCK\n")
479 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TXBLOCK\n")
439 //
480 //
440 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL, 0); // transmission blocks on full
481 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL, 0); // transmission blocks on full
441 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL\n")
482 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL\n")
442 //
483 //
443 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TCODE_CTRL, 0x0909);
484 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TCODE_CTRL, 0x0909);
444 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TCODE_CTRL,\n")
485 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TCODE_CTRL,\n")
445
486
446 PRINTF("OK *** in configure_spw_link *** "GRSPW_DEVICE_NAME" configured successfully\n")
487 PRINTF("OK *** in configure_spw_link *** "GRSPW_DEVICE_NAME" configured successfully\n")
447
488
448 return RTEMS_SUCCESSFUL;
489 return RTEMS_SUCCESSFUL;
449 }
490 }
450
491
451 int spacewire_wait_for_link(void)
492 int spacewire_wait_for_link(void)
452 {
493 {
453 unsigned int i;
494 unsigned int i;
454 int linkStatus;
495 int linkStatus;
455 rtems_status_code status = RTEMS_UNSATISFIED;
496 rtems_status_code status = RTEMS_UNSATISFIED;
456
497
457 for(i = 0; i< 10; i++){
498 for(i = 0; i< 10; i++){
458 PRINTF(".")
499 PRINTF(".")
459 fflush( stdout );
500 fflush( stdout );
460 ioctl(fdSPW, SPACEWIRE_IOCTRL_GET_LINK_STATUS, &linkStatus); // get the link status
501 ioctl(fdSPW, SPACEWIRE_IOCTRL_GET_LINK_STATUS, &linkStatus); // get the link status
461 PRINTF1("in spacewire_try_to_start *** link status is: %s\n", lstates[linkStatus])
502 PRINTF1("in spacewire_try_to_start *** link status is: %s\n", lstates[linkStatus])
462 if ( linkStatus == 5) {
503 if ( linkStatus == 5) {
463 PRINTF("in spacewire_try_to_start *** link is running\n")
504 PRINTF("in spacewire_try_to_start *** link is running\n")
464 status = RTEMS_SUCCESSFUL;
505 status = RTEMS_SUCCESSFUL;
465 break;
506 break;
466 }
507 }
467 rtems_task_wake_after(100);
508 rtems_task_wake_after(100);
468 }
509 }
469
510
470 return status;
511 return status;
471 }
512 }
472
513
473 void spacewire_set_NP(unsigned char val, unsigned int regAddr) // [N]o [P]ort force
514 void spacewire_set_NP(unsigned char val, unsigned int regAddr) // [N]o [P]ort force
474 {
515 {
475 unsigned int *spwptr = (unsigned int*) regAddr;
516 unsigned int *spwptr = (unsigned int*) regAddr;
476
517
477 if (val == 1) {
518 if (val == 1) {
478 *spwptr = *spwptr | 0x00100000; // [NP] set the No port force bit
519 *spwptr = *spwptr | 0x00100000; // [NP] set the No port force bit
479 }
520 }
480 if (val== 0) {
521 if (val== 0) {
481 *spwptr = *spwptr & 0xffdfffff;
522 *spwptr = *spwptr & 0xffdfffff;
482 }
523 }
483 }
524 }
484
525
485 void spacewire_set_RE(unsigned char val, unsigned int regAddr) // [R]MAP [E]nable
526 void spacewire_set_RE(unsigned char val, unsigned int regAddr) // [R]MAP [E]nable
486 {
527 {
487 unsigned int *spwptr = (unsigned int*) regAddr;
528 unsigned int *spwptr = (unsigned int*) regAddr;
488
529
489 if (val == 1)
530 if (val == 1)
490 {
531 {
491 *spwptr = *spwptr | 0x00010000; // [RE] set the RMAP Enable bit
532 *spwptr = *spwptr | 0x00010000; // [RE] set the RMAP Enable bit
492 }
533 }
493 if (val== 0)
534 if (val== 0)
494 {
535 {
495 *spwptr = *spwptr & 0xfffdffff;
536 *spwptr = *spwptr & 0xfffdffff;
496 }
537 }
497 }
538 }
498
539
499 void spacewire_compute_stats_offsets()
540 void spacewire_compute_stats_offsets()
500 {
541 {
501 spw_stats spacewire_stats_grspw;
542 spw_stats spacewire_stats_grspw;
502 rtems_status_code status;
543 rtems_status_code status;
503
544
504 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_GET_STATISTICS, &spacewire_stats_grspw );
545 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_GET_STATISTICS, &spacewire_stats_grspw );
505
546
506 spacewire_stats_backup.packets_received = spacewire_stats_grspw.packets_received
547 spacewire_stats_backup.packets_received = spacewire_stats_grspw.packets_received
507 + spacewire_stats.packets_received;
548 + spacewire_stats.packets_received;
508 spacewire_stats_backup.packets_sent = spacewire_stats_grspw.packets_sent
549 spacewire_stats_backup.packets_sent = spacewire_stats_grspw.packets_sent
509 + spacewire_stats.packets_sent;
550 + spacewire_stats.packets_sent;
510 spacewire_stats_backup.parity_err = spacewire_stats_grspw.parity_err
551 spacewire_stats_backup.parity_err = spacewire_stats_grspw.parity_err
511 + spacewire_stats.parity_err;
552 + spacewire_stats.parity_err;
512 spacewire_stats_backup.disconnect_err = spacewire_stats_grspw.disconnect_err
553 spacewire_stats_backup.disconnect_err = spacewire_stats_grspw.disconnect_err
513 + spacewire_stats.disconnect_err;
554 + spacewire_stats.disconnect_err;
514 spacewire_stats_backup.escape_err = spacewire_stats_grspw.escape_err
555 spacewire_stats_backup.escape_err = spacewire_stats_grspw.escape_err
515 + spacewire_stats.escape_err;
556 + spacewire_stats.escape_err;
516 spacewire_stats_backup.credit_err = spacewire_stats_grspw.credit_err
557 spacewire_stats_backup.credit_err = spacewire_stats_grspw.credit_err
517 + spacewire_stats.credit_err;
558 + spacewire_stats.credit_err;
518 spacewire_stats_backup.write_sync_err = spacewire_stats_grspw.write_sync_err
559 spacewire_stats_backup.write_sync_err = spacewire_stats_grspw.write_sync_err
519 + spacewire_stats.write_sync_err;
560 + spacewire_stats.write_sync_err;
520 spacewire_stats_backup.rx_rmap_header_crc_err = spacewire_stats_grspw.rx_rmap_header_crc_err
561 spacewire_stats_backup.rx_rmap_header_crc_err = spacewire_stats_grspw.rx_rmap_header_crc_err
521 + spacewire_stats.rx_rmap_header_crc_err;
562 + spacewire_stats.rx_rmap_header_crc_err;
522 spacewire_stats_backup.rx_rmap_data_crc_err = spacewire_stats_grspw.rx_rmap_data_crc_err
563 spacewire_stats_backup.rx_rmap_data_crc_err = spacewire_stats_grspw.rx_rmap_data_crc_err
523 + spacewire_stats.rx_rmap_data_crc_err;
564 + spacewire_stats.rx_rmap_data_crc_err;
524 spacewire_stats_backup.early_ep = spacewire_stats_grspw.early_ep
565 spacewire_stats_backup.early_ep = spacewire_stats_grspw.early_ep
525 + spacewire_stats.early_ep;
566 + spacewire_stats.early_ep;
526 spacewire_stats_backup.invalid_address = spacewire_stats_grspw.invalid_address
567 spacewire_stats_backup.invalid_address = spacewire_stats_grspw.invalid_address
527 + spacewire_stats.invalid_address;
568 + spacewire_stats.invalid_address;
528 spacewire_stats_backup.rx_eep_err = spacewire_stats_grspw.rx_eep_err
569 spacewire_stats_backup.rx_eep_err = spacewire_stats_grspw.rx_eep_err
529 + spacewire_stats.rx_eep_err;
570 + spacewire_stats.rx_eep_err;
530 spacewire_stats_backup.rx_truncated = spacewire_stats_grspw.rx_truncated
571 spacewire_stats_backup.rx_truncated = spacewire_stats_grspw.rx_truncated
531 + spacewire_stats.rx_truncated;
572 + spacewire_stats.rx_truncated;
532 }
573 }
533
574
534 rtems_status_code write_spw(spw_ioctl_pkt_send* spw_ioctl_send)
575 rtems_status_code write_spw(spw_ioctl_pkt_send* spw_ioctl_send)
535 {
576 {
536 rtems_status_code status;
577 rtems_status_code status;
537 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, spw_ioctl_send );
578 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, spw_ioctl_send );
538 if (status != RTEMS_SUCCESSFUL){
579 if (status != RTEMS_SUCCESSFUL){
539 //PRINTF1("ERR *** in write_spw *** write operation failed with code: %d\n", status)
580 //PRINTF1("ERR *** in write_spw *** write operation failed with code: %d\n", status)
540 }
581 }
541 return status;
582 return status;
542 }
583 }
543
584
544 void timecode_irq_handler(void *pDev, void *regs, int minor, unsigned int tc)
585 void timecode_irq_handler(void *pDev, void *regs, int minor, unsigned int tc)
545 {
586 {
546 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_1 ) != RTEMS_SUCCESSFUL) {
587 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_1 ) != RTEMS_SUCCESSFUL) {
547 printf("In timecode_irq_handler *** Error sending event to DUMB\n");
588 printf("In timecode_irq_handler *** Error sending event to DUMB\n");
548 }
589 }
549 }
590 }
@@ -1,1216 +1,1281
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[5] = {"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 };
9 };
10
10
11 unsigned char currentTC_LEN_RCV[2]; // SHALL be equal to the current TC packet estimated packet length field
11 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];
12 unsigned char currentTC_COMPUTED_CRC[2];
13 unsigned int currentTC_LEN_RCV_AsUnsignedInt;
13 unsigned int currentTC_LEN_RCV_AsUnsignedInt;
14 unsigned int currentTM_length;
14 unsigned int currentTM_length;
15 unsigned char currentTC_processedFlag;
15 unsigned char currentTC_processedFlag;
16
16
17 unsigned int lookUpTableForCRC[256];
17 unsigned int lookUpTableForCRC[256];
18
18
19 //**********************
19 //**********************
20 // GENERAL USE FUNCTIONS
20 // GENERAL USE FUNCTIONS
21 unsigned int Crc_opt( unsigned char D, unsigned int Chk)
21 unsigned int Crc_opt( unsigned char D, unsigned int Chk)
22 {
22 {
23 return(((Chk << 8) & 0xff00)^lookUpTableForCRC [(((Chk >> 8)^D) & 0x00ff)]);
23 return(((Chk << 8) & 0xff00)^lookUpTableForCRC [(((Chk >> 8)^D) & 0x00ff)]);
24 }
24 }
25
25
26 void initLookUpTableForCRC( void )
26 void initLookUpTableForCRC( void )
27 {
27 {
28 unsigned int i;
28 unsigned int i;
29 unsigned int tmp;
29 unsigned int tmp;
30
30
31 for (i=0; i<256; i++)
31 for (i=0; i<256; i++)
32 {
32 {
33 tmp = 0;
33 tmp = 0;
34 if((i & 1) != 0) {
34 if((i & 1) != 0) {
35 tmp = tmp ^ 0x1021;
35 tmp = tmp ^ 0x1021;
36 }
36 }
37 if((i & 2) != 0) {
37 if((i & 2) != 0) {
38 tmp = tmp ^ 0x2042;
38 tmp = tmp ^ 0x2042;
39 }
39 }
40 if((i & 4) != 0) {
40 if((i & 4) != 0) {
41 tmp = tmp ^ 0x4084;
41 tmp = tmp ^ 0x4084;
42 }
42 }
43 if((i & 8) != 0) {
43 if((i & 8) != 0) {
44 tmp = tmp ^ 0x8108;
44 tmp = tmp ^ 0x8108;
45 }
45 }
46 if((i & 16) != 0) {
46 if((i & 16) != 0) {
47 tmp = tmp ^ 0x1231;
47 tmp = tmp ^ 0x1231;
48 }
48 }
49 if((i & 32) != 0) {
49 if((i & 32) != 0) {
50 tmp = tmp ^ 0x2462;
50 tmp = tmp ^ 0x2462;
51 }
51 }
52 if((i & 64) != 0) {
52 if((i & 64) != 0) {
53 tmp = tmp ^ 0x48c4;
53 tmp = tmp ^ 0x48c4;
54 }
54 }
55 if((i & 128) != 0) {
55 if((i & 128) != 0) {
56 tmp = tmp ^ 0x9188;
56 tmp = tmp ^ 0x9188;
57 }
57 }
58 lookUpTableForCRC[i] = tmp;
58 lookUpTableForCRC[i] = tmp;
59 }
59 }
60 }
60 }
61
61
62 void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData)
62 void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData)
63 {
63 {
64 unsigned int Chk;
64 unsigned int Chk;
65 int j;
65 int j;
66 Chk = 0xffff; // reset the syndrom to all ones
66 Chk = 0xffff; // reset the syndrom to all ones
67 for (j=0; j<sizeOfData; j++) {
67 for (j=0; j<sizeOfData; j++) {
68 Chk = Crc_opt(data[j], Chk);
68 Chk = Crc_opt(data[j], Chk);
69 }
69 }
70 crcAsTwoBytes[0] = (unsigned char) (Chk >> 8);
70 crcAsTwoBytes[0] = (unsigned char) (Chk >> 8);
71 crcAsTwoBytes[1] = (unsigned char) (Chk & 0x00ff);
71 crcAsTwoBytes[1] = (unsigned char) (Chk & 0x00ff);
72 }
72 }
73
73
74 //*********************
74 //*********************
75 // ACCEPTANCE FUNCTIONS
75 // ACCEPTANCE FUNCTIONS
76 int TC_acceptance(ccsdsTelecommandPacket_t *TC, unsigned int tc_len_recv)
76 int TC_acceptance(ccsdsTelecommandPacket_t *TC, unsigned int tc_len_recv)
77 {
77 {
78 int ret = 0;
78 int ret = 0;
79 rtems_status_code status;
79 rtems_status_code status;
80 spw_ioctl_pkt_send spw_ioctl_send;
80 spw_ioctl_pkt_send spw_ioctl_send;
81 TMHeader_t TM_header;
81 TMHeader_t TM_header;
82 unsigned int code = 0;
82 unsigned int code = 0;
83 unsigned char computed_CRC[2];
83 unsigned char computed_CRC[2];
84 char data[ PACKET_LENGTH_TC_EXE_CORRUPTED + CCSDS_TC_TM_PACKET_OFFSET - TM_HEADER_LEN ];
84 char data[ PACKET_LENGTH_TC_EXE_CORRUPTED + CCSDS_TC_TM_PACKET_OFFSET - TM_HEADER_LEN ];
85
85
86 GetCRCAsTwoBytes( (unsigned char*) TC->packetID, computed_CRC, tc_len_recv + 5 );
86 GetCRCAsTwoBytes( (unsigned char*) TC->packetID, computed_CRC, tc_len_recv + 5 );
87 code = TC_parser( TC, tc_len_recv ) ;
87 code = TC_parser( TC, tc_len_recv ) ;
88 if ( (code == ILLEGAL_APID) | (code == WRONG_LEN_PACKET) | (code == INCOR_CHECKSUM)
88 if ( (code == ILLEGAL_APID) | (code == WRONG_LEN_PACKET) | (code == INCOR_CHECKSUM)
89 | (code == ILL_TYPE) | (code == ILL_SUBTYPE) | (code == WRONG_APP_DATA) )
89 | (code == ILL_TYPE) | (code == ILL_SUBTYPE) | (code == WRONG_APP_DATA) )
90 { // generate TM_LFR_TC_EXE_CORRUPTED
90 { // generate TM_LFR_TC_EXE_CORRUPTED
91 // BUILD HEADER
91 // BUILD HEADER
92 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_CORRUPTED,
92 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_CORRUPTED,
93 &TM_header, TC->sourceID); // TC source ID
93 &TM_header, TC->sourceID); // TC source ID
94 // BUILD DATA
94 // BUILD DATA
95 TM_build_data( TC, data, SID_EXE_CORR, computed_CRC);
95 TM_build_data( TC, data, SID_EXE_CORR, computed_CRC);
96 // PREPARE TM SENDING
96 // PREPARE TM SENDING
97 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
97 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
98 spw_ioctl_send.hdr = (char*) &TM_header;
98 spw_ioctl_send.hdr = (char*) &TM_header;
99 spw_ioctl_send.dlen = 16;
99 spw_ioctl_send.dlen = 16;
100 spw_ioctl_send.data = data;
100 spw_ioctl_send.data = data;
101 // SEND PACKET
101 // SEND PACKET
102 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
102 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
103 }
103 }
104 else { // send valid TC to the action launcher
104 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);
105 status = rtems_message_queue_send( misc_id[0], TC, tc_len_recv + CCSDS_TC_TM_PACKET_OFFSET + 3);
106 ret = -1;
106 ret = -1;
107 }
107 }
108 return ret;
108 return ret;
109 }
109 }
110
110
111 unsigned char TC_parser(ccsdsTelecommandPacket_t * TMPacket, unsigned int TC_LEN_RCV)
111 unsigned char TC_parser(ccsdsTelecommandPacket_t * TMPacket, unsigned int TC_LEN_RCV)
112 {
112 {
113 unsigned char ret = 0;
113 unsigned char ret = 0;
114 unsigned char pid = 0;
114 unsigned char pid = 0;
115 unsigned char category = 0;
115 unsigned char category = 0;
116 unsigned int length = 0;
116 unsigned int length = 0;
117 unsigned char packetType = 0;
117 unsigned char packetType = 0;
118 unsigned char packetSubtype = 0;
118 unsigned char packetSubtype = 0;
119 unsigned char * CCSDSContent = NULL;
119 unsigned char * CCSDSContent = NULL;
120
120
121 // APID check *** APID on 2 bytes
121 // APID check *** APID on 2 bytes
122 pid = ((TMPacket->packetID[0] & 0x07)<<4) + ( (TMPacket->packetID[1]>>4) & 0x0f ); // PID = 11 *** 7 bits xxxxx210 7654xxxx
122 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
123 category = (TMPacket->packetID[1] & 0x0f); // PACKET_CATEGORY = 12 *** 4 bits xxxxxxxx xxxx3210
124 length = (TMPacket->packetLength[0] * 256) + TMPacket->packetLength[1];
124 length = (TMPacket->packetLength[0] * 256) + TMPacket->packetLength[1];
125 packetType = TMPacket->serviceType;
125 packetType = TMPacket->serviceType;
126 packetSubtype = TMPacket->serviceSubType;
126 packetSubtype = TMPacket->serviceSubType;
127
127
128 if ( pid != CCSDS_PROCESS_ID ) {
128 if ( pid != CCSDS_PROCESS_ID ) {
129 ret = ILLEGAL_APID;
129 ret = ILLEGAL_APID;
130 }
130 }
131 else if ( category != CCSDS_PACKET_CATEGORY ) {
131 else if ( category != CCSDS_PACKET_CATEGORY ) {
132 ret = ILLEGAL_APID;
132 ret = ILLEGAL_APID;
133 }
133 }
134 else if (length != TC_LEN_RCV ) { // packet length check
134 else if (length != TC_LEN_RCV ) { // packet length check
135 ret = WRONG_LEN_PACKET; // LEN RCV != SIZE FIELD
135 ret = WRONG_LEN_PACKET; // LEN RCV != SIZE FIELD
136 }
136 }
137 else if ( length >= CCSDS_TC_PKT_MAX_SIZE ) {
137 else if ( length >= CCSDS_TC_PKT_MAX_SIZE ) {
138 ret = WRONG_LEN_PACKET; // check that the packet does not exceed the MAX size
138 ret = WRONG_LEN_PACKET; // check that the packet does not exceed the MAX size
139 }
139 }
140 else if ( packetType == TC_TYPE_GEN ){ // service type, subtype and packet length check
140 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
141 switch(packetSubtype){ //subtype, autorized values are 3, 20, 21, 24, 27, 28, 30, 40, 50, 60, 61
142 case TC_SUBTYPE_RESET:
142 case TC_SUBTYPE_RESET:
143 if (length!=(TC_LEN_RESET-CCSDS_TC_TM_PACKET_OFFSET)) {
143 if (length!=(TC_LEN_RESET-CCSDS_TC_TM_PACKET_OFFSET)) {
144 ret = WRONG_LEN_PACKET;
144 ret = WRONG_LEN_PACKET;
145 }
145 }
146 else {
146 else {
147 ret = CCSDS_TM_VALID;
147 ret = CCSDS_TM_VALID;
148 }
148 }
149 break;
149 break;
150 case TC_SUBTYPE_LOAD_COMM:
150 case TC_SUBTYPE_LOAD_COMM:
151 if (length!=(TC_LEN_LOAD_COMM-CCSDS_TC_TM_PACKET_OFFSET)) {
151 if (length!=(TC_LEN_LOAD_COMM-CCSDS_TC_TM_PACKET_OFFSET)) {
152 ret = WRONG_LEN_PACKET;
152 ret = WRONG_LEN_PACKET;
153 }
153 }
154 else {
154 else {
155 ret = CCSDS_TM_VALID;
155 ret = CCSDS_TM_VALID;
156 }
156 }
157 break;
157 break;
158 case TC_SUBTYPE_LOAD_NORM:
158 case TC_SUBTYPE_LOAD_NORM:
159 if (length!=(TC_LEN_LOAD_NORM-CCSDS_TC_TM_PACKET_OFFSET)) {
159 if (length!=(TC_LEN_LOAD_NORM-CCSDS_TC_TM_PACKET_OFFSET)) {
160 ret = WRONG_LEN_PACKET;
160 ret = WRONG_LEN_PACKET;
161 }
161 }
162 else {
162 else {
163 ret = CCSDS_TM_VALID;
163 ret = CCSDS_TM_VALID;
164 }
164 }
165 break;
165 break;
166 case TC_SUBTYPE_LOAD_BURST:
166 case TC_SUBTYPE_LOAD_BURST:
167 if (length!=(TC_LEN_LOAD_BURST-CCSDS_TC_TM_PACKET_OFFSET)) {
167 if (length!=(TC_LEN_LOAD_BURST-CCSDS_TC_TM_PACKET_OFFSET)) {
168 ret = WRONG_LEN_PACKET;
168 ret = WRONG_LEN_PACKET;
169 }
169 }
170 else {
170 else {
171 ret = CCSDS_TM_VALID;
171 ret = CCSDS_TM_VALID;
172 }
172 }
173 break;
173 break;
174 case TC_SUBTYPE_LOAD_SBM1:
174 case TC_SUBTYPE_LOAD_SBM1:
175 if (length!=(TC_LEN_LOAD_SBM1-CCSDS_TC_TM_PACKET_OFFSET)) {
175 if (length!=(TC_LEN_LOAD_SBM1-CCSDS_TC_TM_PACKET_OFFSET)) {
176 ret = WRONG_LEN_PACKET;
176 ret = WRONG_LEN_PACKET;
177 }
177 }
178 else {
178 else {
179 ret = CCSDS_TM_VALID;
179 ret = CCSDS_TM_VALID;
180 }
180 }
181 break;
181 break;
182 case TC_SUBTYPE_LOAD_SBM2:
182 case TC_SUBTYPE_LOAD_SBM2:
183 if (length!=(TC_LEN_LOAD_SBM2-CCSDS_TC_TM_PACKET_OFFSET)) {
183 if (length!=(TC_LEN_LOAD_SBM2-CCSDS_TC_TM_PACKET_OFFSET)) {
184 ret = WRONG_LEN_PACKET;
184 ret = WRONG_LEN_PACKET;
185 }
185 }
186 else {
186 else {
187 ret = CCSDS_TM_VALID;
187 ret = CCSDS_TM_VALID;
188 }
188 }
189 break;
189 break;
190 case TC_SUBTYPE_DUMP:
190 case TC_SUBTYPE_DUMP:
191 if (length!=(TC_LEN_DUMP-CCSDS_TC_TM_PACKET_OFFSET)) {
191 if (length!=(TC_LEN_DUMP-CCSDS_TC_TM_PACKET_OFFSET)) {
192 ret = WRONG_LEN_PACKET;
192 ret = WRONG_LEN_PACKET;
193 }
193 }
194 else {
194 else {
195 ret = CCSDS_TM_VALID;
195 ret = CCSDS_TM_VALID;
196 }
196 }
197 break;
197 break;
198 case TC_SUBTYPE_ENTER:
198 case TC_SUBTYPE_ENTER:
199 if (length!=(TC_LEN_ENTER-CCSDS_TC_TM_PACKET_OFFSET)) {
199 if (length!=(TC_LEN_ENTER-CCSDS_TC_TM_PACKET_OFFSET)) {
200 ret = WRONG_LEN_PACKET;
200 ret = WRONG_LEN_PACKET;
201 }
201 }
202 else {
202 else {
203 ret = CCSDS_TM_VALID;
203 ret = CCSDS_TM_VALID;
204 }
204 }
205 break;
205 break;
206 case TC_SUBTYPE_UPDT_INFO:
206 case TC_SUBTYPE_UPDT_INFO:
207 if (length!=(TC_LEN_UPDT_INFO-CCSDS_TC_TM_PACKET_OFFSET)) {
207 if (length!=(TC_LEN_UPDT_INFO-CCSDS_TC_TM_PACKET_OFFSET)) {
208 ret = WRONG_LEN_PACKET;
208 ret = WRONG_LEN_PACKET;
209 }
209 }
210 else {
210 else {
211 ret = CCSDS_TM_VALID;
211 ret = CCSDS_TM_VALID;
212 }
212 }
213 break;
213 break;
214 case TC_SUBTYPE_EN_CAL:
214 case TC_SUBTYPE_EN_CAL:
215 if (length!=(TC_LEN_EN_CAL-CCSDS_TC_TM_PACKET_OFFSET)) {
215 if (length!=(TC_LEN_EN_CAL-CCSDS_TC_TM_PACKET_OFFSET)) {
216 ret = WRONG_LEN_PACKET;
216 ret = WRONG_LEN_PACKET;
217 }
217 }
218 else {
218 else {
219 ret = CCSDS_TM_VALID;
219 ret = CCSDS_TM_VALID;
220 }
220 }
221 break;
221 break;
222 case TC_SUBTYPE_DIS_CAL:
222 case TC_SUBTYPE_DIS_CAL:
223 if (length!=(TC_LEN_DIS_CAL-CCSDS_TC_TM_PACKET_OFFSET)) {
223 if (length!=(TC_LEN_DIS_CAL-CCSDS_TC_TM_PACKET_OFFSET)) {
224 ret = WRONG_LEN_PACKET;
224 ret = WRONG_LEN_PACKET;
225 }
225 }
226 else {
226 else {
227 ret = CCSDS_TM_VALID;
227 ret = CCSDS_TM_VALID;
228 }
228 }
229 break;
229 break;
230 default:
230 default:
231 ret = ILL_SUBTYPE;
231 ret = ILL_SUBTYPE;
232 break;
232 break;
233 }
233 }
234 }
234 }
235 else if ( packetType == TC_TYPE_TIME ){
235 else if ( packetType == TC_TYPE_TIME ){
236 if (packetSubtype!=TC_SUBTYPE_UPDT_TIME) {
236 if (packetSubtype!=TC_SUBTYPE_UPDT_TIME) {
237 ret = ILL_SUBTYPE;
237 ret = ILL_SUBTYPE;
238 }
238 }
239 else if (length!=(TC_LEN_UPDT_TIME-CCSDS_TC_TM_PACKET_OFFSET)) {
239 else if (length!=(TC_LEN_UPDT_TIME-CCSDS_TC_TM_PACKET_OFFSET)) {
240 ret = WRONG_LEN_PACKET;
240 ret = WRONG_LEN_PACKET;
241 }
241 }
242 else {
242 else {
243 ret = CCSDS_TM_VALID;
243 ret = CCSDS_TM_VALID;
244 }
244 }
245 }
245 }
246 else {
246 else {
247 ret = ILL_TYPE;
247 ret = ILL_TYPE;
248 }
248 }
249
249
250 // source ID check // Source ID not documented in the ICD
250 // source ID check // Source ID not documented in the ICD
251
251
252 // packet error control, CRC check
252 // packet error control, CRC check
253 if ( ret == CCSDS_TM_VALID ) {
253 if ( ret == CCSDS_TM_VALID ) {
254 CCSDSContent = (unsigned char*) TMPacket->packetID;
254 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
255 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]) {
256 if (currentTC_COMPUTED_CRC[0] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -2]) {
257 ret = INCOR_CHECKSUM;
257 ret = INCOR_CHECKSUM;
258 }
258 }
259 else if (currentTC_COMPUTED_CRC[1] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -1]) {
259 else if (currentTC_COMPUTED_CRC[1] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -1]) {
260 ret = INCOR_CHECKSUM;
260 ret = INCOR_CHECKSUM;
261 }
261 }
262 else {
262 else {
263 ret = CCSDS_TM_VALID;
263 ret = CCSDS_TM_VALID;
264 }
264 }
265 }
265 }
266
266
267 return ret;
267 return ret;
268 }
268 }
269
269
270 unsigned char TM_build_header( enum TM_TYPE tm_type, unsigned int packetLength,
270 unsigned char TM_build_header( enum TM_TYPE tm_type, unsigned int packetLength,
271 TMHeader_t *TMHeader, unsigned char tc_sid)
271 TMHeader_t *TMHeader, unsigned char tc_sid)
272 {
272 {
273 TMHeader->targetLogicalAddress = CCSDS_DESTINATION_ID;
273 TMHeader->targetLogicalAddress = CCSDS_DESTINATION_ID;
274 TMHeader->protocolIdentifier = CCSDS_PROTOCOLE_ID;
274 TMHeader->protocolIdentifier = CCSDS_PROTOCOLE_ID;
275 TMHeader->reserved = 0x00;
275 TMHeader->reserved = 0x00;
276 TMHeader->userApplication = 0x00;
276 TMHeader->userApplication = 0x00;
277 TMHeader->packetID[0] = 0x0c;
277 TMHeader->packetID[0] = 0x0c;
278 TMHeader->packetSequenceControl[0] = 0xc0;
278 TMHeader->packetSequenceControl[0] = 0xc0;
279 TMHeader->packetSequenceControl[1] = 0x00;
279 TMHeader->packetSequenceControl[1] = 0x00;
280 TMHeader->packetLength[0] = (unsigned char) (packetLength>>8);
280 TMHeader->packetLength[0] = (unsigned char) (packetLength>>8);
281 TMHeader->packetLength[1] = (unsigned char) packetLength;
281 TMHeader->packetLength[1] = (unsigned char) packetLength;
282 TMHeader->spare1_pusVersion_spare2 = 0x10;
282 TMHeader->spare1_pusVersion_spare2 = 0x10;
283 TMHeader->destinationID = CCSDS_DESTINATION_ID; // default destination id
283 TMHeader->destinationID = CCSDS_DESTINATION_ID; // default destination id
284 switch (tm_type){
284 switch (tm_type){
285 case(TM_LFR_TC_EXE_OK):
285 case(TM_LFR_TC_EXE_OK):
286 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_TC_EXE;
286 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_TC_EXE;
287 TMHeader->serviceType = TM_TYPE_TC_EXE; // type
287 TMHeader->serviceType = TM_TYPE_TC_EXE; // type
288 TMHeader->serviceSubType = TM_SUBTYPE_EXE_OK; // subtype
288 TMHeader->serviceSubType = TM_SUBTYPE_EXE_OK; // subtype
289 TMHeader->destinationID = tc_sid; // destination id
289 TMHeader->destinationID = tc_sid; // destination id
290 break;
290 break;
291 case(TM_LFR_TC_EXE_ERR):
291 case(TM_LFR_TC_EXE_ERR):
292 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_TC_EXE;
292 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_TC_EXE;
293 TMHeader->serviceType = TM_TYPE_TC_EXE; // type
293 TMHeader->serviceType = TM_TYPE_TC_EXE; // type
294 TMHeader->serviceSubType = TM_SUBTYPE_EXE_NOK; // subtype
294 TMHeader->serviceSubType = TM_SUBTYPE_EXE_NOK; // subtype
295 break;
295 break;
296 case(TM_LFR_HK):
296 case(TM_LFR_HK):
297 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_HK;
297 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_HK;
298 TMHeader->serviceType = TM_TYPE_HK; // type
298 TMHeader->serviceType = TM_TYPE_HK; // type
299 TMHeader->serviceSubType = TM_SUBTYPE_HK; // subtype
299 TMHeader->serviceSubType = TM_SUBTYPE_HK; // subtype
300 break;
300 break;
301 case(TM_LFR_SCI):
301 case(TM_LFR_SCI):
302 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_SCIENCE_NORMAL;
302 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_SCIENCE_NORMAL;
303 TMHeader->serviceType = TM_TYPE_LFR_SCIENCE; // type
303 TMHeader->serviceType = TM_TYPE_LFR_SCIENCE; // type
304 TMHeader->serviceSubType = TM_SUBTYPE_SCIENCE; // subtype
304 TMHeader->serviceSubType = TM_SUBTYPE_SCIENCE; // subtype
305 break;
305 break;
306 case(TM_LFR_SCI_SBM):
306 case(TM_LFR_SCI_SBM):
307 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2;
307 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2;
308 TMHeader->serviceType = TM_TYPE_LFR_SCIENCE; // type
308 TMHeader->serviceType = TM_TYPE_LFR_SCIENCE; // type
309 TMHeader->serviceSubType = TM_SUBTYPE_SCIENCE; // subtype
309 TMHeader->serviceSubType = TM_SUBTYPE_SCIENCE; // subtype
310 break;
310 break;
311 case(TM_LFR_PAR_DUMP):
311 case(TM_LFR_PAR_DUMP):
312 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_PARAMETER_DUMP;
312 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_PARAMETER_DUMP;
313 TMHeader->serviceType = TM_TYPE_HK; // type
313 TMHeader->serviceType = TM_TYPE_HK; // type
314 TMHeader->serviceSubType = TM_SUBTYPE_HK; // subtype
314 TMHeader->serviceSubType = TM_SUBTYPE_HK; // subtype
315 break;
315 break;
316 default:
316 default:
317 return 0;
317 return 0;
318 }
318 }
319 TMHeader->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
319 TMHeader->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
320 TMHeader->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
320 TMHeader->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
321 TMHeader->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
321 TMHeader->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
322 TMHeader->time[3] = (unsigned char) (time_management_regs->coarse_time);
322 TMHeader->time[3] = (unsigned char) (time_management_regs->coarse_time);
323 TMHeader->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
323 TMHeader->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
324 TMHeader->time[5] = (unsigned char) (time_management_regs->fine_time);
324 TMHeader->time[5] = (unsigned char) (time_management_regs->fine_time);
325
325
326 return LFR_SUCCESSFUL;
326 return LFR_SUCCESSFUL;
327 }
327 }
328
328
329 unsigned char TM_build_data(ccsdsTelecommandPacket_t *TC, char* data, unsigned int SID, unsigned char *computed_CRC)
329 unsigned char TM_build_data(ccsdsTelecommandPacket_t *TC, char* data, unsigned int SID, unsigned char *computed_CRC)
330 {
330 {
331 unsigned int packetLength;
331 unsigned int packetLength;
332 packetLength = (TC->packetLength[0] * 256) + TC->packetLength[1];
332 packetLength = (TC->packetLength[0] * 256) + TC->packetLength[1];
333 switch (SID){
333 switch (SID){
334 case (SID_NOT_EXE):
334 case (SID_NOT_EXE):
335 break;
335 break;
336 case (SID_NOT_IMP):
336 case (SID_NOT_IMP):
337 data[0] = 0x9c;
337 data[0] = 0x9c;
338 data[1] = 0x42;
338 data[1] = 0x42;
339 data[2] = TC->packetID[0];
339 data[2] = TC->packetID[0];
340 data[3] = TC->packetID[1];
340 data[3] = TC->packetID[1];
341 data[4] = TC->packetSequenceControl[0];
341 data[4] = TC->packetSequenceControl[0];
342 data[5] = TC->packetSequenceControl[1];
342 data[5] = TC->packetSequenceControl[1];
343 data[6] = TC->serviceType; // type
343 data[6] = TC->serviceType; // type
344 data[7] = TC->serviceSubType; // subtype
344 data[7] = TC->serviceSubType; // subtype
345 break;
345 break;
346 case (SID_EXE_ERR):
346 case (SID_EXE_ERR):
347 break;
347 break;
348 case (SID_EXE_CORR):
348 case (SID_EXE_CORR):
349 data[0] = 0x9c;
349 data[0] = 0x9c;
350 data[1] = 0x45;
350 data[1] = 0x45;
351 data[2] = TC->packetID[0];
351 data[2] = TC->packetID[0];
352 data[3] = TC->packetID[1];
352 data[3] = TC->packetID[1];
353 data[4] = TC->packetSequenceControl[0];
353 data[4] = TC->packetSequenceControl[0];
354 data[5] = TC->packetSequenceControl[1];
354 data[5] = TC->packetSequenceControl[1];
355 data[6] = TC->serviceType; // type
355 data[6] = TC->serviceType; // type
356 data[7] = TC->serviceSubType; // subtype
356 data[7] = TC->serviceSubType; // subtype
357 data[8] = currentTC_LEN_RCV[0];
357 data[8] = currentTC_LEN_RCV[0];
358 data[9] = currentTC_LEN_RCV[1];
358 data[9] = currentTC_LEN_RCV[1];
359 data[10] = TC->packetLength[0];
359 data[10] = TC->packetLength[0];
360 data[11] = TC->packetLength[1];
360 data[11] = TC->packetLength[1];
361 data[12] = TC->dataAndCRC[packetLength];
361 data[12] = TC->dataAndCRC[packetLength];
362 data[13] = TC->dataAndCRC[packetLength+1];
362 data[13] = TC->dataAndCRC[packetLength+1];
363 data[14] = computed_CRC[0];
363 data[14] = computed_CRC[0];
364 data[15] = computed_CRC[1];
364 data[15] = computed_CRC[1];
365 break;
365 break;
366 default:
366 default:
367 return 0;
367 return 0;
368 }
368 }
369 return 1;
369 return 1;
370 }
370 }
371
371
372 int create_message_queue( void )
372 int create_message_queue( void )
373 {
373 {
374 rtems_status_code status;
374 rtems_status_code status;
375 misc_name[0] = rtems_build_name( 'Q', 'U', 'E', 'U' );
375 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,
376 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] );
377 RTEMS_FIFO | RTEMS_LOCAL, &misc_id[0] );
378 if (status!=RTEMS_SUCCESSFUL) {
378 if (status!=RTEMS_SUCCESSFUL) {
379 PRINTF("in create_message_queue *** error creating message queue\n")
379 PRINTF("in create_message_queue *** error creating message queue\n")
380 }
380 }
381
381
382 return 0;
382 return 0;
383 }
383 }
384
384
385 //***********
385 //***********
386 // RTEMS TASK
386 // RTEMS TASK
387 rtems_task recv_task( rtems_task_argument unused )
387 rtems_task recv_task( rtems_task_argument unused )
388 {
388 {
389 int len = 0;
389 int len = 0;
390 unsigned int i = 0;
390 unsigned int i = 0;
391 unsigned int data_length = 0;
391 unsigned int data_length = 0;
392 ccsdsTelecommandPacket_t currentTC;
392 ccsdsTelecommandPacket_t currentTC;
393 char data[100];
393 char data[100];
394
394
395 for(i=0; i<100; i++) data[i] = 0;
395 for(i=0; i<100; i++) data[i] = 0;
396
396
397 PRINTF("in RECV *** \n")
397 PRINTF("in RECV *** \n")
398
398
399 while(1)
399 while(1)
400 {
400 {
401 len = read(fdSPW, (char*) &currentTC, CCSDS_TC_PKT_MAX_SIZE); // the call to read is blocking
401 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
402 if (len == -1){ // error during the read call
403 PRINTF("In RECV *** last read call returned -1\n")
403 PRINTF("In RECV *** last read call returned -1\n")
404 //if (rtems_event_send( Task_id[TASKID_SPIQ], SPW_LINKERR_EVENT ) != RTEMS_SUCCESSFUL) {
404 //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")
405 // PRINTF("IN RECV *** Error: rtems_event_send SPW_LINKERR_EVENT\n")
406 //}
406 //}
407 //if (rtems_task_suspend(RTEMS_SELF) != RTEMS_SUCCESSFUL) {
407 //if (rtems_task_suspend(RTEMS_SELF) != RTEMS_SUCCESSFUL) {
408 // PRINTF("In RECV *** Error: rtems_task_suspend(RTEMS_SELF)\n")
408 // PRINTF("In RECV *** Error: rtems_task_suspend(RTEMS_SELF)\n")
409 //}
409 //}
410 }
410 }
411 else {
411 else {
412 PRINTF1("Got pck of length %d\n", len+1)
412 PRINTF1("Got pck of length %d\n", len+1)
413 if ( (len+1) < CCSDS_TC_PKT_MIN_SIZE ) {
413 if ( (len+1) < CCSDS_TC_PKT_MIN_SIZE ) {
414 PRINTF("In RECV *** packet lenght too short\n")
414 PRINTF("In RECV *** packet lenght too short\n")
415 }
415 }
416 else {
416 else {
417 currentTC_LEN_RCV[0] = 0x00;
417 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
418 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
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 // CHECK THE TC AND BUILD THE APPROPRIATE TM
420 // CHECK THE TC AND BUILD THE APPROPRIATE TM
421 data_length = TC_acceptance(&currentTC, currentTC_LEN_RCV_AsUnsignedInt);
421 data_length = TC_acceptance(&currentTC, currentTC_LEN_RCV_AsUnsignedInt);
422 if (data_length!=-1)
422 if (data_length!=-1)
423 {
423 {
424 }
424 }
425 }
425 }
426 }
426 }
427 }
427 }
428 }
428 }
429
429
430 rtems_task actn_task( rtems_task_argument unused )
430 rtems_task actn_task( rtems_task_argument unused )
431 {
431 {
432 int result;
432 int result;
433 rtems_status_code status; // RTEMS status code
433 rtems_status_code status; // RTEMS status code
434 ccsdsTelecommandPacket_t TC; // TC sent to the ACTN task
434 ccsdsTelecommandPacket_t TC; // TC sent to the ACTN task
435 size_t size; // size of the incoming TC packet
435 size_t size; // size of the incoming TC packet
436 unsigned char subtype; // subtype of the current TC packet
436 unsigned char subtype; // subtype of the current TC packet
437
437
438 result = LFR_SUCCESSFUL;
438 result = LFR_SUCCESSFUL;
439 subtype = 0; // subtype of the current TC packet
439 subtype = 0; // subtype of the current TC packet
440
440
441 PRINTF("in ACTN *** \n")
441 PRINTF("in ACTN *** \n")
442
442
443 while(1)
443 while(1)
444 {
444 {
445 status = rtems_message_queue_receive(misc_id[0], (char*) &TC, &size,
445 status = rtems_message_queue_receive(misc_id[0], (char*) &TC, &size,
446 RTEMS_WAIT, RTEMS_NO_TIMEOUT);
446 RTEMS_WAIT, RTEMS_NO_TIMEOUT);
447 if (status!=RTEMS_SUCCESSFUL) PRINTF1("ERR *** in task ACTN *** error receiving a message, code %d \n", status)
447 if (status!=RTEMS_SUCCESSFUL) PRINTF1("ERR *** in task ACTN *** error receiving a message, code %d \n", status)
448 else
448 else
449 {
449 {
450 subtype = TC.serviceSubType;
450 subtype = TC.serviceSubType;
451 switch(subtype)
451 switch(subtype)
452 {
452 {
453 case TC_SUBTYPE_RESET:
453 case TC_SUBTYPE_RESET:
454 result = action_default( &TC );
454 result = action_default( &TC );
455 break;
455 break;
456 //
456 //
457 case TC_SUBTYPE_LOAD_COMM:
457 case TC_SUBTYPE_LOAD_COMM:
458 result = action_load_comm( &TC );
458 result = action_load_comm( &TC );
459 close_action( &TC, result );
459 close_action( &TC, result );
460 break;
460 break;
461 //
461 //
462 case TC_SUBTYPE_LOAD_NORM:
462 case TC_SUBTYPE_LOAD_NORM:
463 result = action_load_norm( &TC );
463 result = action_load_norm( &TC );
464 close_action( &TC, result );
464 close_action( &TC, result );
465 break;
465 break;
466 //
466 //
467 case TC_SUBTYPE_LOAD_BURST:
467 case TC_SUBTYPE_LOAD_BURST:
468 result = action_default( &TC );
468 result = action_default( &TC );
469 close_action( &TC, result );
469 close_action( &TC, result );
470 break;
470 break;
471 //
471 //
472 case TC_SUBTYPE_LOAD_SBM1:
472 case TC_SUBTYPE_LOAD_SBM1:
473 result = action_default( &TC );
473 result = action_default( &TC );
474 close_action( &TC, result );
474 close_action( &TC, result );
475 break;
475 break;
476 //
476 //
477 case TC_SUBTYPE_LOAD_SBM2:
477 case TC_SUBTYPE_LOAD_SBM2:
478 result = action_default( &TC );
478 result = action_default( &TC );
479 close_action( &TC, result );
479 close_action( &TC, result );
480 break;
480 break;
481 //
481 //
482 case TC_SUBTYPE_DUMP:
482 case TC_SUBTYPE_DUMP:
483 result = action_default( &TC );
483 result = action_dump( &TC );
484 close_action( &TC, result );
484 close_action( &TC, result );
485 break;
485 break;
486 //
486 //
487 case TC_SUBTYPE_ENTER:
487 case TC_SUBTYPE_ENTER:
488 result = action_enter( &TC );
488 result = action_enter( &TC );
489 close_action( &TC, result );
489 close_action( &TC, result );
490 break;
490 break;
491 //
491 //
492 case TC_SUBTYPE_UPDT_INFO:
492 case TC_SUBTYPE_UPDT_INFO:
493 result = action_updt_info( &TC );
493 result = action_updt_info( &TC );
494 close_action( &TC, result );
494 close_action( &TC, result );
495 break;
495 break;
496 //
496 //
497 case TC_SUBTYPE_EN_CAL:
497 case TC_SUBTYPE_EN_CAL:
498 result = action_enable_calibration( &TC );
498 result = action_enable_calibration( &TC );
499 close_action( &TC, result );
499 close_action( &TC, result );
500 break;
500 break;
501 //
501 //
502 case TC_SUBTYPE_DIS_CAL:
502 case TC_SUBTYPE_DIS_CAL:
503 result = action_disable_calibration( &TC );
503 result = action_disable_calibration( &TC );
504 close_action( &TC, result );
504 close_action( &TC, result );
505 break;
505 break;
506 //
506 //
507 case TC_SUBTYPE_UPDT_TIME:
507 case TC_SUBTYPE_UPDT_TIME:
508 result = action_updt_time( &TC );
508 result = action_updt_time( &TC );
509 break;
509 break;
510 //
510 //
511 default:
511 default:
512 break;
512 break;
513 }
513 }
514 }
514 }
515 }
515 }
516 }
516 }
517
517
518 rtems_task dumb_task( rtems_task_argument unused )
518 rtems_task dumb_task( rtems_task_argument unused )
519 {
519 {
520 unsigned int i;
520 unsigned int i;
521 unsigned int intEventOut;
521 unsigned int intEventOut;
522 unsigned int coarse_time = 0;
522 unsigned int coarse_time = 0;
523 unsigned int fine_time = 0;
523 unsigned int fine_time = 0;
524 rtems_event_set event_out;
524 rtems_event_set event_out;
525
525
526 PRINTF("in DUMB *** \n")
526 PRINTF("in DUMB *** \n")
527
527
528 while(1){
528 while(1){
529 rtems_event_receive(RTEMS_EVENT_0 | RTEMS_EVENT_1 | RTEMS_EVENT_2 | RTEMS_EVENT_3 | RTEMS_EVENT_4,
529 rtems_event_receive(RTEMS_EVENT_0 | RTEMS_EVENT_1 | RTEMS_EVENT_2 | RTEMS_EVENT_3 | RTEMS_EVENT_4,
530 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT
530 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT
531 intEventOut = (unsigned int) event_out;
531 intEventOut = (unsigned int) event_out;
532 PRINTF1("in DUMB *** event_out %x\n", (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 param_common.sy_lfr_common0 = TC->dataAndCRC[0];
616 parameter_dump_packet.unused0 = TC->dataAndCRC[0];
617 param_common.sy_lfr_common1 = TC->dataAndCRC[1];
617 parameter_dump_packet.bw_sp0_sp1_r0_r1 = TC->dataAndCRC[1];
618
618
619 set_wfp_data_shaping(param_common.sy_lfr_common1);
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 param_norm.sy_lfr_n_swf_l = (TC->dataAndCRC[0] * 256) + TC->dataAndCRC[1];
636 parameter_dump_packet.sy_lfr_n_swf_l[0] = TC->dataAndCRC[0];
637 param_norm.sy_lfr_n_swf_p = (TC->dataAndCRC[2] * 256) + TC->dataAndCRC[3];
637 parameter_dump_packet.sy_lfr_n_swf_l[1] = TC->dataAndCRC[1];
638 param_norm.sy_lfr_n_asm_p = (TC->dataAndCRC[4] * 256) + TC->dataAndCRC[5];
638
639 param_norm.sy_lfr_n_bp_p0 = TC->dataAndCRC[6];
639 parameter_dump_packet.sy_lfr_n_swf_p[0] = TC->dataAndCRC[2];
640 param_norm.sy_lfr_n_bp_p1 = TC->dataAndCRC[7];
640 parameter_dump_packet.sy_lfr_n_swf_p[1] = TC->dataAndCRC[3];
641
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];
644
645 parameter_dump_packet.sy_lfr_n_bp_p0 = TC->dataAndCRC[6];
646 parameter_dump_packet.sy_lfr_n_bp_p1 = TC->dataAndCRC[7];
647
641 result = LFR_SUCCESSFUL;
648 result = LFR_SUCCESSFUL;
642 }
649 }
643
650
644 return result;
651 return result;
645 }
652 }
646
653
647 int action_load_burst(ccsdsTelecommandPacket_t *TC)
654 int action_load_burst(ccsdsTelecommandPacket_t *TC)
648 {
655 {
649 int result;
656 int result;
650 unsigned char lfrMode;
657 unsigned char lfrMode;
651
658
652 result = LFR_DEFAULT;
659 result = LFR_DEFAULT;
653 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
660 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
654
661
655 if ( lfrMode == LFR_MODE_BURST ) {
662 if ( lfrMode == LFR_MODE_BURST ) {
656 send_tm_lfr_tc_exe_not_executable( TC );
663 send_tm_lfr_tc_exe_not_executable( TC );
657 result = LFR_DEFAULT;
664 result = LFR_DEFAULT;
658 }
665 }
659 else {
666 else {
660 send_tm_lfr_tc_exe_not_implemented( TC );
667 send_tm_lfr_tc_exe_not_implemented( TC );
661 result = LFR_DEFAULT;
668 result = LFR_DEFAULT;
662 }
669 }
663
670
664 return result;
671 return result;
665 }
672 }
666
673
667 int action_load_sbm1(ccsdsTelecommandPacket_t *TC)
674 int action_load_sbm1(ccsdsTelecommandPacket_t *TC)
668 {
675 {
669 int result;
676 int result;
670 unsigned char lfrMode;
677 unsigned char lfrMode;
671
678
672 result = LFR_DEFAULT;
679 result = LFR_DEFAULT;
673 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
680 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
674
681
675 if ( (lfrMode == LFR_MODE_SBM1) | (lfrMode == LFR_MODE_SBM2) ) {
682 if ( (lfrMode == LFR_MODE_SBM1) | (lfrMode == LFR_MODE_SBM2) ) {
676 send_tm_lfr_tc_exe_not_executable( TC );
683 send_tm_lfr_tc_exe_not_executable( TC );
677 result = LFR_DEFAULT;
684 result = LFR_DEFAULT;
678 }
685 }
679 else {
686 else {
680 send_tm_lfr_tc_exe_not_implemented( TC );
687 send_tm_lfr_tc_exe_not_implemented( TC );
681 result = LFR_DEFAULT;
688 result = LFR_DEFAULT;
682 }
689 }
683
690
684 return result;
691 return result;
685 }
692 }
686
693
687 int action_load_sbm2(ccsdsTelecommandPacket_t *TC)
694 int action_load_sbm2(ccsdsTelecommandPacket_t *TC)
688 {
695 {
689 int result;
696 int result;
690 unsigned char lfrMode;
697 unsigned char lfrMode;
691
698
692 result = LFR_DEFAULT;
699 result = LFR_DEFAULT;
693 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
700 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
694
701
695 if ( (lfrMode == LFR_MODE_SBM1) | (lfrMode == LFR_MODE_SBM2) ) {
702 if ( (lfrMode == LFR_MODE_SBM1) | (lfrMode == LFR_MODE_SBM2) ) {
696 send_tm_lfr_tc_exe_not_executable( TC );
703 send_tm_lfr_tc_exe_not_executable( TC );
697 result = LFR_DEFAULT;
704 result = LFR_DEFAULT;
698 }
705 }
699 else {
706 else {
700 send_tm_lfr_tc_exe_not_implemented( TC );
707 send_tm_lfr_tc_exe_not_implemented( TC );
701 result = LFR_DEFAULT;
708 result = LFR_DEFAULT;
702 }
709 }
703
710
704 return result;
711 return result;
705 }
712 }
706
713
714 int action_dump(ccsdsTelecommandPacket_t *TC)
715 {
716 int status;
717 // send parameter dump packet
718 status = write(fdSPW, (char *) &parameter_dump_packet,
719 PACKET_LENGTH_PARAMETER_DUMP + CCSDS_TC_TM_PACKET_OFFSET + 4);
720 if (status == -1)
721 {
722 PRINTF1("in action_dump *** ERR sending packet, code %d", status)
723 status = RTEMS_UNSATISFIED;
724 }
725 else
726 {
727 status = RTEMS_SUCCESSFUL;
728 }
729
730 return status;
731 }
732
707 int action_updt_info(ccsdsTelecommandPacket_t *TC) {
733 int action_updt_info(ccsdsTelecommandPacket_t *TC) {
708 unsigned int val;
734 unsigned int val;
709 int result;
735 int result;
710 unsigned char lfrMode;
736 unsigned char lfrMode;
711
737
712 result = LFR_DEFAULT;
738 result = LFR_DEFAULT;
713 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
739 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
714
740
715 if ( (lfrMode == LFR_MODE_STANDBY) ) {
741 if ( (lfrMode == LFR_MODE_STANDBY) ) {
716 send_tm_lfr_tc_exe_not_executable( TC );
742 send_tm_lfr_tc_exe_not_executable( TC );
717 result = LFR_DEFAULT;
743 result = LFR_DEFAULT;
718 }
744 }
719 else {
745 else {
720 val = housekeeping_packet.hk_lfr_update_info_tc_cnt[0] * 256
746 val = housekeeping_packet.hk_lfr_update_info_tc_cnt[0] * 256
721 + housekeeping_packet.hk_lfr_update_info_tc_cnt[1];
747 + housekeeping_packet.hk_lfr_update_info_tc_cnt[1];
722 val++;
748 val++;
723 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);
724 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);
725 result = LFR_SUCCESSFUL;
751 result = LFR_SUCCESSFUL;
726 }
752 }
727
753
728 return result;
754 return result;
729 }
755 }
730
756
731 int action_enable_calibration(ccsdsTelecommandPacket_t *TC)
757 int action_enable_calibration(ccsdsTelecommandPacket_t *TC)
732 {
758 {
733 int result;
759 int result;
734 unsigned char lfrMode;
760 unsigned char lfrMode;
735
761
736 result = LFR_DEFAULT;
762 result = LFR_DEFAULT;
737 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
763 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
738
764
739 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) ) {
740 send_tm_lfr_tc_exe_not_executable( TC );
766 send_tm_lfr_tc_exe_not_executable( TC );
741 result = LFR_DEFAULT;
767 result = LFR_DEFAULT;
742 }
768 }
743 else {
769 else {
744 send_tm_lfr_tc_exe_not_implemented( TC );
770 send_tm_lfr_tc_exe_not_implemented( TC );
745 result = LFR_DEFAULT;
771 result = LFR_DEFAULT;
746 }
772 }
747 return result;
773 return result;
748 }
774 }
749
775
750 int action_disable_calibration(ccsdsTelecommandPacket_t *TC)
776 int action_disable_calibration(ccsdsTelecommandPacket_t *TC)
751 {
777 {
752 int result;
778 int result;
753 unsigned char lfrMode;
779 unsigned char lfrMode;
754
780
755 result = LFR_DEFAULT;
781 result = LFR_DEFAULT;
756 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
782 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
757
783
758 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) ) {
759 send_tm_lfr_tc_exe_not_executable( TC );
785 send_tm_lfr_tc_exe_not_executable( TC );
760 result = LFR_DEFAULT;
786 result = LFR_DEFAULT;
761 }
787 }
762 else {
788 else {
763 send_tm_lfr_tc_exe_not_implemented( TC );
789 send_tm_lfr_tc_exe_not_implemented( TC );
764 result = LFR_DEFAULT;
790 result = LFR_DEFAULT;
765 }
791 }
766 return result;
792 return result;
767 }
793 }
768
794
769 int action_updt_time(ccsdsTelecommandPacket_t *TC)
795 int action_updt_time(ccsdsTelecommandPacket_t *TC)
770 {
796 {
771 unsigned int val;
797 unsigned int val;
772
798
773 time_management_regs->coarse_time_load = (TC->dataAndCRC[0] << 24)
799 time_management_regs->coarse_time_load = (TC->dataAndCRC[0] << 24)
774 + (TC->dataAndCRC[1] << 16)
800 + (TC->dataAndCRC[1] << 16)
775 + (TC->dataAndCRC[2] << 8)
801 + (TC->dataAndCRC[2] << 8)
776 + TC->dataAndCRC[3];
802 + TC->dataAndCRC[3];
777 val = housekeeping_packet.hk_lfr_update_time_tc_cnt[0] * 256
803 val = housekeeping_packet.hk_lfr_update_time_tc_cnt[0] * 256
778 + housekeeping_packet.hk_lfr_update_time_tc_cnt[1];
804 + housekeeping_packet.hk_lfr_update_time_tc_cnt[1];
779 val++;
805 val++;
780 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);
781 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);
782 //time_management_regs->ctrl = time_management_regs->ctrl | 1;
808 //time_management_regs->ctrl = time_management_regs->ctrl | 1;
783
809
784 return LFR_SUCCESSFUL;
810 return LFR_SUCCESSFUL;
785 }
811 }
786
812
787 //*******************
813 //*******************
788 // ENTERING THE MODES
814 // ENTERING THE MODES
789
815
790 int transition_validation(unsigned char requestedMode)
816 int transition_validation(unsigned char requestedMode)
791 {
817 {
792 int status;
818 int status;
793 unsigned char lfrMode;
819 unsigned char lfrMode;
794
820
795 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
821 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
796
822
797 switch (requestedMode)
823 switch (requestedMode)
798 {
824 {
799 case LFR_MODE_STANDBY:
825 case LFR_MODE_STANDBY:
800 if ( (lfrMode == LFR_MODE_STANDBY) ) {
826 if ( (lfrMode == LFR_MODE_STANDBY) ) {
801 status = LFR_DEFAULT;
827 status = LFR_DEFAULT;
802 }
828 }
803 else
829 else
804 {
830 {
805 status = LFR_SUCCESSFUL;
831 status = LFR_SUCCESSFUL;
806 }
832 }
807 break;
833 break;
808 case LFR_MODE_NORMAL:
834 case LFR_MODE_NORMAL:
809 if ( (lfrMode == LFR_MODE_NORMAL) ) {
835 if ( (lfrMode == LFR_MODE_NORMAL) ) {
810 status = LFR_DEFAULT;
836 status = LFR_DEFAULT;
811 }
837 }
812 else {
838 else {
813 status = LFR_SUCCESSFUL;
839 status = LFR_SUCCESSFUL;
814 }
840 }
815 break;
841 break;
816 case LFR_MODE_BURST:
842 case LFR_MODE_BURST:
817 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_BURST)
843 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_BURST)
818 | (lfrMode == LFR_MODE_SBM2) ) {
844 | (lfrMode == LFR_MODE_SBM2) ) {
819 status = LFR_DEFAULT;
845 status = LFR_DEFAULT;
820 }
846 }
821 else {
847 else {
822 status = LFR_SUCCESSFUL;
848 status = LFR_SUCCESSFUL;
823 }
849 }
824 break;
850 break;
825 case LFR_MODE_SBM1:
851 case LFR_MODE_SBM1:
826 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_SBM1) ) {
852 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_SBM1) ) {
827 status = LFR_DEFAULT;
853 status = LFR_DEFAULT;
828 }
854 }
829 else {
855 else {
830 status = LFR_SUCCESSFUL;
856 status = LFR_SUCCESSFUL;
831 }
857 }
832 break;
858 break;
833 case LFR_MODE_SBM2:
859 case LFR_MODE_SBM2:
834 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_NORMAL)
860 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_NORMAL)
835 | (lfrMode == LFR_MODE_BURST) | (lfrMode == LFR_MODE_SBM2) ) {
861 | (lfrMode == LFR_MODE_BURST) | (lfrMode == LFR_MODE_SBM2) ) {
836 status = LFR_DEFAULT;
862 status = LFR_DEFAULT;
837 }
863 }
838 else {
864 else {
839 status = LFR_SUCCESSFUL;
865 status = LFR_SUCCESSFUL;
840 }
866 }
841 break;
867 break;
842 default:
868 default:
843 status = LFR_DEFAULT;
869 status = LFR_DEFAULT;
844 break;
870 break;
845 }
871 }
846
872
847 return status;
873 return status;
848 }
874 }
849
875
850 int stop_current_mode()
876 int stop_current_mode()
851 {
877 {
852 rtems_status_code status;
878 rtems_status_code status;
853 unsigned char lfrMode;
879 unsigned char lfrMode;
854
880
855 status = RTEMS_SUCCESSFUL;
881 status = RTEMS_SUCCESSFUL;
856 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4; // get the current mode
882 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4; // get the current mode
857
883
858 // mask all IRQ lines related to signal processing
884 // mask all IRQ lines related to signal processing
859 LEON_Mask_interrupt( IRQ_WF ); // mask waveform interrupt (coming from the timer VHDL IP)
885 LEON_Mask_interrupt( IRQ_WF ); // mask waveform interrupt (coming from the timer VHDL IP)
860 LEON_Mask_interrupt( IRQ_SM ); // mask spectral matrices interrupt (coming from the timer VHDL IP)
886 LEON_Mask_interrupt( IRQ_SM ); // mask spectral matrices interrupt (coming from the timer VHDL IP)
861 LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER ); // mask waveform picker interrupt
887 LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER ); // mask waveform picker interrupt
862
888
863 // clear all pending interruptions related to signal processing
889 // clear all pending interruptions related to signal processing
864 LEON_Clear_interrupt( IRQ_WF ); // clear waveform interrupt (coming from the timer VHDL IP)
890 LEON_Clear_interrupt( IRQ_WF ); // clear waveform interrupt (coming from the timer VHDL IP)
865 LEON_Clear_interrupt( IRQ_SM ); // clear spectral matrices interrupt (coming from the timer VHDL IP)
891 LEON_Clear_interrupt( IRQ_SM ); // clear spectral matrices interrupt (coming from the timer VHDL IP)
866 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); // clear waveform picker interrupt
892 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); // clear waveform picker interrupt
867
893
868 // suspend several tasks
894 // suspend several tasks
869
895
870 if (lfrMode != LFR_MODE_STANDBY) {
896 if (lfrMode != LFR_MODE_STANDBY) {
871 status = rtems_task_suspend( Task_id[TASKID_AVF0] );
897 status = rtems_task_suspend( Task_id[TASKID_AVF0] );
872 if (status == RTEMS_SUCCESSFUL) {
898 if (status == RTEMS_SUCCESSFUL) {
873 status = rtems_task_suspend( Task_id[TASKID_BPF0] );
899 status = rtems_task_suspend( Task_id[TASKID_BPF0] );
874 if (status == RTEMS_SUCCESSFUL) {
900 if (status == RTEMS_SUCCESSFUL) {
875 status = rtems_task_suspend( Task_id[TASKID_WFRM] );
901 status = rtems_task_suspend( Task_id[TASKID_WFRM] );
876 }
902 }
877 }
903 }
878 }
904 }
879
905
880 if (status != RTEMS_SUCCESSFUL)
906 if (status != RTEMS_SUCCESSFUL)
881 {
907 {
882 PRINTF("ERR *** in stop_current_mode *** suspending tasks\n")
908 PRINTF("ERR *** in stop_current_mode *** suspending tasks\n")
883 }
909 }
884
910
885 // initialize the registers
911 // initialize the registers
886 waveform_picker_regs->burst_enable = 0x00; // initialize
912 waveform_picker_regs->burst_enable = 0x00; // initialize
887
913
888 return status;
914 return status;
889 }
915 }
890
916
891 int enter_mode(unsigned char mode, ccsdsTelecommandPacket_t *TC )
917 int enter_mode(unsigned char mode, ccsdsTelecommandPacket_t *TC )
892 {
918 {
893 rtems_status_code status;
919 rtems_status_code status;
894
920
895 switch(mode){
921 switch(mode){
896 case LFR_MODE_STANDBY:
922 case LFR_MODE_STANDBY:
897 status = enter_standby_mode( TC );
923 status = enter_standby_mode( TC );
898 break;
924 break;
899 case LFR_MODE_NORMAL:
925 case LFR_MODE_NORMAL:
900 status = enter_normal_mode( TC );
926 status = enter_normal_mode( TC );
901 break;
927 break;
902 case LFR_MODE_BURST:
928 case LFR_MODE_BURST:
903 status = enter_burst_mode( TC );
929 status = enter_burst_mode( TC );
904 break;
930 break;
905 case LFR_MODE_SBM1:
931 case LFR_MODE_SBM1:
906 status = enter_sbm1_mode( TC );
932 status = enter_sbm1_mode( TC );
907 break;
933 break;
908 case LFR_MODE_SBM2:
934 case LFR_MODE_SBM2:
909 status = enter_sbm2_mode( TC );
935 status = enter_sbm2_mode( TC );
910 break;
936 break;
911 default:
937 default:
912 status = RTEMS_UNSATISFIED;
938 status = RTEMS_UNSATISFIED;
913 }
939 }
914
940
915 if (status == RTEMS_SUCCESSFUL)
941 if (status == RTEMS_SUCCESSFUL)
916 {
942 {
917 housekeeping_packet.lfr_status_word[0] = (unsigned char) ((mode << 4) + 0x0d);
943 housekeeping_packet.lfr_status_word[0] = (unsigned char) ((mode << 4) + 0x0d);
918 }
944 }
919
945
920 return status;
946 return status;
921 }
947 }
922
948
923 int enter_standby_mode(ccsdsTelecommandPacket_t *TC)
949 int enter_standby_mode(ccsdsTelecommandPacket_t *TC)
924 {
950 {
925 return LFR_SUCCESSFUL;
951 return LFR_SUCCESSFUL;
926 }
952 }
927
953
928 int enter_normal_mode( ccsdsTelecommandPacket_t *TC )
954 int enter_normal_mode( ccsdsTelecommandPacket_t *TC )
929 {
955 {
930 rtems_status_code status;
956 rtems_status_code status;
931
957
932 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
958 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
933 if (status == RTEMS_SUCCESSFUL) {
959 if (status == RTEMS_SUCCESSFUL) {
934 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
960 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
935 if (status == RTEMS_SUCCESSFUL) {
961 if (status == RTEMS_SUCCESSFUL) {
936 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
962 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
937 }
963 }
938 }
964 }
939
965
940 #ifdef GSA
966 #ifdef GSA
941 LEON_Unmask_interrupt( IRQ_WF );
967 LEON_Unmask_interrupt( IRQ_WF );
942 #else
968 #else
943 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
969 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
944 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
970 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
945 waveform_picker_regs->burst_enable = 0x07;
971 waveform_picker_regs->burst_enable = 0x07;
946 waveform_picker_regs->addr_data_f1 = (int) wf_snap_f1;
972 waveform_picker_regs->addr_data_f1 = (int) wf_snap_f1;
947 waveform_picker_regs->status = 0x00;
973 waveform_picker_regs->status = 0x00;
948 #endif
974 #endif
949 LEON_Unmask_interrupt( IRQ_SM );
975 LEON_Unmask_interrupt( IRQ_SM );
950
976
951 return status;
977 return status;
952 }
978 }
953
979
954 int enter_burst_mode(ccsdsTelecommandPacket_t *TC)
980 int enter_burst_mode(ccsdsTelecommandPacket_t *TC)
955 {
981 {
956 rtems_status_code status;
982 rtems_status_code status;
957 unsigned char lfrMode;
983 unsigned char lfrMode;
958
984
959 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
985 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
960
986
961 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
987 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
962 if (status == RTEMS_SUCCESSFUL) {
988 if (status == RTEMS_SUCCESSFUL) {
963 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
989 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
964 if (status == RTEMS_SUCCESSFUL) {
990 if (status == RTEMS_SUCCESSFUL) {
965 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
991 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
966 }
992 }
967 }
993 }
968
994
969 #ifdef GSA
995 #ifdef GSA
970 #else
996 #else
971 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
997 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
972 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
998 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
973 waveform_picker_regs->addr_data_f2 = (int) wf_snap_f2;
999 waveform_picker_regs->addr_data_f2 = (int) wf_snap_f2;
974 waveform_picker_regs->burst_enable = 0x40; // [0100 0000] burst f2, f1, f0 enable f3 f2 f1 f0
1000 waveform_picker_regs->burst_enable = 0x40; // [0100 0000] burst f2, f1, f0 enable f3 f2 f1 f0
975 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x04;
1001 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x04;
976 waveform_picker_regs->status = 0x00;
1002 waveform_picker_regs->status = 0x00;
977 #endif
1003 #endif
978
1004
979 LEON_Unmask_interrupt( IRQ_SM );
1005 LEON_Unmask_interrupt( IRQ_SM );
980
1006
981 return status;
1007 return status;
982 }
1008 }
983
1009
984 int enter_sbm1_mode(ccsdsTelecommandPacket_t *TC)
1010 int enter_sbm1_mode(ccsdsTelecommandPacket_t *TC)
985 {
1011 {
986 rtems_status_code status;
1012 rtems_status_code status;
987
1013
988 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
1014 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
989 if (status == RTEMS_SUCCESSFUL) {
1015 if (status == RTEMS_SUCCESSFUL) {
990 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
1016 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
991 if (status == RTEMS_SUCCESSFUL) {
1017 if (status == RTEMS_SUCCESSFUL) {
992 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
1018 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
993 }
1019 }
994 }
1020 }
995
1021
996 // at the beginning of the mode, the parameter local_sbm1_nb_cwf_max has a specific value
1022 // at the beginning of the mode, the parameter local_sbm1_nb_cwf_max has a specific value
997 param_local.local_sbm1_nb_cwf_max = 2 * param_norm.sy_lfr_n_swf_p / 4;
1023 param_local.local_sbm1_nb_cwf_max = 2 * (
1024 (parameter_dump_packet.sy_lfr_n_swf_p[0] * 256)
1025 + parameter_dump_packet.sy_lfr_n_swf_p[1]
1026 )/ 4;
998
1027
999 #ifdef GSA
1028 #ifdef GSA
1000 #else
1029 #else
1001 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
1030 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
1002 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
1031 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
1003 waveform_picker_regs->addr_data_f1 = (int) wf_snap_f1;
1032 waveform_picker_regs->addr_data_f1 = (int) wf_snap_f1;
1004 waveform_picker_regs->burst_enable = 0x20; // [0010 0000] burst f2, f1, f0 enable f3 f2 f1 f0
1033 waveform_picker_regs->burst_enable = 0x20; // [0010 0000] burst f2, f1, f0 enable f3 f2 f1 f0
1005 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x07; // [0111] enable f3 f2 f1 f0
1034 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x07; // [0111] enable f3 f2 f1 f0
1006 waveform_picker_regs->status = 0x00;
1035 waveform_picker_regs->status = 0x00;
1007 #endif
1036 #endif
1008
1037
1009 LEON_Unmask_interrupt( IRQ_SM );
1038 LEON_Unmask_interrupt( IRQ_SM );
1010
1039
1011 return status;
1040 return status;
1012 }
1041 }
1013
1042
1014 int enter_sbm2_mode(ccsdsTelecommandPacket_t *TC)
1043 int enter_sbm2_mode(ccsdsTelecommandPacket_t *TC)
1015 {
1044 {
1016 rtems_status_code status;
1045 rtems_status_code status;
1017
1046
1018 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
1047 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
1019 if (status == RTEMS_SUCCESSFUL) {
1048 if (status == RTEMS_SUCCESSFUL) {
1020 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
1049 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
1021 if (status == RTEMS_SUCCESSFUL) {
1050 if (status == RTEMS_SUCCESSFUL) {
1022 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
1051 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
1023 }
1052 }
1024 }
1053 }
1025
1054
1026 // at the beginning of the mode, the parameter local_sbm2_nb_cwf_max has a specific value
1055 // at the beginning of the mode, the parameter local_sbm2_nb_cwf_max has a specific value
1027 param_local.local_sbm1_nb_cwf_max = param_norm.sy_lfr_n_swf_p / 16;
1056 param_local.local_sbm1_nb_cwf_max = (
1057 (parameter_dump_packet.sy_lfr_n_swf_p[0] * 256)
1058 + parameter_dump_packet.sy_lfr_n_swf_p[1]
1059 ) / 16;
1028
1060
1029 #ifdef GSA
1061 #ifdef GSA
1030 #else
1062 #else
1031 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
1063 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
1032 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
1064 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
1033 waveform_picker_regs->addr_data_f2 = (int) wf_snap_f2;
1065 waveform_picker_regs->addr_data_f2 = (int) wf_snap_f2;
1034 waveform_picker_regs->burst_enable = 0x40; // [0100 0000] burst f2, f1, f0 enable f3 f2 f1 f0
1066 waveform_picker_regs->burst_enable = 0x40; // [0100 0000] burst f2, f1, f0 enable f3 f2 f1 f0
1035 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x04;
1067 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x04;
1036 waveform_picker_regs->status = 0x00;
1068 waveform_picker_regs->status = 0x00;
1037 #endif
1069 #endif
1038
1070
1039 LEON_Unmask_interrupt( IRQ_SM );
1071 LEON_Unmask_interrupt( IRQ_SM );
1040
1072
1041 return status;
1073 return status;
1042 }
1074 }
1043
1075
1044 //****************
1076 //****************
1045 // CLOSING ACTIONS
1077 // CLOSING ACTIONS
1046
1078
1047 int send_tm_lfr_tc_exe_success(ccsdsTelecommandPacket_t *TC)
1079 int send_tm_lfr_tc_exe_success(ccsdsTelecommandPacket_t *TC)
1048 {
1080 {
1049 rtems_status_code status;
1081 rtems_status_code status;
1050 TMHeader_t TM_header;
1082 TMHeader_t TM_header;
1051 char data[4];
1083 char data[4];
1052 spw_ioctl_pkt_send spw_ioctl_send;
1084 spw_ioctl_pkt_send spw_ioctl_send;
1053
1085
1054 TM_build_header( TM_LFR_TC_EXE_OK, PACKET_LENGTH_TC_EXE_SUCCESS,
1086 TM_build_header( TM_LFR_TC_EXE_OK, PACKET_LENGTH_TC_EXE_SUCCESS,
1055 &TM_header,
1087 &TM_header,
1056 TC->sourceID); // TC source ID
1088 TC->sourceID); // TC source ID
1057
1089
1058 data[0] = TC->packetID[0];
1090 data[0] = TC->packetID[0];
1059 data[1] = TC->packetID[1];
1091 data[1] = TC->packetID[1];
1060 data[2] = TC->packetSequenceControl[0];
1092 data[2] = TC->packetSequenceControl[0];
1061 data[3] = TC->packetSequenceControl[1];
1093 data[3] = TC->packetSequenceControl[1];
1062
1094
1063 // filling the structure for the spacewire transmission
1095 // filling the structure for the spacewire transmission
1064 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1096 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1065 spw_ioctl_send.hdr = (char*) &TM_header;
1097 spw_ioctl_send.hdr = (char*) &TM_header;
1066 spw_ioctl_send.dlen = 4;
1098 spw_ioctl_send.dlen = 4;
1067 spw_ioctl_send.data = data;
1099 spw_ioctl_send.data = data;
1068 spw_ioctl_send.options = 0;
1100 spw_ioctl_send.options = 0;
1069
1101
1070 // SEND DATA
1102 // SEND DATA
1071 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1103 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1072
1104
1073 return LFR_SUCCESSFUL;
1105 return LFR_SUCCESSFUL;
1074 }
1106 }
1075
1107
1076 int send_tm_lfr_tc_exe_not_executable(ccsdsTelecommandPacket_t *TC)
1108 int send_tm_lfr_tc_exe_not_executable(ccsdsTelecommandPacket_t *TC)
1077 {
1109 {
1078 rtems_status_code status;
1110 rtems_status_code status;
1079 TMHeader_t TM_header;
1111 TMHeader_t TM_header;
1080 char data[10];
1112 char data[10];
1081 spw_ioctl_pkt_send spw_ioctl_send;
1113 spw_ioctl_pkt_send spw_ioctl_send;
1082
1114
1083 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_NOT_EXECUTABLE,
1115 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_NOT_EXECUTABLE,
1084 &TM_header,
1116 &TM_header,
1085 TC->sourceID); // TC source ID
1117 TC->sourceID); // TC source ID
1086
1118
1087 data[0] = (char) (FAILURE_CODE_NOT_EXECUTABLE >> 8);
1119 data[0] = (char) (FAILURE_CODE_NOT_EXECUTABLE >> 8);
1088 data[1] = (char) FAILURE_CODE_NOT_EXECUTABLE;
1120 data[1] = (char) FAILURE_CODE_NOT_EXECUTABLE;
1089 data[2] = TC->packetID[0];
1121 data[2] = TC->packetID[0];
1090 data[3] = TC->packetID[1];
1122 data[3] = TC->packetID[1];
1091 data[4] = TC->packetSequenceControl[0];
1123 data[4] = TC->packetSequenceControl[0];
1092 data[5] = TC->packetSequenceControl[1];
1124 data[5] = TC->packetSequenceControl[1];
1093 data[6] = TC->serviceType; // type of the rejected TC
1125 data[6] = TC->serviceType; // type of the rejected TC
1094 data[7] = TC->serviceSubType; // subtype of the rejected TC
1126 data[7] = TC->serviceSubType; // subtype of the rejected TC
1095 data[8] = housekeeping_packet.lfr_status_word[0];
1127 data[8] = housekeeping_packet.lfr_status_word[0];
1096 data[6] = housekeeping_packet.lfr_status_word[1];
1128 data[6] = housekeeping_packet.lfr_status_word[1];
1097
1129
1098 // filling the structure for the spacewire transmission
1130 // filling the structure for the spacewire transmission
1099 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1131 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1100 spw_ioctl_send.hdr = (char*) &TM_header;
1132 spw_ioctl_send.hdr = (char*) &TM_header;
1101 spw_ioctl_send.dlen = 10;
1133 spw_ioctl_send.dlen = 10;
1102 spw_ioctl_send.data = data;
1134 spw_ioctl_send.data = data;
1103 spw_ioctl_send.options = 0;
1135 spw_ioctl_send.options = 0;
1104
1136
1105 // SEND DATA
1137 // SEND DATA
1106 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1138 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1107
1139
1108 return LFR_SUCCESSFUL;
1140 return LFR_SUCCESSFUL;
1109 }
1141 }
1110
1142
1111 int send_tm_lfr_tc_exe_not_implemented(ccsdsTelecommandPacket_t *TC)
1143 int send_tm_lfr_tc_exe_not_implemented(ccsdsTelecommandPacket_t *TC)
1112 {
1144 {
1113 rtems_status_code status;
1145 rtems_status_code status;
1114 TMHeader_t TM_header;
1146 TMHeader_t TM_header;
1115 char data[8];
1147 char data[8];
1116 spw_ioctl_pkt_send spw_ioctl_send;
1148 spw_ioctl_pkt_send spw_ioctl_send;
1117
1149
1118 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED,
1150 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED,
1119 &TM_header,
1151 &TM_header,
1120 TC->sourceID); // TC source ID
1152 TC->sourceID); // TC source ID
1121
1153
1122 data[0] = (char) (FAILURE_CODE_NOT_IMPLEMENTED >> 8);
1154 data[0] = (char) (FAILURE_CODE_NOT_IMPLEMENTED >> 8);
1123 data[1] = (char) FAILURE_CODE_NOT_IMPLEMENTED;
1155 data[1] = (char) FAILURE_CODE_NOT_IMPLEMENTED;
1124 data[2] = TC->packetID[0];
1156 data[2] = TC->packetID[0];
1125 data[3] = TC->packetID[1];
1157 data[3] = TC->packetID[1];
1126 data[4] = TC->packetSequenceControl[0];
1158 data[4] = TC->packetSequenceControl[0];
1127 data[5] = TC->packetSequenceControl[1];
1159 data[5] = TC->packetSequenceControl[1];
1128 data[6] = TC->serviceType; // type of the rejected TC
1160 data[6] = TC->serviceType; // type of the rejected TC
1129 data[7] = TC->serviceSubType; // subtype of the rejected TC
1161 data[7] = TC->serviceSubType; // subtype of the rejected TC
1130
1162
1131 // filling the structure for the spacewire transmission
1163 // filling the structure for the spacewire transmission
1132 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1164 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1133 spw_ioctl_send.hdr = (char*) &TM_header;
1165 spw_ioctl_send.hdr = (char*) &TM_header;
1134 spw_ioctl_send.dlen = 8;
1166 spw_ioctl_send.dlen = 8;
1135 spw_ioctl_send.data = data;
1167 spw_ioctl_send.data = data;
1136 spw_ioctl_send.options = 0;
1168 spw_ioctl_send.options = 0;
1137
1169
1138 // SEND DATA
1170 // SEND DATA
1139 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1171 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1140
1172
1141 return LFR_SUCCESSFUL;
1173 return LFR_SUCCESSFUL;
1142 }
1174 }
1143
1175
1176 int send_tm_lfr_tc_exe_error(ccsdsTelecommandPacket_t *TC)
1177 {
1178 rtems_status_code status;
1179 TMHeader_t TM_header;
1180 char data[8];
1181 spw_ioctl_pkt_send spw_ioctl_send;
1182
1183 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_ERROR,
1184 &TM_header,
1185 TC->sourceID); // TC source ID
1186
1187 data[0] = (char) (FAILURE_CODE_ERROR >> 8);
1188 data[1] = (char) FAILURE_CODE_ERROR;
1189 data[2] = TC->packetID[0];
1190 data[3] = TC->packetID[1];
1191 data[4] = TC->packetSequenceControl[0];
1192 data[5] = TC->packetSequenceControl[1];
1193 data[6] = TC->serviceType; // type of the rejected TC
1194 data[7] = TC->serviceSubType; // subtype of the rejected TC
1195
1196 // filling the structure for the spacewire transmission
1197 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1198 spw_ioctl_send.hdr = (char*) &TM_header;
1199 spw_ioctl_send.dlen = 8;
1200 spw_ioctl_send.data = data;
1201 spw_ioctl_send.options = 0;
1202
1203 // SEND DATA
1204 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1205
1206 return LFR_SUCCESSFUL;
1207 }
1208
1144 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC)
1209 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC)
1145 {
1210 {
1146 housekeeping_packet.hk_lfr_last_exe_tc_id[0] = TC->packetID[0];
1211 housekeeping_packet.hk_lfr_last_exe_tc_id[0] = TC->packetID[0];
1147 housekeeping_packet.hk_lfr_last_exe_tc_id[1] = TC->packetID[1];
1212 housekeeping_packet.hk_lfr_last_exe_tc_id[1] = TC->packetID[1];
1148 housekeeping_packet.hk_lfr_last_exe_tc_type[0] = 0x00;
1213 housekeeping_packet.hk_lfr_last_exe_tc_type[0] = 0x00;
1149 housekeeping_packet.hk_lfr_last_exe_tc_type[1] = TC->serviceType;
1214 housekeeping_packet.hk_lfr_last_exe_tc_type[1] = TC->serviceType;
1150 housekeeping_packet.hk_lfr_last_exe_tc_subtype[0] = 0x00;
1215 housekeeping_packet.hk_lfr_last_exe_tc_subtype[0] = 0x00;
1151 housekeeping_packet.hk_lfr_last_exe_tc_subtype[1] = TC->serviceSubType;
1216 housekeeping_packet.hk_lfr_last_exe_tc_subtype[1] = TC->serviceSubType;
1152 housekeeping_packet.hk_lfr_last_exe_tc_time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
1217 housekeeping_packet.hk_lfr_last_exe_tc_time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
1153 housekeeping_packet.hk_lfr_last_exe_tc_time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
1218 housekeeping_packet.hk_lfr_last_exe_tc_time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
1154 housekeeping_packet.hk_lfr_last_exe_tc_time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
1219 housekeeping_packet.hk_lfr_last_exe_tc_time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
1155 housekeeping_packet.hk_lfr_last_exe_tc_time[3] = (unsigned char) (time_management_regs->coarse_time);
1220 housekeeping_packet.hk_lfr_last_exe_tc_time[3] = (unsigned char) (time_management_regs->coarse_time);
1156 housekeeping_packet.hk_lfr_last_exe_tc_time[4] = (unsigned char) (time_management_regs->fine_time>>8);
1221 housekeeping_packet.hk_lfr_last_exe_tc_time[4] = (unsigned char) (time_management_regs->fine_time>>8);
1157 housekeeping_packet.hk_lfr_last_exe_tc_time[5] = (unsigned char) (time_management_regs->fine_time);
1222 housekeeping_packet.hk_lfr_last_exe_tc_time[5] = (unsigned char) (time_management_regs->fine_time);
1158 }
1223 }
1159
1224
1160 void update_last_TC_rej(ccsdsTelecommandPacket_t *TC)
1225 void update_last_TC_rej(ccsdsTelecommandPacket_t *TC)
1161 {
1226 {
1162 housekeeping_packet.hk_lfr_last_rej_tc_id[0] = TC->packetID[0];
1227 housekeeping_packet.hk_lfr_last_rej_tc_id[0] = TC->packetID[0];
1163 housekeeping_packet.hk_lfr_last_rej_tc_id[1] = TC->packetID[1];
1228 housekeeping_packet.hk_lfr_last_rej_tc_id[1] = TC->packetID[1];
1164 housekeeping_packet.hk_lfr_last_rej_tc_type[0] = 0x00;
1229 housekeeping_packet.hk_lfr_last_rej_tc_type[0] = 0x00;
1165 housekeeping_packet.hk_lfr_last_rej_tc_type[1] = TC->serviceType;
1230 housekeeping_packet.hk_lfr_last_rej_tc_type[1] = TC->serviceType;
1166 housekeeping_packet.hk_lfr_last_rej_tc_subtype[0] = 0x00;
1231 housekeeping_packet.hk_lfr_last_rej_tc_subtype[0] = 0x00;
1167 housekeeping_packet.hk_lfr_last_rej_tc_subtype[1] = TC->serviceSubType;
1232 housekeeping_packet.hk_lfr_last_rej_tc_subtype[1] = TC->serviceSubType;
1168 housekeeping_packet.hk_lfr_last_rej_tc_time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
1233 housekeeping_packet.hk_lfr_last_rej_tc_time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
1169 housekeeping_packet.hk_lfr_last_rej_tc_time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
1234 housekeeping_packet.hk_lfr_last_rej_tc_time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
1170 housekeeping_packet.hk_lfr_last_rej_tc_time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
1235 housekeeping_packet.hk_lfr_last_rej_tc_time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
1171 housekeeping_packet.hk_lfr_last_rej_tc_time[3] = (unsigned char) (time_management_regs->coarse_time);
1236 housekeeping_packet.hk_lfr_last_rej_tc_time[3] = (unsigned char) (time_management_regs->coarse_time);
1172 housekeeping_packet.hk_lfr_last_rej_tc_time[4] = (unsigned char) (time_management_regs->fine_time>>8);
1237 housekeeping_packet.hk_lfr_last_rej_tc_time[4] = (unsigned char) (time_management_regs->fine_time>>8);
1173 housekeeping_packet.hk_lfr_last_rej_tc_time[5] = (unsigned char) (time_management_regs->fine_time);
1238 housekeeping_packet.hk_lfr_last_rej_tc_time[5] = (unsigned char) (time_management_regs->fine_time);
1174 }
1239 }
1175
1240
1176 void close_action(ccsdsTelecommandPacket_t *TC, int result)
1241 void close_action(ccsdsTelecommandPacket_t *TC, int result)
1177 {
1242 {
1178 unsigned int val = 0;
1243 unsigned int val = 0;
1179 if (result == LFR_SUCCESSFUL)
1244 if (result == LFR_SUCCESSFUL)
1180 {
1245 {
1181 send_tm_lfr_tc_exe_success( TC );
1246 send_tm_lfr_tc_exe_success( TC );
1182 update_last_TC_exe( TC );
1247 update_last_TC_exe( TC );
1183 val = housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[0] * 256 + housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[1];
1248 val = housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[0] * 256 + housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[1];
1184 val++;
1249 val++;
1185 housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[0] = (unsigned char) (val >> 8);
1250 housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[0] = (unsigned char) (val >> 8);
1186 housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[1] = (unsigned char) (val);
1251 housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[1] = (unsigned char) (val);
1187 }
1252 }
1188 else
1253 else
1189 {
1254 {
1190 update_last_TC_rej( TC );
1255 update_last_TC_rej( TC );
1191 val = housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[0] * 256 + housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[1];
1256 val = housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[0] * 256 + housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[1];
1192 val++;
1257 val++;
1193 housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[0] = (unsigned char) (val >> 8);
1258 housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[0] = (unsigned char) (val >> 8);
1194 housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[1] = (unsigned char) (val);
1259 housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[1] = (unsigned char) (val);
1195 }
1260 }
1196 }
1261 }
1197
1262
1198 //***************************
1263 //***************************
1199 // Interrupt Service Routines
1264 // Interrupt Service Routines
1200 rtems_isr commutation_isr1( rtems_vector_number vector )
1265 rtems_isr commutation_isr1( rtems_vector_number vector )
1201 {
1266 {
1202 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
1267 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
1203 printf("In commutation_isr1 *** Error sending event to DUMB\n");
1268 printf("In commutation_isr1 *** Error sending event to DUMB\n");
1204 }
1269 }
1205 }
1270 }
1206
1271
1207 rtems_isr commutation_isr2( rtems_vector_number vector )
1272 rtems_isr commutation_isr2( rtems_vector_number vector )
1208 {
1273 {
1209 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
1274 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
1210 printf("In commutation_isr2 *** Error sending event to DUMB\n");
1275 printf("In commutation_isr2 *** Error sending event to DUMB\n");
1211 }
1276 }
1212 }
1277 }
1213
1278
1214
1279
1215
1280
1216
1281
@@ -1,683 +1,691
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 break;
142 break;
143
143
144 //******
144 //******
145 // NORMAL
145 // NORMAL
146 case(LFR_MODE_NORMAL):
146 case(LFR_MODE_NORMAL):
147 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
147 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")
148 PRINTF("ERR *** in waveforms_isr *** error sending event to WFRM\n")
149 }
149 }
150 break;
150 break;
151
151
152 //******
152 //******
153 // BURST
153 // BURST
154 case(LFR_MODE_BURST):
154 case(LFR_MODE_BURST):
155 break;
155 break;
156
156
157 //*****
157 //*****
158 // SBM1
158 // SBM1
159 case(LFR_MODE_SBM1):
159 case(LFR_MODE_SBM1):
160 break;
160 break;
161
161
162 //*****
162 //*****
163 // SBM2
163 // SBM2
164 case(LFR_MODE_SBM2):
164 case(LFR_MODE_SBM2):
165 break;
165 break;
166
166
167 //********
167 //********
168 // DEFAULT
168 // DEFAULT
169 default:
169 default:
170 break;
170 break;
171 }
171 }
172 }
172 }
173
173
174 rtems_task wfrm_task(rtems_task_argument argument) //used with the waveform picker VHDL IP
174 rtems_task wfrm_task(rtems_task_argument argument) //used with the waveform picker VHDL IP
175 {
175 {
176 unsigned int i;
176 unsigned int i;
177 unsigned int intEventOut;
177 unsigned int intEventOut;
178 spw_ioctl_pkt_send spw_ioctl_send_SWF;
178 spw_ioctl_pkt_send spw_ioctl_send_SWF;
179 spw_ioctl_pkt_send spw_ioctl_send_CWF;
179 spw_ioctl_pkt_send spw_ioctl_send_CWF;
180 rtems_event_set event_out;
180 rtems_event_set event_out;
181 Header_TM_LFR_SCIENCE_SWF_t headerSWF;
181 Header_TM_LFR_SCIENCE_SWF_t headerSWF;
182 Header_TM_LFR_SCIENCE_CWF_t headerCWF;
182 Header_TM_LFR_SCIENCE_CWF_t headerCWF;
183
183
184 init_header_snapshot_wf( &headerSWF );
184 init_header_snapshot_wf( &headerSWF );
185 init_header_continuous_wf( &headerCWF );
185 init_header_continuous_wf( &headerCWF );
186
186
187 // BUILD THE PACKET HEADERS
187 // 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
188 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;
189 spw_ioctl_send_SWF.hdr = (char*) &headerSWF;
190 spw_ioctl_send_SWF.options = 0;
190 spw_ioctl_send_SWF.options = 0;
191
191
192 spw_ioctl_send_CWF.hlen = TM_HEADER_LEN + 4 + 10; // + 4 is for the protocole extra header, + 10 is for the auxiliary header
192 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;
193 spw_ioctl_send_CWF.hdr = (char*) &headerCWF;
194 spw_ioctl_send_CWF.options = 0;
194 spw_ioctl_send_CWF.options = 0;
195
195
196 init_waveforms();
196 init_waveforms();
197
197
198 PRINTF("in WFRM ***\n")
198 PRINTF("in WFRM ***\n")
199
199
200 while(1){
200 while(1){
201 // wait for an RTEMS_EVENT
201 // wait for an RTEMS_EVENT
202 rtems_event_receive(RTEMS_EVENT_0 | RTEMS_EVENT_1 | RTEMS_EVENT_2 | RTEMS_EVENT_3 | RTEMS_EVENT_4,
202 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);
203 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
204 intEventOut = (unsigned int) event_out;
204 intEventOut = (unsigned int) event_out;
205 for (i = 0; i< 5; i++) {
205 for (i = 0; i< 5; i++) {
206 if ( ( (intEventOut >> i) & 0x0001) != 0 ) {
206 if ( ( (intEventOut >> i) & 0x0001) != 0 ) {
207 switch(i) {
207 switch(i) {
208 case(LFR_MODE_NORMAL):
208 case(LFR_MODE_NORMAL):
209 send_waveform_norm( &headerSWF, &spw_ioctl_send_SWF);
209 send_waveform_norm( &headerSWF, &spw_ioctl_send_SWF);
210 break;
210 break;
211 case(LFR_MODE_BURST):
211 case(LFR_MODE_BURST):
212 send_waveform_burst( &headerCWF, &spw_ioctl_send_CWF);
212 send_waveform_burst( &headerCWF, &spw_ioctl_send_CWF);
213 break;
213 break;
214 case(LFR_MODE_SBM1):
214 case(LFR_MODE_SBM1):
215 send_waveform_sbm1( &headerCWF, &spw_ioctl_send_CWF);
215 send_waveform_sbm1( &headerCWF, &spw_ioctl_send_CWF);
216 param_local.local_sbm1_nb_cwf_sent ++;
216 param_local.local_sbm1_nb_cwf_sent ++;
217 if ( param_local.local_sbm1_nb_cwf_sent == (param_local.local_sbm1_nb_cwf_max-1) ) {
217 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
218 // send the f1 buffer as a NORM snapshot
219 if (waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) {
219 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 );
220 send_waveform_SWF( &headerSWF, wf_snap_f1_bis, SID_NORM_SWF_F1, &spw_ioctl_send_SWF );
221 }
221 }
222 else {
222 else {
223 send_waveform_SWF( &headerSWF, wf_snap_f1, SID_NORM_SWF_F1, &spw_ioctl_send_SWF );
223 send_waveform_SWF( &headerSWF, wf_snap_f1, SID_NORM_SWF_F1, &spw_ioctl_send_SWF );
224 }
224 }
225 }
225 }
226 break;
226 break;
227 case(LFR_MODE_SBM2):
227 case(LFR_MODE_SBM2):
228 send_waveform_sbm2( &headerCWF, &spw_ioctl_send_CWF);
228 send_waveform_sbm2( &headerCWF, &spw_ioctl_send_CWF);
229 param_local.local_sbm2_nb_cwf_sent ++;
229 param_local.local_sbm2_nb_cwf_sent ++;
230 if ( param_local.local_sbm2_nb_cwf_sent == (param_local.local_sbm2_nb_cwf_max-1) ) {
230 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
231 // send the f2 buffer as a NORM snapshot
232 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
232 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 );
233 send_waveform_SWF( &headerSWF, wf_snap_f2_bis, SID_NORM_SWF_F2, &spw_ioctl_send_SWF );
234 }
234 }
235 else {
235 else {
236 send_waveform_SWF( &headerSWF, wf_snap_f2, SID_NORM_SWF_F2, &spw_ioctl_send_SWF );
236 send_waveform_SWF( &headerSWF, wf_snap_f2, SID_NORM_SWF_F2, &spw_ioctl_send_SWF );
237 }
237 }
238 }
238 }
239 break;
239 break;
240 default:
240 default:
241 break;
241 break;
242 }
242 }
243 }
243 }
244 }
244 }
245 }
245 }
246 }
246 }
247
247
248 //******************
248 //******************
249 // general functions
249 // general functions
250 void init_waveforms( void )
250 void init_waveforms( void )
251 {
251 {
252 int i = 0;
252 int i = 0;
253
253
254 for (i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++)
254 for (i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++)
255 {
255 {
256 //***
256 //***
257 // F0
257 // F0
258 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x88887777; //
258 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; //
259 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; //
260 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0x44443333; //
261
261
262 //***
262 //***
263 // F1
263 // F1
264 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x22221111;
264 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;
265 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;
266 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000;
267
267
268 //***
268 //***
269 // F2
269 // F2
270 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x44443333;
270 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;
271 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;
272 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000;
273
273
274 //***
274 //***
275 // F3
275 // F3
276 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 0 ] = val1;
276 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 0 ] = val1;
277 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 1 ] = val2;
277 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 1 ] = val2;
278 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 2 ] = 0xaaaa0000;
278 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 2 ] = 0xaaaa0000;
279 }
279 }
280 }
280 }
281
281
282 void init_header_snapshot_wf( Header_TM_LFR_SCIENCE_SWF_t *header)
282 void init_header_snapshot_wf( Header_TM_LFR_SCIENCE_SWF_t *header)
283 {
283 {
284 header->targetLogicalAddress = CCSDS_DESTINATION_ID;
284 header->targetLogicalAddress = CCSDS_DESTINATION_ID;
285 header->protocolIdentifier = CCSDS_PROTOCOLE_ID;
285 header->protocolIdentifier = CCSDS_PROTOCOLE_ID;
286 header->reserved = 0x00;
286 header->reserved = 0x00;
287 header->userApplication = CCSDS_USER_APP;
287 header->userApplication = CCSDS_USER_APP;
288 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL >> 8);
288 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL >> 8);
289 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL);
289 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL);
290 header->packetSequenceControl[0] = 0xc0;
290 header->packetSequenceControl[0] = 0xc0;
291 header->packetSequenceControl[1] = 0x00;
291 header->packetSequenceControl[1] = 0x00;
292 header->packetLength[0] = 0x00;
292 header->packetLength[0] = 0x00;
293 header->packetLength[1] = 0x00;
293 header->packetLength[1] = 0x00;
294 // DATA FIELD HEADER
294 // DATA FIELD HEADER
295 header->spare1_pusVersion_spare2 = 0x10;
295 header->spare1_pusVersion_spare2 = 0x10;
296 header->serviceType = TM_TYPE_LFR_SCIENCE; // service type
296 header->serviceType = TM_TYPE_LFR_SCIENCE; // service type
297 header->serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
297 header->serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
298 header->destinationID = TM_DESTINATION_ID_GROUND;
298 header->destinationID = TM_DESTINATION_ID_GROUND;
299 // AUXILIARY DATA HEADER
299 // AUXILIARY DATA HEADER
300 header->sid = 0x00;
300 header->sid = 0x00;
301 header->hkBIA = 0x1f;
301 header->hkBIA = 0x1f;
302 header->pktCnt = 0x07; // PKT_CNT
302 header->pktCnt = 0x07; // PKT_CNT
303 header->pktNr = 0x00; // PKT_NR
303 header->pktNr = 0x00; // PKT_NR
304 header->time[0] = 0x00;
304 header->time[0] = 0x00;
305 header->time[0] = 0x00;
305 header->time[0] = 0x00;
306 header->time[0] = 0x00;
306 header->time[0] = 0x00;
307 header->time[0] = 0x00;
307 header->time[0] = 0x00;
308 header->time[0] = 0x00;
308 header->time[0] = 0x00;
309 header->time[0] = 0x00;
309 header->time[0] = 0x00;
310 header->blkNr[0] = 0x00; // BLK_NR MSB
310 header->blkNr[0] = 0x00; // BLK_NR MSB
311 header->blkNr[1] = 0x00; // BLK_NR LSB
311 header->blkNr[1] = 0x00; // BLK_NR LSB
312 }
312 }
313
313
314 void init_header_continuous_wf( Header_TM_LFR_SCIENCE_CWF_t *header)
314 void init_header_continuous_wf( Header_TM_LFR_SCIENCE_CWF_t *header)
315 {
315 {
316 header->targetLogicalAddress = CCSDS_DESTINATION_ID;
316 header->targetLogicalAddress = CCSDS_DESTINATION_ID;
317 header->protocolIdentifier = CCSDS_PROTOCOLE_ID;
317 header->protocolIdentifier = CCSDS_PROTOCOLE_ID;
318 header->reserved = 0x00;
318 header->reserved = 0x00;
319 header->userApplication = CCSDS_USER_APP;
319 header->userApplication = CCSDS_USER_APP;
320 header->packetID[0] = 0x00;
320 header->packetID[0] = 0x00;
321 header->packetID[1] = 0x00;
321 header->packetID[1] = 0x00;
322 header->packetSequenceControl[0] = 0xc0;
322 header->packetSequenceControl[0] = 0xc0;
323 header->packetSequenceControl[1] = 0x00;
323 header->packetSequenceControl[1] = 0x00;
324 header->packetLength[0] = 0x00;
324 header->packetLength[0] = 0x00;
325 header->packetLength[1] = 0x00;
325 header->packetLength[1] = 0x00;
326 // DATA FIELD HEADER
326 // DATA FIELD HEADER
327 header->spare1_pusVersion_spare2 = 0x10;
327 header->spare1_pusVersion_spare2 = 0x10;
328 header->serviceType = TM_TYPE_LFR_SCIENCE; // service type
328 header->serviceType = TM_TYPE_LFR_SCIENCE; // service type
329 header->serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
329 header->serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
330 header->destinationID = TM_DESTINATION_ID_GROUND;
330 header->destinationID = TM_DESTINATION_ID_GROUND;
331 // AUXILIARY DATA HEADER
331 // AUXILIARY DATA HEADER
332 header->sid = 0x00;
332 header->sid = 0x00;
333 header->hkBIA = 0x1f;
333 header->hkBIA = 0x1f;
334 header->time[0] = 0x00;
334 header->time[0] = 0x00;
335 header->time[0] = 0x00;
335 header->time[0] = 0x00;
336 header->time[0] = 0x00;
336 header->time[0] = 0x00;
337 header->time[0] = 0x00;
337 header->time[0] = 0x00;
338 header->time[0] = 0x00;
338 header->time[0] = 0x00;
339 header->time[0] = 0x00;
339 header->time[0] = 0x00;
340 header->blkNr[0] = 0x00; // BLK_NR MSB
340 header->blkNr[0] = 0x00; // BLK_NR MSB
341 header->blkNr[1] = 0x00; // BLK_NR LSB
341 header->blkNr[1] = 0x00; // BLK_NR LSB
342 }
342 }
343
343
344 void reset_waveforms( void )
344 void reset_waveforms( void )
345 {
345 {
346 int i = 0;
346 int i = 0;
347
347
348 for (i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++)
348 for (i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++)
349 {
349 {
350 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x10002000;
350 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;
351 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;
352 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x40008000;
353
353
354 //***
354 //***
355 // F1
355 // F1
356 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x1000f000;
356 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;
357 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;
358 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x40008000;
359
359
360 //***
360 //***
361 // F2
361 // F2
362 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x40008000;
362 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;
363 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;
364 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x10002000;
365
365
366 //***
366 //***
367 // F3
367 // F3
368 /*wf_cont_f3[ i* NB_WORDS_SWF_BLK + 0 ] = build_value( i, i ); // v and 1
368 /*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
369 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*/
370 wf_cont_f3[ i* NB_WORDS_SWF_BLK + 2 ] = build_value( i, i ); // b2 and b3*/
371 }
371 }
372 }
372 }
373
373
374 void send_waveform_SWF( Header_TM_LFR_SCIENCE_SWF_t *header, volatile int *waveform,
374 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)
375 unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send)
376 {
376 {
377 unsigned int i = 0;
377 unsigned int i = 0;
378 unsigned int length = 0;
378 unsigned int length = 0;
379 rtems_status_code status;
379 rtems_status_code status;
380
380
381 header->sid = (unsigned char) sid;
381 header->sid = (unsigned char) sid;
382
382
383 for (i=0; i<7; i++) // send waveform
383 for (i=0; i<7; i++) // send waveform
384 {
384 {
385 header->pktNr = (unsigned char) i+1; // PKT_NR
385 header->pktNr = (unsigned char) i+1; // PKT_NR
386 // BUILD THE DATA
386 // BUILD THE DATA
387 if (i==6) {
387 if (i==6) {
388 spw_ioctl_send->dlen = 8 * NB_BYTES_SWF_BLK;
388 spw_ioctl_send->dlen = 8 * NB_BYTES_SWF_BLK;
389 length = TM_LEN_SCI_SWF_8;
389 length = TM_LEN_SCI_SWF_8;
390 header->blkNr[0] = 0x00; // BLK_NR MSB
390 header->blkNr[0] = 0x00; // BLK_NR MSB
391 header->blkNr[1] = 0x08; // BLK_NR LSB
391 header->blkNr[1] = 0x08; // BLK_NR LSB
392 }
392 }
393 else {
393 else {
394 spw_ioctl_send->dlen = 340 * NB_BYTES_SWF_BLK;
394 spw_ioctl_send->dlen = 340 * NB_BYTES_SWF_BLK;
395 length = TM_LEN_SCI_SWF_340;
395 length = TM_LEN_SCI_SWF_340;
396 header->blkNr[0] = 0x01; // BLK_NR MSB
396 header->blkNr[0] = 0x01; // BLK_NR MSB
397 header->blkNr[1] = 0x54; // BLK_NR LSB
397 header->blkNr[1] = 0x54; // BLK_NR LSB
398 }
398 }
399 spw_ioctl_send->data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) ];
399 spw_ioctl_send->data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) ];
400 // BUILD THE HEADER
400 // BUILD THE HEADER
401 header->packetLength[0] = (unsigned char) (length>>8);
401 header->packetLength[0] = (unsigned char) (length>>8);
402 header->packetLength[1] = (unsigned char) (length);
402 header->packetLength[1] = (unsigned char) (length);
403 header->sid = (unsigned char) sid; // SID
403 header->sid = (unsigned char) sid; // SID
404 // SET PACKET TIME
404 // SET PACKET TIME
405 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
405 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
406 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
406 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
407 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
407 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
408 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
408 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
409 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
409 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
410 header->time[5] = (unsigned char) (time_management_regs->fine_time);
410 header->time[5] = (unsigned char) (time_management_regs->fine_time);
411 header->acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24);
411 header->acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24);
412 header->acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16);
412 header->acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16);
413 header->acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8);
413 header->acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8);
414 header->acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time);
414 header->acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time);
415 header->acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8);
415 header->acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8);
416 header->acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time);
416 header->acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time);
417 // SEND PACKET
417 // SEND PACKET
418 status = write_spw(spw_ioctl_send);
418 status = write_spw(spw_ioctl_send);
419 if (status != RTEMS_SUCCESSFUL) {
419 if (status != RTEMS_SUCCESSFUL) {
420 while (true) {
420 while (true) {
421 if (status != RTEMS_SUCCESSFUL) {
421 if (status != RTEMS_SUCCESSFUL) {
422 status = write_spw(spw_ioctl_send);
422 status = write_spw(spw_ioctl_send);
423 //PRINTF1("%d", i)
423 //PRINTF1("%d", i)
424 sched_yield();
424 sched_yield();
425 }
425 }
426 else {
426 else {
427 //PRINTF("\n")
427 //PRINTF("\n")
428 break;
428 break;
429 }
429 }
430 }
430 }
431 }
431 }
432 }
432 }
433 }
433 }
434
434
435 void send_waveform_CWF( Header_TM_LFR_SCIENCE_CWF_t *header, volatile int *waveform,
435 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)
436 unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send)
437 {
437 {
438 unsigned int i = 0;
438 unsigned int i = 0;
439 unsigned int length = 0;
439 unsigned int length = 0;
440 rtems_status_code status;
440 rtems_status_code status;
441
441
442 header->sid = (unsigned char) sid;
442 header->sid = (unsigned char) sid;
443
443
444 for (i=0; i<7; i++) // send waveform
444 for (i=0; i<7; i++) // send waveform
445 {
445 {
446 // BUILD THE DATA
446 // BUILD THE DATA
447 if (i==6) {
447 if (i==6) {
448 spw_ioctl_send->dlen = 8 * NB_BYTES_SWF_BLK;
448 spw_ioctl_send->dlen = 8 * NB_BYTES_SWF_BLK;
449 length = TM_LEN_SCI_CWF_8;
449 length = TM_LEN_SCI_CWF_8;
450 header->blkNr[0] = 0x00; // BLK_NR MSB
450 header->blkNr[0] = 0x00; // BLK_NR MSB
451 header->blkNr[1] = 0x08; // BLK_NR LSB
451 header->blkNr[1] = 0x08; // BLK_NR LSB
452 }
452 }
453 else {
453 else {
454 spw_ioctl_send->dlen = 340 * NB_BYTES_SWF_BLK;
454 spw_ioctl_send->dlen = 340 * NB_BYTES_SWF_BLK;
455 length = TM_LEN_SCI_CWF_340;
455 length = TM_LEN_SCI_CWF_340;
456 header->blkNr[0] = 0x01; // BLK_NR MSB
456 header->blkNr[0] = 0x01; // BLK_NR MSB
457 header->blkNr[1] = 0x54; // BLK_NR LSB
457 header->blkNr[1] = 0x54; // BLK_NR LSB
458 }
458 }
459 spw_ioctl_send->data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) ];
459 spw_ioctl_send->data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) ];
460 // BUILD THE HEADER
460 // BUILD THE HEADER
461 header->packetLength[0] = (unsigned char) (length>>8);
461 header->packetLength[0] = (unsigned char) (length>>8);
462 header->packetLength[1] = (unsigned char) (length);
462 header->packetLength[1] = (unsigned char) (length);
463 // SET PACKET TIME
463 // SET PACKET TIME
464 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
464 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
465 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
465 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
466 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
466 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
467 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
467 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
468 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
468 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
469 header->time[5] = (unsigned char) (time_management_regs->fine_time);
469 header->time[5] = (unsigned char) (time_management_regs->fine_time);
470 header->acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24);
470 header->acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24);
471 header->acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16);
471 header->acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16);
472 header->acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8);
472 header->acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8);
473 header->acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time);
473 header->acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time);
474 header->acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8);
474 header->acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8);
475 header->acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time);
475 header->acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time);
476 // SEND PACKET
476 // SEND PACKET
477 status = write_spw(spw_ioctl_send);
477 status = write_spw(spw_ioctl_send);
478 if (status != RTEMS_SUCCESSFUL) {
478 if (status != RTEMS_SUCCESSFUL) {
479 while (true) {
479 while (true) {
480 if (status != RTEMS_SUCCESSFUL) {
480 if (status != RTEMS_SUCCESSFUL) {
481 status = write_spw(spw_ioctl_send);
481 status = write_spw(spw_ioctl_send);
482 //PRINTF1("%d", i)
482 //PRINTF1("%d", i)
483 sched_yield();
483 sched_yield();
484 }
484 }
485 else {
485 else {
486 //PRINTF("\n")
486 //PRINTF("\n")
487 break;
487 break;
488 }
488 }
489 }
489 }
490 }
490 }
491 }
491 }
492 }
492 }
493
493
494 int build_value(int value1, int value0)
494 int build_value(int value1, int value0)
495 {
495 {
496 int aux = 0;
496 int aux = 0;
497 int aux1 = 0;
497 int aux1 = 0;
498 int aux0 = 0;
498 int aux0 = 0;
499 int value1_aux = 0;
499 int value1_aux = 0;
500 int value0_aux = 0;
500 int value0_aux = 0;
501
501
502 value1_aux = value1;
502 value1_aux = value1;
503 value0_aux = value0;
503 value0_aux = value0;
504
504
505 //******
505 //******
506 // B3 B2
506 // B3 B2
507 if (value1_aux > 8191) value1_aux = 8191;
507 if (value1_aux > 8191) value1_aux = 8191;
508 if (value1_aux < -8192) value1_aux = -8192;
508 if (value1_aux < -8192) value1_aux = -8192;
509 aux1 = ( (int) ( ( (unsigned char) (value1_aux / 256 ) ) << 8 ) )
509 aux1 = ( (int) ( ( (unsigned char) (value1_aux / 256 ) ) << 8 ) )
510 + ( (int) ( (unsigned char) (value1_aux ) ) );
510 + ( (int) ( (unsigned char) (value1_aux ) ) );
511
511
512 //******
512 //******
513 // B1 B0
513 // B1 B0
514 if (value0_aux > 8191) value0_aux = 8191;
514 if (value0_aux > 8191) value0_aux = 8191;
515 if (value0_aux < -8192) value0_aux = -8192;
515 if (value0_aux < -8192) value0_aux = -8192;
516 aux0 = ( (int) ( ( (unsigned char) (value0_aux / 256) ) << 8 ) )
516 aux0 = ( (int) ( ( (unsigned char) (value0_aux / 256) ) << 8 ) )
517 + ( (int) ( (unsigned char) (value0_aux ) ) );
517 + ( (int) ( (unsigned char) (value0_aux ) ) );
518
518
519 aux = (aux1 << 16) + aux0;
519 aux = (aux1 << 16) + aux0;
520
520
521 return aux;
521 return aux;
522 }
522 }
523
523
524 void send_waveform_norm(Header_TM_LFR_SCIENCE_SWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
524 void send_waveform_norm(Header_TM_LFR_SCIENCE_SWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
525 {
525 {
526 unsigned char lfrMode;
526 unsigned char lfrMode;
527 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
527 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
528
528
529 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL >> 8);
529 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL >> 8);
530 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL);
530 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL);
531 // TIME
531 // TIME
532 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
532 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
533 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
533 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
534 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
534 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
535 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
535 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
536 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
536 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
537 header->time[5] = (unsigned char) (time_management_regs->fine_time);
537 header->time[5] = (unsigned char) (time_management_regs->fine_time);
538
538
539 //***************
539 //***************
540 // send snapshots
540 // send snapshots
541 // F0
541 // F0
542 send_waveform_SWF( header, wf_snap_f0, SID_NORM_SWF_F0, spw_ioctl_send);
542 send_waveform_SWF( header, wf_snap_f0, SID_NORM_SWF_F0, spw_ioctl_send);
543 // F1
543 // F1
544 if (lfrMode == LFR_MODE_NORMAL) // in SBM1 mode, the snapshot is sent by the send_waveform_sbm1 function
544 if (lfrMode == LFR_MODE_NORMAL) // in SBM1 mode, the snapshot is sent by the send_waveform_sbm1 function
545 {
545 {
546 send_waveform_SWF( header, wf_snap_f1, SID_NORM_SWF_F1, spw_ioctl_send);
546 send_waveform_SWF( header, wf_snap_f1, SID_NORM_SWF_F1, spw_ioctl_send);
547 }
547 }
548 // F2
548 // F2
549 send_waveform_SWF( header, wf_snap_f2, SID_NORM_SWF_F2, spw_ioctl_send);
549 send_waveform_SWF( header, wf_snap_f2, SID_NORM_SWF_F2, spw_ioctl_send);
550 #ifdef GSA
550 #ifdef GSA
551 // irq processed, reset the related register of the timer unit
551 // irq processed, reset the related register of the timer unit
552 gptimer_regs->timer[2].ctrl = gptimer_regs->timer[2].ctrl | 0x00000010;
552 gptimer_regs->timer[2].ctrl = gptimer_regs->timer[2].ctrl | 0x00000010;
553 #else
553 #else
554 // irq processed, reset the related register of the waveform picker
554 // irq processed, reset the related register of the waveform picker
555 if (lfrMode == LFR_MODE_SBM1) {
555 if (lfrMode == LFR_MODE_SBM1) {
556 param_local.local_sbm1_nb_cwf_sent = 0;
556 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
557 // 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 * param_norm.sy_lfr_n_swf_p;
558 param_local.local_sbm1_nb_cwf_max = 2 * (
559 ( parameter_dump_packet.sy_lfr_n_swf_p[0] * 256 )
560 + parameter_dump_packet.sy_lfr_n_swf_p[1]
561 );
559 }
562 }
560 else if (lfrMode == LFR_MODE_SBM2) {
563 else if (lfrMode == LFR_MODE_SBM2) {
561 param_local.local_sbm2_nb_cwf_sent = 0;
564 param_local.local_sbm2_nb_cwf_sent = 0;
562 // after the first transmission of the swf at F2, the period is set to local_sbm2_nb_cwf_max
565 // after the first transmission of the swf at F2, the period is set to local_sbm2_nb_cwf_max
563 param_local.local_sbm2_nb_cwf_max = param_norm.sy_lfr_n_swf_p / 8;
566 param_local.local_sbm2_nb_cwf_max = (
567 ( parameter_dump_packet.sy_lfr_n_swf_p[0] * 256 )
568 + parameter_dump_packet.sy_lfr_n_swf_p[1]
569 )/ 8;
564 }
570 }
565 else {
571 else {
566 waveform_picker_regs->status = waveform_picker_regs->status & 0x00;
572 waveform_picker_regs->status = waveform_picker_regs->status & 0x00;
567 waveform_picker_regs->burst_enable = 0x07; // [0111] enable f2 f1 f0
573 waveform_picker_regs->burst_enable = 0x07; // [0111] enable f2 f1 f0
568 }
574 }
569
575
570 #endif
576 #endif
571 }
577 }
572
578
573 void send_waveform_burst(Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
579 void send_waveform_burst(Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
574 {
580 {
575 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 >> 8);
581 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 >> 8);
576 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2);
582 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2);
577 // TIME
583 // TIME
578 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
584 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
579 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
585 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
580 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
586 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
581 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
587 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
582 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
588 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
583 header->time[5] = (unsigned char) (time_management_regs->fine_time);
589 header->time[5] = (unsigned char) (time_management_regs->fine_time);
584 // ACQUISITION TIME
590 // ACQUISITION TIME
585
591
586 // F2
592 // F2
587 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
593 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
588 send_waveform_CWF( header, wf_snap_f2_bis, SID_BURST_CWF_F2, spw_ioctl_send);
594 send_waveform_CWF( header, wf_snap_f2_bis, SID_BURST_CWF_F2, spw_ioctl_send);
589 }
595 }
590 else {
596 else {
591 send_waveform_CWF( header, wf_snap_f2, SID_BURST_CWF_F2, spw_ioctl_send);
597 send_waveform_CWF( header, wf_snap_f2, SID_BURST_CWF_F2, spw_ioctl_send);
592 }
598 }
593 }
599 }
594
600
595 void send_waveform_sbm1(Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
601 void send_waveform_sbm1(Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
596 {
602 {
597 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 >> 8);
603 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 >> 8);
598 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2);
604 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2);
599 // TIME
605 // TIME
600 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
606 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
601 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
607 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
602 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
608 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
603 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
609 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
604 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
610 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
605 header->time[5] = (unsigned char) (time_management_regs->fine_time);
611 header->time[5] = (unsigned char) (time_management_regs->fine_time);
606
612
607 // F1
613 // F1
608 if (waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) {
614 if (waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) {
609 send_waveform_CWF( header, wf_snap_f1_bis, SID_SBM1_CWF_F1, spw_ioctl_send );
615 send_waveform_CWF( header, wf_snap_f1_bis, SID_SBM1_CWF_F1, spw_ioctl_send );
610 }
616 }
611 else {
617 else {
612 send_waveform_CWF( header, wf_snap_f1, SID_SBM1_CWF_F1, spw_ioctl_send );
618 send_waveform_CWF( header, wf_snap_f1, SID_SBM1_CWF_F1, spw_ioctl_send );
613 }
619 }
614 }
620 }
615
621
616 void send_waveform_sbm2(Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
622 void send_waveform_sbm2(Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
617 {
623 {
618 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 >> 8);
624 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 >> 8);
619 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2);
625 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2);
620 // TIME
626 // TIME
621 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
627 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
622 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
628 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
623 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
629 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
624 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
630 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
625 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
631 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
626 header->time[5] = (unsigned char) (time_management_regs->fine_time);
632 header->time[5] = (unsigned char) (time_management_regs->fine_time);
627
633
628 // F2
634 // F2
629 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
635 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
630 send_waveform_CWF( header, wf_snap_f2_bis, SID_SBM2_CWF_F2, spw_ioctl_send);
636 send_waveform_CWF( header, wf_snap_f2_bis, SID_SBM2_CWF_F2, spw_ioctl_send);
631 }
637 }
632 else {
638 else {
633 send_waveform_CWF( header, wf_snap_f2, SID_SBM2_CWF_F2, spw_ioctl_send);
639 send_waveform_CWF( header, wf_snap_f2, SID_SBM2_CWF_F2, spw_ioctl_send);
634 }
640 }
635 }
641 }
636
642
637 //**************
643 //**************
638 // wfp registers
644 // wfp registers
639 void set_wfp_data_shaping(unsigned char data_shaping)
645 void set_wfp_data_shaping(unsigned char data_shaping)
640 {
646 {
641 // get the parameters for the data shaping [BW SP0 SP1 R0 R1] in sy_lfr_common1 and configure the register
647 // get the parameters for the data shaping [BW SP0 SP1 R0 R1] in sy_lfr_common1 and configure the register
642 // waveform picker : [R1 R0 SP1 SP0 BW]
648 // waveform picker : [R1 R0 SP1 SP0 BW]
643 waveform_picker_regs->data_shaping =
649 waveform_picker_regs->data_shaping =
644 ( (data_shaping & 0x10) >> 4 ) // BW
650 ( (data_shaping & 0x10) >> 4 ) // BW
645 + ( (data_shaping & 0x08) >> 2 ) // SP0
651 + ( (data_shaping & 0x08) >> 2 ) // SP0
646 + ( (data_shaping & 0x04) ) // SP1
652 + ( (data_shaping & 0x04) ) // SP1
647 + ( (data_shaping & 0x02) << 2 ) // R0
653 + ( (data_shaping & 0x02) << 2 ) // R0
648 + ( (data_shaping & 0x01) << 4 ); // R1
654 + ( (data_shaping & 0x01) << 4 ); // R1
649 }
655 }
650
656
651 void set_wfp_delta_snapshot(unsigned int delta_snapshot)
657 void set_wfp_delta_snapshot(unsigned int delta_snapshot)
652 {
658 {
653 unsigned char aux = 0;
659 unsigned char aux = 0;
654 aux = delta_snapshot / 2 ;
660 aux = delta_snapshot / 2 ;
655 waveform_picker_regs->delta_snapshot = aux; // max 2 bytes
661 waveform_picker_regs->delta_snapshot = aux; // max 2 bytes
656 //waveform_picker_regs->delta_snapshot = 0x5; // max 2 bytes
662 //waveform_picker_regs->delta_snapshot = 0x5; // max 2 bytes
657 }
663 }
658
664
659 void reset_wfp_burst_enable()
665 void reset_wfp_burst_enable()
660 {
666 {
661 waveform_picker_regs->burst_enable = 0x00; // burst f2, f1, f0 enable f3, f2, f1, f0
667 waveform_picker_regs->burst_enable = 0x00; // burst f2, f1, f0 enable f3, f2, f1, f0
662 }
668 }
663
669
664 void reset_wfp_regs()
670 void reset_wfp_regs()
665 {
671 {
666 set_wfp_data_shaping(param_common.sy_lfr_common1);
672 set_wfp_data_shaping(parameter_dump_packet.bw_sp0_sp1_r0_r1);
667 reset_wfp_burst_enable();
673 reset_wfp_burst_enable();
668 waveform_picker_regs->addr_data_f0 = (int) (wf_snap_f0); //
674 waveform_picker_regs->addr_data_f0 = (int) (wf_snap_f0); //
669 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1); //
675 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1); //
670 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2); //
676 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2); //
671 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3); //
677 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3); //
672 waveform_picker_regs->status = 0x00; //
678 waveform_picker_regs->status = 0x00; //
673 set_wfp_delta_snapshot( param_norm.sy_lfr_n_swf_p ); // time in seconds between two snapshots
679 set_wfp_delta_snapshot(
680 ( 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
674 waveform_picker_regs->delta_f2_f1 = 0xffff; // max 4 bytes
682 waveform_picker_regs->delta_f2_f1 = 0xffff; // max 4 bytes
675 waveform_picker_regs->delta_f2_f0 = 0x17c00; // max 5 bytes
683 waveform_picker_regs->delta_f2_f0 = 0x17c00; // max 5 bytes
676 waveform_picker_regs->nb_burst_available = 0x180; // max 3 bytes, size of the buffer in burst (1 burst = 16 x 4 octets)
684 waveform_picker_regs->nb_burst_available = 0x180; // max 3 bytes, size of the buffer in burst (1 burst = 16 x 4 octets)
677 waveform_picker_regs->nb_snapshot_param = 0x7ff; // max 3 octets, 2048 - 1
685 waveform_picker_regs->nb_snapshot_param = 0x7ff; // max 3 octets, 2048 - 1
678 //waveform_picker_regs->delta_snapshot = 0x2; // max 2 bytes, = period / 2
686 //waveform_picker_regs->delta_snapshot = 0x2; // max 2 bytes, = period / 2
679 //waveform_picker_regs->delta_f2_f1 = 0x2d00; // max 4 bytes
687 //waveform_picker_regs->delta_f2_f1 = 0x2d00; // max 4 bytes
680 //waveform_picker_regs->delta_f2_f0 = 0x2f80; // max 5 bytes
688 //waveform_picker_regs->delta_f2_f0 = 0x2f80; // max 5 bytes
681 //waveform_picker_regs->nb_burst_available = 0x30; // max 3 bytes, size of the buffer in burst (1 burst = 16 x 4 octets)
689 //waveform_picker_regs->nb_burst_available = 0x30; // max 3 bytes, size of the buffer in burst (1 burst = 16 x 4 octets)
682 //waveform_picker_regs->nb_snapshot_param = 0xff; // max 3 octets, 256 - 1
690 //waveform_picker_regs->nb_snapshot_param = 0xff; // max 3 octets, 256 - 1
683 }
691 }
General Comments 0
You need to be logged in to leave comments. Login now