##// END OF EJS Templates
fsw-0-17...
paul -
r48:069ab1ca807f default
parent child
Show More
@@ -1,248 +1,248
1 #############################################################################
1 #############################################################################
2 # Makefile for building: bin/fsw
2 # Makefile for building: bin/fsw
3 # Generated by qmake (2.01a) (Qt 4.8.5) on: Fri Oct 25 11:58:08 2013
3 # Generated by qmake (2.01a) (Qt 4.8.5) on: Fri Oct 25 13:24:46 2013
4 # Project: fsw-qt.pro
4 # Project: fsw-qt.pro
5 # Template: app
5 # Template: app
6 # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
6 # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
7 #############################################################################
7 #############################################################################
8
8
9 ####### Compiler, tools and options
9 ####### Compiler, tools and options
10
10
11 CC = sparc-rtems-gcc
11 CC = sparc-rtems-gcc
12 CXX = sparc-rtems-g++
12 CXX = sparc-rtems-g++
13 DEFINES = -DSW_VERSION_N1=0 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=16 -DPRINT_MESSAGES_ON_CONSOLE
13 DEFINES = -DSW_VERSION_N1=0 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=17 -DPRINT_MESSAGES_ON_CONSOLE
14 CFLAGS = -pipe -O3 -Wall $(DEFINES)
14 CFLAGS = -pipe -O3 -Wall $(DEFINES)
15 CXXFLAGS = -pipe -O3 -Wall $(DEFINES)
15 CXXFLAGS = -pipe -O3 -Wall $(DEFINES)
16 INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header
16 INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header
17 LINK = sparc-rtems-g++
17 LINK = sparc-rtems-g++
18 LFLAGS =
18 LFLAGS =
19 LIBS = $(SUBLIBS)
19 LIBS = $(SUBLIBS)
20 AR = sparc-rtems-ar rcs
20 AR = sparc-rtems-ar rcs
21 RANLIB =
21 RANLIB =
22 QMAKE = /usr/bin/qmake-qt4
22 QMAKE = /usr/bin/qmake-qt4
23 TAR = tar -cf
23 TAR = tar -cf
24 COMPRESS = gzip -9f
24 COMPRESS = gzip -9f
25 COPY = cp -f
25 COPY = cp -f
26 SED = sed
26 SED = sed
27 COPY_FILE = $(COPY)
27 COPY_FILE = $(COPY)
28 COPY_DIR = $(COPY) -r
28 COPY_DIR = $(COPY) -r
29 STRIP = sparc-rtems-strip
29 STRIP = sparc-rtems-strip
30 INSTALL_FILE = install -m 644 -p
30 INSTALL_FILE = install -m 644 -p
31 INSTALL_DIR = $(COPY_DIR)
31 INSTALL_DIR = $(COPY_DIR)
32 INSTALL_PROGRAM = install -m 755 -p
32 INSTALL_PROGRAM = install -m 755 -p
33 DEL_FILE = rm -f
33 DEL_FILE = rm -f
34 SYMLINK = ln -f -s
34 SYMLINK = ln -f -s
35 DEL_DIR = rmdir
35 DEL_DIR = rmdir
36 MOVE = mv -f
36 MOVE = mv -f
37 CHK_DIR_EXISTS= test -d
37 CHK_DIR_EXISTS= test -d
38 MKDIR = mkdir -p
38 MKDIR = mkdir -p
39
39
40 ####### Output directory
40 ####### Output directory
41
41
42 OBJECTS_DIR = obj/
42 OBJECTS_DIR = obj/
43
43
44 ####### Files
44 ####### Files
45
45
46 SOURCES = ../src/wf_handler.c \
46 SOURCES = ../src/wf_handler.c \
47 ../src/tc_handler.c \
47 ../src/tc_handler.c \
48 ../src/fsw_processing.c \
48 ../src/fsw_processing.c \
49 ../src/fsw_misc.c \
49 ../src/fsw_misc.c \
50 ../src/fsw_init.c \
50 ../src/fsw_init.c \
51 ../src/fsw_globals.c \
51 ../src/fsw_globals.c \
52 ../src/fsw_spacewire.c \
52 ../src/fsw_spacewire.c \
53 ../src/tc_load_dump_parameters.c \
53 ../src/tc_load_dump_parameters.c \
54 ../src/tm_lfr_tc_exe.c \
54 ../src/tm_lfr_tc_exe.c \
55 ../src/tc_acceptance.c
55 ../src/tc_acceptance.c
56 OBJECTS = obj/wf_handler.o \
56 OBJECTS = obj/wf_handler.o \
57 obj/tc_handler.o \
57 obj/tc_handler.o \
58 obj/fsw_processing.o \
58 obj/fsw_processing.o \
59 obj/fsw_misc.o \
59 obj/fsw_misc.o \
60 obj/fsw_init.o \
60 obj/fsw_init.o \
61 obj/fsw_globals.o \
61 obj/fsw_globals.o \
62 obj/fsw_spacewire.o \
62 obj/fsw_spacewire.o \
63 obj/tc_load_dump_parameters.o \
63 obj/tc_load_dump_parameters.o \
64 obj/tm_lfr_tc_exe.o \
64 obj/tm_lfr_tc_exe.o \
65 obj/tc_acceptance.o
65 obj/tc_acceptance.o
66 DIST = /usr/lib64/qt4/mkspecs/common/unix.conf \
66 DIST = /usr/lib64/qt4/mkspecs/common/unix.conf \
67 /usr/lib64/qt4/mkspecs/common/linux.conf \
67 /usr/lib64/qt4/mkspecs/common/linux.conf \
68 /usr/lib64/qt4/mkspecs/common/gcc-base.conf \
68 /usr/lib64/qt4/mkspecs/common/gcc-base.conf \
69 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
69 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
70 /usr/lib64/qt4/mkspecs/common/g++-base.conf \
70 /usr/lib64/qt4/mkspecs/common/g++-base.conf \
71 /usr/lib64/qt4/mkspecs/common/g++-unix.conf \
71 /usr/lib64/qt4/mkspecs/common/g++-unix.conf \
72 /usr/lib64/qt4/mkspecs/qconfig.pri \
72 /usr/lib64/qt4/mkspecs/qconfig.pri \
73 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
73 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
74 /usr/lib64/qt4/mkspecs/features/qt_functions.prf \
74 /usr/lib64/qt4/mkspecs/features/qt_functions.prf \
75 /usr/lib64/qt4/mkspecs/features/qt_config.prf \
75 /usr/lib64/qt4/mkspecs/features/qt_config.prf \
76 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
76 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
77 /usr/lib64/qt4/mkspecs/features/default_pre.prf \
77 /usr/lib64/qt4/mkspecs/features/default_pre.prf \
78 sparc.pri \
78 sparc.pri \
79 /usr/lib64/qt4/mkspecs/features/release.prf \
79 /usr/lib64/qt4/mkspecs/features/release.prf \
80 /usr/lib64/qt4/mkspecs/features/default_post.prf \
80 /usr/lib64/qt4/mkspecs/features/default_post.prf \
81 /usr/lib64/qt4/mkspecs/features/shared.prf \
81 /usr/lib64/qt4/mkspecs/features/shared.prf \
82 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
82 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
83 /usr/lib64/qt4/mkspecs/features/warn_on.prf \
83 /usr/lib64/qt4/mkspecs/features/warn_on.prf \
84 /usr/lib64/qt4/mkspecs/features/resources.prf \
84 /usr/lib64/qt4/mkspecs/features/resources.prf \
85 /usr/lib64/qt4/mkspecs/features/uic.prf \
85 /usr/lib64/qt4/mkspecs/features/uic.prf \
86 /usr/lib64/qt4/mkspecs/features/yacc.prf \
86 /usr/lib64/qt4/mkspecs/features/yacc.prf \
87 /usr/lib64/qt4/mkspecs/features/lex.prf \
87 /usr/lib64/qt4/mkspecs/features/lex.prf \
88 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf \
88 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf \
89 fsw-qt.pro
89 fsw-qt.pro
90 QMAKE_TARGET = fsw
90 QMAKE_TARGET = fsw
91 DESTDIR = bin/
91 DESTDIR = bin/
92 TARGET = bin/fsw
92 TARGET = bin/fsw
93
93
94 first: all
94 first: all
95 ####### Implicit rules
95 ####### Implicit rules
96
96
97 .SUFFIXES: .o .c .cpp .cc .cxx .C
97 .SUFFIXES: .o .c .cpp .cc .cxx .C
98
98
99 .cpp.o:
99 .cpp.o:
100 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
100 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
101
101
102 .cc.o:
102 .cc.o:
103 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
103 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
104
104
105 .cxx.o:
105 .cxx.o:
106 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
106 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
107
107
108 .C.o:
108 .C.o:
109 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
109 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
110
110
111 .c.o:
111 .c.o:
112 $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
112 $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
113
113
114 ####### Build rules
114 ####### Build rules
115
115
116 all: Makefile $(TARGET)
116 all: Makefile $(TARGET)
117
117
118 $(TARGET): $(OBJECTS)
118 $(TARGET): $(OBJECTS)
119 @$(CHK_DIR_EXISTS) bin/ || $(MKDIR) bin/
119 @$(CHK_DIR_EXISTS) bin/ || $(MKDIR) bin/
120 $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
120 $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
121
121
122 Makefile: fsw-qt.pro /usr/lib64/qt4/mkspecs/linux-g++/qmake.conf /usr/lib64/qt4/mkspecs/common/unix.conf \
122 Makefile: fsw-qt.pro /usr/lib64/qt4/mkspecs/linux-g++/qmake.conf /usr/lib64/qt4/mkspecs/common/unix.conf \
123 /usr/lib64/qt4/mkspecs/common/linux.conf \
123 /usr/lib64/qt4/mkspecs/common/linux.conf \
124 /usr/lib64/qt4/mkspecs/common/gcc-base.conf \
124 /usr/lib64/qt4/mkspecs/common/gcc-base.conf \
125 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
125 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf \
126 /usr/lib64/qt4/mkspecs/common/g++-base.conf \
126 /usr/lib64/qt4/mkspecs/common/g++-base.conf \
127 /usr/lib64/qt4/mkspecs/common/g++-unix.conf \
127 /usr/lib64/qt4/mkspecs/common/g++-unix.conf \
128 /usr/lib64/qt4/mkspecs/qconfig.pri \
128 /usr/lib64/qt4/mkspecs/qconfig.pri \
129 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
129 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri \
130 /usr/lib64/qt4/mkspecs/features/qt_functions.prf \
130 /usr/lib64/qt4/mkspecs/features/qt_functions.prf \
131 /usr/lib64/qt4/mkspecs/features/qt_config.prf \
131 /usr/lib64/qt4/mkspecs/features/qt_config.prf \
132 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
132 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf \
133 /usr/lib64/qt4/mkspecs/features/default_pre.prf \
133 /usr/lib64/qt4/mkspecs/features/default_pre.prf \
134 sparc.pri \
134 sparc.pri \
135 /usr/lib64/qt4/mkspecs/features/release.prf \
135 /usr/lib64/qt4/mkspecs/features/release.prf \
136 /usr/lib64/qt4/mkspecs/features/default_post.prf \
136 /usr/lib64/qt4/mkspecs/features/default_post.prf \
137 /usr/lib64/qt4/mkspecs/features/shared.prf \
137 /usr/lib64/qt4/mkspecs/features/shared.prf \
138 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
138 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
139 /usr/lib64/qt4/mkspecs/features/warn_on.prf \
139 /usr/lib64/qt4/mkspecs/features/warn_on.prf \
140 /usr/lib64/qt4/mkspecs/features/resources.prf \
140 /usr/lib64/qt4/mkspecs/features/resources.prf \
141 /usr/lib64/qt4/mkspecs/features/uic.prf \
141 /usr/lib64/qt4/mkspecs/features/uic.prf \
142 /usr/lib64/qt4/mkspecs/features/yacc.prf \
142 /usr/lib64/qt4/mkspecs/features/yacc.prf \
143 /usr/lib64/qt4/mkspecs/features/lex.prf \
143 /usr/lib64/qt4/mkspecs/features/lex.prf \
144 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf
144 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf
145 $(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
145 $(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
146 /usr/lib64/qt4/mkspecs/common/unix.conf:
146 /usr/lib64/qt4/mkspecs/common/unix.conf:
147 /usr/lib64/qt4/mkspecs/common/linux.conf:
147 /usr/lib64/qt4/mkspecs/common/linux.conf:
148 /usr/lib64/qt4/mkspecs/common/gcc-base.conf:
148 /usr/lib64/qt4/mkspecs/common/gcc-base.conf:
149 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf:
149 /usr/lib64/qt4/mkspecs/common/gcc-base-unix.conf:
150 /usr/lib64/qt4/mkspecs/common/g++-base.conf:
150 /usr/lib64/qt4/mkspecs/common/g++-base.conf:
151 /usr/lib64/qt4/mkspecs/common/g++-unix.conf:
151 /usr/lib64/qt4/mkspecs/common/g++-unix.conf:
152 /usr/lib64/qt4/mkspecs/qconfig.pri:
152 /usr/lib64/qt4/mkspecs/qconfig.pri:
153 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri:
153 /usr/lib64/qt4/mkspecs/modules/qt_webkit.pri:
154 /usr/lib64/qt4/mkspecs/features/qt_functions.prf:
154 /usr/lib64/qt4/mkspecs/features/qt_functions.prf:
155 /usr/lib64/qt4/mkspecs/features/qt_config.prf:
155 /usr/lib64/qt4/mkspecs/features/qt_config.prf:
156 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf:
156 /usr/lib64/qt4/mkspecs/features/exclusive_builds.prf:
157 /usr/lib64/qt4/mkspecs/features/default_pre.prf:
157 /usr/lib64/qt4/mkspecs/features/default_pre.prf:
158 sparc.pri:
158 sparc.pri:
159 /usr/lib64/qt4/mkspecs/features/release.prf:
159 /usr/lib64/qt4/mkspecs/features/release.prf:
160 /usr/lib64/qt4/mkspecs/features/default_post.prf:
160 /usr/lib64/qt4/mkspecs/features/default_post.prf:
161 /usr/lib64/qt4/mkspecs/features/shared.prf:
161 /usr/lib64/qt4/mkspecs/features/shared.prf:
162 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf:
162 /usr/lib64/qt4/mkspecs/features/unix/gdb_dwarf_index.prf:
163 /usr/lib64/qt4/mkspecs/features/warn_on.prf:
163 /usr/lib64/qt4/mkspecs/features/warn_on.prf:
164 /usr/lib64/qt4/mkspecs/features/resources.prf:
164 /usr/lib64/qt4/mkspecs/features/resources.prf:
165 /usr/lib64/qt4/mkspecs/features/uic.prf:
165 /usr/lib64/qt4/mkspecs/features/uic.prf:
166 /usr/lib64/qt4/mkspecs/features/yacc.prf:
166 /usr/lib64/qt4/mkspecs/features/yacc.prf:
167 /usr/lib64/qt4/mkspecs/features/lex.prf:
167 /usr/lib64/qt4/mkspecs/features/lex.prf:
168 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf:
168 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf:
169 qmake: FORCE
169 qmake: FORCE
170 @$(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
170 @$(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
171
171
172 dist:
172 dist:
173 @$(CHK_DIR_EXISTS) obj/fsw1.0.0 || $(MKDIR) obj/fsw1.0.0
173 @$(CHK_DIR_EXISTS) obj/fsw1.0.0 || $(MKDIR) obj/fsw1.0.0
174 $(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
174 $(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
175
175
176
176
177 clean:compiler_clean
177 clean:compiler_clean
178 -$(DEL_FILE) $(OBJECTS)
178 -$(DEL_FILE) $(OBJECTS)
179 -$(DEL_FILE) *~ core *.core
179 -$(DEL_FILE) *~ core *.core
180
180
181
181
182 ####### Sub-libraries
182 ####### Sub-libraries
183
183
184 distclean: clean
184 distclean: clean
185 -$(DEL_FILE) $(TARGET)
185 -$(DEL_FILE) $(TARGET)
186 -$(DEL_FILE) Makefile
186 -$(DEL_FILE) Makefile
187
187
188
188
189 grmon:
189 grmon:
190 cd bin && C:/opt/grmon-eval-2.0.29b/win32/bin/grmon.exe -uart COM4 -u
190 cd bin && C:/opt/grmon-eval-2.0.29b/win32/bin/grmon.exe -uart COM4 -u
191
191
192 check: first
192 check: first
193
193
194 compiler_rcc_make_all:
194 compiler_rcc_make_all:
195 compiler_rcc_clean:
195 compiler_rcc_clean:
196 compiler_uic_make_all:
196 compiler_uic_make_all:
197 compiler_uic_clean:
197 compiler_uic_clean:
198 compiler_image_collection_make_all: qmake_image_collection.cpp
198 compiler_image_collection_make_all: qmake_image_collection.cpp
199 compiler_image_collection_clean:
199 compiler_image_collection_clean:
200 -$(DEL_FILE) qmake_image_collection.cpp
200 -$(DEL_FILE) qmake_image_collection.cpp
201 compiler_yacc_decl_make_all:
201 compiler_yacc_decl_make_all:
202 compiler_yacc_decl_clean:
202 compiler_yacc_decl_clean:
203 compiler_yacc_impl_make_all:
203 compiler_yacc_impl_make_all:
204 compiler_yacc_impl_clean:
204 compiler_yacc_impl_clean:
205 compiler_lex_make_all:
205 compiler_lex_make_all:
206 compiler_lex_clean:
206 compiler_lex_clean:
207 compiler_clean:
207 compiler_clean:
208
208
209 ####### Compile
209 ####### Compile
210
210
211 obj/wf_handler.o: ../src/wf_handler.c
211 obj/wf_handler.o: ../src/wf_handler.c
212 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/wf_handler.o ../src/wf_handler.c
212 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/wf_handler.o ../src/wf_handler.c
213
213
214 obj/tc_handler.o: ../src/tc_handler.c
214 obj/tc_handler.o: ../src/tc_handler.c
215 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tc_handler.o ../src/tc_handler.c
215 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tc_handler.o ../src/tc_handler.c
216
216
217 obj/fsw_processing.o: ../src/fsw_processing.c ../src/fsw_processing_globals.c
217 obj/fsw_processing.o: ../src/fsw_processing.c ../src/fsw_processing_globals.c
218 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_processing.o ../src/fsw_processing.c
218 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_processing.o ../src/fsw_processing.c
219
219
220 obj/fsw_misc.o: ../src/fsw_misc.c
220 obj/fsw_misc.o: ../src/fsw_misc.c
221 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_misc.o ../src/fsw_misc.c
221 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_misc.o ../src/fsw_misc.c
222
222
223 obj/fsw_init.o: ../src/fsw_init.c ../src/fsw_config.c
223 obj/fsw_init.o: ../src/fsw_init.c ../src/fsw_config.c
224 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_init.o ../src/fsw_init.c
224 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_init.o ../src/fsw_init.c
225
225
226 obj/fsw_globals.o: ../src/fsw_globals.c
226 obj/fsw_globals.o: ../src/fsw_globals.c
227 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_globals.o ../src/fsw_globals.c
227 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_globals.o ../src/fsw_globals.c
228
228
229 obj/fsw_spacewire.o: ../src/fsw_spacewire.c
229 obj/fsw_spacewire.o: ../src/fsw_spacewire.c
230 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_spacewire.o ../src/fsw_spacewire.c
230 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/fsw_spacewire.o ../src/fsw_spacewire.c
231
231
232 obj/tc_load_dump_parameters.o: ../src/tc_load_dump_parameters.c
232 obj/tc_load_dump_parameters.o: ../src/tc_load_dump_parameters.c
233 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tc_load_dump_parameters.o ../src/tc_load_dump_parameters.c
233 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tc_load_dump_parameters.o ../src/tc_load_dump_parameters.c
234
234
235 obj/tm_lfr_tc_exe.o: ../src/tm_lfr_tc_exe.c
235 obj/tm_lfr_tc_exe.o: ../src/tm_lfr_tc_exe.c
236 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tm_lfr_tc_exe.o ../src/tm_lfr_tc_exe.c
236 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tm_lfr_tc_exe.o ../src/tm_lfr_tc_exe.c
237
237
238 obj/tc_acceptance.o: ../src/tc_acceptance.c
238 obj/tc_acceptance.o: ../src/tc_acceptance.c
239 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tc_acceptance.o ../src/tc_acceptance.c
239 $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tc_acceptance.o ../src/tc_acceptance.c
240
240
241 ####### Install
241 ####### Install
242
242
243 install: FORCE
243 install: FORCE
244
244
245 uninstall: FORCE
245 uninstall: FORCE
246
246
247 FORCE:
247 FORCE:
248
248
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -1,74 +1,74
1 TEMPLATE = app
1 TEMPLATE = app
2 # CONFIG += console v8 sim
2 # CONFIG += console v8 sim
3 # CONFIG options = verbose *** boot_messages *** debug_messages *** cpu_usage_report *** stack_report *** gsa
3 # CONFIG options = verbose *** boot_messages *** debug_messages *** cpu_usage_report *** stack_report *** gsa
4 CONFIG += console verbose
4 CONFIG += console verbose
5 CONFIG -= qt
5 CONFIG -= qt
6
6
7 include(./sparc.pri)
7 include(./sparc.pri)
8
8
9 # flight software version
9 # flight software version
10 SWVERSION=-0-16
10 SWVERSION=-0-17
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=16
14 DEFINES += SW_VERSION_N4=17
15
15
16 contains( CONFIG, verbose ) {
16 contains( CONFIG, verbose ) {
17 DEFINES += PRINT_MESSAGES_ON_CONSOLE
17 DEFINES += PRINT_MESSAGES_ON_CONSOLE
18 }
18 }
19
19
20 contains( CONFIG, cpu_usage_report ) {
20 contains( CONFIG, cpu_usage_report ) {
21 DEFINES += PRINT_TASK_STATISTICS
21 DEFINES += PRINT_TASK_STATISTICS
22 }
22 }
23
23
24 contains( CONFIG, stack_report ) {
24 contains( CONFIG, stack_report ) {
25 DEFINES += PRINT_STACK_REPORT
25 DEFINES += PRINT_STACK_REPORT
26 }
26 }
27
27
28 contains( CONFIG, boot_messages ) {
28 contains( CONFIG, boot_messages ) {
29 DEFINES += BOOT_MESSAGES
29 DEFINES += BOOT_MESSAGES
30 }
30 }
31
31
32 #doxygen.target = doxygen
32 #doxygen.target = doxygen
33 #doxygen.commands = doxygen ../doc/Doxyfile
33 #doxygen.commands = doxygen ../doc/Doxyfile
34 #QMAKE_EXTRA_TARGETS += doxygen
34 #QMAKE_EXTRA_TARGETS += doxygen
35
35
36 TARGET = fsw
36 TARGET = fsw
37 contains( CONFIG, gsa ) {
37 contains( CONFIG, gsa ) {
38 DEFINES += GSA
38 DEFINES += GSA
39 TARGET = fsw-gsa
39 TARGET = fsw-gsa
40 }
40 }
41
41
42 INCLUDEPATH += \
42 INCLUDEPATH += \
43 ../src \
43 ../src \
44 ../header
44 ../header
45
45
46 SOURCES += \
46 SOURCES += \
47 ../src/wf_handler.c \
47 ../src/wf_handler.c \
48 ../src/tc_handler.c \
48 ../src/tc_handler.c \
49 ../src/fsw_processing.c \
49 ../src/fsw_processing.c \
50 ../src/fsw_misc.c \
50 ../src/fsw_misc.c \
51 ../src/fsw_init.c \
51 ../src/fsw_init.c \
52 ../src/fsw_globals.c \
52 ../src/fsw_globals.c \
53 ../src/fsw_spacewire.c \
53 ../src/fsw_spacewire.c \
54 ../src/tc_load_dump_parameters.c \
54 ../src/tc_load_dump_parameters.c \
55 ../src/tm_lfr_tc_exe.c \
55 ../src/tm_lfr_tc_exe.c \
56 ../src/tc_acceptance.c
56 ../src/tc_acceptance.c
57
57
58
58
59 HEADERS += \
59 HEADERS += \
60 ../header/wf_handler.h \
60 ../header/wf_handler.h \
61 ../header/tc_handler.h \
61 ../header/tc_handler.h \
62 ../header/grlib_regs.h \
62 ../header/grlib_regs.h \
63 ../header/fsw_processing.h \
63 ../header/fsw_processing.h \
64 ../header/fsw_params.h \
64 ../header/fsw_params.h \
65 ../header/fsw_misc.h \
65 ../header/fsw_misc.h \
66 ../header/fsw_init.h \
66 ../header/fsw_init.h \
67 ../header/ccsds_types.h \
67 ../header/ccsds_types.h \
68 ../header/fsw_params_processing.h \
68 ../header/fsw_params_processing.h \
69 ../header/fsw_spacewire.h \
69 ../header/fsw_spacewire.h \
70 ../header/tm_byte_positions.h \
70 ../header/tm_byte_positions.h \
71 ../header/tc_load_dump_parameters.h \
71 ../header/tc_load_dump_parameters.h \
72 ../header/tm_lfr_tc_exe.h \
72 ../header/tm_lfr_tc_exe.h \
73 ../header/tc_acceptance.h
73 ../header/tc_acceptance.h
74
74
@@ -1,586 +1,590
1 /** Functions related to the SpaceWire interface.
1 /** Functions related to the SpaceWire interface.
2 *
2 *
3 * @file
3 * @file
4 * @author P. LEROY
4 * @author P. LEROY
5 *
5 *
6 * A group of functions to handle SpaceWire transmissions:
6 * A group of functions to handle SpaceWire transmissions:
7 * - configuration of the SpaceWire link
7 * - configuration of the SpaceWire link
8 * - SpaceWire related interruption requests processing
8 * - SpaceWire related interruption requests processing
9 * - transmission of TeleMetry packets by a dedicated RTEMS task
9 * - transmission of TeleMetry packets by a dedicated RTEMS task
10 * - reception of TeleCommands by a dedicated RTEMS task
10 * - reception of TeleCommands by a dedicated RTEMS task
11 *
11 *
12 */
12 */
13
13
14 #include "fsw_spacewire.h"
14 #include "fsw_spacewire.h"
15
15
16 char *lstates[6] = {"Error-reset",
16 char *lstates[6] = {"Error-reset",
17 "Error-wait",
17 "Error-wait",
18 "Ready",
18 "Ready",
19 "Started",
19 "Started",
20 "Connecting",
20 "Connecting",
21 "Run"
21 "Run"
22 };
22 };
23
23
24 //***********
24 //***********
25 // RTEMS TASK
25 // RTEMS TASK
26 rtems_task spiq_task(rtems_task_argument unused)
26 rtems_task spiq_task(rtems_task_argument unused)
27 {
27 {
28 /** This RTEMS task is awaken by an rtems_event sent by the interruption subroutine of the SpaceWire driver.
28 /** This RTEMS task is awaken by an rtems_event sent by the interruption subroutine of the SpaceWire driver.
29 *
29 *
30 * @param unused is the starting argument of the RTEMS task
30 * @param unused is the starting argument of the RTEMS task
31 *
31 *
32 */
32 */
33
33
34 rtems_event_set event_out;
34 rtems_event_set event_out;
35 rtems_status_code status;
35 rtems_status_code status;
36 int linkStatus;
36 int linkStatus;
37
37
38 BOOT_PRINTF("in SPIQ *** \n")
38 BOOT_PRINTF("in SPIQ *** \n")
39
39
40 while(true){
40 while(true){
41 rtems_event_receive(SPW_LINKERR_EVENT, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an SPW_LINKERR_EVENT
41 rtems_event_receive(SPW_LINKERR_EVENT, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an SPW_LINKERR_EVENT
42 PRINTF("in SPIQ *** got SPW_LINKERR_EVENT\n")
42
43
43 // [0] SUSPEND RECV ADN SEND TASKS
44 // [0] SUSPEND RECV ADN SEND TASKS
44 rtems_task_suspend( Task_id[ TASKID_RECV ] );
45 rtems_task_suspend( Task_id[ TASKID_RECV ] );
45 rtems_task_suspend( Task_id[ TASKID_SEND ] );
46 rtems_task_suspend( Task_id[ TASKID_SEND ] );
46
47
47 // [1] CHECK THE LINK
48 // [1] CHECK THE LINK
48 ioctl(fdSPW, SPACEWIRE_IOCTRL_GET_LINK_STATUS, &linkStatus); // get the link status (1)
49 ioctl(fdSPW, SPACEWIRE_IOCTRL_GET_LINK_STATUS, &linkStatus); // get the link status (1)
49 if ( linkStatus != 5) {
50 if ( linkStatus != 5) {
50 PRINTF1("in SPIQ *** linkStatus %d, wait...\n", linkStatus)
51 PRINTF1("in SPIQ *** linkStatus %d, wait...\n", linkStatus)
51 rtems_task_wake_after( SY_LFR_DPU_CONNECT_TIMEOUT ); // wait SY_LFR_DPU_CONNECT_TIMEOUT 1000 ms
52 rtems_task_wake_after( SY_LFR_DPU_CONNECT_TIMEOUT ); // wait SY_LFR_DPU_CONNECT_TIMEOUT 1000 ms
52 }
53 }
53
54
54 // [2] RECHECK THE LINK AFTER SY_LFR_DPU_CONNECT_TIMEOUT
55 // [2] RECHECK THE LINK AFTER SY_LFR_DPU_CONNECT_TIMEOUT
55 ioctl(fdSPW, SPACEWIRE_IOCTRL_GET_LINK_STATUS, &linkStatus); // get the link status (2)
56 ioctl(fdSPW, SPACEWIRE_IOCTRL_GET_LINK_STATUS, &linkStatus); // get the link status (2)
56 if ( linkStatus != 5 ) // [2.a] not in run state, reset the link
57 if ( linkStatus != 5 ) // [2.a] not in run state, reset the link
57 {
58 {
58 spacewire_compute_stats_offsets();
59 spacewire_compute_stats_offsets();
59 status = spacewire_reset_link( );
60 status = spacewire_reset_link( );
60 }
61 }
61 else // [2.b] in run state, start the link
62 else // [2.b] in run state, start the link
62 {
63 {
63 status = spacewire_stop_start_link( fdSPW ); // start the link
64 status = spacewire_stop_start_link( fdSPW ); // start the link
64 if ( status != RTEMS_SUCCESSFUL)
65 if ( status != RTEMS_SUCCESSFUL)
65 {
66 {
66 PRINTF1("in SPIQ *** ERR spacewire_start_link %d\n", status)
67 PRINTF1("in SPIQ *** ERR spacewire_start_link %d\n", status)
67 }
68 }
68 }
69 }
69
70
70 // [3] COMPLETE RECOVERY ACTION AFTER SY_LFR_DPU_CONNECT_ATTEMPTS
71 // [3] COMPLETE RECOVERY ACTION AFTER SY_LFR_DPU_CONNECT_ATTEMPTS
71 if ( status == RTEMS_SUCCESSFUL ) // [3.a] the link is in run state and has been started successfully
72 if ( status == RTEMS_SUCCESSFUL ) // [3.a] the link is in run state and has been started successfully
72 {
73 {
73 status = rtems_task_resume( Task_id[ TASKID_SEND ] );
74 status = rtems_task_restart( Task_id[ TASKID_SEND ], 1 );
74 if ( status != RTEMS_SUCCESSFUL ) {
75 if ( status != RTEMS_SUCCESSFUL ) {
75 PRINTF("in SPIQ *** ERR resuming SEND Task\n")
76 PRINTF("in SPIQ *** ERR resuming SEND Task\n")
76 }
77 }
77 status = rtems_task_resume( Task_id[ TASKID_RECV ] );
78 status = rtems_task_restart( Task_id[ TASKID_RECV ], 1 );
78 if ( status != RTEMS_SUCCESSFUL ) {
79 if ( status != RTEMS_SUCCESSFUL ) {
79 PRINTF("in SPIQ *** ERR resuming RECV Task\n")
80 PRINTF("in SPIQ *** ERR resuming RECV Task\n")
80 }
81 }
81 }
82 }
82 else // [3.b] the link is not in run state, go in STANDBY mode
83 else // [3.b] the link is not in run state, go in STANDBY mode
83 {
84 {
84 status = enter_mode( LFR_MODE_STANDBY, NULL ); // enter the STANDBY mode
85 status = enter_mode( LFR_MODE_STANDBY, NULL ); // enter the STANDBY mode
85 if ( status != RTEMS_SUCCESSFUL ) {
86 if ( status != RTEMS_SUCCESSFUL ) {
86 PRINTF1("in SPIQ *** ERR enter_mode *** code %d\n", status)
87 PRINTF1("in SPIQ *** ERR enter_mode *** code %d\n", status)
87 }
88 }
88 // wake the WTDG task
89 // wake the WTDG task up to wait for the link recovery
89 status = rtems_event_send ( Task_id[TASKID_WTDG], RTEMS_EVENT_0 );
90 status = rtems_event_send ( Task_id[TASKID_WTDG], RTEMS_EVENT_0 );
90 rtems_task_suspend( RTEMS_SELF );
91 rtems_task_suspend( RTEMS_SELF );
91 }
92 }
92 }
93 }
93 }
94 }
94
95
95 rtems_task recv_task( rtems_task_argument unused )
96 rtems_task recv_task( rtems_task_argument unused )
96 {
97 {
97 /** This RTEMS task is dedicated to the reception of incoming TeleCommands.
98 /** This RTEMS task is dedicated to the reception of incoming TeleCommands.
98 *
99 *
99 * @param unused is the starting argument of the RTEMS task
100 * @param unused is the starting argument of the RTEMS task
100 *
101 *
101 * The RECV task blocks on a call to the read system call, waiting for incoming SpaceWire data. When unblocked:
102 * The RECV task blocks on a call to the read system call, waiting for incoming SpaceWire data. When unblocked:
102 * 1. It reads the incoming data.
103 * 1. It reads the incoming data.
103 * 2. Launches the acceptance procedure.
104 * 2. Launches the acceptance procedure.
104 * 3. If the Telecommand is valid, sends it to a dedicated RTEMS message queue.
105 * 3. If the Telecommand is valid, sends it to a dedicated RTEMS message queue.
105 *
106 *
106 */
107 */
107
108
108 int len;
109 int len;
109 ccsdsTelecommandPacket_t currentTC;
110 ccsdsTelecommandPacket_t currentTC;
110 unsigned char computed_CRC[ 2 ];
111 unsigned char computed_CRC[ 2 ];
111 unsigned char currentTC_LEN_RCV[ 2 ];
112 unsigned char currentTC_LEN_RCV[ 2 ];
112 unsigned int currentTC_LEN_RCV_AsUnsignedInt;
113 unsigned int currentTC_LEN_RCV_AsUnsignedInt;
113 unsigned int parserCode;
114 unsigned int parserCode;
114 rtems_status_code status;
115 rtems_status_code status;
115 rtems_id queue_recv_id;
116 rtems_id queue_recv_id;
116 rtems_id queue_send_id;
117 rtems_id queue_send_id;
117
118
118 initLookUpTableForCRC(); // the table is used to compute Cyclic Redundancy Codes
119 initLookUpTableForCRC(); // the table is used to compute Cyclic Redundancy Codes
119
120
120 status = rtems_message_queue_ident( misc_name[QUEUE_RECV], 0, &queue_recv_id );
121 status = rtems_message_queue_ident( misc_name[QUEUE_RECV], 0, &queue_recv_id );
121 if (status != RTEMS_SUCCESSFUL)
122 if (status != RTEMS_SUCCESSFUL)
122 {
123 {
123 PRINTF1("in RECV *** ERR getting QUEUE_RECV id, %d\n", status)
124 PRINTF1("in RECV *** ERR getting QUEUE_RECV id, %d\n", status)
124 }
125 }
125
126
126 status = rtems_message_queue_ident( misc_name[QUEUE_SEND], 0, &queue_send_id );
127 status = rtems_message_queue_ident( misc_name[QUEUE_SEND], 0, &queue_send_id );
127 if (status != RTEMS_SUCCESSFUL)
128 if (status != RTEMS_SUCCESSFUL)
128 {
129 {
129 PRINTF1("in RECV *** ERR getting QUEUE_SEND id, %d\n", status)
130 PRINTF1("in RECV *** ERR getting QUEUE_SEND id, %d\n", status)
130 }
131 }
131
132
132 BOOT_PRINTF("in RECV *** \n")
133 BOOT_PRINTF("in RECV *** \n")
133
134
134 while(1)
135 while(1)
135 {
136 {
136 len = read( fdSPW, (char*) &currentTC, CCSDS_TC_PKT_MAX_SIZE ); // the call to read is blocking
137 len = read( fdSPW, (char*) &currentTC, CCSDS_TC_PKT_MAX_SIZE ); // the call to read is blocking
137 if (len == -1){ // error during the read call
138 if (len == -1){ // error during the read call
138 PRINTF1("in RECV *** last read call returned -1, ERRNO %d\n", errno)
139 PRINTF1("in RECV *** last read call returned -1, ERRNO %d\n", errno)
139 }
140 }
140 else {
141 else {
141 if ( (len+1) < CCSDS_TC_PKT_MIN_SIZE ) {
142 if ( (len+1) < CCSDS_TC_PKT_MIN_SIZE ) {
142 PRINTF("in RECV *** packet lenght too short\n")
143 PRINTF("in RECV *** packet lenght too short\n")
143 }
144 }
144 else {
145 else {
145 currentTC_LEN_RCV_AsUnsignedInt = (unsigned int) (len - CCSDS_TC_TM_PACKET_OFFSET - 3); // => -3 is for Prot ID, Reserved and User App bytes
146 currentTC_LEN_RCV_AsUnsignedInt = (unsigned int) (len - CCSDS_TC_TM_PACKET_OFFSET - 3); // => -3 is for Prot ID, Reserved and User App bytes
146 currentTC_LEN_RCV[ 0 ] = (unsigned char) (currentTC_LEN_RCV_AsUnsignedInt >> 8);
147 currentTC_LEN_RCV[ 0 ] = (unsigned char) (currentTC_LEN_RCV_AsUnsignedInt >> 8);
147 currentTC_LEN_RCV[ 1 ] = (unsigned char) (currentTC_LEN_RCV_AsUnsignedInt );
148 currentTC_LEN_RCV[ 1 ] = (unsigned char) (currentTC_LEN_RCV_AsUnsignedInt );
148 // CHECK THE TC
149 // CHECK THE TC
149 parserCode = tc_parser( &currentTC, currentTC_LEN_RCV_AsUnsignedInt, computed_CRC ) ;
150 parserCode = tc_parser( &currentTC, currentTC_LEN_RCV_AsUnsignedInt, computed_CRC ) ;
150 if ( (parserCode == ILLEGAL_APID) || (parserCode == WRONG_LEN_PACKET) || (parserCode == INCOR_CHECKSUM)
151 if ( (parserCode == ILLEGAL_APID) || (parserCode == WRONG_LEN_PACKET) || (parserCode == INCOR_CHECKSUM)
151 | (parserCode == ILL_TYPE) || (parserCode == ILL_SUBTYPE) || (parserCode == WRONG_APP_DATA) )
152 | (parserCode == ILL_TYPE) || (parserCode == ILL_SUBTYPE) || (parserCode == WRONG_APP_DATA) )
152 { // send TM_LFR_TC_EXE_CORRUPTED
153 { // send TM_LFR_TC_EXE_CORRUPTED
153 send_tm_lfr_tc_exe_corrupted( &currentTC, queue_send_id, computed_CRC, currentTC_LEN_RCV );
154 send_tm_lfr_tc_exe_corrupted( &currentTC, queue_send_id, computed_CRC, currentTC_LEN_RCV );
154 }
155 }
155 else
156 else
156 { // send valid TC to the action launcher
157 { // send valid TC to the action launcher
157 status = rtems_message_queue_send( queue_recv_id, &currentTC,
158 status = rtems_message_queue_send( queue_recv_id, &currentTC,
158 currentTC_LEN_RCV_AsUnsignedInt + CCSDS_TC_TM_PACKET_OFFSET + 3);
159 currentTC_LEN_RCV_AsUnsignedInt + CCSDS_TC_TM_PACKET_OFFSET + 3);
159 }
160 }
160 }
161 }
161 }
162 }
162 }
163 }
163 }
164 }
164
165
165 rtems_task send_task( rtems_task_argument argument)
166 rtems_task send_task( rtems_task_argument argument)
166 {
167 {
167 /** This RTEMS task is dedicated to the transmission of TeleMetry packets.
168 /** This RTEMS task is dedicated to the transmission of TeleMetry packets.
168 *
169 *
169 * @param unused is the starting argument of the RTEMS task
170 * @param unused is the starting argument of the RTEMS task
170 *
171 *
171 * The SEND task waits for a message to become available in the dedicated RTEMS queue. When a message arrives:
172 * The SEND task waits for a message to become available in the dedicated RTEMS queue. When a message arrives:
172 * - if the first byte is equal to CCSDS_DESTINATION_ID, the message is sent as is using the write system call.
173 * - if the first byte is equal to CCSDS_DESTINATION_ID, the message is sent as is using the write system call.
173 * - if the first byte is not equal to CCSDS_DESTINATION_ID, the message is handled as a spw_ioctl_pkt_send. After
174 * - if the first byte is not equal to CCSDS_DESTINATION_ID, the message is handled as a spw_ioctl_pkt_send. After
174 * analyzis, the packet is sent either using the write system call or using the ioctl call SPACEWIRE_IOCTRL_SEND, depending on the
175 * analyzis, the packet is sent either using the write system call or using the ioctl call SPACEWIRE_IOCTRL_SEND, depending on the
175 * data it contains.
176 * data it contains.
176 *
177 *
177 */
178 */
178
179
179 rtems_status_code status; // RTEMS status code
180 rtems_status_code status; // RTEMS status code
180 char incomingData[ACTION_MSG_PKTS_MAX_SIZE]; // incoming data buffer
181 char incomingData[ACTION_MSG_PKTS_MAX_SIZE]; // incoming data buffer
181 spw_ioctl_pkt_send *spw_ioctl_send;
182 spw_ioctl_pkt_send *spw_ioctl_send;
182 size_t size; // size of the incoming TC packet
183 size_t size; // size of the incoming TC packet
183 u_int32_t count;
184 u_int32_t count;
184 rtems_id queue_id;
185 rtems_id queue_id;
185
186
186 status = rtems_message_queue_ident( misc_name[QUEUE_SEND], 0, &queue_id );
187 status = rtems_message_queue_ident( misc_name[QUEUE_SEND], 0, &queue_id );
187 if (status != RTEMS_SUCCESSFUL)
188 if (status != RTEMS_SUCCESSFUL)
188 {
189 {
189 PRINTF1("in SEND *** ERR getting queue id, %d\n", status)
190 PRINTF1("in SEND *** ERR getting queue id, %d\n", status)
190 }
191 }
191
192
192 BOOT_PRINTF("in SEND *** \n")
193 BOOT_PRINTF("in SEND *** \n")
193
194
194 while(1)
195 while(1)
195 {
196 {
196 status = rtems_message_queue_receive( queue_id, incomingData, &size,
197 status = rtems_message_queue_receive( queue_id, incomingData, &size,
197 RTEMS_WAIT, RTEMS_NO_TIMEOUT );
198 RTEMS_WAIT, RTEMS_NO_TIMEOUT );
198
199
199 if (status!=RTEMS_SUCCESSFUL)
200 if (status!=RTEMS_SUCCESSFUL)
200 {
201 {
201 PRINTF1("in SEND *** (1) ERR = %d\n", status)
202 PRINTF1("in SEND *** (1) ERR = %d\n", status)
202 }
203 }
203 else
204 else
204 {
205 {
205 if ( incomingData[0] == CCSDS_DESTINATION_ID) // the incoming message is a ccsds packet
206 if ( incomingData[0] == CCSDS_DESTINATION_ID) // the incoming message is a ccsds packet
206 {
207 {
207 status = write( fdSPW, incomingData, size );
208 status = write( fdSPW, incomingData, size );
208 if (status == -1){
209 if (status == -1){
209 PRINTF2("in SEND *** (2.a) ERR = %d, size = %d\n", status, size)
210 PRINTF2("in SEND *** (2.a) ERRNO = %d, size = %d\n", errno, size)
210 }
211 }
211 }
212 }
212 else // the incoming message is a spw_ioctl_pkt_send structure
213 else // the incoming message is a spw_ioctl_pkt_send structure
213 {
214 {
214 spw_ioctl_send = (spw_ioctl_pkt_send*) incomingData;
215 spw_ioctl_send = (spw_ioctl_pkt_send*) incomingData;
215 if (spw_ioctl_send->hlen == 0)
216 if (spw_ioctl_send->hlen == 0)
216 {
217 {
217 status = write( fdSPW, spw_ioctl_send->data, spw_ioctl_send->dlen );
218 status = write( fdSPW, spw_ioctl_send->data, spw_ioctl_send->dlen );
218 if (status == -1){
219 if (status == -1){
219 PRINTF2("in SEND *** (2.b) ERR = %d, dlen = %d\n", status, spw_ioctl_send->dlen)
220 PRINTF2("in SEND *** (2.b) ERRNO = %d, dlen = %d\n", errno, spw_ioctl_send->dlen)
220 }
221 }
221 }
222 }
222 else
223 else
223 {
224 {
224 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, spw_ioctl_send );
225 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, spw_ioctl_send );
225 if (status == -1){
226 if (status == -1){
226 PRINTF2("in SEND *** (2.c) ERR = %d, dlen = %d\n", status, spw_ioctl_send->dlen)
227 PRINTF2("in SEND *** (2.c) ERRNO = %d, dlen = %d\n", errno, spw_ioctl_send->dlen)
227 PRINTF1(" hlen = %d\n", spw_ioctl_send->hlen)
228 PRINTF1(" hlen = %d\n", spw_ioctl_send->hlen)
228 }
229 }
229 }
230 }
230 }
231 }
231 }
232 }
232
233
233 status = rtems_message_queue_get_number_pending( queue_id, &count );
234 status = rtems_message_queue_get_number_pending( queue_id, &count );
234 if (status != RTEMS_SUCCESSFUL)
235 if (status != RTEMS_SUCCESSFUL)
235 {
236 {
236 PRINTF1("in SEND *** (3) ERR = %d\n", status)
237 PRINTF1("in SEND *** (3) ERR = %d\n", status)
237 }
238 }
238 else
239 else
239 {
240 {
240 if (count > maxCount)
241 if (count > maxCount)
241 {
242 {
242 maxCount = count;
243 maxCount = count;
243 }
244 }
244 }
245 }
245 }
246 }
246 }
247 }
247
248
248 rtems_task wtdg_task( rtems_task_argument argument )
249 rtems_task wtdg_task( rtems_task_argument argument )
249 {
250 {
250 rtems_event_set event_out;
251 rtems_event_set event_out;
251 rtems_status_code status;
252 rtems_status_code status;
252 int linkStatus;
253 int linkStatus;
253
254
254 BOOT_PRINTF("in WTDG ***\n")
255 BOOT_PRINTF("in WTDG ***\n")
255
256
256 while(1)
257 while(1)
257 {
258 {
258 // wait for an RTEMS_EVENT
259 // wait for an RTEMS_EVENT
259 rtems_event_receive( RTEMS_EVENT_0,
260 rtems_event_receive( RTEMS_EVENT_0,
260 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
261 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
261 PRINTF("in WTDG *** wait for the link\n")
262 PRINTF("in WTDG *** wait for the link\n")
262 ioctl(fdSPW, SPACEWIRE_IOCTRL_GET_LINK_STATUS, &linkStatus); // get the link status
263 ioctl(fdSPW, SPACEWIRE_IOCTRL_GET_LINK_STATUS, &linkStatus); // get the link status
263 while( linkStatus != 5) // wait for the link
264 while( linkStatus != 5) // wait for the link
264 {
265 {
265 rtems_task_wake_after( 10 );
266 rtems_task_wake_after( 10 );
266 ioctl(fdSPW, SPACEWIRE_IOCTRL_GET_LINK_STATUS, &linkStatus); // get the link status
267 ioctl(fdSPW, SPACEWIRE_IOCTRL_GET_LINK_STATUS, &linkStatus); // get the link status
267 }
268 }
268
269
269 status = spacewire_stop_start_link( fdSPW );
270 status = spacewire_stop_start_link( fdSPW );
270
271
271 if (status != RTEMS_SUCCESSFUL)
272 if (status != RTEMS_SUCCESSFUL)
272 {
273 {
273 PRINTF1("in WTDG *** ERR link not started %d\n", status)
274 PRINTF1("in WTDG *** ERR link not started %d\n", status)
274 }
275 }
275 else
276 else
276 {
277 {
277 PRINTF("in WTDG *** OK link started\n")
278 PRINTF("in WTDG *** OK link started\n")
278 }
279 }
279
280
280 // restart the SPIQ task
281 // restart the SPIQ task
281 rtems_task_restart( Task_id[TASKID_SPIQ], 1 );
282 status = rtems_task_restart( Task_id[TASKID_SPIQ], 1 );
283 if ( status != RTEMS_SUCCESSFUL ) {
284 PRINTF("in SPIQ *** ERR restarting SPIQ Task\n")
285 }
282
286
283 // resume RECV and SEND
287 // restart RECV and SEND
284 status = rtems_task_restart( Task_id[ TASKID_SEND ], 1 );
288 status = rtems_task_restart( Task_id[ TASKID_SEND ], 1 );
285 if ( status != RTEMS_SUCCESSFUL ) {
289 if ( status != RTEMS_SUCCESSFUL ) {
286 PRINTF("in SPIQ *** ERR resuming SEND Task\n")
290 PRINTF("in SPIQ *** ERR restarting SEND Task\n")
287 }
291 }
288 status = rtems_task_restart( Task_id[ TASKID_RECV ], 1 );
292 status = rtems_task_restart( Task_id[ TASKID_RECV ], 1 );
289 if ( status != RTEMS_SUCCESSFUL ) {
293 if ( status != RTEMS_SUCCESSFUL ) {
290 PRINTF("in SPIQ *** ERR resuming RECV Task\n")
294 PRINTF("in SPIQ *** ERR restarting RECV Task\n")
291 }
295 }
292 }
296 }
293 }
297 }
294
298
295 //****************
299 //****************
296 // OTHER FUNCTIONS
300 // OTHER FUNCTIONS
297 int spacewire_open_link( void )
301 int spacewire_open_link( void )
298 {
302 {
299 /** This function opens the SpaceWire link.
303 /** This function opens the SpaceWire link.
300 *
304 *
301 * @return a valid file descriptor in case of success, -1 in case of a failure
305 * @return a valid file descriptor in case of success, -1 in case of a failure
302 *
306 *
303 */
307 */
304 rtems_status_code status;
308 rtems_status_code status;
305
309
306 fdSPW = open(GRSPW_DEVICE_NAME, O_RDWR); // open the device. the open call resets the hardware
310 fdSPW = open(GRSPW_DEVICE_NAME, O_RDWR); // open the device. the open call resets the hardware
307 if ( fdSPW < 0 ) {
311 if ( fdSPW < 0 ) {
308 PRINTF1("ERR *** in configure_spw_link *** error opening "GRSPW_DEVICE_NAME" with ERR %d\n", errno)
312 PRINTF1("ERR *** in configure_spw_link *** error opening "GRSPW_DEVICE_NAME" with ERR %d\n", errno)
309 }
313 }
310 else
314 else
311 {
315 {
312 status = RTEMS_SUCCESSFUL;
316 status = RTEMS_SUCCESSFUL;
313 }
317 }
314
318
315 return status;
319 return status;
316 }
320 }
317
321
318 int spacewire_start_link( int fd )
322 int spacewire_start_link( int fd )
319 {
323 {
320 rtems_status_code status;
324 rtems_status_code status;
321
325
322 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_START, -1); // returns successfuly if the link is started
326 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_START, -1); // returns successfuly if the link is started
323 // -1 default hardcoded driver timeout
327 // -1 default hardcoded driver timeout
324
328
325 return status;
329 return status;
326 }
330 }
327
331
328 int spacewire_stop_start_link( int fd )
332 int spacewire_stop_start_link( int fd )
329 {
333 {
330 rtems_status_code status;
334 rtems_status_code status;
331
335
332 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_STOP); // start fails if link pDev->running != 0
336 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_STOP); // start fails if link pDev->running != 0
333 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_START, -1); // returns successfuly if the link is started
337 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_START, -1); // returns successfuly if the link is started
334 // -1 default hardcoded driver timeout
338 // -1 default hardcoded driver timeout
335
339
336 return status;
340 return status;
337 }
341 }
338
342
339 int spacewire_configure_link( int fd )
343 int spacewire_configure_link( int fd )
340 {
344 {
341 /** This function configures the SpaceWire link.
345 /** This function configures the SpaceWire link.
342 *
346 *
343 * @return GR-RTEMS-DRIVER directive status codes:
347 * @return GR-RTEMS-DRIVER directive status codes:
344 * - 22 EINVAL - Null pointer or an out of range value was given as the argument.
348 * - 22 EINVAL - Null pointer or an out of range value was given as the argument.
345 * - 16 EBUSY - Only used for SEND. Returned when no descriptors are avialble in non-blocking mode.
349 * - 16 EBUSY - Only used for SEND. Returned when no descriptors are avialble in non-blocking mode.
346 * - 88 ENOSYS - Returned for SET_DESTKEY if RMAP command handler is not available or if a non-implemented call is used.
350 * - 88 ENOSYS - Returned for SET_DESTKEY if RMAP command handler is not available or if a non-implemented call is used.
347 * - 116 ETIMEDOUT - REturned for SET_PACKET_SIZE and START if the link could not be brought up.
351 * - 116 ETIMEDOUT - REturned for SET_PACKET_SIZE and START if the link could not be brought up.
348 * - 12 ENOMEM - Returned for SET_PACKETSIZE if it was unable to allocate the new buffers.
352 * - 12 ENOMEM - Returned for SET_PACKETSIZE if it was unable to allocate the new buffers.
349 * - 5 EIO - Error when writing to grswp hardware registers.
353 * - 5 EIO - Error when writing to grswp hardware registers.
350 * - 2 ENOENT - No such file or directory
354 * - 2 ENOENT - No such file or directory
351 */
355 */
352
356
353 rtems_status_code status;
357 rtems_status_code status;
354
358
355 spacewire_set_NP(1, REGS_ADDR_GRSPW); // [N]o [P]ort force
359 spacewire_set_NP(1, REGS_ADDR_GRSPW); // [N]o [P]ort force
356 spacewire_set_RE(1, REGS_ADDR_GRSPW); // [R]MAP [E]nable, the dedicated call seems to break the no port force configuration
360 spacewire_set_RE(1, REGS_ADDR_GRSPW); // [R]MAP [E]nable, the dedicated call seems to break the no port force configuration
357
361
358 status = ioctl(fd, SPACEWIRE_IOCTRL_SET_RXBLOCK, 1); // sets the blocking mode for reception
362 status = ioctl(fd, SPACEWIRE_IOCTRL_SET_RXBLOCK, 1); // sets the blocking mode for reception
359 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_RXBLOCK\n")
363 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_RXBLOCK\n")
360 //
364 //
361 status = ioctl(fd, SPACEWIRE_IOCTRL_SET_EVENT_ID, Task_id[TASKID_SPIQ]); // sets the task ID to which an event is sent when a
365 status = ioctl(fd, SPACEWIRE_IOCTRL_SET_EVENT_ID, Task_id[TASKID_SPIQ]); // sets the task ID to which an event is sent when a
362 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_EVENT_ID\n") // link-error interrupt occurs
366 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_EVENT_ID\n") // link-error interrupt occurs
363 //
367 //
364 status = ioctl(fd, SPACEWIRE_IOCTRL_SET_DISABLE_ERR, 0); // automatic link-disabling due to link-error interrupts
368 status = ioctl(fd, SPACEWIRE_IOCTRL_SET_DISABLE_ERR, 0); // automatic link-disabling due to link-error interrupts
365 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_DISABLE_ERR\n")
369 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_DISABLE_ERR\n")
366 //
370 //
367 status = ioctl(fd, SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ, 1); // sets the link-error interrupt bit
371 status = ioctl(fd, SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ, 1); // sets the link-error interrupt bit
368 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n")
372 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n")
369 //
373 //
370 status = ioctl(fd, SPACEWIRE_IOCTRL_SET_TXBLOCK, 0); // transmission blocks
374 status = ioctl(fd, SPACEWIRE_IOCTRL_SET_TXBLOCK, 0); // transmission blocks
371 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TXBLOCK\n")
375 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TXBLOCK\n")
372 //
376 //
373 status = ioctl(fd, SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL, 0); // transmission blocks on full
377 status = ioctl(fd, SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL, 1); // transmission blocks when no transmission descriptor is available
374 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL\n")
378 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL\n")
375 //
379 //
376 status = ioctl(fd, SPACEWIRE_IOCTRL_SET_TCODE_CTRL, 0x0909); // [Time Rx : Time Tx : Link error : Tick-out IRQ]
380 status = ioctl(fd, SPACEWIRE_IOCTRL_SET_TCODE_CTRL, 0x0909); // [Time Rx : Time Tx : Link error : Tick-out IRQ]
377 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TCODE_CTRL,\n")
381 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TCODE_CTRL,\n")
378
382
379 return status;
383 return status;
380 }
384 }
381
385
382 int spacewire_reset_link( void )
386 int spacewire_reset_link( void )
383 {
387 {
384 /** This function is executed by the SPIQ rtems_task wehn it has been awaken by an interruption raised by the SpaceWire driver.
388 /** This function is executed by the SPIQ rtems_task wehn it has been awaken by an interruption raised by the SpaceWire driver.
385 *
389 *
386 * @return RTEMS directive status code:
390 * @return RTEMS directive status code:
387 * - RTEMS_UNSATISFIED is returned is the link is not in the running state after 10 s.
391 * - RTEMS_UNSATISFIED is returned is the link is not in the running state after 10 s.
388 * - RTEMS_SUCCESSFUL is returned if the link is up before the timeout.
392 * - RTEMS_SUCCESSFUL is returned if the link is up before the timeout.
389 *
393 *
390 */
394 */
391
395
392 rtems_status_code status_spw;
396 rtems_status_code status_spw;
393 int i;
397 int i;
394
398
395 for ( i=0; i<SY_LFR_DPU_CONNECT_ATTEMPT; i++ )
399 for ( i=0; i<SY_LFR_DPU_CONNECT_ATTEMPT; i++ )
396 {
400 {
397 PRINTF1("in spacewire_reset_link *** link recovery, try %d\n", i);
401 PRINTF1("in spacewire_reset_link *** link recovery, try %d\n", i);
398
402
399 // CLOSING THE DRIVER AT THIS POINT WILL MAKE THE SEND TASK BLOCK THE SYSTEM
403 // CLOSING THE DRIVER AT THIS POINT WILL MAKE THE SEND TASK BLOCK THE SYSTEM
400
404
401 status_spw = spacewire_stop_start_link( fdSPW );
405 status_spw = spacewire_stop_start_link( fdSPW );
402 if ( status_spw != RTEMS_SUCCESSFUL )
406 if ( status_spw != RTEMS_SUCCESSFUL )
403 {
407 {
404 PRINTF1("in spacewire_reset_link *** ERR spacewire_start_link code %d\n", status_spw)
408 PRINTF1("in spacewire_reset_link *** ERR spacewire_start_link code %d\n", status_spw)
405 }
409 }
406
410
407 if ( status_spw == RTEMS_SUCCESSFUL)
411 if ( status_spw == RTEMS_SUCCESSFUL)
408 {
412 {
409 break;
413 break;
410 }
414 }
411 }
415 }
412
416
413 return status_spw;
417 return status_spw;
414 }
418 }
415
419
416 void spacewire_set_NP( unsigned char val, unsigned int regAddr ) // [N]o [P]ort force
420 void spacewire_set_NP( unsigned char val, unsigned int regAddr ) // [N]o [P]ort force
417 {
421 {
418 /** This function sets the [N]o [P]ort force bit of the GRSPW control register.
422 /** This function sets the [N]o [P]ort force bit of the GRSPW control register.
419 *
423 *
420 * @param val is the value, 0 or 1, used to set the value of the NP bit.
424 * @param val is the value, 0 or 1, used to set the value of the NP bit.
421 * @param regAddr is the address of the GRSPW control register.
425 * @param regAddr is the address of the GRSPW control register.
422 *
426 *
423 * NP is the bit 20 of the GRSPW control register.
427 * NP is the bit 20 of the GRSPW control register.
424 *
428 *
425 */
429 */
426
430
427 unsigned int *spwptr = (unsigned int*) regAddr;
431 unsigned int *spwptr = (unsigned int*) regAddr;
428
432
429 if (val == 1) {
433 if (val == 1) {
430 *spwptr = *spwptr | 0x00100000; // [NP] set the No port force bit
434 *spwptr = *spwptr | 0x00100000; // [NP] set the No port force bit
431 }
435 }
432 if (val== 0) {
436 if (val== 0) {
433 *spwptr = *spwptr & 0xffdfffff;
437 *spwptr = *spwptr & 0xffdfffff;
434 }
438 }
435 }
439 }
436
440
437 void spacewire_set_RE( unsigned char val, unsigned int regAddr ) // [R]MAP [E]nable
441 void spacewire_set_RE( unsigned char val, unsigned int regAddr ) // [R]MAP [E]nable
438 {
442 {
439 /** This function sets the [R]MAP [E]nable bit of the GRSPW control register.
443 /** This function sets the [R]MAP [E]nable bit of the GRSPW control register.
440 *
444 *
441 * @param val is the value, 0 or 1, used to set the value of the RE bit.
445 * @param val is the value, 0 or 1, used to set the value of the RE bit.
442 * @param regAddr is the address of the GRSPW control register.
446 * @param regAddr is the address of the GRSPW control register.
443 *
447 *
444 * RE is the bit 16 of the GRSPW control register.
448 * RE is the bit 16 of the GRSPW control register.
445 *
449 *
446 */
450 */
447
451
448 unsigned int *spwptr = (unsigned int*) regAddr;
452 unsigned int *spwptr = (unsigned int*) regAddr;
449
453
450 if (val == 1)
454 if (val == 1)
451 {
455 {
452 *spwptr = *spwptr | 0x00010000; // [RE] set the RMAP Enable bit
456 *spwptr = *spwptr | 0x00010000; // [RE] set the RMAP Enable bit
453 }
457 }
454 if (val== 0)
458 if (val== 0)
455 {
459 {
456 *spwptr = *spwptr & 0xfffdffff;
460 *spwptr = *spwptr & 0xfffdffff;
457 }
461 }
458 }
462 }
459
463
460 void spacewire_compute_stats_offsets( void )
464 void spacewire_compute_stats_offsets( void )
461 {
465 {
462 /** This function computes the SpaceWire statistics offsets in case of a SpaceWire related interruption raising.
466 /** This function computes the SpaceWire statistics offsets in case of a SpaceWire related interruption raising.
463 *
467 *
464 * The offsets keep a record of the statistics in case of a reset of the statistics. They are added to the current statistics
468 * The offsets keep a record of the statistics in case of a reset of the statistics. They are added to the current statistics
465 * to keep the counters consistent even after a reset of the SpaceWire driver (the counter are set to zero by the driver when it
469 * to keep the counters consistent even after a reset of the SpaceWire driver (the counter are set to zero by the driver when it
466 * during the open systel call).
470 * during the open systel call).
467 *
471 *
468 */
472 */
469
473
470 spw_stats spacewire_stats_grspw;
474 spw_stats spacewire_stats_grspw;
471 rtems_status_code status;
475 rtems_status_code status;
472
476
473 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_GET_STATISTICS, &spacewire_stats_grspw );
477 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_GET_STATISTICS, &spacewire_stats_grspw );
474
478
475 spacewire_stats_backup.packets_received = spacewire_stats_grspw.packets_received
479 spacewire_stats_backup.packets_received = spacewire_stats_grspw.packets_received
476 + spacewire_stats.packets_received;
480 + spacewire_stats.packets_received;
477 spacewire_stats_backup.packets_sent = spacewire_stats_grspw.packets_sent
481 spacewire_stats_backup.packets_sent = spacewire_stats_grspw.packets_sent
478 + spacewire_stats.packets_sent;
482 + spacewire_stats.packets_sent;
479 spacewire_stats_backup.parity_err = spacewire_stats_grspw.parity_err
483 spacewire_stats_backup.parity_err = spacewire_stats_grspw.parity_err
480 + spacewire_stats.parity_err;
484 + spacewire_stats.parity_err;
481 spacewire_stats_backup.disconnect_err = spacewire_stats_grspw.disconnect_err
485 spacewire_stats_backup.disconnect_err = spacewire_stats_grspw.disconnect_err
482 + spacewire_stats.disconnect_err;
486 + spacewire_stats.disconnect_err;
483 spacewire_stats_backup.escape_err = spacewire_stats_grspw.escape_err
487 spacewire_stats_backup.escape_err = spacewire_stats_grspw.escape_err
484 + spacewire_stats.escape_err;
488 + spacewire_stats.escape_err;
485 spacewire_stats_backup.credit_err = spacewire_stats_grspw.credit_err
489 spacewire_stats_backup.credit_err = spacewire_stats_grspw.credit_err
486 + spacewire_stats.credit_err;
490 + spacewire_stats.credit_err;
487 spacewire_stats_backup.write_sync_err = spacewire_stats_grspw.write_sync_err
491 spacewire_stats_backup.write_sync_err = spacewire_stats_grspw.write_sync_err
488 + spacewire_stats.write_sync_err;
492 + spacewire_stats.write_sync_err;
489 spacewire_stats_backup.rx_rmap_header_crc_err = spacewire_stats_grspw.rx_rmap_header_crc_err
493 spacewire_stats_backup.rx_rmap_header_crc_err = spacewire_stats_grspw.rx_rmap_header_crc_err
490 + spacewire_stats.rx_rmap_header_crc_err;
494 + spacewire_stats.rx_rmap_header_crc_err;
491 spacewire_stats_backup.rx_rmap_data_crc_err = spacewire_stats_grspw.rx_rmap_data_crc_err
495 spacewire_stats_backup.rx_rmap_data_crc_err = spacewire_stats_grspw.rx_rmap_data_crc_err
492 + spacewire_stats.rx_rmap_data_crc_err;
496 + spacewire_stats.rx_rmap_data_crc_err;
493 spacewire_stats_backup.early_ep = spacewire_stats_grspw.early_ep
497 spacewire_stats_backup.early_ep = spacewire_stats_grspw.early_ep
494 + spacewire_stats.early_ep;
498 + spacewire_stats.early_ep;
495 spacewire_stats_backup.invalid_address = spacewire_stats_grspw.invalid_address
499 spacewire_stats_backup.invalid_address = spacewire_stats_grspw.invalid_address
496 + spacewire_stats.invalid_address;
500 + spacewire_stats.invalid_address;
497 spacewire_stats_backup.rx_eep_err = spacewire_stats_grspw.rx_eep_err
501 spacewire_stats_backup.rx_eep_err = spacewire_stats_grspw.rx_eep_err
498 + spacewire_stats.rx_eep_err;
502 + spacewire_stats.rx_eep_err;
499 spacewire_stats_backup.rx_truncated = spacewire_stats_grspw.rx_truncated
503 spacewire_stats_backup.rx_truncated = spacewire_stats_grspw.rx_truncated
500 + spacewire_stats.rx_truncated;
504 + spacewire_stats.rx_truncated;
501 }
505 }
502
506
503 void spacewire_update_statistics( void )
507 void spacewire_update_statistics( void )
504 {
508 {
505 rtems_status_code status;
509 rtems_status_code status;
506 spw_stats spacewire_stats_grspw;
510 spw_stats spacewire_stats_grspw;
507
511
508 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_GET_STATISTICS, &spacewire_stats_grspw );
512 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_GET_STATISTICS, &spacewire_stats_grspw );
509
513
510 spacewire_stats.packets_received = spacewire_stats_backup.packets_received
514 spacewire_stats.packets_received = spacewire_stats_backup.packets_received
511 + spacewire_stats_grspw.packets_received;
515 + spacewire_stats_grspw.packets_received;
512 spacewire_stats.packets_sent = spacewire_stats_backup.packets_sent
516 spacewire_stats.packets_sent = spacewire_stats_backup.packets_sent
513 + spacewire_stats_grspw.packets_sent;
517 + spacewire_stats_grspw.packets_sent;
514 spacewire_stats.parity_err = spacewire_stats_backup.parity_err
518 spacewire_stats.parity_err = spacewire_stats_backup.parity_err
515 + spacewire_stats_grspw.parity_err;
519 + spacewire_stats_grspw.parity_err;
516 spacewire_stats.disconnect_err = spacewire_stats_backup.disconnect_err
520 spacewire_stats.disconnect_err = spacewire_stats_backup.disconnect_err
517 + spacewire_stats_grspw.disconnect_err;
521 + spacewire_stats_grspw.disconnect_err;
518 spacewire_stats.escape_err = spacewire_stats_backup.escape_err
522 spacewire_stats.escape_err = spacewire_stats_backup.escape_err
519 + spacewire_stats_grspw.escape_err;
523 + spacewire_stats_grspw.escape_err;
520 spacewire_stats.credit_err = spacewire_stats_backup.credit_err
524 spacewire_stats.credit_err = spacewire_stats_backup.credit_err
521 + spacewire_stats_grspw.credit_err;
525 + spacewire_stats_grspw.credit_err;
522 spacewire_stats.write_sync_err = spacewire_stats_backup.write_sync_err
526 spacewire_stats.write_sync_err = spacewire_stats_backup.write_sync_err
523 + spacewire_stats_grspw.write_sync_err;
527 + spacewire_stats_grspw.write_sync_err;
524 spacewire_stats.rx_rmap_header_crc_err = spacewire_stats_backup.rx_rmap_header_crc_err
528 spacewire_stats.rx_rmap_header_crc_err = spacewire_stats_backup.rx_rmap_header_crc_err
525 + spacewire_stats_grspw.rx_rmap_header_crc_err;
529 + spacewire_stats_grspw.rx_rmap_header_crc_err;
526 spacewire_stats.rx_rmap_data_crc_err = spacewire_stats_backup.rx_rmap_data_crc_err
530 spacewire_stats.rx_rmap_data_crc_err = spacewire_stats_backup.rx_rmap_data_crc_err
527 + spacewire_stats_grspw.rx_rmap_data_crc_err;
531 + spacewire_stats_grspw.rx_rmap_data_crc_err;
528 spacewire_stats.early_ep = spacewire_stats_backup.early_ep
532 spacewire_stats.early_ep = spacewire_stats_backup.early_ep
529 + spacewire_stats_grspw.early_ep;
533 + spacewire_stats_grspw.early_ep;
530 spacewire_stats.invalid_address = spacewire_stats_backup.invalid_address
534 spacewire_stats.invalid_address = spacewire_stats_backup.invalid_address
531 + spacewire_stats_grspw.invalid_address;
535 + spacewire_stats_grspw.invalid_address;
532 spacewire_stats.rx_eep_err = spacewire_stats_backup.rx_eep_err
536 spacewire_stats.rx_eep_err = spacewire_stats_backup.rx_eep_err
533 + spacewire_stats_grspw.rx_eep_err;
537 + spacewire_stats_grspw.rx_eep_err;
534 spacewire_stats.rx_truncated = spacewire_stats_backup.rx_truncated
538 spacewire_stats.rx_truncated = spacewire_stats_backup.rx_truncated
535 + spacewire_stats_grspw.rx_truncated;
539 + spacewire_stats_grspw.rx_truncated;
536 //spacewire_stats.tx_link_err;
540 //spacewire_stats.tx_link_err;
537
541
538 //****************************
542 //****************************
539 // DPU_SPACEWIRE_IF_STATISTICS
543 // DPU_SPACEWIRE_IF_STATISTICS
540 housekeeping_packet.hk_lfr_dpu_spw_pkt_rcv_cnt[0] = (unsigned char) (spacewire_stats.packets_received >> 8);
544 housekeeping_packet.hk_lfr_dpu_spw_pkt_rcv_cnt[0] = (unsigned char) (spacewire_stats.packets_received >> 8);
541 housekeeping_packet.hk_lfr_dpu_spw_pkt_rcv_cnt[1] = (unsigned char) (spacewire_stats.packets_received);
545 housekeeping_packet.hk_lfr_dpu_spw_pkt_rcv_cnt[1] = (unsigned char) (spacewire_stats.packets_received);
542 housekeeping_packet.hk_lfr_dpu_spw_pkt_sent_cnt[0] = (unsigned char) (spacewire_stats.packets_sent >> 8);
546 housekeeping_packet.hk_lfr_dpu_spw_pkt_sent_cnt[0] = (unsigned char) (spacewire_stats.packets_sent >> 8);
543 housekeeping_packet.hk_lfr_dpu_spw_pkt_sent_cnt[1] = (unsigned char) (spacewire_stats.packets_sent);
547 housekeeping_packet.hk_lfr_dpu_spw_pkt_sent_cnt[1] = (unsigned char) (spacewire_stats.packets_sent);
544 //housekeeping_packet.hk_lfr_dpu_spw_tick_out_cnt;
548 //housekeeping_packet.hk_lfr_dpu_spw_tick_out_cnt;
545 //housekeeping_packet.hk_lfr_dpu_spw_last_timc;
549 //housekeeping_packet.hk_lfr_dpu_spw_last_timc;
546
550
547 //******************************************
551 //******************************************
548 // ERROR COUNTERS / SPACEWIRE / LOW SEVERITY
552 // ERROR COUNTERS / SPACEWIRE / LOW SEVERITY
549 housekeeping_packet.hk_lfr_dpu_spw_parity = (unsigned char) spacewire_stats.parity_err;
553 housekeeping_packet.hk_lfr_dpu_spw_parity = (unsigned char) spacewire_stats.parity_err;
550 housekeeping_packet.hk_lfr_dpu_spw_disconnect = (unsigned char) spacewire_stats.disconnect_err;
554 housekeeping_packet.hk_lfr_dpu_spw_disconnect = (unsigned char) spacewire_stats.disconnect_err;
551 housekeeping_packet.hk_lfr_dpu_spw_escape = (unsigned char) spacewire_stats.escape_err;
555 housekeeping_packet.hk_lfr_dpu_spw_escape = (unsigned char) spacewire_stats.escape_err;
552 housekeeping_packet.hk_lfr_dpu_spw_credit = (unsigned char) spacewire_stats.credit_err;
556 housekeeping_packet.hk_lfr_dpu_spw_credit = (unsigned char) spacewire_stats.credit_err;
553 housekeeping_packet.hk_lfr_dpu_spw_write_sync = (unsigned char) spacewire_stats.write_sync_err;
557 housekeeping_packet.hk_lfr_dpu_spw_write_sync = (unsigned char) spacewire_stats.write_sync_err;
554 // housekeeping_packet.hk_lfr_dpu_spw_rx_ahb;
558 // housekeeping_packet.hk_lfr_dpu_spw_rx_ahb;
555 // housekeeping_packet.hk_lfr_dpu_spw_tx_ahb;
559 // housekeeping_packet.hk_lfr_dpu_spw_tx_ahb;
556 housekeeping_packet.hk_lfr_dpu_spw_header_crc = (unsigned char) spacewire_stats.rx_rmap_header_crc_err;
560 housekeeping_packet.hk_lfr_dpu_spw_header_crc = (unsigned char) spacewire_stats.rx_rmap_header_crc_err;
557 housekeeping_packet.hk_lfr_dpu_spw_data_crc = (unsigned char) spacewire_stats.rx_rmap_data_crc_err;
561 housekeeping_packet.hk_lfr_dpu_spw_data_crc = (unsigned char) spacewire_stats.rx_rmap_data_crc_err;
558
562
559 //*********************************************
563 //*********************************************
560 // ERROR COUNTERS / SPACEWIRE / MEDIUM SEVERITY
564 // ERROR COUNTERS / SPACEWIRE / MEDIUM SEVERITY
561 housekeeping_packet.hk_lfr_dpu_spw_early_eop = (unsigned char) spacewire_stats.early_ep;
565 housekeeping_packet.hk_lfr_dpu_spw_early_eop = (unsigned char) spacewire_stats.early_ep;
562 housekeeping_packet.hk_lfr_dpu_spw_invalid_addr = (unsigned char) spacewire_stats.invalid_address;
566 housekeeping_packet.hk_lfr_dpu_spw_invalid_addr = (unsigned char) spacewire_stats.invalid_address;
563 housekeeping_packet.hk_lfr_dpu_spw_eep = (unsigned char) spacewire_stats.rx_eep_err;
567 housekeeping_packet.hk_lfr_dpu_spw_eep = (unsigned char) spacewire_stats.rx_eep_err;
564 housekeeping_packet.hk_lfr_dpu_spw_rx_too_big = (unsigned char) spacewire_stats.rx_truncated;
568 housekeeping_packet.hk_lfr_dpu_spw_rx_too_big = (unsigned char) spacewire_stats.rx_truncated;
565
569
566 }
570 }
567
571
568 void timecode_irq_handler( void *pDev, void *regs, int minor, unsigned int tc )
572 void timecode_irq_handler( void *pDev, void *regs, int minor, unsigned int tc )
569 {
573 {
570 //if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_1 ) != RTEMS_SUCCESSFUL) {
574 //if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_1 ) != RTEMS_SUCCESSFUL) {
571 // printf("In timecode_irq_handler *** Error sending event to DUMB\n");
575 // printf("In timecode_irq_handler *** Error sending event to DUMB\n");
572 //}
576 //}
573 }
577 }
574
578
575 rtems_timer_service_routine user_routine( rtems_id timer_id, void *user_data )
579 rtems_timer_service_routine user_routine( rtems_id timer_id, void *user_data )
576 {
580 {
577 int linkStatus;
581 int linkStatus;
578 rtems_status_code status;
582 rtems_status_code status;
579
583
580 ioctl(fdSPW, SPACEWIRE_IOCTRL_GET_LINK_STATUS, &linkStatus); // get the link status
584 ioctl(fdSPW, SPACEWIRE_IOCTRL_GET_LINK_STATUS, &linkStatus); // get the link status
581
585
582 if ( linkStatus == 5) {
586 if ( linkStatus == 5) {
583 PRINTF("in spacewire_reset_link *** link is running\n")
587 PRINTF("in spacewire_reset_link *** link is running\n")
584 status = RTEMS_SUCCESSFUL;
588 status = RTEMS_SUCCESSFUL;
585 }
589 }
586 }
590 }
General Comments 0
You need to be logged in to leave comments. Login now