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