##// END OF EJS Templates
packet emission task added...
paul -
r33:1280850c4074 default
parent child
Show More
@@ -1,225 +1,233
1 #############################################################################
1 #############################################################################
2 # Makefile for building: bin/fsw
2 # Makefile for building: bin/fsw
3 # Generated by qmake (2.01a) (Qt 4.8.4) on: Thu Aug 1 15:31:06 2013
3 # Generated by qmake (2.01a) (Qt 4.8.5) on: Mon Sep 30 15:28:56 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=12 -DPRINT_MESSAGES_ON_CONSOLE
13 DEFINES = -DSW_VERSION_N1=0 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=13 -DPRINT_MESSAGES_ON_CONSOLE
14 CFLAGS = -pipe -O3 -Wall $(DEFINES)
14 CFLAGS = -pipe -O3 -Wall $(DEFINES)
15 CXXFLAGS = -pipe -O3 -Wall $(DEFINES)
15 CXXFLAGS = -pipe -O3 -Wall $(DEFINES)
16 INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header
16 INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header
17 LINK = sparc-rtems-g++
17 LINK = sparc-rtems-g++
18 LFLAGS =
18 LFLAGS =
19 LIBS = $(SUBLIBS)
19 LIBS = $(SUBLIBS)
20 AR = sparc-rtems-ar rcs
20 AR = sparc-rtems-ar rcs
21 RANLIB =
21 RANLIB =
22 QMAKE = /usr/bin/qmake-qt4
22 QMAKE = /usr/bin/qmake-qt4
23 TAR = tar -cf
23 TAR = tar -cf
24 COMPRESS = gzip -9f
24 COMPRESS = gzip -9f
25 COPY = cp -f
25 COPY = cp -f
26 SED = sed
26 SED = sed
27 COPY_FILE = $(COPY)
27 COPY_FILE = $(COPY)
28 COPY_DIR = $(COPY) -r
28 COPY_DIR = $(COPY) -r
29 STRIP = sparc-rtems-strip
29 STRIP = sparc-rtems-strip
30 INSTALL_FILE = install -m 644 -p
30 INSTALL_FILE = install -m 644 -p
31 INSTALL_DIR = $(COPY_DIR)
31 INSTALL_DIR = $(COPY_DIR)
32 INSTALL_PROGRAM = install -m 755 -p
32 INSTALL_PROGRAM = install -m 755 -p
33 DEL_FILE = rm -f
33 DEL_FILE = rm -f
34 SYMLINK = ln -f -s
34 SYMLINK = ln -f -s
35 DEL_DIR = rmdir
35 DEL_DIR = rmdir
36 MOVE = mv -f
36 MOVE = mv -f
37 CHK_DIR_EXISTS= test -d
37 CHK_DIR_EXISTS= test -d
38 MKDIR = mkdir -p
38 MKDIR = mkdir -p
39
39
40 ####### Output directory
40 ####### Output directory
41
41
42 OBJECTS_DIR = obj/
42 OBJECTS_DIR = obj/
43
43
44 ####### Files
44 ####### Files
45
45
46 SOURCES = ../src/wf_handler.c \
46 SOURCES = ../src/wf_handler.c \
47 ../src/tc_handler.c \
47 ../src/tc_handler.c \
48 ../src/fsw_processing.c \
48 ../src/fsw_processing.c \
49 ../src/fsw_misc.c \
49 ../src/fsw_misc.c \
50 ../src/fsw_init.c \
50 ../src/fsw_init.c \
51 ../src/fsw_globals.c
51 ../src/fsw_globals.c \
52 ../src/fsw_spacewire.c
52 OBJECTS = obj/wf_handler.o \
53 OBJECTS = obj/wf_handler.o \
53 obj/tc_handler.o \
54 obj/tc_handler.o \
54 obj/fsw_processing.o \
55 obj/fsw_processing.o \
55 obj/fsw_misc.o \
56 obj/fsw_misc.o \
56 obj/fsw_init.o \
57 obj/fsw_init.o \
57 obj/fsw_globals.o
58 obj/fsw_globals.o \
59 obj/fsw_spacewire.o
58 DIST = /usr/lib64/qt4/mkspecs/common/unix.conf \
60 DIST = /usr/lib64/qt4/mkspecs/common/unix.conf \
59 /usr/lib64/qt4/mkspecs/common/linux.conf \
61 /usr/lib64/qt4/mkspecs/common/linux.conf \
60 /usr/lib64/qt4/mkspecs/common/gcc-base.conf \
62 /usr/lib64/qt4/mkspecs/common/gcc-base.conf \
61 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
63 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
62 /usr/lib64/qt4/mkspecs/common/g++-base.conf \
64 /usr/lib64/qt4/mkspecs/common/g++-base.conf \
63 /usr/lib64/qt4/mkspecs/common/g++-unix.conf \
65 /usr/lib64/qt4/mkspecs/common/g++-unix.conf \
64 /usr/lib64/qt4/mkspecs/qconfig.pri \
66 /usr/lib64/qt4/mkspecs/qconfig.pri \
65 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
67 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
66 /usr/lib64/qt4/mkspecs/features/qt_functions.prf \
68 /usr/lib64/qt4/mkspecs/features/qt_functions.prf \
67 /usr/lib64/qt4/mkspecs/features/qt_config.prf \
69 /usr/lib64/qt4/mkspecs/features/qt_config.prf \
68 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
70 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
69 /usr/lib64/qt4/mkspecs/features/default_pre.prf \
71 /usr/lib64/qt4/mkspecs/features/default_pre.prf \
70 sparc.pri \
72 sparc.pri \
71 /usr/lib64/qt4/mkspecs/features/release.prf \
73 /usr/lib64/qt4/mkspecs/features/release.prf \
72 /usr/lib64/qt4/mkspecs/features/default_post.prf \
74 /usr/lib64/qt4/mkspecs/features/default_post.prf \
75 /usr/lib64/qt4/mkspecs/features/shared.prf \
73 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
76 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
74 /usr/lib64/qt4/mkspecs/features/warn_on.prf \
77 /usr/lib64/qt4/mkspecs/features/warn_on.prf \
75 /usr/lib64/qt4/mkspecs/features/resources.prf \
78 /usr/lib64/qt4/mkspecs/features/resources.prf \
76 /usr/lib64/qt4/mkspecs/features/uic.prf \
79 /usr/lib64/qt4/mkspecs/features/uic.prf \
77 /usr/lib64/qt4/mkspecs/features/yacc.prf \
80 /usr/lib64/qt4/mkspecs/features/yacc.prf \
78 /usr/lib64/qt4/mkspecs/features/lex.prf \
81 /usr/lib64/qt4/mkspecs/features/lex.prf \
79 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf \
82 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf \
80 fsw-qt.pro
83 fsw-qt.pro
81 QMAKE_TARGET = fsw
84 QMAKE_TARGET = fsw
82 DESTDIR = bin/
85 DESTDIR = bin/
83 TARGET = bin/fsw
86 TARGET = bin/fsw
84
87
85 first: all
88 first: all
86 ####### Implicit rules
89 ####### Implicit rules
87
90
88 .SUFFIXES: .o .c .cpp .cc .cxx .C
91 .SUFFIXES: .o .c .cpp .cc .cxx .C
89
92
90 .cpp.o:
93 .cpp.o:
91 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
94 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
92
95
93 .cc.o:
96 .cc.o:
94 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
97 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
95
98
96 .cxx.o:
99 .cxx.o:
97 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
100 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
98
101
99 .C.o:
102 .C.o:
100 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
103 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
101
104
102 .c.o:
105 .c.o:
103 $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
106 $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
104
107
105 ####### Build rules
108 ####### Build rules
106
109
107 all: Makefile $(TARGET)
110 all: Makefile $(TARGET)
108
111
109 $(TARGET): $(OBJECTS)
112 $(TARGET): $(OBJECTS)
110 @$(CHK_DIR_EXISTS) bin/ || $(MKDIR) bin/
113 @$(CHK_DIR_EXISTS) bin/ || $(MKDIR) bin/
111 $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
114 $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
112
115
113 Makefile: fsw-qt.pro /usr/lib64/qt4/mkspecs/linux-g++/qmake.conf /usr/lib64/qt4/mkspecs/common/unix.conf \
116 Makefile: fsw-qt.pro /usr/lib64/qt4/mkspecs/linux-g++/qmake.conf /usr/lib64/qt4/mkspecs/common/unix.conf \
114 /usr/lib64/qt4/mkspecs/common/linux.conf \
117 /usr/lib64/qt4/mkspecs/common/linux.conf \
115 /usr/lib64/qt4/mkspecs/common/gcc-base.conf \
118 /usr/lib64/qt4/mkspecs/common/gcc-base.conf \
116 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
119 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
117 /usr/lib64/qt4/mkspecs/common/g++-base.conf \
120 /usr/lib64/qt4/mkspecs/common/g++-base.conf \
118 /usr/lib64/qt4/mkspecs/common/g++-unix.conf \
121 /usr/lib64/qt4/mkspecs/common/g++-unix.conf \
119 /usr/lib64/qt4/mkspecs/qconfig.pri \
122 /usr/lib64/qt4/mkspecs/qconfig.pri \
120 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
123 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
121 /usr/lib64/qt4/mkspecs/features/qt_functions.prf \
124 /usr/lib64/qt4/mkspecs/features/qt_functions.prf \
122 /usr/lib64/qt4/mkspecs/features/qt_config.prf \
125 /usr/lib64/qt4/mkspecs/features/qt_config.prf \
123 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
126 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
124 /usr/lib64/qt4/mkspecs/features/default_pre.prf \
127 /usr/lib64/qt4/mkspecs/features/default_pre.prf \
125 sparc.pri \
128 sparc.pri \
126 /usr/lib64/qt4/mkspecs/features/release.prf \
129 /usr/lib64/qt4/mkspecs/features/release.prf \
127 /usr/lib64/qt4/mkspecs/features/default_post.prf \
130 /usr/lib64/qt4/mkspecs/features/default_post.prf \
131 /usr/lib64/qt4/mkspecs/features/shared.prf \
128 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
132 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
129 /usr/lib64/qt4/mkspecs/features/warn_on.prf \
133 /usr/lib64/qt4/mkspecs/features/warn_on.prf \
130 /usr/lib64/qt4/mkspecs/features/resources.prf \
134 /usr/lib64/qt4/mkspecs/features/resources.prf \
131 /usr/lib64/qt4/mkspecs/features/uic.prf \
135 /usr/lib64/qt4/mkspecs/features/uic.prf \
132 /usr/lib64/qt4/mkspecs/features/yacc.prf \
136 /usr/lib64/qt4/mkspecs/features/yacc.prf \
133 /usr/lib64/qt4/mkspecs/features/lex.prf \
137 /usr/lib64/qt4/mkspecs/features/lex.prf \
134 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf
138 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf
135 $(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
139 $(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
136 /usr/lib64/qt4/mkspecs/common/unix.conf:
140 /usr/lib64/qt4/mkspecs/common/unix.conf:
137 /usr/lib64/qt4/mkspecs/common/linux.conf:
141 /usr/lib64/qt4/mkspecs/common/linux.conf:
138 /usr/lib64/qt4/mkspecs/common/gcc-base.conf:
142 /usr/lib64/qt4/mkspecs/common/gcc-base.conf:
139 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf:
143 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf:
140 /usr/lib64/qt4/mkspecs/common/g++-base.conf:
144 /usr/lib64/qt4/mkspecs/common/g++-base.conf:
141 /usr/lib64/qt4/mkspecs/common/g++-unix.conf:
145 /usr/lib64/qt4/mkspecs/common/g++-unix.conf:
142 /usr/lib64/qt4/mkspecs/qconfig.pri:
146 /usr/lib64/qt4/mkspecs/qconfig.pri:
143 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri:
147 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri:
144 /usr/lib64/qt4/mkspecs/features/qt_functions.prf:
148 /usr/lib64/qt4/mkspecs/features/qt_functions.prf:
145 /usr/lib64/qt4/mkspecs/features/qt_config.prf:
149 /usr/lib64/qt4/mkspecs/features/qt_config.prf:
146 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf:
150 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf:
147 /usr/lib64/qt4/mkspecs/features/default_pre.prf:
151 /usr/lib64/qt4/mkspecs/features/default_pre.prf:
148 sparc.pri:
152 sparc.pri:
149 /usr/lib64/qt4/mkspecs/features/release.prf:
153 /usr/lib64/qt4/mkspecs/features/release.prf:
150 /usr/lib64/qt4/mkspecs/features/default_post.prf:
154 /usr/lib64/qt4/mkspecs/features/default_post.prf:
155 /usr/lib64/qt4/mkspecs/features/shared.prf:
151 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf:
156 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf:
152 /usr/lib64/qt4/mkspecs/features/warn_on.prf:
157 /usr/lib64/qt4/mkspecs/features/warn_on.prf:
153 /usr/lib64/qt4/mkspecs/features/resources.prf:
158 /usr/lib64/qt4/mkspecs/features/resources.prf:
154 /usr/lib64/qt4/mkspecs/features/uic.prf:
159 /usr/lib64/qt4/mkspecs/features/uic.prf:
155 /usr/lib64/qt4/mkspecs/features/yacc.prf:
160 /usr/lib64/qt4/mkspecs/features/yacc.prf:
156 /usr/lib64/qt4/mkspecs/features/lex.prf:
161 /usr/lib64/qt4/mkspecs/features/lex.prf:
157 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf:
162 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf:
158 qmake: FORCE
163 qmake: FORCE
159 @$(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
164 @$(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
160
165
161 dist:
166 dist:
162 @$(CHK_DIR_EXISTS) obj/fsw1.0.0 || $(MKDIR) obj/fsw1.0.0
167 @$(CHK_DIR_EXISTS) obj/fsw1.0.0 || $(MKDIR) obj/fsw1.0.0
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
168 $(COPY_FILE) --parents $(SOURCES) $(DIST) obj/fsw1.0.0/ && (cd `dirname obj/fsw1.0.0` && $(TAR) fsw1.0.0.tar fsw1.0.0 && $(COMPRESS) fsw1.0.0.tar) && $(MOVE) `dirname obj/fsw1.0.0`/fsw1.0.0.tar.gz . && $(DEL_FILE) -r obj/fsw1.0.0
164
169
165
170
166 clean:compiler_clean
171 clean:compiler_clean
167 -$(DEL_FILE) $(OBJECTS)
172 -$(DEL_FILE) $(OBJECTS)
168 -$(DEL_FILE) *~ core *.core
173 -$(DEL_FILE) *~ core *.core
169
174
170
175
171 ####### Sub-libraries
176 ####### Sub-libraries
172
177
173 distclean: clean
178 distclean: clean
174 -$(DEL_FILE) $(TARGET)
179 -$(DEL_FILE) $(TARGET)
175 -$(DEL_FILE) Makefile
180 -$(DEL_FILE) Makefile
176
181
177
182
178 grmon:
183 grmon:
179 cd bin && C:/opt/grmon-eval-2.0.29b/win32/bin/grmon.exe -uart COM4 -u
184 cd bin && C:/opt/grmon-eval-2.0.29b/win32/bin/grmon.exe -uart COM4 -u
180
185
181 check: first
186 check: first
182
187
183 compiler_rcc_make_all:
188 compiler_rcc_make_all:
184 compiler_rcc_clean:
189 compiler_rcc_clean:
185 compiler_uic_make_all:
190 compiler_uic_make_all:
186 compiler_uic_clean:
191 compiler_uic_clean:
187 compiler_image_collection_make_all: qmake_image_collection.cpp
192 compiler_image_collection_make_all: qmake_image_collection.cpp
188 compiler_image_collection_clean:
193 compiler_image_collection_clean:
189 -$(DEL_FILE) qmake_image_collection.cpp
194 -$(DEL_FILE) qmake_image_collection.cpp
190 compiler_yacc_decl_make_all:
195 compiler_yacc_decl_make_all:
191 compiler_yacc_decl_clean:
196 compiler_yacc_decl_clean:
192 compiler_yacc_impl_make_all:
197 compiler_yacc_impl_make_all:
193 compiler_yacc_impl_clean:
198 compiler_yacc_impl_clean:
194 compiler_lex_make_all:
199 compiler_lex_make_all:
195 compiler_lex_clean:
200 compiler_lex_clean:
196 compiler_clean:
201 compiler_clean:
197
202
198 ####### Compile
203 ####### Compile
199
204
200 obj/wf_handler.o: ../src/wf_handler.c
205 obj/wf_handler.o: ../src/wf_handler.c
201 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/wf_handler.o ../src/wf_handler.c
206 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/wf_handler.o ../src/wf_handler.c
202
207
203 obj/tc_handler.o: ../src/tc_handler.c
208 obj/tc_handler.o: ../src/tc_handler.c
204 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tc_handler.o ../src/tc_handler.c
209 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tc_handler.o ../src/tc_handler.c
205
210
206 obj/fsw_processing.o: ../src/fsw_processing.c
211 obj/fsw_processing.o: ../src/fsw_processing.c
207 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_processing.o ../src/fsw_processing.c
212 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_processing.o ../src/fsw_processing.c
208
213
209 obj/fsw_misc.o: ../src/fsw_misc.c
214 obj/fsw_misc.o: ../src/fsw_misc.c
210 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_misc.o ../src/fsw_misc.c
215 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_misc.o ../src/fsw_misc.c
211
216
212 obj/fsw_init.o: ../src/fsw_init.c
217 obj/fsw_init.o: ../src/fsw_init.c
213 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_init.o ../src/fsw_init.c
218 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_init.o ../src/fsw_init.c
214
219
215 obj/fsw_globals.o: ../src/fsw_globals.c
220 obj/fsw_globals.o: ../src/fsw_globals.c
216 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_globals.o ../src/fsw_globals.c
221 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_globals.o ../src/fsw_globals.c
217
222
223 obj/fsw_spacewire.o: ../src/fsw_spacewire.c
224 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_spacewire.o ../src/fsw_spacewire.c
225
218 ####### Install
226 ####### Install
219
227
220 install: FORCE
228 install: FORCE
221
229
222 uninstall: FORCE
230 uninstall: FORCE
223
231
224 FORCE:
232 FORCE:
225
233
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -1,52 +1,54
1 TEMPLATE = app
1 TEMPLATE = app
2 # CONFIG += console v8 sim
2 # CONFIG += console v8 sim
3 # CONFIG options = verbose *** cpu_usage_report *** gsa
3 # CONFIG options = verbose *** cpu_usage_report *** gsa
4 CONFIG += console verbose
4 CONFIG += console verbose
5 CONFIG -= qt
5 CONFIG -= qt
6
6
7 include(./sparc.pri)
7 include(./sparc.pri)
8
8
9 # flight software version
9 # flight software version
10 SWVERSION=-0-12
10 SWVERSION=-0-13
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=12
14 DEFINES += SW_VERSION_N4=13
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 ../src/fsw_spacewire.c
41
42
42 HEADERS += \
43 HEADERS += \
43 ../header/wf_handler.h \
44 ../header/wf_handler.h \
44 ../header/tc_handler.h \
45 ../header/tc_handler.h \
45 ../header/grlib_regs.h \
46 ../header/grlib_regs.h \
46 ../header/fsw_processing.h \
47 ../header/fsw_processing.h \
47 ../header/fsw_params.h \
48 ../header/fsw_params.h \
48 ../header/fsw_misc.h \
49 ../header/fsw_misc.h \
49 ../header/fsw_init.h \
50 ../header/fsw_init.h \
50 ../header/ccsds_types.h \
51 ../header/ccsds_types.h \
51 ../header/fsw_params_processing.h
52 ../header/fsw_params_processing.h \
53 ../header/fsw_spacewire.h
52
54
@@ -1,257 +1,257
1 <?xml version="1.0" encoding="UTF-8"?>
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE QtCreatorProject>
2 <!DOCTYPE QtCreatorProject>
3 <!-- Written by QtCreator 2.8.0, 2013-08-01T13:38:09. -->
3 <!-- Written by QtCreator 2.8.0, 2013-10-01T07:01:25. -->
4 <qtcreator>
4 <qtcreator>
5 <data>
5 <data>
6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
7 <value type="int">0</value>
7 <value type="int">0</value>
8 </data>
8 </data>
9 <data>
9 <data>
10 <variable>ProjectExplorer.Project.EditorSettings</variable>
10 <variable>ProjectExplorer.Project.EditorSettings</variable>
11 <valuemap type="QVariantMap">
11 <valuemap type="QVariantMap">
12 <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
12 <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
13 <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
13 <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
14 <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
14 <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
15 <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
15 <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
16 <value type="QString" key="language">Cpp</value>
16 <value type="QString" key="language">Cpp</value>
17 <valuemap type="QVariantMap" key="value">
17 <valuemap type="QVariantMap" key="value">
18 <value type="QString" key="CurrentPreferences">CppGlobal</value>
18 <value type="QString" key="CurrentPreferences">CppGlobal</value>
19 </valuemap>
19 </valuemap>
20 </valuemap>
20 </valuemap>
21 <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
21 <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
22 <value type="QString" key="language">QmlJS</value>
22 <value type="QString" key="language">QmlJS</value>
23 <valuemap type="QVariantMap" key="value">
23 <valuemap type="QVariantMap" key="value">
24 <value type="QString" key="CurrentPreferences">QmlJSGlobal</value>
24 <value type="QString" key="CurrentPreferences">QmlJSGlobal</value>
25 </valuemap>
25 </valuemap>
26 </valuemap>
26 </valuemap>
27 <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
27 <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
28 <value type="QByteArray" key="EditorConfiguration.Codec">System</value>
28 <value type="QByteArray" key="EditorConfiguration.Codec">System</value>
29 <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
29 <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
30 <value type="int" key="EditorConfiguration.IndentSize">4</value>
30 <value type="int" key="EditorConfiguration.IndentSize">4</value>
31 <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
31 <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
32 <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
32 <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
33 <value type="int" key="EditorConfiguration.PaddingMode">1</value>
33 <value type="int" key="EditorConfiguration.PaddingMode">1</value>
34 <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
34 <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
35 <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
35 <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
36 <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
36 <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
37 <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
37 <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
38 <value type="int" key="EditorConfiguration.TabSize">8</value>
38 <value type="int" key="EditorConfiguration.TabSize">8</value>
39 <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
39 <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
40 <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
40 <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
41 <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
41 <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
42 <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
42 <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
43 <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
43 <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
44 <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
44 <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
45 </valuemap>
45 </valuemap>
46 </data>
46 </data>
47 <data>
47 <data>
48 <variable>ProjectExplorer.Project.PluginSettings</variable>
48 <variable>ProjectExplorer.Project.PluginSettings</variable>
49 <valuemap type="QVariantMap"/>
49 <valuemap type="QVariantMap"/>
50 </data>
50 </data>
51 <data>
51 <data>
52 <variable>ProjectExplorer.Project.Target.0</variable>
52 <variable>ProjectExplorer.Project.Target.0</variable>
53 <valuemap type="QVariantMap">
53 <valuemap type="QVariantMap">
54 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop-Qt 4.8.2 in PATH (System)</value>
54 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop-Qt 4.8.2 in PATH (System)</value>
55 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop-Qt 4.8.2 in PATH (System)</value>
55 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop-Qt 4.8.2 in PATH (System)</value>
56 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{5289e843-9ef2-45ce-88c6-ad27d8e08def}</value>
56 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{5289e843-9ef2-45ce-88c6-ad27d8e08def}</value>
57 <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
57 <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
58 <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
58 <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
59 <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
59 <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
60 <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
60 <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
61 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
61 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
62 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
62 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
63 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
63 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
64 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
64 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
65 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
65 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
66 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
66 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
67 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
67 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
68 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
68 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
69 <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
69 <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
70 <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
70 <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
71 </valuemap>
71 </valuemap>
72 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
72 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
73 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
73 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
74 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
74 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
75 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
75 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
76 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
76 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
77 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
77 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
78 <value type="QString">-w</value>
78 <value type="QString">-w</value>
79 <value type="QString">-r</value>
79 <value type="QString">-r</value>
80 </valuelist>
80 </valuelist>
81 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
81 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
82 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">-r -w </value>
82 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">-r -w </value>
83 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
83 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
84 </valuemap>
84 </valuemap>
85 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
85 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
86 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
86 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
87 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
87 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
88 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
88 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
89 </valuemap>
89 </valuemap>
90 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
90 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
91 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
91 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
92 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
92 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
93 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
93 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
94 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
94 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
95 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
95 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
96 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
96 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
97 <value type="QString">-w</value>
97 <value type="QString">-w</value>
98 <value type="QString">-r</value>
98 <value type="QString">-r</value>
99 </valuelist>
99 </valuelist>
100 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
100 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
101 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">-r -w clean</value>
101 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">-r -w clean</value>
102 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
102 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
103 </valuemap>
103 </valuemap>
104 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
104 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
105 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
105 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
106 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
106 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
107 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
107 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
108 </valuemap>
108 </valuemap>
109 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
109 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
110 <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
110 <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
111 <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
111 <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
112 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.8.2 in PATH (System) Release</value>
112 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.8.2 in PATH (System) Release</value>
113 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
113 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
114 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
114 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
115 <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
115 <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
116 <value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/opt/DEV_PLE/FSW-qt</value>
116 <value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/opt/DEV_PLE/FSW-qt</value>
117 <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
117 <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
118 </valuemap>
118 </valuemap>
119 <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
119 <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
120 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
120 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
121 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
121 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
122 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
122 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
123 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
123 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
124 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
124 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
125 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
125 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
126 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
126 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
127 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
127 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
128 <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
128 <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
129 <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
129 <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
130 </valuemap>
130 </valuemap>
131 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
131 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
132 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
132 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
133 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
133 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
134 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
134 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
135 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
135 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
136 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
136 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
137 <value type="QString">-w</value>
137 <value type="QString">-w</value>
138 <value type="QString">-r</value>
138 <value type="QString">-r</value>
139 </valuelist>
139 </valuelist>
140 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
140 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
141 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">-r -w </value>
141 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">-r -w </value>
142 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
142 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
143 </valuemap>
143 </valuemap>
144 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
144 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
145 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
145 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
146 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
146 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
147 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
147 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
148 </valuemap>
148 </valuemap>
149 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
149 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
150 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
150 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
151 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
151 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
152 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
152 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
153 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
153 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
154 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
154 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
155 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
155 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
156 <value type="QString">-w</value>
156 <value type="QString">-w</value>
157 <value type="QString">-r</value>
157 <value type="QString">-r</value>
158 </valuelist>
158 </valuelist>
159 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
159 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
160 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">-r -w clean</value>
160 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">-r -w clean</value>
161 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
161 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
162 </valuemap>
162 </valuemap>
163 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
163 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
164 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
164 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
165 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
165 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
166 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
166 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
167 </valuemap>
167 </valuemap>
168 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
168 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
169 <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
169 <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
170 <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
170 <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
171 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.8.2 in PATH (System) Debug</value>
171 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.8.2 in PATH (System) Debug</value>
172 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
172 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
173 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
173 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
174 <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
174 <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
175 <value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/opt/DEV_PLE/FSW-qt</value>
175 <value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/opt/DEV_PLE/FSW-qt</value>
176 <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
176 <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
177 </valuemap>
177 </valuemap>
178 <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
178 <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
179 <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
179 <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
180 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
180 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
181 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
181 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
182 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
182 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
183 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
183 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
184 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
184 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
185 </valuemap>
185 </valuemap>
186 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
186 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
187 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">No deployment</value>
187 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">No deployment</value>
188 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
188 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
189 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
189 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
190 </valuemap>
190 </valuemap>
191 <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
191 <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
192 <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
192 <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
193 <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
193 <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
194 <value type="bool" key="Analyzer.Project.UseGlobal">true</value>
194 <value type="bool" key="Analyzer.Project.UseGlobal">true</value>
195 <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
195 <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
196 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
196 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
197 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
197 <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
198 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
198 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
199 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
199 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
200 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
200 <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
201 <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
201 <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
202 <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
202 <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
203 <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
203 <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
204 <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
204 <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
205 <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
205 <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
206 <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
206 <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
207 <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
207 <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
208 <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
208 <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
209 <value type="int">0</value>
209 <value type="int">0</value>
210 <value type="int">1</value>
210 <value type="int">1</value>
211 <value type="int">2</value>
211 <value type="int">2</value>
212 <value type="int">3</value>
212 <value type="int">3</value>
213 <value type="int">4</value>
213 <value type="int">4</value>
214 <value type="int">5</value>
214 <value type="int">5</value>
215 <value type="int">6</value>
215 <value type="int">6</value>
216 <value type="int">7</value>
216 <value type="int">7</value>
217 <value type="int">8</value>
217 <value type="int">8</value>
218 <value type="int">9</value>
218 <value type="int">9</value>
219 <value type="int">10</value>
219 <value type="int">10</value>
220 <value type="int">11</value>
220 <value type="int">11</value>
221 <value type="int">12</value>
221 <value type="int">12</value>
222 <value type="int">13</value>
222 <value type="int">13</value>
223 <value type="int">14</value>
223 <value type="int">14</value>
224 </valuelist>
224 </valuelist>
225 <value type="int" key="PE.EnvironmentAspect.Base">2</value>
225 <value type="int" key="PE.EnvironmentAspect.Base">2</value>
226 <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
226 <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
227 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">fsw-qt</value>
227 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">fsw-qt</value>
228 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
228 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
229 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/opt/DEV_PLE/FSW-qt/fsw-qt.pro</value>
229 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/opt/DEV_PLE/FSW-qt/fsw-qt.pro</value>
230 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
230 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
231 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">fsw-qt.pro</value>
231 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">fsw-qt.pro</value>
232 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
232 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
233 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">true</value>
233 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">true</value>
234 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
234 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
235 <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
235 <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
236 <value type="bool" key="RunConfiguration.UseCppDebugger">true</value>
236 <value type="bool" key="RunConfiguration.UseCppDebugger">true</value>
237 <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">false</value>
237 <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">false</value>
238 <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
238 <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
239 <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
239 <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
240 <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">false</value>
240 <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">false</value>
241 </valuemap>
241 </valuemap>
242 <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
242 <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
243 </valuemap>
243 </valuemap>
244 </data>
244 </data>
245 <data>
245 <data>
246 <variable>ProjectExplorer.Project.TargetCount</variable>
246 <variable>ProjectExplorer.Project.TargetCount</variable>
247 <value type="int">1</value>
247 <value type="int">1</value>
248 </data>
248 </data>
249 <data>
249 <data>
250 <variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
250 <variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
251 <value type="QByteArray">{2e58a81f-9962-4bba-ae6b-760177f0656c}</value>
251 <value type="QByteArray">{2e58a81f-9962-4bba-ae6b-760177f0656c}</value>
252 </data>
252 </data>
253 <data>
253 <data>
254 <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
254 <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
255 <value type="int">14</value>
255 <value type="int">14</value>
256 </data>
256 </data>
257 </qtcreator>
257 </qtcreator>
@@ -1,119 +1,197
1 #ifndef TC_TYPES_H
1 #ifndef TC_TYPES_H
2 #define TC_TYPES_H
2 #define TC_TYPES_H
3
3
4 #include <ccsds_types.h>
4 #include <ccsds_types.h>
5
5
6 #define PROTOCOLE_IDENTIFIER 0x02
7
6 // PACKET ID
8 // PACKET ID
7 #define TC_LFR_PACKET_ID 0x1ccc // PID 76 CAT 12
9 #define TC_LFR_PACKET_ID 0x1ccc // PID 76 CAT 12
8
10
9 #define PACKET_LENGTH_TC_LFR_LOAD_COMMON_PAR (14 - CCSDS_TC_TM_PACKET_OFFSET)
11 #define PACKET_LENGTH_TC_LFR_RESET (12 - CCSDS_TC_TM_PACKET_OFFSET)
10 #define PACKET_LENGTH_TC_LFR_LOAD_NORMAL_PAR (20 - CCSDS_TC_TM_PACKET_OFFSET)
12 #define PACKET_LENGTH_TC_LFR_LOAD_COMMON_PAR (14 - CCSDS_TC_TM_PACKET_OFFSET)
11 #define PACKET_LENGTH_TC_LFR_LOAD_BURST_PAR (14 - CCSDS_TC_TM_PACKET_OFFSET)
13 #define PACKET_LENGTH_TC_LFR_LOAD_NORMAL_PAR (20 - CCSDS_TC_TM_PACKET_OFFSET)
12 #define PACKET_LENGTH_TC_LFR_LOAD_SBM1_PAR (14 - CCSDS_TC_TM_PACKET_OFFSET)
14 #define PACKET_LENGTH_TC_LFR_LOAD_BURST_PAR (14 - CCSDS_TC_TM_PACKET_OFFSET)
13 #define PACKET_LENGTH_TC_LFR_LOAD_SBM2_PAR (14 - CCSDS_TC_TM_PACKET_OFFSET)
15 #define PACKET_LENGTH_TC_LFR_LOAD_SBM1_PAR (14 - CCSDS_TC_TM_PACKET_OFFSET)
14 #define PACKET_LENGTH_TC_LFR_DUMP_PAR (12 - CCSDS_TC_TM_PACKET_OFFSET)
16 #define PACKET_LENGTH_TC_LFR_LOAD_SBM2_PAR (14 - CCSDS_TC_TM_PACKET_OFFSET)
15 #define PACKET_LENGTH_TC_LFR_ENTER_MODE (20 - CCSDS_TC_TM_PACKET_OFFSET)
17 #define PACKET_LENGTH_TC_LFR_DUMP_PAR (12 - CCSDS_TC_TM_PACKET_OFFSET)
18 #define PACKET_LENGTH_TC_LFR_ENTER_MODE (20 - CCSDS_TC_TM_PACKET_OFFSET)
19 #define PACKET_LENGTH_TC_LFR_UPDATE_INFO (48 - CCSDS_TC_TM_PACKET_OFFSET)
20 #define PACKET_LENGTH_TC_LFR_ENABLE_CALIBRATION (12 - CCSDS_TC_TM_PACKET_OFFSET)
21 #define PACKET_LENGTH_TC_LFR_DISABLE_CALIBRATION (12 - CCSDS_TC_TM_PACKET_OFFSET)
22 #define PACKET_LENGTH_TC_LFR_UPDATE_TIME (18 - CCSDS_TC_TM_PACKET_OFFSET)
16
23
17 // TC TYPES
24 // TC TYPES
18 #define TC_TYPE_DEFAULT 181
25 #define TC_TYPE_DEFAULT 181
19 #define TC_TYPE_LFR_UPDATE_TIME 9
26 #define TC_TYPE_LFR_UPDATE_TIME 9
20
27
21 // TC SUBTYPES
28 // TC SUBTYPES
22 #define TC_SUBTYPE_LOAD_COMMON_PAR 11
29 #define TC_SUBTYPE_RESET 1
23 #define TC_SUBTYPE_LOAD_NORMAL_PAR 13
30 #define TC_SUBTYPE_LOAD_COMMON_PAR 11
24 #define TC_SUBTYPE_LOAD_BURST_PAR 19
31 #define TC_SUBTYPE_LOAD_NORMAL_PAR 13
25 #define TC_SUBTYPE_LOAD_SBM1_PAR 25
32 #define TC_SUBTYPE_LOAD_BURST_PAR 19
26 #define TC_SUBTYPE_LOAD_SBM2_PAR 27
33 #define TC_SUBTYPE_LOAD_SBM1_PAR 25
27 #define TC_SUBTYPE_DUMP_PAR 31
34 #define TC_SUBTYPE_LOAD_SBM2_PAR 27
28 #define TC_SUBTYPE_ENTER_MODE 41
35 #define TC_SUBTYPE_DUMP_PAR 31
36 #define TC_SUBTYPE_ENTER_MODE 41
37 #define TC_SUBTYPE_UPDATE_INFO 51
38 #define TC_SUBTYPE_ENABLE_CALIBRATION 61
39 #define TC_SUBTYPE_DISABLE_CALIBRATION 63
40 #define TC_SUBTYPE_UPDATE_TIME 129
29
41
30 // OTHER CONSTANTS
42 // OTHER CONSTANTS
31 #define TC_LFR_PACKET_SEQUENCE_CONTROL 0xc000 // PID 76 CAT 12
43 #define TC_LFR_PACKET_SEQUENCE_CONTROL 0xc000 // PID 76 CAT 12
32 #define TC_LFR_DATA_FIELD_HEADER0 0x19
44 #define TC_LFR_DATA_FIELD_HEADER0 0x19
33 #define TC_LFR_LOAD_COMMON_PAR_SPARE 0x00
45 #define TC_LFR_LOAD_COMMON_PAR_SPARE 0x00
34
46
47 struct Packet_TC_LFR_RESET_str
48 { // the CCSDS header is added by LPPMON
49 unsigned char packetID[2];
50 unsigned char packetSequenceControl[2];
51 unsigned char packetLength[2];
52 // DATA FIELD HEADER
53 unsigned char ccsdsSecHeaderFlag_pusVersion_ack;
54 unsigned char serviceType;
55 unsigned char serviceSubType;
56 unsigned char sourceID;
57 unsigned char crc[2];
58 };
59 typedef struct Packet_TC_LFR_RESET_str Packet_TC_LFR_RESET_t;
60
35 struct Packet_TC_LFR_ENTER_MODE_str
61 struct Packet_TC_LFR_ENTER_MODE_str
36 { // the CCSDS header is added by LPPMON
62 { // the CCSDS header is added by LPPMON
37 unsigned char packetID[2];
63 unsigned char packetID[2];
38 unsigned char packetSequenceControl[2];
64 unsigned char packetSequenceControl[2];
39 unsigned char packetLength[2];
65 unsigned char packetLength[2];
40 // DATA FIELD HEADER
66 // DATA FIELD HEADER
41 unsigned char ccsdsSecHeaderFlag_pusVersion_ack;
67 unsigned char ccsdsSecHeaderFlag_pusVersion_ack;
42 unsigned char serviceType;
68 unsigned char serviceType;
43 unsigned char serviceSubType;
69 unsigned char serviceSubType;
44 unsigned char sourceID;
70 unsigned char sourceID;
45 unsigned char spare;
71 unsigned char spare;
46 unsigned char mode;
72 unsigned char mode;
47 unsigned char enterModeTime[6];
73 unsigned char enterModeTime[6];
48 unsigned char crc[2];
74 unsigned char crc[2];
49 };
75 };
50 typedef struct Packet_TC_LFR_ENTER_MODE_str Packet_TC_LFR_ENTER_MODE_t;
76 typedef struct Packet_TC_LFR_ENTER_MODE_str Packet_TC_LFR_ENTER_MODE_t;
51
77
78 struct Packet_TC_LFR_UPDATE_INFO_str
79 { // the CCSDS header is added by LPPMON
80 unsigned char packetID[2];
81 unsigned char packetSequenceControl[2];
82 unsigned char packetLength[2];
83 // DATA FIELD HEADER
84 unsigned char ccsdsSecHeaderFlag_pusVersion_ack;
85 unsigned char serviceType;
86 unsigned char serviceSubType;
87 unsigned char sourceID;
88 unsigned char set1;
89 unsigned char set2;
90 unsigned char set3_bias_setting_set1[6];
91 unsigned char set3_bias_setting_set2[6];
92 unsigned char set3_bias_voltage[4];
93 unsigned char set4[8];
94 unsigned char set5;
95 unsigned char set6;
96 unsigned char set7[8];
97 unsigned char crc[2];
98 };
99 typedef struct Packet_TC_LFR_UPDATE_INFO_str Packet_TC_LFR_UPDATE_INFO_t;
100
52 struct Packet_TC_LFR_DUMP_PAR_str
101 struct Packet_TC_LFR_DUMP_PAR_str
53 { // the CCSDS header is added by LPPMON
102 { // the CCSDS header is added by LPPMON
54 unsigned char packetID[2];
103 unsigned char packetID[2];
55 unsigned char packetSequenceControl[2];
104 unsigned char packetSequenceControl[2];
56 unsigned char packetLength[2];
105 unsigned char packetLength[2];
57 // DATA FIELD HEADER
106 // DATA FIELD HEADER
58 unsigned char ccsdsSecHeaderFlag_pusVersion_ack;
107 unsigned char ccsdsSecHeaderFlag_pusVersion_ack;
59 unsigned char serviceType;
108 unsigned char serviceType;
60 unsigned char serviceSubType;
109 unsigned char serviceSubType;
61 unsigned char sourceID;
110 unsigned char sourceID;
62 unsigned char crc[2];
111 unsigned char crc[2];
63
112
64 };
113 };
65 typedef struct Packet_TC_LFR_DUMP_PAR_str Packet_TC_LFR_DUMP_PAR_t;
114 typedef struct Packet_TC_LFR_DUMP_PAR_str Packet_TC_LFR_DUMP_PAR_t;
66
115
67 struct Packet_TC_LFR_LOAD_COMMON_PAR_str
116 struct Packet_TC_LFR_LOAD_COMMON_PAR_str
68 { // the CCSDS header is added by LPPMON
117 { // the CCSDS header is added by LPPMON
69 unsigned char packetID[2];
118 unsigned char packetID[2];
70 unsigned char packetSequenceControl[2];
119 unsigned char packetSequenceControl[2];
71 unsigned char packetLength[2];
120 unsigned char packetLength[2];
72 // DATA FIELD HEADER
121 // DATA FIELD HEADER
73 unsigned char ccsdsSecHeaderFlag_pusVersion_ack;
122 unsigned char ccsdsSecHeaderFlag_pusVersion_ack;
74 unsigned char serviceType;
123 unsigned char serviceType;
75 unsigned char serviceSubType;
124 unsigned char serviceSubType;
76 unsigned char sourceID;
125 unsigned char sourceID;
77 unsigned char spare;
126 unsigned char spare;
78 unsigned char bw_sp0_sp1_r0_r1;
127 unsigned char bw_sp0_sp1_r0_r1;
79 unsigned char crc[2];
128 unsigned char crc[2];
80
129
81 };
130 };
82 typedef struct Packet_TC_LFR_LOAD_COMMON_PAR_str Packet_TC_LFR_LOAD_COMMON_PAR_t;
131 typedef struct Packet_TC_LFR_LOAD_COMMON_PAR_str Packet_TC_LFR_LOAD_COMMON_PAR_t;
83
132
84 struct Packet_TC_LFR_LOAD_NORMAL_PAR_str
133 struct Packet_TC_LFR_LOAD_NORMAL_PAR_str
85 { // the CCSDS header is added by LPPMON
134 { // the CCSDS header is added by LPPMON
86 unsigned char packetID[2];
135 unsigned char packetID[2];
87 unsigned char packetSequenceControl[2];
136 unsigned char packetSequenceControl[2];
88 unsigned char packetLength[2];
137 unsigned char packetLength[2];
89 // DATA FIELD HEADER
138 // DATA FIELD HEADER
90 unsigned char ccsdsSecHeaderFlag_pusVersion_ack;
139 unsigned char ccsdsSecHeaderFlag_pusVersion_ack;
91 unsigned char serviceType;
140 unsigned char serviceType;
92 unsigned char serviceSubType;
141 unsigned char serviceSubType;
93 unsigned char sourceID;
142 unsigned char sourceID;
94 unsigned char sy_lfr_n_swf_l[2];
143 unsigned char sy_lfr_n_swf_l[2];
95 unsigned char sy_lfr_n_swf_p[2];
144 unsigned char sy_lfr_n_swf_p[2];
96 unsigned char sy_lfr_n_asm_p[2];
145 unsigned char sy_lfr_n_asm_p[2];
97 unsigned char sy_lfr_n_bp_p0;
146 unsigned char sy_lfr_n_bp_p0;
98 unsigned char sy_lfr_n_bp_p1;
147 unsigned char sy_lfr_n_bp_p1;
99 unsigned char crc[2];
148 unsigned char crc[2];
100 };
149 };
101 typedef struct Packet_TC_LFR_LOAD_NORMAL_PAR_str Packet_TC_LFR_LOAD_NORMAL_PAR_t;
150 typedef struct Packet_TC_LFR_LOAD_NORMAL_PAR_str Packet_TC_LFR_LOAD_NORMAL_PAR_t;
102
151
103 struct Packet_TC_LFR_LOAD_BURST_SBM1_SBM2_PAR_str
152 struct Packet_TC_LFR_LOAD_BURST_SBM1_SBM2_PAR_str
104 { // the CCSDS header is added by LPPMON
153 { // the CCSDS header is added by LPPMON
105 unsigned char packetID[2];
154 unsigned char packetID[2];
106 unsigned char packetSequenceControl[2];
155 unsigned char packetSequenceControl[2];
107 unsigned char packetLength[2];
156 unsigned char packetLength[2];
108 // DATA FIELD HEADER
157 // DATA FIELD HEADER
109 unsigned char ccsdsSecHeaderFlag_pusVersion_ack;
158 unsigned char ccsdsSecHeaderFlag_pusVersion_ack;
110 unsigned char serviceType;
159 unsigned char serviceType;
111 unsigned char serviceSubType;
160 unsigned char serviceSubType;
112 unsigned char sourceID;
161 unsigned char sourceID;
113 unsigned char sy_lfr_bp_p0;
162 unsigned char sy_lfr_bp_p0;
114 unsigned char sy_lfr_bp_p1;
163 unsigned char sy_lfr_bp_p1;
115 unsigned char crc[2];
164 unsigned char crc[2];
116 };
165 };
117 typedef struct Packet_TC_LFR_LOAD_BURST_SBM1_SBM2_PAR_str Packet_TC_LFR_LOAD_BURST_SBM1_SBM2_PAR_t;
166 typedef struct Packet_TC_LFR_LOAD_BURST_SBM1_SBM2_PAR_str Packet_TC_LFR_LOAD_BURST_SBM1_SBM2_PAR_t;
118
167
168 struct Packet_TC_LFR_ENABLE_DISABLE_CALIBRATION_str
169 { // the CCSDS header is added by LPPMON
170 unsigned char packetID[2];
171 unsigned char packetSequenceControl[2];
172 unsigned char packetLength[2];
173 // DATA FIELD HEADER
174 unsigned char ccsdsSecHeaderFlag_pusVersion_ack;
175 unsigned char serviceType;
176 unsigned char serviceSubType;
177 unsigned char sourceID;
178 unsigned char crc[2];
179 };
180 typedef struct Packet_TC_LFR_ENABLE_DISABLE_CALIBRATION_str Packet_TC_LFR_ENABLE_DISABLE_CALIBRATION_t;
181
182 struct Packet_TC_LFR_UPDATE_TIME_str
183 { // the CCSDS header is added by LPPMON
184 unsigned char packetID[2];
185 unsigned char packetSequenceControl[2];
186 unsigned char packetLength[2];
187 // DATA FIELD HEADER
188 unsigned char ccsdsSecHeaderFlag_pusVersion_ack;
189 unsigned char serviceType;
190 unsigned char serviceSubType;
191 unsigned char sourceID;
192 unsigned char cp_rpw_time[6];
193 unsigned char crc[2];
194 };
195 typedef struct Packet_TC_LFR_UPDATE_TIME_str Packet_TC_LFR_UPDATE_TIME_t;
196
119 #endif // TC_TYPES_H
197 #endif // TC_TYPES_H
@@ -1,460 +1,508
1 #ifndef CCSDS_H_INCLUDED
1 #ifndef CCSDS_H_INCLUDED
2 #define CCSDS_H_INCLUDED
2 #define CCSDS_H_INCLUDED
3
3
4 #define CCSDS_PROTOCOLE_EXTRA_BYTES 4
4 #define CCSDS_PROTOCOLE_EXTRA_BYTES 4
5 #define CCSDS_TELEMETRY_HEADER_LENGTH 16+4
5 #define CCSDS_TELEMETRY_HEADER_LENGTH 16+4
6 #define CCSDS_TM_PKT_MAX_SIZE 4412
6 #define CCSDS_TM_PKT_MAX_SIZE 4412
7 #define CCSDS_TELECOMMAND_HEADER_LENGTH 10+4
7 #define CCSDS_TELECOMMAND_HEADER_LENGTH 10+4
8 #define CCSDS_TC_PKT_MAX_SIZE 256
8 #define CCSDS_TC_PKT_MAX_SIZE 256
9 #define CCSDS_TC_PKT_MIN_SIZE 16
9 #define CCSDS_TC_PKT_MIN_SIZE 16
10 #define CCSDS_TC_TM_PACKET_OFFSET 7
10 #define CCSDS_TC_TM_PACKET_OFFSET 7
11 #define CCSDS_PROCESS_ID 76
11 #define CCSDS_PROCESS_ID 76
12 #define CCSDS_PACKET_CATEGORY 12
12 #define CCSDS_PACKET_CATEGORY 12
13 #define CCSDS_NODE_ADDRESS 0xfe
13 #define CCSDS_NODE_ADDRESS 0xfe
14 #define CCSDS_USER_APP 0x00
14 #define CCSDS_USER_APP 0x00
15
15
16 #define DEFAULT_SPARE1_PUSVERSION_SPARE2 0x10
17 #define DEFAULT_RESERVED 0x00
18 #define DEFAULT_HKBIA 0x1f
19
16 // PACKET ID
20 // PACKET ID
17 #define TM_PACKET_ID_TC_EXE 0x0cc1 // PID 76 CAT 1
21 #define TM_PACKET_ID_TC_EXE 0x0cc1 // PID 76 CAT 1
18 #define TM_PACKET_ID_HK 0x0cc4 // PID 76 CAT 4
22 #define TM_PACKET_ID_HK 0x0cc4 // PID 76 CAT 4
19 #define TM_PACKET_ID_PARAMETER_DUMP 0x0cc9 // PID 76 CAT 9
23 #define TM_PACKET_ID_PARAMETER_DUMP 0x0cc9 // PID 76 CAT 9
20 #define TM_PACKET_ID_SCIENCE_NORMAL 0x0ccc // PID 76 CAT 12
24 #define TM_PACKET_ID_SCIENCE_NORMAL 0x0ccc // PID 76 CAT 12
21 #define TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 0x0cfc // PID 79 CAT 12
25 #define TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 0x0cfc // PID 79 CAT 12
26 #define TM_PACKET_PID_DEFAULT 76
27 #define TM_PACKET_PID_BURST_SBM1_SBM2 79
28 #define TM_PACKET_CAT_TC_EXE 1
29 #define TM_PACKET_CAT_HK 4
30 #define TM_PACKET_CAT_PARAMETER_DUMP 9
31 #define TM_PACKET_CAT_SCIENCE 12
22
32
23 // PACKET SEQUENCE CONTROL
33 // PACKET SEQUENCE CONTROL
24 #define TM_PACKET_SEQ_CTRL_CONTINUATION 0
34 #define TM_PACKET_SEQ_CTRL_CONTINUATION 0x00 // [0000 0000]
25 #define TM_PACKET_SEQ_CTRL_FIRST 1
35 #define TM_PACKET_SEQ_CTRL_FIRST 0x40 // [0100 0000]
26 #define TM_PACKET_SEQ_CTRL_LAST 2
36 #define TM_PACKET_SEQ_CTRL_LAST 0x80 // [1000 0000]
27 #define TM_PACKET_SEQ_CTRL_STANDALONE 3
37 #define TM_PACKET_SEQ_CTRL_STANDALONE 0xc0 // [1100 0000]
38 #define TM_PACKET_SEQ_CNT_DEFAULT 0x00 // [0000 0000]
28
39
29 //
40 // DESTINATION ID
30 #define TM_DESTINATION_ID_GROUND 0
41 #define TM_DESTINATION_ID_GROUND 0
31 #define TM_DESTINATION_ID_MISSION_TIMELINE 110
42 #define TM_DESTINATION_ID_MISSION_TIMELINE 110
32 #define TM_DESTINATION_ID_TC_SEQUENCES 111
43 #define TM_DESTINATION_ID_TC_SEQUENCES 111
33 #define TM_DESTINATION_ID_RECOVERY_ACTION_COMMAND 112
44 #define TM_DESTINATION_ID_RECOVERY_ACTION_COMMAND 112
34 #define TM_DESTINATION_ID_BACKUP_MISSION_TIMELINE 113
45 #define TM_DESTINATION_ID_BACKUP_MISSION_TIMELINE 113
35 #define TM_DESTINATION_ID_DIRECT_CMD 120
46 #define TM_DESTINATION_ID_DIRECT_CMD 120
36 #define TM_DESTINATION_ID_SPARE_GRD_SRC1 121
47 #define TM_DESTINATION_ID_SPARE_GRD_SRC1 121
37 #define TM_DESTINATION_ID_SPARE_GRD_SRC2 122
48 #define TM_DESTINATION_ID_SPARE_GRD_SRC2 122
38 #define TM_DESTINATION_ID_OBCP 15
49 #define TM_DESTINATION_ID_OBCP 15
39 #define TM_DESTINATION_ID_SYSTEM_CONTROL 14
50 #define TM_DESTINATION_ID_SYSTEM_CONTROL 14
40 #define TM_DESTINATION_ID_AOCS 11
51 #define TM_DESTINATION_ID_AOCS 11
41
52
42 #define CCSDS_DESTINATION_ID 0x01
53 #define CCSDS_DESTINATION_ID 0x01
43 #define CCSDS_PROTOCOLE_ID 0x02
54 #define CCSDS_PROTOCOLE_ID 0x02
44 #define CCSDS_RESERVED 0x00
55 #define CCSDS_RESERVED 0x00
45 #define CCSDS_USER_APP 0x00
56 #define CCSDS_USER_APP 0x00
46
57
47 #define SIZE_TM_LFR_TC_EXE_NOT_IMPLEMENTED 24
58 #define SIZE_TM_LFR_TC_EXE_NOT_IMPLEMENTED 24
48 #define SIZE_TM_LFR_TC_EXE_CORRUPTED 32
59 #define SIZE_TM_LFR_TC_EXE_CORRUPTED 32
49 #define SIZE_HK_PARAMETERS 112
60 #define SIZE_HK_PARAMETERS 112
50
61
51 #define ILLEGAL_APID 0
52 #define WRONG_LEN_PACKET 1
53 #define INCOR_CHECKSUM 2
54 #define ILL_TYPE 3
55 #define ILL_SUBTYPE 4
56 #define WRONG_APP_DATA 5
57 #define WRONG_CMD_CODE 6
58 #define CCSDS_TM_VALID 7
59
60 // TC TYPES
62 // TC TYPES
61 #define TC_TYPE_GEN 181
63 #define TC_TYPE_GEN 181
62 #define TC_TYPE_TIME 9
64 #define TC_TYPE_TIME 9
63
65
64 // TC SUBTYPES
66 // TC SUBTYPES
65 #define TC_SUBTYPE_RESET 1
67 #define TC_SUBTYPE_RESET 1
66 #define TC_SUBTYPE_LOAD_COMM 11
68 #define TC_SUBTYPE_LOAD_COMM 11
67 #define TC_SUBTYPE_LOAD_NORM 13
69 #define TC_SUBTYPE_LOAD_NORM 13
68 #define TC_SUBTYPE_LOAD_BURST 19
70 #define TC_SUBTYPE_LOAD_BURST 19
69 #define TC_SUBTYPE_LOAD_SBM1 25
71 #define TC_SUBTYPE_LOAD_SBM1 25
70 #define TC_SUBTYPE_LOAD_SBM2 27
72 #define TC_SUBTYPE_LOAD_SBM2 27
71 #define TC_SUBTYPE_DUMP 31
73 #define TC_SUBTYPE_DUMP 31
72 #define TC_SUBTYPE_ENTER 41
74 #define TC_SUBTYPE_ENTER 41
73 #define TC_SUBTYPE_UPDT_INFO 51
75 #define TC_SUBTYPE_UPDT_INFO 51
74 #define TC_SUBTYPE_EN_CAL 61
76 #define TC_SUBTYPE_EN_CAL 61
75 #define TC_SUBTYPE_DIS_CAL 63
77 #define TC_SUBTYPE_DIS_CAL 63
76 #define TC_SUBTYPE_UPDT_TIME 129
78 #define TC_SUBTYPE_UPDT_TIME 129
77
79
78 // TC LEN
80 // TC LEN
79 #define TC_LEN_RESET 12
81 #define TC_LEN_RESET 12
80 #define TC_LEN_LOAD_COMM 14
82 #define TC_LEN_LOAD_COMM 14
81 #define TC_LEN_LOAD_NORM 20
83 #define TC_LEN_LOAD_NORM 20
82 #define TC_LEN_LOAD_BURST 14
84 #define TC_LEN_LOAD_BURST 14
83 #define TC_LEN_LOAD_SBM1 14
85 #define TC_LEN_LOAD_SBM1 14
84 #define TC_LEN_LOAD_SBM2 14
86 #define TC_LEN_LOAD_SBM2 14
85 #define TC_LEN_DUMP 12
87 #define TC_LEN_DUMP 12
86 #define TC_LEN_ENTER 20
88 #define TC_LEN_ENTER 20
87 #define TC_LEN_UPDT_INFO 48
89 #define TC_LEN_UPDT_INFO 48
88 #define TC_LEN_EN_CAL 12
90 #define TC_LEN_EN_CAL 12
89 #define TC_LEN_DIS_CAL 12
91 #define TC_LEN_DIS_CAL 12
90 #define TC_LEN_UPDT_TIME 18
92 #define TC_LEN_UPDT_TIME 18
91
93
92 // TM TYPES
94 // TM TYPES
93 #define TM_TYPE_TC_EXE 1
95 #define TM_TYPE_TC_EXE 1
94 #define TM_TYPE_HK 3
96 #define TM_TYPE_HK 3
95 #define TM_TYPE_PARAMETER_DUMP 3
97 #define TM_TYPE_PARAMETER_DUMP 3
96 #define TM_TYPE_LFR_SCIENCE 21
98 #define TM_TYPE_LFR_SCIENCE 21
97
99
98 // TM SUBTYPES
100 // TM SUBTYPES
99 #define TM_SUBTYPE_EXE_OK 7
101 #define TM_SUBTYPE_EXE_OK 7
100 #define TM_SUBTYPE_EXE_NOK 8
102 #define TM_SUBTYPE_EXE_NOK 8
101 #define TM_SUBTYPE_HK 25
103 #define TM_SUBTYPE_HK 25
102 #define TM_SUBTYPE_PARAMETER_DUMP 25
104 #define TM_SUBTYPE_PARAMETER_DUMP 25
103 #define TM_SUBTYPE_SCIENCE 3
105 #define TM_SUBTYPE_SCIENCE 3
104 #define TM_SUBTYPE_LFR_SCIENCE 3
106 #define TM_SUBTYPE_LFR_SCIENCE 3
105
107
106 // FAILURE CODES
108 // FAILURE CODES
109 #define ILLEGAL_APID 0
110 #define WRONG_LEN_PACKET 1
111 #define INCOR_CHECKSUM 2
112 #define ILL_TYPE 3
113 #define ILL_SUBTYPE 4
114 #define WRONG_APP_DATA 5
115 //
116 #define WRONG_CMD_CODE 6
117 #define CCSDS_TM_VALID 7
107 #define FAILURE_CODE_INCONSISTENT 5 // 0x00 0x05
118 #define FAILURE_CODE_INCONSISTENT 5 // 0x00 0x05
108 #define FAILURE_CODE_NOT_EXECUTABLE 42000 // 0xa4 0x10
119 #define FAILURE_CODE_NOT_EXECUTABLE 42000 // 0xa4 0x10
109 #define FAILURE_CODE_NOT_IMPLEMENTED 42002 // 0xa4 0x12
120 #define FAILURE_CODE_NOT_IMPLEMENTED 42002 // 0xa4 0x12
110 #define FAILURE_CODE_ERROR 42003 // 0xa4 0x13
121 #define FAILURE_CODE_ERROR 42003 // 0xa4 0x13
111 #define FAILURE_CODE_CORRUPTED 42005 // 0xa4 0x15
122 #define FAILURE_CODE_CORRUPTED 42005 // 0xa4 0x15
123
112 // TM SID
124 // TM SID
113 #define SID_DEFAULT 0
125 #define SID_DEFAULT 0
114 #define SID_EXE_INC 5
126 #define SID_EXE_INC 5
115 #define SID_NOT_EXE 42000 // 0xa4 0x10
127 #define SID_NOT_EXE 42000 // 0xa4 0x10
116 #define SID_NOT_IMP 42002 // 0xa4 0x12
128 #define SID_NOT_IMP 42002 // 0xa4 0x12
117 #define SID_EXE_ERR 42003 // 0xa4 0x13
129 #define SID_EXE_ERR 42003 // 0xa4 0x13
118 #define SID_EXE_CORR 42005 // 0xa4 0x15
130 #define SID_EXE_CORR 42005 // 0xa4 0x15
119 #define SID_HK 1
131 #define SID_HK 1
120 #define SID_PARAMETER_DUMP 10
132 #define SID_PARAMETER_DUMP 10
121
133
122 #define SID_NORM_SWF_F0 3
134 #define SID_NORM_SWF_F0 3
123 #define SID_NORM_SWF_F1 4
135 #define SID_NORM_SWF_F1 4
124 #define SID_NORM_SWF_F2 5
136 #define SID_NORM_SWF_F2 5
125 #define SID_NORM_CWF_F3 1
137 #define SID_NORM_CWF_F3 1
126 #define SID_BURST_CWF_F2 2
138 #define SID_BURST_CWF_F2 2
127 #define SID_SBM1_CWF_F1 24
139 #define SID_SBM1_CWF_F1 24
128 #define SID_SBM2_CWF_F2 25
140 #define SID_SBM2_CWF_F2 25
129 #define SID_NORM_ASM_F0 11
141 #define SID_NORM_ASM_F0 11
130 #define SID_NORM_ASM_F1 12
142 #define SID_NORM_ASM_F1 12
131 #define SID_NORM_ASM_F2 13
143 #define SID_NORM_ASM_F2 13
132 #define SID_NORM_BP1_F0 14
144 #define SID_NORM_BP1_F0 14
133 #define SID_NORM_BP1_F1 15
145 #define SID_NORM_BP1_F1 15
134 #define SID_NORM_BP1_F2 16
146 #define SID_NORM_BP1_F2 16
135 #define SID_NORM_BP2_F0 19
147 #define SID_NORM_BP2_F0 19
136 #define SID_NORM_BP2_F1 20
148 #define SID_NORM_BP2_F1 20
137 #define SID_NORM_BP2_F2 21
149 #define SID_NORM_BP2_F2 21
138 #define SID_BURST_BP1_F0 17
150 #define SID_BURST_BP1_F0 17
139 #define SID_BURST_BP2_F0 22
151 #define SID_BURST_BP2_F0 22
140 #define SID_BURST_BP1_F1 18
152 #define SID_BURST_BP1_F1 18
141 #define SID_BURST_BP2_F1 23
153 #define SID_BURST_BP2_F1 23
142 #define SID_SBM1_BP1_F0 28
154 #define SID_SBM1_BP1_F0 28
143 #define SID_SBM1_BP2_F0 31
155 #define SID_SBM1_BP2_F0 31
144 #define SID_SBM2_BP1_F0 29
156 #define SID_SBM2_BP1_F0 29
145 #define SID_SBM2_BP2_F0 32
157 #define SID_SBM2_BP2_F0 32
146 #define SID_SBM1_BP1_F1 30
158 #define SID_SBM2_BP1_F1 30
147 #define SID_SBM1_BP2_F1 33
159 #define SID_SBM2_BP2_F1 33
148
160
149 // LENGTH (BYTES)
161 // LENGTH (BYTES)
150 #define LENGTH_TM_LFR_TC_EXE_MAX 32
162 #define LENGTH_TM_LFR_TC_EXE_MAX 32
151 #define LENGTH_TM_LFR_HK 126
163 #define LENGTH_TM_LFR_HK 126
152
164
153 // HEADER_LENGTH
165 // HEADER_LENGTH
154 #define TM_HEADER_LEN 16
166 #define TM_HEADER_LEN 16
155 #define HEADER_LENGTH_TM_LFR_SCIENCE_ASM 28
167 #define HEADER_LENGTH_TM_LFR_SCIENCE_ASM 28
156 // PACKET_LENGTH
168 // PACKET_LENGTH
157 #define PACKET_LENGTH_TC_EXE_SUCCESS (20 - CCSDS_TC_TM_PACKET_OFFSET)
169 #define PACKET_LENGTH_TC_EXE_SUCCESS (20 - CCSDS_TC_TM_PACKET_OFFSET)
158 #define PACKET_LENGTH_TC_EXE_INCONSISTENT (26 - CCSDS_TC_TM_PACKET_OFFSET)
170 #define PACKET_LENGTH_TC_EXE_INCONSISTENT (26 - CCSDS_TC_TM_PACKET_OFFSET)
159 #define PACKET_LENGTH_TC_EXE_NOT_EXECUTABLE (26 - CCSDS_TC_TM_PACKET_OFFSET)
171 #define PACKET_LENGTH_TC_EXE_NOT_EXECUTABLE (26 - CCSDS_TC_TM_PACKET_OFFSET)
160 #define PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED (24 - CCSDS_TC_TM_PACKET_OFFSET)
172 #define PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED (24 - CCSDS_TC_TM_PACKET_OFFSET)
161 #define PACKET_LENGTH_TC_EXE_ERROR (24 - CCSDS_TC_TM_PACKET_OFFSET)
173 #define PACKET_LENGTH_TC_EXE_ERROR (24 - CCSDS_TC_TM_PACKET_OFFSET)
162 #define PACKET_LENGTH_TC_EXE_CORRUPTED (32 - CCSDS_TC_TM_PACKET_OFFSET)
174 #define PACKET_LENGTH_TC_EXE_CORRUPTED (32 - CCSDS_TC_TM_PACKET_OFFSET)
163 #define PACKET_LENGTH_HK (126 - CCSDS_TC_TM_PACKET_OFFSET)
175 #define PACKET_LENGTH_HK (126 - CCSDS_TC_TM_PACKET_OFFSET)
164 #define PACKET_LENGTH_PARAMETER_DUMP (34 - CCSDS_TC_TM_PACKET_OFFSET)
176 #define PACKET_LENGTH_PARAMETER_DUMP (34 - CCSDS_TC_TM_PACKET_OFFSET)
165 #define PACKET_LENGTH_TM_LFR_SCIENCE_ASM (TOTAL_SIZE_SM + HEADER_LENGTH_TM_LFR_SCIENCE_ASM - CCSDS_TC_TM_PACKET_OFFSET)
177 #define PACKET_LENGTH_TM_LFR_SCIENCE_ASM (TOTAL_SIZE_SM + HEADER_LENGTH_TM_LFR_SCIENCE_ASM - CCSDS_TC_TM_PACKET_OFFSET)
166
178
167 #define SPARE1_PUSVERSION_SPARE2 0x10
179 #define SPARE1_PUSVERSION_SPARE2 0x10
168
180
169 #define LEN_TM_LFR_HK 126 + 4
181 #define LEN_TM_LFR_HK 126 + 4
170 #define LEN_TM_LFR_TC_EXE_NOT_IMP 24 +4
182 #define LEN_TM_LFR_TC_EXE_NOT_IMP 24 +4
171
183
172 #define TM_LEN_SCI_SWF_340 340 * 12 + 10 + 12 - 1
184 #define TM_LEN_SCI_SWF_340 (340 * 12 + 10 + 12 - 1)
173 #define TM_LEN_SCI_SWF_8 8 * 12 + 10 + 12 - 1
185 #define TM_LEN_SCI_SWF_8 (8 * 12 + 10 + 12 - 1)
174 #define TM_LEN_SCI_CWF_340 340 * 12 + 10 + 10 - 1
186 #define TM_LEN_SCI_CWF_340 (340 * 12 + 10 + 10 - 1)
175 #define TM_LEN_SCI_CWF_8 8 * 12 + 10 + 10 - 1
187 #define TM_LEN_SCI_CWF_8 (8 * 12 + 10 + 10 - 1)
188 #define DEFAULT_PKTCNT 0x07
189 #define BLK_NR_340 0x0154
190 #define BLK_NR_8 0x0008
176
191
177 enum TM_TYPE{
192 enum TM_TYPE{
178 TM_LFR_TC_EXE_OK,
193 TM_LFR_TC_EXE_OK,
179 TM_LFR_TC_EXE_ERR,
194 TM_LFR_TC_EXE_ERR,
180 TM_LFR_HK,
195 TM_LFR_HK,
181 TM_LFR_SCI,
196 TM_LFR_SCI,
182 TM_LFR_SCI_SBM,
197 TM_LFR_SCI_SBM,
183 TM_LFR_PAR_DUMP
198 TM_LFR_PAR_DUMP
184 };
199 };
185
200
186 struct TMHeader_str
201 struct TMHeader_str
187 {
202 {
188 volatile unsigned char targetLogicalAddress;
203 volatile unsigned char targetLogicalAddress;
189 volatile unsigned char protocolIdentifier;
204 volatile unsigned char protocolIdentifier;
190 volatile unsigned char reserved;
205 volatile unsigned char reserved;
191 volatile unsigned char userApplication;
206 volatile unsigned char userApplication;
192 volatile unsigned char packetID[2];
207 volatile unsigned char packetID[2];
193 volatile unsigned char packetSequenceControl[2];
208 volatile unsigned char packetSequenceControl[2];
194 volatile unsigned char packetLength[2];
209 volatile unsigned char packetLength[2];
195 // DATA FIELD HEADER
210 // DATA FIELD HEADER
196 volatile unsigned char spare1_pusVersion_spare2;
211 volatile unsigned char spare1_pusVersion_spare2;
197 volatile unsigned char serviceType;
212 volatile unsigned char serviceType;
198 volatile unsigned char serviceSubType;
213 volatile unsigned char serviceSubType;
199 volatile unsigned char destinationID;
214 volatile unsigned char destinationID;
200 volatile unsigned char time[6];
215 volatile unsigned char time[6];
201 };
216 };
202 typedef struct TMHeader_str TMHeader_t;
217 typedef struct TMHeader_str TMHeader_t;
203
218
204 struct Packet_TM_LFR_TC_EXE_str
219 struct Packet_TM_LFR_TC_EXE_str
205 {
220 {
206 volatile unsigned char targetLogicalAddress;
221 volatile unsigned char targetLogicalAddress;
207 volatile unsigned char protocolIdentifier;
222 volatile unsigned char protocolIdentifier;
208 volatile unsigned char reserved;
223 volatile unsigned char reserved;
209 volatile unsigned char userApplication;
224 volatile unsigned char userApplication;
210 volatile unsigned char packetID[2];
225 volatile unsigned char packetID[2];
211 volatile unsigned char packetSequenceControl[2];
226 volatile unsigned char packetSequenceControl[2];
212 volatile unsigned char packetLength[2];
227 volatile unsigned char packetLength[2];
213 // DATA FIELD HEADER
228 // DATA FIELD HEADER
214 volatile unsigned char spare1_pusVersion_spare2;
229 volatile unsigned char spare1_pusVersion_spare2;
215 volatile unsigned char serviceType;
230 volatile unsigned char serviceType;
216 volatile unsigned char serviceSubType;
231 volatile unsigned char serviceSubType;
217 volatile unsigned char destinationID;
232 volatile unsigned char destinationID;
218 volatile unsigned char time[6];
233 volatile unsigned char time[6];
219 volatile unsigned char data[LENGTH_TM_LFR_TC_EXE_MAX - 10 + 1];
234 volatile unsigned char data[LENGTH_TM_LFR_TC_EXE_MAX - 10 + 1];
220 };
235 };
221 typedef struct Packet_TM_LFR_TC_EXE_str Packet_TM_LFR_TC_EXE_t;
236 typedef struct Packet_TM_LFR_TC_EXE_str Packet_TM_LFR_TC_EXE_t;
222
237
238 struct Packet_TM_LFR_TC_EXE_CORRUPTED_str
239 {
240 volatile unsigned char targetLogicalAddress;
241 volatile unsigned char protocolIdentifier;
242 volatile unsigned char reserved;
243 volatile unsigned char userApplication;
244 // PACKET HEADER
245 volatile unsigned char packetID[2];
246 volatile unsigned char packetSequenceControl[2];
247 volatile unsigned char packetLength[2];
248 // DATA FIELD HEADER
249 volatile unsigned char spare1_pusVersion_spare2;
250 volatile unsigned char serviceType;
251 volatile unsigned char serviceSubType;
252 volatile unsigned char destinationID;
253 volatile unsigned char time[6];
254 //
255 volatile unsigned char tc_failure_code[2];
256 volatile unsigned char telecommand_pkt_id[2];
257 volatile unsigned char pkt_seq_control[2];
258 volatile unsigned char tc_service;
259 volatile unsigned char tc_subtype;
260 volatile unsigned char pkt_len_rcv_value[2];
261 volatile unsigned char pkt_datafieldsize_cnt[2];
262 volatile unsigned char rcv_crc[2];
263 volatile unsigned char computed_crc[2];
264 };
265 typedef struct Packet_TM_LFR_TC_EXE_CORRUPTED_str Packet_TM_LFR_TC_EXE_CORRUPTED_t;
266
223 struct Header_TM_LFR_SCIENCE_SWF_str
267 struct Header_TM_LFR_SCIENCE_SWF_str
224 {
268 {
225 volatile unsigned char targetLogicalAddress;
269 volatile unsigned char targetLogicalAddress;
226 volatile unsigned char protocolIdentifier;
270 volatile unsigned char protocolIdentifier;
227 volatile unsigned char reserved;
271 volatile unsigned char reserved;
228 volatile unsigned char userApplication;
272 volatile unsigned char userApplication;
229 volatile unsigned char packetID[2];
273 volatile unsigned char packetID[2];
230 volatile unsigned char packetSequenceControl[2];
274 volatile unsigned char packetSequenceControl[2];
231 volatile unsigned char packetLength[2];
275 volatile unsigned char packetLength[2];
232 // DATA FIELD HEADER
276 // DATA FIELD HEADER
233 volatile unsigned char spare1_pusVersion_spare2;
277 volatile unsigned char spare1_pusVersion_spare2;
234 volatile unsigned char serviceType;
278 volatile unsigned char serviceType;
235 volatile unsigned char serviceSubType;
279 volatile unsigned char serviceSubType;
236 volatile unsigned char destinationID;
280 volatile unsigned char destinationID;
237 volatile unsigned char time[6];
281 volatile unsigned char time[6];
238 // AUXILIARY HEADER
282 // AUXILIARY HEADER
239 volatile unsigned char sid;
283 volatile unsigned char sid;
240 volatile unsigned char hkBIA;
284 volatile unsigned char hkBIA;
241 volatile unsigned char pktCnt;
285 volatile unsigned char pktCnt;
242 volatile unsigned char pktNr;
286 volatile unsigned char pktNr;
243 volatile unsigned char acquisitionTime[6];
287 volatile unsigned char acquisitionTime[6];
244 volatile unsigned char blkNr[2];
288 volatile unsigned char blkNr[2];
245 };
289 };
246 typedef struct Header_TM_LFR_SCIENCE_SWF_str Header_TM_LFR_SCIENCE_SWF_t;
290 typedef struct Header_TM_LFR_SCIENCE_SWF_str Header_TM_LFR_SCIENCE_SWF_t;
247
291
248 struct Header_TM_LFR_SCIENCE_CWF_str
292 struct Header_TM_LFR_SCIENCE_CWF_str
249 {
293 {
250 volatile unsigned char targetLogicalAddress;
294 volatile unsigned char targetLogicalAddress;
251 volatile unsigned char protocolIdentifier;
295 volatile unsigned char protocolIdentifier;
252 volatile unsigned char reserved;
296 volatile unsigned char reserved;
253 volatile unsigned char userApplication;
297 volatile unsigned char userApplication;
254 volatile unsigned char packetID[2];
298 volatile unsigned char packetID[2];
255 volatile unsigned char packetSequenceControl[2];
299 volatile unsigned char packetSequenceControl[2];
256 volatile unsigned char packetLength[2];
300 volatile unsigned char packetLength[2];
257 // DATA FIELD HEADER
301 // DATA FIELD HEADER
258 volatile unsigned char spare1_pusVersion_spare2;
302 volatile unsigned char spare1_pusVersion_spare2;
259 volatile unsigned char serviceType;
303 volatile unsigned char serviceType;
260 volatile unsigned char serviceSubType;
304 volatile unsigned char serviceSubType;
261 volatile unsigned char destinationID;
305 volatile unsigned char destinationID;
262 volatile unsigned char time[6];
306 volatile unsigned char time[6];
263 // AUXILIARY DATA HEADER
307 // AUXILIARY DATA HEADER
264 volatile unsigned char sid;
308 volatile unsigned char sid;
265 volatile unsigned char hkBIA;
309 volatile unsigned char hkBIA;
266 volatile unsigned char acquisitionTime[6];
310 volatile unsigned char acquisitionTime[6];
267 volatile unsigned char blkNr[2];
311 volatile unsigned char blkNr[2];
268 };
312 };
269 typedef struct Header_TM_LFR_SCIENCE_CWF_str Header_TM_LFR_SCIENCE_CWF_t;
313 typedef struct Header_TM_LFR_SCIENCE_CWF_str Header_TM_LFR_SCIENCE_CWF_t;
270
314
271 struct Header_TM_LFR_SCIENCE_ASM_str
315 struct Header_TM_LFR_SCIENCE_ASM_str
272 {
316 {
273 volatile unsigned char targetLogicalAddress;
317 volatile unsigned char targetLogicalAddress;
274 volatile unsigned char protocolIdentifier;
318 volatile unsigned char protocolIdentifier;
275 volatile unsigned char reserved;
319 volatile unsigned char reserved;
276 volatile unsigned char userApplication;
320 volatile unsigned char userApplication;
277 volatile unsigned char packetID[2];
321 volatile unsigned char packetID[2];
278 volatile unsigned char packetSequenceControl[2];
322 volatile unsigned char packetSequenceControl[2];
279 volatile unsigned char packetLength[2];
323 volatile unsigned char packetLength[2];
280 // DATA FIELD HEADER
324 // DATA FIELD HEADER
281 volatile unsigned char spare1_pusVersion_spare2;
325 volatile unsigned char spare1_pusVersion_spare2;
282 volatile unsigned char serviceType;
326 volatile unsigned char serviceType;
283 volatile unsigned char serviceSubType;
327 volatile unsigned char serviceSubType;
284 volatile unsigned char destinationID;
328 volatile unsigned char destinationID;
285 volatile unsigned char time[6];
329 volatile unsigned char time[6];
286 // AUXILIARY HEADER
330 // AUXILIARY HEADER
287 volatile unsigned char sid;
331 volatile unsigned char sid;
288 volatile unsigned char biaStatusInfo;
332 volatile unsigned char biaStatusInfo;
289 volatile unsigned char cntASM;
333 volatile unsigned char cntASM;
290 volatile unsigned char nrASM;
334 volatile unsigned char nrASM;
291 volatile unsigned char acquisitionTime[6];
335 volatile unsigned char acquisitionTime[6];
292 volatile unsigned char blkNr[2];
336 volatile unsigned char blkNr[2];
293 };
337 };
294 typedef struct Header_TM_LFR_SCIENCE_ASM_str Header_TM_LFR_SCIENCE_ASM_t;
338 typedef struct Header_TM_LFR_SCIENCE_ASM_str Header_TM_LFR_SCIENCE_ASM_t;
295
339
296 struct ccsdsTelecommandPacket_str
340 struct ccsdsTelecommandPacket_str
297 {
341 {
298 //unsigned char targetLogicalAddress; // removed by the grspw module
342 //unsigned char targetLogicalAddress; // removed by the grspw module
299 volatile unsigned char protocolIdentifier;
343 volatile unsigned char protocolIdentifier;
300 volatile unsigned char reserved;
344 volatile unsigned char reserved;
301 volatile unsigned char userApplication;
345 volatile unsigned char userApplication;
302 volatile unsigned char packetID[2];
346 volatile unsigned char packetID[2];
303 volatile unsigned char packetSequenceControl[2];
347 volatile unsigned char packetSequenceControl[2];
304 volatile unsigned char packetLength[2];
348 volatile unsigned char packetLength[2];
305 // DATA FIELD HEADER
349 // DATA FIELD HEADER
306 volatile unsigned char headerFlag_pusVersion_Ack;
350 volatile unsigned char headerFlag_pusVersion_Ack;
307 volatile unsigned char serviceType;
351 volatile unsigned char serviceType;
308 volatile unsigned char serviceSubType;
352 volatile unsigned char serviceSubType;
309 volatile unsigned char sourceID;
353 volatile unsigned char sourceID;
310 volatile unsigned char dataAndCRC[CCSDS_TC_PKT_MAX_SIZE-10];
354 volatile unsigned char dataAndCRC[CCSDS_TC_PKT_MAX_SIZE-10];
311 };
355 };
312 typedef struct ccsdsTelecommandPacket_str ccsdsTelecommandPacket_t;
356 typedef struct ccsdsTelecommandPacket_str ccsdsTelecommandPacket_t;
313
357
314 struct Packet_TM_LFR_HK_str
358 struct Packet_TM_LFR_HK_str
315 {
359 {
316 volatile unsigned char targetLogicalAddress;
360 volatile unsigned char targetLogicalAddress;
317 volatile unsigned char protocolIdentifier;
361 volatile unsigned char protocolIdentifier;
318 volatile unsigned char reserved;
362 volatile unsigned char reserved;
319 volatile unsigned char userApplication;
363 volatile unsigned char userApplication;
320 volatile unsigned char packetID[2];
364 volatile unsigned char packetID[2];
321 volatile unsigned char packetSequenceControl[2];
365 volatile unsigned char packetSequenceControl[2];
322 volatile unsigned char packetLength[2];
366 volatile unsigned char packetLength[2];
323 volatile unsigned char dataFieldHeader[10];
367 volatile unsigned char spare1_pusVersion_spare2;
368 volatile unsigned char serviceType;
369 volatile unsigned char serviceSubType;
370 volatile unsigned char destinationID;
371 volatile unsigned char time[6];
324 volatile unsigned char sid;
372 volatile unsigned char sid;
325
373
326 //**************
374 //**************
327 // HK PARAMETERS
375 // HK PARAMETERS
328 unsigned char lfr_status_word[2];
376 unsigned char lfr_status_word[2];
329 unsigned char lfr_sw_version[4];
377 unsigned char lfr_sw_version[4];
330 // tc statistics
378 // tc statistics
331 unsigned char hk_lfr_update_info_tc_cnt[2];
379 unsigned char hk_lfr_update_info_tc_cnt[2];
332 unsigned char hk_lfr_update_time_tc_cnt[2];
380 unsigned char hk_lfr_update_time_tc_cnt[2];
333 unsigned char hk_dpu_exe_tc_lfr_cnt[2];
381 unsigned char hk_dpu_exe_tc_lfr_cnt[2];
334 unsigned char hk_dpu_rej_tc_lfr_cnt[2];
382 unsigned char hk_dpu_rej_tc_lfr_cnt[2];
335 unsigned char hk_lfr_last_exe_tc_id[2];
383 unsigned char hk_lfr_last_exe_tc_id[2];
336 unsigned char hk_lfr_last_exe_tc_type[2];
384 unsigned char hk_lfr_last_exe_tc_type[2];
337 unsigned char hk_lfr_last_exe_tc_subtype[2];
385 unsigned char hk_lfr_last_exe_tc_subtype[2];
338 unsigned char hk_lfr_last_exe_tc_time[6];
386 unsigned char hk_lfr_last_exe_tc_time[6];
339 unsigned char hk_lfr_last_rej_tc_id[2];
387 unsigned char hk_lfr_last_rej_tc_id[2];
340 unsigned char hk_lfr_last_rej_tc_type[2];
388 unsigned char hk_lfr_last_rej_tc_type[2];
341 unsigned char hk_lfr_last_rej_tc_subtype[2];
389 unsigned char hk_lfr_last_rej_tc_subtype[2];
342 unsigned char hk_lfr_last_rej_tc_time[6];
390 unsigned char hk_lfr_last_rej_tc_time[6];
343 // anomaly statistics
391 // anomaly statistics
344 unsigned char hk_lfr_le_cnt[2];
392 unsigned char hk_lfr_le_cnt[2];
345 unsigned char hk_lfr_me_cnt[2];
393 unsigned char hk_lfr_me_cnt[2];
346 unsigned char hk_lfr_he_cnt[2];
394 unsigned char hk_lfr_he_cnt[2];
347 unsigned char hk_lfr_last_er_rid[2];
395 unsigned char hk_lfr_last_er_rid[2];
348 unsigned char hk_lfr_last_er_code;
396 unsigned char hk_lfr_last_er_code;
349 unsigned char hk_lfr_last_er_time[6];
397 unsigned char hk_lfr_last_er_time[6];
350 // vhdl_blk_status
398 // vhdl_blk_status
351 unsigned char hk_lfr_vhdl_aa_sm;
399 unsigned char hk_lfr_vhdl_aa_sm;
352 unsigned char hk_lfr_vhdl_fft_sr;
400 unsigned char hk_lfr_vhdl_fft_sr;
353 unsigned char hk_lfr_vhdl_cic_hk;
401 unsigned char hk_lfr_vhdl_cic_hk;
354 unsigned char hk_lfr_vhdl_iir_cal;
402 unsigned char hk_lfr_vhdl_iir_cal;
355 // spacewire_if_statistics
403 // spacewire_if_statistics
356 unsigned char hk_lfr_dpu_spw_pkt_rcv_cnt[2];
404 unsigned char hk_lfr_dpu_spw_pkt_rcv_cnt[2];
357 unsigned char hk_lfr_dpu_spw_pkt_sent_cnt[2];
405 unsigned char hk_lfr_dpu_spw_pkt_sent_cnt[2];
358 unsigned char hk_lfr_dpu_spw_tick_out_cnt;
406 unsigned char hk_lfr_dpu_spw_tick_out_cnt;
359 unsigned char hk_lfr_dpu_spw_last_timc;
407 unsigned char hk_lfr_dpu_spw_last_timc;
360 // ahb error statistics
408 // ahb error statistics
361 unsigned int hk_lfr_last_fail_addr;
409 unsigned int hk_lfr_last_fail_addr;
362 // temperatures
410 // temperatures
363 unsigned char hk_lfr_temp_scm[2];
411 unsigned char hk_lfr_temp_scm[2];
364 unsigned char hk_lfr_temp_pcb[2];
412 unsigned char hk_lfr_temp_pcb[2];
365 unsigned char hk_lfr_temp_fpga[2];
413 unsigned char hk_lfr_temp_fpga[2];
366 // error counters
414 // error counters
367 unsigned char hk_lfr_dpu_spw_parity;
415 unsigned char hk_lfr_dpu_spw_parity;
368 unsigned char hk_lfr_dpu_spw_disconnect;
416 unsigned char hk_lfr_dpu_spw_disconnect;
369 unsigned char hk_lfr_dpu_spw_escape;
417 unsigned char hk_lfr_dpu_spw_escape;
370 unsigned char hk_lfr_dpu_spw_credit;
418 unsigned char hk_lfr_dpu_spw_credit;
371 unsigned char hk_lfr_dpu_spw_write_sync;
419 unsigned char hk_lfr_dpu_spw_write_sync;
372 unsigned char hk_lfr_dpu_spw_rx_ahb;
420 unsigned char hk_lfr_dpu_spw_rx_ahb;
373 unsigned char hk_lfr_dpu_spw_tx_ahb;
421 unsigned char hk_lfr_dpu_spw_tx_ahb;
374 unsigned char hk_lfr_dpu_spw_header_crc;
422 unsigned char hk_lfr_dpu_spw_header_crc;
375 unsigned char hk_lfr_dpu_spw_data_crc;
423 unsigned char hk_lfr_dpu_spw_data_crc;
376 unsigned char hk_lfr_dpu_spw_early_eop;
424 unsigned char hk_lfr_dpu_spw_early_eop;
377 unsigned char hk_lfr_dpu_spw_invalid_addr;
425 unsigned char hk_lfr_dpu_spw_invalid_addr;
378 unsigned char hk_lfr_dpu_spw_eep;
426 unsigned char hk_lfr_dpu_spw_eep;
379 unsigned char hk_lfr_dpu_spw_rx_too_big;
427 unsigned char hk_lfr_dpu_spw_rx_too_big;
380 // timecode
428 // timecode
381 unsigned char hk_lfr_timecode_erroneous;
429 unsigned char hk_lfr_timecode_erroneous;
382 unsigned char hk_lfr_timecode_missing;
430 unsigned char hk_lfr_timecode_missing;
383 unsigned char hk_lfr_timecode_invalid;
431 unsigned char hk_lfr_timecode_invalid;
384 // time
432 // time
385 unsigned char hk_lfr_time_timecode_it;
433 unsigned char hk_lfr_time_timecode_it;
386 unsigned char hk_lfr_time_not_synchro;
434 unsigned char hk_lfr_time_not_synchro;
387 unsigned char hk_lfr_time_timecode_ctr;
435 unsigned char hk_lfr_time_timecode_ctr;
388 // hk_lfr_buffer_dpu_
436 // hk_lfr_buffer_dpu_
389 unsigned char hk_lfr_buffer_dpu_tc_fifo;
437 unsigned char hk_lfr_buffer_dpu_tc_fifo;
390 unsigned char hk_lfr_buffer_dpu_tm_fifo;
438 unsigned char hk_lfr_buffer_dpu_tm_fifo;
391 // hk_lfr_ahb_
439 // hk_lfr_ahb_
392 unsigned char hk_lfr_ahb_correctable;
440 unsigned char hk_lfr_ahb_correctable;
393 unsigned char hk_lfr_ahb_uncorrectable;
441 unsigned char hk_lfr_ahb_uncorrectable;
394 unsigned char hk_lfr_ahb_fails_trans;
442 unsigned char hk_lfr_ahb_fails_trans;
395 // hk_lfr_adc_
443 // hk_lfr_adc_
396 unsigned char hk_lfr_adc_failure;
444 unsigned char hk_lfr_adc_failure;
397 unsigned char hk_lfr_adc_timeout;
445 unsigned char hk_lfr_adc_timeout;
398 unsigned char hk_lfr_toomany_err;
446 unsigned char hk_lfr_toomany_err;
399 // hk_lfr_cpu_
447 // hk_lfr_cpu_
400 unsigned char hk_lfr_cpu_write_err;
448 unsigned char hk_lfr_cpu_write_err;
401 unsigned char hk_lfr_cpu_ins_access_err;
449 unsigned char hk_lfr_cpu_ins_access_err;
402 unsigned char hk_lfr_cpu_illegal_ins;
450 unsigned char hk_lfr_cpu_illegal_ins;
403 unsigned char hk_lfr_cpu_privilegied_ins;
451 unsigned char hk_lfr_cpu_privilegied_ins;
404 unsigned char hk_lfr_cpu_register_hw;
452 unsigned char hk_lfr_cpu_register_hw;
405 unsigned char hk_lfr_cpu_not_aligned;
453 unsigned char hk_lfr_cpu_not_aligned;
406 unsigned char hk_lfr_cpu_data_exception;
454 unsigned char hk_lfr_cpu_data_exception;
407 unsigned char hk_lfr_cpu_div_exception;
455 unsigned char hk_lfr_cpu_div_exception;
408 unsigned char hk_lfr_cpu_arith_overflow;
456 unsigned char hk_lfr_cpu_arith_overflow;
409 };
457 };
410 typedef struct Packet_TM_LFR_HK_str Packet_TM_LFR_HK_t;
458 typedef struct Packet_TM_LFR_HK_str Packet_TM_LFR_HK_t;
411
459
412 struct Packet_TM_LFR_PARAMETER_DUMP_str
460 struct Packet_TM_LFR_PARAMETER_DUMP_str
413 {
461 {
414 volatile unsigned char targetLogicalAddress;
462 volatile unsigned char targetLogicalAddress;
415 volatile unsigned char protocolIdentifier;
463 volatile unsigned char protocolIdentifier;
416 volatile unsigned char reserved;
464 volatile unsigned char reserved;
417 volatile unsigned char userApplication;
465 volatile unsigned char userApplication;
418 volatile unsigned char packetID[2];
466 volatile unsigned char packetID[2];
419 volatile unsigned char packetSequenceControl[2];
467 volatile unsigned char packetSequenceControl[2];
420 volatile unsigned char packetLength[2];
468 volatile unsigned char packetLength[2];
421 // DATA FIELD HEADER
469 // DATA FIELD HEADER
422 volatile unsigned char spare1_pusVersion_spare2;
470 volatile unsigned char spare1_pusVersion_spare2;
423 volatile unsigned char serviceType;
471 volatile unsigned char serviceType;
424 volatile unsigned char serviceSubType;
472 volatile unsigned char serviceSubType;
425 volatile unsigned char destinationID;
473 volatile unsigned char destinationID;
426 volatile unsigned char time[6];
474 volatile unsigned char time[6];
427 volatile unsigned char sid;
475 volatile unsigned char sid;
428
476
429 //******************
477 //******************
430 // COMMON PARAMETERS
478 // COMMON PARAMETERS
431 volatile unsigned char unused0;
479 volatile unsigned char unused0;
432 volatile unsigned char bw_sp0_sp1_r0_r1;
480 volatile unsigned char bw_sp0_sp1_r0_r1;
433
481
434 //******************
482 //******************
435 // NORMAL PARAMETERS
483 // NORMAL PARAMETERS
436 volatile unsigned char sy_lfr_n_swf_l[2];
484 volatile unsigned char sy_lfr_n_swf_l[2];
437 volatile unsigned char sy_lfr_n_swf_p[2];
485 volatile unsigned char sy_lfr_n_swf_p[2];
438 volatile unsigned char sy_lfr_n_asm_p[2];
486 volatile unsigned char sy_lfr_n_asm_p[2];
439 volatile unsigned char sy_lfr_n_bp_p0;
487 volatile unsigned char sy_lfr_n_bp_p0;
440 volatile unsigned char sy_lfr_n_bp_p1;
488 volatile unsigned char sy_lfr_n_bp_p1;
441
489
442 //*****************
490 //*****************
443 // BURST PARAMETERS
491 // BURST PARAMETERS
444 volatile unsigned char sy_lfr_b_bp_p0;
492 volatile unsigned char sy_lfr_b_bp_p0;
445 volatile unsigned char sy_lfr_b_bp_p1;
493 volatile unsigned char sy_lfr_b_bp_p1;
446
494
447 //****************
495 //****************
448 // SBM1 PARAMETERS
496 // SBM1 PARAMETERS
449 volatile unsigned char sy_lfr_s1_bp_p0;
497 volatile unsigned char sy_lfr_s1_bp_p0;
450 volatile unsigned char sy_lfr_s1_bp_p1;
498 volatile unsigned char sy_lfr_s1_bp_p1;
451
499
452 //****************
500 //****************
453 // SBM2 PARAMETERS
501 // SBM2 PARAMETERS
454 volatile unsigned char sy_lfr_s2_bp_p0;
502 volatile unsigned char sy_lfr_s2_bp_p0;
455 volatile unsigned char sy_lfr_s2_bp_p1;
503 volatile unsigned char sy_lfr_s2_bp_p1;
456 };
504 };
457 typedef struct Packet_TM_LFR_PARAMETER_DUMP_str Packet_TM_LFR_PARAMETER_DUMP_t;
505 typedef struct Packet_TM_LFR_PARAMETER_DUMP_str Packet_TM_LFR_PARAMETER_DUMP_t;
458
506
459
507
460 #endif // CCSDS_H_INCLUDED
508 #endif // CCSDS_H_INCLUDED
@@ -1,64 +1,55
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
20 #include "fsw_spacewire.h"
19
21
20 extern int sched_yield( void );
22 extern int sched_yield( void );
21 extern int errno;
23 extern int errno;
22 extern rtems_id Task_id[ ]; /* array of task ids */
24 extern rtems_id Task_id[ ]; /* array of task ids */
23 extern rtems_name Task_name[ ]; /* array of task names */
25 extern rtems_name Task_name[ ]; /* array of task names */
24 extern rtems_name misc_name[ ]; /* arry of miscellaneous names for rtems objects */
26 extern rtems_name misc_name[ ]; /* arry of miscellaneous names for rtems objects */
25 extern int fdSPW; // grspw file descriptor
27 extern int fdSPW; // grspw file descriptor
26 extern int fdUART; // uart file descriptor
28 extern int fdUART; // uart file descriptor
27
29 extern unsigned char lfrCurrentMode;
28 void timecode_irq_handler(void *pDev, void *regs, int minor, unsigned int tc);
29
30
30 // MODE PARAMETERS
31 // MODE PARAMETERS
31 extern struct param_local_str param_local;
32 extern struct param_local_str param_local;
32 extern Packet_TM_LFR_PARAMETER_DUMP_t parameter_dump_packet;
33 extern Packet_TM_LFR_PARAMETER_DUMP_t parameter_dump_packet;
33 extern Packet_TM_LFR_HK_t housekeeping_packet;
34 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];
35
35
36 // RTEMS TASKS
36 // RTEMS TASKS
37 rtems_task Init( rtems_task_argument argument); /* forward declaration needed */
37 rtems_task Init( rtems_task_argument argument); /* forward declaration needed */
38 rtems_task recv_task(rtems_task_argument argument);
38 rtems_task recv_task(rtems_task_argument argument);
39 rtems_task spiq_task(rtems_task_argument argument);
40 rtems_task stat_task(rtems_task_argument argument);
39 rtems_task stat_task(rtems_task_argument argument);
41 rtems_task wfrm_task(rtems_task_argument argument);
40 rtems_task wfrm_task(rtems_task_argument argument);
42 int create_names( void );
41 int create_names( void );
43 int create_all_tasks( void );
42 int create_all_tasks( void );
44 int start_all_tasks( void );
43 int start_all_tasks( void );
45 int create_message_queue( void );
44 int create_message_queue( void );
45 int create_message_queues( void );
46
46
47 // OTHER functions
47 // OTHER functions
48 void init_parameter_dump( void );
48 void init_parameter_dump( void );
49 void init_local_mode_parameters( void );
49 void init_local_mode_parameters( void );
50 void init_housekeeping_parameters( void );
50 void init_housekeeping_parameters( void );
51
51
52 int spacewire_configure_link( void );
53 int spacewire_wait_for_link(void);
54 void spacewire_set_NP(unsigned char val, unsigned int regAddr); // No Port force
55 void spacewire_set_RE(unsigned char val, unsigned int regAddr); // RMAP Enable
56 void spacewire_compute_stats_offsets();
57
58 extern int rtems_cpu_usage_report( void );
52 extern int rtems_cpu_usage_report( void );
59 extern int rtems_cpu_usage_reset( void );
53 extern int rtems_cpu_usage_reset( void );
60
54
61 rtems_status_code write_spw(spw_ioctl_pkt_send* spw_ioctl_send);
62 void (*grspw_timecode_callback) (void *pDev, void *regs, int minor, unsigned int tc);
63
64 #endif // FSW_RTEMS_CONFIG_H_INCLUDED
55 #endif // FSW_RTEMS_CONFIG_H_INCLUDED
@@ -1,33 +1,34
1 #ifndef FSW_MISC_H_INCLUDED
1 #ifndef FSW_MISC_H_INCLUDED
2 #define FSW_MISC_H_INCLUDED
2 #define FSW_MISC_H_INCLUDED
3
3
4 #include <rtems.h>
4 #include <rtems.h>
5 #include <stdio.h>
5 #include <stdio.h>
6
6
7 #include <fsw_init.h>
8 #include <fsw_params.h>
9 #include <grlib_regs.h>
10 #include <grspw.h>
7 #include <grspw.h>
11 #include <ccsds_types.h>
8
9 #include "fsw_init.h"
10 #include "fsw_params.h"
11 #include "grlib_regs.h"
12 #include "ccsds_types.h"
12
13
13 rtems_name HK_name; // name of the HK rate monotonic
14 rtems_name HK_name; // name of the HK rate monotonic
14 rtems_id HK_id; // id of the HK rate monotonic period
15 rtems_id HK_id; // id of the HK rate monotonic period
15 extern spw_stats spacewire_stats;
16 extern Packet_TM_LFR_HK_t housekeeping_packet;
16 extern spw_stats spacewire_stats_backup;
17
17
18 int configure_timer(gptimer_regs_t *gptimer_regs, unsigned char timer, unsigned int clock_divider,
18 int configure_timer(gptimer_regs_t *gptimer_regs, unsigned char timer, unsigned int clock_divider,
19 unsigned char interrupt_level, rtems_isr (*timer_isr)() );
19 unsigned char interrupt_level, rtems_isr (*timer_isr)() );
20 int timer_start( gptimer_regs_t *gptimer_regs, unsigned char timer );
20 int timer_start( gptimer_regs_t *gptimer_regs, unsigned char timer );
21 int timer_stop( gptimer_regs_t *gptimer_regs, unsigned char timer );
21 int timer_stop( gptimer_regs_t *gptimer_regs, unsigned char timer );
22 int timer_set_clock_divider(gptimer_regs_t *gptimer_regs, unsigned char timer, unsigned int clock_divider);
22 int timer_set_clock_divider(gptimer_regs_t *gptimer_regs, unsigned char timer, unsigned int clock_divider);
23 void update_spacewire_statistics();
23 void update_spacewire_statistics();
24
24
25 // SERIAL LINK
25 // SERIAL LINK
26 int send_console_outputs_on_apbuart_port( void );
26 int send_console_outputs_on_apbuart_port( void );
27 int set_apbuart_scaler_reload_register(unsigned int regs, unsigned int value);
27 int set_apbuart_scaler_reload_register(unsigned int regs, unsigned int value);
28
28
29 // RTEMS TASKS
29 // RTEMS TASKS
30 rtems_task stat_task(rtems_task_argument argument);
30 rtems_task stat_task(rtems_task_argument argument);
31 rtems_task hous_task(rtems_task_argument argument);
31 rtems_task hous_task(rtems_task_argument argument);
32 rtems_task send_task(rtems_task_argument argument);
32
33
33 #endif // FSW_MISC_H_INCLUDED
34 #endif // FSW_MISC_H_INCLUDED
@@ -1,164 +1,194
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 #include <fsw_params_processing.h>
4 #include <fsw_params_processing.h>
5
5
6 #define GRSPW_DEVICE_NAME "/dev/grspw0"
6 #define GRSPW_DEVICE_NAME "/dev/grspw0"
7 #define UART_DEVICE_NAME "/dev/console"
7 #define UART_DEVICE_NAME "/dev/console"
8
8
9 //************************
9 //************************
10 // flight software version
10 // flight software version
11 // this parameters is handled by the Qt project options
11 // this parameters is handled by the Qt project options
12
12
13 //**********
13 //**********
14 // LFR MODES
14 // LFR MODES
15 #define LFR_MODE_STANDBY 0
15 #define LFR_MODE_STANDBY 0
16 #define LFR_MODE_NORMAL 1
16 #define LFR_MODE_NORMAL 1
17 #define LFR_MODE_BURST 2
17 #define LFR_MODE_BURST 2
18 #define LFR_MODE_SBM1 3
18 #define LFR_MODE_SBM1 3
19 #define LFR_MODE_SBM2 4
19 #define LFR_MODE_SBM2 4
20 #define LFR_MODE_NORMAL_CWF_F3 5
20 #define LFR_MODE_NORMAL_CWF_F3 5
21
21
22 #define RTEMS_EVENT_MODE_STANDBY RTEMS_EVENT_0
22 #define RTEMS_EVENT_MODE_STANDBY RTEMS_EVENT_0
23 #define RTEMS_EVENT_MODE_NORMAL RTEMS_EVENT_1
23 #define RTEMS_EVENT_MODE_NORMAL RTEMS_EVENT_1
24 #define RTEMS_EVENT_MODE_BURST RTEMS_EVENT_2
24 #define RTEMS_EVENT_MODE_BURST RTEMS_EVENT_2
25 #define RTEMS_EVENT_MODE_SBM1 RTEMS_EVENT_3
25 #define RTEMS_EVENT_MODE_SBM1 RTEMS_EVENT_3
26 #define RTEMS_EVENT_MODE_SBM2 RTEMS_EVENT_4
26 #define RTEMS_EVENT_MODE_SBM2 RTEMS_EVENT_4
27 #define RTEMS_EVENT_MODE_NORMAL_CWF_F3 RTEMS_EVENT_5
28
27
29 //****************************
28 //****************************
30 // LFR DEFAULT MODE PARAMETERS
29 // LFR DEFAULT MODE PARAMETERS
31 // COMMON
30 // COMMON
32 #define DEFAULT_SY_LFR_COMMON0 0x00
31 #define DEFAULT_SY_LFR_COMMON0 0x00
33 #define DEFAULT_SY_LFR_COMMON1 0x10 // default value 0 0 0 1 0 0 0 0
32 #define DEFAULT_SY_LFR_COMMON1 0x10 // default value 0 0 0 1 0 0 0 0
34 // NORM
33 // NORM
35 #define DEFAULT_SY_LFR_N_SWF_L 2048 // nb sample
34 #define DEFAULT_SY_LFR_N_SWF_L 2048 // nb sample
36 #define DEFAULT_SY_LFR_N_SWF_P 16 // sec
35 #define DEFAULT_SY_LFR_N_SWF_P 16 // sec
37 #define DEFAULT_SY_LFR_N_ASM_P 16 // sec
36 #define DEFAULT_SY_LFR_N_ASM_P 16 // sec
38 #define DEFAULT_SY_LFR_N_BP_P0 4 // sec
37 #define DEFAULT_SY_LFR_N_BP_P0 4 // sec
39 #define DEFAULT_SY_LFR_N_BP_P1 20 // sec
38 #define DEFAULT_SY_LFR_N_BP_P1 20 // sec
40 #define MIN_DELTA_SNAPSHOT 16 // sec
39 #define MIN_DELTA_SNAPSHOT 16 // sec
41 // BURST
40 // BURST
42 #define DEFAULT_SY_LFR_B_BP_P0 1 // sec
41 #define DEFAULT_SY_LFR_B_BP_P0 1 // sec
43 #define DEFAULT_SY_LFR_B_BP_P1 5 // sec
42 #define DEFAULT_SY_LFR_B_BP_P1 5 // sec
44 // SBM1
43 // SBM1
45 #define DEFAULT_SY_LFR_S1_BP_P0 1 // sec
44 #define DEFAULT_SY_LFR_S1_BP_P0 1 // sec
46 #define DEFAULT_SY_LFR_S1_BP_P1 1 // sec
45 #define DEFAULT_SY_LFR_S1_BP_P1 1 // sec
47 // SBM2
46 // SBM2
48 #define DEFAULT_SY_LFR_S2_BP_P0 1 // sec
47 #define DEFAULT_SY_LFR_S2_BP_P0 1 // sec
49 #define DEFAULT_SY_LFR_S2_BP_P1 5 // sec
48 #define DEFAULT_SY_LFR_S2_BP_P1 5 // sec
49 // ADDITIONAL PARAMETERS
50 #define TIME_BETWEEN_TWO_SWF_PACKETS 30 // nb x 10 ms => 300 ms
51 #define TIME_BETWEEN_TWO_CWF3_PACKETS 1000 // nb x 10 ms => 10 s
52 //
53 //****************************
50
54
51 //*****************************
55 //*****************************
52 // APB REGISTERS BASE ADDRESSES
56 // APB REGISTERS BASE ADDRESSES
53 #define REGS_ADDR_APBUART 0x80000100
57 #define REGS_ADDR_APBUART 0x80000100
54 #define REGS_ADDR_GPTIMER 0x80000300
58 #define REGS_ADDR_GPTIMER 0x80000300
55 #define REGS_ADDR_GRSPW 0x80000500
59 #define REGS_ADDR_GRSPW 0x80000500
56 #define REGS_ADDR_TIME_MANAGEMENT 0x80000600
60 #define REGS_ADDR_TIME_MANAGEMENT 0x80000600
57 #define REGS_ADDR_SPECTRAL_MATRIX 0x80000f00
61 #define REGS_ADDR_SPECTRAL_MATRIX 0x80000f00
58
62
59 #ifdef GSA
63 #ifdef GSA
60 #else
64 #else
61 #define REGS_ADDR_WAVEFORM_PICKER 0x80000f20
65 #define REGS_ADDR_WAVEFORM_PICKER 0x80000f20
62 #endif
66 #endif
63
67
64 #define APBUART_CTRL_REG_MASK_DB 0xfffff7ff
68 #define APBUART_CTRL_REG_MASK_DB 0xfffff7ff
65 #define APBUART_SCALER_RELOAD_VALUE 0x00000050 // 25 MHz => about 38400 (0x50)
69 #define APBUART_SCALER_RELOAD_VALUE 0x00000050 // 25 MHz => about 38400 (0x50)
66
70
67 //**********
71 //**********
68 // IRQ LINES
72 // IRQ LINES
69 #define IRQ_SM 9
73 #define IRQ_SM 9
70 #define IRQ_SPARC_SM 0x19 // see sparcv8.pdf p.76 for interrupt levels
74 #define IRQ_SPARC_SM 0x19 // see sparcv8.pdf p.76 for interrupt levels
71 #define IRQ_WF 10
75 #define IRQ_WF 10
72 #define IRQ_SPARC_WF 0x1a // see sparcv8.pdf p.76 for interrupt levels
76 #define IRQ_SPARC_WF 0x1a // see sparcv8.pdf p.76 for interrupt levels
73 #define IRQ_TIME1 12
77 #define IRQ_TIME1 12
74 #define IRQ_SPARC_TIME1 0x1c // see sparcv8.pdf p.76 for interrupt levels
78 #define IRQ_SPARC_TIME1 0x1c // see sparcv8.pdf p.76 for interrupt levels
75 #define IRQ_TIME2 13
79 #define IRQ_TIME2 13
76 #define IRQ_SPARC_TIME2 0x1d // see sparcv8.pdf p.76 for interrupt levels
80 #define IRQ_SPARC_TIME2 0x1d // see sparcv8.pdf p.76 for interrupt levels
77 #define IRQ_WAVEFORM_PICKER 14
81 #define IRQ_WAVEFORM_PICKER 14
78 #define IRQ_SPARC_WAVEFORM_PICKER 0x1e // see sparcv8.pdf p.76 for interrupt levels
82 #define IRQ_SPARC_WAVEFORM_PICKER 0x1e // see sparcv8.pdf p.76 for interrupt levels
79 #define IRQ_SPECTRAL_MATRIX 6
83 #define IRQ_SPECTRAL_MATRIX 6
80 #define IRQ_SPARC_SPECTRAL_MATRIX 0x16 // see sparcv8.pdf p.76 for interrupt levels
84 #define IRQ_SPARC_SPECTRAL_MATRIX 0x16 // see sparcv8.pdf p.76 for interrupt levels
81
85
82 //*****
86 //*****
83 // TIME
87 // TIME
84 #define CLKDIV_SM_SIMULATOR (10000 - 1) // 10 ms
88 #define CLKDIV_SM_SIMULATOR (10000 - 1) // 10 ms
85 #define CLKDIV_WF_SIMULATOR (10000000 - 1) // 10 000 000 * 1 us = 10 s
89 #define CLKDIV_WF_SIMULATOR (10000000 - 1) // 10 000 000 * 1 us = 10 s
86 #define TIMER_SM_SIMULATOR 1
90 #define TIMER_SM_SIMULATOR 1
87 #define TIMER_WF_SIMULATOR 2
91 #define TIMER_WF_SIMULATOR 2
88 #define HK_PERIOD 100 // 100 * 10ms => 1sec
92 #define HK_PERIOD 100 // 100 * 10ms => 1sec
89
93
90 //**********
94 //**********
91 // LPP CODES
95 // LPP CODES
92 #define LFR_SUCCESSFUL 0
96 #define LFR_SUCCESSFUL 0
93 #define LFR_DEFAULT 1
97 #define LFR_DEFAULT 1
94
98
95 //******
99 //******
96 // RTEMS
100 // RTEMS
97 #define TASKID_RECV 1
101 #define TASKID_RECV 1
98 #define TASKID_ACTN 2
102 #define TASKID_ACTN 2
99 #define TASKID_SPIQ 3
103 #define TASKID_SPIQ 3
100 #define TASKID_SMIQ 4
104 #define TASKID_SMIQ 4
101 #define TASKID_STAT 5
105 #define TASKID_STAT 5
102 #define TASKID_AVF0 6
106 #define TASKID_AVF0 6
103 #define TASKID_BPF0 7
107 #define TASKID_BPF0 7
104 #define TASKID_WFRM 8
108 #define TASKID_WFRM 8
105 #define TASKID_DUMB 9
109 #define TASKID_DUMB 9
106 #define TASKID_HOUS 10
110 #define TASKID_HOUS 10
107 #define TASKID_MATR 11
111 #define TASKID_MATR 11
108 #define TASKID_CWF3 12
112 #define TASKID_CWF3 12
113 #define TASKID_CWF2 13
114 #define TASKID_CWF1 14
115 #define TASKID_SEND 15
116
117 //*********************************************************************
118 // ALL TASKS THAT USE THE SPACEWIRE DIRVER SHALL HAVE THE SAME PRIORITY
119 // OR CHANGE THE SEMAPHORE CREATION IN THE DRIVER...
120 #define TASK_PRIORITY_SPIQ 5
121 #define TASK_PRIORITY_SMIQ 10
122 #define TASK_PRIORITY_SEND 11
123 #define TASK_PRIORITY_RECV 12
124 #define TASK_PRIORITY_ACTN 12
125 #define TASK_PRIORITY_CWF1 14
126 #define TASK_PRIORITY_HOUS 15
127 #define TASK_PRIORITY_CWF2 15
128 #define TASK_PRIORITY_WFRM 15
129 #define TASK_PRIORITY_CWF3 15
130 #define TASK_PRIORITY_AVF0 50
131 #define TASK_PRIORITY_BPF0 50
132 #define TASK_PRIORITY_MATR 250
133 #define TASK_PRIORITY_STAT 251
134 #define TASK_PRIORITY_DUMB 251
109
135
110 #define ACTION_MSG_QUEUE_COUNT 10
136 #define ACTION_MSG_QUEUE_COUNT 10
137 #define ACTION_MSG_PKTS_COUNT 50
138 #define ACTION_MSG_PKTS_SIZE
111
139
112 //*******
140 //*******
113 // MACROS
141 // MACROS
114 #ifdef PRINT_MESSAGES_ON_CONSOLE
142 #ifdef PRINT_MESSAGES_ON_CONSOLE
115 #define PRINTF(x) printf(x);
143 #define PRINTF(x) printf(x);
116 #define PRINTF1(x,y) printf(x,y);
144 #define PRINTF1(x,y) printf(x,y);
117 #define PRINTF2(x,y,z) printf(x,y,z);
145 #define PRINTF2(x,y,z) printf(x,y,z);
118 #else
146 #else
119 #define PRINTF(x) ;
147 #define PRINTF(x) ;
120 #define PRINTF1(x,y) ;
148 #define PRINTF1(x,y) ;
121 #define PRINTF2(x,y,z) ;
149 #define PRINTF2(x,y,z) ;
122 #endif
150 #endif
123
151
152 #define CPU_USAGE_REPORT_PERIOD 6 // * 10 s = period
153
124 #define NB_SAMPLES_PER_SNAPSHOT 2048
154 #define NB_SAMPLES_PER_SNAPSHOT 2048
125 #define TIME_OFFSET 2
155 #define TIME_OFFSET 2
126 #define WAVEFORM_EXTENDED_HEADER_OFFSET 22
156 #define WAVEFORM_EXTENDED_HEADER_OFFSET 22
127 #define NB_BYTES_SWF_BLK 2 * 6
157 #define NB_BYTES_SWF_BLK 2 * 6
128 #define NB_WORDS_SWF_BLK 3
158 #define NB_WORDS_SWF_BLK 3
129
159
130 //******************
160 //******************
131 // SEQUENCE COUNTERS
161 // SEQUENCE COUNTERS
132 #define SEQ_CNT_NB_PID 2
162 #define SEQ_CNT_NB_PID 2
133 #define SEQ_CNT_NB_CAT 4
163 #define SEQ_CNT_NB_CAT 4
134 #define SEQ_CNT_NB_DEST_ID 11
164 #define SEQ_CNT_NB_DEST_ID 11
135 // pid
165 // pid
136 #define SEQ_CNT_PID_76 0
166 #define SEQ_CNT_PID_76 0
137 #define SEQ_CNT_PID_79 1
167 #define SEQ_CNT_PID_79 1
138 //cat
168 //cat
139 #define SEQ_CNT_CAT_1 0
169 #define SEQ_CNT_CAT_1 0
140 #define SEQ_CNT_CAT_4 1
170 #define SEQ_CNT_CAT_4 1
141 #define SEQ_CNT_CAT_9 2
171 #define SEQ_CNT_CAT_9 2
142 #define SEQ_CNT_CAT_12 3
172 #define SEQ_CNT_CAT_12 3
143 // destination id
173 // destination id
144 #define SEQ_CNT_DST_ID_GROUND 0
174 #define SEQ_CNT_DST_ID_GROUND 0
145 #define SEQ_CNT_DST_ID_MISSION_TIMELINE 1
175 #define SEQ_CNT_DST_ID_MISSION_TIMELINE 1
146 #define SEQ_CNT_DST_ID_TC_SEQUENCES 2
176 #define SEQ_CNT_DST_ID_TC_SEQUENCES 2
147 #define SEQ_CNT_DST_ID_RECOVERY_ACTION_CMD 3
177 #define SEQ_CNT_DST_ID_RECOVERY_ACTION_CMD 3
148 #define SEQ_CNT_DST_ID_BACKUP_MISSION_TIMELINE 4
178 #define SEQ_CNT_DST_ID_BACKUP_MISSION_TIMELINE 4
149 #define SEQ_CNT_DST_ID_DIRECT_CMD 5
179 #define SEQ_CNT_DST_ID_DIRECT_CMD 5
150 #define SEQ_CNT_DST_ID_SPARE_GRD_SRC1 6
180 #define SEQ_CNT_DST_ID_SPARE_GRD_SRC1 6
151 #define SEQ_CNT_DST_ID_SPARE_GRD_SRC2 7
181 #define SEQ_CNT_DST_ID_SPARE_GRD_SRC2 7
152 #define SEQ_CNT_DST_ID_OBCP 8
182 #define SEQ_CNT_DST_ID_OBCP 8
153 #define SEQ_CNT_DST_ID_SYSTEM_CONTROL 9
183 #define SEQ_CNT_DST_ID_SYSTEM_CONTROL 9
154 #define SEQ_CNT_DST_ID_AOCS 10
184 #define SEQ_CNT_DST_ID_AOCS 10
155
185
156 struct param_local_str{
186 struct param_local_str{
157 unsigned int local_sbm1_nb_cwf_sent;
187 unsigned int local_sbm1_nb_cwf_sent;
158 unsigned int local_sbm1_nb_cwf_max;
188 unsigned int local_sbm1_nb_cwf_max;
159 unsigned int local_sbm2_nb_cwf_sent;
189 unsigned int local_sbm2_nb_cwf_sent;
160 unsigned int local_sbm2_nb_cwf_max;
190 unsigned int local_sbm2_nb_cwf_max;
161 unsigned int local_nb_interrupt_f0_MAX;
191 unsigned int local_nb_interrupt_f0_MAX;
162 };
192 };
163
193
164 #endif // FSW_RTEMS_CONFIG_H_INCLUDED
194 #endif // FSW_RTEMS_CONFIG_H_INCLUDED
@@ -1,90 +1,93
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
12 #include "fsw_init.h"
13 #include "fsw_misc.h"
12
14
13 extern int fdSPW;
15 extern int fdSPW;
16 extern unsigned char lfrCurrentMode;
14 extern rtems_name misc_name[ ];
17 extern rtems_name misc_name[ ];
15 extern rtems_name misc_id[ ];
18 extern rtems_name misc_id[ ];
16 extern rtems_id Task_id[ ]; // array of task ids
19 extern rtems_id Task_id[ ]; // array of task ids
17 // MODE PARAMETERS
20 // MODE PARAMETERS
18 extern struct param_sbm1_str param_sbm1;
21 extern struct param_sbm1_str param_sbm1;
19 extern struct param_sbm2_str param_sbm2;
22 extern struct param_sbm2_str param_sbm2;
20 extern Packet_TM_LFR_PARAMETER_DUMP_t parameter_dump_packet;
23 extern Packet_TM_LFR_PARAMETER_DUMP_t parameter_dump_packet;
21 extern Packet_TM_LFR_HK_t housekeeping_packet;
22 extern time_management_regs_t *time_management_regs;
24 extern time_management_regs_t *time_management_regs;
23 extern waveform_picker_regs_t *waveform_picker_regs;
25 extern waveform_picker_regs_t *waveform_picker_regs;
24 extern gptimer_regs_t *gptimer_regs;
26 extern gptimer_regs_t *gptimer_regs;
25
27
26 //****
28 //****
27 // ISR
29 // ISR
28 rtems_isr commutation_isr1( rtems_vector_number vector );
30 rtems_isr commutation_isr1( rtems_vector_number vector );
29 rtems_isr commutation_isr2( rtems_vector_number vector );
31 rtems_isr commutation_isr2( rtems_vector_number vector );
30
32
31 //**********************
33 //**********************
32 // GENERAL USE FUNCTIONS
34 // GENERAL USE FUNCTIONS
35 unsigned int Crc_opt( unsigned char D, unsigned int Chk);
33 void initLookUpTableForCRC( void );
36 void initLookUpTableForCRC( void );
34 void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData);
37 void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData);
38 void updateLFRCurrentMode();
35
39
36 //*********************
40 //*********************
37 // ACCEPTANCE FUNCTIONS
41 // ACCEPTANCE FUNCTIONS
38 int TC_acceptance(ccsdsTelecommandPacket_t *TC, unsigned int TC_LEN_RCV);
42 int TC_acceptance(ccsdsTelecommandPacket_t *TC, unsigned int TC_LEN_RCV);
39 unsigned char TC_parser(ccsdsTelecommandPacket_t * TMPacket, unsigned int TC_LEN_RCV);
43 unsigned char TC_parser(ccsdsTelecommandPacket_t * TMPacket, unsigned int TC_LEN_RCV);
40
44
41 unsigned char TM_build_header( enum TM_TYPE tm_type, unsigned int packetLength,
45 unsigned char TM_build_header( enum TM_TYPE tm_type, unsigned int packetLength,
42 TMHeader_t *TMHeader, unsigned char tc_sid);
46 TMHeader_t *TMHeader, unsigned char tc_sid);
43 unsigned char TM_build_data(ccsdsTelecommandPacket_t *TC, char* data, unsigned int SID, unsigned char *computed_CRC);
44
47
45 //***********
48 //***********
46 // RTEMS TASK
49 // RTEMS TASK
47 rtems_task recv_task( rtems_task_argument unused );
50 rtems_task recv_task( rtems_task_argument unused );
48 rtems_task actn_task( rtems_task_argument unused );
51 rtems_task actn_task( rtems_task_argument unused );
49 rtems_task dumb_task( rtems_task_argument unused );
52 rtems_task dumb_task( rtems_task_argument unused );
50 int create_message_queue( void );
51
53
52 //***********
54 //***********
53 // TC ACTIONS
55 // TC ACTIONS
54 int action_default(ccsdsTelecommandPacket_t *TC);
56 int action_reset(ccsdsTelecommandPacket_t *TC);
55 int action_enter(ccsdsTelecommandPacket_t *TC);
57 int action_load_common_par(ccsdsTelecommandPacket_t *TC);
56 int action_updt_info(ccsdsTelecommandPacket_t *TC);
58 int action_load_normal_par(ccsdsTelecommandPacket_t *TC);
59 int action_load_burst_par(ccsdsTelecommandPacket_t *TC);
60 int action_load_sbm1_par(ccsdsTelecommandPacket_t *TC);
61 int action_load_sbm2_par(ccsdsTelecommandPacket_t *TC);
62 int action_dump_par(ccsdsTelecommandPacket_t *TC);
63 int action_enter_mode(ccsdsTelecommandPacket_t *TC);
64 int action_update_info(ccsdsTelecommandPacket_t *TC);
57 int action_enable_calibration(ccsdsTelecommandPacket_t *TC);
65 int action_enable_calibration(ccsdsTelecommandPacket_t *TC);
58 int action_disable_calibration(ccsdsTelecommandPacket_t *TC);
66 int action_disable_calibration(ccsdsTelecommandPacket_t *TC);
59 int action_updt_time(ccsdsTelecommandPacket_t *TC);
67 int action_update_time(ccsdsTelecommandPacket_t *TC);
68
60 // mode transition
69 // mode transition
61 int transition_validation(unsigned char requestedMode);
70 int transition_validation(unsigned char requestedMode);
62 int stop_current_mode();
71 int stop_current_mode();
63 int enter_mode(unsigned char mode, ccsdsTelecommandPacket_t *TC);
72 int enter_mode(unsigned char mode, ccsdsTelecommandPacket_t *TC);
64 int enter_standby_mode(ccsdsTelecommandPacket_t *TC);
73 int enter_standby_mode();
65 int enter_normal_mode(ccsdsTelecommandPacket_t *TC);
74 int enter_normal_mode();
66 int enter_burst_mode(ccsdsTelecommandPacket_t *TC);
75 int enter_burst_mode();
67 int enter_sbm1_mode(ccsdsTelecommandPacket_t *TC);
76 int enter_sbm1_mode();
68 int enter_sbm2_mode(ccsdsTelecommandPacket_t *TC);
77 int enter_sbm2_mode();
69 int restart_science_tasks();
78 int restart_science_tasks();
70 int suspend_science_tasks();
79 int suspend_science_tasks();
71 // parameters loading
80
72 int action_load_comm(ccsdsTelecommandPacket_t *TC);
73 int action_load_norm(ccsdsTelecommandPacket_t *TC);
74 int action_load_burst(ccsdsTelecommandPacket_t *TC);
75 int action_load_sbm1(ccsdsTelecommandPacket_t *TC);
76 int action_load_sbm2(ccsdsTelecommandPacket_t *TC);
77 int action_dump(ccsdsTelecommandPacket_t *TC);
78 // other functions
81 // other functions
79 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC);
82 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC);
80 void update_last_TC_rej(ccsdsTelecommandPacket_t *TC);
83 void update_last_TC_rej(ccsdsTelecommandPacket_t *TC);
81 void close_action(ccsdsTelecommandPacket_t *TC, int result);
84 void close_action(ccsdsTelecommandPacket_t *TC, int result);
82 int send_tm_lfr_tc_exe_success(ccsdsTelecommandPacket_t *TC);
85 int send_tm_lfr_tc_exe_success(ccsdsTelecommandPacket_t *TC);
83 int send_tm_lfr_tc_exe_not_executable(ccsdsTelecommandPacket_t *TC);
86 int send_tm_lfr_tc_exe_not_executable(ccsdsTelecommandPacket_t *TC);
84 int send_tm_lfr_tc_exe_not_implemented(ccsdsTelecommandPacket_t *TC);
87 int send_tm_lfr_tc_exe_not_implemented(ccsdsTelecommandPacket_t *TC);
85 int send_tm_lfr_tc_exe_error(ccsdsTelecommandPacket_t *TC);
88 int send_tm_lfr_tc_exe_error(ccsdsTelecommandPacket_t *TC);
86
89
87 #endif // TC_HANDLER_H_INCLUDED
90 #endif // TC_HANDLER_H_INCLUDED
88
91
89
92
90
93
@@ -1,66 +1,72
1 #ifndef WF_HANDLER_H_INCLUDED
1 #ifndef WF_HANDLER_H_INCLUDED
2 #define WF_HANDLER_H_INCLUDED
2 #define WF_HANDLER_H_INCLUDED
3
3
4 #include <rtems.h>
4 #include <rtems.h>
5 #include <fsw_params.h>
6 #include <grspw.h>
5 #include <grspw.h>
7 #include <grlib_regs.h>
6
8 #include <ccsds_types.h>
9 #include <stdio.h>
7 #include <stdio.h>
10 #include <fsw_init.h>
11 #include <math.h>
8 #include <math.h>
12
9
10 #include "fsw_params.h"
11 #include "grlib_regs.h"
12 #include "ccsds_types.h"
13 #include "fsw_init.h"
14
13 #define pi 3.1415
15 #define pi 3.1415
14
16
15 //#include <sys/ioctl.h>
17 //#include <sys/ioctl.h>
16
18
17 extern rtems_id Task_id[]; /* array of task ids */
19 extern rtems_id Task_id[]; /* array of task ids */
18 extern int fdSPW;
20 extern int fdSPW;
19 extern volatile int wf_snap_f0[ ];
21 extern volatile int wf_snap_f0[ ];
22 //
20 extern volatile int wf_snap_f1[ ];
23 extern volatile int wf_snap_f1[ ];
21 extern volatile int wf_snap_f1_bis[ ];
24 extern volatile int wf_snap_f1_bis[ ];
25 extern volatile int wf_snap_f1_norm[ ];
26 //
22 extern volatile int wf_snap_f2[ ];
27 extern volatile int wf_snap_f2[ ];
23 extern volatile int wf_snap_f2_bis[ ];
28 extern volatile int wf_snap_f2_bis[ ];
29 extern volatile int wf_snap_f2_norm[ ];
30 //
24 extern volatile int wf_cont_f3[ ];
31 extern volatile int wf_cont_f3[ ];
25 extern volatile int wf_cont_f3_bis[ ];
32 extern volatile int wf_cont_f3_bis[ ];
26 extern waveform_picker_regs_t *waveform_picker_regs;
33 extern waveform_picker_regs_t *waveform_picker_regs;
34 extern unsigned char lfrCurrentMode;
27
35
28 rtems_isr waveforms_isr( rtems_vector_number vector );
36 rtems_isr waveforms_isr( rtems_vector_number vector );
29 rtems_isr waveforms_simulator_isr( rtems_vector_number vector );
37 rtems_isr waveforms_simulator_isr( rtems_vector_number vector );
30 rtems_task wfrm_task(rtems_task_argument argument);
38 rtems_task wfrm_task(rtems_task_argument argument);
31 rtems_task cwf3_task(rtems_task_argument argument);
39 rtems_task cwf3_task(rtems_task_argument argument);
40 rtems_task cwf2_task(rtems_task_argument argument);
41 rtems_task cwf1_task(rtems_task_argument argument);
32
42
33 //******************
43 //******************
34 // general functions
44 // general functions
35 void init_waveforms( void );
45 void init_waveforms( void );
36 void init_header_snapshot_wf( Header_TM_LFR_SCIENCE_SWF_t *header );
46 //
37 void init_header_continuous_wf( Header_TM_LFR_SCIENCE_CWF_t *header );
47 int init_header_snapshot_wf_table( unsigned int sid );
48 int init_header_continuous_wf_table(unsigned int sid , Header_TM_LFR_SCIENCE_CWF_t *headerCWF);
49 //
38 void reset_waveforms( void );
50 void reset_waveforms( void );
39 void send_waveform_norm( Header_TM_LFR_SCIENCE_SWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send );
40 void send_waveform_burst( Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send );
41 void send_waveform_sbm1( Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send );
42 void send_waveform_sbm2( Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send );
43 void send_waveform_norm_cwf_f3(Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send );
44
51
45 void send_waveform_SWF( Header_TM_LFR_SCIENCE_SWF_t *header, volatile int *waveform,
52 int send_waveform_SWF(volatile int *waveform, unsigned int sid);
46 unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send );
53 int send_waveform_CWF(volatile int *waveform, unsigned int sid, Header_TM_LFR_SCIENCE_CWF_t *headerCWF);
47 void send_waveform_CWF( Header_TM_LFR_SCIENCE_CWF_t *header, volatile int *waveform,
48 unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send );
49
54
50 //**************
55 //**************
51 // wfp registers
56 // wfp registers
52 void set_wfp_data_shaping();
57 void set_wfp_data_shaping();
53 char set_wfp_delta_snapshot();
58 char set_wfp_delta_snapshot();
54 void set_wfp_burst_enable_register( unsigned char mode);
59 void set_wfp_burst_enable_register( unsigned char mode);
55 void reset_wfp_burst_enable();
60 void reset_wfp_burst_enable();
61 void reset_wfp_status();
56 void reset_waveform_picker_regs();
62 void reset_waveform_picker_regs();
57
63
58 //*****************
64 //*****************
59 // local parameters
65 // local parameters
60 void set_local_sbm1_nb_cwf_max();
66 void set_local_sbm1_nb_cwf_max();
61 void set_local_sbm2_nb_cwf_max();
67 void set_local_sbm2_nb_cwf_max();
62 void set_local_nb_interrupt_f0_MAX();
68 void set_local_nb_interrupt_f0_MAX();
63 void reset_local_sbm1_nb_cwf_sent();
69 void reset_local_sbm1_nb_cwf_sent();
64 void reset_local_sbm2_nb_cwf_sent();
70 void reset_local_sbm2_nb_cwf_sent();
65
71
66 #endif // WF_HANDLER_H_INCLUDED
72 #endif // WF_HANDLER_H_INCLUDED
@@ -1,55 +1,55
1 #include <drvmgr/ambapp_bus.h>
1 #include <drvmgr/ambapp_bus.h>
2
2
3 // GRSPW0 resources
3 // GRSPW0 resources
4 struct drvmgr_key grlib_grspw_0n1_res[] = {
4 struct drvmgr_key grlib_grspw_0n1_res[] = {
5 {"txBdCnt", KEY_TYPE_INT, {(unsigned int)10}},
5 {"txBdCnt", KEY_TYPE_INT, {(unsigned int)50}}, // 7 SWF_F0, 7 SWF_F1, 7 SWF_F2, 7 CWF_F3, 7 CWF_F1 ou 7 CWF_F2
6 {"rxBdCnt", KEY_TYPE_INT, {(unsigned int)10}},
6 {"rxBdCnt", KEY_TYPE_INT, {(unsigned int)10}},
7 {"txDataSize", KEY_TYPE_INT, {(unsigned int)4096}},
7 {"txDataSize", KEY_TYPE_INT, {(unsigned int)4096}},
8 {"txHdrSize", KEY_TYPE_INT, {(unsigned int)20+12}}, // 12 is for the auxiliary header, when needed
8 {"txHdrSize", KEY_TYPE_INT, {(unsigned int)20+12}}, // 12 is for the auxiliary header, when needed
9 {"rxPktSize", KEY_TYPE_INT, {(unsigned int)248+4}},
9 {"rxPktSize", KEY_TYPE_INT, {(unsigned int)248+4}},
10 KEY_EMPTY
10 KEY_EMPTY
11 };
11 };
12
12
13 #if 0
13 #if 0
14 /* APBUART0 */
14 /* APBUART0 */
15 struct drvmgr_key grlib_drv_res_apbuart0[] =
15 struct drvmgr_key grlib_drv_res_apbuart0[] =
16 {
16 {
17 {"mode", KEY_TYPE_INT, {(unsigned int)1}},
17 {"mode", KEY_TYPE_INT, {(unsigned int)1}},
18 {"syscon", KEY_TYPE_INT, {(unsigned int)1}},
18 {"syscon", KEY_TYPE_INT, {(unsigned int)1}},
19 KEY_EMPTY
19 KEY_EMPTY
20 };
20 };
21 /* APBUART1 */
21 /* APBUART1 */
22 struct drvmgr_key grlib_drv_res_apbuart1[] =
22 struct drvmgr_key grlib_drv_res_apbuart1[] =
23 {
23 {
24 {"mode", KEY_TYPE_INT, {(unsigned int)1}},
24 {"mode", KEY_TYPE_INT, {(unsigned int)1}},
25 {"syscon", KEY_TYPE_INT, {(unsigned int)0}},
25 {"syscon", KEY_TYPE_INT, {(unsigned int)0}},
26 KEY_EMPTY
26 KEY_EMPTY
27 };
27 };
28 /* LEON3 System with driver configuration for 2 APBUARTs, the
28 /* LEON3 System with driver configuration for 2 APBUARTs, the
29 * the rest of the AMBA device drivers use their defaults.
29 * the rest of the AMBA device drivers use their defaults.
30 */
30 */
31
31
32 /* Override default debug UART assignment.
32 /* Override default debug UART assignment.
33 * 0 = Default APBUART. APBUART[0], but on MP system CPU0=APBUART0,
33 * 0 = Default APBUART. APBUART[0], but on MP system CPU0=APBUART0,
34 * CPU1=APBUART1...
34 * CPU1=APBUART1...
35 * 1 = APBUART[0]
35 * 1 = APBUART[0]
36 * 2 = APBUART[1]
36 * 2 = APBUART[1]
37 * 3 = APBUART[2]
37 * 3 = APBUART[2]
38 * ...
38 * ...
39 */
39 */
40 //int debug_uart_index = 2; /* second UART -- APBUART[1] */
40 //int debug_uart_index = 2; /* second UART -- APBUART[1] */
41 #endif
41 #endif
42
42
43 // If RTEMS_DRVMGR_STARTUP is defined we override the "weak defaults" that is defined by the LEON3 BSP.
43 // If RTEMS_DRVMGR_STARTUP is defined we override the "weak defaults" that is defined by the LEON3 BSP.
44
44
45 struct drvmgr_bus_res grlib_drv_resources = {
45 struct drvmgr_bus_res grlib_drv_resources = {
46 .next = NULL,
46 .next = NULL,
47 .resource = {
47 .resource = {
48 {DRIVER_AMBAPP_GAISLER_GRSPW_ID, 0, &grlib_grspw_0n1_res[0]},
48 {DRIVER_AMBAPP_GAISLER_GRSPW_ID, 0, &grlib_grspw_0n1_res[0]},
49 // {DRIVER_AMBAPP_GAISLER_APBUART_ID, 0, &grlib_drv_res_apbuart0[0]},
49 // {DRIVER_AMBAPP_GAISLER_APBUART_ID, 0, &grlib_drv_res_apbuart0[0]},
50 // {DRIVER_AMBAPP_GAISLER_APBUART_ID, 1, &grlib_drv_res_apbuart1[0]},
50 // {DRIVER_AMBAPP_GAISLER_APBUART_ID, 1, &grlib_drv_res_apbuart1[0]},
51 RES_EMPTY /* Mark end of device resource array */
51 RES_EMPTY /* Mark end of device resource array */
52 }
52 }
53 };
53 };
54
54
55
55
@@ -1,63 +1,69
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 #include <grlib_regs.h>
5 #include <grlib_regs.h>
6 #include <fsw_params.h>
6 #include <fsw_params.h>
7
7
8 // RTEMS GLOBAL VARIABLES
8 // RTEMS GLOBAL VARIABLES
9 rtems_name misc_name[5];
9 rtems_name misc_name[5];
10 rtems_name misc_id[5];
10 rtems_name misc_id[5];
11 rtems_id Task_id[15]; /* array of task ids */
11 rtems_id Task_id[20]; /* array of task ids */
12 rtems_name Task_name[15]; /* array of task names */
12 rtems_name Task_name[20]; /* array of task names */
13 int fdSPW = 0;
13 int fdSPW = 0;
14 int fdUART = 0;
14 int fdUART = 0;
15 unsigned char lfrCurrentMode;
15
16
16 // APB CONFIGURATION REGISTERS
17 // APB CONFIGURATION REGISTERS
17 time_management_regs_t *time_management_regs = (time_management_regs_t*) REGS_ADDR_TIME_MANAGEMENT;
18 time_management_regs_t *time_management_regs = (time_management_regs_t*) REGS_ADDR_TIME_MANAGEMENT;
18 gptimer_regs_t *gptimer_regs = (gptimer_regs_t *) REGS_ADDR_GPTIMER;
19 gptimer_regs_t *gptimer_regs = (gptimer_regs_t *) REGS_ADDR_GPTIMER;
19 #ifdef GSA
20 #ifdef GSA
20 #else
21 #else
21 waveform_picker_regs_t *waveform_picker_regs = (waveform_picker_regs_t*) REGS_ADDR_WAVEFORM_PICKER;
22 waveform_picker_regs_t *waveform_picker_regs = (waveform_picker_regs_t*) REGS_ADDR_WAVEFORM_PICKER;
22 #endif
23 #endif
23 spectral_matrix_regs_t *spectral_matrix_regs = (spectral_matrix_regs_t*) REGS_ADDR_SPECTRAL_MATRIX;
24 spectral_matrix_regs_t *spectral_matrix_regs = (spectral_matrix_regs_t*) REGS_ADDR_SPECTRAL_MATRIX;
24
25
25 // WAVEFORMS GLOBAL VARIABLES // 2048 * 3 * 4 + 2 * 4 = 24576 + 8 bytes
26 // WAVEFORMS GLOBAL VARIABLES // 2048 * 3 * 4 + 2 * 4 = 24576 + 8 bytes
26 volatile int wf_snap_f0[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
27 volatile int wf_snap_f0[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
28 //
27 volatile int wf_snap_f1[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
29 volatile int wf_snap_f1[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
28 volatile int wf_snap_f1_bis[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
30 volatile int wf_snap_f1_bis[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
31 volatile int wf_snap_f1_norm[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
32 //
29 volatile int wf_snap_f2[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
33 volatile int wf_snap_f2[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
30 volatile int wf_snap_f2_bis[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
34 volatile int wf_snap_f2_bis[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
35 volatile int wf_snap_f2_norm[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
36 //
31 volatile int wf_cont_f3[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
37 volatile int wf_cont_f3[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
32 volatile int wf_cont_f3_bis[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
38 volatile int wf_cont_f3_bis[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
33
39
34 // SPECTRAL MATRICES GLOBAL VARIABLES
40 // SPECTRAL MATRICES GLOBAL VARIABLES
35 volatile int spec_mat_f0_0[ SM_HEADER + TOTAL_SIZE_SM ];
41 volatile int spec_mat_f0_0[ SM_HEADER + TOTAL_SIZE_SM ];
36 volatile int spec_mat_f0_1[ SM_HEADER + TOTAL_SIZE_SM ];
42 volatile int spec_mat_f0_1[ SM_HEADER + TOTAL_SIZE_SM ];
37 volatile int spec_mat_f0_c[ SM_HEADER + TOTAL_SIZE_SM ];
43 volatile int spec_mat_f0_c[ SM_HEADER + TOTAL_SIZE_SM ];
38 volatile int spec_mat_f0_d[ SM_HEADER + TOTAL_SIZE_SM ];
44 volatile int spec_mat_f0_d[ SM_HEADER + TOTAL_SIZE_SM ];
39 volatile int spec_mat_f0_e[ SM_HEADER + TOTAL_SIZE_SM ];
45 volatile int spec_mat_f0_e[ SM_HEADER + TOTAL_SIZE_SM ];
40 volatile int spec_mat_f0_f[ SM_HEADER + TOTAL_SIZE_SM ];
46 volatile int spec_mat_f0_f[ SM_HEADER + TOTAL_SIZE_SM ];
41 volatile int spec_mat_f0_g[ SM_HEADER + TOTAL_SIZE_SM ];
47 volatile int spec_mat_f0_g[ SM_HEADER + TOTAL_SIZE_SM ];
42 volatile int spec_mat_f0_h[ SM_HEADER + TOTAL_SIZE_SM ];
48 volatile int spec_mat_f0_h[ SM_HEADER + TOTAL_SIZE_SM ];
43 volatile int spec_mat_f0_0_bis[ SM_HEADER + TOTAL_SIZE_SM ];
49 volatile int spec_mat_f0_0_bis[ SM_HEADER + TOTAL_SIZE_SM ];
44 volatile int spec_mat_f0_1_bis[ SM_HEADER + TOTAL_SIZE_SM ];
50 volatile int spec_mat_f0_1_bis[ SM_HEADER + TOTAL_SIZE_SM ];
45 //
51 //
46 volatile int spec_mat_f1[ SM_HEADER + TOTAL_SIZE_SM ];
52 volatile int spec_mat_f1[ SM_HEADER + TOTAL_SIZE_SM ];
47 volatile int spec_mat_f1_bis[ SM_HEADER + TOTAL_SIZE_SM ];
53 volatile int spec_mat_f1_bis[ SM_HEADER + TOTAL_SIZE_SM ];
48 //
54 //
49 volatile int spec_mat_f2[ SM_HEADER + TOTAL_SIZE_SM ];
55 volatile int spec_mat_f2[ SM_HEADER + TOTAL_SIZE_SM ];
50 volatile int spec_mat_f2_bis[ SM_HEADER + TOTAL_SIZE_SM ];
56 volatile int spec_mat_f2_bis[ SM_HEADER + TOTAL_SIZE_SM ];
51
57
52 // MODE PARAMETERS
58 // MODE PARAMETERS
53 Packet_TM_LFR_PARAMETER_DUMP_t parameter_dump_packet;
59 Packet_TM_LFR_PARAMETER_DUMP_t parameter_dump_packet;
54 struct param_local_str param_local;
60 struct param_local_str param_local;
55
61
56 // HK PACKETS
62 // HK PACKETS
57 Packet_TM_LFR_HK_t housekeeping_packet;
63 Packet_TM_LFR_HK_t housekeeping_packet;
58 // sequence counters are incremented by APID (PID + CAT) and destination ID
64 // sequence counters are incremented by APID (PID + CAT) and destination ID
59 unsigned short sequenceCounters[SEQ_CNT_NB_PID][SEQ_CNT_NB_CAT][SEQ_CNT_NB_DEST_ID];
65 unsigned short sequenceCounters[SEQ_CNT_NB_PID][SEQ_CNT_NB_CAT][SEQ_CNT_NB_DEST_ID];
60 spw_stats spacewire_stats;
66 spw_stats spacewire_stats;
61 spw_stats spacewire_stats_backup;
67 spw_stats spacewire_stats_backup;
62
68
63
69
@@ -1,590 +1,437
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 20
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 5 // instead of 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 2
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",
48 "Error-wait",
49 "Ready",
50 "Started",
51 "Connecting",
52 "Run"
53 };
54
55 rtems_task Init( rtems_task_argument ignored )
47 rtems_task Init( rtems_task_argument ignored )
56 {
48 {
57 rtems_status_code status;
49 rtems_status_code status;
58 rtems_isr_entry old_isr_handler;
50 rtems_isr_entry old_isr_handler;
59
51
60 PRINTF("\n\n\n\n\n")
52 PRINTF("\n\n\n\n\n")
61 PRINTF("***************************\n")
53 PRINTF("***************************\n")
62 PRINTF("** START Flight Software **\n")
54 PRINTF("** START Flight Software **\n")
63 PRINTF("***************************\n")
55 PRINTF("***************************\n")
64 PRINTF("\n\n")
56 PRINTF("\n\n")
65
57
66 //send_console_outputs_on_apbuart_port();
58 //send_console_outputs_on_apbuart_port();
67 set_apbuart_scaler_reload_register(REGS_ADDR_APBUART, APBUART_SCALER_RELOAD_VALUE);
59 set_apbuart_scaler_reload_register(REGS_ADDR_APBUART, APBUART_SCALER_RELOAD_VALUE);
68
60
69 initLookUpTableForCRC(); // in tc_handler.h
61 initLookUpTableForCRC(); // in tc_handler.h
70 init_parameter_dump();
62 init_parameter_dump();
71 init_local_mode_parameters();
63 init_local_mode_parameters();
72 init_housekeeping_parameters();
64 init_housekeeping_parameters();
73 create_message_queue();
65 create_message_queues();
74
66
75 create_names(); // create all names
67 create_names(); // create all names
76 create_all_tasks(); // create all tasks
68 create_all_tasks(); // create all tasks
69
77 start_all_tasks(); // start all tasks
70 start_all_tasks(); // start all tasks
78 stop_current_mode(); // go in STANDBY mode
71 stop_current_mode(); // go in STANDBY mode
79
72
80 grspw_timecode_callback = &timecode_irq_handler;
73 grspw_timecode_callback = &timecode_irq_handler;
81
74
82 spacewire_configure_link();
75 spacewire_configure_link();
83
76
84 #ifdef GSA
77 #ifdef GSA
85 // Spectral Matrices simulator
78 // Spectral Matrices simulator
86 configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR, CLKDIV_SM_SIMULATOR,
79 configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR, CLKDIV_SM_SIMULATOR,
87 IRQ_SPARC_SM, spectral_matrices_isr );
80 IRQ_SPARC_SM, spectral_matrices_isr );
88 //**********
81 // WaveForms
89 // WAVEFORMS
90 configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_WF_SIMULATOR, CLKDIV_WF_SIMULATOR,
82 configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_WF_SIMULATOR, CLKDIV_WF_SIMULATOR,
91 IRQ_SPARC_WF, waveforms_simulator_isr );
83 IRQ_SPARC_WF, waveforms_simulator_isr );
92 LEON_Mask_interrupt( IRQ_SM );
84 LEON_Mask_interrupt( IRQ_SM );
93 LEON_Mask_interrupt( IRQ_WF );
85 LEON_Mask_interrupt( IRQ_WF );
94 #else
86 #else
95 // reset configuration registers
87 // reset configuration registers
96 reset_waveform_picker_regs();
88 reset_waveform_picker_regs();
97 reset_spectral_matrix_regs();
89 reset_spectral_matrix_regs();
98 // configure IRQ handling for the waveform picker unit
90 // configure IRQ handling for the waveform picker unit
99 status = rtems_interrupt_catch( waveforms_isr,
91 status = rtems_interrupt_catch( waveforms_isr,
100 IRQ_SPARC_WAVEFORM_PICKER,
92 IRQ_SPARC_WAVEFORM_PICKER,
101 &old_isr_handler) ;
93 &old_isr_handler) ;
102 // configure IRQ handling for the spectral matrix unit
94 // configure IRQ handling for the spectral matrix unit
103 status = rtems_interrupt_catch( spectral_matrices_isr,
95 status = rtems_interrupt_catch( spectral_matrices_isr,
104 IRQ_SPARC_SPECTRAL_MATRIX,
96 IRQ_SPARC_SPECTRAL_MATRIX,
105 &old_isr_handler) ;
97 &old_isr_handler) ;
106 // mask IRQ lines
98 // mask IRQ lines
107 LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER );
99 LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER );
108 LEON_Mask_interrupt( IRQ_SPECTRAL_MATRIX );
100 LEON_Mask_interrupt( IRQ_SPECTRAL_MATRIX );
109 #endif
101 #endif
110
102
111 //**********
112
113 status = rtems_task_delete(RTEMS_SELF);
103 status = rtems_task_delete(RTEMS_SELF);
114
104
115 }
105 }
116
106
117 void init_parameter_dump(void)
107 void init_parameter_dump(void)
118 {
108 {
119 parameter_dump_packet.targetLogicalAddress = CCSDS_DESTINATION_ID;
109 parameter_dump_packet.targetLogicalAddress = CCSDS_DESTINATION_ID;
120 parameter_dump_packet.protocolIdentifier = CCSDS_PROTOCOLE_ID;
110 parameter_dump_packet.protocolIdentifier = CCSDS_PROTOCOLE_ID;
121 parameter_dump_packet.reserved = CCSDS_RESERVED;
111 parameter_dump_packet.reserved = CCSDS_RESERVED;
122 parameter_dump_packet.userApplication = CCSDS_USER_APP;
112 parameter_dump_packet.userApplication = CCSDS_USER_APP;
123 parameter_dump_packet.packetID[0] = (unsigned char) (TM_PACKET_ID_PARAMETER_DUMP >> 8);
113 parameter_dump_packet.packetID[0] = (unsigned char) (TM_PACKET_ID_PARAMETER_DUMP >> 8);
124 parameter_dump_packet.packetID[1] = (unsigned char) TM_PACKET_ID_PARAMETER_DUMP;
114 parameter_dump_packet.packetID[1] = (unsigned char) TM_PACKET_ID_PARAMETER_DUMP;
125 parameter_dump_packet.packetSequenceControl[0] = (unsigned char) (TM_PACKET_SEQ_CTRL_STANDALONE << 6);
115 parameter_dump_packet.packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_STANDALONE;
126 parameter_dump_packet.packetSequenceControl[1] = 0x00;
116 parameter_dump_packet.packetSequenceControl[1] = TM_PACKET_SEQ_CNT_DEFAULT;
127 parameter_dump_packet.packetLength[0] = (unsigned char) (PACKET_LENGTH_PARAMETER_DUMP >> 8);
117 parameter_dump_packet.packetLength[0] = (unsigned char) (PACKET_LENGTH_PARAMETER_DUMP >> 8);
128 parameter_dump_packet.packetLength[1] = (unsigned char) PACKET_LENGTH_PARAMETER_DUMP;
118 parameter_dump_packet.packetLength[1] = (unsigned char) PACKET_LENGTH_PARAMETER_DUMP;
129 // DATA FIELD HEADER
119 // DATA FIELD HEADER
130 parameter_dump_packet.spare1_pusVersion_spare2 = SPARE1_PUSVERSION_SPARE2;
120 parameter_dump_packet.spare1_pusVersion_spare2 = SPARE1_PUSVERSION_SPARE2;
131 parameter_dump_packet.serviceType = TM_TYPE_PARAMETER_DUMP;
121 parameter_dump_packet.serviceType = TM_TYPE_PARAMETER_DUMP;
132 parameter_dump_packet.serviceSubType = TM_SUBTYPE_PARAMETER_DUMP;
122 parameter_dump_packet.serviceSubType = TM_SUBTYPE_PARAMETER_DUMP;
133 parameter_dump_packet.destinationID = TM_DESTINATION_ID_GROUND;
123 parameter_dump_packet.destinationID = TM_DESTINATION_ID_GROUND;
134 parameter_dump_packet.time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
124 parameter_dump_packet.time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
135 parameter_dump_packet.time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
125 parameter_dump_packet.time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
136 parameter_dump_packet.time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
126 parameter_dump_packet.time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
137 parameter_dump_packet.time[3] = (unsigned char) (time_management_regs->coarse_time);
127 parameter_dump_packet.time[3] = (unsigned char) (time_management_regs->coarse_time);
138 parameter_dump_packet.time[4] = (unsigned char) (time_management_regs->fine_time>>8);
128 parameter_dump_packet.time[4] = (unsigned char) (time_management_regs->fine_time>>8);
139 parameter_dump_packet.time[5] = (unsigned char) (time_management_regs->fine_time);
129 parameter_dump_packet.time[5] = (unsigned char) (time_management_regs->fine_time);
140 parameter_dump_packet.sid = SID_PARAMETER_DUMP;
130 parameter_dump_packet.sid = SID_PARAMETER_DUMP;
141
131
142 //******************
132 //******************
143 // COMMON PARAMETERS
133 // COMMON PARAMETERS
144 parameter_dump_packet.unused0 = DEFAULT_SY_LFR_COMMON0;
134 parameter_dump_packet.unused0 = DEFAULT_SY_LFR_COMMON0;
145 parameter_dump_packet.bw_sp0_sp1_r0_r1 = DEFAULT_SY_LFR_COMMON1;
135 parameter_dump_packet.bw_sp0_sp1_r0_r1 = DEFAULT_SY_LFR_COMMON1;
146
136
147 //******************
137 //******************
148 // NORMAL PARAMETERS
138 // NORMAL PARAMETERS
149 parameter_dump_packet.sy_lfr_n_swf_l[0] = (unsigned char) (DEFAULT_SY_LFR_N_SWF_L >> 8);
139 parameter_dump_packet.sy_lfr_n_swf_l[0] = (unsigned char) (DEFAULT_SY_LFR_N_SWF_L >> 8);
150 parameter_dump_packet.sy_lfr_n_swf_l[1] = (unsigned char) DEFAULT_SY_LFR_N_SWF_L;
140 parameter_dump_packet.sy_lfr_n_swf_l[1] = (unsigned char) (DEFAULT_SY_LFR_N_SWF_L );
151 parameter_dump_packet.sy_lfr_n_swf_p[0] = (unsigned char) (DEFAULT_SY_LFR_N_SWF_P >> 8);
141 parameter_dump_packet.sy_lfr_n_swf_p[0] = (unsigned char) (DEFAULT_SY_LFR_N_SWF_P >> 8);
152 parameter_dump_packet.sy_lfr_n_swf_p[1] = (unsigned char) DEFAULT_SY_LFR_N_SWF_P;
142 parameter_dump_packet.sy_lfr_n_swf_p[1] = (unsigned char) (DEFAULT_SY_LFR_N_SWF_P );
153 parameter_dump_packet.sy_lfr_n_asm_p[0] = (unsigned char) (DEFAULT_SY_LFR_N_ASM_P >> 8);
143 parameter_dump_packet.sy_lfr_n_asm_p[0] = (unsigned char) (DEFAULT_SY_LFR_N_ASM_P >> 8);
154 parameter_dump_packet.sy_lfr_n_asm_p[1] = (unsigned char) DEFAULT_SY_LFR_N_ASM_P;
144 parameter_dump_packet.sy_lfr_n_asm_p[1] = (unsigned char) (DEFAULT_SY_LFR_N_ASM_P );
155 parameter_dump_packet.sy_lfr_n_bp_p0 = (unsigned char) DEFAULT_SY_LFR_N_BP_P0;
145 parameter_dump_packet.sy_lfr_n_bp_p0 = (unsigned char) DEFAULT_SY_LFR_N_BP_P0;
156 parameter_dump_packet.sy_lfr_n_bp_p1 = (unsigned char) DEFAULT_SY_LFR_N_BP_P1;
146 parameter_dump_packet.sy_lfr_n_bp_p1 = (unsigned char) DEFAULT_SY_LFR_N_BP_P1;
157
147
158 //*****************
148 //*****************
159 // BURST PARAMETERS
149 // BURST PARAMETERS
160 parameter_dump_packet.sy_lfr_b_bp_p0 = (unsigned char) DEFAULT_SY_LFR_B_BP_P0;
150 parameter_dump_packet.sy_lfr_b_bp_p0 = (unsigned char) DEFAULT_SY_LFR_B_BP_P0;
161 parameter_dump_packet.sy_lfr_b_bp_p1 = (unsigned char) DEFAULT_SY_LFR_B_BP_P1;
151 parameter_dump_packet.sy_lfr_b_bp_p1 = (unsigned char) DEFAULT_SY_LFR_B_BP_P1;
162
152
163 //****************
153 //****************
164 // SBM1 PARAMETERS
154 // SBM1 PARAMETERS
165 parameter_dump_packet.sy_lfr_s1_bp_p0 = (unsigned char) DEFAULT_SY_LFR_S1_BP_P0; // min value is 0.25 s for the period
155 parameter_dump_packet.sy_lfr_s1_bp_p0 = (unsigned char) DEFAULT_SY_LFR_S1_BP_P0; // min value is 0.25 s for the period
166 parameter_dump_packet.sy_lfr_s1_bp_p1 = (unsigned char) DEFAULT_SY_LFR_S1_BP_P1;
156 parameter_dump_packet.sy_lfr_s1_bp_p1 = (unsigned char) DEFAULT_SY_LFR_S1_BP_P1;
167
157
168 //****************
158 //****************
169 // SBM2 PARAMETERS
159 // SBM2 PARAMETERS
170 parameter_dump_packet.sy_lfr_s2_bp_p0 = (unsigned char) DEFAULT_SY_LFR_S2_BP_P0;
160 parameter_dump_packet.sy_lfr_s2_bp_p0 = (unsigned char) DEFAULT_SY_LFR_S2_BP_P0;
171 parameter_dump_packet.sy_lfr_s2_bp_p1 = (unsigned char) DEFAULT_SY_LFR_S2_BP_P1;
161 parameter_dump_packet.sy_lfr_s2_bp_p1 = (unsigned char) DEFAULT_SY_LFR_S2_BP_P1;
172 }
162 }
173
163
174 void init_local_mode_parameters(void)
164 void init_local_mode_parameters(void)
175 {
165 {
176 // LOCAL PARAMETERS
166 // LOCAL PARAMETERS
177 set_local_sbm1_nb_cwf_max();
167 set_local_sbm1_nb_cwf_max();
178 set_local_sbm2_nb_cwf_max();
168 set_local_sbm2_nb_cwf_max();
179 set_local_nb_interrupt_f0_MAX();
169 set_local_nb_interrupt_f0_MAX();
180
170
181 PRINTF1("local_sbm1_nb_cwf_max %d \n", param_local.local_sbm1_nb_cwf_max)
171 PRINTF1("local_sbm1_nb_cwf_max %d \n", param_local.local_sbm1_nb_cwf_max)
182 PRINTF1("local_sbm2_nb_cwf_max %d \n", param_local.local_sbm2_nb_cwf_max)
172 PRINTF1("local_sbm2_nb_cwf_max %d \n", param_local.local_sbm2_nb_cwf_max)
183 PRINTF1("nb_interrupt_f0_MAX = %d\n", param_local.local_nb_interrupt_f0_MAX)
173 PRINTF1("nb_interrupt_f0_MAX = %d\n", param_local.local_nb_interrupt_f0_MAX)
184
174
185 reset_local_sbm1_nb_cwf_sent();
175 reset_local_sbm1_nb_cwf_sent();
186 reset_local_sbm2_nb_cwf_sent();
176 reset_local_sbm2_nb_cwf_sent();
187 }
177 }
188
178
189 void init_housekeeping_parameters(void)
179 void init_housekeeping_parameters(void)
190 {
180 {
191 unsigned int i = 0;
181 unsigned int i = 0;
192 unsigned int j = 0;
182 unsigned int j = 0;
193 unsigned int k = 0;
183 unsigned int k = 0;
194 char *parameters;
184 char *parameters;
195
185
196 parameters = (char*) &housekeeping_packet.lfr_status_word;
186 parameters = (char*) &housekeeping_packet.lfr_status_word;
197 for(i = 0; i< SIZE_HK_PARAMETERS; i++)
187 for(i = 0; i< SIZE_HK_PARAMETERS; i++)
198 {
188 {
199 parameters[i] = 0x00;
189 parameters[i] = 0x00;
200 }
190 }
201 // init status word
191 // init status word
202 housekeeping_packet.lfr_status_word[0] = 0x00;
192 housekeeping_packet.lfr_status_word[0] = 0x00;
203 housekeeping_packet.lfr_status_word[1] = 0x00;
193 housekeeping_packet.lfr_status_word[1] = 0x00;
204 // init software version
194 // init software version
205 housekeeping_packet.lfr_sw_version[0] = SW_VERSION_N1;
195 housekeeping_packet.lfr_sw_version[0] = SW_VERSION_N1;
206 housekeeping_packet.lfr_sw_version[1] = SW_VERSION_N2;
196 housekeeping_packet.lfr_sw_version[1] = SW_VERSION_N2;
207 housekeeping_packet.lfr_sw_version[2] = SW_VERSION_N3;
197 housekeeping_packet.lfr_sw_version[2] = SW_VERSION_N3;
208 housekeeping_packet.lfr_sw_version[3] = SW_VERSION_N4;
198 housekeeping_packet.lfr_sw_version[3] = SW_VERSION_N4;
209 // init sequence counters
199 // init sequence counters
210 for (i = 0; i<SEQ_CNT_NB_PID; i++)
200 for (i = 0; i<SEQ_CNT_NB_PID; i++)
211 {
201 {
212 for(j = 0; j<SEQ_CNT_NB_CAT; j++)
202 for(j = 0; j<SEQ_CNT_NB_CAT; j++)
213 {
203 {
214 for(k = 0; k<SEQ_CNT_NB_DEST_ID; k++)
204 for(k = 0; k<SEQ_CNT_NB_DEST_ID; k++)
215 {
205 {
216 sequenceCounters[i][j][k] = 0x00;
206 sequenceCounters[i][j][k] = 0x00;
217 }
207 }
218 }
208 }
219 }
209 }
210 updateLFRCurrentMode();
220 }
211 }
221
212
222 int create_names( void )
213 int create_names( void )
223 {
214 {
224 // task names
215 // task names
225 Task_name[TASKID_RECV] = rtems_build_name( 'R', 'E', 'C', 'V' );
216 Task_name[TASKID_RECV] = rtems_build_name( 'R', 'E', 'C', 'V' );
226 Task_name[TASKID_ACTN] = rtems_build_name( 'A', 'C', 'T', 'N' );
217 Task_name[TASKID_ACTN] = rtems_build_name( 'A', 'C', 'T', 'N' );
227 Task_name[TASKID_SPIQ] = rtems_build_name( 'S', 'P', 'I', 'Q' );
218 Task_name[TASKID_SPIQ] = rtems_build_name( 'S', 'P', 'I', 'Q' );
228 Task_name[TASKID_SMIQ] = rtems_build_name( 'S', 'M', 'I', 'Q' );
219 Task_name[TASKID_SMIQ] = rtems_build_name( 'S', 'M', 'I', 'Q' );
229 Task_name[TASKID_STAT] = rtems_build_name( 'S', 'T', 'A', 'T' );
220 Task_name[TASKID_STAT] = rtems_build_name( 'S', 'T', 'A', 'T' );
230 Task_name[TASKID_AVF0] = rtems_build_name( 'A', 'V', 'F', '0' );
221 Task_name[TASKID_AVF0] = rtems_build_name( 'A', 'V', 'F', '0' );
231 Task_name[TASKID_BPF0] = rtems_build_name( 'B', 'P', 'F', '0' );
222 Task_name[TASKID_BPF0] = rtems_build_name( 'B', 'P', 'F', '0' );
232 Task_name[TASKID_WFRM] = rtems_build_name( 'W', 'F', 'R', 'M' );
223 Task_name[TASKID_WFRM] = rtems_build_name( 'W', 'F', 'R', 'M' );
233 Task_name[TASKID_DUMB] = rtems_build_name( 'D', 'U', 'M', 'B' );
224 Task_name[TASKID_DUMB] = rtems_build_name( 'D', 'U', 'M', 'B' );
234 Task_name[TASKID_HOUS] = rtems_build_name( 'H', 'O', 'U', 'S' );
225 Task_name[TASKID_HOUS] = rtems_build_name( 'H', 'O', 'U', 'S' );
235 Task_name[TASKID_MATR] = rtems_build_name( 'M', 'A', 'T', 'R' );
226 Task_name[TASKID_MATR] = rtems_build_name( 'M', 'A', 'T', 'R' );
236 Task_name[TASKID_CWF3] = rtems_build_name( 'C', 'W', 'F', '3' );
227 Task_name[TASKID_CWF3] = rtems_build_name( 'C', 'W', 'F', '3' );
228 Task_name[TASKID_CWF2] = rtems_build_name( 'C', 'W', 'F', '2' );
229 Task_name[TASKID_CWF1] = rtems_build_name( 'C', 'W', 'F', '1' );
230 Task_name[TASKID_SEND] = rtems_build_name( 'S', 'E', 'N', 'D' );
237
231
238 // rate monotonic period name
232 // rate monotonic period name
239 HK_name = rtems_build_name( 'H', 'O', 'U', 'S' );
233 HK_name = rtems_build_name( 'H', 'O', 'U', 'S' );
240
234
241 return 0;
235 return 0;
242 }
236 }
243
237
244 int create_all_tasks( void )
238 int create_all_tasks( void )
245 {
239 {
246 rtems_status_code status;
240 rtems_status_code status;
247
241
248 // RECV
242 // RECV
249 status = rtems_task_create(
243 status = rtems_task_create(
250 Task_name[TASKID_RECV], 200, RTEMS_MINIMUM_STACK_SIZE * 2,
244 Task_name[TASKID_RECV], TASK_PRIORITY_RECV, RTEMS_MINIMUM_STACK_SIZE * 2,
251 RTEMS_DEFAULT_MODES,
245 RTEMS_DEFAULT_MODES,
252 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_RECV]
246 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_RECV]
253 );
247 );
254 // ACTN
248 // ACTN
255 status = rtems_task_create(
249 status = rtems_task_create(
256 Task_name[TASKID_ACTN], 100, RTEMS_MINIMUM_STACK_SIZE * 2,
250 Task_name[TASKID_ACTN], TASK_PRIORITY_ACTN, RTEMS_MINIMUM_STACK_SIZE * 2,
257 RTEMS_DEFAULT_MODES,
251 RTEMS_DEFAULT_MODES,
258 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_ACTN]
252 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_ACTN]
259 );
253 );
260 // SPIQ
254 // SPIQ
261 status = rtems_task_create(
255 status = rtems_task_create(
262 Task_name[TASKID_SPIQ], 5, RTEMS_MINIMUM_STACK_SIZE * 2,
256 Task_name[TASKID_SPIQ], TASK_PRIORITY_SPIQ, RTEMS_MINIMUM_STACK_SIZE * 2,
263 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
257 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
264 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_SPIQ]
258 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_SPIQ]
265 );
259 );
266 // SMIQ
260 // SMIQ
267 status = rtems_task_create(
261 status = rtems_task_create(
268 Task_name[TASKID_SMIQ], 10, RTEMS_MINIMUM_STACK_SIZE * 2,
262 Task_name[TASKID_SMIQ], TASK_PRIORITY_SMIQ, RTEMS_MINIMUM_STACK_SIZE * 2,
269 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
263 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
270 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_SMIQ]
264 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_SMIQ]
271 );
265 );
272 // STAT
266 // STAT
273 status = rtems_task_create(
267 status = rtems_task_create(
274 Task_name[TASKID_STAT], 251, RTEMS_MINIMUM_STACK_SIZE * 2,
268 Task_name[TASKID_STAT], TASK_PRIORITY_STAT, RTEMS_MINIMUM_STACK_SIZE * 2,
275 RTEMS_DEFAULT_MODES,
269 RTEMS_DEFAULT_MODES,
276 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_STAT]
270 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_STAT]
277 );
271 );
278 // AVF0
272 // AVF0
279 status = rtems_task_create(
273 status = rtems_task_create(
280 Task_name[TASKID_AVF0], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
274 Task_name[TASKID_AVF0], TASK_PRIORITY_AVF0, RTEMS_MINIMUM_STACK_SIZE * 2,
281 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
275 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
282 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_AVF0]
276 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_AVF0]
283 );
277 );
284 // BPF0
278 // BPF0
285 status = rtems_task_create(
279 status = rtems_task_create(
286 Task_name[TASKID_BPF0], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
280 Task_name[TASKID_BPF0], TASK_PRIORITY_BPF0, RTEMS_MINIMUM_STACK_SIZE * 2,
287 RTEMS_DEFAULT_MODES,
281 RTEMS_DEFAULT_MODES,
288 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_BPF0]
282 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_BPF0]
289 );
283 );
290 // WFRM
284 // WFRM
291 status = rtems_task_create(
285 status = rtems_task_create(
292 Task_name[TASKID_WFRM], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
286 Task_name[TASKID_WFRM], TASK_PRIORITY_WFRM, RTEMS_MINIMUM_STACK_SIZE * 2,
293 RTEMS_DEFAULT_MODES,
287 RTEMS_DEFAULT_MODES,
294 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_WFRM]
288 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_WFRM]
295 );
289 );
296 // DUMB
290 // DUMB
297 status = rtems_task_create(
291 status = rtems_task_create(
298 Task_name[TASKID_DUMB], 200, RTEMS_MINIMUM_STACK_SIZE * 2,
292 Task_name[TASKID_DUMB], TASK_PRIORITY_DUMB, RTEMS_MINIMUM_STACK_SIZE * 2,
299 RTEMS_DEFAULT_MODES,
293 RTEMS_DEFAULT_MODES,
300 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_DUMB]
294 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_DUMB]
301 );
295 );
302 // HOUS
296 // HOUS
303 status = rtems_task_create(
297 status = rtems_task_create(
304 Task_name[TASKID_HOUS], 199, RTEMS_MINIMUM_STACK_SIZE * 2,
298 Task_name[TASKID_HOUS], TASK_PRIORITY_HOUS, RTEMS_MINIMUM_STACK_SIZE * 2,
305 RTEMS_DEFAULT_MODES,
299 RTEMS_DEFAULT_MODES,
306 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_HOUS]
300 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_HOUS]
307 );
301 );
308 // MATR
302 // MATR
309 status = rtems_task_create(
303 status = rtems_task_create(
310 Task_name[TASKID_MATR], 250, RTEMS_MINIMUM_STACK_SIZE * 2,
304 Task_name[TASKID_MATR], TASK_PRIORITY_MATR, RTEMS_MINIMUM_STACK_SIZE * 2,
311 RTEMS_DEFAULT_MODES,
305 RTEMS_DEFAULT_MODES,
312 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_MATR]
306 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_MATR]
313 );
307 );
314 // CWF3
308 // CWF3
315 status = rtems_task_create(
309 status = rtems_task_create(
316 Task_name[TASKID_CWF3], 250, RTEMS_MINIMUM_STACK_SIZE * 2,
310 Task_name[TASKID_CWF3], TASK_PRIORITY_CWF3, RTEMS_MINIMUM_STACK_SIZE * 2,
317 RTEMS_DEFAULT_MODES,
311 RTEMS_DEFAULT_MODES,
318 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_CWF3]
312 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_CWF3]
319 );
313 );
314 // CWF2
315 status = rtems_task_create(
316 Task_name[TASKID_CWF2], TASK_PRIORITY_CWF2, RTEMS_MINIMUM_STACK_SIZE * 2,
317 RTEMS_DEFAULT_MODES,
318 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_CWF2]
319 );
320 // CWF1
321 status = rtems_task_create(
322 Task_name[TASKID_CWF1], TASK_PRIORITY_CWF1, RTEMS_MINIMUM_STACK_SIZE * 2,
323 RTEMS_DEFAULT_MODES,
324 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_CWF1]
325 );
326 // SEND
327 status = rtems_task_create(
328 Task_name[TASKID_SEND], TASK_PRIORITY_SEND, RTEMS_MINIMUM_STACK_SIZE * 2,
329 RTEMS_DEFAULT_MODES,
330 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_SEND]
331 );
320
332
321 return 0;
333 return 0;
322 }
334 }
323
335
324 int start_all_tasks( void )
336 int start_all_tasks( void )
325 {
337 {
326 rtems_status_code status;
338 rtems_status_code status;
327
339
328 status = rtems_task_start( Task_id[TASKID_SPIQ], spiq_task, 1 );
340 status = rtems_task_start( Task_id[TASKID_SPIQ], spiq_task, 1 );
329 if (status!=RTEMS_SUCCESSFUL) {
341 if (status!=RTEMS_SUCCESSFUL) {
330 PRINTF("in INIT *** Error starting TASK_SPIQ\n")
342 PRINTF("in INIT *** Error starting TASK_SPIQ\n")
331 }
343 }
332
344
333 status = rtems_task_start( Task_id[TASKID_RECV], recv_task, 1 );
345 status = rtems_task_start( Task_id[TASKID_RECV], recv_task, 1 );
334 if (status!=RTEMS_SUCCESSFUL) {
346 if (status!=RTEMS_SUCCESSFUL) {
335 PRINTF("in INIT *** Error starting TASK_RECV\n")
347 PRINTF("in INIT *** Error starting TASK_RECV\n")
336 }
348 }
337
349
338 status = rtems_task_start( Task_id[TASKID_ACTN], actn_task, 1 );
350 status = rtems_task_start( Task_id[TASKID_ACTN], actn_task, 1 );
339 if (status!=RTEMS_SUCCESSFUL) {
351 if (status!=RTEMS_SUCCESSFUL) {
340 PRINTF("in INIT *** Error starting TASK_ACTN\n")
352 PRINTF("in INIT *** Error starting TASK_ACTN\n")
341 }
353 }
342
354
343 status = rtems_task_start( Task_id[TASKID_SMIQ], smiq_task, 1 );
355 status = rtems_task_start( Task_id[TASKID_SMIQ], smiq_task, 1 );
344 if (status!=RTEMS_SUCCESSFUL) {
356 if (status!=RTEMS_SUCCESSFUL) {
345 PRINTF("in INIT *** Error starting TASK_BPPR\n")
357 PRINTF("in INIT *** Error starting TASK_BPPR\n")
346 }
358 }
347
359
348 status = rtems_task_start( Task_id[TASKID_STAT], stat_task, 1 );
360 status = rtems_task_start( Task_id[TASKID_STAT], stat_task, 1 );
349 if (status!=RTEMS_SUCCESSFUL) {
361 if (status!=RTEMS_SUCCESSFUL) {
350 PRINTF("in INIT *** Error starting TASK_STAT\n")
362 PRINTF("in INIT *** Error starting TASK_STAT\n")
351 }
363 }
352
364
353 status = rtems_task_start( Task_id[TASKID_AVF0], avf0_task, 1 );
365 status = rtems_task_start( Task_id[TASKID_AVF0], avf0_task, 1 );
354 if (status!=RTEMS_SUCCESSFUL) {
366 if (status!=RTEMS_SUCCESSFUL) {
355 PRINTF("in INIT *** Error starting TASK_AVF0\n")
367 PRINTF("in INIT *** Error starting TASK_AVF0\n")
356 }
368 }
357
369
358 status = rtems_task_start( Task_id[TASKID_BPF0], bpf0_task, 1 );
370 status = rtems_task_start( Task_id[TASKID_BPF0], bpf0_task, 1 );
359 if (status!=RTEMS_SUCCESSFUL) {
371 if (status!=RTEMS_SUCCESSFUL) {
360 PRINTF("in INIT *** Error starting TASK_BPF0\n")
372 PRINTF("in INIT *** Error starting TASK_BPF0\n")
361 }
373 }
362
374
363 status = rtems_task_start( Task_id[TASKID_WFRM], wfrm_task, 1 );
375 status = rtems_task_start( Task_id[TASKID_WFRM], wfrm_task, 1 );
364 if (status!=RTEMS_SUCCESSFUL) {
376 if (status!=RTEMS_SUCCESSFUL) {
365 PRINTF("in INIT *** Error starting TASK_WFRM\n")
377 PRINTF("in INIT *** Error starting TASK_WFRM\n")
366 }
378 }
367
379
368 status = rtems_task_start( Task_id[TASKID_DUMB], dumb_task, 1 );
380 status = rtems_task_start( Task_id[TASKID_DUMB], dumb_task, 1 );
369 if (status!=RTEMS_SUCCESSFUL) {
381 if (status!=RTEMS_SUCCESSFUL) {
370 PRINTF("in INIT *** Error starting TASK_DUMB\n")
382 PRINTF("in INIT *** Error starting TASK_DUMB\n")
371 }
383 }
372
384
373 status = rtems_task_start( Task_id[TASKID_HOUS], hous_task, 1 );
385 status = rtems_task_start( Task_id[TASKID_HOUS], hous_task, 1 );
374 if (status!=RTEMS_SUCCESSFUL) {
386 if (status!=RTEMS_SUCCESSFUL) {
375 PRINTF("in INIT *** Error starting TASK_HOUS\n")
387 PRINTF("in INIT *** Error starting TASK_HOUS\n")
376 }
388 }
377
389
378 status = rtems_task_start( Task_id[TASKID_MATR], matr_task, 1 );
390 status = rtems_task_start( Task_id[TASKID_MATR], matr_task, 1 );
379 if (status!=RTEMS_SUCCESSFUL) {
391 if (status!=RTEMS_SUCCESSFUL) {
380 PRINTF("in INIT *** Error starting TASK_MATR\n")
392 PRINTF("in INIT *** Error starting TASK_MATR\n")
381 }
393 }
382
394
383 status = rtems_task_start( Task_id[TASKID_CWF3], cwf3_task, 1 );
395 status = rtems_task_start( Task_id[TASKID_CWF3], cwf3_task, 1 );
384 if (status!=RTEMS_SUCCESSFUL) {
396 if (status!=RTEMS_SUCCESSFUL) {
385 PRINTF("in INIT *** Error starting TASK_CWF3\n")
397 PRINTF("in INIT *** Error starting TASK_CWF3\n")
386 }
398 }
387
399
400 status = rtems_task_start( Task_id[TASKID_CWF2], cwf2_task, 1 );
401 if (status!=RTEMS_SUCCESSFUL) {
402 PRINTF("in INIT *** Error starting TASK_CWF2\n")
403 }
404
405 status = rtems_task_start( Task_id[TASKID_CWF1], cwf1_task, 1 );
406 if (status!=RTEMS_SUCCESSFUL) {
407 PRINTF("in INIT *** Error starting TASK_CWF1\n")
408 }
409 status = rtems_task_start( Task_id[TASKID_SEND], send_task, 1 );
410 if (status!=RTEMS_SUCCESSFUL) {
411 PRINTF("in INIT *** Error starting TASK_SEND\n")
412 }
413
388 return 0;
414 return 0;
389 }
415 }
390
416
391 // SPACEWIRE
417 int create_message_queues( void )
392
393 rtems_task spiq_task(rtems_task_argument unused)
394 {
395 rtems_event_set event_out;
396 rtems_status_code status;
397 unsigned char lfrMode;
398
399 while(true){
400 PRINTF("in SPIQ *** Waiting for SPW_LINKERR_EVENT\n")
401 rtems_event_receive(SPW_LINKERR_EVENT, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an SPW_LINKERR_EVENT
402
403 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4; // get the current mode
404
405 status = spacewire_wait_for_link();
406
407 if (status != RTEMS_SUCCESSFUL)
408 {
409 //****************
410 // STOP THE SYSTEM
411 spacewire_compute_stats_offsets();
412 stop_current_mode();
413 if (rtems_task_suspend(Task_id[TASKID_RECV])!=RTEMS_SUCCESSFUL) { // suspend RECV task
414 PRINTF("in SPIQ *** Error suspending RECV Task\n")
415 }
416 if (rtems_task_suspend(Task_id[TASKID_HOUS])!=RTEMS_SUCCESSFUL) { // suspend HOUS task
417 PRINTF("in SPIQ *** Error suspending HOUS Task\n")
418 }
419
420 //***************************
421 // RESTART THE SPACEWIRE LINK
422 spacewire_configure_link();
423
424 //*******************
425 // RESTART THE SYSTEM
426 //ioctl(fdSPW, SPACEWIRE_IOCTRL_CLR_STATISTICS); // clear statistics
427 status = rtems_task_restart( Task_id[TASKID_HOUS], 1 );
428 if (status != RTEMS_SUCCESSFUL) {
429 PRINTF1("in SPIQ *** Error restarting HOUS Task *** code %d\n", status)
430 }
431 if (rtems_task_restart(Task_id[TASKID_RECV], 1) != RTEMS_SUCCESSFUL) { // restart RECV task
432 PRINTF("in SPIQ *** Error restarting RECV Task\n")
433 }
434 //enter_mode(lfrMode, NULL); // enter the mode that was running before the SpaceWire interruption
435 }
436 }
437 }
438
439 int spacewire_configure_link( void )
440 {
418 {
441 rtems_status_code status;
419 rtems_status_code status;
442
420
443 close(fdSPW); // close the device if it is already open
421 misc_name[0] = rtems_build_name( 'Q', 'U', 'E', 'U' );
444 PRINTF("OK *** in configure_spw_link *** try to open "GRSPW_DEVICE_NAME"\n")
422 misc_name[1] = rtems_build_name( 'P', 'K', 'T', 'S' );
445 fdSPW = open(GRSPW_DEVICE_NAME, O_RDWR); // open the device. the open call reset the hardware
446 if ( fdSPW<0 ) {
447 PRINTF("ERR *** in configure_spw_link *** Error opening"GRSPW_DEVICE_NAME"\n")
448 }
449
450 while(ioctl(fdSPW, SPACEWIRE_IOCTRL_START, -1) != RTEMS_SUCCESSFUL){
451 PRINTF(".")
452 fflush( stdout );
453 close( fdSPW ); // close the device
454 fdSPW = open( GRSPW_DEVICE_NAME, O_RDWR ); // open the device. the open call reset the hardware
455 if (fdSPW<0) {
456 PRINTF("ERR *** In configure_spw_link *** Error opening"GRSPW_DEVICE_NAME"\n")
457 }
458 rtems_task_wake_after(100);
459 }
460
461 PRINTF("OK *** In configure_spw_link *** "GRSPW_DEVICE_NAME" opened and started successfully\n")
462
463 spacewire_set_NP(1, REGS_ADDR_GRSPW); // No Port force
464 spacewire_set_RE(1, REGS_ADDR_GRSPW); // the dedicated call seems to break the no port force configuration
465
423
466 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_RXBLOCK, 1); // sets the blocking mode for reception
424 status = rtems_message_queue_create( misc_name[0], ACTION_MSG_QUEUE_COUNT, CCSDS_TC_PKT_MAX_SIZE,
467 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_RXBLOCK\n")
425 RTEMS_FIFO | RTEMS_LOCAL, &misc_id[0] );
468 //
426 if (status!=RTEMS_SUCCESSFUL) {
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
427 PRINTF("in create_message_queues *** error creating QUEU\n")
470 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_EVENT_ID\n") // link-error interrupt occurs
471 //
472 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_DISABLE_ERR, 0); // automatic link-disabling due to link-error interrupts
473 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_DISABLE_ERR\n")
474 //
475 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ, 1); // sets the link-error interrupt bit
476 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n")
477 //
478 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TXBLOCK, 0); // transmission blocks
479 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TXBLOCK\n")
480 //
481 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL, 0); // transmission blocks on full
482 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL\n")
483 //
484 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TCODE_CTRL, 0x0909);
485 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TCODE_CTRL,\n")
486
487 PRINTF("OK *** in configure_spw_link *** "GRSPW_DEVICE_NAME" configured successfully\n")
488
489 return RTEMS_SUCCESSFUL;
490 }
491
492 int spacewire_wait_for_link(void)
493 {
494 unsigned int i;
495 int linkStatus;
496 rtems_status_code status = RTEMS_UNSATISFIED;
497
498 for(i = 0; i< 10; i++){
499 PRINTF(".")
500 fflush( stdout );
501 ioctl(fdSPW, SPACEWIRE_IOCTRL_GET_LINK_STATUS, &linkStatus); // get the link status
502 PRINTF1("in spacewire_wait_for_link *** link status is: %s\n", lstates[linkStatus])
503 if ( linkStatus == 5) {
504 PRINTF("in spacewire_wait_for_link *** link is running\n")
505 status = RTEMS_SUCCESSFUL;
506 break;
507 }
508 rtems_task_wake_after(100);
509 }
428 }
510
429
511 return status;
430 status = rtems_message_queue_create( misc_name[1], ACTION_MSG_PKTS_COUNT, sizeof(spw_ioctl_pkt_send),
512 }
431 RTEMS_FIFO | RTEMS_LOCAL, &misc_id[1] );
513
432 if (status!=RTEMS_SUCCESSFUL) {
514 void spacewire_set_NP(unsigned char val, unsigned int regAddr) // [N]o [P]ort force
433 PRINTF("in create_message_queues *** error creating PKTS\n")
515 {
516 unsigned int *spwptr = (unsigned int*) regAddr;
517
518 if (val == 1) {
519 *spwptr = *spwptr | 0x00100000; // [NP] set the No port force bit
520 }
521 if (val== 0) {
522 *spwptr = *spwptr & 0xffdfffff;
523 }
434 }
524 }
525
526 void spacewire_set_RE(unsigned char val, unsigned int regAddr) // [R]MAP [E]nable
527 {
528 unsigned int *spwptr = (unsigned int*) regAddr;
529
530 if (val == 1)
531 {
532 *spwptr = *spwptr | 0x00010000; // [RE] set the RMAP Enable bit
533 }
534 if (val== 0)
535 {
536 *spwptr = *spwptr & 0xfffdffff;
537 }
538 }
539
540 void spacewire_compute_stats_offsets()
541 {
542 spw_stats spacewire_stats_grspw;
543 rtems_status_code status;
544
545 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_GET_STATISTICS, &spacewire_stats_grspw );
546
435
547 spacewire_stats_backup.packets_received = spacewire_stats_grspw.packets_received
436 return 0;
548 + spacewire_stats.packets_received;
549 spacewire_stats_backup.packets_sent = spacewire_stats_grspw.packets_sent
550 + spacewire_stats.packets_sent;
551 spacewire_stats_backup.parity_err = spacewire_stats_grspw.parity_err
552 + spacewire_stats.parity_err;
553 spacewire_stats_backup.disconnect_err = spacewire_stats_grspw.disconnect_err
554 + spacewire_stats.disconnect_err;
555 spacewire_stats_backup.escape_err = spacewire_stats_grspw.escape_err
556 + spacewire_stats.escape_err;
557 spacewire_stats_backup.credit_err = spacewire_stats_grspw.credit_err
558 + spacewire_stats.credit_err;
559 spacewire_stats_backup.write_sync_err = spacewire_stats_grspw.write_sync_err
560 + spacewire_stats.write_sync_err;
561 spacewire_stats_backup.rx_rmap_header_crc_err = spacewire_stats_grspw.rx_rmap_header_crc_err
562 + spacewire_stats.rx_rmap_header_crc_err;
563 spacewire_stats_backup.rx_rmap_data_crc_err = spacewire_stats_grspw.rx_rmap_data_crc_err
564 + spacewire_stats.rx_rmap_data_crc_err;
565 spacewire_stats_backup.early_ep = spacewire_stats_grspw.early_ep
566 + spacewire_stats.early_ep;
567 spacewire_stats_backup.invalid_address = spacewire_stats_grspw.invalid_address
568 + spacewire_stats.invalid_address;
569 spacewire_stats_backup.rx_eep_err = spacewire_stats_grspw.rx_eep_err
570 + spacewire_stats.rx_eep_err;
571 spacewire_stats_backup.rx_truncated = spacewire_stats_grspw.rx_truncated
572 + spacewire_stats.rx_truncated;
573 }
437 }
574
575 rtems_status_code write_spw(spw_ioctl_pkt_send* spw_ioctl_send)
576 {
577 rtems_status_code status;
578 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, spw_ioctl_send );
579 if (status != RTEMS_SUCCESSFUL){
580 //PRINTF1("ERR *** in write_spw *** write operation failed with code: %d\n", status)
581 }
582 return status;
583 }
584
585 void timecode_irq_handler(void *pDev, void *regs, int minor, unsigned int tc)
586 {
587 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_1 ) != RTEMS_SUCCESSFUL) {
588 printf("In timecode_irq_handler *** Error sending event to DUMB\n");
589 }
590 }
@@ -1,241 +1,254
1 #include <fsw_misc.h>
1 #include <fsw_misc.h>
2 #include <fsw_params.h>
2 #include <fsw_params.h>
3
3
4 extern rtems_id Task_id[]; /* array of task ids */
5 extern int fdSPW;
6 extern TMHeader_t housekeeping_header;
7 extern char housekeeping_data[];
8 extern Packet_TM_LFR_HK_t housekeeping_packet;
9
10 int configure_timer(gptimer_regs_t *gptimer_regs, unsigned char timer, unsigned int clock_divider,
4 int configure_timer(gptimer_regs_t *gptimer_regs, unsigned char timer, unsigned int clock_divider,
11 unsigned char interrupt_level, rtems_isr (*timer_isr)() )
5 unsigned char interrupt_level, rtems_isr (*timer_isr)() )
12 { // configure the timer for the waveforms simulation
6 { // configure the timer for the waveforms simulation
13 rtems_status_code status;
7 rtems_status_code status;
14 rtems_isr_entry old_isr_handler;
8 rtems_isr_entry old_isr_handler;
15
9
16 status = rtems_interrupt_catch( timer_isr, interrupt_level, &old_isr_handler) ; // see sparcv8.pdf p.76 for interrupt levels
10 status = rtems_interrupt_catch( timer_isr, interrupt_level, &old_isr_handler) ; // see sparcv8.pdf p.76 for interrupt levels
17 if (status==RTEMS_SUCCESSFUL)
11 if (status==RTEMS_SUCCESSFUL)
18 {
12 {
19 PRINTF("In configure_timer *** rtems_interrupt_catch successfullly configured\n")
13 PRINTF("In configure_timer *** rtems_interrupt_catch successfullly configured\n")
20 }
14 }
21
15
22 timer_set_clock_divider( gptimer_regs, timer, clock_divider);
16 timer_set_clock_divider( gptimer_regs, timer, clock_divider);
23
17
24 return 1;
18 return 1;
25 }
19 }
26
20
27 int timer_start(gptimer_regs_t *gptimer_regs, unsigned char timer)
21 int timer_start(gptimer_regs_t *gptimer_regs, unsigned char timer)
28 {
22 {
29 gptimer_regs->timer[timer].ctrl = gptimer_regs->timer[timer].ctrl | 0x00000010; // clear pending IRQ if any
23 gptimer_regs->timer[timer].ctrl = gptimer_regs->timer[timer].ctrl | 0x00000010; // clear pending IRQ if any
30 gptimer_regs->timer[timer].ctrl = gptimer_regs->timer[timer].ctrl | 0x00000004; // LD load value from the reload register
24 gptimer_regs->timer[timer].ctrl = gptimer_regs->timer[timer].ctrl | 0x00000004; // LD load value from the reload register
31 gptimer_regs->timer[timer].ctrl = gptimer_regs->timer[timer].ctrl | 0x00000001; // EN enable the timer
25 gptimer_regs->timer[timer].ctrl = gptimer_regs->timer[timer].ctrl | 0x00000001; // EN enable the timer
32 gptimer_regs->timer[timer].ctrl = gptimer_regs->timer[timer].ctrl | 0x00000002; // RS restart
26 gptimer_regs->timer[timer].ctrl = gptimer_regs->timer[timer].ctrl | 0x00000002; // RS restart
33 gptimer_regs->timer[timer].ctrl = gptimer_regs->timer[timer].ctrl | 0x00000008; // IE interrupt enable
27 gptimer_regs->timer[timer].ctrl = gptimer_regs->timer[timer].ctrl | 0x00000008; // IE interrupt enable
34
28
35 return 1;
29 return 1;
36 }
30 }
37
31
38 int timer_stop(gptimer_regs_t *gptimer_regs, unsigned char timer)
32 int timer_stop(gptimer_regs_t *gptimer_regs, unsigned char timer)
39 {
33 {
40 gptimer_regs->timer[timer].ctrl = gptimer_regs->timer[timer].ctrl & 0xfffffffe; // EN enable the timer
34 gptimer_regs->timer[timer].ctrl = gptimer_regs->timer[timer].ctrl & 0xfffffffe; // EN enable the timer
41 gptimer_regs->timer[timer].ctrl = gptimer_regs->timer[timer].ctrl & 0xffffffef; // IE interrupt enable
35 gptimer_regs->timer[timer].ctrl = gptimer_regs->timer[timer].ctrl & 0xffffffef; // IE interrupt enable
42 gptimer_regs->timer[timer].ctrl = gptimer_regs->timer[timer].ctrl | 0x00000010; // clear pending IRQ if any
36 gptimer_regs->timer[timer].ctrl = gptimer_regs->timer[timer].ctrl | 0x00000010; // clear pending IRQ if any
43
37
44 return 1;
38 return 1;
45 }
39 }
46
40
47 int timer_set_clock_divider(gptimer_regs_t *gptimer_regs, unsigned char timer, unsigned int clock_divider)
41 int timer_set_clock_divider(gptimer_regs_t *gptimer_regs, unsigned char timer, unsigned int clock_divider)
48 {
42 {
49 gptimer_regs->timer[timer].reload = clock_divider; // base clock frequency is 1 MHz
43 gptimer_regs->timer[timer].reload = clock_divider; // base clock frequency is 1 MHz
50
44
51 return 1;
45 return 1;
52 }
46 }
53
47
54 void update_spacewire_statistics()
48 void update_spacewire_statistics()
55 {
49 {
56 rtems_status_code status;
50 rtems_status_code status;
57 spw_stats spacewire_stats_grspw;
51 spw_stats spacewire_stats_grspw;
58
52
59 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_GET_STATISTICS, &spacewire_stats_grspw );
53 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_GET_STATISTICS, &spacewire_stats_grspw );
60
54
61 spacewire_stats.packets_received = spacewire_stats_backup.packets_received
55 spacewire_stats.packets_received = spacewire_stats_backup.packets_received
62 + spacewire_stats_grspw.packets_received;
56 + spacewire_stats_grspw.packets_received;
63 spacewire_stats.packets_sent = spacewire_stats_backup.packets_sent
57 spacewire_stats.packets_sent = spacewire_stats_backup.packets_sent
64 + spacewire_stats_grspw.packets_sent;
58 + spacewire_stats_grspw.packets_sent;
65 spacewire_stats.parity_err = spacewire_stats_backup.parity_err
59 spacewire_stats.parity_err = spacewire_stats_backup.parity_err
66 + spacewire_stats_grspw.parity_err;
60 + spacewire_stats_grspw.parity_err;
67 spacewire_stats.disconnect_err = spacewire_stats_backup.disconnect_err
61 spacewire_stats.disconnect_err = spacewire_stats_backup.disconnect_err
68 + spacewire_stats_grspw.disconnect_err;
62 + spacewire_stats_grspw.disconnect_err;
69 spacewire_stats.escape_err = spacewire_stats_backup.escape_err
63 spacewire_stats.escape_err = spacewire_stats_backup.escape_err
70 + spacewire_stats_grspw.escape_err;
64 + spacewire_stats_grspw.escape_err;
71 spacewire_stats.credit_err = spacewire_stats_backup.credit_err
65 spacewire_stats.credit_err = spacewire_stats_backup.credit_err
72 + spacewire_stats_grspw.credit_err;
66 + spacewire_stats_grspw.credit_err;
73 spacewire_stats.write_sync_err = spacewire_stats_backup.write_sync_err
67 spacewire_stats.write_sync_err = spacewire_stats_backup.write_sync_err
74 + spacewire_stats_grspw.write_sync_err;
68 + spacewire_stats_grspw.write_sync_err;
75 spacewire_stats.rx_rmap_header_crc_err = spacewire_stats_backup.rx_rmap_header_crc_err
69 spacewire_stats.rx_rmap_header_crc_err = spacewire_stats_backup.rx_rmap_header_crc_err
76 + spacewire_stats_grspw.rx_rmap_header_crc_err;
70 + spacewire_stats_grspw.rx_rmap_header_crc_err;
77 spacewire_stats.rx_rmap_data_crc_err = spacewire_stats_backup.rx_rmap_data_crc_err
71 spacewire_stats.rx_rmap_data_crc_err = spacewire_stats_backup.rx_rmap_data_crc_err
78 + spacewire_stats_grspw.rx_rmap_data_crc_err;
72 + spacewire_stats_grspw.rx_rmap_data_crc_err;
79 spacewire_stats.early_ep = spacewire_stats_backup.early_ep
73 spacewire_stats.early_ep = spacewire_stats_backup.early_ep
80 + spacewire_stats_grspw.early_ep;
74 + spacewire_stats_grspw.early_ep;
81 spacewire_stats.invalid_address = spacewire_stats_backup.invalid_address
75 spacewire_stats.invalid_address = spacewire_stats_backup.invalid_address
82 + spacewire_stats_grspw.invalid_address;
76 + spacewire_stats_grspw.invalid_address;
83 spacewire_stats.rx_eep_err = spacewire_stats_backup.rx_eep_err
77 spacewire_stats.rx_eep_err = spacewire_stats_backup.rx_eep_err
84 + spacewire_stats_grspw.rx_eep_err;
78 + spacewire_stats_grspw.rx_eep_err;
85 spacewire_stats.rx_truncated = spacewire_stats_backup.rx_truncated
79 spacewire_stats.rx_truncated = spacewire_stats_backup.rx_truncated
86 + spacewire_stats_grspw.rx_truncated;
80 + spacewire_stats_grspw.rx_truncated;
87 //spacewire_stats.tx_link_err;
81 //spacewire_stats.tx_link_err;
88
82
89 //****************************
83 //****************************
90 // DPU_SPACEWIRE_IF_STATISTICS
84 // DPU_SPACEWIRE_IF_STATISTICS
91 housekeeping_packet.hk_lfr_dpu_spw_pkt_rcv_cnt[0] = (unsigned char) (spacewire_stats.packets_received >> 8);
85 housekeeping_packet.hk_lfr_dpu_spw_pkt_rcv_cnt[0] = (unsigned char) (spacewire_stats.packets_received >> 8);
92 housekeeping_packet.hk_lfr_dpu_spw_pkt_rcv_cnt[1] = (unsigned char) (spacewire_stats.packets_received);
86 housekeeping_packet.hk_lfr_dpu_spw_pkt_rcv_cnt[1] = (unsigned char) (spacewire_stats.packets_received);
93 housekeeping_packet.hk_lfr_dpu_spw_pkt_sent_cnt[0] = (unsigned char) (spacewire_stats.packets_sent >> 8);
87 housekeeping_packet.hk_lfr_dpu_spw_pkt_sent_cnt[0] = (unsigned char) (spacewire_stats.packets_sent >> 8);
94 housekeeping_packet.hk_lfr_dpu_spw_pkt_sent_cnt[1] = (unsigned char) (spacewire_stats.packets_sent);
88 housekeeping_packet.hk_lfr_dpu_spw_pkt_sent_cnt[1] = (unsigned char) (spacewire_stats.packets_sent);
95 //housekeeping_packet.hk_lfr_dpu_spw_tick_out_cnt;
89 //housekeeping_packet.hk_lfr_dpu_spw_tick_out_cnt;
96 //housekeeping_packet.hk_lfr_dpu_spw_last_timc;
90 //housekeeping_packet.hk_lfr_dpu_spw_last_timc;
97
91
98 //******************************************
92 //******************************************
99 // ERROR COUNTERS / SPACEWIRE / LOW SEVERITY
93 // ERROR COUNTERS / SPACEWIRE / LOW SEVERITY
100 housekeeping_packet.hk_lfr_dpu_spw_parity = (unsigned char) spacewire_stats.parity_err;
94 housekeeping_packet.hk_lfr_dpu_spw_parity = (unsigned char) spacewire_stats.parity_err;
101 housekeeping_packet.hk_lfr_dpu_spw_disconnect = (unsigned char) spacewire_stats.disconnect_err;
95 housekeeping_packet.hk_lfr_dpu_spw_disconnect = (unsigned char) spacewire_stats.disconnect_err;
102 housekeeping_packet.hk_lfr_dpu_spw_escape = (unsigned char) spacewire_stats.escape_err;
96 housekeeping_packet.hk_lfr_dpu_spw_escape = (unsigned char) spacewire_stats.escape_err;
103 housekeeping_packet.hk_lfr_dpu_spw_credit = (unsigned char) spacewire_stats.credit_err;
97 housekeeping_packet.hk_lfr_dpu_spw_credit = (unsigned char) spacewire_stats.credit_err;
104 housekeeping_packet.hk_lfr_dpu_spw_write_sync = (unsigned char) spacewire_stats.write_sync_err;
98 housekeeping_packet.hk_lfr_dpu_spw_write_sync = (unsigned char) spacewire_stats.write_sync_err;
105 // housekeeping_packet.hk_lfr_dpu_spw_rx_ahb;
99 // housekeeping_packet.hk_lfr_dpu_spw_rx_ahb;
106 // housekeeping_packet.hk_lfr_dpu_spw_tx_ahb;
100 // housekeeping_packet.hk_lfr_dpu_spw_tx_ahb;
107 housekeeping_packet.hk_lfr_dpu_spw_header_crc = (unsigned char) spacewire_stats.rx_rmap_header_crc_err;
101 housekeeping_packet.hk_lfr_dpu_spw_header_crc = (unsigned char) spacewire_stats.rx_rmap_header_crc_err;
108 housekeeping_packet.hk_lfr_dpu_spw_data_crc = (unsigned char) spacewire_stats.rx_rmap_data_crc_err;
102 housekeeping_packet.hk_lfr_dpu_spw_data_crc = (unsigned char) spacewire_stats.rx_rmap_data_crc_err;
109
103
110 //*********************************************
104 //*********************************************
111 // ERROR COUNTERS / SPACEWIRE / MEDIUM SEVERITY
105 // ERROR COUNTERS / SPACEWIRE / MEDIUM SEVERITY
112 housekeeping_packet.hk_lfr_dpu_spw_early_eop = (unsigned char) spacewire_stats.early_ep;
106 housekeeping_packet.hk_lfr_dpu_spw_early_eop = (unsigned char) spacewire_stats.early_ep;
113 housekeeping_packet.hk_lfr_dpu_spw_invalid_addr = (unsigned char) spacewire_stats.invalid_address;
107 housekeeping_packet.hk_lfr_dpu_spw_invalid_addr = (unsigned char) spacewire_stats.invalid_address;
114 housekeeping_packet.hk_lfr_dpu_spw_eep = (unsigned char) spacewire_stats.rx_eep_err;
108 housekeeping_packet.hk_lfr_dpu_spw_eep = (unsigned char) spacewire_stats.rx_eep_err;
115 housekeeping_packet.hk_lfr_dpu_spw_rx_too_big = (unsigned char) spacewire_stats.rx_truncated;
109 housekeeping_packet.hk_lfr_dpu_spw_rx_too_big = (unsigned char) spacewire_stats.rx_truncated;
116
110
117 }
111 }
118
112
119 int send_console_outputs_on_apbuart_port( void ) // Send the console outputs on the apbuart port
113 int send_console_outputs_on_apbuart_port( void ) // Send the console outputs on the apbuart port
120 {
114 {
121 struct apbuart_regs_str *apbuart_regs = (struct apbuart_regs_str *) REGS_ADDR_APBUART;
115 struct apbuart_regs_str *apbuart_regs = (struct apbuart_regs_str *) REGS_ADDR_APBUART;
122
116
123 apbuart_regs->ctrl = apbuart_regs->ctrl & APBUART_CTRL_REG_MASK_DB;
117 apbuart_regs->ctrl = apbuart_regs->ctrl & APBUART_CTRL_REG_MASK_DB;
124 PRINTF("\n\n\n\n\nIn INIT *** Now the console is on port COM1\n")
118 PRINTF("\n\n\n\n\nIn INIT *** Now the console is on port COM1\n")
125
119
126 return 0;
120 return 0;
127 }
121 }
128
122
129 int set_apbuart_scaler_reload_register(unsigned int regs, unsigned int value)
123 int set_apbuart_scaler_reload_register(unsigned int regs, unsigned int value)
130 {
124 {
131 struct apbuart_regs_str *apbuart_regs = (struct apbuart_regs_str *) regs;
125 struct apbuart_regs_str *apbuart_regs = (struct apbuart_regs_str *) regs;
132
126
133 apbuart_regs->scaler = value;
127 apbuart_regs->scaler = value;
134 PRINTF1("OK *** apbuart port scaler reload register set to 0x%x\n", value)
128 PRINTF1("OK *** apbuart port scaler reload register set to 0x%x\n", value)
135
129
136 return 0;
130 return 0;
137 }
131 }
138
132
139 //************
133 //************
140 // RTEMS TASKS
134 // RTEMS TASKS
141
135
142 rtems_task stat_task(rtems_task_argument argument)
136 rtems_task stat_task(rtems_task_argument argument)
143 {
137 {
144 int i;
138 int i;
145 int j;
139 int j;
146 i = 0;
140 i = 0;
147 j = 0;
141 j = 0;
148 PRINTF("in STAT *** \n")
142 PRINTF("in STAT *** \n")
149 while(1){
143 while(1){
150 rtems_task_wake_after(1000);
144 rtems_task_wake_after(1000);
151 PRINTF1("%d\n", j)
145 PRINTF1("%d\n", j)
152 if (i == 2) {
146 if (i == CPU_USAGE_REPORT_PERIOD) {
153 #ifdef PRINT_TASK_STATISTICS
147 // #ifdef PRINT_TASK_STATISTICS
154 rtems_cpu_usage_report();
148 // rtems_cpu_usage_report();
155 rtems_cpu_usage_reset();
149 // rtems_cpu_usage_reset();
156 #endif
150 // #endif
157 i = 0;
151 i = 0;
158 }
152 }
159 else i++;
153 else i++;
160 j++;
154 j++;
161 }
155 }
162 }
156 }
163
157
164 rtems_task hous_task(rtems_task_argument argument)
158 rtems_task hous_task(rtems_task_argument argument)
165 {
159 {
166 int result;
167 rtems_status_code status;
160 rtems_status_code status;
161 spw_ioctl_pkt_send spw_ioctl_send;
162
163 spw_ioctl_send.hlen = 0;
164 spw_ioctl_send.hdr = NULL;
165 spw_ioctl_send.dlen = sizeof(spw_ioctl_send);
166 spw_ioctl_send.data = (char*) &housekeeping_packet;
167 spw_ioctl_send.options = 0;
168
168
169 PRINTF("in HOUS ***\n")
169 PRINTF("in HOUS ***\n")
170
170
171 if (rtems_rate_monotonic_ident( HK_name, &HK_id) != RTEMS_SUCCESSFUL) {
171 if (rtems_rate_monotonic_ident( HK_name, &HK_id) != RTEMS_SUCCESSFUL) {
172 status = rtems_rate_monotonic_create( HK_name, &HK_id );
172 status = rtems_rate_monotonic_create( HK_name, &HK_id );
173 if( status != RTEMS_SUCCESSFUL ) {
173 if( status != RTEMS_SUCCESSFUL ) {
174 PRINTF1( "rtems_rate_monotonic_create failed with status of %d\n", status )
174 PRINTF1( "rtems_rate_monotonic_create failed with status of %d\n", status )
175 }
175 }
176 }
176 }
177
177
178 housekeeping_packet.targetLogicalAddress = CCSDS_DESTINATION_ID;
178 housekeeping_packet.targetLogicalAddress = CCSDS_DESTINATION_ID;
179 housekeeping_packet.protocolIdentifier = CCSDS_PROTOCOLE_ID;
179 housekeeping_packet.protocolIdentifier = CCSDS_PROTOCOLE_ID;
180 housekeeping_packet.reserved = 0x00;
180 housekeeping_packet.reserved = DEFAULT_RESERVED;
181 housekeeping_packet.userApplication = 0x00;
181 housekeeping_packet.userApplication = CCSDS_USER_APP;
182 housekeeping_packet.packetID[0] = (unsigned char) (TM_PACKET_ID_HK >> 8);
182 housekeeping_packet.packetID[0] = (unsigned char) (TM_PACKET_ID_HK >> 8);
183 housekeeping_packet.packetID[1] = (unsigned char) (TM_PACKET_ID_HK);
183 housekeeping_packet.packetID[1] = (unsigned char) (TM_PACKET_ID_HK);
184 housekeeping_packet.packetSequenceControl[0] = 0xc0;
184 housekeeping_packet.packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_STANDALONE;
185 housekeeping_packet.packetSequenceControl[1] = 0x00;
185 housekeeping_packet.packetSequenceControl[1] = TM_PACKET_SEQ_CNT_DEFAULT;
186 housekeeping_packet.packetLength[0] = 0x00;
186 housekeeping_packet.packetLength[0] = (unsigned char) (PACKET_LENGTH_HK >> 8);
187 housekeeping_packet.packetLength[1] = 0x77;
187 housekeeping_packet.packetLength[1] = (unsigned char) (PACKET_LENGTH_HK );
188 housekeeping_packet.dataFieldHeader[0] = 0x10;
188 housekeeping_packet.spare1_pusVersion_spare2 = DEFAULT_SPARE1_PUSVERSION_SPARE2;
189 housekeeping_packet.dataFieldHeader[1] = TM_TYPE_HK;
189 housekeeping_packet.serviceType = TM_TYPE_HK;
190 housekeeping_packet.dataFieldHeader[2] = TM_SUBTYPE_HK;
190 housekeeping_packet.serviceSubType = TM_SUBTYPE_HK;
191 housekeeping_packet.dataFieldHeader[3] = TM_DESTINATION_ID_GROUND;
191 housekeeping_packet.destinationID = TM_DESTINATION_ID_GROUND;
192
192
193 status = rtems_rate_monotonic_cancel(HK_id);
193 status = rtems_rate_monotonic_cancel(HK_id);
194 if( status != RTEMS_SUCCESSFUL ) {
194 if( status != RTEMS_SUCCESSFUL ) {
195 PRINTF1( "ERR *** in HOUS *** rtems_rate_monotonic_cancel(HK_id) ***code: %d\n", status )
195 PRINTF1( "ERR *** in HOUS *** rtems_rate_monotonic_cancel(HK_id) ***code: %d\n", status )
196 }
196 }
197 else {
197 else {
198 PRINTF("OK *** in HOUS *** rtems_rate_monotonic_cancel(HK_id)\n")
198 PRINTF("OK *** in HOUS *** rtems_rate_monotonic_cancel(HK_id)\n")
199 }
199 }
200
200
201 while(1){ // launch the rate monotonic task
201 while(1){ // launch the rate monotonic task
202 status = rtems_rate_monotonic_period( HK_id, HK_PERIOD );
202 status = rtems_rate_monotonic_period( HK_id, HK_PERIOD );
203 if ( status != RTEMS_SUCCESSFUL ) {
203 if ( status != RTEMS_SUCCESSFUL ) {
204 PRINTF1( "ERR *** in HOUS *** rtems_rate_monotonic_period *** code %d\n", status);
204 PRINTF1( "ERR *** in HOUS *** rtems_rate_monotonic_period *** code %d\n", status);
205 }
205 }
206 else {
206 else {
207 housekeeping_packet.dataFieldHeader[4] = (unsigned char) (time_management_regs->coarse_time>>24);
207 housekeeping_packet.time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
208 housekeeping_packet.dataFieldHeader[5] = (unsigned char) (time_management_regs->coarse_time>>16);
208 housekeeping_packet.time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
209 housekeeping_packet.dataFieldHeader[6] = (unsigned char) (time_management_regs->coarse_time>>8);
209 housekeeping_packet.time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
210 housekeeping_packet.dataFieldHeader[7] = (unsigned char) (time_management_regs->coarse_time);
210 housekeeping_packet.time[3] = (unsigned char) (time_management_regs->coarse_time);
211 housekeeping_packet.dataFieldHeader[8] = (unsigned char) (time_management_regs->fine_time>>8);
211 housekeeping_packet.time[4] = (unsigned char) (time_management_regs->fine_time>>8);
212 housekeeping_packet.dataFieldHeader[9] = (unsigned char) (time_management_regs->fine_time);
212 housekeeping_packet.time[5] = (unsigned char) (time_management_regs->fine_time);
213 housekeeping_packet.sid = SID_HK;
213 housekeeping_packet.sid = SID_HK;
214
214
215 update_spacewire_statistics();
215 update_spacewire_statistics();
216
216
217 // SEND PACKET
217 // SEND PACKET
218 result = write ( fdSPW, &housekeeping_packet, LEN_TM_LFR_HK);
218 //result = write( fdSPW, &housekeeping_packet, LEN_TM_LFR_HK);
219 if (status == -1) {
219 status = rtems_message_queue_send( misc_id[1], &spw_ioctl_send, sizeof(spw_ioctl_send));
220 while (true) {
220 if (status != RTEMS_SUCCESSFUL) {
221 if (status != RTEMS_SUCCESSFUL) {
221 PRINTF1("in HOUS *** ERR %d\n", (int) status)
222 result = write ( fdSPW, &housekeeping_packet, LEN_TM_LFR_HK);
223 PRINTF("x")
224 sched_yield();
225 }
226 else {
227 PRINTF("\n")
228 break;
229 }
230 }
231 }
222 }
232 }
223 }
233 }
224 }
234
225
235 PRINTF("in HOUS *** deleting task\n")
226 PRINTF("in HOUS *** deleting task\n")
236
227
237 status = rtems_task_delete( RTEMS_SELF ); // should not return
228 status = rtems_task_delete( RTEMS_SELF ); // should not return
238 printf( "rtems_task_delete returned with status of %d.\n", status );
229 printf( "rtems_task_delete returned with status of %d.\n", status );
239 exit( 1 );
230 exit( 1 );
240 }
231 }
241
232
233 rtems_task send_task( rtems_task_argument argument)
234 {
235 rtems_status_code status; // RTEMS status code
236 spw_ioctl_pkt_send spw_ioctl_send_CWF; // incoming spw_ioctl_pkt_send structure
237 size_t size; // size of the incoming TC packet
238
239 PRINTF("in SEND *** \n")
240
241 while(1)
242 {
243 status = rtems_message_queue_receive(misc_id[1], (char*) &spw_ioctl_send_CWF, &size,
244 RTEMS_WAIT, RTEMS_NO_TIMEOUT);
245 if (status!=RTEMS_SUCCESSFUL) PRINTF1("ERR *** in task ACTN *** error receiving a message, code %d \n", status)
246 else
247 {
248 status = write_spw(&spw_ioctl_send_CWF);
249 if (status != RTEMS_SUCCESSFUL) {
250 PRINTF("in SEND *** TRAFFIC JAM\n")
251 }
252 }
253 }
254 }
@@ -1,1306 +1,1288
1 #include <tc_handler.h>
1 #include <tc_handler.h>
2 #include <fsw_params.h>
2 #include <fsw_params.h>
3
3
4 char *DumbMessages[6] = {"in DUMB *** default", // RTEMS_EVENT_0
4 char *DumbMessages[6] = {"in DUMB *** default", // RTEMS_EVENT_0
5 "in DUMB *** timecode_irq_handler", // RTEMS_EVENT_1
5 "in DUMB *** timecode_irq_handler", // RTEMS_EVENT_1
6 "in DUMB *** waveforms_isr", // RTEMS_EVENT_2
6 "in DUMB *** waveforms_isr", // RTEMS_EVENT_2
7 "in DUMB *** in SMIQ *** Error sending event to AVF0", // RTEMS_EVENT_3
7 "in DUMB *** in SMIQ *** Error sending event to AVF0", // RTEMS_EVENT_3
8 "in DUMB *** spectral_matrices_isr *** Error sending event to SMIQ", // RTEMS_EVENT_4
8 "in DUMB *** spectral_matrices_isr *** Error sending event to SMIQ", // RTEMS_EVENT_4
9 "in DUMB *** waveforms_simulator_isr" // RTEMS_EVENT_5
9 "in DUMB *** waveforms_simulator_isr" // RTEMS_EVENT_5
10 };
10 };
11
11
12 unsigned char currentTC_LEN_RCV[2]; // SHALL be equal to the current TC packet estimated packet length field
12 unsigned char currentTC_LEN_RCV[2]; // SHALL be equal to the current TC packet estimated packet length field
13 unsigned char currentTC_COMPUTED_CRC[2];
13 unsigned char currentTC_COMPUTED_CRC[2];
14 unsigned int currentTC_LEN_RCV_AsUnsignedInt;
14 unsigned int currentTC_LEN_RCV_AsUnsignedInt;
15 unsigned int currentTM_length;
15 unsigned int currentTM_length;
16 unsigned char currentTC_processedFlag;
16 unsigned char currentTC_processedFlag;
17
17
18 unsigned int lookUpTableForCRC[256];
18 unsigned int lookUpTableForCRC[256];
19
19
20 //**********************
20 //**********************
21 // GENERAL USE FUNCTIONS
21 // GENERAL USE FUNCTIONS
22 unsigned int Crc_opt( unsigned char D, unsigned int Chk)
22 unsigned int Crc_opt( unsigned char D, unsigned int Chk)
23 {
23 {
24 return(((Chk << 8) & 0xff00)^lookUpTableForCRC [(((Chk >> 8)^D) & 0x00ff)]);
24 return(((Chk << 8) & 0xff00)^lookUpTableForCRC [(((Chk >> 8)^D) & 0x00ff)]);
25 }
25 }
26
26
27 void initLookUpTableForCRC( void )
27 void initLookUpTableForCRC( void )
28 {
28 {
29 unsigned int i;
29 unsigned int i;
30 unsigned int tmp;
30 unsigned int tmp;
31
31
32 for (i=0; i<256; i++)
32 for (i=0; i<256; i++)
33 {
33 {
34 tmp = 0;
34 tmp = 0;
35 if((i & 1) != 0) {
35 if((i & 1) != 0) {
36 tmp = tmp ^ 0x1021;
36 tmp = tmp ^ 0x1021;
37 }
37 }
38 if((i & 2) != 0) {
38 if((i & 2) != 0) {
39 tmp = tmp ^ 0x2042;
39 tmp = tmp ^ 0x2042;
40 }
40 }
41 if((i & 4) != 0) {
41 if((i & 4) != 0) {
42 tmp = tmp ^ 0x4084;
42 tmp = tmp ^ 0x4084;
43 }
43 }
44 if((i & 8) != 0) {
44 if((i & 8) != 0) {
45 tmp = tmp ^ 0x8108;
45 tmp = tmp ^ 0x8108;
46 }
46 }
47 if((i & 16) != 0) {
47 if((i & 16) != 0) {
48 tmp = tmp ^ 0x1231;
48 tmp = tmp ^ 0x1231;
49 }
49 }
50 if((i & 32) != 0) {
50 if((i & 32) != 0) {
51 tmp = tmp ^ 0x2462;
51 tmp = tmp ^ 0x2462;
52 }
52 }
53 if((i & 64) != 0) {
53 if((i & 64) != 0) {
54 tmp = tmp ^ 0x48c4;
54 tmp = tmp ^ 0x48c4;
55 }
55 }
56 if((i & 128) != 0) {
56 if((i & 128) != 0) {
57 tmp = tmp ^ 0x9188;
57 tmp = tmp ^ 0x9188;
58 }
58 }
59 lookUpTableForCRC[i] = tmp;
59 lookUpTableForCRC[i] = tmp;
60 }
60 }
61 }
61 }
62
62
63 void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData)
63 void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData)
64 {
64 {
65 unsigned int Chk;
65 unsigned int Chk;
66 int j;
66 int j;
67 Chk = 0xffff; // reset the syndrom to all ones
67 Chk = 0xffff; // reset the syndrom to all ones
68 for (j=0; j<sizeOfData; j++) {
68 for (j=0; j<sizeOfData; j++) {
69 Chk = Crc_opt(data[j], Chk);
69 Chk = Crc_opt(data[j], Chk);
70 }
70 }
71 crcAsTwoBytes[0] = (unsigned char) (Chk >> 8);
71 crcAsTwoBytes[0] = (unsigned char) (Chk >> 8);
72 crcAsTwoBytes[1] = (unsigned char) (Chk & 0x00ff);
72 crcAsTwoBytes[1] = (unsigned char) (Chk & 0x00ff);
73 }
73 }
74
74
75 void updateLFRCurrentMode()
76 {
77 lfrCurrentMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
78 }
79
75 //*********************
80 //*********************
76 // ACCEPTANCE FUNCTIONS
81 // ACCEPTANCE FUNCTIONS
77 int TC_acceptance(ccsdsTelecommandPacket_t *TC, unsigned int tc_len_recv)
82 int TC_acceptance(ccsdsTelecommandPacket_t *TC, unsigned int tc_len_recv)
78 {
83 {
79 int ret = 0;
84 int ret = 0;
80 rtems_status_code status;
85 rtems_status_code status;
81 spw_ioctl_pkt_send spw_ioctl_send;
86 Packet_TM_LFR_TC_EXE_CORRUPTED_t packet;
82 TMHeader_t TM_header;
87 unsigned int parserCode = 0;
83 unsigned int code = 0;
84 unsigned char computed_CRC[2];
88 unsigned char computed_CRC[2];
85 char data[ PACKET_LENGTH_TC_EXE_CORRUPTED + CCSDS_TC_TM_PACKET_OFFSET - TM_HEADER_LEN ];
89 unsigned int packetLength;
86
90
87 GetCRCAsTwoBytes( (unsigned char*) TC->packetID, computed_CRC, tc_len_recv + 5 );
91 GetCRCAsTwoBytes( (unsigned char*) TC->packetID, computed_CRC, tc_len_recv + 5 );
88 code = TC_parser( TC, tc_len_recv ) ;
92 parserCode = TC_parser( TC, tc_len_recv ) ;
89 if ( (code == ILLEGAL_APID) | (code == WRONG_LEN_PACKET) | (code == INCOR_CHECKSUM)
93 if ( (parserCode == ILLEGAL_APID) | (parserCode == WRONG_LEN_PACKET) | (parserCode == INCOR_CHECKSUM)
90 | (code == ILL_TYPE) | (code == ILL_SUBTYPE) | (code == WRONG_APP_DATA) )
94 | (parserCode == ILL_TYPE) | (parserCode == ILL_SUBTYPE) | (parserCode == WRONG_APP_DATA) )
91 { // generate TM_LFR_TC_EXE_CORRUPTED
95 { // generate TM_LFR_TC_EXE_CORRUPTED
92 // BUILD HEADER
96 packetLength = (TC->packetLength[0] * 256) + TC->packetLength[1];
93 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_CORRUPTED,
97 packet.targetLogicalAddress = CCSDS_DESTINATION_ID;
94 &TM_header, TC->sourceID); // TC source ID
98 packet.protocolIdentifier = CCSDS_PROTOCOLE_ID;
95 // BUILD DATA
99 packet.reserved = DEFAULT_RESERVED;
96 TM_build_data( TC, data, SID_EXE_CORR, computed_CRC);
100 packet.userApplication = CCSDS_USER_APP;
97 // PREPARE TM SENDING
101 // PACKET HEADER
98 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
102 packet.packetID[0] = (unsigned char) (TM_PACKET_ID_TC_EXE >> 8);
99 spw_ioctl_send.hdr = (char*) &TM_header;
103 packet.packetID[1] = (unsigned char) (TM_PACKET_ID_TC_EXE );
100 spw_ioctl_send.dlen = 16;
104 packet.packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_STANDALONE;
101 spw_ioctl_send.data = data;
105 packet.packetSequenceControl[1] = TM_PACKET_SEQ_CNT_DEFAULT;
106 packet.packetLength[0] = (unsigned char) (PACKET_LENGTH_TC_EXE_CORRUPTED >> 8);
107 packet.packetLength[1] = (unsigned char) (PACKET_LENGTH_TC_EXE_CORRUPTED );
108 // DATA FIELD HEADER
109 packet.spare1_pusVersion_spare2 = DEFAULT_SPARE1_PUSVERSION_SPARE2;
110 packet.serviceType = TM_TYPE_TC_EXE;
111 packet.serviceSubType = TM_SUBTYPE_EXE_NOK;
112 packet.destinationID = TM_DESTINATION_ID_GROUND;
113 packet.time[0] = (time_management_regs->coarse_time>>24 );
114 packet.time[1] = (time_management_regs->coarse_time>>16 );
115 packet.time[2] = (time_management_regs->coarse_time>>8 );
116 packet.time[3] = (time_management_regs->coarse_time );
117 packet.time[4] = (time_management_regs->fine_time>>8 );
118 packet.time[5] = (time_management_regs->fine_time );
119 //
120 packet.tc_failure_code[0] = (unsigned char) (FAILURE_CODE_CORRUPTED >> 8);
121 packet.tc_failure_code[1] = (unsigned char) (FAILURE_CODE_CORRUPTED );
122 packet.telecommand_pkt_id[0] = TC->packetID[0];
123 packet.telecommand_pkt_id[1] = TC->packetID[1];
124 packet.pkt_seq_control[0] = TC->packetSequenceControl[0];
125 packet.pkt_seq_control[0] = TC->packetSequenceControl[1];
126 packet.tc_service = TC->serviceType;
127 packet.tc_subtype = TC->serviceSubType;
128 packet.pkt_len_rcv_value[0] = TC->packetLength[0];
129 packet.pkt_len_rcv_value[1] = TC->packetLength[1];
130 packet.pkt_datafieldsize_cnt[0] = currentTC_LEN_RCV[0];
131 packet.pkt_datafieldsize_cnt[1] = currentTC_LEN_RCV[1];
132 packet.rcv_crc[0] = TC->dataAndCRC[packetLength];
133 packet.rcv_crc[1] = TC->dataAndCRC[packetLength];
134 packet.computed_crc[0] = computed_CRC[0];
135 packet.computed_crc[1] = computed_CRC[1];
102 // SEND PACKET
136 // SEND PACKET
103 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
137 status = write( fdSPW, (char *) &packet, PACKET_LENGTH_TC_EXE_CORRUPTED + CCSDS_TC_TM_PACKET_OFFSET + 4);
104 }
138 }
105 else { // send valid TC to the action launcher
139 else { // send valid TC to the action launcher
106 status = rtems_message_queue_send( misc_id[0], TC, tc_len_recv + CCSDS_TC_TM_PACKET_OFFSET + 3);
140 status = rtems_message_queue_send( misc_id[0], TC, tc_len_recv + CCSDS_TC_TM_PACKET_OFFSET + 3);
107 ret = -1;
141 ret = -1;
108 }
142 }
109 return ret;
143 return ret;
110 }
144 }
111
145
112 unsigned char TC_parser(ccsdsTelecommandPacket_t * TMPacket, unsigned int TC_LEN_RCV)
146 unsigned char TC_parser(ccsdsTelecommandPacket_t * TMPacket, unsigned int TC_LEN_RCV)
113 {
147 {
114 unsigned char ret = 0;
148 unsigned char ret = 0;
115 unsigned char pid = 0;
149 unsigned char pid = 0;
116 unsigned char category = 0;
150 unsigned char category = 0;
117 unsigned int length = 0;
151 unsigned int length = 0;
118 unsigned char packetType = 0;
152 unsigned char packetType = 0;
119 unsigned char packetSubtype = 0;
153 unsigned char packetSubtype = 0;
120 unsigned char * CCSDSContent = NULL;
154 unsigned char * CCSDSContent = NULL;
121
155
122 // APID check *** APID on 2 bytes
156 // APID check *** APID on 2 bytes
123 pid = ((TMPacket->packetID[0] & 0x07)<<4) + ( (TMPacket->packetID[1]>>4) & 0x0f ); // PID = 11 *** 7 bits xxxxx210 7654xxxx
157 pid = ((TMPacket->packetID[0] & 0x07)<<4) + ( (TMPacket->packetID[1]>>4) & 0x0f ); // PID = 11 *** 7 bits xxxxx210 7654xxxx
124 category = (TMPacket->packetID[1] & 0x0f); // PACKET_CATEGORY = 12 *** 4 bits xxxxxxxx xxxx3210
158 category = (TMPacket->packetID[1] & 0x0f); // PACKET_CATEGORY = 12 *** 4 bits xxxxxxxx xxxx3210
125 length = (TMPacket->packetLength[0] * 256) + TMPacket->packetLength[1];
159 length = (TMPacket->packetLength[0] * 256) + TMPacket->packetLength[1];
126 packetType = TMPacket->serviceType;
160 packetType = TMPacket->serviceType;
127 packetSubtype = TMPacket->serviceSubType;
161 packetSubtype = TMPacket->serviceSubType;
128
162
129 if ( pid != CCSDS_PROCESS_ID ) {
163 if ( pid != CCSDS_PROCESS_ID ) {
130 ret = ILLEGAL_APID;
164 ret = ILLEGAL_APID;
131 }
165 }
132 else if ( category != CCSDS_PACKET_CATEGORY ) {
166 else if ( category != CCSDS_PACKET_CATEGORY ) {
133 ret = ILLEGAL_APID;
167 ret = ILLEGAL_APID;
134 }
168 }
135 else if (length != TC_LEN_RCV ) { // packet length check
169 else if (length != TC_LEN_RCV ) { // packet length check
136 ret = WRONG_LEN_PACKET; // LEN RCV != SIZE FIELD
170 ret = WRONG_LEN_PACKET; // LEN RCV != SIZE FIELD
137 }
171 }
138 else if ( length >= CCSDS_TC_PKT_MAX_SIZE ) {
172 else if ( length >= CCSDS_TC_PKT_MAX_SIZE ) {
139 ret = WRONG_LEN_PACKET; // check that the packet does not exceed the MAX size
173 ret = WRONG_LEN_PACKET; // check that the packet does not exceed the MAX size
140 }
174 }
141 else if ( packetType == TC_TYPE_GEN ){ // service type, subtype and packet length check
175 else if ( packetType == TC_TYPE_GEN ){ // service type, subtype and packet length check
142 switch(packetSubtype){ //subtype, autorized values are 3, 20, 21, 24, 27, 28, 30, 40, 50, 60, 61
176 switch(packetSubtype){ //subtype, autorized values are 3, 20, 21, 24, 27, 28, 30, 40, 50, 60, 61
143 case TC_SUBTYPE_RESET:
177 case TC_SUBTYPE_RESET:
144 if (length!=(TC_LEN_RESET-CCSDS_TC_TM_PACKET_OFFSET)) {
178 if (length!=(TC_LEN_RESET-CCSDS_TC_TM_PACKET_OFFSET)) {
145 ret = WRONG_LEN_PACKET;
179 ret = WRONG_LEN_PACKET;
146 }
180 }
147 else {
181 else {
148 ret = CCSDS_TM_VALID;
182 ret = CCSDS_TM_VALID;
149 }
183 }
150 break;
184 break;
151 case TC_SUBTYPE_LOAD_COMM:
185 case TC_SUBTYPE_LOAD_COMM:
152 if (length!=(TC_LEN_LOAD_COMM-CCSDS_TC_TM_PACKET_OFFSET)) {
186 if (length!=(TC_LEN_LOAD_COMM-CCSDS_TC_TM_PACKET_OFFSET)) {
153 ret = WRONG_LEN_PACKET;
187 ret = WRONG_LEN_PACKET;
154 }
188 }
155 else {
189 else {
156 ret = CCSDS_TM_VALID;
190 ret = CCSDS_TM_VALID;
157 }
191 }
158 break;
192 break;
159 case TC_SUBTYPE_LOAD_NORM:
193 case TC_SUBTYPE_LOAD_NORM:
160 if (length!=(TC_LEN_LOAD_NORM-CCSDS_TC_TM_PACKET_OFFSET)) {
194 if (length!=(TC_LEN_LOAD_NORM-CCSDS_TC_TM_PACKET_OFFSET)) {
161 ret = WRONG_LEN_PACKET;
195 ret = WRONG_LEN_PACKET;
162 }
196 }
163 else {
197 else {
164 ret = CCSDS_TM_VALID;
198 ret = CCSDS_TM_VALID;
165 }
199 }
166 break;
200 break;
167 case TC_SUBTYPE_LOAD_BURST:
201 case TC_SUBTYPE_LOAD_BURST:
168 if (length!=(TC_LEN_LOAD_BURST-CCSDS_TC_TM_PACKET_OFFSET)) {
202 if (length!=(TC_LEN_LOAD_BURST-CCSDS_TC_TM_PACKET_OFFSET)) {
169 ret = WRONG_LEN_PACKET;
203 ret = WRONG_LEN_PACKET;
170 }
204 }
171 else {
205 else {
172 ret = CCSDS_TM_VALID;
206 ret = CCSDS_TM_VALID;
173 }
207 }
174 break;
208 break;
175 case TC_SUBTYPE_LOAD_SBM1:
209 case TC_SUBTYPE_LOAD_SBM1:
176 if (length!=(TC_LEN_LOAD_SBM1-CCSDS_TC_TM_PACKET_OFFSET)) {
210 if (length!=(TC_LEN_LOAD_SBM1-CCSDS_TC_TM_PACKET_OFFSET)) {
177 ret = WRONG_LEN_PACKET;
211 ret = WRONG_LEN_PACKET;
178 }
212 }
179 else {
213 else {
180 ret = CCSDS_TM_VALID;
214 ret = CCSDS_TM_VALID;
181 }
215 }
182 break;
216 break;
183 case TC_SUBTYPE_LOAD_SBM2:
217 case TC_SUBTYPE_LOAD_SBM2:
184 if (length!=(TC_LEN_LOAD_SBM2-CCSDS_TC_TM_PACKET_OFFSET)) {
218 if (length!=(TC_LEN_LOAD_SBM2-CCSDS_TC_TM_PACKET_OFFSET)) {
185 ret = WRONG_LEN_PACKET;
219 ret = WRONG_LEN_PACKET;
186 }
220 }
187 else {
221 else {
188 ret = CCSDS_TM_VALID;
222 ret = CCSDS_TM_VALID;
189 }
223 }
190 break;
224 break;
191 case TC_SUBTYPE_DUMP:
225 case TC_SUBTYPE_DUMP:
192 if (length!=(TC_LEN_DUMP-CCSDS_TC_TM_PACKET_OFFSET)) {
226 if (length!=(TC_LEN_DUMP-CCSDS_TC_TM_PACKET_OFFSET)) {
193 ret = WRONG_LEN_PACKET;
227 ret = WRONG_LEN_PACKET;
194 }
228 }
195 else {
229 else {
196 ret = CCSDS_TM_VALID;
230 ret = CCSDS_TM_VALID;
197 }
231 }
198 break;
232 break;
199 case TC_SUBTYPE_ENTER:
233 case TC_SUBTYPE_ENTER:
200 if (length!=(TC_LEN_ENTER-CCSDS_TC_TM_PACKET_OFFSET)) {
234 if (length!=(TC_LEN_ENTER-CCSDS_TC_TM_PACKET_OFFSET)) {
201 ret = WRONG_LEN_PACKET;
235 ret = WRONG_LEN_PACKET;
202 }
236 }
203 else {
237 else {
204 ret = CCSDS_TM_VALID;
238 ret = CCSDS_TM_VALID;
205 }
239 }
206 break;
240 break;
207 case TC_SUBTYPE_UPDT_INFO:
241 case TC_SUBTYPE_UPDT_INFO:
208 if (length!=(TC_LEN_UPDT_INFO-CCSDS_TC_TM_PACKET_OFFSET)) {
242 if (length!=(TC_LEN_UPDT_INFO-CCSDS_TC_TM_PACKET_OFFSET)) {
209 ret = WRONG_LEN_PACKET;
243 ret = WRONG_LEN_PACKET;
210 }
244 }
211 else {
245 else {
212 ret = CCSDS_TM_VALID;
246 ret = CCSDS_TM_VALID;
213 }
247 }
214 break;
248 break;
215 case TC_SUBTYPE_EN_CAL:
249 case TC_SUBTYPE_EN_CAL:
216 if (length!=(TC_LEN_EN_CAL-CCSDS_TC_TM_PACKET_OFFSET)) {
250 if (length!=(TC_LEN_EN_CAL-CCSDS_TC_TM_PACKET_OFFSET)) {
217 ret = WRONG_LEN_PACKET;
251 ret = WRONG_LEN_PACKET;
218 }
252 }
219 else {
253 else {
220 ret = CCSDS_TM_VALID;
254 ret = CCSDS_TM_VALID;
221 }
255 }
222 break;
256 break;
223 case TC_SUBTYPE_DIS_CAL:
257 case TC_SUBTYPE_DIS_CAL:
224 if (length!=(TC_LEN_DIS_CAL-CCSDS_TC_TM_PACKET_OFFSET)) {
258 if (length!=(TC_LEN_DIS_CAL-CCSDS_TC_TM_PACKET_OFFSET)) {
225 ret = WRONG_LEN_PACKET;
259 ret = WRONG_LEN_PACKET;
226 }
260 }
227 else {
261 else {
228 ret = CCSDS_TM_VALID;
262 ret = CCSDS_TM_VALID;
229 }
263 }
230 break;
264 break;
231 default:
265 default:
232 ret = ILL_SUBTYPE;
266 ret = ILL_SUBTYPE;
233 break;
267 break;
234 }
268 }
235 }
269 }
236 else if ( packetType == TC_TYPE_TIME ){
270 else if ( packetType == TC_TYPE_TIME ){
237 if (packetSubtype!=TC_SUBTYPE_UPDT_TIME) {
271 if (packetSubtype!=TC_SUBTYPE_UPDT_TIME) {
238 ret = ILL_SUBTYPE;
272 ret = ILL_SUBTYPE;
239 }
273 }
240 else if (length!=(TC_LEN_UPDT_TIME-CCSDS_TC_TM_PACKET_OFFSET)) {
274 else if (length!=(TC_LEN_UPDT_TIME-CCSDS_TC_TM_PACKET_OFFSET)) {
241 ret = WRONG_LEN_PACKET;
275 ret = WRONG_LEN_PACKET;
242 }
276 }
243 else {
277 else {
244 ret = CCSDS_TM_VALID;
278 ret = CCSDS_TM_VALID;
245 }
279 }
246 }
280 }
247 else {
281 else {
248 ret = ILL_TYPE;
282 ret = ILL_TYPE;
249 }
283 }
250
284
251 // source ID check // Source ID not documented in the ICD
285 // source ID check // Source ID not documented in the ICD
252
286
253 // packet error control, CRC check
287 // packet error control, CRC check
254 if ( ret == CCSDS_TM_VALID ) {
288 if ( ret == CCSDS_TM_VALID ) {
255 CCSDSContent = (unsigned char*) TMPacket->packetID;
289 CCSDSContent = (unsigned char*) TMPacket->packetID;
256 GetCRCAsTwoBytes(CCSDSContent, currentTC_COMPUTED_CRC, length + CCSDS_TC_TM_PACKET_OFFSET - 2); // 2 CRC bytes removed from the calculation of the CRC
290 GetCRCAsTwoBytes(CCSDSContent, currentTC_COMPUTED_CRC, length + CCSDS_TC_TM_PACKET_OFFSET - 2); // 2 CRC bytes removed from the calculation of the CRC
257 if (currentTC_COMPUTED_CRC[0] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -2]) {
291 if (currentTC_COMPUTED_CRC[0] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -2]) {
258 ret = INCOR_CHECKSUM;
292 ret = INCOR_CHECKSUM;
259 }
293 }
260 else if (currentTC_COMPUTED_CRC[1] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -1]) {
294 else if (currentTC_COMPUTED_CRC[1] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -1]) {
261 ret = INCOR_CHECKSUM;
295 ret = INCOR_CHECKSUM;
262 }
296 }
263 else {
297 else {
264 ret = CCSDS_TM_VALID;
298 ret = CCSDS_TM_VALID;
265 }
299 }
266 }
300 }
267
301
268 return ret;
302 return ret;
269 }
303 }
270
304
271 unsigned char TM_build_header( enum TM_TYPE tm_type, unsigned int packetLength,
305 unsigned char TM_build_header( enum TM_TYPE tm_type, unsigned int packetLength,
272 TMHeader_t *TMHeader, unsigned char tc_sid)
306 TMHeader_t *TMHeader, unsigned char tc_sid)
273 {
307 {
274 TMHeader->targetLogicalAddress = CCSDS_DESTINATION_ID;
308 TMHeader->targetLogicalAddress = CCSDS_DESTINATION_ID;
275 TMHeader->protocolIdentifier = CCSDS_PROTOCOLE_ID;
309 TMHeader->protocolIdentifier = CCSDS_PROTOCOLE_ID;
276 TMHeader->reserved = 0x00;
310 TMHeader->reserved = 0x00;
277 TMHeader->userApplication = 0x00;
311 TMHeader->userApplication = 0x00;
278 TMHeader->packetID[0] = 0x0c;
312 TMHeader->packetID[0] = 0x0c;
279 TMHeader->packetSequenceControl[0] = 0xc0;
313 TMHeader->packetSequenceControl[0] = 0xc0;
280 TMHeader->packetSequenceControl[1] = 0x00;
314 TMHeader->packetSequenceControl[1] = 0x00;
281 TMHeader->packetLength[0] = (unsigned char) (packetLength>>8);
315 TMHeader->packetLength[0] = (unsigned char) (packetLength>>8);
282 TMHeader->packetLength[1] = (unsigned char) packetLength;
316 TMHeader->packetLength[1] = (unsigned char) packetLength;
283 TMHeader->spare1_pusVersion_spare2 = 0x10;
317 TMHeader->spare1_pusVersion_spare2 = 0x10;
284 TMHeader->destinationID = TM_DESTINATION_ID_GROUND; // default destination id
318 TMHeader->destinationID = TM_DESTINATION_ID_GROUND; // default destination id
285 switch (tm_type){
319 switch (tm_type){
286 case(TM_LFR_TC_EXE_OK):
320 case(TM_LFR_TC_EXE_OK):
287 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_TC_EXE;
321 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_TC_EXE;
288 TMHeader->serviceType = TM_TYPE_TC_EXE; // type
322 TMHeader->serviceType = TM_TYPE_TC_EXE; // type
289 TMHeader->serviceSubType = TM_SUBTYPE_EXE_OK; // subtype
323 TMHeader->serviceSubType = TM_SUBTYPE_EXE_OK; // subtype
290 TMHeader->destinationID = tc_sid; // destination id
324 TMHeader->destinationID = tc_sid; // destination id
291 break;
325 break;
292 case(TM_LFR_TC_EXE_ERR):
326 case(TM_LFR_TC_EXE_ERR):
293 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_TC_EXE;
327 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_TC_EXE;
294 TMHeader->serviceType = TM_TYPE_TC_EXE; // type
328 TMHeader->serviceType = TM_TYPE_TC_EXE; // type
295 TMHeader->serviceSubType = TM_SUBTYPE_EXE_NOK; // subtype
329 TMHeader->serviceSubType = TM_SUBTYPE_EXE_NOK; // subtype
296 TMHeader->destinationID = tc_sid;
330 TMHeader->destinationID = tc_sid;
297 break;
331 break;
298 case(TM_LFR_HK):
332 case(TM_LFR_HK):
299 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_HK;
333 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_HK;
300 TMHeader->serviceType = TM_TYPE_HK; // type
334 TMHeader->serviceType = TM_TYPE_HK; // type
301 TMHeader->serviceSubType = TM_SUBTYPE_HK; // subtype
335 TMHeader->serviceSubType = TM_SUBTYPE_HK; // subtype
302 break;
336 break;
303 case(TM_LFR_SCI):
337 case(TM_LFR_SCI):
304 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_SCIENCE_NORMAL;
338 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_SCIENCE_NORMAL;
305 TMHeader->serviceType = TM_TYPE_LFR_SCIENCE; // type
339 TMHeader->serviceType = TM_TYPE_LFR_SCIENCE; // type
306 TMHeader->serviceSubType = TM_SUBTYPE_SCIENCE; // subtype
340 TMHeader->serviceSubType = TM_SUBTYPE_SCIENCE; // subtype
307 break;
341 break;
308 case(TM_LFR_SCI_SBM):
342 case(TM_LFR_SCI_SBM):
309 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2;
343 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2;
310 TMHeader->serviceType = TM_TYPE_LFR_SCIENCE; // type
344 TMHeader->serviceType = TM_TYPE_LFR_SCIENCE; // type
311 TMHeader->serviceSubType = TM_SUBTYPE_SCIENCE; // subtype
345 TMHeader->serviceSubType = TM_SUBTYPE_SCIENCE; // subtype
312 break;
346 break;
313 case(TM_LFR_PAR_DUMP):
347 case(TM_LFR_PAR_DUMP):
314 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_PARAMETER_DUMP;
348 TMHeader->packetID[1] = (unsigned char) TM_PACKET_ID_PARAMETER_DUMP;
315 TMHeader->serviceType = TM_TYPE_HK; // type
349 TMHeader->serviceType = TM_TYPE_HK; // type
316 TMHeader->serviceSubType = TM_SUBTYPE_HK; // subtype
350 TMHeader->serviceSubType = TM_SUBTYPE_HK; // subtype
317 break;
351 break;
318 default:
352 default:
319 return 0;
353 return 0;
320 }
354 }
321 TMHeader->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
355 TMHeader->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
322 TMHeader->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
356 TMHeader->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
323 TMHeader->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
357 TMHeader->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
324 TMHeader->time[3] = (unsigned char) (time_management_regs->coarse_time);
358 TMHeader->time[3] = (unsigned char) (time_management_regs->coarse_time);
325 TMHeader->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
359 TMHeader->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
326 TMHeader->time[5] = (unsigned char) (time_management_regs->fine_time);
360 TMHeader->time[5] = (unsigned char) (time_management_regs->fine_time);
327
361
328 return LFR_SUCCESSFUL;
362 return LFR_SUCCESSFUL;
329 }
363 }
330
364
331 unsigned char TM_build_data(ccsdsTelecommandPacket_t *TC, char* data, unsigned int SID, unsigned char *computed_CRC)
332 {
333 unsigned int packetLength;
334 packetLength = (TC->packetLength[0] * 256) + TC->packetLength[1];
335 switch (SID){
336 case (SID_NOT_EXE):
337 break;
338 case (SID_NOT_IMP):
339 data[0] = (unsigned char) (SID_NOT_IMP >> 8);
340 data[1] = (unsigned char) SID_NOT_IMP;
341 data[2] = TC->packetID[0];
342 data[3] = TC->packetID[1];
343 data[4] = TC->packetSequenceControl[0];
344 data[5] = TC->packetSequenceControl[1];
345 data[6] = TC->serviceType; // type
346 data[7] = TC->serviceSubType; // subtype
347 break;
348 case (SID_EXE_ERR):
349 break;
350 case (SID_EXE_CORR):
351 data[0] = (unsigned char) (SID_EXE_CORR >> 8);
352 data[1] = (unsigned char) SID_EXE_CORR;
353 data[2] = TC->packetID[0];
354 data[3] = TC->packetID[1];
355 data[4] = TC->packetSequenceControl[0];
356 data[5] = TC->packetSequenceControl[1];
357 data[6] = TC->serviceType; // type
358 data[7] = TC->serviceSubType; // subtype
359 data[8] = currentTC_LEN_RCV[0];
360 data[9] = currentTC_LEN_RCV[1];
361 data[10] = TC->packetLength[0];
362 data[11] = TC->packetLength[1];
363 data[12] = TC->dataAndCRC[packetLength];
364 data[13] = TC->dataAndCRC[packetLength+1];
365 data[14] = computed_CRC[0];
366 data[15] = computed_CRC[1];
367 break;
368 default:
369 return 0;
370 }
371 return 1;
372 }
373
374 int create_message_queue( void )
375 {
376 rtems_status_code status;
377 misc_name[0] = rtems_build_name( 'Q', 'U', 'E', 'U' );
378 status = rtems_message_queue_create( misc_name[0], ACTION_MSG_QUEUE_COUNT, CCSDS_TC_PKT_MAX_SIZE,
379 RTEMS_FIFO | RTEMS_LOCAL, &misc_id[0] );
380 if (status!=RTEMS_SUCCESSFUL) {
381 PRINTF("in create_message_queue *** error creating message queue\n")
382 }
383
384 return 0;
385 }
386
387 //***********
365 //***********
388 // RTEMS TASK
366 // RTEMS TASK
389 rtems_task recv_task( rtems_task_argument unused )
367 rtems_task recv_task( rtems_task_argument unused )
390 {
368 {
391 int len = 0;
369 int len = 0;
392 unsigned int i = 0;
370 unsigned int i = 0;
393 unsigned int data_length = 0;
371 unsigned int data_length = 0;
394 ccsdsTelecommandPacket_t currentTC;
372 ccsdsTelecommandPacket_t currentTC;
395 char data[100];
373 char data[100];
396
374
397 for(i=0; i<100; i++) data[i] = 0;
375 for(i=0; i<100; i++) data[i] = 0;
398
376
399 PRINTF("in RECV *** \n")
377 PRINTF("in RECV *** \n")
400
378
401 while(1)
379 while(1)
402 {
380 {
403 len = read(fdSPW, (char*) &currentTC, CCSDS_TC_PKT_MAX_SIZE); // the call to read is blocking
381 len = read(fdSPW, (char*) &currentTC, CCSDS_TC_PKT_MAX_SIZE); // the call to read is blocking
404 if (len == -1){ // error during the read call
382 if (len == -1){ // error during the read call
405 PRINTF("In RECV *** last read call returned -1\n")
383 PRINTF("In RECV *** last read call returned -1\n")
406 //if (rtems_event_send( Task_id[TASKID_SPIQ], SPW_LINKERR_EVENT ) != RTEMS_SUCCESSFUL) {
384 //if (rtems_event_send( Task_id[TASKID_SPIQ], SPW_LINKERR_EVENT ) != RTEMS_SUCCESSFUL) {
407 // PRINTF("IN RECV *** Error: rtems_event_send SPW_LINKERR_EVENT\n")
385 // PRINTF("IN RECV *** Error: rtems_event_send SPW_LINKERR_EVENT\n")
408 //}
386 //}
409 //if (rtems_task_suspend(RTEMS_SELF) != RTEMS_SUCCESSFUL) {
387 //if (rtems_task_suspend(RTEMS_SELF) != RTEMS_SUCCESSFUL) {
410 // PRINTF("In RECV *** Error: rtems_task_suspend(RTEMS_SELF)\n")
388 // PRINTF("In RECV *** Error: rtems_task_suspend(RTEMS_SELF)\n")
411 //}
389 //}
412 }
390 }
413 else {
391 else {
414 PRINTF1("Got pck of length %d\n", len+1)
392 PRINTF1("Got pck of length %d\n", len+1)
415 if ( (len+1) < CCSDS_TC_PKT_MIN_SIZE ) {
393 if ( (len+1) < CCSDS_TC_PKT_MIN_SIZE ) {
416 PRINTF("In RECV *** packet lenght too short\n")
394 PRINTF("In RECV *** packet lenght too short\n")
417 }
395 }
418 else {
396 else {
419 currentTC_LEN_RCV[0] = 0x00;
397 currentTC_LEN_RCV[0] = 0x00;
420 currentTC_LEN_RCV[1] = (unsigned char) (len - CCSDS_TC_TM_PACKET_OFFSET - 3); // build the corresponding packet size field
398 currentTC_LEN_RCV[1] = (unsigned char) (len - CCSDS_TC_TM_PACKET_OFFSET - 3); // build the corresponding packet size field
421 currentTC_LEN_RCV_AsUnsignedInt = (unsigned int) (len - CCSDS_TC_TM_PACKET_OFFSET - 3); // => -3 is for Prot ID, Reserved and User App bytes
399 currentTC_LEN_RCV_AsUnsignedInt = (unsigned int) (len - CCSDS_TC_TM_PACKET_OFFSET - 3); // => -3 is for Prot ID, Reserved and User App bytes
422 // CHECK THE TC AND BUILD THE APPROPRIATE TM
400 // CHECK THE TC AND BUILD THE APPROPRIATE TM
423 data_length = TC_acceptance(&currentTC, currentTC_LEN_RCV_AsUnsignedInt);
401 data_length = TC_acceptance(&currentTC, currentTC_LEN_RCV_AsUnsignedInt);
424 if (data_length!=-1)
402 if (data_length!=-1)
425 {
403 {
426 }
404 }
427 }
405 }
428 }
406 }
429 }
407 }
430 }
408 }
431
409
432 rtems_task actn_task( rtems_task_argument unused )
410 rtems_task actn_task( rtems_task_argument unused )
433 {
411 {
434 int result;
412 int result;
435 rtems_status_code status; // RTEMS status code
413 rtems_status_code status; // RTEMS status code
436 ccsdsTelecommandPacket_t TC; // TC sent to the ACTN task
414 ccsdsTelecommandPacket_t TC; // TC sent to the ACTN task
437 size_t size; // size of the incoming TC packet
415 size_t size; // size of the incoming TC packet
438 unsigned char subtype; // subtype of the current TC packet
416 unsigned char subtype; // subtype of the current TC packet
439
417
440 result = LFR_SUCCESSFUL;
418 result = LFR_SUCCESSFUL;
441 subtype = 0; // subtype of the current TC packet
419 subtype = 0; // subtype of the current TC packet
442
420
443 PRINTF("in ACTN *** \n")
421 PRINTF("in ACTN *** \n")
444
422
445 while(1)
423 while(1)
446 {
424 {
447 status = rtems_message_queue_receive(misc_id[0], (char*) &TC, &size,
425 status = rtems_message_queue_receive(misc_id[0], (char*) &TC, &size,
448 RTEMS_WAIT, RTEMS_NO_TIMEOUT);
426 RTEMS_WAIT, RTEMS_NO_TIMEOUT);
449 if (status!=RTEMS_SUCCESSFUL) PRINTF1("ERR *** in task ACTN *** error receiving a message, code %d \n", status)
427 if (status!=RTEMS_SUCCESSFUL) PRINTF1("ERR *** in task ACTN *** error receiving a message, code %d \n", status)
450 else
428 else
451 {
429 {
452 subtype = TC.serviceSubType;
430 subtype = TC.serviceSubType;
453 switch(subtype)
431 switch(subtype)
454 {
432 {
455 case TC_SUBTYPE_RESET:
433 case TC_SUBTYPE_RESET:
456 result = action_default( &TC );
434 result = action_reset( &TC );
435 close_action( &TC, result );
457 break;
436 break;
458 //
437 //
459 case TC_SUBTYPE_LOAD_COMM:
438 case TC_SUBTYPE_LOAD_COMM:
460 result = action_load_comm( &TC );
439 result = action_load_common_par( &TC );
461 close_action( &TC, result );
440 close_action( &TC, result );
462 break;
441 break;
463 //
442 //
464 case TC_SUBTYPE_LOAD_NORM:
443 case TC_SUBTYPE_LOAD_NORM:
465 result = action_load_norm( &TC );
444 result = action_load_normal_par( &TC );
466 close_action( &TC, result );
445 close_action( &TC, result );
467 break;
446 break;
468 //
447 //
469 case TC_SUBTYPE_LOAD_BURST:
448 case TC_SUBTYPE_LOAD_BURST:
470 result = action_load_burst( &TC );
449 result = action_load_burst_par( &TC );
471 close_action( &TC, result );
450 close_action( &TC, result );
472 break;
451 break;
473 //
452 //
474 case TC_SUBTYPE_LOAD_SBM1:
453 case TC_SUBTYPE_LOAD_SBM1:
475 result = action_load_sbm1( &TC );
454 result = action_load_sbm1_par( &TC );
476 close_action( &TC, result );
455 close_action( &TC, result );
477 break;
456 break;
478 //
457 //
479 case TC_SUBTYPE_LOAD_SBM2:
458 case TC_SUBTYPE_LOAD_SBM2:
480 result = action_load_sbm2( &TC );
459 result = action_load_sbm2_par( &TC );
481 close_action( &TC, result );
460 close_action( &TC, result );
482 break;
461 break;
483 //
462 //
484 case TC_SUBTYPE_DUMP:
463 case TC_SUBTYPE_DUMP:
485 result = action_dump( &TC );
464 result = action_dump_par( &TC );
486 close_action( &TC, result );
465 close_action( &TC, result );
487 break;
466 break;
488 //
467 //
489 case TC_SUBTYPE_ENTER:
468 case TC_SUBTYPE_ENTER:
490 result = action_enter( &TC );
469 result = action_enter_mode( &TC );
491 close_action( &TC, result );
470 close_action( &TC, result );
492 break;
471 break;
493 //
472 //
494 case TC_SUBTYPE_UPDT_INFO:
473 case TC_SUBTYPE_UPDT_INFO:
495 result = action_updt_info( &TC );
474 result = action_update_info( &TC );
496 close_action( &TC, result );
475 close_action( &TC, result );
497 break;
476 break;
498 //
477 //
499 case TC_SUBTYPE_EN_CAL:
478 case TC_SUBTYPE_EN_CAL:
500 result = action_enable_calibration( &TC );
479 result = action_enable_calibration( &TC );
501 close_action( &TC, result );
480 close_action( &TC, result );
502 break;
481 break;
503 //
482 //
504 case TC_SUBTYPE_DIS_CAL:
483 case TC_SUBTYPE_DIS_CAL:
505 result = action_disable_calibration( &TC );
484 result = action_disable_calibration( &TC );
506 close_action( &TC, result );
485 close_action( &TC, result );
507 break;
486 break;
508 //
487 //
509 case TC_SUBTYPE_UPDT_TIME:
488 case TC_SUBTYPE_UPDT_TIME:
510 result = action_updt_time( &TC );
489 result = action_update_time( &TC );
490 close_action( &TC, result );
511 break;
491 break;
512 //
492 //
513 default:
493 default:
514 break;
494 break;
515 }
495 }
516 }
496 }
517 }
497 }
518 }
498 }
519
499
520 rtems_task dumb_task( rtems_task_argument unused )
500 rtems_task dumb_task( rtems_task_argument unused )
521 {
501 {
522 unsigned int i;
502 unsigned int i;
523 unsigned int intEventOut;
503 unsigned int intEventOut;
524 unsigned int coarse_time = 0;
504 unsigned int coarse_time = 0;
525 unsigned int fine_time = 0;
505 unsigned int fine_time = 0;
526 rtems_event_set event_out;
506 rtems_event_set event_out;
527
507
528 PRINTF("in DUMB *** \n")
508 PRINTF("in DUMB *** \n")
529
509
530 while(1){
510 while(1){
531 rtems_event_receive(RTEMS_EVENT_0 | RTEMS_EVENT_1 | RTEMS_EVENT_2 | RTEMS_EVENT_3 | RTEMS_EVENT_4 | RTEMS_EVENT_5,
511 rtems_event_receive(RTEMS_EVENT_0 | RTEMS_EVENT_1 | RTEMS_EVENT_2 | RTEMS_EVENT_3 | RTEMS_EVENT_4 | RTEMS_EVENT_5,
532 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT
512 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT
533 intEventOut = (unsigned int) event_out;
513 intEventOut = (unsigned int) event_out;
534 for ( i=0; i<32; i++)
514 for ( i=0; i<32; i++)
535 {
515 {
536 if ( ((intEventOut >> i) & 0x0001) != 0)
516 if ( ((intEventOut >> i) & 0x0001) != 0)
537 {
517 {
538 coarse_time = time_management_regs->coarse_time;
518 coarse_time = time_management_regs->coarse_time;
539 fine_time = time_management_regs->fine_time;
519 fine_time = time_management_regs->fine_time;
540 printf("in DUMB *** time = coarse: %x, fine: %x, %s\n", coarse_time, fine_time, DumbMessages[i]);
520 printf("in DUMB *** time = coarse: %x, fine: %x, %s\n", coarse_time, fine_time, DumbMessages[i]);
541 }
521 }
542 }
522 }
543 }
523 }
544 }
524 }
545
525
546 //***********
526 //***********
547 // TC ACTIONS
527 // TC ACTIONS
548
528
549 int action_default(ccsdsTelecommandPacket_t *TC)
529 int action_reset(ccsdsTelecommandPacket_t *TC)
550 {
530 {
551 rtems_status_code status;
531 send_tm_lfr_tc_exe_not_implemented( TC );
552 TMHeader_t header;
553 spw_ioctl_pkt_send spw_ioctl_send;
554 unsigned char data[10];
555
556 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED,
557 &header, TC->sourceID);
558
559 spw_ioctl_send.hlen = TM_HEADER_LEN + 4;
560 spw_ioctl_send.hdr = (char *) &header;
561 spw_ioctl_send.dlen = 8;
562 spw_ioctl_send.data = (char *) data;
563 spw_ioctl_send.options = 0;
564
565 data[0] = (char) (FAILURE_CODE_NOT_IMPLEMENTED >> 8);
566 data[1] = (char) FAILURE_CODE_NOT_IMPLEMENTED;
567 data[2] = TC->packetID[0];
568 data[3] = TC->packetID[1];
569 data[4] = TC->packetSequenceControl[0];
570 data[5] = TC->packetSequenceControl[1];
571 data[6] = TC->serviceType; // type
572 data[7] = TC->serviceSubType; // subtype
573
574 // SEND DATA
575 status = write_spw(&spw_ioctl_send);
576 if (status != RTEMS_SUCCESSFUL)
577 {
578 PRINTF("ERR *** in action_default *** send TM packet\n")
579 }
580
581 return LFR_DEFAULT;
532 return LFR_DEFAULT;
582 }
533 }
583
534
584 int action_enter(ccsdsTelecommandPacket_t *TC)
535 int action_load_common_par(ccsdsTelecommandPacket_t *TC)
585 {
586 rtems_status_code status;
587 unsigned char requestedMode;
588
589 requestedMode = TC->dataAndCRC[1];
590
591 printf("try to enter mode %d\n", requestedMode);
592
593 status = transition_validation(requestedMode);
594
595 if ( status == LFR_SUCCESSFUL ) {
596 if ( (housekeeping_packet.lfr_status_word[0] & 0xf0) != LFR_MODE_STANDBY)
597 {
598 status = stop_current_mode();
599 }
600 if (status != RTEMS_SUCCESSFUL)
601 {
602 PRINTF("ERR *** in action_enter *** stop_current_mode\n")
603 }
604 status = enter_mode(requestedMode, TC);
605 }
606 else
607 {
608 PRINTF("ERR *** in action_enter *** transition rejected\n")
609 send_tm_lfr_tc_exe_not_executable( TC );
610 }
611
612 return status;
613 }
614
615 int action_load_comm(ccsdsTelecommandPacket_t *TC)
616 {
536 {
617 parameter_dump_packet.unused0 = TC->dataAndCRC[0];
537 parameter_dump_packet.unused0 = TC->dataAndCRC[0];
618 parameter_dump_packet.bw_sp0_sp1_r0_r1 = TC->dataAndCRC[1];
538 parameter_dump_packet.bw_sp0_sp1_r0_r1 = TC->dataAndCRC[1];
619
539
620 set_wfp_data_shaping(parameter_dump_packet.bw_sp0_sp1_r0_r1);
540 set_wfp_data_shaping(parameter_dump_packet.bw_sp0_sp1_r0_r1);
621
541
622 return LFR_SUCCESSFUL;
542 return LFR_SUCCESSFUL;
623 }
543 }
624
544
625 int action_load_norm(ccsdsTelecommandPacket_t *TC)
545 int action_load_normal_par(ccsdsTelecommandPacket_t *TC)
626 {
546 {
627 int result;
547 int result;
628 unsigned char lfrMode;
548 unsigned char lfrMode;
629
549
630 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
550 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
631
551
632 if ( lfrMode == LFR_MODE_NORMAL ) {
552 if ( lfrMode == LFR_MODE_NORMAL ) {
633 send_tm_lfr_tc_exe_not_executable( TC );
553 send_tm_lfr_tc_exe_not_executable( TC );
634 result = LFR_DEFAULT;
554 result = LFR_DEFAULT;
635 }
555 }
636 else {
556 else {
637 parameter_dump_packet.sy_lfr_n_swf_l[0] = TC->dataAndCRC[0];
557 parameter_dump_packet.sy_lfr_n_swf_l[0] = TC->dataAndCRC[0];
638 parameter_dump_packet.sy_lfr_n_swf_l[1] = TC->dataAndCRC[1];
558 parameter_dump_packet.sy_lfr_n_swf_l[1] = TC->dataAndCRC[1];
639
559
640 parameter_dump_packet.sy_lfr_n_swf_p[0] = TC->dataAndCRC[2];
560 parameter_dump_packet.sy_lfr_n_swf_p[0] = TC->dataAndCRC[2];
641 parameter_dump_packet.sy_lfr_n_swf_p[1] = TC->dataAndCRC[3];
561 parameter_dump_packet.sy_lfr_n_swf_p[1] = TC->dataAndCRC[3];
642
562
643 parameter_dump_packet.sy_lfr_n_asm_p[0] = TC->dataAndCRC[4];
563 parameter_dump_packet.sy_lfr_n_asm_p[0] = TC->dataAndCRC[4];
644 parameter_dump_packet.sy_lfr_n_asm_p[1] = TC->dataAndCRC[5];
564 parameter_dump_packet.sy_lfr_n_asm_p[1] = TC->dataAndCRC[5];
645
565
646 parameter_dump_packet.sy_lfr_n_bp_p0 = TC->dataAndCRC[6];
566 parameter_dump_packet.sy_lfr_n_bp_p0 = TC->dataAndCRC[6];
647 parameter_dump_packet.sy_lfr_n_bp_p1 = TC->dataAndCRC[7];
567 parameter_dump_packet.sy_lfr_n_bp_p1 = TC->dataAndCRC[7];
648
568
649 result = LFR_SUCCESSFUL;
569 result = LFR_SUCCESSFUL;
650 }
570 }
651
571
652 return result;
572 return result;
653 }
573 }
654
574
655 int action_load_burst(ccsdsTelecommandPacket_t *TC)
575 int action_load_burst_par(ccsdsTelecommandPacket_t *TC)
656 {
576 {
657 int result;
577 int result;
658 unsigned char lfrMode;
578 unsigned char lfrMode;
659
579
660 result = LFR_DEFAULT;
580 result = LFR_DEFAULT;
661 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
581 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
662
582
663 if ( lfrMode == LFR_MODE_BURST ) {
583 if ( lfrMode == LFR_MODE_BURST ) {
664 send_tm_lfr_tc_exe_not_executable( TC );
584 send_tm_lfr_tc_exe_not_executable( TC );
665 result = LFR_DEFAULT;
585 result = LFR_DEFAULT;
666 }
586 }
667 else {
587 else {
668 parameter_dump_packet.sy_lfr_b_bp_p0 = TC->dataAndCRC[0];
588 parameter_dump_packet.sy_lfr_b_bp_p0 = TC->dataAndCRC[0];
669 parameter_dump_packet.sy_lfr_b_bp_p1 = TC->dataAndCRC[1];
589 parameter_dump_packet.sy_lfr_b_bp_p1 = TC->dataAndCRC[1];
670
590
671 result = LFR_SUCCESSFUL;
591 result = LFR_SUCCESSFUL;
672 }
592 }
673
593
674 return result;
594 return result;
675 }
595 }
676
596
677 int action_load_sbm1(ccsdsTelecommandPacket_t *TC)
597 int action_load_sbm1_par(ccsdsTelecommandPacket_t *TC)
678 {
598 {
679 int result;
599 int result;
680 unsigned char lfrMode;
600 unsigned char lfrMode;
681
601
682 result = LFR_DEFAULT;
602 result = LFR_DEFAULT;
683 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
603 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
684
604
685 if ( lfrMode == LFR_MODE_SBM1 ) {
605 if ( lfrMode == LFR_MODE_SBM1 ) {
686 send_tm_lfr_tc_exe_not_executable( TC );
606 send_tm_lfr_tc_exe_not_executable( TC );
687 result = LFR_DEFAULT;
607 result = LFR_DEFAULT;
688 }
608 }
689 else {
609 else {
690 parameter_dump_packet.sy_lfr_s1_bp_p0 = TC->dataAndCRC[0];
610 parameter_dump_packet.sy_lfr_s1_bp_p0 = TC->dataAndCRC[0];
691 parameter_dump_packet.sy_lfr_s1_bp_p1 = TC->dataAndCRC[1];
611 parameter_dump_packet.sy_lfr_s1_bp_p1 = TC->dataAndCRC[1];
692
612
693 result = LFR_SUCCESSFUL;
613 result = LFR_SUCCESSFUL;
694 }
614 }
695
615
696 return result;
616 return result;
697 }
617 }
698
618
699 int action_load_sbm2(ccsdsTelecommandPacket_t *TC)
619 int action_load_sbm2_par(ccsdsTelecommandPacket_t *TC)
700 {
620 {
701 int result;
621 int result;
702 unsigned char lfrMode;
622 unsigned char lfrMode;
703
623
704 result = LFR_DEFAULT;
624 result = LFR_DEFAULT;
705 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
625 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
706
626
707 if ( lfrMode == LFR_MODE_SBM2 ) {
627 if ( lfrMode == LFR_MODE_SBM2 ) {
708 send_tm_lfr_tc_exe_not_executable( TC );
628 send_tm_lfr_tc_exe_not_executable( TC );
709 result = LFR_DEFAULT;
629 result = LFR_DEFAULT;
710 }
630 }
711 else {
631 else {
712 parameter_dump_packet.sy_lfr_s2_bp_p0 = TC->dataAndCRC[0];
632 parameter_dump_packet.sy_lfr_s2_bp_p0 = TC->dataAndCRC[0];
713 parameter_dump_packet.sy_lfr_s2_bp_p1 = TC->dataAndCRC[1];
633 parameter_dump_packet.sy_lfr_s2_bp_p1 = TC->dataAndCRC[1];
714
634
715 result = LFR_SUCCESSFUL;
635 result = LFR_SUCCESSFUL;
716 }
636 }
717
637
718 return result;
638 return result;
719 }
639 }
720
640
721 int action_dump(ccsdsTelecommandPacket_t *TC)
641 int action_dump_par(ccsdsTelecommandPacket_t *TC)
722 {
642 {
723 int status;
643 int status;
724 // send parameter dump packet
644 // send parameter dump packet
725 status = write(fdSPW, (char *) &parameter_dump_packet,
645 status = write(fdSPW, (char *) &parameter_dump_packet,
726 PACKET_LENGTH_PARAMETER_DUMP + CCSDS_TC_TM_PACKET_OFFSET + 4);
646 PACKET_LENGTH_PARAMETER_DUMP + CCSDS_TC_TM_PACKET_OFFSET + 4);
727 if (status == -1)
647 if (status == -1)
728 {
648 {
729 PRINTF1("in action_dump *** ERR sending packet, code %d", status)
649 PRINTF1("in action_dump *** ERR sending packet, code %d", status)
730 status = RTEMS_UNSATISFIED;
650 status = RTEMS_UNSATISFIED;
731 }
651 }
732 else
652 else
733 {
653 {
734 status = RTEMS_SUCCESSFUL;
654 status = RTEMS_SUCCESSFUL;
735 }
655 }
736
656
737 return status;
657 return status;
738 }
658 }
739
659
740 int action_updt_info(ccsdsTelecommandPacket_t *TC) {
660 int action_enter_mode(ccsdsTelecommandPacket_t *TC)
661 {
662 rtems_status_code status;
663 unsigned char requestedMode;
664
665 requestedMode = TC->dataAndCRC[1];
666
667 printf("try to enter mode %d\n", requestedMode);
668
669 #ifdef PRINT_TASK_STATISTICS
670 if (requestedMode != LFR_MODE_STANDBY)
671 {
672 rtems_cpu_usage_reset();
673 }
674 #endif
675
676 status = transition_validation(requestedMode);
677
678 if ( status == LFR_SUCCESSFUL ) {
679 if ( lfrCurrentMode != LFR_MODE_STANDBY)
680 {
681 status = stop_current_mode();
682 }
683 if (status != RTEMS_SUCCESSFUL)
684 {
685 PRINTF("ERR *** in action_enter *** stop_current_mode\n")
686 }
687 status = enter_mode(requestedMode, TC);
688 }
689 else
690 {
691 PRINTF("ERR *** in action_enter *** transition rejected\n")
692 send_tm_lfr_tc_exe_not_executable( TC );
693 }
694
695 return status;
696 }
697
698 int action_update_info(ccsdsTelecommandPacket_t *TC) {
741 unsigned int val;
699 unsigned int val;
742 int result;
700 int result;
743 unsigned char lfrMode;
701 unsigned char lfrMode;
744
702
745 result = LFR_DEFAULT;
703 result = LFR_DEFAULT;
746 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
704 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
747
705
748 if ( (lfrMode == LFR_MODE_STANDBY) ) {
706 if ( (lfrMode == LFR_MODE_STANDBY) ) {
749 send_tm_lfr_tc_exe_not_executable( TC );
707 send_tm_lfr_tc_exe_not_implemented( TC );
750 result = LFR_DEFAULT;
708 result = LFR_DEFAULT;
751 }
709 }
752 else {
710 else {
753 val = housekeeping_packet.hk_lfr_update_info_tc_cnt[0] * 256
711 val = housekeeping_packet.hk_lfr_update_info_tc_cnt[0] * 256
754 + housekeeping_packet.hk_lfr_update_info_tc_cnt[1];
712 + housekeeping_packet.hk_lfr_update_info_tc_cnt[1];
755 val++;
713 val++;
756 housekeeping_packet.hk_lfr_update_info_tc_cnt[0] = (unsigned char) (val >> 8);
714 housekeeping_packet.hk_lfr_update_info_tc_cnt[0] = (unsigned char) (val >> 8);
757 housekeeping_packet.hk_lfr_update_info_tc_cnt[1] = (unsigned char) (val);
715 housekeeping_packet.hk_lfr_update_info_tc_cnt[1] = (unsigned char) (val);
758 result = LFR_SUCCESSFUL;
716 result = LFR_SUCCESSFUL;
759 }
717 }
760
718
761 return result;
719 return result;
762 }
720 }
763
721
764 int action_enable_calibration(ccsdsTelecommandPacket_t *TC)
722 int action_enable_calibration(ccsdsTelecommandPacket_t *TC)
765 {
723 {
766 int result;
724 int result;
767 unsigned char lfrMode;
725 unsigned char lfrMode;
768
726
769 result = LFR_DEFAULT;
727 result = LFR_DEFAULT;
770 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
728 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
771
729
772 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_BURST) | (lfrMode == LFR_MODE_SBM2) ) {
730 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_BURST) | (lfrMode == LFR_MODE_SBM2) ) {
773 send_tm_lfr_tc_exe_not_executable( TC );
731 send_tm_lfr_tc_exe_not_executable( TC );
774 result = LFR_DEFAULT;
732 result = LFR_DEFAULT;
775 }
733 }
776 else {
734 else {
777 send_tm_lfr_tc_exe_not_implemented( TC );
735 send_tm_lfr_tc_exe_not_implemented( TC );
778 result = LFR_DEFAULT;
736 result = LFR_DEFAULT;
779 }
737 }
780 return result;
738 return result;
781 }
739 }
782
740
783 int action_disable_calibration(ccsdsTelecommandPacket_t *TC)
741 int action_disable_calibration(ccsdsTelecommandPacket_t *TC)
784 {
742 {
785 int result;
743 int result;
786 unsigned char lfrMode;
744 unsigned char lfrMode;
787
745
788 result = LFR_DEFAULT;
746 result = LFR_DEFAULT;
789 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
747 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
790
748
791 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_BURST) | (lfrMode == LFR_MODE_SBM2) ) {
749 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_BURST) | (lfrMode == LFR_MODE_SBM2) ) {
792 send_tm_lfr_tc_exe_not_executable( TC );
750 send_tm_lfr_tc_exe_not_executable( TC );
793 result = LFR_DEFAULT;
751 result = LFR_DEFAULT;
794 }
752 }
795 else {
753 else {
796 send_tm_lfr_tc_exe_not_implemented( TC );
754 send_tm_lfr_tc_exe_not_implemented( TC );
797 result = LFR_DEFAULT;
755 result = LFR_DEFAULT;
798 }
756 }
799 return result;
757 return result;
800 }
758 }
801
759
802 int action_updt_time(ccsdsTelecommandPacket_t *TC)
760 int action_update_time(ccsdsTelecommandPacket_t *TC)
803 {
761 {
804 unsigned int val;
762 unsigned int val;
805
763
806 time_management_regs->coarse_time_load = (TC->dataAndCRC[0] << 24)
764 time_management_regs->coarse_time_load = (TC->dataAndCRC[0] << 24)
807 + (TC->dataAndCRC[1] << 16)
765 + (TC->dataAndCRC[1] << 16)
808 + (TC->dataAndCRC[2] << 8)
766 + (TC->dataAndCRC[2] << 8)
809 + TC->dataAndCRC[3];
767 + TC->dataAndCRC[3];
810 val = housekeeping_packet.hk_lfr_update_time_tc_cnt[0] * 256
768 val = housekeeping_packet.hk_lfr_update_time_tc_cnt[0] * 256
811 + housekeeping_packet.hk_lfr_update_time_tc_cnt[1];
769 + housekeeping_packet.hk_lfr_update_time_tc_cnt[1];
812 val++;
770 val++;
813 housekeeping_packet.hk_lfr_update_time_tc_cnt[0] = (unsigned char) (val >> 8);
771 housekeeping_packet.hk_lfr_update_time_tc_cnt[0] = (unsigned char) (val >> 8);
814 housekeeping_packet.hk_lfr_update_time_tc_cnt[1] = (unsigned char) (val);
772 housekeeping_packet.hk_lfr_update_time_tc_cnt[1] = (unsigned char) (val);
815 //time_management_regs->ctrl = time_management_regs->ctrl | 1;
773 time_management_regs->ctrl = time_management_regs->ctrl | 1;
816
774
817 return LFR_SUCCESSFUL;
775 return LFR_SUCCESSFUL;
818 }
776 }
819
777
820 //*******************
778 //*******************
821 // ENTERING THE MODES
779 // ENTERING THE MODES
822
780
823 int transition_validation(unsigned char requestedMode)
781 int transition_validation(unsigned char requestedMode)
824 {
782 {
825 int status;
783 int status;
826 unsigned char lfrMode;
827
828 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
829
784
830 switch (requestedMode)
785 switch (requestedMode)
831 {
786 {
832 case LFR_MODE_STANDBY:
787 case LFR_MODE_STANDBY:
833 if ( lfrMode == LFR_MODE_STANDBY ) {
788 if ( lfrCurrentMode == LFR_MODE_STANDBY ) {
834 status = LFR_DEFAULT;
789 status = LFR_DEFAULT;
835 }
790 }
836 else
791 else
837 {
792 {
838 status = LFR_SUCCESSFUL;
793 status = LFR_SUCCESSFUL;
839 }
794 }
840 break;
795 break;
841 case LFR_MODE_NORMAL:
796 case LFR_MODE_NORMAL:
842 if ( lfrMode == LFR_MODE_NORMAL ) {
797 if ( lfrCurrentMode == LFR_MODE_NORMAL ) {
843 status = LFR_DEFAULT;
798 status = LFR_DEFAULT;
844 }
799 }
845 else {
800 else {
846 status = LFR_SUCCESSFUL;
801 status = LFR_SUCCESSFUL;
847 }
802 }
848 break;
803 break;
849 case LFR_MODE_BURST:
804 case LFR_MODE_BURST:
850 if ( lfrMode == LFR_MODE_BURST ) {
805 if ( lfrCurrentMode == LFR_MODE_BURST ) {
851 status = LFR_DEFAULT;
806 status = LFR_DEFAULT;
852 }
807 }
853 else {
808 else {
854 status = LFR_SUCCESSFUL;
809 status = LFR_SUCCESSFUL;
855 }
810 }
856 break;
811 break;
857 case LFR_MODE_SBM1:
812 case LFR_MODE_SBM1:
858 if ( lfrMode == LFR_MODE_SBM1 ) {
813 if ( lfrCurrentMode == LFR_MODE_SBM1 ) {
859 status = LFR_DEFAULT;
814 status = LFR_DEFAULT;
860 }
815 }
861 else {
816 else {
862 status = LFR_SUCCESSFUL;
817 status = LFR_SUCCESSFUL;
863 }
818 }
864 break;
819 break;
865 case LFR_MODE_SBM2:
820 case LFR_MODE_SBM2:
866 if ( lfrMode == LFR_MODE_SBM2 ) {
821 if ( lfrCurrentMode == LFR_MODE_SBM2 ) {
867 status = LFR_DEFAULT;
822 status = LFR_DEFAULT;
868 }
823 }
869 else {
824 else {
870 status = LFR_SUCCESSFUL;
825 status = LFR_SUCCESSFUL;
871 }
826 }
872 break;
827 break;
873 default:
828 default:
874 status = LFR_DEFAULT;
829 status = LFR_DEFAULT;
875 break;
830 break;
876 }
831 }
877
832
878 return status;
833 return status;
879 }
834 }
880
835
881 int stop_current_mode()
836 int stop_current_mode()
882 {
837 {
883 rtems_status_code status;
838 rtems_status_code status;
884 unsigned char lfrMode;
839 unsigned char lfrMode;
885
840
886 status = RTEMS_SUCCESSFUL;
841 status = RTEMS_SUCCESSFUL;
887 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4; // get the current mode
842 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4; // get the current mode
888
843
889 // mask all IRQ lines related to signal processing
844 // mask all IRQ lines related to signal processing
890 LEON_Mask_interrupt( IRQ_SM ); // mask spectral matrices interrupt (coming from the timer VHDL IP)
845 LEON_Mask_interrupt( IRQ_SM ); // mask 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)
846 LEON_Clear_interrupt( IRQ_SM ); // clear spectral matrices interrupt (coming from the timer VHDL IP)
892
847
893 #ifdef GSA
848 #ifdef GSA
894 LEON_Mask_interrupt( IRQ_WF ); // mask waveform interrupt (coming from the timer VHDL IP)
849 LEON_Mask_interrupt( IRQ_WF ); // mask waveform interrupt (coming from the timer VHDL IP)
895 LEON_Clear_interrupt( IRQ_WF ); // clear waveform interrupt (coming from the timer VHDL IP)
850 LEON_Clear_interrupt( IRQ_WF ); // clear waveform interrupt (coming from the timer VHDL IP)
896 timer_stop( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_WF_SIMULATOR );
851 timer_stop( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_WF_SIMULATOR );
897 #else
852 #else
898 LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER ); // mask waveform picker interrupt
853 LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER ); // mask waveform picker interrupt
899 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); // clear waveform picker interrupt
854 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); // clear waveform picker interrupt
855 LEON_Mask_interrupt( IRQ_SPECTRAL_MATRIX ); // mask spectral matrix interrupt
856 LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt
900 #endif
857 #endif
858 //**********************
901 // suspend several tasks
859 // suspend several tasks
902
903 if (lfrMode != LFR_MODE_STANDBY) {
860 if (lfrMode != LFR_MODE_STANDBY) {
904 suspend_science_tasks();
861 suspend_science_tasks();
905 }
862 }
906
863
907 if (status != RTEMS_SUCCESSFUL)
864 if (status != RTEMS_SUCCESSFUL)
908 {
865 {
909 PRINTF("ERR *** in stop_current_mode *** suspending tasks\n")
866 PRINTF("ERR *** in stop_current_mode *** suspending tasks\n")
910 }
867 }
911
868
869 //*************************
912 // initialize the registers
870 // initialize the registers
913 #ifdef GSA
871 #ifdef GSA
914 #else
872 #else
915 waveform_picker_regs->burst_enable = 0x00; // initialize
873 reset_wfp_burst_enable(); // reset burst and enable bits
874 reset_wfp_status(); // reset all the status bits
916 #endif
875 #endif
917
876
918 return status;
877 return status;
919 }
878 }
920
879
921 int enter_mode(unsigned char mode, ccsdsTelecommandPacket_t *TC )
880 int enter_mode(unsigned char mode, ccsdsTelecommandPacket_t *TC )
922 {
881 {
923 rtems_status_code status;
882 rtems_status_code status;
924
883
884 status = RTEMS_UNSATISFIED;
885
886 housekeeping_packet.lfr_status_word[0] = (unsigned char) ((mode << 4) + 0x0d);
887 lfrCurrentMode = mode;
888
925 switch(mode){
889 switch(mode){
926 case LFR_MODE_STANDBY:
890 case LFR_MODE_STANDBY:
927 status = enter_standby_mode( TC );
891 status = enter_standby_mode( TC );
928 break;
892 break;
929 case LFR_MODE_NORMAL:
893 case LFR_MODE_NORMAL:
930 status = enter_normal_mode( TC );
894 status = enter_normal_mode( TC );
931 break;
895 break;
932 case LFR_MODE_BURST:
896 case LFR_MODE_BURST:
933 status = enter_burst_mode( TC );
897 status = enter_burst_mode( TC );
934 break;
898 break;
935 case LFR_MODE_SBM1:
899 case LFR_MODE_SBM1:
936 status = enter_sbm1_mode( TC );
900 status = enter_sbm1_mode( TC );
937 break;
901 break;
938 case LFR_MODE_SBM2:
902 case LFR_MODE_SBM2:
939 status = enter_sbm2_mode( TC );
903 status = enter_sbm2_mode( TC );
940 break;
904 break;
941 default:
905 default:
942 status = RTEMS_UNSATISFIED;
906 status = RTEMS_UNSATISFIED;
943 }
907 }
944
908
945 if (status == RTEMS_SUCCESSFUL)
909 if (status != RTEMS_SUCCESSFUL)
946 {
910 {
947 housekeeping_packet.lfr_status_word[0] = (unsigned char) ((mode << 4) + 0x0d);
911 PRINTF("in enter_mode *** ERR\n")
912 status = RTEMS_UNSATISFIED;
948 }
913 }
949
914
950 return status;
915 return status;
951 }
916 }
952
917
953 int enter_standby_mode(ccsdsTelecommandPacket_t *TC)
918 int enter_standby_mode()
954 {
919 {
920 reset_waveform_picker_regs();
921 #ifdef PRINT_TASK_STATISTICS
922 rtems_cpu_usage_report();
923 #endif
955 return LFR_SUCCESSFUL;
924 return LFR_SUCCESSFUL;
956 }
925 }
957
926
958 int enter_normal_mode( ccsdsTelecommandPacket_t *TC )
927 int enter_normal_mode()
959 {
928 {
960 rtems_status_code status;
929 rtems_status_code status;
961
930
962 status = restart_science_tasks();
931 status = restart_science_tasks();
963
932
964 #ifdef GSA
933 #ifdef GSA
965 timer_start( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_WF_SIMULATOR );
934 timer_start( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_WF_SIMULATOR );
966 timer_start( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR );
935 timer_start( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR );
967 LEON_Clear_interrupt( IRQ_WF );
936 LEON_Clear_interrupt( IRQ_WF );
968 LEON_Unmask_interrupt( IRQ_WF );
937 LEON_Unmask_interrupt( IRQ_WF );
969 //
938 //
970 set_local_nb_interrupt_f0_MAX();
939 set_local_nb_interrupt_f0_MAX();
971 LEON_Clear_interrupt( IRQ_SM ); // the IRQ_SM seems to be incompatible with the IRQ_WF on the xilinx board
940 LEON_Clear_interrupt( IRQ_SM ); // the IRQ_SM seems to be incompatible with the IRQ_WF on the xilinx board
972 LEON_Unmask_interrupt( IRQ_SM );
941 LEON_Unmask_interrupt( IRQ_SM );
973 #else
942 #else
943 //****************
974 // waveform picker
944 // waveform picker
975 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
945 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
976 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
946 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
977 reset_waveform_picker_regs();
947 reset_waveform_picker_regs();
978 set_wfp_burst_enable_register(LFR_MODE_NORMAL);
948 set_wfp_burst_enable_register(LFR_MODE_NORMAL);
949 //****************
979 // spectral matrix
950 // spectral matrix
980 //
981 set_local_nb_interrupt_f0_MAX();
951 set_local_nb_interrupt_f0_MAX();
982 LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); // the IRQ_SM seems to be incompatible with the IRQ_WF on the xilinx board
952 LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); // the IRQ_SM seems to be incompatible with the IRQ_WF on the xilinx board
983 LEON_Unmask_interrupt( IRQ_SPECTRAL_MATRIX );
953 LEON_Unmask_interrupt( IRQ_SPECTRAL_MATRIX );
984 spectral_matrix_regs->config = 0x01;
954 spectral_matrix_regs->config = 0x01;
985 spectral_matrix_regs->status = 0x00;
955 spectral_matrix_regs->status = 0x00;
986 #endif
956 #endif
987
957
988 return status;
958 return status;
989 }
959 }
990
960
991 int enter_burst_mode(ccsdsTelecommandPacket_t *TC)
961 int enter_burst_mode()
992 {
962 {
993 rtems_status_code status;
963 rtems_status_code status;
994 unsigned char lfrMode;
964 unsigned char lfrMode;
995
965
996 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
966 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
997
967
998 status = restart_science_tasks();
968 status = restart_science_tasks();
999
969
1000 #ifdef GSA
970 #ifdef GSA
971 LEON_Unmask_interrupt( IRQ_SM );
1001 #else
972 #else
1002 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
973 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
1003 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
974 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
1004 reset_waveform_picker_regs();
975 reset_waveform_picker_regs();
1005 set_wfp_burst_enable_register(LFR_MODE_BURST);
976 set_wfp_burst_enable_register(LFR_MODE_BURST);
1006 waveform_picker_regs->burst_enable = 0x40; // [0100 0000] burst f2, f1, f0 enable f3 f2 f1 f0
1007 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x04;
1008 waveform_picker_regs->status = 0x00;
1009 #endif
977 #endif
1010
978
1011 LEON_Unmask_interrupt( IRQ_SM );
1012
1013 return status;
979 return status;
1014 }
980 }
1015
981
1016 int enter_sbm1_mode(ccsdsTelecommandPacket_t *TC)
982 int enter_sbm1_mode()
1017 {
983 {
1018 rtems_status_code status;
984 rtems_status_code status;
1019
985
1020 status = restart_science_tasks();
986 status = restart_science_tasks();
1021
987
1022 set_local_sbm1_nb_cwf_max();
988 set_local_sbm1_nb_cwf_max();
1023
989
1024 reset_local_sbm1_nb_cwf_sent();
990 reset_local_sbm1_nb_cwf_sent();
1025
991
1026 #ifdef GSA
992 #ifdef GSA
993 LEON_Unmask_interrupt( IRQ_SM );
1027 #else
994 #else
1028 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
995 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
1029 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
996 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
1030 reset_waveform_picker_regs();
997 reset_waveform_picker_regs();
1031 set_wfp_burst_enable_register(LFR_MODE_SBM1);
998 set_wfp_burst_enable_register(LFR_MODE_SBM1);
1032 waveform_picker_regs->status = 0x00;
1033 #endif
999 #endif
1034
1000
1035 LEON_Unmask_interrupt( IRQ_SM );
1036
1037 return status;
1001 return status;
1038 }
1002 }
1039
1003
1040 int enter_sbm2_mode(ccsdsTelecommandPacket_t *TC)
1004 int enter_sbm2_mode()
1041 {
1005 {
1042 rtems_status_code status;
1006 rtems_status_code status;
1043
1007
1044 status = restart_science_tasks();
1008 status = restart_science_tasks();
1045
1009
1046 set_local_sbm2_nb_cwf_max();
1010 set_local_sbm2_nb_cwf_max();
1047
1011
1048 reset_local_sbm2_nb_cwf_sent();
1012 reset_local_sbm2_nb_cwf_sent();
1049
1013
1050 #ifdef GSA
1014 #ifdef GSA
1015 LEON_Unmask_interrupt( IRQ_SM );
1051 #else
1016 #else
1052 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
1017 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
1053 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
1018 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
1054 reset_waveform_picker_regs();
1019 reset_waveform_picker_regs();
1055 set_wfp_burst_enable_register(LFR_MODE_SBM2);
1020 set_wfp_burst_enable_register(LFR_MODE_SBM2);
1056 waveform_picker_regs->status = 0x00;
1057 #endif
1021 #endif
1058
1022
1059 LEON_Unmask_interrupt( IRQ_SM );
1060
1061 return status;
1023 return status;
1062 }
1024 }
1063
1025
1064 int restart_science_tasks()
1026 int restart_science_tasks()
1065 {
1027 {
1066 rtems_status_code status;
1028 rtems_status_code status[6];
1029 rtems_status_code ret;
1067
1030
1068 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
1031 ret = RTEMS_SUCCESSFUL;
1069
1032
1070 if (status == RTEMS_SUCCESSFUL) {
1033 status[0] = rtems_task_restart( Task_id[TASKID_AVF0], 1 );
1071 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
1034 status[1] = rtems_task_restart( Task_id[TASKID_BPF0],1 );
1072 if (status == RTEMS_SUCCESSFUL) {
1035 status[2] = rtems_task_restart( Task_id[TASKID_WFRM],1 );
1073 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
1036 status[3] = rtems_task_restart( Task_id[TASKID_CWF3],1 );
1074 if (status == RTEMS_SUCCESSFUL) {
1037 status[4] = rtems_task_restart( Task_id[TASKID_CWF2],1 );
1075 status = rtems_task_restart( Task_id[TASKID_CWF3], 0 );
1038 status[5] = rtems_task_restart( Task_id[TASKID_CWF1],1 );
1076 }
1039
1077 }
1040 if ( (status[0] != RTEMS_SUCCESSFUL) || (status[1] != RTEMS_SUCCESSFUL) || (status[2] != RTEMS_SUCCESSFUL) ||
1041 (status[3] != RTEMS_SUCCESSFUL) || (status[4] != RTEMS_SUCCESSFUL) || (status[5] != RTEMS_SUCCESSFUL) )
1042 {
1043 ret = RTEMS_UNSATISFIED;
1044 PRINTF("in restart_science_tasks *** ERR\n")
1078 }
1045 }
1079
1046
1080 return status;
1047 return ret;
1081 }
1048 }
1082
1049
1083 int suspend_science_tasks()
1050 int suspend_science_tasks()
1084 {
1051 {
1085 rtems_status_code status;
1052 rtems_status_code status[6];
1053 rtems_status_code ret;
1054
1055 ret = RTEMS_SUCCESSFUL;
1086
1056
1087 status = rtems_task_suspend( Task_id[TASKID_AVF0] );
1057 status[0] = rtems_task_suspend( Task_id[TASKID_AVF0] );
1088 if (status == RTEMS_SUCCESSFUL) {
1058 status[1] = rtems_task_suspend( Task_id[TASKID_BPF0] );
1089 status = rtems_task_suspend( Task_id[TASKID_BPF0] );
1059 status[2] = rtems_task_suspend( Task_id[TASKID_WFRM] );
1090 if (status == RTEMS_SUCCESSFUL) {
1060 status[3] = rtems_task_suspend( Task_id[TASKID_CWF3] );
1091 status = rtems_task_suspend( Task_id[TASKID_WFRM] );
1061 status[4] = rtems_task_suspend( Task_id[TASKID_CWF2] );
1092 if (status == RTEMS_SUCCESSFUL) {
1062 status[5] = rtems_task_suspend( Task_id[TASKID_CWF1] );
1093 status = rtems_task_suspend( Task_id[TASKID_CWF3] );
1063
1094 }
1064 if ( (status[0] != RTEMS_SUCCESSFUL) || (status[1] != RTEMS_SUCCESSFUL) || (status[2] != RTEMS_SUCCESSFUL) ||
1095 }
1065 (status[3] != RTEMS_SUCCESSFUL) || (status[4] != RTEMS_SUCCESSFUL) || (status[5] != RTEMS_SUCCESSFUL) )
1066 {
1067 ret = RTEMS_UNSATISFIED;
1068 PRINTF("in suspend_science_tasks *** ERR\n")
1096 }
1069 }
1097
1070
1098 return status;
1071 return ret;
1099 }
1072 }
1100
1073
1101 //****************
1074 //****************
1102 // CLOSING ACTIONS
1075 // CLOSING ACTIONS
1103
1076
1104 int send_tm_lfr_tc_exe_success(ccsdsTelecommandPacket_t *TC)
1077 int send_tm_lfr_tc_exe_success(ccsdsTelecommandPacket_t *TC)
1105 {
1078 {
1079 int ret;
1106 rtems_status_code status;
1080 rtems_status_code status;
1107 TMHeader_t TM_header;
1081 TMHeader_t TM_header;
1108 char data[4];
1082 char data[4];
1109 spw_ioctl_pkt_send spw_ioctl_send;
1083 spw_ioctl_pkt_send spw_ioctl_send;
1110
1084
1111 TM_build_header( TM_LFR_TC_EXE_OK, PACKET_LENGTH_TC_EXE_SUCCESS,
1085 TM_build_header( TM_LFR_TC_EXE_OK, PACKET_LENGTH_TC_EXE_SUCCESS,
1112 &TM_header,
1086 &TM_header,
1113 TC->sourceID); // TC source ID
1087 TC->sourceID); // TC source ID
1114
1088
1115 data[0] = TC->packetID[0];
1089 data[0] = TC->packetID[0];
1116 data[1] = TC->packetID[1];
1090 data[1] = TC->packetID[1];
1117 data[2] = TC->packetSequenceControl[0];
1091 data[2] = TC->packetSequenceControl[0];
1118 data[3] = TC->packetSequenceControl[1];
1092 data[3] = TC->packetSequenceControl[1];
1119
1093
1120 // filling the structure for the spacewire transmission
1094 // filling the structure for the spacewire transmission
1121 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1095 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1122 spw_ioctl_send.hdr = (char*) &TM_header;
1096 spw_ioctl_send.hdr = (char*) &TM_header;
1123 spw_ioctl_send.dlen = 4;
1097 spw_ioctl_send.dlen = 4;
1124 spw_ioctl_send.data = data;
1098 spw_ioctl_send.data = data;
1125 spw_ioctl_send.options = 0;
1099 spw_ioctl_send.options = 0;
1126
1100
1127 // SEND DATA
1101 // SEND DATA
1128 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1102 //status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1103 status = rtems_message_queue_send( misc_id[1], &spw_ioctl_send, sizeof(spw_ioctl_send));
1104 if (status != RTEMS_SUCCESSFUL) {
1105 PRINTF("in send_tm_lfr_tc_exe_success *** ERR\n")
1106 ret = LFR_DEFAULT;
1107 }
1129
1108
1130 return LFR_SUCCESSFUL;
1109 return ret;
1131 }
1110 }
1132
1111
1133 int send_tm_lfr_tc_exe_not_executable(ccsdsTelecommandPacket_t *TC)
1112 int send_tm_lfr_tc_exe_not_executable(ccsdsTelecommandPacket_t *TC)
1134 {
1113 {
1135 rtems_status_code status;
1114 rtems_status_code status;
1136 TMHeader_t TM_header;
1115 TMHeader_t TM_header;
1137 char data[10];
1116 char data[10];
1138 spw_ioctl_pkt_send spw_ioctl_send;
1117 spw_ioctl_pkt_send spw_ioctl_send;
1139
1118
1140 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_NOT_EXECUTABLE,
1119 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_NOT_EXECUTABLE,
1141 &TM_header,
1120 &TM_header,
1142 TC->sourceID); // TC source ID
1121 TC->sourceID); // TC source ID
1143
1122
1144 data[0] = (char) (FAILURE_CODE_NOT_EXECUTABLE >> 8);
1123 data[0] = (char) (FAILURE_CODE_NOT_EXECUTABLE >> 8);
1145 data[1] = (char) FAILURE_CODE_NOT_EXECUTABLE;
1124 data[1] = (char) FAILURE_CODE_NOT_EXECUTABLE;
1146 data[2] = TC->packetID[0];
1125 data[2] = TC->packetID[0];
1147 data[3] = TC->packetID[1];
1126 data[3] = TC->packetID[1];
1148 data[4] = TC->packetSequenceControl[0];
1127 data[4] = TC->packetSequenceControl[0];
1149 data[5] = TC->packetSequenceControl[1];
1128 data[5] = TC->packetSequenceControl[1];
1150 data[6] = TC->serviceType; // type of the rejected TC
1129 data[6] = TC->serviceType; // type of the rejected TC
1151 data[7] = TC->serviceSubType; // subtype of the rejected TC
1130 data[7] = TC->serviceSubType; // subtype of the rejected TC
1152 data[8] = housekeeping_packet.lfr_status_word[0];
1131 data[8] = housekeeping_packet.lfr_status_word[0];
1153 data[6] = housekeeping_packet.lfr_status_word[1];
1132 data[6] = housekeeping_packet.lfr_status_word[1];
1154
1133
1155 // filling the structure for the spacewire transmission
1134 // filling the structure for the spacewire transmission
1156 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1135 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1157 spw_ioctl_send.hdr = (char*) &TM_header;
1136 spw_ioctl_send.hdr = (char*) &TM_header;
1158 spw_ioctl_send.dlen = 10;
1137 spw_ioctl_send.dlen = 10;
1159 spw_ioctl_send.data = data;
1138 spw_ioctl_send.data = data;
1160 spw_ioctl_send.options = 0;
1139 spw_ioctl_send.options = 0;
1161
1140
1162 // SEND DATA
1141 // SEND DATA
1163 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1142 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1164
1143
1165 return LFR_SUCCESSFUL;
1144 return LFR_SUCCESSFUL;
1166 }
1145 }
1167
1146
1168 int send_tm_lfr_tc_exe_not_implemented(ccsdsTelecommandPacket_t *TC)
1147 int send_tm_lfr_tc_exe_not_implemented(ccsdsTelecommandPacket_t *TC)
1169 {
1148 {
1170 rtems_status_code status;
1149 rtems_status_code status;
1171 TMHeader_t TM_header;
1150 TMHeader_t TM_header;
1172 char data[8];
1151 char data[8];
1173 spw_ioctl_pkt_send spw_ioctl_send;
1152 spw_ioctl_pkt_send spw_ioctl_send;
1174
1153
1175 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED,
1154 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED,
1176 &TM_header,
1155 &TM_header,
1177 TC->sourceID); // TC source ID
1156 TC->sourceID); // TC source ID
1178
1157
1179 data[0] = (char) (FAILURE_CODE_NOT_IMPLEMENTED >> 8);
1158 data[0] = (char) (FAILURE_CODE_NOT_IMPLEMENTED >> 8);
1180 data[1] = (char) FAILURE_CODE_NOT_IMPLEMENTED;
1159 data[1] = (char) FAILURE_CODE_NOT_IMPLEMENTED;
1181 data[2] = TC->packetID[0];
1160 data[2] = TC->packetID[0];
1182 data[3] = TC->packetID[1];
1161 data[3] = TC->packetID[1];
1183 data[4] = TC->packetSequenceControl[0];
1162 data[4] = TC->packetSequenceControl[0];
1184 data[5] = TC->packetSequenceControl[1];
1163 data[5] = TC->packetSequenceControl[1];
1185 data[6] = TC->serviceType; // type of the rejected TC
1164 data[6] = TC->serviceType; // type of the rejected TC
1186 data[7] = TC->serviceSubType; // subtype of the rejected TC
1165 data[7] = TC->serviceSubType; // subtype of the rejected TC
1187
1166
1188 // filling the structure for the spacewire transmission
1167 // filling the structure for the spacewire transmission
1189 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1168 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1190 spw_ioctl_send.hdr = (char*) &TM_header;
1169 spw_ioctl_send.hdr = (char*) &TM_header;
1191 spw_ioctl_send.dlen = 8;
1170 spw_ioctl_send.dlen = 8;
1192 spw_ioctl_send.data = data;
1171 spw_ioctl_send.data = data;
1193 spw_ioctl_send.options = 0;
1172 spw_ioctl_send.options = 0;
1194
1173
1195 // SEND DATA
1174 // SEND DATA
1196 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1175 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1197
1176
1198 return LFR_SUCCESSFUL;
1177 return LFR_SUCCESSFUL;
1199 }
1178 }
1200
1179
1201 int send_tm_lfr_tc_exe_error(ccsdsTelecommandPacket_t *TC)
1180 int send_tm_lfr_tc_exe_error(ccsdsTelecommandPacket_t *TC)
1202 {
1181 {
1203 rtems_status_code status;
1182 rtems_status_code status;
1204 TMHeader_t TM_header;
1183 TMHeader_t TM_header;
1205 char data[8];
1184 char data[8];
1206 spw_ioctl_pkt_send spw_ioctl_send;
1185 spw_ioctl_pkt_send spw_ioctl_send;
1207
1186
1208 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_ERROR,
1187 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_ERROR,
1209 &TM_header,
1188 &TM_header,
1210 TC->sourceID); // TC source ID
1189 TC->sourceID); // TC source ID
1211
1190
1212 data[0] = (char) (FAILURE_CODE_ERROR >> 8);
1191 data[0] = (char) (FAILURE_CODE_ERROR >> 8);
1213 data[1] = (char) FAILURE_CODE_ERROR;
1192 data[1] = (char) FAILURE_CODE_ERROR;
1214 data[2] = TC->packetID[0];
1193 data[2] = TC->packetID[0];
1215 data[3] = TC->packetID[1];
1194 data[3] = TC->packetID[1];
1216 data[4] = TC->packetSequenceControl[0];
1195 data[4] = TC->packetSequenceControl[0];
1217 data[5] = TC->packetSequenceControl[1];
1196 data[5] = TC->packetSequenceControl[1];
1218 data[6] = TC->serviceType; // type of the rejected TC
1197 data[6] = TC->serviceType; // type of the rejected TC
1219 data[7] = TC->serviceSubType; // subtype of the rejected TC
1198 data[7] = TC->serviceSubType; // subtype of the rejected TC
1220
1199
1221 // filling the structure for the spacewire transmission
1200 // filling the structure for the spacewire transmission
1222 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1201 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1223 spw_ioctl_send.hdr = (char*) &TM_header;
1202 spw_ioctl_send.hdr = (char*) &TM_header;
1224 spw_ioctl_send.dlen = 8;
1203 spw_ioctl_send.dlen = 8;
1225 spw_ioctl_send.data = data;
1204 spw_ioctl_send.data = data;
1226 spw_ioctl_send.options = 0;
1205 spw_ioctl_send.options = 0;
1227
1206
1228 // SEND DATA
1207 // SEND DATA
1229 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1208 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1230
1209
1231 return LFR_SUCCESSFUL;
1210 return LFR_SUCCESSFUL;
1232 }
1211 }
1233
1212
1234 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC)
1213 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC)
1235 {
1214 {
1236 housekeeping_packet.hk_lfr_last_exe_tc_id[0] = TC->packetID[0];
1215 housekeeping_packet.hk_lfr_last_exe_tc_id[0] = TC->packetID[0];
1237 housekeeping_packet.hk_lfr_last_exe_tc_id[1] = TC->packetID[1];
1216 housekeeping_packet.hk_lfr_last_exe_tc_id[1] = TC->packetID[1];
1238 housekeeping_packet.hk_lfr_last_exe_tc_type[0] = 0x00;
1217 housekeeping_packet.hk_lfr_last_exe_tc_type[0] = 0x00;
1239 housekeeping_packet.hk_lfr_last_exe_tc_type[1] = TC->serviceType;
1218 housekeeping_packet.hk_lfr_last_exe_tc_type[1] = TC->serviceType;
1240 housekeeping_packet.hk_lfr_last_exe_tc_subtype[0] = 0x00;
1219 housekeeping_packet.hk_lfr_last_exe_tc_subtype[0] = 0x00;
1241 housekeeping_packet.hk_lfr_last_exe_tc_subtype[1] = TC->serviceSubType;
1220 housekeeping_packet.hk_lfr_last_exe_tc_subtype[1] = TC->serviceSubType;
1242 housekeeping_packet.hk_lfr_last_exe_tc_time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
1221 housekeeping_packet.hk_lfr_last_exe_tc_time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
1243 housekeeping_packet.hk_lfr_last_exe_tc_time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
1222 housekeeping_packet.hk_lfr_last_exe_tc_time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
1244 housekeeping_packet.hk_lfr_last_exe_tc_time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
1223 housekeeping_packet.hk_lfr_last_exe_tc_time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
1245 housekeeping_packet.hk_lfr_last_exe_tc_time[3] = (unsigned char) (time_management_regs->coarse_time);
1224 housekeeping_packet.hk_lfr_last_exe_tc_time[3] = (unsigned char) (time_management_regs->coarse_time);
1246 housekeeping_packet.hk_lfr_last_exe_tc_time[4] = (unsigned char) (time_management_regs->fine_time>>8);
1225 housekeeping_packet.hk_lfr_last_exe_tc_time[4] = (unsigned char) (time_management_regs->fine_time>>8);
1247 housekeeping_packet.hk_lfr_last_exe_tc_time[5] = (unsigned char) (time_management_regs->fine_time);
1226 housekeeping_packet.hk_lfr_last_exe_tc_time[5] = (unsigned char) (time_management_regs->fine_time);
1248 }
1227 }
1249
1228
1250 void update_last_TC_rej(ccsdsTelecommandPacket_t *TC)
1229 void update_last_TC_rej(ccsdsTelecommandPacket_t *TC)
1251 {
1230 {
1252 housekeeping_packet.hk_lfr_last_rej_tc_id[0] = TC->packetID[0];
1231 housekeeping_packet.hk_lfr_last_rej_tc_id[0] = TC->packetID[0];
1253 housekeeping_packet.hk_lfr_last_rej_tc_id[1] = TC->packetID[1];
1232 housekeeping_packet.hk_lfr_last_rej_tc_id[1] = TC->packetID[1];
1254 housekeeping_packet.hk_lfr_last_rej_tc_type[0] = 0x00;
1233 housekeeping_packet.hk_lfr_last_rej_tc_type[0] = 0x00;
1255 housekeeping_packet.hk_lfr_last_rej_tc_type[1] = TC->serviceType;
1234 housekeeping_packet.hk_lfr_last_rej_tc_type[1] = TC->serviceType;
1256 housekeeping_packet.hk_lfr_last_rej_tc_subtype[0] = 0x00;
1235 housekeeping_packet.hk_lfr_last_rej_tc_subtype[0] = 0x00;
1257 housekeeping_packet.hk_lfr_last_rej_tc_subtype[1] = TC->serviceSubType;
1236 housekeeping_packet.hk_lfr_last_rej_tc_subtype[1] = TC->serviceSubType;
1258 housekeeping_packet.hk_lfr_last_rej_tc_time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
1237 housekeeping_packet.hk_lfr_last_rej_tc_time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
1259 housekeeping_packet.hk_lfr_last_rej_tc_time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
1238 housekeeping_packet.hk_lfr_last_rej_tc_time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
1260 housekeeping_packet.hk_lfr_last_rej_tc_time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
1239 housekeeping_packet.hk_lfr_last_rej_tc_time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
1261 housekeeping_packet.hk_lfr_last_rej_tc_time[3] = (unsigned char) (time_management_regs->coarse_time);
1240 housekeeping_packet.hk_lfr_last_rej_tc_time[3] = (unsigned char) (time_management_regs->coarse_time);
1262 housekeeping_packet.hk_lfr_last_rej_tc_time[4] = (unsigned char) (time_management_regs->fine_time>>8);
1241 housekeeping_packet.hk_lfr_last_rej_tc_time[4] = (unsigned char) (time_management_regs->fine_time>>8);
1263 housekeeping_packet.hk_lfr_last_rej_tc_time[5] = (unsigned char) (time_management_regs->fine_time);
1242 housekeeping_packet.hk_lfr_last_rej_tc_time[5] = (unsigned char) (time_management_regs->fine_time);
1264 }
1243 }
1265
1244
1266 void close_action(ccsdsTelecommandPacket_t *TC, int result)
1245 void close_action(ccsdsTelecommandPacket_t *TC, int result)
1267 {
1246 {
1268 unsigned int val = 0;
1247 unsigned int val = 0;
1269 if (result == LFR_SUCCESSFUL)
1248 if (result == LFR_SUCCESSFUL)
1270 {
1249 {
1271 send_tm_lfr_tc_exe_success( TC );
1250 if ( !( (TC->serviceType==TC_TYPE_TIME) && (TC->serviceSubType==TC_SUBTYPE_UPDT_TIME) ) )
1251 {
1252 send_tm_lfr_tc_exe_success( TC );
1253 }
1272 update_last_TC_exe( TC );
1254 update_last_TC_exe( TC );
1273 val = housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[0] * 256 + housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[1];
1255 val = housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[0] * 256 + housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[1];
1274 val++;
1256 val++;
1275 housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[0] = (unsigned char) (val >> 8);
1257 housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[0] = (unsigned char) (val >> 8);
1276 housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[1] = (unsigned char) (val);
1258 housekeeping_packet.hk_dpu_exe_tc_lfr_cnt[1] = (unsigned char) (val);
1277 }
1259 }
1278 else
1260 else
1279 {
1261 {
1280 update_last_TC_rej( TC );
1262 update_last_TC_rej( TC );
1281 val = housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[0] * 256 + housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[1];
1263 val = housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[0] * 256 + housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[1];
1282 val++;
1264 val++;
1283 housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[0] = (unsigned char) (val >> 8);
1265 housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[0] = (unsigned char) (val >> 8);
1284 housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[1] = (unsigned char) (val);
1266 housekeeping_packet.hk_dpu_rej_tc_lfr_cnt[1] = (unsigned char) (val);
1285 }
1267 }
1286 }
1268 }
1287
1269
1288 //***************************
1270 //***************************
1289 // Interrupt Service Routines
1271 // Interrupt Service Routines
1290 rtems_isr commutation_isr1( rtems_vector_number vector )
1272 rtems_isr commutation_isr1( rtems_vector_number vector )
1291 {
1273 {
1292 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) {
1293 printf("In commutation_isr1 *** Error sending event to DUMB\n");
1275 printf("In commutation_isr1 *** Error sending event to DUMB\n");
1294 }
1276 }
1295 }
1277 }
1296
1278
1297 rtems_isr commutation_isr2( rtems_vector_number vector )
1279 rtems_isr commutation_isr2( rtems_vector_number vector )
1298 {
1280 {
1299 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
1281 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
1300 printf("In commutation_isr2 *** Error sending event to DUMB\n");
1282 printf("In commutation_isr2 *** Error sending event to DUMB\n");
1301 }
1283 }
1302 }
1284 }
1303
1285
1304
1286
1305
1287
1306
1288
This diff has been collapsed as it changes many lines, (924 lines changed) Show them Hide them
@@ -1,826 +1,818
1 #include <wf_handler.h>
1 #include <wf_handler.h>
2
2
3 Header_TM_LFR_SCIENCE_SWF_t headerSWF_F0_F1_F2[3][7];
4 Header_TM_LFR_SCIENCE_CWF_t headerCWF_F1[7];
5 Header_TM_LFR_SCIENCE_CWF_t headerCWF_F2_BURST[7];
6 Header_TM_LFR_SCIENCE_CWF_t headerCWF_F2_SBM1[7];
7 Header_TM_LFR_SCIENCE_CWF_t headerCWF_F3[7];
8
9 unsigned char doubleSendCWF1 = 0;
10 unsigned char doubleSendCWF2 = 0;
11
3 rtems_isr waveforms_isr( rtems_vector_number vector )
12 rtems_isr waveforms_isr( rtems_vector_number vector )
4 {
13 {
5 unsigned char lfrMode;
6 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
7
14
8 #ifdef GSA
15 #ifdef GSA
9 #else
16 #else
10 if ( (lfrMode != LFR_MODE_STANDBY) & (lfrMode != LFR_MODE_BURST) )
17 if ( (lfrCurrentMode == LFR_MODE_NORMAL)
18 || (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) )
11 { // in modes other than STANDBY and BURST, send the CWF_F3 data
19 { // in modes other than STANDBY and BURST, send the CWF_F3 data
12 if ((waveform_picker_regs->status & 0x08) == 0x08){ // f3 is full
20 if ((waveform_picker_regs->status & 0x08) == 0x08){ // [1000] f3 is full
13 // (1) change the receiving buffer for the waveform picker
21 // (1) change the receiving buffer for the waveform picker
14 if (waveform_picker_regs->addr_data_f3 == (int) wf_cont_f3) {
22 if (waveform_picker_regs->addr_data_f3 == (int) wf_cont_f3) {
15 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3_bis);
23 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3_bis);
16 }
24 }
17 else {
25 else {
18 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3);
26 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3);
19 }
27 }
20 // (2) send an event for the waveforms transmission
28 // (2) send an event for the waveforms transmission
21 if (rtems_event_send( Task_id[TASKID_CWF3], RTEMS_EVENT_MODE_NORMAL_CWF_F3 ) != RTEMS_SUCCESSFUL) {
29 if (rtems_event_send( Task_id[TASKID_CWF3], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
22 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
30 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
23 }
31 }
24 waveform_picker_regs->status = waveform_picker_regs->status & 0x0007; // reset the f3 full bit to 0
32 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffff777; // reset f3 bits to 0, [1111 0111 0111 0111]
25 }
33 }
26 }
34 }
27 #endif
35 #endif
28
36
29 switch(lfrMode)
37 switch(lfrCurrentMode)
30 {
38 {
31 //********
39 //********
32 // STANDBY
40 // STANDBY
33 case(LFR_MODE_STANDBY):
41 case(LFR_MODE_STANDBY):
34 break;
42 break;
35
43
36 //******
44 //******
37 // NORMAL
45 // NORMAL
38 case(LFR_MODE_NORMAL):
46 case(LFR_MODE_NORMAL):
39 #ifdef GSA
47 #ifdef GSA
40 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
48 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
41 #else
49 #else
42 if ( (waveform_picker_regs->burst_enable & 0x7) == 0x0 ){ // if no channel is enable
50 if ( (waveform_picker_regs->status & 0x7) == 0x7 ){ // [0111] f2 f1 and f0 are full
51 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
43 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
52 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
44 }
53 }
45 else {
54 }
46 if ( (waveform_picker_regs->status & 0x7) == 0x7 ){ // f2 f1 and f0 are full
55 waveform_picker_regs->status = waveform_picker_regs->status & 0xf888; // [1111 1000 1000 1000] f2, f1, f0 bits =0
47 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable & 0x08;
48 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
49 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
50 }
51 }
52 }
53 #endif
56 #endif
54 break;
57 break;
55
58
56 //******
59 //******
57 // BURST
60 // BURST
58 case(LFR_MODE_BURST):
61 case(LFR_MODE_BURST):
59 #ifdef GSA
62 #ifdef GSA
60 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
63 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
61 #else
64 #else
62 if (waveform_picker_regs->burst_enable == 0x44) {
65 if ((waveform_picker_regs->status & 0x04) == 0x04){ // [0100] check the f2 full bit
63 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
66 // (1) change the receiving buffer for the waveform picker
64 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_bis);
67 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
65 }
68 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_bis);
66 else {
69 }
67 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
70 else {
68 }
71 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
69 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_BURST ) != RTEMS_SUCCESSFUL) {
70 PRINTF("in waveforms_isr *** Error sending event to WFRM\n")
71 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
72 }
73 }
72 }
74 waveform_picker_regs->status = 0x00;
73 // (2) send an event for the waveforms transmission
74 if (rtems_event_send( Task_id[TASKID_CWF2], RTEMS_EVENT_MODE_BURST ) != RTEMS_SUCCESSFUL) {
75 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
76 }
77 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffbbb; // [1111 1011 1011 1011] f2 bits = 0
78 }
75 #endif
79 #endif
76 break;
80 break;
77
81
78 //*****
82 //*****
79 // SBM1
83 // SBM1
80 case(LFR_MODE_SBM1):
84 case(LFR_MODE_SBM1):
81 #ifdef GSA
85 #ifdef GSA
82 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
86 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
83 #else
87 #else
84 if ((waveform_picker_regs->status & 0x02) == 0x02){ // [0010] check the f1 full bit
88 if ((waveform_picker_regs->status & 0x02) == 0x02){ // [0010] check the f1 full bit
85 // (1) change the receiving buffer for the waveform picker
89 // (1) change the receiving buffer for the waveform picker
86 if (waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) {
90 if ( param_local.local_sbm1_nb_cwf_sent == (param_local.local_sbm1_nb_cwf_max-1) )
87 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1_bis);
91 {
88 }
92 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1_norm);
89 else {
93 }
90 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1);
94 else if ( waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1_norm )
91 }
95 {
92 // (2) send an event for the waveforms transmission
96 doubleSendCWF1 = 1;
93 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_SBM1 ) != RTEMS_SUCCESSFUL) {
97 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1);
94 PRINTF("in waveforms_isr *** Error sending event to WFRM\n")
98 }
95 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
99 else if ( waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1 ) {
96 }
100 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1_bis);
97 waveform_picker_regs->status = waveform_picker_regs->status & 0x000d; // reset the f1 full bit to 0
98 }
101 }
99 if ( ( (waveform_picker_regs->status & 0x05) == 0x05 ) ) { // [0101] check the f2 and f0 full bit
102 else {
100 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
103 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1);
101 PRINTF("in waveforms_isr *** Error sending event to WFRM\n")
104 }
102 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
105 // (2) send an event for the waveforms transmission
103 }
106 if (rtems_event_send( Task_id[TASKID_CWF1], RTEMS_EVENT_MODE_SBM1 ) != RTEMS_SUCCESSFUL) {
104 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x05; // [0101] // enable f2 and f0
107 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
105 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffaaa; // set to 0 the bits related to f2 and f0
106 }
108 }
109 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffddd; // [1111 1101 1101 1101] f1 bit = 0
110 }
111 if ( ( (waveform_picker_regs->status & 0x05) == 0x05 ) ) { // [0101] check the f2 and f0 full bit
112 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
113 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
114 }
115 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffaaa; // [1111 1010 1010 1010] f2 and f0 bits = 0
116 reset_local_sbm1_nb_cwf_sent();
117 }
107
118
108 #endif
119 #endif
109 break;
120 break;
110
121
111 //*****
122 //*****
112 // SBM2
123 // SBM2
113 case(LFR_MODE_SBM2):
124 case(LFR_MODE_SBM2):
114 #ifdef GSA
125 #ifdef GSA
115 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
126 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
116 #else
127 #else
117 if ((waveform_picker_regs->status & 0x04) == 0x04){ // check the f2 full bit
128 if ((waveform_picker_regs->status & 0x04) == 0x04){ // [0100] check the f2 full bit
118 // (1) change the receiving buffer for the waveform picker
129 // (1) change the receiving buffer for the waveform picker
119 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
130 if ( waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2 ) {
120 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_bis);
131 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_bis);
121 }
132 }
122 else {
133 else {
123 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
134 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
124 }
135 }
125 // (2) send an event for the waveforms transmission
136 // (2) send an event for the waveforms transmission
126 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_SBM2 ) != RTEMS_SUCCESSFUL) {
137 if (rtems_event_send( Task_id[TASKID_CWF2], RTEMS_EVENT_MODE_SBM2 ) != RTEMS_SUCCESSFUL) {
127 PRINTF("in waveforms_isr *** Error sending event to WFRM\n")
138 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
128 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
129 }
130 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffbbb; // [1011]
131 }
139 }
132 if ( ( (waveform_picker_regs->status & 0x03) == 0x03 ) ) { // [0011] f3 f2 f1 f0, check the f2 and f0 full bit
140 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffbbb; // [1111 1011 1011 1011] f2 bit = 0
133 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
141 }
134 PRINTF("in waveforms_isr *** Error sending event to WFRM\n")
142 if ( ( (waveform_picker_regs->status & 0x03) == 0x03 ) ) { // [0011] f3 f2 f1 f0, f1 and f0 are full
135 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
143 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_SBM2 ) != RTEMS_SUCCESSFUL) {
136 }
144 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
137 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x03; // [0011] // enable f2 and f0
138 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffccc; // set to 0 the bits related to f1 and f0
139 }
145 }
146 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffccc; // [1111 1100 1100 1100] f1, f0 bits = 0
147 doubleSendCWF2 = 1;
148 reset_local_sbm2_nb_cwf_sent();
149 }
140 #endif
150 #endif
141 break;
151 break;
142
152
143 //********
153 //********
144 // DEFAULT
154 // DEFAULT
145 default:
155 default:
146 break;
156 break;
147 }
157 }
148 }
158 }
149
159
150 rtems_isr waveforms_simulator_isr( rtems_vector_number vector )
160 rtems_isr waveforms_simulator_isr( rtems_vector_number vector )
151 {
161 {
152 unsigned char lfrMode;
162 unsigned char lfrMode;
153 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
163 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
154
164
155 switch(lfrMode) {
165 switch(lfrMode) {
156 case (LFR_MODE_STANDBY):
166 case (LFR_MODE_STANDBY):
157 break;
167 break;
158 case (LFR_MODE_NORMAL):
168 case (LFR_MODE_NORMAL):
159 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
169 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
160 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_5 );
170 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_5 );
161 }
171 }
162 break;
172 break;
163 case (LFR_MODE_BURST):
173 case (LFR_MODE_BURST):
164 break;
174 break;
165 case (LFR_MODE_SBM1):
175 case (LFR_MODE_SBM1):
166 break;
176 break;
167 case (LFR_MODE_SBM2):
177 case (LFR_MODE_SBM2):
168 break;
178 break;
169 }
179 }
170 }
180 }
171
181
172 rtems_task wfrm_task(rtems_task_argument argument) //used with the waveform picker VHDL IP
182 rtems_task wfrm_task(rtems_task_argument argument) //used with the waveform picker VHDL IP
173 {
183 {
174 unsigned int i;
175 unsigned int intEventOut;
176 spw_ioctl_pkt_send spw_ioctl_send_SWF;
177 spw_ioctl_pkt_send spw_ioctl_send_CWF;
178 rtems_event_set event_out;
184 rtems_event_set event_out;
179 Header_TM_LFR_SCIENCE_SWF_t headerSWF;
180 Header_TM_LFR_SCIENCE_CWF_t headerCWF;
181
185
182 init_header_snapshot_wf( &headerSWF );
186 init_header_snapshot_wf_table( SID_NORM_SWF_F0 );
183 init_header_continuous_wf( &headerCWF );
187 init_header_snapshot_wf_table( SID_NORM_SWF_F1 );
184
188 init_header_snapshot_wf_table( SID_NORM_SWF_F2 );
185 // BUILD THE PACKET HEADERS
186 spw_ioctl_send_SWF.hlen = TM_HEADER_LEN + 4 + 12; // + 4 is for the protocole extra header, + 12 is for the auxiliary header
187 spw_ioctl_send_SWF.hdr = (char*) &headerSWF;
188 spw_ioctl_send_SWF.options = 0;
189
190 spw_ioctl_send_CWF.hlen = TM_HEADER_LEN + 4 + 10; // + 4 is for the protocole extra header, + 10 is for the auxiliary header
191 spw_ioctl_send_CWF.hdr = (char*) &headerCWF;
192 spw_ioctl_send_CWF.options = 0;
193
189
194 init_waveforms();
190 init_waveforms();
195
191
196 PRINTF("in WFRM ***\n")
192 PRINTF("in WFRM ***\n")
197
193
198 while(1){
194 while(1){
199 // wait for an RTEMS_EVENT
195 // wait for an RTEMS_EVENT
200 rtems_event_receive(RTEMS_EVENT_0 | RTEMS_EVENT_1 | RTEMS_EVENT_2 | RTEMS_EVENT_3 | RTEMS_EVENT_4,
196 rtems_event_receive(RTEMS_EVENT_MODE_NORMAL | RTEMS_EVENT_MODE_SBM1 | RTEMS_EVENT_MODE_SBM2,
201 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
197 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
202 intEventOut = (unsigned int) event_out;
203 for (i = 0; i< 5; i++) {
204 if ( ( (intEventOut >> i) & 0x0001) != 0 ) {
205
198
206 switch(i) {
199 switch( event_out) {
207
200
208 case(LFR_MODE_NORMAL):
201 case RTEMS_EVENT_MODE_NORMAL:
209 send_waveform_norm( &headerSWF, &spw_ioctl_send_SWF );
202 send_waveform_SWF(wf_snap_f0, SID_NORM_SWF_F0);
210 break;
203 send_waveform_SWF(wf_snap_f1, SID_NORM_SWF_F1);
204 send_waveform_SWF(wf_snap_f2, SID_NORM_SWF_F2);
205 #ifdef GSA
206 waveform_picker_regs->status = waveform_picker_regs->status & 0xf888; // [1111 1000 1000 1000] f2, f1, f0 bits =0
207 #endif
208 break;
211
209
212 case(LFR_MODE_BURST):
210 case RTEMS_EVENT_MODE_SBM1:
213 send_waveform_burst( &headerCWF, &spw_ioctl_send_CWF );
211 send_waveform_SWF(wf_snap_f0, SID_NORM_SWF_F0);
214 break;
212 send_waveform_SWF(wf_snap_f1_norm, SID_NORM_SWF_F1);
215
213 send_waveform_SWF(wf_snap_f2, SID_NORM_SWF_F2);
216 case(LFR_MODE_SBM1):
217 send_waveform_sbm1( &headerCWF, &spw_ioctl_send_CWF );
218 #ifdef GSA
214 #ifdef GSA
219 #else
215 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffaaa; // [1111 1010 1010 1010] f2, f0 bits = 0
220 if ( param_local.local_sbm1_nb_cwf_sent == (param_local.local_sbm1_nb_cwf_max-1) ) {
221 // send the f1 buffer as a NORM snapshot
222 if (waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) {
223 send_waveform_SWF( &headerSWF, wf_snap_f1_bis, SID_NORM_SWF_F1, &spw_ioctl_send_SWF );
224 }
225 else {
226 send_waveform_SWF( &headerSWF, wf_snap_f1, SID_NORM_SWF_F1, &spw_ioctl_send_SWF );
227 }
228 reset_local_sbm1_nb_cwf_sent();
229 }
230 else {
231 param_local.local_sbm1_nb_cwf_sent ++;
232 }
233 #endif
216 #endif
234 break;
217 break;
235
218
236 case(LFR_MODE_SBM2):
219 case RTEMS_EVENT_MODE_SBM2:
237 send_waveform_sbm2( &headerCWF, &spw_ioctl_send_CWF );
220 send_waveform_SWF(wf_snap_f0, SID_NORM_SWF_F0);
221 send_waveform_SWF(wf_snap_f1, SID_NORM_SWF_F1);
238 #ifdef GSA
222 #ifdef GSA
239 #else
223 waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffccc; // [1111 1100 1100 1100] f1, f0 bits = 0
240 if ( param_local.local_sbm2_nb_cwf_sent == (param_local.local_sbm2_nb_cwf_max-1) ) {
241 // send the f2 buffer as a NORM snapshot
242 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
243 send_waveform_SWF( &headerSWF, wf_snap_f2_bis, SID_NORM_SWF_F2, &spw_ioctl_send_SWF );
244 }
245 else {
246 send_waveform_SWF( &headerSWF, wf_snap_f2, SID_NORM_SWF_F2, &spw_ioctl_send_SWF );
247 }
248 reset_local_sbm2_nb_cwf_sent();
249 }
250 else {
251 param_local.local_sbm2_nb_cwf_sent ++;
252 }
253 #endif
224 #endif
254 break;
225 break;
226
227 default:
228 break;
229 }
255
230
256 default:
231 #ifdef GSA
257 break;
232 // irq processed, reset the related register of the timer unit
258 }
233 gptimer_regs->timer[TIMER_WF_SIMULATOR].ctrl = gptimer_regs->timer[TIMER_WF_SIMULATOR].ctrl | 0x00000010;
259 }
234 // clear the interruption
260 }
235 LEON_Unmask_interrupt( IRQ_WF );
236 #endif
261 }
237 }
262 }
238 }
263
239
264 rtems_task cwf3_task(rtems_task_argument argument) //used with the waveform picker VHDL IP
240 rtems_task cwf3_task(rtems_task_argument argument) //used with the waveform picker VHDL IP
265 {
241 {
266 spw_ioctl_pkt_send spw_ioctl_send_CWF;
267 rtems_event_set event_out;
242 rtems_event_set event_out;
268 Header_TM_LFR_SCIENCE_CWF_t headerCWF;
269
243
270 init_header_continuous_wf( &headerCWF );
244 init_header_continuous_wf_table( SID_NORM_CWF_F3, headerCWF_F3 );
271
272 // BUILD THE PACKET HEADER
273 spw_ioctl_send_CWF.hlen = TM_HEADER_LEN + 4 + 10; // + 4 is for the protocole extra header, + 10 is for the auxiliary header
274 spw_ioctl_send_CWF.hdr = (char*) &headerCWF;
275 spw_ioctl_send_CWF.options = 0;
276
245
277 PRINTF("in CWF3 ***\n")
246 PRINTF("in CWF3 ***\n")
278
247
279 while(1){
248 while(1){
280 // wait for an RTEMS_EVENT
249 // wait for an RTEMS_EVENT
281 rtems_event_receive( RTEMS_EVENT_5,
250 rtems_event_receive( RTEMS_EVENT_0,
282 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
251 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
283 PRINTF("send CWF F3 \n")
252 PRINTF("send CWF F3 \n")
284 send_waveform_norm_cwf_f3( &headerCWF, &spw_ioctl_send_CWF );
253 #ifdef GSA
254 #else
255 if (waveform_picker_regs->addr_data_f3 == (int) wf_cont_f3) {
256 send_waveform_CWF( wf_cont_f3_bis, SID_NORM_CWF_F3, headerCWF_F3 );
257 }
258 else {
259 send_waveform_CWF( wf_cont_f3, SID_NORM_CWF_F3, headerCWF_F3 );
260 }
261 #endif
262 }
263 }
264
265 rtems_task cwf2_task(rtems_task_argument argument) // ONLY USED IN BURST AND SBM2
266 {
267 rtems_event_set event_out;
268
269 init_header_continuous_wf_table( SID_BURST_CWF_F2, headerCWF_F2_BURST );
270 init_header_continuous_wf_table( SID_SBM2_CWF_F2, headerCWF_F2_SBM1 );
271
272 PRINTF("in CWF2 ***\n")
273
274 while(1){
275 // wait for an RTEMS_EVENT
276 rtems_event_receive( RTEMS_EVENT_MODE_BURST | RTEMS_EVENT_MODE_SBM2,
277 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
278 if (event_out == RTEMS_EVENT_MODE_BURST)
279 {
280 // F2
281 #ifdef GSA
282 #else
283 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
284 send_waveform_CWF( wf_snap_f2_bis, SID_BURST_CWF_F2, headerCWF_F2_BURST );
285 }
286 else {
287 send_waveform_CWF( wf_snap_f2, SID_BURST_CWF_F2, headerCWF_F2_BURST );
288 }
289 #endif
290 }
291 else if (event_out == RTEMS_EVENT_MODE_SBM2)
292 {
293 #ifdef GSA
294 #else
295 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
296 send_waveform_CWF( wf_snap_f2_bis, SID_SBM2_CWF_F2, headerCWF_F2_SBM1 );
297 }
298 else {
299 send_waveform_CWF( wf_snap_f2, SID_SBM2_CWF_F2, headerCWF_F2_SBM1 );
300 }
301 #endif
302 }
303 else
304 {
305 PRINTF1("in CWF2 *** ERR mode = %d\n", lfrCurrentMode)
306 }
307 }
308 }
309
310 rtems_task cwf1_task(rtems_task_argument argument) // ONLY USED IN SBM1
311 {
312 rtems_event_set event_out;
313
314 init_header_continuous_wf_table( SID_SBM1_CWF_F1, headerCWF_F1 );
315
316 PRINTF("in CWF1 ***\n")
317
318 while(1){
319 // wait for an RTEMS_EVENT
320 rtems_event_receive( RTEMS_EVENT_MODE_SBM1,
321 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
322 if (event_out == RTEMS_EVENT_MODE_SBM1)
323 {
324 #ifdef GSA
325 #else
326 if (doubleSendCWF1 == 1)
327 {
328 doubleSendCWF1 = 0;
329 send_waveform_CWF( wf_snap_f1_norm, SID_SBM1_CWF_F1, headerCWF_F1 );
330 }
331 else if (waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) {
332 send_waveform_CWF( wf_snap_f1_bis, SID_SBM1_CWF_F1, headerCWF_F1 );
333 }
334 else {
335 send_waveform_CWF( wf_snap_f1, SID_SBM1_CWF_F1, headerCWF_F1);
336 }
337 param_local.local_sbm1_nb_cwf_sent ++;
338 #endif
339 }
340 else
341 {
342 PRINTF1("in CWF1 *** ERR mode = %d\n", lfrCurrentMode)
343 }
285 }
344 }
286 }
345 }
287
346
288 //******************
347 //******************
289 // general functions
348 // general functions
290 void init_waveforms( void )
349 void init_waveforms( void )
291 {
350 {
292 int i = 0;
351 int i = 0;
293
352
294 for (i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++)
353 for (i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++)
295 {
354 {
296 //***
355 //***
297 // F0
356 // F0
298 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x88887777; //
357 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x88887777; //
299 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x22221111; //
358 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x22221111; //
300 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0x44443333; //
359 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0x44443333; //
301
360
302 //***
361 //***
303 // F1
362 // F1
304 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x22221111;
363 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x22221111;
305 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x44443333;
364 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x44443333;
306 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000;
365 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000;
307
366
308 //***
367 //***
309 // F2
368 // F2
310 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x44443333;
369 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x44443333;
311 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x22221111;
370 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x22221111;
312 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000;
371 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000;
313
372
314 //***
373 //***
315 // F3
374 // F3
316 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 0 ] = val1;
375 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 0 ] = val1;
317 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 1 ] = val2;
376 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 1 ] = val2;
318 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 2 ] = 0xaaaa0000;
377 //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 2 ] = 0xaaaa0000;
319 }
378 }
320 }
379 }
321
380
322 void init_header_snapshot_wf( Header_TM_LFR_SCIENCE_SWF_t *header)
381 int init_header_snapshot_wf_table( unsigned int sid)
323 {
382 {
324 header->targetLogicalAddress = CCSDS_DESTINATION_ID;
383 unsigned char i;
325 header->protocolIdentifier = CCSDS_PROTOCOLE_ID;
384 unsigned char j;
326 header->reserved = 0x00;
385
327 header->userApplication = CCSDS_USER_APP;
386 j = 0;
328 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL >> 8);
387
329 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL);
388 switch(sid)
330 header->packetSequenceControl[0] = 0xc0;
389 {
331 header->packetSequenceControl[1] = 0x00;
390 case SID_NORM_SWF_F0:
332 header->packetLength[0] = 0x00;
391 j = 0;
333 header->packetLength[1] = 0x00;
392 break;
334 // DATA FIELD HEADER
393 case SID_NORM_SWF_F1:
335 header->spare1_pusVersion_spare2 = 0x10;
394 j = 1;
336 header->serviceType = TM_TYPE_LFR_SCIENCE; // service type
395 break;
337 header->serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
396 case SID_NORM_SWF_F2:
338 header->destinationID = TM_DESTINATION_ID_GROUND;
397 j = 2;
339 // AUXILIARY DATA HEADER
398 break;
340 header->sid = 0x00;
399 default:
341 header->hkBIA = 0x1f;
400 return LFR_DEFAULT;
342 header->pktCnt = 0x07; // PKT_CNT
401 }
343 header->pktNr = 0x00; // PKT_NR
402
344 header->time[0] = 0x00;
403 for (i=0; i<7; i++)
345 header->time[0] = 0x00;
404 {
346 header->time[0] = 0x00;
405 headerSWF_F0_F1_F2[j][i].targetLogicalAddress = CCSDS_DESTINATION_ID;
347 header->time[0] = 0x00;
406 headerSWF_F0_F1_F2[j][i].protocolIdentifier = CCSDS_PROTOCOLE_ID;
348 header->time[0] = 0x00;
407 headerSWF_F0_F1_F2[j][i].reserved = DEFAULT_RESERVED;
349 header->time[0] = 0x00;
408 headerSWF_F0_F1_F2[j][i].userApplication = CCSDS_USER_APP;
350 header->blkNr[0] = 0x00; // BLK_NR MSB
409 headerSWF_F0_F1_F2[j][i].packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL >> 8);
351 header->blkNr[1] = 0x00; // BLK_NR LSB
410 headerSWF_F0_F1_F2[j][i].packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL);
411 if (i == 0)
412 {
413 headerSWF_F0_F1_F2[j][i].packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_FIRST;
414 headerSWF_F0_F1_F2[j][i].packetLength[0] = (unsigned char) (TM_LEN_SCI_SWF_340 >> 8);
415 headerSWF_F0_F1_F2[j][i].packetLength[1] = (unsigned char) (TM_LEN_SCI_SWF_340 );
416 headerSWF_F0_F1_F2[j][i].blkNr[0] = (unsigned char) (BLK_NR_340 >> 8);
417 headerSWF_F0_F1_F2[j][i].blkNr[1] = (unsigned char) (BLK_NR_340 );
418 }
419 else if (i == 6)
420 {
421 headerSWF_F0_F1_F2[j][i].packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_LAST;
422 headerSWF_F0_F1_F2[j][i].packetLength[0] = (unsigned char) (TM_LEN_SCI_SWF_8 >> 8);
423 headerSWF_F0_F1_F2[j][i].packetLength[1] = (unsigned char) (TM_LEN_SCI_SWF_8 );
424 headerSWF_F0_F1_F2[j][i].blkNr[0] = (unsigned char) (BLK_NR_8 >> 8);
425 headerSWF_F0_F1_F2[j][i].blkNr[1] = (unsigned char) (BLK_NR_8 );
426 }
427 else
428 {
429 headerSWF_F0_F1_F2[j][i].packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_CONTINUATION;
430 headerSWF_F0_F1_F2[j][i].packetLength[0] = (unsigned char) (TM_LEN_SCI_SWF_340 >> 8);
431 headerSWF_F0_F1_F2[j][i].packetLength[1] = (unsigned char) (TM_LEN_SCI_SWF_340 );
432 headerSWF_F0_F1_F2[j][i].blkNr[0] = (unsigned char) (BLK_NR_340 >> 8);
433 headerSWF_F0_F1_F2[j][i].blkNr[1] = (unsigned char) (BLK_NR_340 );
434 }
435 headerSWF_F0_F1_F2[j][i].packetSequenceControl[1] = TM_PACKET_SEQ_CNT_DEFAULT;
436 headerSWF_F0_F1_F2[j][i].pktCnt = DEFAULT_PKTCNT; // PKT_CNT
437 headerSWF_F0_F1_F2[j][i].pktNr = i+1; // PKT_NR
438 // DATA FIELD HEADER
439 headerSWF_F0_F1_F2[j][i].spare1_pusVersion_spare2 = DEFAULT_SPARE1_PUSVERSION_SPARE2;
440 headerSWF_F0_F1_F2[j][i].serviceType = TM_TYPE_LFR_SCIENCE; // service type
441 headerSWF_F0_F1_F2[j][i].serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
442 headerSWF_F0_F1_F2[j][i].destinationID = TM_DESTINATION_ID_GROUND;
443 // AUXILIARY DATA HEADER
444 headerSWF_F0_F1_F2[j][i].sid = sid;
445 headerSWF_F0_F1_F2[j][i].hkBIA = DEFAULT_HKBIA;
446 headerSWF_F0_F1_F2[j][i].time[0] = 0x00;
447 headerSWF_F0_F1_F2[j][i].time[0] = 0x00;
448 headerSWF_F0_F1_F2[j][i].time[0] = 0x00;
449 headerSWF_F0_F1_F2[j][i].time[0] = 0x00;
450 headerSWF_F0_F1_F2[j][i].time[0] = 0x00;
451 headerSWF_F0_F1_F2[j][i].time[0] = 0x00;
452 }
453 return LFR_SUCCESSFUL;
352 }
454 }
353
455
354 void init_header_continuous_wf( Header_TM_LFR_SCIENCE_CWF_t *header)
456 int init_header_continuous_wf_table( unsigned int sid, Header_TM_LFR_SCIENCE_CWF_t *headerCWF )
355 {
457 {
356 header->targetLogicalAddress = CCSDS_DESTINATION_ID;
458 unsigned int i;
357 header->protocolIdentifier = CCSDS_PROTOCOLE_ID;
459
358 header->reserved = 0x00;
460 for (i=0; i<7; i++)
359 header->userApplication = CCSDS_USER_APP;
461 {
360 header->packetID[0] = 0x00;
462 headerCWF[ i ].targetLogicalAddress = CCSDS_DESTINATION_ID;
361 header->packetID[1] = 0x00;
463 headerCWF[ i ].protocolIdentifier = CCSDS_PROTOCOLE_ID;
362 header->packetSequenceControl[0] = 0xc0;
464 headerCWF[ i ].reserved = DEFAULT_RESERVED;
363 header->packetSequenceControl[1] = 0x00;
465 headerCWF[ i ].userApplication = CCSDS_USER_APP;
364 header->packetLength[0] = 0x00;
466 headerCWF[ i ].packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 >> 8);
365 header->packetLength[1] = 0x00;
467 headerCWF[ i ].packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2);
366 // DATA FIELD HEADER
468 if (i == 0)
367 header->spare1_pusVersion_spare2 = 0x10;
469 {
368 header->serviceType = TM_TYPE_LFR_SCIENCE; // service type
470 headerCWF[ i ].packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_FIRST;
369 header->serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
471 headerCWF[ i ].packetLength[0] = (unsigned char) (TM_LEN_SCI_CWF_340 >> 8);
370 header->destinationID = TM_DESTINATION_ID_GROUND;
472 headerCWF[ i ].packetLength[1] = (unsigned char) (TM_LEN_SCI_CWF_340 );
371 // AUXILIARY DATA HEADER
473 headerCWF[ i ].blkNr[0] = (unsigned char) (BLK_NR_340 >> 8);
372 header->sid = 0x00;
474 headerCWF[ i ].blkNr[1] = (unsigned char) (BLK_NR_340 );
373 header->hkBIA = 0x1f;
475 }
374 header->time[0] = 0x00;
476 else if (i == 6)
375 header->time[0] = 0x00;
477 {
376 header->time[0] = 0x00;
478 headerCWF[ i ].packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_LAST;
377 header->time[0] = 0x00;
479 headerCWF[ i ].packetLength[0] = (unsigned char) (TM_LEN_SCI_CWF_8 >> 8);
378 header->time[0] = 0x00;
480 headerCWF[ i ].packetLength[1] = (unsigned char) (TM_LEN_SCI_CWF_8 );
379 header->time[0] = 0x00;
481 headerCWF[ i ].blkNr[0] = (unsigned char) (BLK_NR_8 >> 8);
380 header->blkNr[0] = 0x00; // BLK_NR MSB
482 headerCWF[ i ].blkNr[1] = (unsigned char) (BLK_NR_8 );
381 header->blkNr[1] = 0x00; // BLK_NR LSB
483 }
484 else
485 {
486 headerCWF[ i ].packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_CONTINUATION;
487 headerCWF[ i ].packetLength[0] = (unsigned char) (TM_LEN_SCI_CWF_340 >> 8);
488 headerCWF[ i ].packetLength[1] = (unsigned char) (TM_LEN_SCI_CWF_340 );
489 headerCWF[ i ].blkNr[0] = (unsigned char) (BLK_NR_340 >> 8);
490 headerCWF[ i ].blkNr[1] = (unsigned char) (BLK_NR_340 );
491 }
492 headerCWF[ i ].packetSequenceControl[1] = TM_PACKET_SEQ_CNT_DEFAULT;
493 // PKT_CNT
494 // PKT_NR
495 // DATA FIELD HEADER
496 headerCWF[ i ].spare1_pusVersion_spare2 = DEFAULT_SPARE1_PUSVERSION_SPARE2;
497 headerCWF[ i ].serviceType = TM_TYPE_LFR_SCIENCE; // service type
498 headerCWF[ i ].serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
499 headerCWF[ i ].destinationID = TM_DESTINATION_ID_GROUND;
500 // AUXILIARY DATA HEADER
501 headerCWF[ i ].sid = sid;
502 headerCWF[ i ].hkBIA = DEFAULT_HKBIA;
503 headerCWF[ i ].time[0] = 0x00;
504 headerCWF[ i ].time[0] = 0x00;
505 headerCWF[ i ].time[0] = 0x00;
506 headerCWF[ i ].time[0] = 0x00;
507 headerCWF[ i ].time[0] = 0x00;
508 headerCWF[ i ].time[0] = 0x00;
509 }
510 return LFR_SUCCESSFUL;
382 }
511 }
383
512
384 void reset_waveforms( void )
513 void reset_waveforms( void )
385 {
514 {
386 int i = 0;
515 int i = 0;
387
516
388 for (i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++)
517 for (i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++)
389 {
518 {
390 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x10002000;
519 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x10002000;
391 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET] = 0x20001000;
520 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET] = 0x20001000;
392 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x40008000;
521 wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x40008000;
393
522
394 //***
523 //***
395 // F1
524 // F1
396 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x1000f000;
525 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x1000f000;
397 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET] = 0xf0001000;
526 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET] = 0xf0001000;
398 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x40008000;
527 wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x40008000;
399
528
400 //***
529 //***
401 // F2
530 // F2
402 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x40008000;
531 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET] = 0x40008000;
403 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET] = 0x20001000;
532 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET] = 0x20001000;
404 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x10002000;
533 wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET] = 0x10002000;
405
534
406 //***
535 //***
407 // F3
536 // F3
408 /*wf_cont_f3[ i* NB_WORDS_SWF_BLK + 0 ] = build_value( i, i ); // v and 1
537 /*wf_cont_f3[ i* NB_WORDS_SWF_BLK + 0 ] = build_value( i, i ); // v and 1
409 wf_cont_f3[ i* NB_WORDS_SWF_BLK + 1 ] = build_value( i, i ); // e2 and b1
538 wf_cont_f3[ i* NB_WORDS_SWF_BLK + 1 ] = build_value( i, i ); // e2 and b1
410 wf_cont_f3[ i* NB_WORDS_SWF_BLK + 2 ] = build_value( i, i ); // b2 and b3*/
539 wf_cont_f3[ i* NB_WORDS_SWF_BLK + 2 ] = build_value( i, i ); // b2 and b3*/
411 }
540 }
412 }
541 }
413
542
414 void send_waveform_SWF( Header_TM_LFR_SCIENCE_SWF_t *header, volatile int *waveform,
543 int send_waveform_SWF( volatile int *waveform, unsigned int sid )
415 unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send)
416 {
544 {
417 unsigned int i = 0;
545 unsigned int i;
418 unsigned int length = 0;
546 unsigned int j;
547 int ret;
419 rtems_status_code status;
548 rtems_status_code status;
549 spw_ioctl_pkt_send spw_ioctl_send_SWF;
420
550
421 header->sid = (unsigned char) sid;
551 spw_ioctl_send_SWF.hlen = TM_HEADER_LEN + 4 + 12; // + 4 is for the protocole extra header, + 12 is for the auxiliary header
552 spw_ioctl_send_SWF.options = 0;
422
553
423 for (i=0; i<7; i++) // send waveform
554 j = 0;
555 ret = LFR_DEFAULT;
556
557 switch(sid)
424 {
558 {
425 header->pktNr = (unsigned char) i+1; // PKT_NR
559 case SID_NORM_SWF_F0:
426 // BUILD THE DATA
560 j = 0;
427 if (i==6) {
561 break;
428 spw_ioctl_send->dlen = 8 * NB_BYTES_SWF_BLK;
562 case SID_NORM_SWF_F1:
429 length = TM_LEN_SCI_SWF_8;
563 j = 1;
430 header->blkNr[0] = 0x00; // BLK_NR MSB
564 break;
431 header->blkNr[1] = 0x08; // BLK_NR LSB
565 case SID_NORM_SWF_F2:
432 }
566 j = 2;
433 else {
567 break;
434 spw_ioctl_send->dlen = 340 * NB_BYTES_SWF_BLK;
568 default:
435 length = TM_LEN_SCI_SWF_340;
569 ret = LFR_DEFAULT;
436 header->blkNr[0] = 0x01; // BLK_NR MSB
570 break;
437 header->blkNr[1] = 0x54; // BLK_NR LSB
438 }
439 spw_ioctl_send->data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) ];
440 // BUILD THE HEADER
441 header->packetLength[0] = (unsigned char) (length>>8);
442 header->packetLength[1] = (unsigned char) (length);
443 header->sid = (unsigned char) sid; // SID
444 // SET PACKET TIME
445 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
446 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
447 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
448 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
449 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
450 header->time[5] = (unsigned char) (time_management_regs->fine_time);
451 header->acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24);
452 header->acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16);
453 header->acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8);
454 header->acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time);
455 header->acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8);
456 header->acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time);
457 // SEND PACKET
458 status = write_spw(spw_ioctl_send);
459 if (status != RTEMS_SUCCESSFUL) {
460 while (true) {
461 if (status != RTEMS_SUCCESSFUL) {
462 status = write_spw(spw_ioctl_send);
463 //PRINTF1("%d", i)
464 sched_yield();
465 }
466 else {
467 //PRINTF("\n")
468 break;
469 }
470 }
471 }
472 }
571 }
473 }
474
475 void send_waveform_CWF( Header_TM_LFR_SCIENCE_CWF_t *header, volatile int *waveform,
476 unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send)
477 {
478 unsigned int i = 0;
479 unsigned int length = 0;
480 rtems_status_code status;
481
482 header->sid = (unsigned char) sid;
483
572
484 for (i=0; i<7; i++) // send waveform
573 for (i=0; i<7; i++) // send waveform
485 {
574 {
575 spw_ioctl_send_SWF.data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) ];
576 spw_ioctl_send_SWF.hdr = (char*) &headerSWF_F0_F1_F2[j][i];
486 // BUILD THE DATA
577 // BUILD THE DATA
487 if (i==6) {
578 if (i==6) {
488 spw_ioctl_send->dlen = 8 * NB_BYTES_SWF_BLK;
579 spw_ioctl_send_SWF.dlen = 8 * NB_BYTES_SWF_BLK;
489 length = TM_LEN_SCI_CWF_8;
490 header->blkNr[0] = 0x00; // BLK_NR MSB
491 header->blkNr[1] = 0x08; // BLK_NR LSB
492 }
580 }
493 else {
581 else {
494 spw_ioctl_send->dlen = 340 * NB_BYTES_SWF_BLK;
582 spw_ioctl_send_SWF.dlen = 340 * NB_BYTES_SWF_BLK;
495 length = TM_LEN_SCI_CWF_340;
496 header->blkNr[0] = 0x01; // BLK_NR MSB
497 header->blkNr[1] = 0x54; // BLK_NR LSB
498 }
499 spw_ioctl_send->data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) ];
500 // BUILD THE HEADER
501 header->packetLength[0] = (unsigned char) (length>>8);
502 header->packetLength[1] = (unsigned char) (length);
503 // SET PACKET TIME
504 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
505 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
506 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
507 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
508 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
509 header->time[5] = (unsigned char) (time_management_regs->fine_time);
510 header->acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24);
511 header->acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16);
512 header->acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8);
513 header->acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time);
514 header->acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8);
515 header->acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time);
516 // SEND PACKET
517 status = write_spw(spw_ioctl_send);
518 if (status != RTEMS_SUCCESSFUL) {
519 while (true) {
520 if (status != RTEMS_SUCCESSFUL) {
521 status = write_spw(spw_ioctl_send);
522 //PRINTF1("%d", i)
523 sched_yield();
524 }
525 else {
526 //PRINTF("\n")
527 break;
528 }
529 }
530 }
583 }
531 }
584 // SET PACKET TIME
532 }
585 headerSWF_F0_F1_F2[j][i].time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
533
586 headerSWF_F0_F1_F2[j][i].time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
534 void send_waveform_norm(Header_TM_LFR_SCIENCE_SWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
587 headerSWF_F0_F1_F2[j][i].time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
535 {
588 headerSWF_F0_F1_F2[j][i].time[3] = (unsigned char) (time_management_regs->coarse_time);
536 unsigned char lfrMode;
589 headerSWF_F0_F1_F2[j][i].time[4] = (unsigned char) (time_management_regs->fine_time>>8);
537 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
590 headerSWF_F0_F1_F2[j][i].time[5] = (unsigned char) (time_management_regs->fine_time);
538
591 headerSWF_F0_F1_F2[j][i].acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24);
539 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL >> 8);
592 headerSWF_F0_F1_F2[j][i].acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16);
540 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL);
593 headerSWF_F0_F1_F2[j][i].acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8);
541 // TIME
594 headerSWF_F0_F1_F2[j][i].acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time);
542 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
595 headerSWF_F0_F1_F2[j][i].acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8);
543 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
596 headerSWF_F0_F1_F2[j][i].acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time);
544 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
597 // SEND PACKET
545 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
598 //status = write_spw(&spw_ioctl_send_SWF);
546 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
599 status = rtems_message_queue_send( misc_id[1], &spw_ioctl_send_SWF, sizeof(spw_ioctl_send_SWF));
547 header->time[5] = (unsigned char) (time_management_regs->fine_time);
600 if (status != RTEMS_SUCCESSFUL) {
548
601 PRINTF2("sid %d, i = %d\n", sid, i)
549 switch(lfrMode) {
602 ret = LFR_DEFAULT;
550
603 }
551 case LFR_MODE_NORMAL:
604 rtems_task_wake_after(TIME_BETWEEN_TWO_SWF_PACKETS); // 300 ms between each packet => 7 * 3 = 21 packets => 6.3 seconds
552 send_waveform_SWF( header, wf_snap_f0, SID_NORM_SWF_F0, spw_ioctl_send);
553 send_waveform_SWF( header, wf_snap_f1, SID_NORM_SWF_F1, spw_ioctl_send);
554 send_waveform_SWF( header, wf_snap_f2, SID_NORM_SWF_F2, spw_ioctl_send);
555 #ifdef GSA
556 #else
557 waveform_picker_regs->status = waveform_picker_regs->status & 0x00;
558 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x07; // [0111] enable f2 f1 f0
559 #endif
560 break;
561
562 case LFR_MODE_SBM1:
563 send_waveform_SWF( header, wf_snap_f0, SID_NORM_SWF_F0, spw_ioctl_send);
564 // F1 data are sent by the send_waveform_sbm1 function
565 send_waveform_SWF( header, wf_snap_f2, SID_NORM_SWF_F2, spw_ioctl_send);
566 break;
567
568 case LFR_MODE_SBM2:
569 send_waveform_SWF( header, wf_snap_f0, SID_NORM_SWF_F0, spw_ioctl_send);
570 send_waveform_SWF( header, wf_snap_f1, SID_NORM_SWF_F1, spw_ioctl_send);
571 // F2 data are sent by the send_waveform_sbm2 function
572 break;
573
574 default:
575 break;
576 }
605 }
577
606
578 #ifdef GSA
607 return ret;
579 // irq processed, reset the related register of the timer unit
580 gptimer_regs->timer[TIMER_WF_SIMULATOR].ctrl = gptimer_regs->timer[TIMER_WF_SIMULATOR].ctrl | 0x00000010;
581 // clear the interruption
582 LEON_Unmask_interrupt( IRQ_WF );
583 #endif
584
585 }
586
587 void send_waveform_norm_cwf_f3(Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
588 {
589 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL >> 8);
590 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_NORMAL);
591 // TIME
592 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
593 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
594 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
595 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
596 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
597 header->time[5] = (unsigned char) (time_management_regs->fine_time);
598
599 //*******************************
600 // send continuous waveform at f3
601 // F3
602 #ifdef GSA
603 #else
604 if (waveform_picker_regs->addr_data_f3 == (int) wf_cont_f3) {
605 send_waveform_CWF( header, wf_cont_f3_bis, SID_NORM_CWF_F3, spw_ioctl_send);
606 }
607 else {
608 send_waveform_CWF( header, wf_cont_f3, SID_NORM_CWF_F3, spw_ioctl_send);
609 }
610 #endif
611 }
608 }
612
609
613 void send_waveform_burst(Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
610 int send_waveform_CWF( volatile int *waveform, unsigned int sid, Header_TM_LFR_SCIENCE_CWF_t *headerCWF)
614 {
615 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 >> 8);
616 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2);
617 // TIME
618 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
619 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
620 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
621 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
622 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
623 header->time[5] = (unsigned char) (time_management_regs->fine_time);
624 // ACQUISITION TIME
625
626 // F2
627 #ifdef GSA
628 #else
629 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
630 send_waveform_CWF( header, wf_snap_f2_bis, SID_BURST_CWF_F2, spw_ioctl_send);
631 }
632 else {
633 send_waveform_CWF( header, wf_snap_f2, SID_BURST_CWF_F2, spw_ioctl_send);
634 }
635 #endif
636 }
637
638 void send_waveform_sbm1(Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
639 {
611 {
640 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 >> 8);
612 unsigned int i;
641 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2);
613 int ret;
642 // TIME
614 rtems_status_code status;
643 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
615 spw_ioctl_pkt_send spw_ioctl_send_CWF;
644 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
645 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
646 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
647 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
648 header->time[5] = (unsigned char) (time_management_regs->fine_time);
649
616
650 // F1
617 spw_ioctl_send_CWF.hlen = TM_HEADER_LEN + 4 + 10; // + 4 is for the protocole extra header, + 10 is for the auxiliary header
651 #ifdef GSA
618 spw_ioctl_send_CWF.options = 0;
652 #else
619
653 if (waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) {
620 ret = LFR_DEFAULT;
654 send_waveform_CWF( header, wf_snap_f1_bis, SID_SBM1_CWF_F1, spw_ioctl_send );
655 }
656 else {
657 send_waveform_CWF( header, wf_snap_f1, SID_SBM1_CWF_F1, spw_ioctl_send );
658 }
659 #endif
660 }
661
621
662 void send_waveform_sbm2(Header_TM_LFR_SCIENCE_CWF_t *header, spw_ioctl_pkt_send *spw_ioctl_send)
622 for (i=0; i<7; i++) // send waveform
663 {
623 {
664 header->packetID[0] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 >> 8);
624 int coarseTime = 0x00;
665 header->packetID[1] = (unsigned char) (TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2);
625 int fineTime = 0x00;
666 // TIME
626 spw_ioctl_send_CWF.data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) ];
667 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
627 spw_ioctl_send_CWF.hdr = (char*) &headerCWF[ i ];
668 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
628 // BUILD THE DATA
669 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
629 if (i==6) {
670 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
630 spw_ioctl_send_CWF.dlen = 8 * NB_BYTES_SWF_BLK;
671 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
631 }
672 header->time[5] = (unsigned char) (time_management_regs->fine_time);
632 else {
633 spw_ioctl_send_CWF.dlen = 340 * NB_BYTES_SWF_BLK;
634 }
635 // SET PACKET TIME
636 coarseTime = time_management_regs->coarse_time;
637 fineTime = time_management_regs->fine_time;
638 headerCWF[ i ].time[0] = (unsigned char) (coarseTime>>24);
639 headerCWF[ i ].time[1] = (unsigned char) (coarseTime>>16);
640 headerCWF[ i ].time[2] = (unsigned char) (coarseTime>>8);
641 headerCWF[ i ].time[3] = (unsigned char) (coarseTime);
642 headerCWF[ i ].time[4] = (unsigned char) (fineTime>>8);
643 headerCWF[ i ].time[5] = (unsigned char) (fineTime);
644 headerCWF[ i ].acquisitionTime[0] = (unsigned char) (coarseTime>>24);
645 headerCWF[ i ].acquisitionTime[1] = (unsigned char) (coarseTime>>16);
646 headerCWF[ i ].acquisitionTime[2] = (unsigned char) (coarseTime>>8);
647 headerCWF[ i ].acquisitionTime[3] = (unsigned char) (coarseTime);
648 headerCWF[ i ].acquisitionTime[4] = (unsigned char) (fineTime>>8);
649 headerCWF[ i ].acquisitionTime[5] = (unsigned char) (fineTime);
650 // SEND PACKET
651 //status = write_spw(&spw_ioctl_send_CWF);
652 status = rtems_message_queue_urgent( misc_id[1], &spw_ioctl_send_CWF, sizeof(spw_ioctl_send_CWF));
653 if (status != RTEMS_SUCCESSFUL) {
654 PRINTF2("sid %d, i = %d\n", sid, i)
655 ret = LFR_DEFAULT;
656 }
657 else
658 {
659 sched_yield();
660 }
661 if (sid == SID_NORM_CWF_F3)
662 {
663 rtems_task_wake_after(TIME_BETWEEN_TWO_CWF3_PACKETS);
664 }
665 }
673
666
674 // F2
667 return ret;
675 #ifdef GSA
676 #else
677 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
678 send_waveform_CWF( header, wf_snap_f2_bis, SID_SBM2_CWF_F2, spw_ioctl_send);
679 }
680 else {
681 send_waveform_CWF( header, wf_snap_f2, SID_SBM2_CWF_F2, spw_ioctl_send);
682 }
683 #endif
684 }
668 }
685
669
686 //**************
670 //**************
687 // wfp registers
671 // wfp registers
688 void set_wfp_data_shaping()
672 void set_wfp_data_shaping()
689 {
673 {
690 unsigned char data_shaping;
674 unsigned char data_shaping;
691
675
692 // get the parameters for the data shaping [BW SP0 SP1 R0 R1] in sy_lfr_common1 and configure the register
676 // get the parameters for the data shaping [BW SP0 SP1 R0 R1] in sy_lfr_common1 and configure the register
693 // waveform picker : [R1 R0 SP1 SP0 BW]
677 // waveform picker : [R1 R0 SP1 SP0 BW]
694
678
695 data_shaping = parameter_dump_packet.bw_sp0_sp1_r0_r1;
679 data_shaping = parameter_dump_packet.bw_sp0_sp1_r0_r1;
696
680
697 #ifdef GSA
681 #ifdef GSA
698 #else
682 #else
699 waveform_picker_regs->data_shaping =
683 waveform_picker_regs->data_shaping =
700 ( (data_shaping & 0x10) >> 4 ) // BW
684 ( (data_shaping & 0x10) >> 4 ) // BW
701 + ( (data_shaping & 0x08) >> 2 ) // SP0
685 + ( (data_shaping & 0x08) >> 2 ) // SP0
702 + ( (data_shaping & 0x04) ) // SP1
686 + ( (data_shaping & 0x04) ) // SP1
703 + ( (data_shaping & 0x02) << 2 ) // R0
687 + ( (data_shaping & 0x02) << 2 ) // R0
704 + ( (data_shaping & 0x01) << 4 ); // R1
688 + ( (data_shaping & 0x01) << 4 ); // R1
705 #endif
689 #endif
706 }
690 }
707
691
708 char set_wfp_delta_snapshot()
692 char set_wfp_delta_snapshot()
709 {
693 {
710 char ret;
694 char ret;
711 unsigned int delta_snapshot;
695 unsigned int delta_snapshot;
712 ret = LFR_DEFAULT;
696 ret = LFR_DEFAULT;
713
697
714 delta_snapshot = parameter_dump_packet.sy_lfr_n_swf_p[0]*256
698 delta_snapshot = parameter_dump_packet.sy_lfr_n_swf_p[0]*256
715 + parameter_dump_packet.sy_lfr_n_swf_p[1];
699 + parameter_dump_packet.sy_lfr_n_swf_p[1];
716
700
717 #ifdef GSA
701 #ifdef GSA
718 #else
702 #else
719 unsigned char aux = 0;
703 unsigned char aux = 0;
720 if ( delta_snapshot < MIN_DELTA_SNAPSHOT )
704 if ( delta_snapshot < MIN_DELTA_SNAPSHOT )
721 {
705 {
722 aux = MIN_DELTA_SNAPSHOT;
706 aux = MIN_DELTA_SNAPSHOT;
723 ret = LFR_DEFAULT;
707 ret = LFR_DEFAULT;
724 }
708 }
725 else
709 else
726 {
710 {
727 aux = delta_snapshot ;
711 aux = delta_snapshot ;
728 ret = LFR_SUCCESSFUL;
712 ret = LFR_SUCCESSFUL;
729 }
713 }
730 waveform_picker_regs->delta_snapshot = aux; // max 2 bytes
714 waveform_picker_regs->delta_snapshot = aux; // max 2 bytes
731 #endif
715 #endif
732
716
733 return ret;
717 return ret;
734 }
718 }
735
719
736 void set_wfp_burst_enable_register( unsigned char mode)
720 void set_wfp_burst_enable_register( unsigned char mode)
737 {
721 {
738 #ifdef GSA
722 #ifdef GSA
739 #else
723 #else
740 // [0000 0000] burst f2, f1, f0 enable f3 f2 f1 f0
724 // [0000 0000] burst f2, f1, f0 enable f3 f2 f1 f0
741 // the burst bits shall be set first, before the enable bits
725 // the burst bits shall be set first, before the enable bits
742 switch(mode) {
726 switch(mode) {
743 case(LFR_MODE_NORMAL):
727 case(LFR_MODE_NORMAL):
744 waveform_picker_regs->burst_enable = 0x0f; // [0000 1111] enable f3 f2 f1 f0
728 waveform_picker_regs->burst_enable = 0x0f; // [0000 1111] enable f3 f2 f1 f0
745 break;
729 break;
746 case(LFR_MODE_BURST):
730 case(LFR_MODE_BURST):
747 waveform_picker_regs->burst_enable = 0x40; // [0100 0000] f2 burst enabled
731 waveform_picker_regs->burst_enable = 0x40; // [0100 0000] f2 burst enabled
748 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x04; // [0100] enable f2
732 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x04; // [0100] enable f2
749 break;
733 break;
750 case(LFR_MODE_SBM1):
734 case(LFR_MODE_SBM1):
751 waveform_picker_regs->burst_enable = 0x20; // [0010 0000] f1 burst enabled
735 waveform_picker_regs->burst_enable = 0x20; // [0010 0000] f1 burst enabled
752 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x0f; // [1111] enable f3 f2 f1 f0
736 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x0f; // [1111] enable f3 f2 f1 f0
753 break;
737 break;
754 case(LFR_MODE_SBM2):
738 case(LFR_MODE_SBM2):
755 waveform_picker_regs->burst_enable = 0x40; // [0100 0000] f2 burst enabled
739 waveform_picker_regs->burst_enable = 0x40; // [0100 0000] f2 burst enabled
756 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x0f; // [1111] enable f3 f2 f1 f0
740 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x0f; // [1111] enable f3 f2 f1 f0
757 break;
741 break;
758 default:
742 default:
759 waveform_picker_regs->burst_enable = 0x00; // [0000 0000] no burst enabled, no waveform enabled
743 waveform_picker_regs->burst_enable = 0x00; // [0000 0000] no burst enabled, no waveform enabled
760 break;
744 break;
761 }
745 }
762 #endif
746 #endif
763 }
747 }
764
748
765 void reset_wfp_burst_enable()
749 void reset_wfp_burst_enable()
766 {
750 {
767 #ifdef GSA
751 #ifdef GSA
768 #else
752 #else
769 waveform_picker_regs->burst_enable = 0x00; // burst f2, f1, f0 enable f3, f2, f1, f0
753 waveform_picker_regs->burst_enable = 0x00; // burst f2, f1, f0 enable f3, f2, f1, f0
770 #endif
754 #endif
771 }
755 }
772
756
757 void reset_wfp_status()
758 {
759 #ifdef GSA
760 #else
761 waveform_picker_regs->status = 0x00; // burst f2, f1, f0 enable f3, f2, f1, f0
762 #endif
763 }
764
773 void reset_waveform_picker_regs()
765 void reset_waveform_picker_regs()
774 {
766 {
775 #ifdef GSA
767 #ifdef GSA
776 #else
768 #else
777 set_wfp_data_shaping();
769 set_wfp_data_shaping();
778 reset_wfp_burst_enable();
770 reset_wfp_burst_enable();
779 waveform_picker_regs->addr_data_f0 = (int) (wf_snap_f0); //
771 waveform_picker_regs->addr_data_f0 = (int) (wf_snap_f0); //
780 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1); //
772 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1); //
781 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2); //
773 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2); //
782 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3); //
774 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3); //
783 set_wfp_delta_snapshot(); // time in seconds between two snapshots
775 set_wfp_delta_snapshot(); // time in seconds between two snapshots
784 waveform_picker_regs->delta_f2_f1 = 0xffff; // max 4 bytes
776 waveform_picker_regs->delta_f2_f1 = 0xffff; // 0x16800 => 92160 (max 4 bytes)
785 waveform_picker_regs->delta_f2_f0 = 0x17c00; // max 5 bytes
777 waveform_picker_regs->delta_f2_f0 = 0x17c00; // 97 280 (max 5 bytes)
786 waveform_picker_regs->nb_burst_available = 0x180; // max 3 bytes, size of the buffer in burst (1 burst = 16 x 4 octets)
778 waveform_picker_regs->nb_burst_available = 0x180; // max 3 bytes, size of the buffer in burst (1 burst = 16 x 4 octets)
787 waveform_picker_regs->nb_snapshot_param = 0x7ff; // max 3 octets, 2048 - 1
779 waveform_picker_regs->nb_snapshot_param = 0x7ff; // max 3 octets, 2048 - 1
788 waveform_picker_regs->status = 0x00; //
780 waveform_picker_regs->status = 0x00; //
789 #endif
781 #endif
790 }
782 }
791
783
792 //*****************
784 //*****************
793 // local parameters
785 // local parameters
794 void set_local_sbm1_nb_cwf_max()
786 void set_local_sbm1_nb_cwf_max()
795 {
787 {
796 // (2 snapshots of 2048 points per seconds) * (period of the NORM snashots)
788 // (2 snapshots of 2048 points per seconds) * (period of the NORM snashots) - 8 s (duration of the f2 snapshot)
797 param_local.local_sbm1_nb_cwf_max = 2 * (
789 param_local.local_sbm1_nb_cwf_max = 2 * (
798 parameter_dump_packet.sy_lfr_n_swf_p[0] * 256
790 parameter_dump_packet.sy_lfr_n_swf_p[0] * 256
799 + parameter_dump_packet.sy_lfr_n_swf_p[1]
791 + parameter_dump_packet.sy_lfr_n_swf_p[1]
800 );
792 ) - 8; // 16 CWF1 parts during 1 SWF2
801 }
793 }
802
794
803 void set_local_sbm2_nb_cwf_max()
795 void set_local_sbm2_nb_cwf_max()
804 {
796 {
805 // (period of the NORM snashots) / (8 seconds per snapshot at f2 = 256 Hz)
797 // (period of the NORM snashots) / (8 seconds per snapshot at f2 = 256 Hz)
806 param_local.local_sbm2_nb_cwf_max = (
798 param_local.local_sbm2_nb_cwf_max = (
807 parameter_dump_packet.sy_lfr_n_swf_p[0] * 256
799 parameter_dump_packet.sy_lfr_n_swf_p[0] * 256
808 + parameter_dump_packet.sy_lfr_n_swf_p[1]
800 + parameter_dump_packet.sy_lfr_n_swf_p[1]
809 )/ 8;
801 )/ 8;
810 }
802 }
811
803
812 void set_local_nb_interrupt_f0_MAX()
804 void set_local_nb_interrupt_f0_MAX()
813 {
805 {
814 param_local.local_nb_interrupt_f0_MAX = ( (parameter_dump_packet.sy_lfr_n_asm_p[0]) * 256
806 param_local.local_nb_interrupt_f0_MAX = ( (parameter_dump_packet.sy_lfr_n_asm_p[0]) * 256
815 + parameter_dump_packet.sy_lfr_n_asm_p[1] ) * 100;
807 + parameter_dump_packet.sy_lfr_n_asm_p[1] ) * 100;
816 }
808 }
817
809
818 void reset_local_sbm1_nb_cwf_sent()
810 void reset_local_sbm1_nb_cwf_sent()
819 {
811 {
820 param_local.local_sbm1_nb_cwf_sent = 0;
812 param_local.local_sbm1_nb_cwf_sent = 0;
821 }
813 }
822
814
823 void reset_local_sbm2_nb_cwf_sent()
815 void reset_local_sbm2_nb_cwf_sent()
824 {
816 {
825 param_local.local_sbm2_nb_cwf_sent = 0;
817 param_local.local_sbm2_nb_cwf_sent = 0;
826 }
818 }
General Comments 0
You need to be logged in to leave comments. Login now