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