##// END OF EJS Templates
Draft implementation of the TC_LFR_LOAD_NORMAL_PAR
admin@pc-p-leroy3.LAB-LPP.LOCAL -
r10:4baf2642cd31 default
parent child
Show More
@@ -1,69 +1,69
1 <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
1 <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
2 <CodeBlocks_project_file>
2 <CodeBlocks_project_file>
3 <FileVersion major="1" minor="6" />
3 <FileVersion major="1" minor="6" />
4 <Project>
4 <Project>
5 <Option title="FSW-rtems" />
5 <Option title="FSW-rtems" />
6 <Option pch_mode="2" />
6 <Option pch_mode="2" />
7 <Option compiler="sparcrtemsgcc446" />
7 <Option compiler="sparcrtemsgcc446" />
8 <Build>
8 <Build>
9 <Target title="Debug">
9 <Target title="Debug">
10 <Option output="bin/Debug/fsw" prefix_auto="1" extension_auto="1" />
10 <Option output="bin/Debug/fsw" prefix_auto="1" extension_auto="1" />
11 <Option object_output="obj/Debug/" />
11 <Option object_output="obj/Debug/" />
12 <Option type="1" />
12 <Option type="1" />
13 <Option compiler="sparcrtemsgcc446" />
13 <Option compiler="sparcrtems446" />
14 <Compiler>
14 <Compiler>
15 <Add option="-fexpensive-optimizations" />
15 <Add option="-fexpensive-optimizations" />
16 <Add option="-O3" />
16 <Add option="-O3" />
17 <Add option="-g" />
17 <Add option="-g" />
18 <Add directory="../header" />
18 <Add directory="../header" />
19 <Add directory="../src" />
19 <Add directory="../src" />
20 </Compiler>
20 </Compiler>
21 </Target>
21 </Target>
22 <Target title="Release">
22 <Target title="Release">
23 <Option output="bin/Release/FSW-rtems" prefix_auto="1" extension_auto="1" />
23 <Option output="bin/Release/FSW-rtems" prefix_auto="1" extension_auto="1" />
24 <Option object_output="obj/Release/" />
24 <Option object_output="obj/Release/" />
25 <Option type="1" />
25 <Option type="1" />
26 <Option compiler="sparcrtemsgcc446" />
26 <Option compiler="sparcrtemsgcc446" />
27 <Compiler>
27 <Compiler>
28 <Add option="-O2" />
28 <Add option="-O2" />
29 </Compiler>
29 </Compiler>
30 <Linker>
30 <Linker>
31 <Add option="-s" />
31 <Add option="-s" />
32 </Linker>
32 </Linker>
33 </Target>
33 </Target>
34 </Build>
34 </Build>
35 <Compiler>
35 <Compiler>
36 <Add option="-Wall" />
36 <Add option="-Wall" />
37 </Compiler>
37 </Compiler>
38 <Unit filename="../header/ccsds_types.h" />
38 <Unit filename="../header/ccsds_types.h" />
39 <Unit filename="../header/fsw_init.h" />
39 <Unit filename="../header/fsw_init.h" />
40 <Unit filename="../header/fsw_misc.h" />
40 <Unit filename="../header/fsw_misc.h" />
41 <Unit filename="../header/fsw_params.h" />
41 <Unit filename="../header/fsw_params.h" />
42 <Unit filename="../header/fsw_processing.h" />
42 <Unit filename="../header/fsw_processing.h" />
43 <Unit filename="../header/grlib_regs.h" />
43 <Unit filename="../header/grlib_regs.h" />
44 <Unit filename="../header/tc_handler.h" />
44 <Unit filename="../header/tc_handler.h" />
45 <Unit filename="../header/wf_handler.h" />
45 <Unit filename="../header/wf_handler.h" />
46 <Unit filename="../src/fsw_globals.c">
46 <Unit filename="../src/fsw_globals.c">
47 <Option compilerVar="CC" />
47 <Option compilerVar="CC" />
48 </Unit>
48 </Unit>
49 <Unit filename="../src/fsw_init.c">
49 <Unit filename="../src/fsw_init.c">
50 <Option compilerVar="CC" />
50 <Option compilerVar="CC" />
51 </Unit>
51 </Unit>
52 <Unit filename="../src/fsw_misc.c">
52 <Unit filename="../src/fsw_misc.c">
53 <Option compilerVar="CC" />
53 <Option compilerVar="CC" />
54 </Unit>
54 </Unit>
55 <Unit filename="../src/fsw_processing.c">
55 <Unit filename="../src/fsw_processing.c">
56 <Option compilerVar="CC" />
56 <Option compilerVar="CC" />
57 </Unit>
57 </Unit>
58 <Unit filename="../src/tc_handler.c">
58 <Unit filename="../src/tc_handler.c">
59 <Option compilerVar="CC" />
59 <Option compilerVar="CC" />
60 </Unit>
60 </Unit>
61 <Unit filename="../src/wf_handler.c">
61 <Unit filename="../src/wf_handler.c">
62 <Option compilerVar="CC" />
62 <Option compilerVar="CC" />
63 </Unit>
63 </Unit>
64 <Extensions>
64 <Extensions>
65 <code_completion />
65 <code_completion />
66 <debugger />
66 <debugger />
67 </Extensions>
67 </Extensions>
68 </Project>
68 </Project>
69 </CodeBlocks_project_file>
69 </CodeBlocks_project_file>
@@ -1,226 +1,310
1 # depslib dependency file v1.0
1 # depslib dependency file v1.0
2 1355231335 source:e:\missions\solo\dev_ple\src\fsw-rtems.c
2 1355231335 source:e:\missions\solo\dev_ple\src\fsw-rtems.c
3 <rtems.h>
3 <rtems.h>
4 <bsp.h>
4 <bsp.h>
5 <rtems/confdefs.h>
5 <rtems/confdefs.h>
6 <drvmgr/drvmgr_confdefs.h>
6 <drvmgr/drvmgr_confdefs.h>
7 <rtems.h>
7 <rtems.h>
8 <errno.h>
8 <errno.h>
9 <fcntl.h>
9 <fcntl.h>
10 <stdio.h>
10 <stdio.h>
11 <stdlib.h>
11 <stdlib.h>
12 <FSW-config.c>
12 <FSW-config.c>
13 <grspw.h>
13 <grspw.h>
14 <apbuart.h>
14 <apbuart.h>
15 <FSW-rtems-processing.h>
15 <FSW-rtems-processing.h>
16
16
17 1355231335 -processing.h>
17 1355231335 -processing.h>
18
18
19 1350983928 source:e:\missions\solo\dev_ple\src\grspw.c
19 1350983928 source:e:\missions\solo\dev_ple\src\grspw.c
20 <..\header\grspw.h>
20 <..\header\grspw.h>
21 <stdio.h>
21 <stdio.h>
22
22
23 1354190601
23 1354190601
24
24
25 1350983928 e:\missions\solo\dev_ple\header\grspw.h
25 1350983928 e:\missions\solo\dev_ple\header\grspw.h
26
26
27 1351173364 source:e:\missions\solo\dev_ple\src\fsw-config.c
27 1351173364 source:e:\missions\solo\dev_ple\src\fsw-config.c
28 <drvmgr/ambapp_bus.h>
28 <drvmgr/ambapp_bus.h>
29
29
30 1354190602 bapp_bus.h>
30 1354190602 bapp_bus.h>
31
31
32 1354190602 e:\missions\solo\dev_ple\src\fsw-config.c
32 1354190602 e:\missions\solo\dev_ple\src\fsw-config.c
33 <drvmgr/ambapp_bus.h>
33 <drvmgr/ambapp_bus.h>
34
34
35 1354190602 source:e:\missions\solo\dev_ple\src\fsw-rtems-processing.c
35 1354190602 source:e:\missions\solo\dev_ple\src\fsw-rtems-processing.c
36 <FSW-rtems-processing.h>
36 <FSW-rtems-processing.h>
37 <math.h>
37 <math.h>
38 <stdio.h>
38 <stdio.h>
39 <leon.h>
39 <leon.h>
40
40
41 1354190601 e:\missions\solo\dev_ple\header\fsw-rtems-processing.h
41 1354190601 e:\missions\solo\dev_ple\header\fsw-rtems-processing.h
42 <rtems.h>
42 <rtems.h>
43
43
44 1359451040 source:/opt/DEV_PLE/src/FSW-rtems-processing.c
44 1359451040 source:/opt/DEV_PLE/src/FSW-rtems-processing.c
45 <FSW-rtems-processing.h>
45 <FSW-rtems-processing.h>
46 <math.h>
46 <math.h>
47 <stdio.h>
47 <stdio.h>
48 <leon.h>
48 <leon.h>
49
49
50 1359458568 /opt/DEV_PLE/header/FSW-rtems-processing.h
50 1359458568 /opt/DEV_PLE/header/FSW-rtems-processing.h
51 <rtems.h>
51 <rtems.h>
52 <grlibregs.h>
52 <grlibregs.h>
53 <FSW-params.h>
53 <FSW-params.h>
54
54
55 1359458854 source:/opt/DEV_PLE/src/FSW-rtems.c
55 1359458854 source:/opt/DEV_PLE/src/FSW-rtems.c
56 <rtems.h>
56 <rtems.h>
57 <bsp.h>
57 <bsp.h>
58 <rtems/confdefs.h>
58 <rtems/confdefs.h>
59 <drvmgr/drvmgr_confdefs.h>
59 <drvmgr/drvmgr_confdefs.h>
60 <FSW-rtems.h>
60 <FSW-rtems.h>
61 <FSW-config.c>
61 <FSW-config.c>
62
62
63 1359365823 /opt/DEV_PLE/src/FSW-config.c
63 1359365823 /opt/DEV_PLE/src/FSW-config.c
64 <drvmgr/ambapp_bus.h>
64 <drvmgr/ambapp_bus.h>
65
65
66 1359458568 source:/opt/DEV_PLE/src/TC_handler.c
66 1359458568 source:/opt/DEV_PLE/src/TC_handler.c
67 <TC_handler.h>
67 <TC_handler.h>
68 <FSW-params.h>
68 <FSW-params.h>
69
69
70 1359377846 /opt/DEV_PLE/header/TC_handler.h
70 1359377846 /opt/DEV_PLE/header/TC_handler.h
71 <stdio.h>
71 <stdio.h>
72 <ccsds_types.h>
72 <ccsds_types.h>
73
73
74 1359640245 /opt/DEV_PLE/header/ccsds_types.h
74 1359640245 /opt/DEV_PLE/header/ccsds_types.h
75
75
76 1359365823 source:/opt/DEV_PLE/src/FSW-config.c
76 1359365823 source:/opt/DEV_PLE/src/FSW-config.c
77 <drvmgr/ambapp_bus.h>
77 <drvmgr/ambapp_bus.h>
78
78
79 1359452642 /opt/DEV_PLE/header/FSW-config.h
79 1359452642 /opt/DEV_PLE/header/FSW-config.h
80
80
81 1359440704 /opt/DEV_PLE/header/grlibregs.h
81 1359440704 /opt/DEV_PLE/header/grlibregs.h
82
82
83 1359382989 source:/opt/DEV_PLE/src/WF_handler.c
83 1359382989 source:/opt/DEV_PLE/src/WF_handler.c
84
84
85 1359459475 source:/opt/DEV_PLE/src/FSW-misc.c
85 1359459475 source:/opt/DEV_PLE/src/FSW-misc.c
86 <FSW-misc.h>
86 <FSW-misc.h>
87 <FSW-params.h>
87 <FSW-params.h>
88
88
89 1359459330 /opt/DEV_PLE/header/FSW-misc.h
89 1359459330 /opt/DEV_PLE/header/FSW-misc.h
90 <rtems.h>
90 <rtems.h>
91 <stdio.h>
91 <stdio.h>
92 <FSW-rtems.h>
92 <FSW-rtems.h>
93 <FSW-params.h>
93 <FSW-params.h>
94 <grlibregs.h>
94 <grlibregs.h>
95 <grspw.h>
95 <grspw.h>
96 <ccsds_types.h>
96 <ccsds_types.h>
97
97
98 1359459364 /opt/DEV_PLE/header/FSW-rtems.h
98 1359459364 /opt/DEV_PLE/header/FSW-rtems.h
99 <errno.h>
99 <errno.h>
100 <fcntl.h>
100 <fcntl.h>
101 <stdio.h>
101 <stdio.h>
102 <stdlib.h>
102 <stdlib.h>
103 <grspw.h>
103 <grspw.h>
104 <apbuart.h>
104 <apbuart.h>
105 <FSW-params.h>
105 <FSW-params.h>
106 <FSW-misc.h>
106 <FSW-misc.h>
107 <FSW-rtems-processing.h>
107 <FSW-rtems-processing.h>
108 <TC_handler.h>
108 <TC_handler.h>
109 <WF_handler.h>
109 <WF_handler.h>
110 <grlibregs.h>
110 <grlibregs.h>
111
111
112 1359458453 /opt/DEV_PLE/header/FSW-params.h
112 1359458453 /opt/DEV_PLE/header/FSW-params.h
113
113
114 1359459642 /opt/DEV_PLE/header/WF_handler.h
114 1359459642 /opt/DEV_PLE/header/WF_handler.h
115 <rtems.h>
115 <rtems.h>
116 <FSW-params.h>
116 <FSW-params.h>
117 <grspw.h>
117 <grspw.h>
118 <grlibregs.h>
118 <grlibregs.h>
119 <ccsds_types.h>
119 <ccsds_types.h>
120 <stdio.h>
120 <stdio.h>
121 <FSW-rtems.h>
121 <FSW-rtems.h>
122
122
123 1359464354 source:/opt/DEV_PLE/src/fsw_main.c
123 1359464354 source:/opt/DEV_PLE/src/fsw_main.c
124 <rtems.h>
124 <rtems.h>
125 <bsp.h>
125 <bsp.h>
126 <rtems/confdefs.h>
126 <rtems/confdefs.h>
127 <drvmgr/drvmgr_confdefs.h>
127 <drvmgr/drvmgr_confdefs.h>
128 <fsw_main.h>
128 <fsw_main.h>
129 <fsw_config.c>
129 <fsw_config.c>
130
130
131 1359464346 /opt/DEV_PLE/header/fsw_main.h
131 1359464346 /opt/DEV_PLE/header/fsw_main.h
132 <errno.h>
132 <errno.h>
133 <fcntl.h>
133 <fcntl.h>
134 <stdio.h>
134 <stdio.h>
135 <stdlib.h>
135 <stdlib.h>
136 <grspw.h>
136 <grspw.h>
137 <apbuart.h>
137 <apbuart.h>
138 <fsw_params.h>
138 <fsw_params.h>
139 <fsw_misc.h>
139 <fsw_misc.h>
140 <fsw_processing.h>
140 <fsw_processing.h>
141 <tc_handler.h>
141 <tc_handler.h>
142 <wf_handler.h>
142 <wf_handler.h>
143 <grlib_regs.h>
143 <grlib_regs.h>
144
144
145 1359616894 /opt/DEV_PLE/header/fsw_params.h
145 1359616894 /opt/DEV_PLE/header/fsw_params.h
146
146
147 1359614518 /opt/DEV_PLE/header/fsw_misc.h
147 1359614518 /opt/DEV_PLE/header/fsw_misc.h
148 <rtems.h>
148 <rtems.h>
149 <stdio.h>
149 <stdio.h>
150 <fsw_init.h>
150 <fsw_init.h>
151 <fsw_params.h>
151 <fsw_params.h>
152 <grlib_regs.h>
152 <grlib_regs.h>
153 <grspw.h>
153 <grspw.h>
154 <ccsds_types.h>
154 <ccsds_types.h>
155
155
156 1359440704 /opt/DEV_PLE/header/grlib_regs.h
156 1359440704 /opt/DEV_PLE/header/grlib_regs.h
157
157
158 1359614517 /opt/DEV_PLE/header/fsw_processing.h
158 1359614517 /opt/DEV_PLE/header/fsw_processing.h
159 <rtems.h>
159 <rtems.h>
160 <grlib_regs.h>
160 <grlib_regs.h>
161 <fsw_params.h>
161 <fsw_params.h>
162
162
163 1359643450 /opt/DEV_PLE/header/tc_handler.h
163 1359643450 /opt/DEV_PLE/header/tc_handler.h
164 <rtems.h>
164 <rtems.h>
165 <stdio.h>
165 <stdio.h>
166 <unistd.h>
166 <unistd.h>
167 <sys/ioctl.h>
167 <sys/ioctl.h>
168 <ccsds_types.h>
168 <ccsds_types.h>
169 <grspw.h>
169 <grspw.h>
170 <fsw_init.h>
170 <fsw_init.h>
171
171
172 1359614518 /opt/DEV_PLE/header/wf_handler.h
172 1359614518 /opt/DEV_PLE/header/wf_handler.h
173 <rtems.h>
173 <rtems.h>
174 <fsw_params.h>
174 <fsw_params.h>
175 <grspw.h>
175 <grspw.h>
176 <grlib_regs.h>
176 <grlib_regs.h>
177 <ccsds_types.h>
177 <ccsds_types.h>
178 <stdio.h>
178 <stdio.h>
179 <fsw_init.h>
179 <fsw_init.h>
180
180
181 1359365823 /opt/DEV_PLE/src/fsw_config.c
181 1359365823 /opt/DEV_PLE/src/fsw_config.c
182 <drvmgr/ambapp_bus.h>
182 <drvmgr/ambapp_bus.h>
183
183
184 1359614518 source:/opt/DEV_PLE/src/fsw_misc.c
184 1359614518 source:/opt/DEV_PLE/src/fsw_misc.c
185 <fsw_misc.h>
185 <fsw_misc.h>
186 <fsw_params.h>
186 <fsw_params.h>
187
187
188 1359643720 source:/opt/DEV_PLE/src/tc_handler.c
188 1359643720 source:/opt/DEV_PLE/src/tc_handler.c
189 <tc_handler.h>
189 <tc_handler.h>
190 <fsw_params.h>
190 <fsw_params.h>
191
191
192 1359614518 source:/opt/DEV_PLE/src/wf_handler.c
192 1359614518 source:/opt/DEV_PLE/src/wf_handler.c
193 <wf_handler.h>
193 <wf_handler.h>
194
194
195 1359615705 source:/opt/DEV_PLE/src/fsw_globals.c
195 1359615705 source:/opt/DEV_PLE/src/fsw_globals.c
196 <fsw_processing.h>
196 <fsw_processing.h>
197 <rtems.h>
197 <rtems.h>
198
198
199 1359622160 source:/opt/DEV_PLE/src/fsw_init.c
199 1359622160 source:/opt/DEV_PLE/src/fsw_init.c
200 <rtems.h>
200 <rtems.h>
201 <bsp.h>
201 <bsp.h>
202 <rtems/confdefs.h>
202 <rtems/confdefs.h>
203 <drvmgr/drvmgr_confdefs.h>
203 <drvmgr/drvmgr_confdefs.h>
204 <fsw_init.h>
204 <fsw_init.h>
205 <fsw_config.c>
205 <fsw_config.c>
206
206
207 1359615705 /opt/DEV_PLE/header/fsw_init.h
207 1359615705 /opt/DEV_PLE/header/fsw_init.h
208 <errno.h>
208 <errno.h>
209 <fcntl.h>
209 <fcntl.h>
210 <stdio.h>
210 <stdio.h>
211 <stdlib.h>
211 <stdlib.h>
212 <grspw.h>
212 <grspw.h>
213 <apbuart.h>
213 <apbuart.h>
214 <fsw_params.h>
214 <fsw_params.h>
215 <fsw_misc.h>
215 <fsw_misc.h>
216 <fsw_processing.h>
216 <fsw_processing.h>
217 <tc_handler.h>
217 <tc_handler.h>
218 <wf_handler.h>
218 <wf_handler.h>
219 <grlib_regs.h>
219 <grlib_regs.h>
220
220
221 1359614518 source:/opt/DEV_PLE/src/fsw_processing.c
221 1359614518 source:/opt/DEV_PLE/src/fsw_processing.c
222 <fsw_processing.h>
222 <fsw_processing.h>
223 <math.h>
223 <math.h>
224 <stdio.h>
224 <stdio.h>
225 <leon.h>
225 <leon.h>
226
226
227 1359665502 source:/home/admin/opt/DEV_PLE/src/fsw_globals.c
228 <fsw_processing.h>
229 <rtems.h>
230
231 1359663364 /home/admin/opt/DEV_PLE/header/fsw_processing.h
232 <rtems.h>
233 <grlib_regs.h>
234 <fsw_params.h>
235
236 1359470426 /home/admin/opt/DEV_PLE/header/grlib_regs.h
237
238 1359665475 /home/admin/opt/DEV_PLE/header/fsw_params.h
239
240 1359666330 source:/home/admin/opt/DEV_PLE/src/fsw_init.c
241 <rtems.h>
242 <bsp.h>
243 <rtems/confdefs.h>
244 <drvmgr/drvmgr_confdefs.h>
245 <fsw_init.h>
246 <fsw_config.c>
247
248 1359666373 /home/admin/opt/DEV_PLE/header/fsw_init.h
249 <errno.h>
250 <fcntl.h>
251 <stdio.h>
252 <stdlib.h>
253 <grspw.h>
254 <apbuart.h>
255 <fsw_params.h>
256 <fsw_misc.h>
257 <fsw_processing.h>
258 <tc_handler.h>
259 <wf_handler.h>
260 <grlib_regs.h>
261
262 1359663364 /home/admin/opt/DEV_PLE/header/fsw_misc.h
263 <rtems.h>
264 <stdio.h>
265 <fsw_init.h>
266 <fsw_params.h>
267 <grlib_regs.h>
268 <grspw.h>
269 <ccsds_types.h>
270
271 1359663364 /home/admin/opt/DEV_PLE/header/ccsds_types.h
272
273 1359665643 /home/admin/opt/DEV_PLE/header/tc_handler.h
274 <rtems.h>
275 <stdio.h>
276 <unistd.h>
277 <sys/ioctl.h>
278 <ccsds_types.h>
279 <grspw.h>
280 <fsw_init.h>
281
282 1359663364 /home/admin/opt/DEV_PLE/header/wf_handler.h
283 <rtems.h>
284 <fsw_params.h>
285 <grspw.h>
286 <grlib_regs.h>
287 <ccsds_types.h>
288 <stdio.h>
289 <fsw_init.h>
290
291 1359470426 /home/admin/opt/DEV_PLE/src/fsw_config.c
292 <drvmgr/ambapp_bus.h>
293
294 1359663364 source:/home/admin/opt/DEV_PLE/src/fsw_misc.c
295 <fsw_misc.h>
296 <fsw_params.h>
297
298 1359663364 source:/home/admin/opt/DEV_PLE/src/fsw_processing.c
299 <fsw_processing.h>
300 <math.h>
301 <stdio.h>
302 <leon.h>
303
304 1359663364 source:/home/admin/opt/DEV_PLE/src/wf_handler.c
305 <wf_handler.h>
306
307 1359665083 source:/home/admin/opt/DEV_PLE/src/tc_handler.c
308 <tc_handler.h>
309 <fsw_params.h>
310
@@ -1,53 +1,43
1 <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
1 <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
2 <CodeBlocks_layout_file>
2 <CodeBlocks_layout_file>
3 <ActiveTarget name="Debug" />
3 <ActiveTarget name="Debug" />
4 <File name="../header/ccsds_types.h" open="0" top="0" tabpos="5">
4 <File name="../header/ccsds_types.h" open="0" top="0" tabpos="5">
5 <Cursor position="1172" topLine="24" />
5 <Cursor position="4079" topLine="120" />
6 </File>
6 </File>
7 <File name="../header/fsw_init.h" open="1" top="0" tabpos="3">
7 <File name="../header/fsw_init.h" open="0" top="0" tabpos="3">
8 <Cursor position="410" topLine="16" />
8 <Cursor position="1128" topLine="26" />
9 </File>
9 </File>
10 <File name="../header/fsw_misc.h" open="0" top="0" tabpos="0">
10 <File name="../header/fsw_misc.h" open="0" top="0" tabpos="0">
11 <Cursor position="114" topLine="0" />
11 <Cursor position="114" topLine="0" />
12 </File>
12 </File>
13 <File name="../header/fsw_params.h" open="0" top="0" tabpos="0">
13 <File name="../header/fsw_params.h" open="0" top="0" tabpos="0">
14 <Cursor position="1320" topLine="8" />
14 <Cursor position="1374" topLine="49" />
15 </File>
15 </File>
16 <File name="../header/fsw_processing.h" open="0" top="0" tabpos="0">
16 <File name="../header/fsw_processing.h" open="0" top="0" tabpos="0">
17 <Cursor position="510" topLine="0" />
17 <Cursor position="576" topLine="0" />
18 </File>
18 </File>
19 <File name="../header/tc_handler.h" open="0" top="0" tabpos="4">
19 <File name="../header/tc_handler.h" open="0" top="0" tabpos="4">
20 <Cursor position="634" topLine="0" />
20 <Cursor position="437" topLine="35" />
21 </File>
21 </File>
22 <File name="../header/wf_handler.h" open="0" top="0" tabpos="0">
22 <File name="../header/wf_handler.h" open="0" top="0" tabpos="0">
23 <Cursor position="212" topLine="0" />
23 <Cursor position="212" topLine="0" />
24 </File>
24 </File>
25 <File name="../src/fsw_globals.c" open="1" top="0" tabpos="4">
25 <File name="../src/fsw_globals.c" open="0" top="0" tabpos="4">
26 <Cursor position="46" topLine="0" />
26 <Cursor position="1271" topLine="18" />
27 </File>
27 </File>
28 <<<<<<< local
28 <File name="../src/fsw_init.c" open="1" top="0" tabpos="1">
29 <File name="../src/fsw_init.c" open="1" top="1" tabpos="0">
29 <Cursor position="1814" topLine="48" />
30 <Cursor position="1703" topLine="36" />
31 =======
32 <File name="../src/fsw_init.c" open="1" top="1" tabpos="2">
33 <Cursor position="3361" topLine="60" />
34 >>>>>>> other
35 </File>
30 </File>
36 <File name="../src/fsw_misc.c" open="0" top="0" tabpos="0">
31 <File name="../src/fsw_misc.c" open="0" top="0" tabpos="0">
37 <Cursor position="20" topLine="0" />
32 <Cursor position="20" topLine="0" />
38 </File>
33 </File>
39 <File name="../src/fsw_processing.c" open="0" top="0" tabpos="2">
34 <File name="../src/fsw_processing.c" open="0" top="0" tabpos="2">
40 <Cursor position="1175" topLine="46" />
35 <Cursor position="1175" topLine="46" />
41 </File>
36 </File>
42 <<<<<<< local
37 <File name="../src/tc_handler.c" open="1" top="1" tabpos="2">
43 <File name="../src/tc_handler.c" open="0" top="0" tabpos="3">
38 <Cursor position="13133" topLine="89" />
44 <Cursor position="2672" topLine="26" />
45 =======
46 <File name="../src/tc_handler.c" open="1" top="0" tabpos="1">
47 <Cursor position="11070" topLine="270" />
48 >>>>>>> other
49 </File>
39 </File>
50 <File name="../src/wf_handler.c" open="0" top="0" tabpos="0">
40 <File name="../src/wf_handler.c" open="0" top="0" tabpos="0">
51 <Cursor position="3936" topLine="62" />
41 <Cursor position="3936" topLine="62" />
52 </File>
42 </File>
53 </CodeBlocks_layout_file>
43 </CodeBlocks_layout_file>
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -1,45 +1,47
1 #ifndef FSW_RTEMS_H_INCLUDED
1 #ifndef FSW_RTEMS_H_INCLUDED
2 #define FSW_RTEMS_H_INCLUDED
2 #define FSW_RTEMS_H_INCLUDED
3
3
4 #include <errno.h>
4 #include <errno.h>
5 #include <fcntl.h>
5 #include <fcntl.h>
6 #include <stdio.h>
6 #include <stdio.h>
7 #include <stdlib.h>
7 #include <stdlib.h>
8
8
9 #include <grspw.h>
9 #include <grspw.h>
10 #include <apbuart.h>
10 #include <apbuart.h>
11
11
12 #include <fsw_params.h>
12 #include <fsw_params.h>
13 #include <fsw_misc.h>
13 #include <fsw_misc.h>
14 #include <fsw_processing.h>
14 #include <fsw_processing.h>
15 #include <tc_handler.h>
15 #include <tc_handler.h>
16 #include <wf_handler.h>
16 #include <wf_handler.h>
17 #include <grlib_regs.h>
17 #include <grlib_regs.h>
18
18
19 extern int sched_yield();
19 extern int sched_yield();
20 extern int errno;
20 extern int errno;
21 extern rtems_id Task_id[ ]; /* array of task ids */
21 extern rtems_id Task_id[ ]; /* array of task ids */
22 extern rtems_name Task_name[ ]; /* array of task names */
22 extern rtems_name Task_name[ ]; /* array of task names */
23 extern rtems_name misc_name[ ]; /* arry of miscellaneous names for rtems objects */
23 extern rtems_name misc_name[ ]; /* arry of miscellaneous names for rtems objects */
24 extern int fdSPW; // grspw file descriptor
24 extern int fdSPW; // grspw file descriptor
25 extern int fdUART; // uart file descriptor
25 extern int fdUART; // uart file descriptor
26 extern struct param_norm_str param_norm;
26
27
27 // RTEMS TASKS
28 // RTEMS TASKS
28 rtems_task Init( rtems_task_argument argument); /* forward declaration needed */
29 rtems_task Init( rtems_task_argument argument); /* forward declaration needed */
29 rtems_task recv_task(rtems_task_argument argument);
30 rtems_task recv_task(rtems_task_argument argument);
30 rtems_task spiq_task(rtems_task_argument argument);
31 rtems_task spiq_task(rtems_task_argument argument);
31 rtems_task stat_task(rtems_task_argument argument);
32 rtems_task stat_task(rtems_task_argument argument);
32 rtems_task wfrm_task(rtems_task_argument argument);
33 rtems_task wfrm_task(rtems_task_argument argument);
33 int create_all_tasks();
34 int create_all_tasks();
34 int start_all_tasks();
35 int start_all_tasks();
35 int create_message_queue();
36 int create_message_queue();
36
37
37 // OTHER functions
38 // OTHER functions
39 void init_default_mode_parameters();
38 int configure_spw_link();
40 int configure_spw_link();
39 int send_console_outputs_on_serial_port();
41 int send_console_outputs_on_serial_port();
40 extern int rtems_cpu_usage_report();
42 extern int rtems_cpu_usage_report();
41 extern int rtems_cpu_usage_reset();
43 extern int rtems_cpu_usage_reset();
42 void print_statistics(spw_stats *);
44 void print_statistics(spw_stats *);
43 rtems_status_code write_spw(spw_ioctl_pkt_send* spw_ioctl_send);
45 rtems_status_code write_spw(spw_ioctl_pkt_send* spw_ioctl_send);
44
46
45 #endif // FSW_RTEMS_CONFIG_H_INCLUDED
47 #endif // FSW_RTEMS_CONFIG_H_INCLUDED
@@ -1,60 +1,68
1 #ifndef FSW_RTEMS_CONFIG_H_INCLUDED
1 #ifndef FSW_RTEMS_CONFIG_H_INCLUDED
2 #define FSW_RTEMS_CONFIG_H_INCLUDED
2 #define FSW_RTEMS_CONFIG_H_INCLUDED
3
3
4 #define GRSPW_DEVICE_NAME "/dev/grspw0"
4 #define GRSPW_DEVICE_NAME "/dev/grspw0"
5 #define UART_DEVICE_NAME "/dev/console"
5 #define UART_DEVICE_NAME "/dev/console"
6
6
7 //*****************************
7 //*****************************
8 // APB REGISTERS BASE ADDRESSES
8 // APB REGISTERS BASE ADDRESSES
9 #define REGS_ADDR_APBUART 0x80000100
9 #define REGS_ADDR_APBUART 0x80000100
10 #define REGS_ADDR_GPTIMER 0x80000300
10 #define REGS_ADDR_GPTIMER 0x80000300
11 #define REGS_ADDR_GRSPW 0x80000500
11 #define REGS_ADDR_GRSPW 0x80000500
12 #define REGS_ADDR_SPECTRAL_MATRICES 0x80000700
12 #define REGS_ADDR_SPECTRAL_MATRICES 0x80000700
13
13
14 #define APBUART_CTRL_REG_MASK_DB 0xfffff7ff
14 #define APBUART_CTRL_REG_MASK_DB 0xfffff7ff
15
15
16 #define IRQ_SM 9
16 #define IRQ_SM 9
17 #define IRQ_SPARC_SM 0x19 // see sparcv8.pdf p.76 for interrupt levels
17 #define IRQ_SPARC_SM 0x19 // see sparcv8.pdf p.76 for interrupt levels
18 #define IRQ_WF 10
18 #define IRQ_WF 10
19 #define IRQ_SPARC_WF 0x1a // see sparcv8.pdf p.76 for interrupt levels
19 #define IRQ_SPARC_WF 0x1a // see sparcv8.pdf p.76 for interrupt levels
20
20
21 #define CLKDIV_SM_SIMULATOR 9999
21 #define CLKDIV_SM_SIMULATOR 9999
22 #define CLKDIV_WF_SIMULATOR 9999999
22 #define CLKDIV_WF_SIMULATOR 9999999
23 #define TIMER_SM_SIMULATOR 1
23 #define TIMER_SM_SIMULATOR 1
24 #define TIMER_WF_SIMULATOR 2
24 #define TIMER_WF_SIMULATOR 2
25
25
26 //******
26 //******
27 // RTEMS
27 // RTEMS
28 #define TASKID_RECV 1
28 #define TASKID_RECV 1
29 #define TASKID_ACTN 1
29 #define TASKID_ACTN 1
30 #define TASKID_SPIQ 3
30 #define TASKID_SPIQ 3
31 #define TASKID_SMIQ 4
31 #define TASKID_SMIQ 4
32 #define TASKID_STAT 5
32 #define TASKID_STAT 5
33 #define TASKID_AVF0 6
33 #define TASKID_AVF0 6
34 #define TASKID_BPF0 7
34 #define TASKID_BPF0 7
35 #define TASKID_WFRM 8
35 #define TASKID_WFRM 8
36
36
37 #define ACTION_MSG_QUEUE_COUNT 10
37 #define ACTION_MSG_QUEUE_COUNT 10
38
38
39 //*******
39 //*******
40 // MACROS
40 // MACROS
41 #define PRINT_MESSAGES_ON_CONSOLE // enable or disable the printf instructions
41 #define PRINT_MESSAGES_ON_CONSOLE // enable or disable the printf instructions
42 #ifdef PRINT_MESSAGES_ON_CONSOLE
42 #ifdef PRINT_MESSAGES_ON_CONSOLE
43 #define PRINTF(x) printf(x);
43 #define PRINTF(x) printf(x);
44 #define PRINTF1(x,y) printf(x,y);
44 #define PRINTF1(x,y) printf(x,y);
45 #define PRINTF2(x,y,z) printf(x,y,z);
45 #define PRINTF2(x,y,z) printf(x,y,z);
46 #else
46 #else
47 #define PRINTF(x) ;
47 #define PRINTF(x) ;
48 #define PRINTF1(x,y) ;
48 #define PRINTF1(x,y) ;
49 #define PRINTF2(x,y,z) ;
49 #define PRINTF2(x,y,z) ;
50 #endif
50 #endif
51
51
52 #define NB_SAMPLES_PER_SNAPSHOT 2048
52 #define NB_SAMPLES_PER_SNAPSHOT 2048
53 #define NB_BYTES_SWF_BLK 2 * 6
53 #define NB_BYTES_SWF_BLK 2 * 6
54
54
55 struct param_norm_str{
56 unsigned int sy_lfr_n_swf_l; // length of the snapshots
57 unsigned int sy_lfr_n_swf_p; // time between two snapshots
58 unsigned int sy_lfr_n_asm_p; // time between two asm
59 unsigned char sy_lfr_n_bp_p0; // timebetween two products BP1 set
60 unsigned char sy_lfr_n_bp_p1; // time between two products BP2 set
61 };
62
55 extern volatile int wf_snap_f0[ ]; // 24576 bytes
63 extern volatile int wf_snap_f0[ ]; // 24576 bytes
56 extern volatile int wf_snap_f1[ ]; // 24576 bytes
64 extern volatile int wf_snap_f1[ ]; // 24576 bytes
57 extern volatile int wf_snap_f2[ ]; // 24576 bytes
65 extern volatile int wf_snap_f2[ ]; // 24576 bytes
58 extern volatile int wf_cont_f3[ ]; // 24576 bytes
66 extern volatile int wf_cont_f3[ ]; // 24576 bytes
59
67
60 #endif // FSW_RTEMS_CONFIG_H_INCLUDED
68 #endif // FSW_RTEMS_CONFIG_H_INCLUDED
@@ -1,48 +1,54
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 <stdio.h>
5 #include <stdio.h>
6 #include <unistd.h> // for the read call
6 #include <unistd.h> // for the read call
7 #include <sys/ioctl.h> // for the ioctl call
7 #include <sys/ioctl.h> // for the ioctl call
8 #include <ccsds_types.h>
8 #include <ccsds_types.h>
9 #include <grspw.h>
9 #include <grspw.h>
10 #include <fsw_init.h>
10 #include <fsw_init.h>
11
11
12 extern int fdSPW;
12 extern int fdSPW;
13 extern rtems_name misc_name[ ];
13 extern rtems_name misc_name[ ];
14 extern rtems_name misc_id[ ];
14 extern rtems_name misc_id[ ];
15 extern rtems_id Task_id[ ]; /* array of task ids */
15 extern rtems_id Task_id[ ]; // array of task ids
16 extern struct param_norm_str param_norm;
16
17
17 unsigned char currentTC_LEN_RCV[2]; // SHALL be equal to the current TC packet estimated packet length field
18 unsigned char currentTC_LEN_RCV[2]; // SHALL be equal to the current TC packet estimated packet length field
18 unsigned char currentTC_COMPUTED_CRC[2];
19 unsigned char currentTC_COMPUTED_CRC[2];
19 unsigned int currentTC_LEN_RCV_AsUnsignedInt;
20 unsigned int currentTC_LEN_RCV_AsUnsignedInt;
20 unsigned int currentTM_length;
21 unsigned int currentTM_length;
21 unsigned char currentTC_processedFlag;
22 unsigned char currentTC_processedFlag;
22
23
23 //**********************
24 //**********************
24 // GENERAL USE FUNCTIONS
25 // GENERAL USE FUNCTIONS
25 unsigned int lookUpTableForCRC[256];
26 unsigned int lookUpTableForCRC[256];
26 void InitLookUpTableForCRC();
27 void InitLookUpTableForCRC();
27 void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData);
28 void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData);
28
29
29 //*********************
30 //*********************
30 // ACCEPTANCE FUNCTIONS
31 // ACCEPTANCE FUNCTIONS
31 unsigned char acceptTM(ccsdsTelecommandPacket_t * TMPacket, unsigned int tc_len_recv);
32 unsigned char acceptTM(ccsdsTelecommandPacket_t * TMPacket, unsigned int tc_len_recv);
32
33
33 unsigned char TM_build_header( enum TM_TYPE tm_type, unsigned int SID, unsigned int packetLength,
34 unsigned char TM_build_header( enum TM_TYPE tm_type, unsigned int packetLength,
34 unsigned int coarseTime, unsigned int fineTime, TMHeader_t *TMHeader);
35 unsigned int coarseTime, unsigned int fineTime, TMHeader_t *TMHeader);
35 unsigned char TM_build_data(ccsdsTelecommandPacket_t *TC, char* data, unsigned int SID, unsigned char *computed_CRC);
36 unsigned char TM_build_data(ccsdsTelecommandPacket_t *TC, char* data, unsigned int SID, unsigned char *computed_CRC);
36 int TC_checker(ccsdsTelecommandPacket_t *TC, unsigned int TC_LEN_RCV);
37 int TC_checker(ccsdsTelecommandPacket_t *TC, unsigned int TC_LEN_RCV);
37
38
38 //***********
39 //***********
39 // RTEMS TASK
40 // RTEMS TASK
40 rtems_task recv_task( rtems_task_argument unused );
41 rtems_task recv_task( rtems_task_argument unused );
41 rtems_task actn_task( rtems_task_argument unused );
42 rtems_task actn_task( rtems_task_argument unused );
42 int create_message_queue();
43 int create_message_queue();
43
44
44 //***********
45 //***********
45 // TC ACTIONS
46 // TC ACTIONS
46 int default_action(ccsdsTelecommandPacket_t *TC);
47 int action_default(ccsdsTelecommandPacket_t *TC);
48 int action_load_norm(ccsdsTelecommandPacket_t *TC);
49 int action_enter(ccsdsTelecommandPacket_t *TC);
47
50
48 #endif // TC_HANDLER_H_INCLUDED
51 #endif // TC_HANDLER_H_INCLUDED
52
53
54
@@ -1,34 +1,37
1 #include <fsw_processing.h>
1 #include <fsw_processing.h>
2 #include <rtems.h>
2 #include <rtems.h>
3
3
4 // RTEMS GLOBAL VARIABLES
4 // RTEMS GLOBAL VARIABLES
5 rtems_name misc_name[5];
5 rtems_name misc_name[5];
6 rtems_name misc_id[5];
6 rtems_name misc_id[5];
7 rtems_id Task_id[10]; /* array of task ids */
7 rtems_id Task_id[10]; /* array of task ids */
8 rtems_name Task_name[10]; /* array of task names */
8 rtems_name Task_name[10]; /* array of task names */
9 int fdSPW;
9 int fdSPW;
10 int fdUART;
10 int fdUART;
11
11
12 // WAVEFORMS GLOBAL VARIABLES
12 // WAVEFORMS GLOBAL VARIABLES
13 volatile int wf_snap_f0[ NB_SAMPLES_PER_SNAPSHOT * NB_BYTES_SWF_BLK ]; // 24576 bytes
13 volatile int wf_snap_f0[ NB_SAMPLES_PER_SNAPSHOT * NB_BYTES_SWF_BLK ]; // 24576 bytes
14 volatile int wf_snap_f1[ NB_SAMPLES_PER_SNAPSHOT * NB_BYTES_SWF_BLK ]; // 24576 bytes
14 volatile int wf_snap_f1[ NB_SAMPLES_PER_SNAPSHOT * NB_BYTES_SWF_BLK ]; // 24576 bytes
15 volatile int wf_snap_f2[ NB_SAMPLES_PER_SNAPSHOT * NB_BYTES_SWF_BLK ]; // 24576 bytes
15 volatile int wf_snap_f2[ NB_SAMPLES_PER_SNAPSHOT * NB_BYTES_SWF_BLK ]; // 24576 bytes
16 volatile int wf_cont_f3[ NB_SAMPLES_PER_SNAPSHOT * NB_BYTES_SWF_BLK ]; // 24576 bytes
16 volatile int wf_cont_f3[ NB_SAMPLES_PER_SNAPSHOT * NB_BYTES_SWF_BLK ]; // 24576 bytes
17
17
18 // SPECTRAL MATRICES GLOBAL VARIABLES
18 // SPECTRAL MATRICES GLOBAL VARIABLES
19 volatile int spec_mat_f0_a[ TOTAL_SIZE_SPEC_MAT ];
19 volatile int spec_mat_f0_a[ TOTAL_SIZE_SPEC_MAT ];
20 volatile int spec_mat_f0_b[ TOTAL_SIZE_SPEC_MAT ];
20 volatile int spec_mat_f0_b[ TOTAL_SIZE_SPEC_MAT ];
21 volatile int spec_mat_f0_c[ TOTAL_SIZE_SPEC_MAT ];
21 volatile int spec_mat_f0_c[ TOTAL_SIZE_SPEC_MAT ];
22 volatile int spec_mat_f0_d[ TOTAL_SIZE_SPEC_MAT ];
22 volatile int spec_mat_f0_d[ TOTAL_SIZE_SPEC_MAT ];
23 volatile int spec_mat_f0_e[ TOTAL_SIZE_SPEC_MAT ];
23 volatile int spec_mat_f0_e[ TOTAL_SIZE_SPEC_MAT ];
24 volatile int spec_mat_f0_f[ TOTAL_SIZE_SPEC_MAT ];
24 volatile int spec_mat_f0_f[ TOTAL_SIZE_SPEC_MAT ];
25 volatile int spec_mat_f0_g[ TOTAL_SIZE_SPEC_MAT ];
25 volatile int spec_mat_f0_g[ TOTAL_SIZE_SPEC_MAT ];
26 volatile int spec_mat_f0_h[ TOTAL_SIZE_SPEC_MAT ];
26 volatile int spec_mat_f0_h[ TOTAL_SIZE_SPEC_MAT ];
27 //
27 //
28 float averaged_spec_mat_f0[ TOTAL_SIZE_SPEC_MAT ];
28 float averaged_spec_mat_f0[ TOTAL_SIZE_SPEC_MAT ];
29 float compressed_spec_mat_f0[ TOTAL_SIZE_COMPRESSED_MATRIX_f0 ];
29 float compressed_spec_mat_f0[ TOTAL_SIZE_COMPRESSED_MATRIX_f0 ];
30
30
31 // BASIC PARAMETERS GLOBAL VAIRABLES
31 // NORMAL MODE PARAMETERS
32 struct param_norm_str param_norm;
33
34 // BASIC PARAMETERS GLOBAL VARIABLES
32 unsigned char LFR_BP1_F0[ NB_BINS_COMPRESSED_MATRIX_f0 * 9 ];
35 unsigned char LFR_BP1_F0[ NB_BINS_COMPRESSED_MATRIX_f0 * 9 ];
33
36
34 BP1_t data_BP1[ NB_BINS_COMPRESSED_MATRIX_f0 ];
37 BP1_t data_BP1[ NB_BINS_COMPRESSED_MATRIX_f0 ];
@@ -1,255 +1,264
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 10
18 #define CONFIGURE_MAXIMUM_TASKS 10
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 1
24 #define CONFIGURE_MAXIMUM_PERIODS 1
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 *link_status(int status);
47 char *link_status(int status);
48
48
49 char *lstates[6] = {"Error-reset",
49 char *lstates[6] = {"Error-reset",
50 "Error-wait",
50 "Error-wait",
51 "Ready",
51 "Ready",
52 "Started",
52 "Started",
53 "Connecting",
53 "Connecting",
54 "Run"
54 "Run"
55 };
55 };
56
56
57 rtems_task Init( rtems_task_argument ignored )
57 rtems_task Init( rtems_task_argument ignored )
58 {
58 {
59 rtems_status_code status;
59 rtems_status_code status;
60
60
61 //send_console_outputs_on_serial_port();
61 //send_console_outputs_on_serial_port();
62
62
63 InitLookUpTableForCRC(); // in tc_handler.h
63 InitLookUpTableForCRC(); // in tc_handler.h
64
64 init_default_mode_parameters();
65 create_message_queue();
65 create_message_queue();
66 create_all_tasks();
66 create_all_tasks();
67 start_all_tasks();
67 start_all_tasks();
68
68
69 configure_spw_link();
69 configure_spw_link();
70 // configure timer for spectral matrices simulation
70 // configure timer for spectral matrices simulation
71 configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR, CLKDIV_SM_SIMULATOR,
71 configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR, CLKDIV_SM_SIMULATOR,
72 IRQ_SPARC_SM, spectral_matrices_isr );
72 IRQ_SPARC_SM, spectral_matrices_isr );
73 // configure timer for waveforms simulation
73 // configure timer for waveforms simulation
74 configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_WF_SIMULATOR, CLKDIV_WF_SIMULATOR,
74 configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_WF_SIMULATOR, CLKDIV_WF_SIMULATOR,
75 IRQ_SPARC_WF, waveforms_isr );
75 IRQ_SPARC_WF, waveforms_isr );
76
76
77 LEON_Unmask_interrupt( IRQ_SM );
77 LEON_Unmask_interrupt( IRQ_SM );
78 LEON_Unmask_interrupt( IRQ_WF );
78 LEON_Unmask_interrupt( IRQ_WF );
79
79
80 status = rtems_task_delete(RTEMS_SELF);
80 status = rtems_task_delete(RTEMS_SELF);
81 }
81 }
82
82
83 rtems_task spiq_task(rtems_task_argument unused)
83 rtems_task spiq_task(rtems_task_argument unused)
84 {
84 {
85 rtems_event_set event_out;
85 rtems_event_set event_out;
86 struct grspw_regs_str *grspw_regs;
86 struct grspw_regs_str *grspw_regs;
87 grspw_regs = (struct grspw_regs_str *) REGS_ADDR_GRSPW;
87 grspw_regs = (struct grspw_regs_str *) REGS_ADDR_GRSPW;
88
88
89 while(1){
89 while(1){
90 PRINTF("In SPIQ *** Waiting for SPW_LINKERR_EVENT\n")
90 PRINTF("In SPIQ *** Waiting for SPW_LINKERR_EVENT\n")
91 rtems_event_receive(SPW_LINKERR_EVENT, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an SPW_LINKERR_EVENT
91 rtems_event_receive(SPW_LINKERR_EVENT, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an SPW_LINKERR_EVENT
92
92
93 if (rtems_task_suspend(Task_id[1])!=RTEMS_SUCCESSFUL) // suspend RECV task
93 if (rtems_task_suspend(Task_id[1])!=RTEMS_SUCCESSFUL) // suspend RECV task
94 PRINTF("In SPIQ *** Error suspending RECV Task\n")
94 PRINTF("In SPIQ *** Error suspending RECV Task\n")
95
95
96 configure_spw_link();
96 configure_spw_link();
97
97
98 if (rtems_task_restart(Task_id[1], 1)!=RTEMS_SUCCESSFUL) // restart RECV task
98 if (rtems_task_restart(Task_id[1], 1)!=RTEMS_SUCCESSFUL) // restart RECV task
99 PRINTF("In SPIQ *** Error resume RECV Task\n")
99 PRINTF("In SPIQ *** Error resume RECV Task\n")
100 }
100 }
101 }
101 }
102
102
103 void init_default_mode_parameters()
104 {
105 param_norm.sy_lfr_n_swf_l = 2048; // nb sample
106 param_norm.sy_lfr_n_swf_p = 300; // sec
107 param_norm.sy_lfr_n_asm_p = 3600; // sec
108 param_norm.sy_lfr_n_bp_p0 = 4; // sec
109 param_norm.sy_lfr_n_bp_p1 = 20; // sec
110 }
111
103 int create_all_tasks()
112 int create_all_tasks()
104 {
113 {
105 rtems_status_code status;
114 rtems_status_code status;
106
115
107 Task_name[1] = rtems_build_name( 'R', 'E', 'C', 'V' );
116 Task_name[1] = rtems_build_name( 'R', 'E', 'C', 'V' );
108 Task_name[2] = rtems_build_name( 'A', 'C', 'T', 'N' );
117 Task_name[2] = rtems_build_name( 'A', 'C', 'T', 'N' );
109 Task_name[3] = rtems_build_name( 'S', 'P', 'I', 'Q' );
118 Task_name[3] = rtems_build_name( 'S', 'P', 'I', 'Q' );
110 Task_name[4] = rtems_build_name( 'S', 'M', 'I', 'Q' );
119 Task_name[4] = rtems_build_name( 'S', 'M', 'I', 'Q' );
111 Task_name[5] = rtems_build_name( 'S', 'T', 'A', 'T' );
120 Task_name[5] = rtems_build_name( 'S', 'T', 'A', 'T' );
112 Task_name[6] = rtems_build_name( 'A', 'V', 'F', '0' );
121 Task_name[6] = rtems_build_name( 'A', 'V', 'F', '0' );
113 Task_name[7] = rtems_build_name( 'B', 'P', 'F', '0' );
122 Task_name[7] = rtems_build_name( 'B', 'P', 'F', '0' );
114 Task_name[8] = rtems_build_name( 'W', 'F', 'R', 'M' );
123 Task_name[8] = rtems_build_name( 'W', 'F', 'R', 'M' );
115
124
116 // RECV
125 // RECV
117 status = rtems_task_create(
126 status = rtems_task_create(
118 Task_name[1], 200, RTEMS_MINIMUM_STACK_SIZE * 2,
127 Task_name[1], 200, RTEMS_MINIMUM_STACK_SIZE * 2,
119 RTEMS_DEFAULT_MODES,
128 RTEMS_DEFAULT_MODES,
120 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[1]
129 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[1]
121 );
130 );
122 // ACTN
131 // ACTN
123 status = rtems_task_create(
132 status = rtems_task_create(
124 Task_name[2], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
133 Task_name[2], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
125 RTEMS_DEFAULT_MODES,
134 RTEMS_DEFAULT_MODES,
126 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[2]
135 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[2]
127 );
136 );
128 // SPIQ
137 // SPIQ
129 status = rtems_task_create(
138 status = rtems_task_create(
130 Task_name[3], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
139 Task_name[3], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
131 RTEMS_DEFAULT_MODES,
140 RTEMS_DEFAULT_MODES,
132 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[3]
141 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[3]
133 );
142 );
134 // SMIQ
143 // SMIQ
135 status = rtems_task_create(
144 status = rtems_task_create(
136 Task_name[4], 10, RTEMS_MINIMUM_STACK_SIZE * 2,
145 Task_name[4], 10, RTEMS_MINIMUM_STACK_SIZE * 2,
137 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
146 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
138 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[4]
147 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[4]
139 );
148 );
140 // STAT
149 // STAT
141 status = rtems_task_create(
150 status = rtems_task_create(
142 Task_name[5], 200, RTEMS_MINIMUM_STACK_SIZE * 2,
151 Task_name[5], 200, RTEMS_MINIMUM_STACK_SIZE * 2,
143 RTEMS_DEFAULT_MODES,
152 RTEMS_DEFAULT_MODES,
144 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[5]
153 RTEMS_DEFAULT_ATTRIBUTES, &Task_id[5]
145 );
154 );
146 // AVF0
155 // AVF0
147 status = rtems_task_create(
156 status = rtems_task_create(
148 Task_name[6], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
157 Task_name[6], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
149 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
158 RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT,
150 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[6]
159 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[6]
151 );
160 );
152 // BPF0
161 // BPF0
153 status = rtems_task_create(
162 status = rtems_task_create(
154 Task_name[7], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
163 Task_name[7], 50, RTEMS_MINIMUM_STACK_SIZE * 2,
155 RTEMS_DEFAULT_MODES,
164 RTEMS_DEFAULT_MODES,
156 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[7]
165 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[7]
157 );
166 );
158 // WFRM
167 // WFRM
159 status = rtems_task_create(
168 status = rtems_task_create(
160 Task_name[8], 100, RTEMS_MINIMUM_STACK_SIZE * 2,
169 Task_name[8], 100, RTEMS_MINIMUM_STACK_SIZE * 2,
161 RTEMS_DEFAULT_MODES,
170 RTEMS_DEFAULT_MODES,
162 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[8]
171 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[8]
163 );
172 );
164
173
165 return 0;
174 return 0;
166 }
175 }
167
176
168 int start_all_tasks()
177 int start_all_tasks()
169 {
178 {
170 rtems_status_code status;
179 rtems_status_code status;
171
180
172 status = rtems_task_start( Task_id[3], spiq_task, 1 );
181 status = rtems_task_start( Task_id[3], spiq_task, 1 );
173 if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_SPIQ\n")
182 if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_SPIQ\n")
174
183
175 status = rtems_task_start( Task_id[1], recv_task, 1 );
184 status = rtems_task_start( Task_id[1], recv_task, 1 );
176 if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_RECV\n")
185 if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_RECV\n")
177
186
178 status = rtems_task_start( Task_id[2], actn_task, 1 );
187 status = rtems_task_start( Task_id[2], actn_task, 1 );
179 if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_ACTN\n")
188 if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_ACTN\n")
180
189
181 status = rtems_task_start( Task_id[4], smiq_task, 1 );
190 status = rtems_task_start( Task_id[4], smiq_task, 1 );
182 if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_BPPR\n")
191 if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_BPPR\n")
183
192
184 status = rtems_task_start( Task_id[5], stat_task, 1 );
193 status = rtems_task_start( Task_id[5], stat_task, 1 );
185 if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_STAT\n")
194 if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_STAT\n")
186
195
187 status = rtems_task_start( Task_id[6], avf0_task, 1 );
196 status = rtems_task_start( Task_id[6], avf0_task, 1 );
188 if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_AVF0\n")
197 if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_AVF0\n")
189
198
190 status = rtems_task_start( Task_id[7], bpf0_task, 1 );
199 status = rtems_task_start( Task_id[7], bpf0_task, 1 );
191 if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_BPF0\n")
200 if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_BPF0\n")
192
201
193 status = rtems_task_start( Task_id[8], wfrm_task, 1 );
202 status = rtems_task_start( Task_id[8], wfrm_task, 1 );
194 if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_WFRM\n")
203 if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_WFRM\n")
195
204
196 return 0;
205 return 0;
197 }
206 }
198
207
199 int configure_spw_link()
208 int configure_spw_link()
200 {
209 {
201 rtems_status_code status;
210 rtems_status_code status;
202
211
203 close(fdSPW); // close the device if it is already open
212 close(fdSPW); // close the device if it is already open
204 fdSPW = open(GRSPW_DEVICE_NAME, O_RDWR); // open the device. the open call reset the hardware
213 fdSPW = open(GRSPW_DEVICE_NAME, O_RDWR); // open the device. the open call reset the hardware
205 if (fdSPW<0) PRINTF("In configure_spw_link *** Error opening"GRSPW_DEVICE_NAME"\n")
214 if (fdSPW<0) PRINTF("In configure_spw_link *** Error opening"GRSPW_DEVICE_NAME"\n")
206 while(ioctl(fdSPW, SPACEWIRE_IOCTRL_START, 0) != RTEMS_SUCCESSFUL){
215 while(ioctl(fdSPW, SPACEWIRE_IOCTRL_START, 0) != RTEMS_SUCCESSFUL){
207 PRINTF("In configure_spw_link *** "GRSPW_DEVICE_NAME" not started, retry\n")
216 PRINTF("In configure_spw_link *** "GRSPW_DEVICE_NAME" not started, retry\n")
208 close(fdSPW); // close the device
217 close(fdSPW); // close the device
209 fdSPW = open(GRSPW_DEVICE_NAME, O_RDWR); // open the device. the open call reset the hardware
218 fdSPW = open(GRSPW_DEVICE_NAME, O_RDWR); // open the device. the open call reset the hardware
210 if (fdSPW<0) PRINTF("In configure_spw_link *** Error opening"GRSPW_DEVICE_NAME"\n")
219 if (fdSPW<0) PRINTF("In configure_spw_link *** Error opening"GRSPW_DEVICE_NAME"\n")
211 rtems_task_wake_after(100);
220 rtems_task_wake_after(100);
212 }
221 }
213
222
214 PRINTF("In configure_spw_link *** "GRSPW_DEVICE_NAME" opened and started successfully\n")
223 PRINTF("In configure_spw_link *** "GRSPW_DEVICE_NAME" opened and started successfully\n")
215
224
216 // sets a few parameters of the link
225 // sets a few parameters of the link
217 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_RMAPEN, 1); // sets the RMAP enable bit
226 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_RMAPEN, 1); // sets the RMAP enable bit
218 if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_RMAPEN\n")
227 if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_RMAPEN\n")
219 //
228 //
220 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_RXBLOCK, 1); // sets the blocking mode for reception
229 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_RXBLOCK, 1); // sets the blocking mode for reception
221 if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_RXBLOCK\n")
230 if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_RXBLOCK\n")
222 //
231 //
223 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_EVENT_ID, Task_id[3]); // sets the task ID to which an event is sent when a
232 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_EVENT_ID, Task_id[3]); // sets the task ID to which an event is sent when a
224 if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_EVENT_ID\n") // link-error interrupt occurs
233 if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_EVENT_ID\n") // link-error interrupt occurs
225 //
234 //
226 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_DISABLE_ERR, 1); // automatic link-disabling due to link-error interrupts
235 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_DISABLE_ERR, 1); // automatic link-disabling due to link-error interrupts
227 if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_DISABLE_ERR\n")
236 if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_DISABLE_ERR\n")
228 //
237 //
229 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ, 1); // sets the link-error interrupt bit
238 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ, 1); // sets the link-error interrupt bit
230 if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n")
239 if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n")
231
240
232 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL, 1); // sets the link-error interrupt bit
241 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL, 1); // sets the link-error interrupt bit
233 if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n")
242 if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n")
234 //
243 //
235 //status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_DESTKEY, CCSDS_DESTINATION_ID); // sets the destination key
244 //status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_DESTKEY, CCSDS_DESTINATION_ID); // sets the destination key
236 //if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n")
245 //if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n")
237 //
246 //
238 PRINTF("In configure_spw_link *** "GRSPW_DEVICE_NAME" configured successfully\n")
247 PRINTF("In configure_spw_link *** "GRSPW_DEVICE_NAME" configured successfully\n")
239
248
240 return RTEMS_SUCCESSFUL;
249 return RTEMS_SUCCESSFUL;
241 }
250 }
242
251
243 char *link_status(int status){
252 char *link_status(int status){
244 return lstates[status];
253 return lstates[status];
245 }
254 }
246
255
247 rtems_status_code write_spw(spw_ioctl_pkt_send* spw_ioctl_send)
256 rtems_status_code write_spw(spw_ioctl_pkt_send* spw_ioctl_send)
248 {
257 {
249 rtems_status_code status;
258 rtems_status_code status;
250 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, spw_ioctl_send );
259 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, spw_ioctl_send );
251 if (status!=RTEMS_SUCCESSFUL) printf("In write_spw *** Error SPACEWIRE_IOCTRL_SEND\n");
260 if (status!=RTEMS_SUCCESSFUL) printf("In write_spw *** Error SPACEWIRE_IOCTRL_SEND\n");
252 return status;
261 return status;
253 }
262 }
254
263
255
264
@@ -1,396 +1,414
1 #include <tc_handler.h>
1 #include <tc_handler.h>
2 #include <fsw_params.h>
2 #include <fsw_params.h>
3
3
4 char *errorCCSDSMsg[8] = { "ILLEGAL_APID 0",
4 char *errorCCSDSMsg[8] = { "ILLEGAL_APID 0",
5 "WRONG_LEN_PACKET 1",
5 "WRONG_LEN_PACKET 1",
6 "INCOR_CHECKSUM 2",
6 "INCOR_CHECKSUM 2",
7 "ILL_TYPE 3",
7 "ILL_TYPE 3",
8 "ILL_SUBTYPE 4",
8 "ILL_SUBTYPE 4",
9 "WRONG_APP_DATA 5",
9 "WRONG_APP_DATA 5",
10 "WRONG_CMD_CODE 6",
10 "WRONG_CMD_CODE 6",
11 "CCSDS_TM_VALID 7"
11 "CCSDS_TM_VALID 7"
12 };
12 };
13
13
14 //**********************
14 //**********************
15 // GENERAL USE FUNCTIONS
15 // GENERAL USE FUNCTIONS
16 unsigned int Crc_opt( unsigned char D, unsigned int Chk)
16 unsigned int Crc_opt( unsigned char D, unsigned int Chk)
17 {
17 {
18 return(((Chk << 8) & 0xff00)^lookUpTableForCRC [(((Chk >> 8)^D) & 0x00ff)]);
18 return(((Chk << 8) & 0xff00)^lookUpTableForCRC [(((Chk >> 8)^D) & 0x00ff)]);
19 }
19 }
20
20
21 void InitLookUpTableForCRC()
21 void InitLookUpTableForCRC()
22 {
22 {
23 unsigned int i, tmp;
23 unsigned int i, tmp;
24 for (i=0; i<256; i++)
24 for (i=0; i<256; i++)
25 {
25 {
26 tmp = 0;
26 tmp = 0;
27 if((i & 1) != 0) tmp = tmp ^ 0x1021;
27 if((i & 1) != 0) tmp = tmp ^ 0x1021;
28 if((i & 2) != 0) tmp = tmp ^ 0x2042;
28 if((i & 2) != 0) tmp = tmp ^ 0x2042;
29 if((i & 4) != 0) tmp = tmp ^ 0x4084;
29 if((i & 4) != 0) tmp = tmp ^ 0x4084;
30 if((i & 8) != 0) tmp = tmp ^ 0x8108;
30 if((i & 8) != 0) tmp = tmp ^ 0x8108;
31 if((i & 16) != 0) tmp = tmp ^ 0x1231;
31 if((i & 16) != 0) tmp = tmp ^ 0x1231;
32 if((i & 32) != 0) tmp = tmp ^ 0x2462;
32 if((i & 32) != 0) tmp = tmp ^ 0x2462;
33 if((i & 64) != 0) tmp = tmp ^ 0x48c4;
33 if((i & 64) != 0) tmp = tmp ^ 0x48c4;
34 if((i & 128) != 0) tmp = tmp ^ 0x9188;
34 if((i & 128) != 0) tmp = tmp ^ 0x9188;
35 lookUpTableForCRC[i] = tmp;
35 lookUpTableForCRC[i] = tmp;
36 }
36 }
37 }
37 }
38
38
39 void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData)
39 void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData)
40 {
40 {
41 unsigned int Chk;
41 unsigned int Chk;
42 int j;
42 int j;
43 Chk = 0xffff; // reset the syndrom to all ones
43 Chk = 0xffff; // reset the syndrom to all ones
44 for (j=0; j<sizeOfData; j++) {
44 for (j=0; j<sizeOfData; j++) {
45 Chk = Crc_opt(data[j], Chk);
45 Chk = Crc_opt(data[j], Chk);
46 }
46 }
47 crcAsTwoBytes[0] = (unsigned char) (Chk >> 8);
47 crcAsTwoBytes[0] = (unsigned char) (Chk >> 8);
48 crcAsTwoBytes[1] = (unsigned char) (Chk & 0x00ff);
48 crcAsTwoBytes[1] = (unsigned char) (Chk & 0x00ff);
49 }
49 }
50
50
51
51
52 //*********************
52 //*********************
53 // ACCEPTANCE FUNCTIONS
53 // ACCEPTANCE FUNCTIONS
54 int TC_checker(ccsdsTelecommandPacket_t *TC, unsigned int tc_len_recv)
54 int TC_checker(ccsdsTelecommandPacket_t *TC, unsigned int tc_len_recv)
55 {
55 {
56 rtems_status_code status;
56 rtems_status_code status;
57 spw_ioctl_pkt_send spw_ioctl_send;
57 spw_ioctl_pkt_send spw_ioctl_send;
58 TMHeader_t TM_header;
58 TMHeader_t TM_header;
59 unsigned int code = 0;
59 unsigned int code = 0;
60 unsigned char computed_CRC[2];
60 unsigned char computed_CRC[2];
61 char data[ TM_LEN_EXE_CORR + CCSDS_TC_TM_PACKET_OFFSET - TM_HEADER_LEN ];
61 char data[ TM_LEN_EXE_CORR + CCSDS_TC_TM_PACKET_OFFSET - TM_HEADER_LEN ];
62
62
63 GetCRCAsTwoBytes( (unsigned char*) TC->packetID, computed_CRC, tc_len_recv + 5 );
63 GetCRCAsTwoBytes( (unsigned char*) TC->packetID, computed_CRC, tc_len_recv + 5 );
64 code = acceptTM( TC, tc_len_recv ) ;
64 code = acceptTM( TC, tc_len_recv ) ;
65 if ( (code == 0) | (code == 1) | (code == 2)
65 if ( (code == 0) | (code == 1) | (code == 2)
66 | (code == 3) | (code == 4) | (code == 5) )
66 | (code == 3) | (code == 4) | (code == 5) )
67 { // generate TM_LFR_TC_EXE_CORRUPTED
67 { // generate TM_LFR_TC_EXE_CORRUPTED
68 // BUILD HEADER
68 // BUILD HEADER
69 TM_build_header( TM_LFR_TC_EXE_ERR, SID_EXE_CORR, TM_LEN_EXE_CORR, 0, 0, &TM_header);
69 TM_build_header( TM_LFR_TC_EXE_ERR, TM_LEN_EXE_CORR, 0, 0, &TM_header);
70 // BUILD DATA
70 // BUILD DATA
71 TM_build_data( TC, data, SID_EXE_CORR, computed_CRC);
71 TM_build_data( TC, data, SID_EXE_CORR, computed_CRC);
72 // PREPARE TM SENDING
72 // PREPARE TM SENDING
73 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
73 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
74 spw_ioctl_send.hdr = (char*) &TM_header;
74 spw_ioctl_send.hdr = (char*) &TM_header;
75 spw_ioctl_send.dlen = TM_LEN_EXE_CORR + CCSDS_TC_TM_PACKET_OFFSET - TM_HEADER_LEN;
75 spw_ioctl_send.dlen = TM_LEN_EXE_CORR + CCSDS_TC_TM_PACKET_OFFSET - TM_HEADER_LEN;
76 spw_ioctl_send.data = data;
76 spw_ioctl_send.data = data;
77 // SEND PACKET
77 // SEND PACKET
78 write_spw(&spw_ioctl_send);
78 write_spw(&spw_ioctl_send);
79 }
79 }
80 else { // TM_LFR_TC_EXE_NOT_IMPLEMENTED
80 else { // send valid TC to the action launcher
81 status = rtems_message_queue_send( misc_id[0], TC, tc_len_recv + CCSDS_TC_TM_PACKET_OFFSET);
81 status = rtems_message_queue_send( misc_id[0], TC, tc_len_recv + CCSDS_TC_TM_PACKET_OFFSET);
82 return -1;
82 return -1;
83 }
83 }
84 return -1;
84 return -1;
85 }
85 }
86
86
87 unsigned char acceptTM(ccsdsTelecommandPacket_t * TMPacket, unsigned int TC_LEN_RCV)
87 unsigned char acceptTM(ccsdsTelecommandPacket_t * TMPacket, unsigned int TC_LEN_RCV)
88 {
88 {
89 unsigned char pid = 0;
89 unsigned char pid = 0;
90 unsigned char category = 0;
90 unsigned char category = 0;
91 unsigned int length = 0;
91 unsigned int length = 0;
92 unsigned char packetType = 0;
92 unsigned char packetType = 0;
93 unsigned char packetSubtype = 0;
93 unsigned char packetSubtype = 0;
94 unsigned char * CCSDSContent;
94 unsigned char * CCSDSContent;
95
95
96 // APID check *** APID on 2 bytes
96 // APID check *** APID on 2 bytes
97 pid = ((TMPacket->packetID[0] & 0x07)<<4) + ( (TMPacket->packetID[1]>>4) & 0x0f ); // PID = 11 *** 7 bits xxxxx210 7654xxxx
97 pid = ((TMPacket->packetID[0] & 0x07)<<4) + ( (TMPacket->packetID[1]>>4) & 0x0f ); // PID = 11 *** 7 bits xxxxx210 7654xxxx
98 category = (TMPacket->packetID[1] & 0x0f); // PACKET_CATEGORY = 12 *** 4 bits xxxxxxxx xxxx3210
98 category = (TMPacket->packetID[1] & 0x0f); // PACKET_CATEGORY = 12 *** 4 bits xxxxxxxx xxxx3210
99 if (pid!=CCSDS_PROCESS_ID) return ILLEGAL_APID;
99 if (pid!=CCSDS_PROCESS_ID) return ILLEGAL_APID;
100 if (category!=CCSDS_PACKET_CATEGORY) return ILLEGAL_APID;
100 if (category!=CCSDS_PACKET_CATEGORY) return ILLEGAL_APID;
101
101
102 // packet length check
102 // packet length check
103 length = TMPacket->packetLength[0] * 256 + TMPacket->packetLength[1];
103 length = TMPacket->packetLength[0] * 256 + TMPacket->packetLength[1];
104 if (length != TC_LEN_RCV ) return WRONG_LEN_PACKET; // LEN RCV != SIZE FIELD
104 if (length != TC_LEN_RCV ) return WRONG_LEN_PACKET; // LEN RCV != SIZE FIELD
105 if (length >= CCSDS_TC_PKT_MAX_SIZE) return WRONG_LEN_PACKET; // check that the packet does not exceed the MAX size
105 if (length >= CCSDS_TC_PKT_MAX_SIZE) return WRONG_LEN_PACKET; // check that the packet does not exceed the MAX size
106
106
107 packetType = TMPacket->dataFieldHeader[1];
107 packetType = TMPacket->dataFieldHeader[1];
108 packetSubtype = TMPacket->dataFieldHeader[2];
108 packetSubtype = TMPacket->dataFieldHeader[2];
109 // service type, subtype and packet length check
109 // service type, subtype and packet length check
110 if (packetType == 181){
110 if (packetType == 181){
111 switch(packetSubtype){ //subtype, autorized values are 3, 20, 21, 24, 27, 28, 30, 40, 50, 60, 61
111 switch(packetSubtype){ //subtype, autorized values are 3, 20, 21, 24, 27, 28, 30, 40, 50, 60, 61
112 case 3:
112 case 3:
113 if (length!=(12-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
113 if (length!=(12-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
114 break;
114 break;
115 case 20:
115 case 20:
116 if (length!=(14-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
116 if (length!=(14-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
117 break;
117 break;
118 case 21:
118 case 21:
119 if (length!=(20-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
119 if (length!=(20-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
120 break;
120 break;
121 case 24:
121 case 24:
122 if (length!=(14-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
122 if (length!=(14-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
123 break;
123 break;
124 case 27:
124 case 27:
125 if (length!=(14-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
125 if (length!=(14-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
126 break;
126 break;
127 case 28:
127 case 28:
128 if (length!=(14-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
128 if (length!=(14-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
129 break;
129 break;
130 case 30:
130 case 30:
131 if (length!=(12-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
131 if (length!=(12-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
132 break;
132 break;
133 case 40:
133 case 40:
134 if (length!=(20-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
134 if (length!=(20-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
135 break;
135 break;
136 case 50:
136 case 50:
137 if (length!=(50-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
137 if (length!=(50-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
138 break;
138 break;
139 case 60:
139 case 60:
140 if (length!=(12-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
140 if (length!=(12-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
141 break;
141 break;
142 case 61:
142 case 61:
143 if (length!=(12-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
143 if (length!=(12-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
144 break;
144 break;
145 default:
145 default:
146 return ILL_SUBTYPE;
146 return ILL_SUBTYPE;
147 break;
147 break;
148 }
148 }
149 }
149 }
150 else if (packetType == 9){
150 else if (packetType == 9){
151 if (packetSubtype!=129) return ILL_SUBTYPE;
151 if (packetSubtype!=129) return ILL_SUBTYPE;
152 if (length!=(18-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
152 if (length!=(18-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET;
153 }
153 }
154 else return ILL_TYPE;
154 else return ILL_TYPE;
155
155
156 // source ID check // Source ID not documented in the ICD
156 // source ID check // Source ID not documented in the ICD
157
157
158 // packet error control, CRC check
158 // packet error control, CRC check
159 CCSDSContent = (unsigned char*) TMPacket->packetID;
159 CCSDSContent = (unsigned char*) TMPacket->packetID;
160 GetCRCAsTwoBytes(CCSDSContent, currentTC_COMPUTED_CRC, length + CCSDS_TC_TM_PACKET_OFFSET - 2); // 2 CRC bytes removed from the calculation of the CRC
160 GetCRCAsTwoBytes(CCSDSContent, currentTC_COMPUTED_CRC, length + CCSDS_TC_TM_PACKET_OFFSET - 2); // 2 CRC bytes removed from the calculation of the CRC
161 if (currentTC_COMPUTED_CRC[0] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -2]) return INCOR_CHECKSUM;
161 if (currentTC_COMPUTED_CRC[0] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -2]) return INCOR_CHECKSUM;
162 if (currentTC_COMPUTED_CRC[1] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -1]) return INCOR_CHECKSUM;
162 if (currentTC_COMPUTED_CRC[1] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -1]) return INCOR_CHECKSUM;
163
163
164 return CCSDS_TM_VALID;
164 return CCSDS_TM_VALID;
165 }
165 }
166
166
167 unsigned char TM_build_header( enum TM_TYPE tm_type, unsigned int SID, unsigned int packetLength,
167 unsigned char TM_build_header( enum TM_TYPE tm_type, unsigned int packetLength,
168 unsigned int coarseTime, unsigned int fineTime, TMHeader_t *TMHeader)
168 unsigned int coarseTime, unsigned int fineTime, TMHeader_t *TMHeader)
169 {
169 {
170 TMHeader->targetLogicalAddress = CCSDS_DESTINATION_ID;
170 TMHeader->targetLogicalAddress = CCSDS_DESTINATION_ID;
171 TMHeader->protocolIdentifier = 0x02;
171 TMHeader->protocolIdentifier = 0x02;
172 TMHeader->reserved = 0x00;
172 TMHeader->reserved = 0x00;
173 TMHeader->userApplication = 0x00;
173 TMHeader->userApplication = 0x00;
174 TMHeader->packetID[0] = 0x0c;
174 TMHeader->packetID[0] = 0x0c;
175 TMHeader->packetSequenceControl[0] = 0xc0;
175 TMHeader->packetSequenceControl[0] = 0xc0;
176 TMHeader->packetSequenceControl[1] = 0x00;
176 TMHeader->packetSequenceControl[1] = 0x00;
177 TMHeader->packetLength[0] = (unsigned char) (packetLength>>8);
177 TMHeader->packetLength[0] = (unsigned char) (packetLength>>8);
178 TMHeader->packetLength[1] = (unsigned char) packetLength;
178 TMHeader->packetLength[1] = (unsigned char) packetLength;
179 TMHeader->dataFieldHeader[0] = 0x10;
179 TMHeader->dataFieldHeader[0] = 0x10;
180 TMHeader->dataFieldHeader[3] = CCSDS_DESTINATION_ID;
180 TMHeader->dataFieldHeader[3] = CCSDS_DESTINATION_ID;
181 switch (tm_type){
181 switch (tm_type){
182 case(TM_LFR_TC_EXE_OK):
182 case(TM_LFR_TC_EXE_OK):
183 TMHeader->packetID[1] = 0xc1;
183 TMHeader->packetID[1] = 0xc1;
184 TMHeader->dataFieldHeader[1] = 1; // type
184 TMHeader->dataFieldHeader[1] = 1; // type
185 TMHeader->dataFieldHeader[2] = 7; // subtype
185 TMHeader->dataFieldHeader[2] = 7; // subtype
186 break;
186 break;
187 case(TM_LFR_TC_EXE_ERR):
187 case(TM_LFR_TC_EXE_ERR):
188 TMHeader->packetID[1] = 0xc1;
188 TMHeader->packetID[1] = 0xc1;
189 TMHeader->dataFieldHeader[1] = 1; // type
189 TMHeader->dataFieldHeader[1] = 1; // type
190 TMHeader->dataFieldHeader[2] = 8; // subtype
190 TMHeader->dataFieldHeader[2] = 8; // subtype
191 break;
191 break;
192 case(TM_LFR_HK):
192 case(TM_LFR_HK):
193 TMHeader->packetID[1] = 0xc4;
193 TMHeader->packetID[1] = 0xc4;
194 TMHeader->dataFieldHeader[1] = 3; // type
194 TMHeader->dataFieldHeader[1] = 3; // type
195 TMHeader->dataFieldHeader[2] = 25; // subtype
195 TMHeader->dataFieldHeader[2] = 25; // subtype
196 break;
196 break;
197 case(TM_LFR_SCI):
197 case(TM_LFR_SCI):
198 TMHeader->packetID[1] = 0xcc;
198 TMHeader->packetID[1] = 0xcc;
199 TMHeader->dataFieldHeader[1] = 21; // type
199 TMHeader->dataFieldHeader[1] = 21; // type
200 TMHeader->dataFieldHeader[2] = 3; // subtype
200 TMHeader->dataFieldHeader[2] = 3; // subtype
201 break;
201 break;
202 case(TM_LFR_SCI_SBM):
202 case(TM_LFR_SCI_SBM):
203 TMHeader->packetID[1] = 0xfc;
203 TMHeader->packetID[1] = 0xfc;
204 TMHeader->dataFieldHeader[1] = 21; // type
204 TMHeader->dataFieldHeader[1] = 21; // type
205 TMHeader->dataFieldHeader[2] = 3; // subtype
205 TMHeader->dataFieldHeader[2] = 3; // subtype
206 break;
206 break;
207 case(TM_LFR_PAR_DUMP):
207 case(TM_LFR_PAR_DUMP):
208 TMHeader->packetID[1] = 0xc9;
208 TMHeader->packetID[1] = 0xc9;
209 TMHeader->dataFieldHeader[1] = 181; // type
209 TMHeader->dataFieldHeader[1] = 181; // type
210 TMHeader->dataFieldHeader[2] = 31; // subtype
210 TMHeader->dataFieldHeader[2] = 31; // subtype
211 break;
211 break;
212 default:
212 default:
213 return 0;
213 return 0;
214 }
214 }
215 /*TMHeader->dataFieldHeader[4] = (unsigned char) (coarseTime>>24);
215 /*TMHeader->dataFieldHeader[4] = (unsigned char) (coarseTime>>24);
216 TMHeader->dataFieldHeader[5] = (unsigned char) (coarseTime>>16);
216 TMHeader->dataFieldHeader[5] = (unsigned char) (coarseTime>>16);
217 TMHeader->dataFieldHeader[6] = (unsigned char) (coarseTime>>8);
217 TMHeader->dataFieldHeader[6] = (unsigned char) (coarseTime>>8);
218 TMHeader->dataFieldHeader[7] = (unsigned char) (coarseTime);
218 TMHeader->dataFieldHeader[7] = (unsigned char) (coarseTime);
219 TMHeader->dataFieldHeader[8] = (unsigned char) (fineTime>>8);
219 TMHeader->dataFieldHeader[8] = (unsigned char) (fineTime>>8);
220 TMHeader->dataFieldHeader[9] = (unsigned char) (fineTime);*/
220 TMHeader->dataFieldHeader[9] = (unsigned char) (fineTime);*/
221 TMHeader->dataFieldHeader[4] = 0xaa;
221 TMHeader->dataFieldHeader[4] = 0xaa;
222 TMHeader->dataFieldHeader[5] = 0xbb;
222 TMHeader->dataFieldHeader[5] = 0xbb;
223 TMHeader->dataFieldHeader[6] = 0xcc;
223 TMHeader->dataFieldHeader[6] = 0xcc;
224 TMHeader->dataFieldHeader[7] = 0xdd;
224 TMHeader->dataFieldHeader[7] = 0xdd;
225 TMHeader->dataFieldHeader[8] = 0xee;
225 TMHeader->dataFieldHeader[8] = 0xee;
226 TMHeader->dataFieldHeader[9] = 0xff;
226 TMHeader->dataFieldHeader[9] = 0xff;
227 return 1;
227 return 1;
228 }
228 }
229
229
230 unsigned char TM_build_data(ccsdsTelecommandPacket_t *TC, char* data, unsigned int SID, unsigned char *computed_CRC)
230 unsigned char TM_build_data(ccsdsTelecommandPacket_t *TC, char* data, unsigned int SID, unsigned char *computed_CRC)
231 {
231 {
232 unsigned int packetLength;
232 unsigned int packetLength;
233 packetLength = TC->packetLength[0] * 256 + TC->packetLength[1];
233 packetLength = TC->packetLength[0] * 256 + TC->packetLength[1];
234 switch (SID){
234 switch (SID){
235 case (SID_NOT_EXE):
235 case (SID_NOT_EXE):
236 break;
236 break;
237 case (SID_NOT_IMP):
237 case (SID_NOT_IMP):
238 data[0] = 0x9c;
238 data[0] = 0x9c;
239 data[1] = 0x42;
239 data[1] = 0x42;
240 data[2] = TC->packetID[0];
240 data[2] = TC->packetID[0];
241 data[3] = TC->packetID[1];
241 data[3] = TC->packetID[1];
242 data[4] = TC->packetSequenceControl[0];
242 data[4] = TC->packetSequenceControl[0];
243 data[5] = TC->packetSequenceControl[1];
243 data[5] = TC->packetSequenceControl[1];
244 data[6] = TC->dataFieldHeader[1]; // type
244 data[6] = TC->dataFieldHeader[1]; // type
245 data[7] = TC->dataFieldHeader[2]; // subtype
245 data[7] = TC->dataFieldHeader[2]; // subtype
246 break;
246 break;
247 case (SID_EXE_ERR):
247 case (SID_EXE_ERR):
248 break;
248 break;
249 case (SID_EXE_CORR):
249 case (SID_EXE_CORR):
250 data[0] = 0x9c;
250 data[0] = 0x9c;
251 data[1] = 0x45;
251 data[1] = 0x45;
252 data[2] = TC->packetID[0];
252 data[2] = TC->packetID[0];
253 data[3] = TC->packetID[1];
253 data[3] = TC->packetID[1];
254 data[4] = TC->packetSequenceControl[0];
254 data[4] = TC->packetSequenceControl[0];
255 data[5] = TC->packetSequenceControl[1];
255 data[5] = TC->packetSequenceControl[1];
256 data[6] = TC->dataFieldHeader[1]; // type
256 data[6] = TC->dataFieldHeader[1]; // type
257 data[7] = TC->dataFieldHeader[2]; // subtype
257 data[7] = TC->dataFieldHeader[2]; // subtype
258 data[8] = currentTC_LEN_RCV[0];
258 data[8] = currentTC_LEN_RCV[0];
259 data[9] = currentTC_LEN_RCV[1];
259 data[9] = currentTC_LEN_RCV[1];
260 data[10] = TC->packetLength[0];
260 data[10] = TC->packetLength[0];
261 data[11] = TC->packetLength[1];
261 data[11] = TC->packetLength[1];
262 data[12] = TC->dataAndCRC[packetLength];
262 data[12] = TC->dataAndCRC[packetLength];
263 data[13] = TC->dataAndCRC[packetLength+1];
263 data[13] = TC->dataAndCRC[packetLength+1];
264 data[14] = computed_CRC[0];
264 data[14] = computed_CRC[0];
265 data[15] = computed_CRC[1];
265 data[15] = computed_CRC[1];
266 break;
266 break;
267 default:
267 default:
268 return 0;
268 return 0;
269 }
269 }
270 return 1;
270 return 1;
271 }
271 }
272
272
273 //***********
273 //***********
274 // RTEMS TASK
274 // RTEMS TASK
275 rtems_task recv_task( rtems_task_argument unused )
275 rtems_task recv_task( rtems_task_argument unused )
276 {
276 {
277 int len = 0;
277 int len = 0;
278 unsigned int i = 0;
278 unsigned int i = 0;
279 unsigned int data_length = 0;
279 unsigned int data_length = 0;
280 ccsdsTelecommandPacket_t currentTC;
280 ccsdsTelecommandPacket_t currentTC;
281 char data[100];
281 char data[100];
282
282
283 for(i=0; i<100; i++) data[i] = 0;
283 for(i=0; i<100; i++) data[i] = 0;
284
284
285 PRINTF("In RECV *** \n")
285 PRINTF("In RECV *** \n")
286
286
287 while(1)
287 while(1)
288 {
288 {
289 len = read(fdSPW, (char*) &currentTC, CCSDS_TC_PKT_MAX_SIZE); // the call to read is blocking
289 len = read(fdSPW, (char*) &currentTC, CCSDS_TC_PKT_MAX_SIZE); // the call to read is blocking
290 if (len == -1){ // error during the read call
290 if (len == -1){ // error during the read call
291 PRINTF("In RECV *** last read call returned -1\n")
291 PRINTF("In RECV *** last read call returned -1\n")
292 if (rtems_event_send( Task_id[3], SPW_LINKERR_EVENT ) != RTEMS_SUCCESSFUL)
292 if (rtems_event_send( Task_id[3], SPW_LINKERR_EVENT ) != RTEMS_SUCCESSFUL)
293 PRINTF("IN RECV *** Error: rtems_event_send SPW_LINKERR_EVENT\n")
293 PRINTF("IN RECV *** Error: rtems_event_send SPW_LINKERR_EVENT\n")
294 if (rtems_task_suspend(RTEMS_SELF) != RTEMS_SUCCESSFUL)
294 if (rtems_task_suspend(RTEMS_SELF) != RTEMS_SUCCESSFUL)
295 PRINTF("In RECV *** Error: rtems_task_suspend(RTEMS_SELF)\n")
295 PRINTF("In RECV *** Error: rtems_task_suspend(RTEMS_SELF)\n")
296 }
296 }
297 else {
297 else {
298 //PRINTF1("In RECV *** Got Message of length %d\n", len)
298 //PRINTF1("In RECV *** Got Message of length %d\n", len)
299 currentTC_LEN_RCV[0] = 0x00;
299 currentTC_LEN_RCV[0] = 0x00;
300 currentTC_LEN_RCV[1] = (unsigned char) len - CCSDS_TC_TM_PACKET_OFFSET - 3; // build the corresponding packet size field
300 currentTC_LEN_RCV[1] = (unsigned char) len - CCSDS_TC_TM_PACKET_OFFSET - 3; // build the corresponding packet size field
301 currentTC_LEN_RCV_AsUnsignedInt = (unsigned int) len - CCSDS_TC_TM_PACKET_OFFSET - 3; // => -3 is for Prot ID, Reserved and User App bytes
301 currentTC_LEN_RCV_AsUnsignedInt = (unsigned int) len - CCSDS_TC_TM_PACKET_OFFSET - 3; // => -3 is for Prot ID, Reserved and User App bytes
302 // CHECK THE TC AND BUILD THE APPROPRIATE TM
302 // CHECK THE TC AND BUILD THE APPROPRIATE TM
303 data_length = TC_checker(&currentTC, currentTC_LEN_RCV_AsUnsignedInt);
303 data_length = TC_checker(&currentTC, currentTC_LEN_RCV_AsUnsignedInt);
304 if (data_length!=-1)
304 if (data_length!=-1)
305 {
305 {
306 }
306 }
307 }
307 }
308 }
308 }
309 }
309 }
310
310
311 rtems_task actn_task( rtems_task_argument unused )
311 rtems_task actn_task( rtems_task_argument unused )
312 {
312 {
313 rtems_status_code status; // RTEMS status code
313 rtems_status_code status; // RTEMS status code
314 ccsdsTelecommandPacket_t TC; // TC sent to the ACTN task
314 ccsdsTelecommandPacket_t TC; // TC sent to the ACTN task
315 size_t size; // size of the incoming TC packet
315 size_t size; // size of the incoming TC packet
316 unsigned char subtype = 0; // subtype of the current TC packet
316 unsigned char subtype = 0; // subtype of the current TC packet
317
317
318 while(1)
318 while(1)
319 {
319 {
320 status = rtems_message_queue_receive(misc_id[0], (char*) &TC, &size,
320 status = rtems_message_queue_receive(misc_id[0], (char*) &TC, &size,
321 RTEMS_WAIT, RTEMS_NO_TIMEOUT);
321 RTEMS_WAIT, RTEMS_NO_TIMEOUT);
322 if (status!=RTEMS_SUCCESSFUL) PRINTF1("in task ACTN *** error receiving a message, code %d \n", status)
322 if (status!=RTEMS_SUCCESSFUL) PRINTF1("in task ACTN *** error receiving a message, code %d \n", status)
323 else
323 else
324 {
324 {
325 subtype = TC.dataFieldHeader[2];
325 subtype = TC.dataFieldHeader[2];
326 switch(subtype)
326 switch(subtype)
327 {
327 {
328 case TC_SUBTYPE_RESET:
328 case TC_SUBTYPE_RESET:
329 break;
329 break;
330 case TC_SUBTYPE_LOAD_COMM:
330 case TC_SUBTYPE_LOAD_COMM:
331 break;
331 break;
332 case TC_SUBTYPE_LOAD_NORM:
332 case TC_SUBTYPE_LOAD_NORM:
333 action_load_norm( &TC );
333 break;
334 break;
334 case TC_SUBTYPE_LOAD_BURST:
335 case TC_SUBTYPE_LOAD_BURST:
335 break;
336 break;
336 case TC_SUBTYPE_LOAD_SBM1:
337 case TC_SUBTYPE_LOAD_SBM1:
337 break;
338 break;
338 case TC_SUBTYPE_LOAD_SBM2:
339 case TC_SUBTYPE_LOAD_SBM2:
339 break;
340 break;
340 case TC_SUBTYPE_DUMP:
341 case TC_SUBTYPE_DUMP:
341 default_action( &TC );
342 action_default( &TC );
342 break;
343 break;
343 case TC_SUBTYPE_ENTER:
344 case TC_SUBTYPE_ENTER:
345 action_enter( &TC );
344 break;
346 break;
345 case TC_SUBTYPE_UPDT_INFO:
347 case TC_SUBTYPE_UPDT_INFO:
346 break;
348 break;
347 case TC_SUBTYPE_EN_CAL:
349 case TC_SUBTYPE_EN_CAL:
348 break;
350 break;
349 case TC_SUBTYPE_DIS_CAL:
351 case TC_SUBTYPE_DIS_CAL:
350 break;
352 break;
351 case TC_SUBTYPE_UPDT_TIME:
353 case TC_SUBTYPE_UPDT_TIME:
352 break;
354 break;
353 default:
355 default:
354 break;
356 break;
355 }
357 }
356 }
358 }
357 }
359 }
358 }
360 }
359
361
360 int create_message_queue()
362 int create_message_queue()
361 {
363 {
362 rtems_status_code status;
364 rtems_status_code status;
363 misc_name[0] = rtems_build_name( 'Q', 'U', 'E', 'U' );
365 misc_name[0] = rtems_build_name( 'Q', 'U', 'E', 'U' );
364 status = rtems_message_queue_create( misc_name[0], ACTION_MSG_QUEUE_COUNT, CCSDS_TC_PKT_MAX_SIZE,
366 status = rtems_message_queue_create( misc_name[0], ACTION_MSG_QUEUE_COUNT, CCSDS_TC_PKT_MAX_SIZE,
365 RTEMS_FIFO | RTEMS_LOCAL, &misc_id[0] );
367 RTEMS_FIFO | RTEMS_LOCAL, &misc_id[0] );
366 if (status!=RTEMS_SUCCESSFUL) PRINTF("in create_message_queue *** error creating message queue\n")
368 if (status!=RTEMS_SUCCESSFUL) PRINTF("in create_message_queue *** error creating message queue\n")
367
369
368 return 0;
370 return 0;
369 }
371 }
370
372
371 //***********
373 //***********
372 // TC ACTIONS
374 // TC ACTIONS
373 int default_action(ccsdsTelecommandPacket_t *TC)
375 int action_default(ccsdsTelecommandPacket_t *TC)
374 {
376 {
375 char data[100]; // buffer for the generic TM packet
377 char data[100]; // buffer for the generic TM packet
376 TMHeader_t TM_header; // TM header
378 TMHeader_t TM_header; // TM header
377 spw_ioctl_pkt_send spw_ioctl_send; // structure to send the TM packet if any
379 spw_ioctl_pkt_send spw_ioctl_send; // structure to send the TM packet if any
378 // BUILD HEADER
380 // BUILD HEADER
379 TM_build_header( TM_LFR_TC_EXE_ERR, SID_NOT_IMP, TM_LEN_NOT_IMP, 0, 0, &TM_header);
381 TM_build_header( TM_LFR_TC_EXE_ERR, TM_LEN_NOT_IMP, 0, 0, &TM_header);
380 // BUILD DATA
382 // BUILD DATA
381 TM_build_data( TC, data, SID_NOT_IMP, NULL);
383 TM_build_data( TC, data, SID_NOT_IMP, NULL);
382 // filling the strture for the spcawire transmission
384 // filling the strture for the spcawire transmission
383 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
385 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
384 spw_ioctl_send.hdr = (char*) &TM_header;
386 spw_ioctl_send.hdr = (char*) &TM_header;
385 spw_ioctl_send.dlen = TM_LEN_NOT_IMP + CCSDS_TC_TM_PACKET_OFFSET - TM_HEADER_LEN;
387 spw_ioctl_send.dlen = TM_LEN_NOT_IMP + CCSDS_TC_TM_PACKET_OFFSET - TM_HEADER_LEN;
386 spw_ioctl_send.data = data;
388 spw_ioctl_send.data = data;
387 // SEND DATA
389 // SEND DATA
388 write_spw(&spw_ioctl_send);
390 write_spw(&spw_ioctl_send);
389
391
390 return 0;
392 return 0;
391 }
393 }
392
394
395 int action_enter(ccsdsTelecommandPacket_t *TC)
396 {
397 return 0;
398 }
399
400 int action_load_norm(ccsdsTelecommandPacket_t *TC)
401 {
402 param_norm.sy_lfr_n_swf_l = TC->dataAndCRC[0] * 256 + TC->dataAndCRC[1];
403 param_norm.sy_lfr_n_swf_p = TC->dataAndCRC[2] * 256 + TC->dataAndCRC[3];
404 param_norm.sy_lfr_n_asm_p = TC->dataAndCRC[4] * 256 + TC->dataAndCRC[5];
405 param_norm.sy_lfr_n_bp_p0 = TC->dataAndCRC[6];
406 param_norm.sy_lfr_n_bp_p1 = TC->dataAndCRC[7];
407 printf("sy_lfr_n_ => swf_l %d, swf_p %d, asm_p %d, bsp_p0 %d, bsp_p1 %d\n",
408 param_norm.sy_lfr_n_swf_l, param_norm.sy_lfr_n_swf_p,
409 param_norm.sy_lfr_n_asm_p, param_norm.sy_lfr_n_bp_p0, param_norm.sy_lfr_n_bp_p1);
410 return 0;
411 }
393
412
394
413
395
414
396
General Comments 0
You need to be logged in to leave comments. Login now