@@ -10,7 +10,7 | |||
|
10 | 10 | <Option output="bin/Debug/fsw" prefix_auto="1" extension_auto="1" /> |
|
11 | 11 | <Option object_output="obj/Debug/" /> |
|
12 | 12 | <Option type="1" /> |
|
13 | <Option compiler="sparcrtems446" /> | |
|
13 | <Option compiler="sparcrtemsgcc446" /> | |
|
14 | 14 | <Compiler> |
|
15 | 15 | <Add option="-fexpensive-optimizations" /> |
|
16 | 16 | <Add option="-O3" /> |
@@ -142,7 +142,7 1359464346 /opt/DEV_PLE/header/fsw_main. | |||
|
142 | 142 | <wf_handler.h> |
|
143 | 143 | <grlib_regs.h> |
|
144 | 144 | |
|
145 |
1359 |
|
|
145 | 1359959307 /opt/DEV_PLE/header/fsw_params.h | |
|
146 | 146 | |
|
147 | 147 | 1359614518 /opt/DEV_PLE/header/fsw_misc.h |
|
148 | 148 | <rtems.h> |
@@ -153,14 +153,14 1359614518 /opt/DEV_PLE/header/fsw_misc. | |||
|
153 | 153 | <grspw.h> |
|
154 | 154 | <ccsds_types.h> |
|
155 | 155 | |
|
156 |
1359 |
|
|
156 | 1359959822 /opt/DEV_PLE/header/grlib_regs.h | |
|
157 | 157 | |
|
158 | 158 | 1359614517 /opt/DEV_PLE/header/fsw_processing.h |
|
159 | 159 | <rtems.h> |
|
160 | 160 | <grlib_regs.h> |
|
161 | 161 | <fsw_params.h> |
|
162 | 162 | |
|
163 |
1359 |
|
|
163 | 1359959377 /opt/DEV_PLE/header/tc_handler.h | |
|
164 | 164 | <rtems.h> |
|
165 | 165 | <stdio.h> |
|
166 | 166 | <unistd.h> |
@@ -185,18 +185,18 1359614518 source:/opt/DEV_PLE/src/fsw_m | |||
|
185 | 185 | <fsw_misc.h> |
|
186 | 186 | <fsw_params.h> |
|
187 | 187 | |
|
188 |
1359 |
|
|
188 | 1359715931 source:/opt/DEV_PLE/src/tc_handler.c | |
|
189 | 189 | <tc_handler.h> |
|
190 | 190 | <fsw_params.h> |
|
191 | 191 | |
|
192 |
1359 |
|
|
192 | 1359715982 source:/opt/DEV_PLE/src/wf_handler.c | |
|
193 | 193 | <wf_handler.h> |
|
194 | 194 | |
|
195 |
1359 |
|
|
195 | 1359959319 source:/opt/DEV_PLE/src/fsw_globals.c | |
|
196 | 196 | <fsw_processing.h> |
|
197 | 197 | <rtems.h> |
|
198 | 198 | |
|
199 |
1359 |
|
|
199 | 1359959173 source:/opt/DEV_PLE/src/fsw_init.c | |
|
200 | 200 | <rtems.h> |
|
201 | 201 | <bsp.h> |
|
202 | 202 | <rtems/confdefs.h> |
@@ -204,7 +204,7 1359622160 source:/opt/DEV_PLE/src/fsw_i | |||
|
204 | 204 | <fsw_init.h> |
|
205 | 205 | <fsw_config.c> |
|
206 | 206 | |
|
207 |
1359 |
|
|
207 | 1359714779 /opt/DEV_PLE/header/fsw_init.h | |
|
208 | 208 | <errno.h> |
|
209 | 209 | <fcntl.h> |
|
210 | 210 | <stdio.h> |
@@ -218,7 +218,7 1359615705 /opt/DEV_PLE/header/fsw_init. | |||
|
218 | 218 | <wf_handler.h> |
|
219 | 219 | <grlib_regs.h> |
|
220 | 220 | |
|
221 |
1359 |
|
|
221 | 1359715903 source:/opt/DEV_PLE/src/fsw_processing.c | |
|
222 | 222 | <fsw_processing.h> |
|
223 | 223 | <math.h> |
|
224 | 224 | <stdio.h> |
@@ -1,43 +1,46 | |||
|
1 | 1 | <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> |
|
2 | 2 | <CodeBlocks_layout_file> |
|
3 | 3 | <ActiveTarget name="Debug" /> |
|
4 |
<File name="../header/ccsds_types.h" open=" |
|
|
5 |
<Cursor position=" |
|
|
4 | <File name="../header/ccsds_types.h" open="1" top="0" tabpos="3"> | |
|
5 | <Cursor position="3403" topLine="101" /> | |
|
6 | 6 | </File> |
|
7 | 7 | <File name="../header/fsw_init.h" open="0" top="0" tabpos="3"> |
|
8 |
<Cursor position=" |
|
|
8 | <Cursor position="899" topLine="0" /> | |
|
9 | 9 | </File> |
|
10 | 10 | <File name="../header/fsw_misc.h" open="0" top="0" tabpos="0"> |
|
11 | 11 | <Cursor position="114" topLine="0" /> |
|
12 | 12 | </File> |
|
13 | 13 | <File name="../header/fsw_params.h" open="0" top="0" tabpos="0"> |
|
14 |
<Cursor position=" |
|
|
14 | <Cursor position="2405" topLine="52" /> | |
|
15 | 15 | </File> |
|
16 | 16 | <File name="../header/fsw_processing.h" open="0" top="0" tabpos="0"> |
|
17 | 17 | <Cursor position="576" topLine="0" /> |
|
18 | 18 | </File> |
|
19 | <File name="../header/grlib_regs.h" open="0" top="0" tabpos="0"> | |
|
20 | <Cursor position="1072" topLine="0" /> | |
|
21 | </File> | |
|
19 | 22 | <File name="../header/tc_handler.h" open="0" top="0" tabpos="4"> |
|
20 |
<Cursor position="4 |
|
|
23 | <Cursor position="481" topLine="0" /> | |
|
21 | 24 | </File> |
|
22 | 25 | <File name="../header/wf_handler.h" open="0" top="0" tabpos="0"> |
|
23 | 26 | <Cursor position="212" topLine="0" /> |
|
24 | 27 | </File> |
|
25 | 28 | <File name="../src/fsw_globals.c" open="0" top="0" tabpos="4"> |
|
26 |
<Cursor position="1 |
|
|
29 | <Cursor position="1531" topLine="1" /> | |
|
27 | 30 | </File> |
|
28 | 31 | <File name="../src/fsw_init.c" open="1" top="0" tabpos="1"> |
|
29 |
<Cursor position=" |
|
|
32 | <Cursor position="9387" topLine="83" /> | |
|
30 | 33 | </File> |
|
31 | 34 | <File name="../src/fsw_misc.c" open="0" top="0" tabpos="0"> |
|
32 | 35 | <Cursor position="20" topLine="0" /> |
|
33 | 36 | </File> |
|
34 |
<File name="../src/fsw_processing.c" open="0" top="0" tabpos=" |
|
|
35 |
<Cursor position="1 |
|
|
37 | <File name="../src/fsw_processing.c" open="0" top="0" tabpos="3"> | |
|
38 | <Cursor position="1797" topLine="73" /> | |
|
36 | 39 | </File> |
|
37 | 40 | <File name="../src/tc_handler.c" open="1" top="1" tabpos="2"> |
|
38 |
<Cursor position="1 |
|
|
41 | <Cursor position="10603" topLine="21" /> | |
|
39 | 42 | </File> |
|
40 | 43 | <File name="../src/wf_handler.c" open="0" top="0" tabpos="0"> |
|
41 |
<Cursor position=" |
|
|
44 | <Cursor position="542" topLine="0" /> | |
|
42 | 45 | </File> |
|
43 | 46 | </CodeBlocks_layout_file> |
|
1 | NO CONTENT: modified file, binary diff hidden |
@@ -23,7 +23,12 extern rtems_name Task_name[ ]; /* a | |||
|
23 | 23 | extern rtems_name misc_name[ ]; /* arry of miscellaneous names for rtems objects */ |
|
24 | 24 | extern int fdSPW; // grspw file descriptor |
|
25 | 25 | extern int fdUART; // uart file descriptor |
|
26 | // MODE PARAMETERS | |
|
26 | 27 | extern struct param_norm_str param_norm; |
|
28 | extern struct param_burst_str param_burst; | |
|
29 | extern struct param_sbm1_str param_sbm1; | |
|
30 | extern struct param_sbm2_str param_sbm2; | |
|
31 | extern unsigned char param_common[]; | |
|
27 | 32 | |
|
28 | 33 | // RTEMS TASKS |
|
29 | 34 | rtems_task Init( rtems_task_argument argument); /* forward declaration needed */ |
@@ -4,11 +4,20 | |||
|
4 | 4 | #define GRSPW_DEVICE_NAME "/dev/grspw0" |
|
5 | 5 | #define UART_DEVICE_NAME "/dev/console" |
|
6 | 6 | |
|
7 | //********** | |
|
8 | // LFR MODES | |
|
9 | #define LFR_MODE_STANDBY 0 | |
|
10 | #define LFR_MODE_NORMAL 1 | |
|
11 | #define LFR_MODE_BURST 2 | |
|
12 | #define LFR_MODE_SBM1 3 | |
|
13 | #define LFR_MODE_SBM2 4 | |
|
14 | ||
|
7 | 15 | //***************************** |
|
8 | 16 | // APB REGISTERS BASE ADDRESSES |
|
9 | 17 | #define REGS_ADDR_APBUART 0x80000100 |
|
10 | 18 | #define REGS_ADDR_GPTIMER 0x80000300 |
|
11 | 19 | #define REGS_ADDR_GRSPW 0x80000500 |
|
20 | #define REGS_ADDR_TIME_MANAGEMENT 0x80000600 | |
|
12 | 21 | #define REGS_ADDR_SPECTRAL_MATRICES 0x80000700 |
|
13 | 22 | |
|
14 | 23 | #define APBUART_CTRL_REG_MASK_DB 0xfffff7ff |
@@ -60,6 +69,21 struct param_norm_str{ | |||
|
60 | 69 | unsigned char sy_lfr_n_bp_p1; // time between two products BP2 set |
|
61 | 70 | }; |
|
62 | 71 | |
|
72 | struct param_burst_str{ | |
|
73 | unsigned char sy_lfr_b_bp_p0; // timebetween two products BP1 set | |
|
74 | unsigned char sy_lfr_b_bp_p1; // time between two products BP2 set | |
|
75 | }; | |
|
76 | ||
|
77 | struct param_sbm1_str{ | |
|
78 | unsigned char sy_lfr_s1_bp_p0; // timebetween two products BP1 set | |
|
79 | unsigned char sy_lfr_s1_bp_p1; // time between two products BP2 set | |
|
80 | }; | |
|
81 | ||
|
82 | struct param_sbm2_str{ | |
|
83 | unsigned char sy_lfr_s2_bp_p0; // timebetween two products BP1 set | |
|
84 | unsigned char sy_lfr_s2_bp_p1; // time between two products BP2 set | |
|
85 | }; | |
|
86 | ||
|
63 | 87 | extern volatile int wf_snap_f0[ ]; // 24576 bytes |
|
64 | 88 | extern volatile int wf_snap_f1[ ]; // 24576 bytes |
|
65 | 89 | extern volatile int wf_snap_f2[ ]; // 24576 bytes |
@@ -37,4 +37,12 struct spectral_matrices_regs_str{ | |||
|
37 | 37 | }; |
|
38 | 38 | typedef struct spectral_matrices_regs_str spectral_matrices_regs_t; |
|
39 | 39 | |
|
40 | struct time_management_regs_str{ | |
|
41 | volatile int ctrl; // bit 0 forces the load of the coarse_time_load value and resets the fine_time | |
|
42 | volatile int coarse_time_load; | |
|
43 | volatile int coarse_time; | |
|
44 | volatile int fine_time; | |
|
45 | }; | |
|
46 | typedef struct time_management_regs_str time_management_regs_t; | |
|
47 | ||
|
40 | 48 | #endif // GRLIBREGS_H_INCLUDED |
@@ -2,6 +2,7 | |||
|
2 | 2 | #define TC_HANDLER_H_INCLUDED |
|
3 | 3 | |
|
4 | 4 | #include <rtems.h> |
|
5 | #include <bsp.h> // for the LEON_Unmask_interrupt function | |
|
5 | 6 | #include <stdio.h> |
|
6 | 7 | #include <unistd.h> // for the read call |
|
7 | 8 | #include <sys/ioctl.h> // for the ioctl call |
@@ -13,7 +14,12 extern int fdSPW; | |||
|
13 | 14 | extern rtems_name misc_name[ ]; |
|
14 | 15 | extern rtems_name misc_id[ ]; |
|
15 | 16 | extern rtems_id Task_id[ ]; // array of task ids |
|
17 | // MODE PARAMETERS | |
|
16 | 18 | extern struct param_norm_str param_norm; |
|
19 | extern struct param_sbm1_str param_sbm1; | |
|
20 | extern struct param_sbm2_str param_sbm2; | |
|
21 | extern time_management_regs_t *time_management_regs; | |
|
22 | extern unsigned char param_common[]; | |
|
17 | 23 | |
|
18 | 24 | unsigned char currentTC_LEN_RCV[2]; // SHALL be equal to the current TC packet estimated packet length field |
|
19 | 25 | unsigned char currentTC_COMPUTED_CRC[2]; |
@@ -24,7 +30,7 unsigned char currentTC_processedFlag; | |||
|
24 | 30 | //********************** |
|
25 | 31 | // GENERAL USE FUNCTIONS |
|
26 | 32 | unsigned int lookUpTableForCRC[256]; |
|
27 |
void |
|
|
33 | void initLookUpTableForCRC(); | |
|
28 | 34 | void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData); |
|
29 | 35 | |
|
30 | 36 | //********************* |
@@ -45,8 +51,11 int create_message_queue(); | |||
|
45 | 51 | //*********** |
|
46 | 52 | // TC ACTIONS |
|
47 | 53 | int action_default(ccsdsTelecommandPacket_t *TC); |
|
54 | int send_tm_lfr_tc_exe_success(ccsdsTelecommandPacket_t *TC); | |
|
55 | // | |
|
48 | 56 | int action_load_norm(ccsdsTelecommandPacket_t *TC); |
|
49 | 57 | int action_enter(ccsdsTelecommandPacket_t *TC); |
|
58 | int action_updt_time(ccsdsTelecommandPacket_t *TC); | |
|
50 | 59 | |
|
51 | 60 | #endif // TC_HANDLER_H_INCLUDED |
|
52 | 61 |
@@ -9,6 +9,9 rtems_name Task_name[10]; /* array | |||
|
9 | 9 | int fdSPW; |
|
10 | 10 | int fdUART; |
|
11 | 11 | |
|
12 | // APB CONFIGURATION REGISTERS | |
|
13 | time_management_regs_t *time_management_regs = (time_management_regs_t*) REGS_ADDR_TIME_MANAGEMENT; | |
|
14 | ||
|
12 | 15 | // WAVEFORMS GLOBAL VARIABLES |
|
13 | 16 | volatile int wf_snap_f0[ NB_SAMPLES_PER_SNAPSHOT * NB_BYTES_SWF_BLK ]; // 24576 bytes |
|
14 | 17 | volatile int wf_snap_f1[ NB_SAMPLES_PER_SNAPSHOT * NB_BYTES_SWF_BLK ]; // 24576 bytes |
@@ -28,8 +31,12 volatile int spec_mat_f0_h[ TOTAL_SIZE_S | |||
|
28 | 31 | float averaged_spec_mat_f0[ TOTAL_SIZE_SPEC_MAT ]; |
|
29 | 32 | float compressed_spec_mat_f0[ TOTAL_SIZE_COMPRESSED_MATRIX_f0 ]; |
|
30 | 33 | |
|
31 |
// |
|
|
34 | // MODE PARAMETERS | |
|
32 | 35 | struct param_norm_str param_norm; |
|
36 | struct param_burst_str param_burst; | |
|
37 | struct param_sbm1_str param_sbm1; | |
|
38 | struct param_sbm2_str param_sbm2; | |
|
39 | unsigned char param_common[2]; | |
|
33 | 40 | |
|
34 | 41 | // BASIC PARAMETERS GLOBAL VARIABLES |
|
35 | 42 | unsigned char LFR_BP1_F0[ NB_BINS_COMPRESSED_MATRIX_f0 * 9 ]; |
@@ -60,22 +60,17 rtems_task Init( rtems_task_argument ign | |||
|
60 | 60 | |
|
61 | 61 | //send_console_outputs_on_serial_port(); |
|
62 | 62 | |
|
63 |
|
|
|
63 | initLookUpTableForCRC(); // in tc_handler.h | |
|
64 | 64 | init_default_mode_parameters(); |
|
65 | 65 | create_message_queue(); |
|
66 | 66 | create_all_tasks(); |
|
67 | 67 | start_all_tasks(); |
|
68 | 68 | |
|
69 | 69 | configure_spw_link(); |
|
70 | // configure timer for spectral matrices simulation | |
|
71 | 70 | configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR, CLKDIV_SM_SIMULATOR, |
|
72 | 71 | IRQ_SPARC_SM, spectral_matrices_isr ); |
|
73 | // configure timer for waveforms simulation | |
|
74 | 72 | configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_WF_SIMULATOR, CLKDIV_WF_SIMULATOR, |
|
75 | 73 | IRQ_SPARC_WF, waveforms_isr ); |
|
76 | ||
|
77 | LEON_Unmask_interrupt( IRQ_SM ); | |
|
78 | LEON_Unmask_interrupt( IRQ_WF ); | |
|
79 | 74 | |
|
80 | 75 | status = rtems_task_delete(RTEMS_SELF); |
|
81 | 76 | } |
@@ -84,7 +79,7 rtems_task spiq_task(rtems_task_argument | |||
|
84 | 79 | { |
|
85 | 80 | rtems_event_set event_out; |
|
86 | 81 | struct grspw_regs_str *grspw_regs; |
|
87 | grspw_regs = (struct grspw_regs_str *) REGS_ADDR_GRSPW; | |
|
82 | grspw_regs = (struct grspw_regs_str *) REGS_ADDR_GRSPW; | |
|
88 | 83 | |
|
89 | 84 | while(1){ |
|
90 | 85 | PRINTF("In SPIQ *** Waiting for SPW_LINKERR_EVENT\n") |
@@ -102,11 +97,24 rtems_task spiq_task(rtems_task_argument | |||
|
102 | 97 | |
|
103 | 98 | void init_default_mode_parameters() |
|
104 | 99 | { |
|
100 | // COMMON PARAMETERS | |
|
101 | param_common[0] = 0x00; | |
|
102 | param_common[1] = 0x10; // default value 0 0 0 1 0 0 0 0 | |
|
103 | // NORMAL MODE | |
|
105 | 104 | param_norm.sy_lfr_n_swf_l = 2048; // nb sample |
|
106 | 105 | param_norm.sy_lfr_n_swf_p = 300; // sec |
|
107 | 106 | param_norm.sy_lfr_n_asm_p = 3600; // sec |
|
108 | 107 | param_norm.sy_lfr_n_bp_p0 = 4; // sec |
|
109 | 108 | param_norm.sy_lfr_n_bp_p1 = 20; // sec |
|
109 | // BURST MODE | |
|
110 | param_burst.sy_lfr_b_bp_p0 = 1; // sec | |
|
111 | param_burst.sy_lfr_b_bp_p1 = 5; // sec | |
|
112 | // SBM1 MODE | |
|
113 | param_sbm1.sy_lfr_s1_bp_p0 = 1; // sec | |
|
114 | param_sbm1.sy_lfr_s1_bp_p1 = 1; // sec | |
|
115 | // SBM2 MODE | |
|
116 | param_sbm2.sy_lfr_s2_bp_p0 = 1; // sec | |
|
117 | param_sbm2.sy_lfr_s2_bp_p0 = 5; // sec | |
|
110 | 118 | } |
|
111 | 119 | |
|
112 | 120 | int create_all_tasks() |
@@ -239,7 +247,7 int configure_spw_link() | |||
|
239 | 247 | if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n") |
|
240 | 248 | |
|
241 | 249 | status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL, 1); // sets the link-error interrupt bit |
|
242 |
if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_ |
|
|
250 | if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL\n") | |
|
243 | 251 | // |
|
244 | 252 | //status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_DESTKEY, CCSDS_DESTINATION_ID); // sets the destination key |
|
245 | 253 | //if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n") |
@@ -62,6 +62,8 rtems_task smiq_task(rtems_task_argument | |||
|
62 | 62 | gptimer_regs_t *gptimer_regs; |
|
63 | 63 | gptimer_regs = (gptimer_regs_t *) REGS_ADDR_GPTIMER; |
|
64 | 64 | unsigned char nb_interrupt_f0 = 0; |
|
65 | ||
|
66 | PRINTF("In SMIQ *** \n") | |
|
65 | 67 | |
|
66 | 68 | while(1){ |
|
67 | 69 | rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0 |
@@ -367,6 +369,8 rtems_task avf0_task(rtems_task_argument | |||
|
367 | 369 | |
|
368 | 370 | rtems_task bpf0_task(rtems_task_argument argument){ |
|
369 | 371 | rtems_event_set event_out; |
|
372 | ||
|
373 | PRINTF("In BPFO *** \n") | |
|
370 | 374 | |
|
371 | 375 | while(1){ |
|
372 | 376 | rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0 |
@@ -18,7 +18,7 unsigned int Crc_opt( unsigned char D, u | |||
|
18 | 18 | return(((Chk << 8) & 0xff00)^lookUpTableForCRC [(((Chk >> 8)^D) & 0x00ff)]); |
|
19 | 19 | } |
|
20 | 20 | |
|
21 |
void |
|
|
21 | void initLookUpTableForCRC() | |
|
22 | 22 | { |
|
23 | 23 | unsigned int i, tmp; |
|
24 | 24 | for (i=0; i<256; i++) |
@@ -72,13 +72,13 int TC_checker(ccsdsTelecommandPacket_t | |||
|
72 | 72 | // PREPARE TM SENDING |
|
73 | 73 | spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header |
|
74 | 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 = 16; | |
|
76 | 76 | spw_ioctl_send.data = data; |
|
77 | 77 | // SEND PACKET |
|
78 | 78 | write_spw(&spw_ioctl_send); |
|
79 | 79 | } |
|
80 | 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 + 3); | |
|
82 | 82 | return -1; |
|
83 | 83 | } |
|
84 | 84 | return -1; |
@@ -212,18 +212,12 unsigned char TM_build_header( enum TM_T | |||
|
212 | 212 | default: |
|
213 | 213 | return 0; |
|
214 | 214 | } |
|
215 |
|
|
|
216 |
TMHeader->dataFieldHeader[5] = (unsigned char) (coarse |
|
|
217 |
TMHeader->dataFieldHeader[6] = (unsigned char) (coarse |
|
|
218 |
TMHeader->dataFieldHeader[7] = (unsigned char) (coarse |
|
|
219 |
TMHeader->dataFieldHeader[8] = (unsigned char) ( |
|
|
220 |
|
|
|
221 | TMHeader->dataFieldHeader[4] = 0xaa; | |
|
222 | TMHeader->dataFieldHeader[5] = 0xbb; | |
|
223 | TMHeader->dataFieldHeader[6] = 0xcc; | |
|
224 | TMHeader->dataFieldHeader[7] = 0xdd; | |
|
225 | TMHeader->dataFieldHeader[8] = 0xee; | |
|
226 | TMHeader->dataFieldHeader[9] = 0xff; | |
|
215 | TMHeader->dataFieldHeader[4] = (unsigned char) (time_management_regs->coarse_time>>24); | |
|
216 | TMHeader->dataFieldHeader[5] = (unsigned char) (time_management_regs->coarse_time>>16); | |
|
217 | TMHeader->dataFieldHeader[6] = (unsigned char) (time_management_regs->coarse_time>>8); | |
|
218 | TMHeader->dataFieldHeader[7] = (unsigned char) (time_management_regs->coarse_time); | |
|
219 | TMHeader->dataFieldHeader[8] = (unsigned char) (time_management_regs->fine_time>>8); | |
|
220 | TMHeader->dataFieldHeader[9] = (unsigned char) (time_management_regs->fine_time); | |
|
227 | 221 | return 1; |
|
228 | 222 | } |
|
229 | 223 | |
@@ -310,11 +304,14 rtems_task recv_task( rtems_task_argumen | |||
|
310 | 304 | |
|
311 | 305 | rtems_task actn_task( rtems_task_argument unused ) |
|
312 | 306 | { |
|
307 | int result = 0; | |
|
313 | 308 | rtems_status_code status; // RTEMS status code |
|
314 | 309 | ccsdsTelecommandPacket_t TC; // TC sent to the ACTN task |
|
315 | 310 | size_t size; // size of the incoming TC packet |
|
316 | 311 | unsigned char subtype = 0; // subtype of the current TC packet |
|
317 | 312 | |
|
313 | PRINTF("In ACTN *** \n") | |
|
314 | ||
|
318 | 315 | while(1) |
|
319 | 316 | { |
|
320 | 317 | status = rtems_message_queue_receive(misc_id[0], (char*) &TC, &size, |
@@ -326,32 +323,56 rtems_task actn_task( rtems_task_argumen | |||
|
326 | 323 | switch(subtype) |
|
327 | 324 | { |
|
328 | 325 | case TC_SUBTYPE_RESET: |
|
329 |
|
|
|
330 | case TC_SUBTYPE_LOAD_COMM: | |
|
326 | result = action_default( &TC ); | |
|
331 | 327 | break; |
|
328 | // | |
|
329 | case TC_SUBTYPE_LOAD_COMM: | |
|
330 | result = action_default( &TC ); | |
|
331 | break; | |
|
332 | // | |
|
332 | 333 | case TC_SUBTYPE_LOAD_NORM: |
|
333 | action_load_norm( &TC ); | |
|
334 | result = action_load_norm( &TC ); | |
|
335 | send_tm_lfr_tc_exe_success( &TC ); | |
|
334 | 336 | break; |
|
337 | // | |
|
335 | 338 | case TC_SUBTYPE_LOAD_BURST: |
|
339 | result = action_default( &TC ); | |
|
336 | 340 | break; |
|
341 | // | |
|
337 | 342 | case TC_SUBTYPE_LOAD_SBM1: |
|
343 | result = action_default( &TC ); | |
|
338 | 344 | break; |
|
345 | // | |
|
339 | 346 | case TC_SUBTYPE_LOAD_SBM2: |
|
347 | result = action_default( &TC ); | |
|
340 | 348 | break; |
|
349 | // | |
|
341 | 350 | case TC_SUBTYPE_DUMP: |
|
342 | action_default( &TC ); | |
|
351 | result = action_default( &TC ); | |
|
343 | 352 | break; |
|
353 | // | |
|
344 | 354 | case TC_SUBTYPE_ENTER: |
|
345 | action_enter( &TC ); | |
|
355 | result = action_enter( &TC ); | |
|
356 | send_tm_lfr_tc_exe_success( &TC ); | |
|
346 | 357 | break; |
|
358 | // | |
|
347 | 359 | case TC_SUBTYPE_UPDT_INFO: |
|
360 | result = action_default( &TC ); | |
|
348 | 361 | break; |
|
362 | // | |
|
349 | 363 | case TC_SUBTYPE_EN_CAL: |
|
364 | result = action_default( &TC ); | |
|
350 | 365 | break; |
|
366 | // | |
|
351 | 367 | case TC_SUBTYPE_DIS_CAL: |
|
368 | result = action_default( &TC ); | |
|
352 | 369 | break; |
|
370 | // | |
|
353 | 371 | case TC_SUBTYPE_UPDT_TIME: |
|
372 | result = action_updt_time( &TC ); | |
|
373 | send_tm_lfr_tc_exe_success( &TC ); | |
|
354 | 374 | break; |
|
375 | // | |
|
355 | 376 | default: |
|
356 | 377 | break; |
|
357 | 378 | } |
@@ -384,7 +405,7 int action_default(ccsdsTelecommandPacke | |||
|
384 | 405 | // filling the strture for the spcawire transmission |
|
385 | 406 | spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header |
|
386 | 407 | spw_ioctl_send.hdr = (char*) &TM_header; |
|
387 | spw_ioctl_send.dlen = TM_LEN_NOT_IMP + CCSDS_TC_TM_PACKET_OFFSET - TM_HEADER_LEN; | |
|
408 | spw_ioctl_send.dlen = 8; | |
|
388 | 409 | spw_ioctl_send.data = data; |
|
389 | 410 | // SEND DATA |
|
390 | 411 | write_spw(&spw_ioctl_send); |
@@ -394,6 +415,25 int action_default(ccsdsTelecommandPacke | |||
|
394 | 415 | |
|
395 | 416 | int action_enter(ccsdsTelecommandPacket_t *TC) |
|
396 | 417 | { |
|
418 | unsigned char lfr_mode = TC->dataAndCRC[1]; | |
|
419 | printf("enter mode %d\n", lfr_mode); | |
|
420 | switch(lfr_mode) | |
|
421 | { | |
|
422 | case(LFR_MODE_STANDBY): | |
|
423 | LEON_Mask_interrupt( IRQ_WF ); | |
|
424 | LEON_Mask_interrupt( IRQ_SM ); | |
|
425 | break; | |
|
426 | case(LFR_MODE_NORMAL): | |
|
427 | LEON_Unmask_interrupt( IRQ_WF ); | |
|
428 | LEON_Unmask_interrupt( IRQ_SM ); | |
|
429 | break; | |
|
430 | case(LFR_MODE_BURST): | |
|
431 | break; | |
|
432 | case(LFR_MODE_SBM1): | |
|
433 | break; | |
|
434 | case(LFR_MODE_SBM2): | |
|
435 | break; | |
|
436 | } | |
|
397 | 437 | return 0; |
|
398 | 438 | } |
|
399 | 439 | |
@@ -404,11 +444,46 int action_load_norm(ccsdsTelecommandPac | |||
|
404 | 444 | param_norm.sy_lfr_n_asm_p = TC->dataAndCRC[4] * 256 + TC->dataAndCRC[5]; |
|
405 | 445 | param_norm.sy_lfr_n_bp_p0 = TC->dataAndCRC[6]; |
|
406 | 446 | 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", | |
|
447 | /*printf("sy_lfr_n_ => swf_l %d, swf_p %d, asm_p %d, bsp_p0 %d, bsp_p1 %d\n", | |
|
408 | 448 | param_norm.sy_lfr_n_swf_l, param_norm.sy_lfr_n_swf_p, |
|
409 |
|
|
|
449 | param_norm.sy_lfr_n_asm_p, param_norm.sy_lfr_n_bp_p0, param_norm.sy_lfr_n_bp_p1);*/ | |
|
450 | return 0; | |
|
451 | } | |
|
452 | ||
|
453 | int action_updt_time(ccsdsTelecommandPacket_t *TC) | |
|
454 | { | |
|
455 | time_management_regs->coarse_time_load = (TC->dataAndCRC[0] << 24) | |
|
456 | + (TC->dataAndCRC[1] << 16) | |
|
457 | + (TC->dataAndCRC[2] << 8) | |
|
458 | + TC->dataAndCRC[3]; | |
|
459 | time_management_regs->ctrl = time_management_regs->ctrl | 1; | |
|
460 | return 0; | |
|
461 | } | |
|
462 | ||
|
463 | int send_tm_lfr_tc_exe_success(ccsdsTelecommandPacket_t *TC) | |
|
464 | { | |
|
465 | TMHeader_t TM_header; | |
|
466 | char data[4]; | |
|
467 | spw_ioctl_pkt_send spw_ioctl_send; | |
|
468 | ||
|
469 | TM_build_header( TM_LFR_TC_EXE_OK, TM_LEN_EXE, | |
|
470 | time_management_regs->coarse_time, time_management_regs->fine_time, &TM_header); | |
|
471 | ||
|
472 | data[0] = TC->packetID[0]; | |
|
473 | data[1] = TC->packetID[1]; | |
|
474 | data[2] = TC->packetSequenceControl[0]; | |
|
475 | data[3] = TC->packetSequenceControl[1]; | |
|
476 | ||
|
477 | // filling the structure for the spacewire transmission | |
|
478 | spw_ioctl_send.hlen = TM_HEADER_LEN + 3; // + 4 is for the protocole extra header | |
|
479 | spw_ioctl_send.hdr = (char*) &TM_header; | |
|
480 | spw_ioctl_send.dlen = 3; | |
|
481 | spw_ioctl_send.data = data; | |
|
482 | ||
|
483 | // SEND DATA | |
|
484 | write_spw(&spw_ioctl_send); | |
|
485 | ||
|
410 | 486 | return 0; |
|
411 | 487 | } |
|
412 | 488 | |
|
413 | 489 | |
|
414 |
@@ -47,6 +47,8 rtems_task wfrm_task(rtems_task_argument | |||
|
47 | 47 | // BUILD THE PACKET HEADER |
|
48 | 48 | spw_ioctl_send.hlen = TM_HEADER_LEN + 4 + 6; // + 4 is for the protocole extra header, + 6 is for the auxiliary header |
|
49 | 49 | spw_ioctl_send.hdr = (char*) &header; |
|
50 | ||
|
51 | PRINTF("In WFRM *** \n") | |
|
50 | 52 | |
|
51 | 53 | while(1){ |
|
52 | 54 | rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0 |
General Comments 0
You need to be logged in to leave comments.
Login now