##// END OF EJS Templates
Bug 60 corrected...
paul -
r102:b37996d46c77 VHDLib206
parent child
Show More
@@ -1,6 +1,6
1 #############################################################################
1 #############################################################################
2 # Makefile for building: bin/fsw
2 # Makefile for building: bin/fsw
3 # Generated by qmake (2.01a) (Qt 4.8.5) on: Wed Feb 19 13:04:42 2014
3 # Generated by qmake (2.01a) (Qt 4.8.5) on: Fri Feb 21 15:32:25 2014
4 # Project: fsw-qt.pro
4 # Project: fsw-qt.pro
5 # Template: app
5 # Template: app
6 # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
6 # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
@@ -10,7 +10,7
10
10
11 CC = sparc-rtems-gcc
11 CC = sparc-rtems-gcc
12 CXX = sparc-rtems-g++
12 CXX = sparc-rtems-g++
13 DEFINES = -DSW_VERSION_N1=1 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=2 -DPRINT_MESSAGES_ON_CONSOLE -DDEBUG_MESSAGES -DPRINT_TASK_STATISTICS
13 DEFINES = -DSW_VERSION_N1=1 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=2 -DPRINT_MESSAGES_ON_CONSOLE
14 CFLAGS = -pipe -O3 -Wall $(DEFINES)
14 CFLAGS = -pipe -O3 -Wall $(DEFINES)
15 CXXFLAGS = -pipe -O3 -Wall $(DEFINES)
15 CXXFLAGS = -pipe -O3 -Wall $(DEFINES)
16 INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header -I../../LFR_basic-parameters
16 INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header -I../../LFR_basic-parameters
@@ -11,6 +11,10 for frequencyBin in range(128):
11 for component in range (25):
11 for component in range (25):
12 dataToWrite.append( component )
12 dataToWrite.append( component )
13
13
14 #for frequencyBin in range(64):
15 # for component in range (25):
16 # dataToWrite.append( 2 * component )
17
14 # WRITE THE DATA
18 # WRITE THE DATA
15 print len(dataToWrite)
19 print len(dataToWrite)
16 RMAPPlugin0.Write( matrixF0_Address0, dataToWrite )
20 RMAPPlugin0.Write( matrixF0_Address0, dataToWrite )
@@ -1,7 +1,7
1 TEMPLATE = app
1 TEMPLATE = app
2 # CONFIG += console v8 sim
2 # CONFIG += console v8 sim
3 # CONFIG options = verbose *** boot_messages *** debug_messages *** cpu_usage_report *** stack_report
3 # CONFIG options = verbose *** boot_messages *** debug_messages *** cpu_usage_report *** stack_report
4 CONFIG += console verbose cpu_usage_report debug_messages
4 CONFIG += console verbose
5 CONFIG -= qt
5 CONFIG -= qt
6
6
7 include(./sparc.pri)
7 include(./sparc.pri)
@@ -1,6 +1,6
1 <?xml version="1.0" encoding="UTF-8"?>
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE QtCreatorProject>
2 <!DOCTYPE QtCreatorProject>
3 <!-- Written by QtCreator 3.0.0, 2014-02-20T06:55:01. -->
3 <!-- Written by QtCreator 3.0.0, 2014-02-21T15:56:03. -->
4 <qtcreator>
4 <qtcreator>
5 <data>
5 <data>
6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -131,7 +131,7 typedef struct ring_node
131 #define TASKID_SMIQ 4
131 #define TASKID_SMIQ 4
132 #define TASKID_STAT 5
132 #define TASKID_STAT 5
133 #define TASKID_AVF0 6
133 #define TASKID_AVF0 6
134 #define TASKID_BPF0 7
134 //#define TASKID_BPF0 7
135 #define TASKID_WFRM 8
135 #define TASKID_WFRM 8
136 #define TASKID_DUMB 9
136 #define TASKID_DUMB 9
137 #define TASKID_HOUS 10
137 #define TASKID_HOUS 10
@@ -28,7 +28,13
28 #define NB_BINS_COMPRESSED_SM_F1 13
28 #define NB_BINS_COMPRESSED_SM_F1 13
29 #define NB_BINS_COMPRESSED_SM_F2 12
29 #define NB_BINS_COMPRESSED_SM_F2 12
30 //
30 //
31 #define TOTAL_SIZE_COMPRESSED_MATRIX_f0 (NB_BINS_COMPRESSED_SM_F0 * NB_VALUES_PER_SM)
31 #define NB_BINS_TO_AVERAGE_ASM_F0 8
32 #define NB_BINS_TO_AVERAGE_ASM_F1 8
33 #define NB_BINS_TO_AVERAGE_ASM_F2 8
34 //
35 #define TOTAL_SIZE_COMPRESSED_ASM_F0 275 // 11 * 25
36 #define TOTAL_SIZE_COMPRESSED_ASM_F1 325 // 13 * 25
37 #define TOTAL_SIZE_COMPRESSED_ASM_F2 300 // 12 * 25
32 #define NB_AVERAGE_NORMAL_f0 96*4
38 #define NB_AVERAGE_NORMAL_f0 96*4
33 #define NB_SM_TO_RECEIVE_BEFORE_AVF0 8
39 #define NB_SM_TO_RECEIVE_BEFORE_AVF0 8
34
40
@@ -35,21 +35,19 rtems_isr spectral_matrices_isr( rtems_v
35 rtems_isr spectral_matrices_isr_simu( rtems_vector_number vector );
35 rtems_isr spectral_matrices_isr_simu( rtems_vector_number vector );
36
36
37 // RTEMS TASKS
37 // RTEMS TASKS
38 rtems_task spw_bppr_task(rtems_task_argument argument);
39 rtems_task avf0_task(rtems_task_argument argument);
38 rtems_task avf0_task(rtems_task_argument argument);
40 rtems_task bpf0_task(rtems_task_argument argument);
41 rtems_task smiq_task(rtems_task_argument argument); // added to test the spectral matrix simulator
39 rtems_task smiq_task(rtems_task_argument argument); // added to test the spectral matrix simulator
42 rtems_task matr_task(rtems_task_argument argument);
40 rtems_task matr_task(rtems_task_argument argument);
43
41
44 void matrix_compression(volatile float *averaged_spec_mat, unsigned char fChannel, float *compressed_spec_mat);
45 void matrix_reset(volatile float *averaged_spec_mat);
42 void matrix_reset(volatile float *averaged_spec_mat);
46 void BP1_set_old(float * compressed_spec_mat, unsigned char nb_bins_compressed_spec_mat, unsigned char * LFR_BP1);
43 void BP1_set_old(float * compressed_spec_mat, unsigned char nb_bins_compressed_spec_mat, unsigned char * LFR_BP1);
47 void BP2_set_old(float * compressed_spec_mat, unsigned char nb_bins_compressed_spec_mat);
44 void BP2_set_old(float * compressed_spec_mat, unsigned char nb_bins_compressed_spec_mat);
48 //
45 //
49 void init_header_asm( Header_TM_LFR_SCIENCE_ASM_t *header);
46 void init_header_asm( Header_TM_LFR_SCIENCE_ASM_t *header);
50 void send_spectral_matrix(Header_TM_LFR_SCIENCE_ASM_t *header, char *spectral_matrix,
47 void compress_averaged_spectral_matrix( float *averaged_spec_mat, unsigned char fChannel, float *compressed_spec_mat );
48 void convert_averaged_spectral_matrix(volatile float *input_matrix, char *output_matrix);
49 void send_averaged_spectral_matrix(Header_TM_LFR_SCIENCE_ASM_t *header, char *spectral_matrix,
51 unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send, rtems_id queue_id);
50 unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send, rtems_id queue_id);
52 void convert_averaged_spectral_matrix(volatile float *input_matrix, char *output_matrix);
53 void fill_averaged_spectral_matrix( void );
51 void fill_averaged_spectral_matrix( void );
54 void reset_spectral_matrix_regs();
52 void reset_spectral_matrix_regs();
55
53
@@ -236,7 +236,7 void create_names( void ) // create all
236 Task_name[TASKID_SMIQ] = rtems_build_name( 'S', 'M', 'I', 'Q' );
236 Task_name[TASKID_SMIQ] = rtems_build_name( 'S', 'M', 'I', 'Q' );
237 Task_name[TASKID_STAT] = rtems_build_name( 'S', 'T', 'A', 'T' );
237 Task_name[TASKID_STAT] = rtems_build_name( 'S', 'T', 'A', 'T' );
238 Task_name[TASKID_AVF0] = rtems_build_name( 'A', 'V', 'F', '0' );
238 Task_name[TASKID_AVF0] = rtems_build_name( 'A', 'V', 'F', '0' );
239 Task_name[TASKID_BPF0] = rtems_build_name( 'B', 'P', 'F', '0' );
239 // Task_name[TASKID_BPF0] = rtems_build_name( 'B', 'P', 'F', '0' );
240 Task_name[TASKID_WFRM] = rtems_build_name( 'W', 'F', 'R', 'M' );
240 Task_name[TASKID_WFRM] = rtems_build_name( 'W', 'F', 'R', 'M' );
241 Task_name[TASKID_DUMB] = rtems_build_name( 'D', 'U', 'M', 'B' );
241 Task_name[TASKID_DUMB] = rtems_build_name( 'D', 'U', 'M', 'B' );
242 Task_name[TASKID_HOUS] = rtems_build_name( 'H', 'O', 'U', 'S' );
242 Task_name[TASKID_HOUS] = rtems_build_name( 'H', 'O', 'U', 'S' );
@@ -319,14 +319,6 int create_all_tasks( void ) // create a
319 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_AVF0]
319 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_AVF0]
320 );
320 );
321 }
321 }
322 if (status == RTEMS_SUCCESSFUL) // BPF0
323 {
324 status = rtems_task_create(
325 Task_name[TASKID_BPF0], TASK_PRIORITY_BPF0, RTEMS_MINIMUM_STACK_SIZE,
326 RTEMS_DEFAULT_MODES,
327 RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_BPF0]
328 );
329 }
330 if (status == RTEMS_SUCCESSFUL) // WFRM
322 if (status == RTEMS_SUCCESSFUL) // WFRM
331 {
323 {
332 status = rtems_task_create(
324 status = rtems_task_create(
@@ -484,14 +476,6 int start_all_tasks( void ) // start all
484 }
476 }
485 }
477 }
486
478
487 if (status == RTEMS_SUCCESSFUL) // BPF0
488 {
489 status = rtems_task_start( Task_id[TASKID_BPF0], bpf0_task, 1 );
490 if (status!=RTEMS_SUCCESSFUL) {
491 BOOT_PRINTF("in INIT *** Error starting TASK_BPF0\n")
492 }
493 }
494
495 if (status == RTEMS_SUCCESSFUL) // WFRM
479 if (status == RTEMS_SUCCESSFUL) // WFRM
496 {
480 {
497 status = rtems_task_start( Task_id[TASKID_WFRM], wfrm_task, 1 );
481 status = rtems_task_start( Task_id[TASKID_WFRM], wfrm_task, 1 );
@@ -24,7 +24,7 ring_node *current_ring_node_sm_f2;
24 BP1_t data_BP1[ NB_BINS_COMPRESSED_SM_F0 ];
24 BP1_t data_BP1[ NB_BINS_COMPRESSED_SM_F0 ];
25 float averaged_sm_f0[ TOTAL_SIZE_SM ];
25 float averaged_sm_f0[ TOTAL_SIZE_SM ];
26 char averaged_sm_f0_char[ TOTAL_SIZE_SM * 2 ];
26 char averaged_sm_f0_char[ TOTAL_SIZE_SM * 2 ];
27 float compressed_sm_f0[ TOTAL_SIZE_COMPRESSED_MATRIX_f0 ];
27 float compressed_sm_f0[ TOTAL_SIZE_COMPRESSED_ASM_F0 ];
28
28
29 unsigned int nb_sm_f0;
29 unsigned int nb_sm_f0;
30
30
@@ -109,13 +109,14 rtems_isr spectral_matrices_isr( rtems_v
109
109
110 rtems_isr spectral_matrices_isr_simu( rtems_vector_number vector )
110 rtems_isr spectral_matrices_isr_simu( rtems_vector_number vector )
111 {
111 {
112 //current_ring_node_sm_f0 = current_ring_node_sm_f0->next;
112 current_ring_node_sm_f0 = current_ring_node_sm_f0->next;
113 //spectral_matrix_regs->matrixF0_Address0 = current_ring_node_sm_f0->buffer_address;
113 spectral_matrix_regs->matrixF0_Address0 = current_ring_node_sm_f0->buffer_address;
114 //spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffffe;
114 spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffffe;
115
115
116 if (nb_sm_f0 == (NB_SM_TO_RECEIVE_BEFORE_AVF0-1) )
116 if (nb_sm_f0 == (NB_SM_TO_RECEIVE_BEFORE_AVF0-1) )
117 {
117 {
118 ring_node_for_averaging_sm_f0 = current_ring_node_sm_f0;
118 // ring_node_for_averaging_sm_f0 = current_ring_node_sm_f0;
119 ring_node_for_averaging_sm_f0 = &sm_ring_f0[NB_SM_TO_RECEIVE_BEFORE_AVF0-1];
119 if (rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL)
120 if (rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL)
120 {
121 {
121 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 );
122 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 );
@@ -142,18 +143,6 rtems_task smiq_task(rtems_task_argument
142 }
143 }
143 }
144 }
144
145
145 rtems_task spw_bppr_task(rtems_task_argument argument)
146 {
147 rtems_status_code status;
148 rtems_event_set event_out;
149
150 BOOT_PRINTF("in BPPR ***\n");
151
152 while( true ){ // wait for an event to begin with the processing
153 status = rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out);
154 }
155 }
156
157 rtems_task avf0_task(rtems_task_argument argument)
146 rtems_task avf0_task(rtems_task_argument argument)
158 {
147 {
159 int i;
148 int i;
@@ -168,7 +157,6 rtems_task avf0_task(rtems_task_argument
168
157
169 while(1){
158 while(1){
170 rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0
159 rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0
171 ring_node_for_averaging_sm_f0 = &sm_ring_f0[NB_SM_TO_RECEIVE_BEFORE_AVF0-1];
172 ring_node_tab[NB_SM_TO_RECEIVE_BEFORE_AVF0-1] = ring_node_for_averaging_sm_f0;
160 ring_node_tab[NB_SM_TO_RECEIVE_BEFORE_AVF0-1] = ring_node_for_averaging_sm_f0;
173 for (i=2; i<NB_SM_TO_RECEIVE_BEFORE_AVF0+1; i++)
161 for (i=2; i<NB_SM_TO_RECEIVE_BEFORE_AVF0+1; i++)
174 {
162 {
@@ -197,20 +185,6 rtems_task avf0_task(rtems_task_argument
197 }
185 }
198 }
186 }
199
187
200 rtems_task bpf0_task(rtems_task_argument argument)
201 {
202 rtems_event_set event_out;
203 static unsigned char LFR_BP1_F0[ NB_BINS_COMPRESSED_SM_F0 * 9 ];
204
205 BOOT_PRINTF("in BPFO *** \n")
206
207 while(1){
208 rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0
209 matrix_compression(averaged_sm_f0, 0, compressed_sm_f0);
210 BP1_set(compressed_sm_f0, NB_BINS_COMPRESSED_SM_F0, LFR_BP1_F0);
211 }
212 }
213
214 rtems_task matr_task(rtems_task_argument argument)
188 rtems_task matr_task(rtems_task_argument argument)
215 {
189 {
216 spw_ioctl_pkt_send spw_ioctl_send_ASM;
190 spw_ioctl_pkt_send spw_ioctl_send_ASM;
@@ -233,10 +207,14 rtems_task matr_task(rtems_task_argument
233
207
234 while(1){
208 while(1){
235 rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0
209 rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0
236 // 1) convert the float array in a char array
210 // 1) compress the matrix for Basic Parameters calculation
211 compress_averaged_spectral_matrix( averaged_sm_f0, 0, compressed_sm_f0 );
212 // 2)
213 //BP1_set(compressed_sm_f0, NB_BINS_COMPRESSED_SM_F0, LFR_BP1_F0);
214 // 3) convert the float array in a char array
237 convert_averaged_spectral_matrix( averaged_sm_f0, averaged_sm_f0_char);
215 convert_averaged_spectral_matrix( averaged_sm_f0, averaged_sm_f0_char);
238 // 2) send the spectral matrix packets
216 // 4) send the spectral matrix packets
239 send_spectral_matrix( &headerASM, averaged_sm_f0_char, SID_NORM_ASM_F0, &spw_ioctl_send_ASM, queue_id);
217 send_averaged_spectral_matrix( &headerASM, averaged_sm_f0_char, SID_NORM_ASM_F0, &spw_ioctl_send_ASM, queue_id);
240 }
218 }
241 }
219 }
242
220
@@ -251,32 +229,130 void matrix_reset(volatile float *averag
251 }
229 }
252 }
230 }
253
231
254 void matrix_compression(volatile float *averaged_spec_mat, unsigned char fChannel, float *compressed_spec_mat)
232 void compress_averaged_spectral_matrix( float *averaged_spec_mat, unsigned char fChannel, float *compressed_spec_mat )
255 {
233 {
256 int i;
234 int frequencyBin;
257 int j;
235 int asmComponent;
236 int offsetASM;
237 int generalOffsetASM;
238 int offsetCompressed;
239 int k;
240
258 switch (fChannel){
241 switch (fChannel){
259 case 0:
242 case 0:
260 for(i=0;i<NB_BINS_COMPRESSED_SM_F0;i++){
243 generalOffsetASM = ASM_F0_INDICE_START * NB_VALUES_PER_SM;
261 j = 17 + (i * 8);
244 for( frequencyBin = 0; frequencyBin < NB_BINS_COMPRESSED_SM_F0; frequencyBin++ )
262 compressed_spec_mat[i] = (averaged_spec_mat[j]
245 {
263 + averaged_spec_mat[j+1]
246 offsetCompressed = frequencyBin * NB_VALUES_PER_SM;
264 + averaged_spec_mat[j+2]
247 offsetASM = generalOffsetASM + frequencyBin * NB_BINS_TO_AVERAGE_ASM_F0 * NB_VALUES_PER_SM;
265 + averaged_spec_mat[j+3]
248 for (asmComponent = 0; asmComponent < NB_VALUES_PER_SM; asmComponent++)
266 + averaged_spec_mat[j+4]
249 {
267 + averaged_spec_mat[j+5]
250 compressed_spec_mat[ offsetCompressed + asmComponent ] = 0;
268 + averaged_spec_mat[j+6]
251 for ( k = 0; k < NB_BINS_TO_AVERAGE_ASM_F0; k++ )
269 + averaged_spec_mat[j+7])/(8*NB_AVERAGE_NORMAL_f0);
252 {
253 compressed_spec_mat[ offsetCompressed + asmComponent ] =
254 compressed_spec_mat[ offsetCompressed + asmComponent ]
255 + averaged_spec_mat[ offsetASM + (k*NB_VALUES_PER_SM) + asmComponent ];
270 }
256 }
271 break;
257 compressed_spec_mat[ offsetCompressed + asmComponent ] =
272 case 1:
258 compressed_spec_mat[ offsetCompressed + asmComponent ] / NB_BINS_TO_AVERAGE_ASM_F0;
259 }
260 }
261 break;
262
263 case 1:
264 // case fChannel = f1 to be completed later
265 break;
266
267 case 2:
273 // case fChannel = f1 to be completed later
268 // case fChannel = f1 to be completed later
269 break;
270
271 default:
272 break;
273 }
274 }
275
276 void convert_averaged_spectral_matrix( volatile float *input_matrix, char *output_matrix)
277 {
278 unsigned int i;
279 unsigned int j;
280 char * pt_char_input;
281 char * pt_char_output;
282
283 pt_char_input = NULL;
284 pt_char_output = NULL;
285
286 for( i=0; i<NB_BINS_PER_SM; i++)
287 {
288 for ( j=0; j<NB_VALUES_PER_SM; j++)
289 {
290 pt_char_input = (char*) &input_matrix [ (i*NB_VALUES_PER_SM) + j ];
291 pt_char_output = (char*) &output_matrix[ 2 * ( (i*NB_VALUES_PER_SM) + j ) ];
292 pt_char_output[0] = pt_char_input[0]; // bits 31 downto 24 of the float
293 pt_char_output[1] = pt_char_input[1]; // bits 23 downto 16 of the float
294 }
295 }
296 }
297
298 void send_averaged_spectral_matrix(Header_TM_LFR_SCIENCE_ASM_t *header, char *spectral_matrix,
299 unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send, rtems_id queue_id)
300 {
301 unsigned int i;
302 unsigned int length = 0;
303 rtems_status_code status;
304
305 for (i=0; i<2; i++)
306 {
307 // (1) BUILD THE DATA
308 switch(sid)
309 {
310 case SID_NORM_ASM_F0:
311 spw_ioctl_send->dlen = TOTAL_SIZE_ASM_F0_IN_BYTES / 2;
312 spw_ioctl_send->data = &spectral_matrix[ ( (ASM_F0_INDICE_START+ (i*NB_BINS_PER_PKT_ASM_F0)) * NB_VALUES_PER_SM) * 2 ];
313 length = PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F0;
314 header->pa_lfr_asm_blk_nr[0] = (unsigned char) ( (NB_BINS_PER_PKT_ASM_F0) >> 8 ); // BLK_NR MSB
315 header->pa_lfr_asm_blk_nr[1] = (unsigned char) (NB_BINS_PER_PKT_ASM_F0); // BLK_NR LSB
274 break;
316 break;
275 case 2:
317 case SID_NORM_ASM_F1:
276 // case fChannel = f1 to be completed later
318 break;
319 case SID_NORM_ASM_F2:
277 break;
320 break;
278 default:
321 default:
322 PRINTF1("ERR *** in send_averaged_spectral_matrix *** unexpected sid %d\n", sid)
279 break;
323 break;
324 }
325 spw_ioctl_send->hlen = HEADER_LENGTH_TM_LFR_SCIENCE_ASM + CCSDS_PROTOCOLE_EXTRA_BYTES;
326 spw_ioctl_send->hdr = (char *) header;
327 spw_ioctl_send->options = 0;
328
329 // (2) BUILD THE HEADER
330 header->packetLength[0] = (unsigned char) (length>>8);
331 header->packetLength[1] = (unsigned char) (length);
332 header->sid = (unsigned char) sid; // SID
333 header->pa_lfr_pkt_cnt_asm = 2;
334 header->pa_lfr_pkt_nr_asm = (unsigned char) (i+1);
335
336 // (3) SET PACKET TIME
337 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
338 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
339 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
340 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
341 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
342 header->time[5] = (unsigned char) (time_management_regs->fine_time);
343 //
344 header->acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24);
345 header->acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16);
346 header->acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8);
347 header->acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time);
348 header->acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8);
349 header->acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time);
350
351 // (4) SEND PACKET
352 status = rtems_message_queue_send( queue_id, spw_ioctl_send, ACTION_MSG_SPW_IOCTL_SEND_SIZE);
353 if (status != RTEMS_SUCCESSFUL) {
354 printf("in send_averaged_spectral_matrix *** ERR %d\n", (int) status);
355 }
280 }
356 }
281 }
357 }
282
358
@@ -495,89 +571,6 void init_header_asm( Header_TM_LFR_SCIE
495 header->pa_lfr_asm_blk_nr[1] = 0x00; // BLK_NR LSB
571 header->pa_lfr_asm_blk_nr[1] = 0x00; // BLK_NR LSB
496 }
572 }
497
573
498 void send_spectral_matrix(Header_TM_LFR_SCIENCE_ASM_t *header, char *spectral_matrix,
499 unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send, rtems_id queue_id)
500 {
501 unsigned int i;
502 unsigned int length = 0;
503 rtems_status_code status;
504
505 for (i=0; i<2; i++)
506 {
507 // (1) BUILD THE DATA
508 switch(sid)
509 {
510 case SID_NORM_ASM_F0:
511 spw_ioctl_send->dlen = TOTAL_SIZE_ASM_F0_IN_BYTES / 2;
512 spw_ioctl_send->data = &spectral_matrix[ ( (ASM_F0_INDICE_START+ (i*NB_BINS_PER_PKT_ASM_F0)) * NB_VALUES_PER_SM) * 2 ];
513 length = PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F0;
514 header->pa_lfr_asm_blk_nr[0] = (unsigned char) ( (NB_BINS_PER_PKT_ASM_F0) >> 8 ); // BLK_NR MSB
515 header->pa_lfr_asm_blk_nr[1] = (unsigned char) (NB_BINS_PER_PKT_ASM_F0); // BLK_NR LSB
516 break;
517 case SID_NORM_ASM_F1:
518 break;
519 case SID_NORM_ASM_F2:
520 break;
521 default:
522 PRINTF1("ERR *** in send_spectral_matrix *** unexpected sid %d\n", sid)
523 break;
524 }
525 spw_ioctl_send->hlen = HEADER_LENGTH_TM_LFR_SCIENCE_ASM + CCSDS_PROTOCOLE_EXTRA_BYTES;
526 spw_ioctl_send->hdr = (char *) header;
527 spw_ioctl_send->options = 0;
528
529 // (2) BUILD THE HEADER
530 header->packetLength[0] = (unsigned char) (length>>8);
531 header->packetLength[1] = (unsigned char) (length);
532 header->sid = (unsigned char) sid; // SID
533 header->pa_lfr_pkt_cnt_asm = 2;
534 header->pa_lfr_pkt_nr_asm = (unsigned char) (i+1);
535
536 // (3) SET PACKET TIME
537 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
538 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
539 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
540 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
541 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
542 header->time[5] = (unsigned char) (time_management_regs->fine_time);
543 //
544 header->acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24);
545 header->acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16);
546 header->acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8);
547 header->acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time);
548 header->acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8);
549 header->acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time);
550
551 // (4) SEND PACKET
552 status = rtems_message_queue_send( queue_id, spw_ioctl_send, ACTION_MSG_SPW_IOCTL_SEND_SIZE);
553 if (status != RTEMS_SUCCESSFUL) {
554 printf("in send_spectral_matrix *** ERR %d\n", (int) status);
555 }
556 }
557 }
558
559 void convert_averaged_spectral_matrix( volatile float *input_matrix, char *output_matrix)
560 {
561 unsigned int i;
562 unsigned int j;
563 char * pt_char_input;
564 char * pt_char_output;
565
566 pt_char_input = NULL;
567 pt_char_output = NULL;
568
569 for( i=0; i<NB_BINS_PER_SM; i++)
570 {
571 for ( j=0; j<NB_VALUES_PER_SM; j++)
572 {
573 pt_char_input = (char*) &input_matrix [ (i*NB_VALUES_PER_SM) + j ];
574 pt_char_output = (char*) &output_matrix[ 2 * ( (i*NB_VALUES_PER_SM) + j ) ];
575 pt_char_output[0] = pt_char_input[0]; // bits 31 downto 24 of the float
576 pt_char_output[1] = pt_char_input[1]; // bits 23 downto 16 of the float
577 }
578 }
579 }
580
581 void fill_averaged_spectral_matrix(void)
574 void fill_averaged_spectral_matrix(void)
582 {
575 {
583 /** This function fills spectral matrices related buffers with arbitrary data.
576 /** This function fills spectral matrices related buffers with arbitrary data.
@@ -445,7 +445,7 int enter_mode(unsigned char mode )
445 #endif
445 #endif
446 status = restart_science_tasks();
446 status = restart_science_tasks();
447 launch_waveform_picker( mode );
447 launch_waveform_picker( mode );
448 launch_spectral_matrix( mode );
448 //launch_spectral_matrix( mode );
449 }
449 }
450 else if ( mode == LFR_MODE_STANDBY )
450 else if ( mode == LFR_MODE_STANDBY )
451 {
451 {
@@ -498,12 +498,6 int restart_science_tasks()
498 PRINTF1("in restart_science_task *** 0 ERR %d\n", status[0])
498 PRINTF1("in restart_science_task *** 0 ERR %d\n", status[0])
499 }
499 }
500
500
501 status[1] = rtems_task_restart( Task_id[TASKID_BPF0],1 );
502 if (status[1] != RTEMS_SUCCESSFUL)
503 {
504 PRINTF1("in restart_science_task *** 1 ERR %d\n", status[1])
505 }
506
507 status[2] = rtems_task_restart( Task_id[TASKID_WFRM],1 );
501 status[2] = rtems_task_restart( Task_id[TASKID_WFRM],1 );
508 if (status[2] != RTEMS_SUCCESSFUL)
502 if (status[2] != RTEMS_SUCCESSFUL)
509 {
503 {
@@ -528,7 +522,7 int restart_science_tasks()
528 PRINTF1("in restart_science_task *** 5 ERR %d\n", status[5])
522 PRINTF1("in restart_science_task *** 5 ERR %d\n", status[5])
529 }
523 }
530
524
531 if ( (status[0] != RTEMS_SUCCESSFUL) || (status[1] != RTEMS_SUCCESSFUL) || (status[2] != RTEMS_SUCCESSFUL) ||
525 if ( (status[0] != RTEMS_SUCCESSFUL) || (status[2] != RTEMS_SUCCESSFUL) ||
532 (status[3] != RTEMS_SUCCESSFUL) || (status[4] != RTEMS_SUCCESSFUL) || (status[5] != RTEMS_SUCCESSFUL) )
526 (status[3] != RTEMS_SUCCESSFUL) || (status[4] != RTEMS_SUCCESSFUL) || (status[5] != RTEMS_SUCCESSFUL) )
533 {
527 {
534 ret = RTEMS_UNSATISFIED;
528 ret = RTEMS_UNSATISFIED;
@@ -556,15 +550,6 int suspend_science_tasks()
556 PRINTF1("in suspend_science_task *** AVF0 ERR %d\n", status)
550 PRINTF1("in suspend_science_task *** AVF0 ERR %d\n", status)
557 }
551 }
558
552
559 if (status == RTEMS_SUCCESSFUL) // suspend BPF0
560 {
561 status = rtems_task_suspend( Task_id[TASKID_BPF0] );
562 if (status != RTEMS_SUCCESSFUL)
563 {
564 PRINTF1("in suspend_science_task *** BPF0 ERR %d\n", status)
565 }
566 }
567
568 if (status == RTEMS_SUCCESSFUL) // suspend WFRM
553 if (status == RTEMS_SUCCESSFUL) // suspend WFRM
569 {
554 {
570 status = rtems_task_suspend( Task_id[TASKID_WFRM] );
555 status = rtems_task_suspend( Task_id[TASKID_WFRM] );
@@ -1016,15 +1016,19 void compute_acquisition_time( unsigned
1016 deltaT = ( (double ) (pa_lfr_pkt_nr) ) * BLK_NR_304 * 65536. / 4096. ;
1016 deltaT = ( (double ) (pa_lfr_pkt_nr) ) * BLK_NR_304 * 65536. / 4096. ;
1017 break;
1017 break;
1018
1018
1019 case SID_NORM_SWF_F2:
1020 deltaT = ( (double ) (pa_lfr_pkt_nr) ) * BLK_NR_304 * 65536. / 256. ;
1021 break;
1022
1019 case SID_SBM1_CWF_F1:
1023 case SID_SBM1_CWF_F1:
1020 deltaT = ( (double ) (pa_lfr_pkt_nr) ) * BLK_NR_CWF * 65536. / 4096. ;
1024 deltaT = ( (double ) (pa_lfr_pkt_nr) ) * BLK_NR_CWF * 65536. / 4096. ;
1021 break;
1025 break;
1022
1026
1023 case SID_NORM_SWF_F2:
1027 case SID_SBM2_CWF_F2:
1024 deltaT = ( (double ) (pa_lfr_pkt_nr) ) * BLK_NR_304 * 65536. / 256. ;
1028 deltaT = ( (double ) (pa_lfr_pkt_nr) ) * BLK_NR_CWF * 65536. / 256. ;
1025 break;
1029 break;
1026
1030
1027 case SID_SBM2_CWF_F2:
1031 case SID_BURST_CWF_F2:
1028 deltaT = ( (double ) (pa_lfr_pkt_nr) ) * BLK_NR_CWF * 65536. / 256. ;
1032 deltaT = ( (double ) (pa_lfr_pkt_nr) ) * BLK_NR_CWF * 65536. / 256. ;
1029 break;
1033 break;
1030
1034
@@ -1037,6 +1041,7 void compute_acquisition_time( unsigned
1037 break;
1041 break;
1038
1042
1039 default:
1043 default:
1044 PRINTF1("in compute_acquisition_time *** ERR unexpected sid %d", sid)
1040 deltaT = 0.;
1045 deltaT = 0.;
1041 break;
1046 break;
1042 }
1047 }
General Comments 0
You need to be logged in to leave comments. Login now