@@ -1,6 +1,6 | |||
|
1 | 1 | ############################################################################# |
|
2 | 2 | # Makefile for building: bin/fsw |
|
3 |
# Generated by qmake (2.01a) (Qt 4.8.5) on: T |
|
|
3 | # Generated by qmake (2.01a) (Qt 4.8.5) on: Tue Apr 15 07:45:50 2014 | |
|
4 | 4 | # Project: fsw-qt.pro |
|
5 | 5 | # Template: app |
|
6 | 6 | # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro |
@@ -13,7 +13,7 CXX = sparc-rtems-g++ | |||
|
13 | 13 | DEFINES = -DSW_VERSION_N1=1 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=6 -DPRINT_MESSAGES_ON_CONSOLE -DPRINT_TASK_STATISTICS |
|
14 | 14 | CFLAGS = -pipe -O3 -Wall $(DEFINES) |
|
15 | 15 | CXXFLAGS = -pipe -O3 -Wall $(DEFINES) |
|
16 |
INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header -I../ |
|
|
16 | INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header -I../src/basic_parameters | |
|
17 | 17 | LINK = sparc-rtems-g++ |
|
18 | 18 | LFLAGS = |
|
19 | 19 | LIBS = $(SUBLIBS) |
@@ -53,7 +53,7 SOURCES = ../src/wf_handler.c \ | |||
|
53 | 53 | ../src/tc_load_dump_parameters.c \ |
|
54 | 54 | ../src/tm_lfr_tc_exe.c \ |
|
55 | 55 | ../src/tc_acceptance.c \ |
|
56 |
../ |
|
|
56 | ../src/basic_parameters/basic_parameters.c | |
|
57 | 57 | OBJECTS = obj/wf_handler.o \ |
|
58 | 58 | obj/tc_handler.o \ |
|
59 | 59 | obj/fsw_processing.o \ |
@@ -240,8 +240,8 obj/tm_lfr_tc_exe.o: ../src/tm_lfr_tc_ex | |||
|
240 | 240 | obj/tc_acceptance.o: ../src/tc_acceptance.c |
|
241 | 241 | $(CC) -c $(CFLAGS) $(INCPATH) -o obj/tc_acceptance.o ../src/tc_acceptance.c |
|
242 | 242 | |
|
243 |
obj/basic_parameters.o: ../ |
|
|
244 |
$(CC) -c $(CFLAGS) $(INCPATH) -o obj/basic_parameters.o ../ |
|
|
243 | obj/basic_parameters.o: ../src/basic_parameters/basic_parameters.c ../src/basic_parameters/basic_parameters.h | |
|
244 | $(CC) -c $(CFLAGS) $(INCPATH) -o obj/basic_parameters.o ../src/basic_parameters/basic_parameters.c | |
|
245 | 245 | |
|
246 | 246 | ####### Install |
|
247 | 247 |
@@ -50,7 +50,7 TARGET = fsw | |||
|
50 | 50 | INCLUDEPATH += \ |
|
51 | 51 | ../src \ |
|
52 | 52 | ../header \ |
|
53 |
../ |
|
|
53 | ../src/basic_parameters | |
|
54 | 54 | |
|
55 | 55 | SOURCES += \ |
|
56 | 56 | ../src/wf_handler.c \ |
@@ -63,7 +63,7 SOURCES += \ | |||
|
63 | 63 | ../src/tc_load_dump_parameters.c \ |
|
64 | 64 | ../src/tm_lfr_tc_exe.c \ |
|
65 | 65 | ../src/tc_acceptance.c \ |
|
66 |
../ |
|
|
66 | ../src/basic_parameters/basic_parameters.c | |
|
67 | 67 | |
|
68 | 68 | |
|
69 | 69 | HEADERS += \ |
@@ -81,5 +81,5 HEADERS += \ | |||
|
81 | 81 | ../header/tm_lfr_tc_exe.h \ |
|
82 | 82 | ../header/tc_acceptance.h \ |
|
83 | 83 | ../header/fsw_params_nb_bytes.h \ |
|
84 |
../ |
|
|
84 | ../src/basic_parameters/basic_parameters.h | |
|
85 | 85 |
@@ -1,6 +1,6 | |||
|
1 | 1 | <?xml version="1.0" encoding="UTF-8"?> |
|
2 | 2 | <!DOCTYPE QtCreatorProject> |
|
3 |
<!-- Written by QtCreator 3.0.1, 2014-04-1 |
|
|
3 | <!-- Written by QtCreator 3.0.1, 2014-04-16T10:43:41. --> | |
|
4 | 4 | <qtcreator> |
|
5 | 5 | <data> |
|
6 | 6 | <variable>ProjectExplorer.Project.ActiveTarget</variable> |
@@ -26,6 +26,7 int start_all_tasks( void ); | |||
|
26 | 26 | rtems_status_code create_message_queues( void ); |
|
27 | 27 | rtems_status_code get_message_queue_id_send( rtems_id *queue_id ); |
|
28 | 28 | rtems_status_code get_message_queue_id_recv( rtems_id *queue_id ); |
|
29 | rtems_status_code get_message_queue_id_matr( rtems_id *queue_id ); | |
|
29 | 30 | // |
|
30 | 31 | int start_recv_send_tasks( void ); |
|
31 | 32 | // |
@@ -37,4 +37,6 void getTime( unsigned char *time); | |||
|
37 | 37 | unsigned long long int getTimeAsUnsignedLongLongInt( ); |
|
38 | 38 | void send_dumb_hk( void ); |
|
39 | 39 | |
|
40 | extern int sched_yield( void ); | |
|
41 | ||
|
40 | 42 | #endif // FSW_MISC_H_INCLUDED |
@@ -198,14 +198,17 typedef struct { | |||
|
198 | 198 | #define TASK_PRIORITY_STAT 200 |
|
199 | 199 | #define TASK_PRIORITY_DUMB 200 |
|
200 | 200 | |
|
201 |
#define |
|
|
202 |
#define |
|
|
203 | //#define ACTION_MSG_PKTS_MAX_SIZE (PACKET_LENGTH_HK + CCSDS_TC_TM_PACKET_OFFSET + CCSDS_PROTOCOLE_EXTRA_BYTES) | |
|
204 | #define ACTION_MSG_PKTS_MAX_SIZE 810 // 806 + 4 => TM_LFR_SCIENCE_BURST_BP2_F1 | |
|
201 | #define MSG_QUEUE_COUNT_RECV 10 | |
|
202 | #define MSG_QUEUE_COUNT_SEND 50 | |
|
203 | #define MSG_QUEUE_COUNT_MATR 10 | |
|
204 | //#define MSG_QUEUE_SIZE_SEND (PACKET_LENGTH_HK + CCSDS_TC_TM_PACKET_OFFSET + CCSDS_PROTOCOLE_EXTRA_BYTES) | |
|
205 | #define MSG_QUEUE_SIZE_SEND 810 // 806 + 4 => TM_LFR_SCIENCE_BURST_BP2_F1 | |
|
205 | 206 | #define ACTION_MSG_SPW_IOCTL_SEND_SIZE 24 // hlen *hdr dlen *data sent options |
|
207 | #define MSG_QUEUE_SIZE_MATR 20 // two pointers and one rtems_event + 2 integers | |
|
206 | 208 | |
|
207 | 209 | #define QUEUE_RECV 0 |
|
208 | 210 | #define QUEUE_SEND 1 |
|
211 | #define QUEUE_MATR 2 | |
|
209 | 212 | |
|
210 | 213 | //******* |
|
211 | 214 | // MACROS |
@@ -13,6 +13,7 | |||
|
13 | 13 | #define NB_RING_NODES_SM_F1 3 // AT LEAST 3 |
|
14 | 14 | #define NB_RING_NODES_SM_F2 3 // AT LEAST 3 |
|
15 | 15 | #define NB_RING_NODES_ASM_BURST_SBM_F0 10 // AT LEAST 3 |
|
16 | #define NB_RING_NODES_ASM_NORM_F0 10 // AT LEAST 3 | |
|
16 | 17 | // |
|
17 | 18 | #define NB_BINS_PER_ASM_F0 88 |
|
18 | 19 | #define NB_BINS_PER_PKT_ASM_F0 44 |
@@ -25,7 +25,7 typedef struct ring_node_asm | |||
|
25 | 25 | { |
|
26 | 26 | struct ring_node_asm *previous; |
|
27 | 27 | struct ring_node_asm *next; |
|
28 |
float |
|
|
28 | float matrix[ TOTAL_SIZE_SM ]; | |
|
29 | 29 | unsigned int status; |
|
30 | 30 | } ring_node_asm; |
|
31 | 31 | |
@@ -41,6 +41,15 typedef struct bp_packet_with_spare | |||
|
41 | 41 | unsigned char data[ 9 * 13 ]; // only for TM_LFR_SCIENCE_NORMAL_BP1_F0 and F1 |
|
42 | 42 | } bp_packet_with_spare; |
|
43 | 43 | |
|
44 | typedef struct asm_msg | |
|
45 | { | |
|
46 | ring_node_asm *norm_f0; | |
|
47 | ring_node_asm *burst_sbmf0; | |
|
48 | rtems_event_set event; | |
|
49 | unsigned int coarseTime; | |
|
50 | unsigned int fineTime; | |
|
51 | } asm_msg; | |
|
52 | ||
|
44 | 53 | extern nb_sm_t nb_sm; |
|
45 | 54 | extern nb_sm_before_bp_t nb_sm_before_bp; |
|
46 | 55 | |
@@ -71,7 +80,7 rtems_task matr_task( rtems_task_argumen | |||
|
71 | 80 | //****************** |
|
72 | 81 | // Spectral Matrices |
|
73 | 82 | void SM_init_rings( void ); |
|
74 | void ASM_init_ring( void ); | |
|
83 | void ASM_init_rings( void ); | |
|
75 | 84 | void SM_reset_current_ring_nodes( void ); |
|
76 | 85 | void ASM_reset_current_ring_node( void ); |
|
77 | 86 | void ASM_init_header( Header_TM_LFR_SCIENCE_ASM_t *header); |
@@ -106,4 +115,6 void BP_send(char *data, | |||
|
106 | 115 | void reset_spectral_matrix_regs( void ); |
|
107 | 116 | void set_time(unsigned char *time, unsigned char *timeInBuffer ); |
|
108 | 117 | |
|
118 | extern rtems_status_code get_message_queue_id_matr( rtems_id *queue_id ); | |
|
119 | ||
|
109 | 120 | #endif // FSW_PROCESSING_H_INCLUDED |
@@ -40,10 +40,10 int enter_mode( unsigned char mode , uns | |||
|
40 | 40 | int restart_science_tasks(unsigned char lfrRequestedMode ); |
|
41 | 41 | int suspend_science_tasks(); |
|
42 | 42 | void launch_waveform_picker(unsigned char mode , unsigned int transitionCoarseTime); |
|
43 |
void launch_spectral_matrix( |
|
|
43 | void launch_spectral_matrix( void ); | |
|
44 | void launch_spectral_matrix_simu( void ); | |
|
44 | 45 | void set_irq_on_new_ready_matrix(unsigned char value ); |
|
45 | 46 | void set_run_matrix_spectral( unsigned char value ); |
|
46 | void launch_spectral_matrix_simu( unsigned char mode ); | |
|
47 | 47 | |
|
48 | 48 | // other functions |
|
49 | 49 | void updateLFRCurrentMode(); |
@@ -35,7 +35,7 | |||
|
35 | 35 | #define CONFIGURE_MAXIMUM_DRIVERS 16 |
|
36 | 36 | #define CONFIGURE_MAXIMUM_PERIODS 5 |
|
37 | 37 | #define CONFIGURE_MAXIMUM_TIMERS 5 // STAT (1s), send SWF (0.3s), send CWF3 (1s) |
|
38 |
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES |
|
|
38 | #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 3 | |
|
39 | 39 | #ifdef PRINT_STACK_REPORT |
|
40 | 40 | #define CONFIGURE_STACK_CHECKER_ENABLED |
|
41 | 41 | #endif |
@@ -98,7 +98,7 rtems_task Init( rtems_task_argument ign | |||
|
98 | 98 | |
|
99 | 99 | init_waveform_rings(); // initialize the waveform rings |
|
100 | 100 | SM_init_rings(); // initialize spectral matrices rings |
|
101 |
ASM_init_ring(); |
|
|
101 | ASM_init_rings(); // initialize the average spectral matrix ring (just for burst, sbm1 and sbm2 asm @ f0 storage) | |
|
102 | 102 | |
|
103 | 103 | reset_wfp_burst_enable(); |
|
104 | 104 | reset_wfp_status(); |
@@ -268,6 +268,7 void create_names( void ) // create all | |||
|
268 | 268 | |
|
269 | 269 | misc_name[QUEUE_RECV] = rtems_build_name( 'Q', '_', 'R', 'V' ); |
|
270 | 270 | misc_name[QUEUE_SEND] = rtems_build_name( 'Q', '_', 'S', 'D' ); |
|
271 | misc_name[QUEUE_MATR] = rtems_build_name( 'Q', '_', 'M', 'R' ); | |
|
271 | 272 | } |
|
272 | 273 | |
|
273 | 274 | int create_all_tasks( void ) // create all tasks which run in the software |
@@ -350,7 +351,7 int create_all_tasks( void ) // create a | |||
|
350 | 351 | if (status == RTEMS_SUCCESSFUL) // MATR |
|
351 | 352 | { |
|
352 | 353 | status = rtems_task_create( |
|
353 | Task_name[TASKID_MATR], TASK_PRIORITY_MATR, RTEMS_MINIMUM_STACK_SIZE, | |
|
354 | Task_name[TASKID_MATR], TASK_PRIORITY_MATR, RTEMS_MINIMUM_STACK_SIZE * 2, | |
|
354 | 355 | RTEMS_DEFAULT_MODES, |
|
355 | 356 | RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_MATR] |
|
356 | 357 | ); |
@@ -589,32 +590,48 rtems_status_code create_message_queues( | |||
|
589 | 590 | { |
|
590 | 591 | rtems_status_code status_recv; |
|
591 | 592 | rtems_status_code status_send; |
|
593 | rtems_status_code status_matr; | |
|
592 | 594 | rtems_status_code ret; |
|
593 | 595 | rtems_id queue_id; |
|
594 | 596 | |
|
597 | //**************************************** | |
|
595 | 598 | // create the queue for handling valid TCs |
|
596 | 599 | status_recv = rtems_message_queue_create( misc_name[QUEUE_RECV], |
|
597 |
|
|
|
600 | MSG_QUEUE_COUNT_RECV, CCSDS_TC_PKT_MAX_SIZE, | |
|
598 | 601 | RTEMS_FIFO | RTEMS_LOCAL, &queue_id ); |
|
599 | 602 | if ( status_recv != RTEMS_SUCCESSFUL ) { |
|
600 | 603 | PRINTF1("in create_message_queues *** ERR creating QUEU queue, %d\n", status_recv) |
|
601 | 604 | } |
|
602 | 605 | |
|
606 | //************************************************ | |
|
603 | 607 | // create the queue for handling TM packet sending |
|
604 | 608 | status_send = rtems_message_queue_create( misc_name[QUEUE_SEND], |
|
605 |
|
|
|
609 | MSG_QUEUE_COUNT_SEND, MSG_QUEUE_SIZE_SEND, | |
|
606 | 610 | RTEMS_FIFO | RTEMS_LOCAL, &queue_id ); |
|
607 | 611 | if ( status_send != RTEMS_SUCCESSFUL ) { |
|
608 | 612 | PRINTF1("in create_message_queues *** ERR creating PKTS queue, %d\n", status_send) |
|
609 | 613 | } |
|
610 | 614 | |
|
615 | //************************************************************************ | |
|
616 | // create the queue for handling averaged spectral matrices for processing | |
|
617 | status_matr = rtems_message_queue_create( misc_name[QUEUE_MATR], | |
|
618 | MSG_QUEUE_COUNT_MATR, MSG_QUEUE_SIZE_MATR, | |
|
619 | RTEMS_FIFO | RTEMS_LOCAL, &queue_id ); | |
|
620 | if ( status_send != RTEMS_SUCCESSFUL ) { | |
|
621 | PRINTF1("in create_message_queues *** ERR creating MATR queue, %d\n", status_matr) | |
|
622 | } | |
|
623 | ||
|
611 | 624 | if ( status_recv != RTEMS_SUCCESSFUL ) |
|
612 | 625 | { |
|
613 | 626 | ret = status_recv; |
|
614 | 627 | } |
|
628 | else if( status_send != RTEMS_SUCCESSFUL ) | |
|
629 | { | |
|
630 | ret = status_send; | |
|
631 | } | |
|
615 | 632 | else |
|
616 | 633 | { |
|
617 |
ret = status_ |
|
|
634 | ret = status_matr; | |
|
618 | 635 | } |
|
619 | 636 | |
|
620 | 637 | return ret; |
@@ -643,3 +660,15 rtems_status_code get_message_queue_id_r | |||
|
643 | 660 | |
|
644 | 661 | return status; |
|
645 | 662 | } |
|
663 | ||
|
664 | rtems_status_code get_message_queue_id_matr( rtems_id *queue_id ) | |
|
665 | { | |
|
666 | rtems_status_code status; | |
|
667 | rtems_name queue_name; | |
|
668 | ||
|
669 | queue_name = rtems_build_name( 'Q', '_', 'M', 'R' ); | |
|
670 | ||
|
671 | status = rtems_message_queue_ident( queue_name, 0, queue_id ); | |
|
672 | ||
|
673 | return status; | |
|
674 | } |
@@ -22,25 +22,15 ring_node_sm *current_ring_node_sm_f1; | |||
|
22 | 22 | ring_node_sm *current_ring_node_sm_f2; |
|
23 | 23 | |
|
24 | 24 | ring_node_asm asm_ring_burst_sbm_f0[ NB_RING_NODES_ASM_BURST_SBM_F0 ]; |
|
25 | ring_node_asm asm_ring_norm_f0 [ NB_RING_NODES_ASM_BURST_SBM_F0 ]; | |
|
25 | 26 | ring_node_asm *current_ring_node_asm_burst_sbm_f0; |
|
26 |
ring_node_asm *ring_node_ |
|
|
27 | ring_node_asm *current_ring_node_asm_norm_f0; | |
|
27 | 28 | |
|
28 | //***** | |
|
29 | // NORM | |
|
30 | // F0 | |
|
31 | float asm_norm_f0 [ TIME_OFFSET + TOTAL_SIZE_SM ]; | |
|
32 | float asm_f0_reorganized [ TIME_OFFSET + TOTAL_SIZE_SM ]; | |
|
29 | float asm_norm_f0 [ TOTAL_SIZE_SM ]; | |
|
30 | float asm_f0_reorganized [ TOTAL_SIZE_SM ]; | |
|
33 | 31 | char asm_f0_char [ TIME_OFFSET_IN_BYTES + (TOTAL_SIZE_SM * 2) ]; |
|
34 |
float compressed_sm_norm_f0[ |
|
|
35 | ||
|
36 | //***** | |
|
37 | // SBM1 | |
|
38 | float asm_sbm_f0 [ TIME_OFFSET + TOTAL_SIZE_SM ]; | |
|
39 | float compressed_sm_sbm[ TIME_OFFSET + TOTAL_SIZE_COMPRESSED_ASM_SBM1 ]; | |
|
40 | ||
|
41 | unsigned char LFR_BP1_F0[ TIME_OFFSET_IN_BYTES + TOTAL_SIZE_NORM_BP1_F0 * 2 ]; | |
|
42 | unsigned char LFR_BP1_F1[ TIME_OFFSET_IN_BYTES + TOTAL_SIZE_NORM_BP1_F1 ]; | |
|
43 | unsigned char LFR_BP1_F2[ TIME_OFFSET_IN_BYTES + TOTAL_SIZE_NORM_BP1_F2 ]; | |
|
32 | float compressed_sm_norm_f0[ TOTAL_SIZE_COMPRESSED_ASM_F0 ]; | |
|
33 | float compressed_sm_sbm [ TOTAL_SIZE_COMPRESSED_ASM_SBM1 ]; | |
|
44 | 34 | |
|
45 | 35 | //*********************************************************** |
|
46 | 36 | // Interrupt Service Routine for spectral matrices processing |
@@ -87,44 +77,42 void reset_nb_sm_f0( unsigned char lfrMo | |||
|
87 | 77 | |
|
88 | 78 | rtems_isr spectral_matrices_isr( rtems_vector_number vector ) |
|
89 | 79 | { |
|
80 | ring_node_sm *previous_ring_node_sm_f0; | |
|
81 | ||
|
90 | 82 | // rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_8 ); |
|
91 | 83 | |
|
92 | // if ( (spectral_matrix_regs->status & 0x1) == 0x01) | |
|
93 | // { | |
|
94 | // current_ring_node_sm_f0 = current_ring_node_sm_f0->next; | |
|
95 | // spectral_matrix_regs->matrixF0_Address0 = current_ring_node_sm_f0->buffer_address; | |
|
96 | // spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffffe; // 1110 | |
|
97 | // nb_sm_f0 = nb_sm_f0 + 1; | |
|
98 | // } | |
|
99 | // else if ( (spectral_matrix_regs->status & 0x2) == 0x02) | |
|
100 |
|
|
|
101 | // current_ring_node_sm_f0 = current_ring_node_sm_f0->next; | |
|
102 | // spectral_matrix_regs->matrixFO_Address1 = current_ring_node_sm_f0->buffer_address; | |
|
103 | // spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffffd; // 1101 | |
|
104 | // nb_sm_f0 = nb_sm_f0 + 1; | |
|
105 | // } | |
|
84 | previous_ring_node_sm_f0 = current_ring_node_sm_f0; | |
|
85 | ||
|
86 | if ( (spectral_matrix_regs->status & 0x2) == 0x02) // check ready matrix bit f0_1 | |
|
87 | { | |
|
88 | current_ring_node_sm_f0 = current_ring_node_sm_f0->next; | |
|
89 | spectral_matrix_regs->matrixF0_Address0 = current_ring_node_sm_f0->buffer_address; | |
|
90 | spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffffd; // 1101 | |
|
91 | nb_sm.f0 = nb_sm.f0 + 1; | |
|
92 | } | |
|
106 | 93 | |
|
107 | // if ( (spectral_matrix_regs->status & 0x30) != 0x00) | |
|
108 | // { | |
|
109 | // rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_8 ); | |
|
110 | // spectral_matrix_regs->status = spectral_matrix_regs->status & 0xffffffcf; // 1100 1111 | |
|
111 | // } | |
|
112 | ||
|
113 | // spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffff3; // 0011 | |
|
94 | //************************ | |
|
95 | // reset status error bits | |
|
96 | if ( (spectral_matrix_regs->status & 0x30) != 0x00) | |
|
97 | { | |
|
98 | rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_8 ); | |
|
99 | spectral_matrix_regs->status = spectral_matrix_regs->status & 0xffffffcf; // 1100 1111 | |
|
100 | } | |
|
114 | 101 | |
|
115 | // if (nb_sm_f0 == (NB_SM_BEFORE_AVF0-1) ) | |
|
116 | // { | |
|
117 | // ring_node_for_averaging_sm_f0 = current_ring_node_sm_f0; | |
|
118 | // if (rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) | |
|
119 | // { | |
|
120 | // rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 ); | |
|
121 | // } | |
|
122 | // nb_sm_f0 = 0; | |
|
123 | // } | |
|
124 | // else | |
|
125 | // { | |
|
126 |
|
|
|
127 |
|
|
|
102 | //************************************** | |
|
103 | // reset ready matrix bits for f0_0, f1 and f2 | |
|
104 | spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffff2; // 0010 | |
|
105 | ||
|
106 | if (nb_sm.f0 == NB_SM_BEFORE_AVF0) | |
|
107 | { | |
|
108 | ring_node_for_averaging_sm_f0 = previous_ring_node_sm_f0; | |
|
109 | if (rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) | |
|
110 | { | |
|
111 | rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 ); | |
|
112 | } | |
|
113 | nb_sm.f0 = 0; | |
|
114 | } | |
|
115 | ||
|
128 | 116 | } |
|
129 | 117 | |
|
130 | 118 | rtems_isr spectral_matrices_isr_simu( rtems_vector_number vector ) |
@@ -163,15 +151,21 rtems_task avf0_task( rtems_task_argumen | |||
|
163 | 151 | int i; |
|
164 | 152 | |
|
165 | 153 | rtems_event_set event_out; |
|
166 | rtems_event_set event_for_matr; | |
|
167 | 154 | rtems_status_code status; |
|
155 | rtems_id queue_id_matr; | |
|
156 | asm_msg msgForMATR; | |
|
168 | 157 | ring_node_sm *ring_node_tab[8]; |
|
169 | unsigned long long int localTime; | |
|
170 | 158 | |
|
171 | 159 | reset_nb_sm_f0( lfrRequestedMode ); // reset the sm counters that drive the BP and ASM computations / transmissions |
|
172 | 160 | |
|
173 | 161 | BOOT_PRINTF1("in AVFO *** lfrRequestedMode = %d\n", lfrRequestedMode) |
|
174 | 162 | |
|
163 | status = get_message_queue_id_matr( &queue_id_matr ); | |
|
164 | if (status != RTEMS_SUCCESSFUL) | |
|
165 | { | |
|
166 | PRINTF1("in MATR *** ERR get_message_queue_id_matr %d\n", status) | |
|
167 | } | |
|
168 | ||
|
175 | 169 | while(1){ |
|
176 | 170 | rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0 |
|
177 | 171 | ring_node_tab[NB_SM_BEFORE_AVF0-1] = ring_node_for_averaging_sm_f0; |
@@ -181,14 +175,11 rtems_task avf0_task( rtems_task_argumen | |||
|
181 | 175 | ring_node_tab[NB_SM_BEFORE_AVF0-i] = ring_node_for_averaging_sm_f0; |
|
182 | 176 | } |
|
183 | 177 | |
|
184 | localTime = getTimeAsUnsignedLongLongInt( ); | |
|
185 | ||
|
186 | 178 | // compute the average and store it in the averaged_sm_f1 buffer |
|
187 |
SM_average( |
|
|
188 |
|
|
|
189 | nb_sm.norm_bp1_f0, nb_sm.sbm_bp1_f0 ); | |
|
190 | ||
|
191 | localTime = getTimeAsUnsignedLongLongInt( ) - localTime; | |
|
179 | SM_average( current_ring_node_asm_norm_f0->matrix, | |
|
180 | current_ring_node_asm_burst_sbm_f0->matrix, | |
|
181 | ring_node_tab, | |
|
182 | nb_sm.norm_bp1_f0, nb_sm.sbm_bp1_f0 ); | |
|
192 | 183 | |
|
193 | 184 | // update nb_average |
|
194 | 185 | nb_sm.norm_bp1_f0 = nb_sm.norm_bp1_f0 + NB_SM_BEFORE_AVF0; |
@@ -197,21 +188,23 rtems_task avf0_task( rtems_task_argumen | |||
|
197 | 188 | nb_sm.sbm_bp1_f0 = nb_sm.sbm_bp1_f0 + NB_SM_BEFORE_AVF0; |
|
198 | 189 | nb_sm.sbm_bp2_f0 = nb_sm.sbm_bp2_f0 + NB_SM_BEFORE_AVF0; |
|
199 | 190 | |
|
200 |
//**************************************** |
|
|
201 |
// |
|
|
202 | event_for_matr = 0x00; | |
|
191 | //**************************************** | |
|
192 | // initialize the mesage for the MATR task | |
|
193 | msgForMATR.event = 0x00; // this composite event will be sent to the MATR task | |
|
194 | msgForMATR.burst_sbmf0 = current_ring_node_asm_burst_sbm_f0; | |
|
195 | msgForMATR.norm_f0 = current_ring_node_asm_norm_f0; | |
|
196 | msgForMATR.coarseTime = ( (unsigned int *) (ring_node_tab[0]->buffer_address) )[0]; | |
|
197 | msgForMATR.fineTime = ( (unsigned int *) (ring_node_tab[0]->buffer_address) )[1]; | |
|
203 | 198 | |
|
204 | 199 | if (nb_sm.sbm_bp1_f0 == nb_sm_before_bp.burst_sbm_bp1_f0) |
|
205 | 200 | { |
|
206 | 201 | nb_sm.sbm_bp1_f0 = 0; |
|
207 | // the ring node is ready for BP calculations | |
|
208 | ring_node_for_processing_asm_burst_sbm_f0 = current_ring_node_asm_burst_sbm_f0; | |
|
209 | 202 | // set another ring for the ASM storage |
|
210 | 203 | current_ring_node_asm_burst_sbm_f0 = current_ring_node_asm_burst_sbm_f0->next; |
|
211 | 204 | if ( (lfrCurrentMode == LFR_MODE_BURST) |
|
212 | 205 | || (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) ) |
|
213 | 206 | { |
|
214 |
event |
|
|
207 | msgForMATR.event = msgForMATR.event | RTEMS_EVENT_BURST_SBM_BP1_F0; | |
|
215 | 208 | } |
|
216 | 209 | } |
|
217 | 210 | |
@@ -221,16 +214,18 rtems_task avf0_task( rtems_task_argumen | |||
|
221 | 214 | if ( (lfrCurrentMode == LFR_MODE_BURST) |
|
222 | 215 | || (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) ) |
|
223 | 216 | { |
|
224 |
event |
|
|
217 | msgForMATR.event = msgForMATR.event | RTEMS_EVENT_BURST_SBM_BP2_F0; | |
|
225 | 218 | } |
|
226 | 219 | } |
|
227 | 220 | |
|
228 | 221 | if (nb_sm.norm_bp1_f0 == nb_sm_before_bp.norm_bp1_f0) |
|
229 | 222 | { |
|
230 | 223 | nb_sm.norm_bp1_f0 = 0; |
|
224 | // set another ring for the ASM storage | |
|
225 | current_ring_node_asm_norm_f0 = current_ring_node_asm_norm_f0->next; | |
|
231 | 226 | if (lfrCurrentMode == LFR_MODE_NORMAL) |
|
232 | 227 | { |
|
233 |
event |
|
|
228 | msgForMATR.event = msgForMATR.event | RTEMS_EVENT_NORM_BP1_F0; | |
|
234 | 229 | } |
|
235 | 230 | } |
|
236 | 231 | |
@@ -240,7 +235,7 rtems_task avf0_task( rtems_task_argumen | |||
|
240 | 235 | if ( (lfrCurrentMode == LFR_MODE_NORMAL) |
|
241 | 236 | || (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) ) |
|
242 | 237 | { |
|
243 |
event |
|
|
238 | msgForMATR.event = msgForMATR.event | RTEMS_EVENT_NORM_BP2_F0; | |
|
244 | 239 | } |
|
245 | 240 | } |
|
246 | 241 | |
@@ -251,30 +246,39 rtems_task avf0_task( rtems_task_argumen | |||
|
251 | 246 | || (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) ) |
|
252 | 247 | { |
|
253 | 248 | // PRINTF1("%lld\n", localTime) |
|
254 |
event |
|
|
249 | msgForMATR.event = msgForMATR.event | RTEMS_EVENT_NORM_ASM_F0; | |
|
255 | 250 | } |
|
256 | 251 | } |
|
257 | 252 | |
|
258 |
//************************* |
|
|
259 |
// send the |
|
|
260 | status = rtems_event_send( Task_id[TASKID_MATR], event_for_matr ); | |
|
253 | //************************* | |
|
254 | // send the message to MATR | |
|
255 | if (msgForMATR.event != 0x00) | |
|
256 | { | |
|
257 | status = rtems_message_queue_send( queue_id_matr, (char *) & msgForMATR, MSG_QUEUE_SIZE_MATR); | |
|
258 | } | |
|
259 | ||
|
261 | 260 | if (status != RTEMS_SUCCESSFUL) { |
|
262 |
printf("in AVF0 *** Error sending |
|
|
261 | printf("in AVF0 *** Error sending message to MATR, code %d\n", status); | |
|
263 | 262 | } |
|
264 | 263 | } |
|
265 | 264 | } |
|
266 | 265 | |
|
267 | 266 | rtems_task matr_task( rtems_task_argument lfrRequestedMode ) |
|
268 | 267 | { |
|
268 | char incomingData[MSG_QUEUE_SIZE_SEND]; // incoming data buffer | |
|
269 | size_t size; // size of the incoming TC packet | |
|
270 | asm_msg *incomingMsg; | |
|
271 | // | |
|
269 | 272 | spw_ioctl_pkt_send spw_ioctl_send_ASM; |
|
270 | rtems_event_set event_out; | |
|
271 | 273 | rtems_status_code status; |
|
272 | 274 | rtems_id queue_id; |
|
275 | rtems_id queue_id_matr; | |
|
273 | 276 | Header_TM_LFR_SCIENCE_ASM_t headerASM; |
|
274 | 277 | bp_packet_with_spare current_node_norm_bp1_f0; |
|
275 | 278 | bp_packet current_node_norm_bp2_f0; |
|
276 | 279 | bp_packet current_node_sbm_bp1_f0; |
|
277 | 280 | bp_packet current_node_sbm_bp2_f0; |
|
281 | ||
|
278 | 282 | unsigned long long int localTime; |
|
279 | 283 | |
|
280 | 284 | ASM_init_header( &headerASM ); |
@@ -328,41 +332,48 rtems_task matr_task( rtems_task_argumen | |||
|
328 | 332 | { |
|
329 | 333 | PRINTF1("in MATR *** ERR get_message_queue_id_send %d\n", status) |
|
330 | 334 | } |
|
335 | status = get_message_queue_id_matr( &queue_id_matr); | |
|
336 | if (status != RTEMS_SUCCESSFUL) | |
|
337 | { | |
|
338 | PRINTF1("in MATR *** ERR get_message_queue_id_matr %d\n", status) | |
|
339 | } | |
|
331 | 340 | |
|
332 | 341 | BOOT_PRINTF1("in MATR *** lfrRequestedMode = %d\n", lfrRequestedMode) |
|
333 | 342 | |
|
334 | 343 | while(1){ |
|
335 | rtems_event_receive( RTEMS_EVENT_NORM_BP1_F0 | RTEMS_EVENT_NORM_BP2_F0 | RTEMS_EVENT_NORM_ASM_F0 | |
|
336 | | RTEMS_EVENT_BURST_SBM_BP1_F0 | RTEMS_EVENT_BURST_SBM_BP2_F0, | |
|
337 | RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out); | |
|
344 | status = rtems_message_queue_receive( queue_id_matr, incomingData, &size, //************************************ | |
|
345 | RTEMS_WAIT, RTEMS_NO_TIMEOUT ); // wait for a message coming from AVF0 | |
|
346 | ||
|
347 | incomingMsg = (asm_msg*) incomingData; | |
|
348 | ||
|
338 | 349 | localTime = getTimeAsUnsignedLongLongInt( ); |
|
339 | 350 | //**************** |
|
340 | 351 | //**************** |
|
341 | 352 | // BURST SBM1 SBM2 |
|
342 | 353 | //**************** |
|
343 | 354 | //**************** |
|
344 |
if ( |
|
|
355 | if (incomingMsg->event & RTEMS_EVENT_BURST_SBM_BP1_F0 ) | |
|
345 | 356 | { |
|
346 | 357 | // 1) compress the matrix for Basic Parameters calculation |
|
347 |
ASM_compress_reorganize_and_divide( |
|
|
358 | ASM_compress_reorganize_and_divide( incomingMsg->burst_sbmf0->matrix, compressed_sm_sbm, | |
|
348 | 359 | nb_sm_before_bp.burst_sbm_bp1_f0, |
|
349 | 360 | NB_BINS_COMPRESSED_SM_SBM_F0, NB_BINS_TO_AVERAGE_ASM_SBM_F0, |
|
350 | 361 | ASM_F0_INDICE_START); |
|
351 | 362 | // 2) compute the BP1 set |
|
352 | 363 | |
|
353 | 364 | // 3) send the BP1 set |
|
354 |
set_time( current_node_sbm_bp1_f0.header.time, (unsigned char *) & |
|
|
355 |
set_time( current_node_sbm_bp1_f0.header.acquisitionTime, (unsigned char *) & |
|
|
365 | set_time( current_node_sbm_bp1_f0.header.time, (unsigned char *) &incomingMsg->coarseTime ); | |
|
366 | set_time( current_node_sbm_bp1_f0.header.acquisitionTime, (unsigned char *) &incomingMsg->fineTime ); | |
|
356 | 367 | BP_send( (char *) ¤t_node_sbm_bp1_f0.header, queue_id, |
|
357 | 368 | PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP1_F0 + PACKET_LENGTH_DELTA); |
|
358 | 369 | // 4) compute the BP2 set if needed |
|
359 |
if ( event |
|
|
370 | if ( incomingMsg->event & RTEMS_EVENT_BURST_SBM_BP2_F0 ) | |
|
360 | 371 | { |
|
361 | 372 | // 1) compute the BP2 set |
|
362 | 373 | |
|
363 | 374 | // 2) send the BP2 set |
|
364 |
set_time( current_node_sbm_bp2_f0.header.time, (unsigned char *) & |
|
|
365 |
set_time( current_node_sbm_bp2_f0.header.acquisitionTime, (unsigned char *) & |
|
|
375 | set_time( current_node_sbm_bp2_f0.header.time, (unsigned char *) &incomingMsg->coarseTime ); | |
|
376 | set_time( current_node_sbm_bp2_f0.header.acquisitionTime, (unsigned char *) &incomingMsg->fineTime ); | |
|
366 | 377 | BP_send( (char *) ¤t_node_sbm_bp2_f0.header, queue_id, |
|
367 | 378 | PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP2_F0 + PACKET_LENGTH_DELTA); |
|
368 | 379 | } |
@@ -373,42 +384,42 rtems_task matr_task( rtems_task_argumen | |||
|
373 | 384 | // NORM |
|
374 | 385 | //***** |
|
375 | 386 | //***** |
|
376 |
if (event |
|
|
387 | if (incomingMsg->event & RTEMS_EVENT_NORM_BP1_F0) | |
|
377 | 388 | { |
|
378 | 389 | // 1) compress the matrix for Basic Parameters calculation |
|
379 |
ASM_compress_reorganize_and_divide( |
|
|
390 | ASM_compress_reorganize_and_divide( incomingMsg->norm_f0->matrix, compressed_sm_norm_f0, | |
|
380 | 391 | nb_sm_before_bp.norm_bp1_f0, |
|
381 | 392 | NB_BINS_COMPRESSED_SM_F0, NB_BINS_TO_AVERAGE_ASM_F0, |
|
382 | 393 | ASM_F0_INDICE_START ); |
|
383 | 394 | // 2) compute the BP1 set |
|
384 | 395 | |
|
385 | 396 | // 3) send the BP1 set |
|
386 |
set_time( current_node_norm_bp1_f0.header.time, (unsigned char *) & |
|
|
387 |
set_time( current_node_norm_bp1_f0.header.acquisitionTime, (unsigned char *) & |
|
|
397 | set_time( current_node_norm_bp1_f0.header.time, (unsigned char *) &incomingMsg->coarseTime ); | |
|
398 | set_time( current_node_norm_bp1_f0.header.acquisitionTime, (unsigned char *) &incomingMsg->fineTime ); | |
|
388 | 399 | BP_send( (char *) ¤t_node_norm_bp1_f0.header, queue_id, |
|
389 | 400 | PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP1_F0 + PACKET_LENGTH_DELTA); |
|
390 |
if (event |
|
|
401 | if (incomingMsg->event & RTEMS_EVENT_NORM_BP2_F0) | |
|
391 | 402 | { |
|
392 | 403 | // 1) compute the BP2 set |
|
393 | 404 | |
|
394 | 405 | // 2) send the BP2 set |
|
395 |
set_time( current_node_norm_bp2_f0.header.time, (unsigned char *) & |
|
|
396 |
set_time( current_node_norm_bp2_f0.header.acquisitionTime, (unsigned char *) & |
|
|
406 | set_time( current_node_norm_bp2_f0.header.time, (unsigned char *) &incomingMsg->coarseTime ); | |
|
407 | set_time( current_node_norm_bp2_f0.header.acquisitionTime, (unsigned char *) &incomingMsg->fineTime ); | |
|
397 | 408 | BP_send( (char *) ¤t_node_norm_bp2_f0.header, queue_id, |
|
398 | 409 | PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP2_F0 + PACKET_LENGTH_DELTA); |
|
399 | 410 | } |
|
400 | 411 | } |
|
401 | 412 | |
|
402 |
if (event |
|
|
413 | if (incomingMsg->event & RTEMS_EVENT_NORM_ASM_F0) | |
|
403 | 414 | { |
|
404 | 415 | // 1) reorganize the ASM and divide |
|
405 |
ASM_reorganize_and_divide( |
|
|
416 | ASM_reorganize_and_divide( incomingMsg->norm_f0->matrix, asm_f0_reorganized, NB_SM_BEFORE_NORM_BP1_F0 ); | |
|
406 | 417 | // 2) convert the float array in a char array |
|
407 | 418 | ASM_convert( asm_f0_reorganized, asm_f0_char); |
|
408 | 419 | // 3) send the spectral matrix packets |
|
420 | set_time( headerASM.time , (unsigned char *) &incomingMsg->coarseTime ); | |
|
421 | set_time( headerASM.acquisitionTime, (unsigned char *) &incomingMsg->coarseTime ); | |
|
409 | 422 | ASM_send( &headerASM, asm_f0_char, SID_NORM_ASM_F0, &spw_ioctl_send_ASM, queue_id); |
|
410 | // localTime = getTimeAsUnsignedLongLongInt( ) - localTime; | |
|
411 | // PRINTF1("in MATR *** %lld\n", localTime) | |
|
412 | 423 | } |
|
413 | 424 | |
|
414 | 425 | } |
@@ -486,10 +497,12 void SM_init_rings( void ) | |||
|
486 | 497 | DEBUG_PRINTF1("spectral_matrix_regs->matrixF0_Address0 @%x\n", spectral_matrix_regs->matrixF0_Address0) |
|
487 | 498 | } |
|
488 | 499 | |
|
489 | void ASM_init_ring( void ) | |
|
500 | void ASM_init_rings( void ) | |
|
490 | 501 | { |
|
491 | 502 | unsigned char i; |
|
492 | 503 | |
|
504 | //************* | |
|
505 | // BURST_SBM_F0 | |
|
493 | 506 | asm_ring_burst_sbm_f0[0].next = (ring_node_asm*) &asm_ring_burst_sbm_f0[1]; |
|
494 | 507 | asm_ring_burst_sbm_f0[0].previous = (ring_node_asm*) &asm_ring_burst_sbm_f0[NB_RING_NODES_ASM_BURST_SBM_F0-1]; |
|
495 | 508 | |
@@ -503,6 +516,22 void ASM_init_ring( void ) | |||
|
503 | 516 | asm_ring_burst_sbm_f0[i].next = (ring_node_asm*) &asm_ring_burst_sbm_f0[i+1]; |
|
504 | 517 | asm_ring_burst_sbm_f0[i].previous = (ring_node_asm*) &asm_ring_burst_sbm_f0[i-1]; |
|
505 | 518 | } |
|
519 | ||
|
520 | //************* | |
|
521 | // NORM_F0 | |
|
522 | asm_ring_norm_f0[0].next = (ring_node_asm*) &asm_ring_norm_f0[1]; | |
|
523 | asm_ring_norm_f0[0].previous = (ring_node_asm*) &asm_ring_norm_f0[NB_RING_NODES_ASM_BURST_SBM_F0-1]; | |
|
524 | ||
|
525 | asm_ring_norm_f0[NB_RING_NODES_ASM_NORM_F0-1].next | |
|
526 | = (ring_node_asm*) &asm_ring_norm_f0[0]; | |
|
527 | asm_ring_norm_f0[NB_RING_NODES_ASM_NORM_F0-1].previous | |
|
528 | = (ring_node_asm*) &asm_ring_norm_f0[NB_RING_NODES_ASM_NORM_F0-2]; | |
|
529 | ||
|
530 | for(i=1; i<NB_RING_NODES_ASM_NORM_F0-1; i++) | |
|
531 | { | |
|
532 | asm_ring_norm_f0[i].next = (ring_node_asm*) &asm_ring_norm_f0[i+1]; | |
|
533 | asm_ring_norm_f0[i].previous = (ring_node_asm*) &asm_ring_norm_f0[i-1]; | |
|
534 | } | |
|
506 | 535 | } |
|
507 | 536 | |
|
508 | 537 | void SM_reset_current_ring_nodes( void ) |
@@ -516,8 +545,8 void SM_reset_current_ring_nodes( void ) | |||
|
516 | 545 | |
|
517 | 546 | void ASM_reset_current_ring_node( void ) |
|
518 | 547 | { |
|
519 |
current_ring_node_asm_ |
|
|
520 |
ring_node |
|
|
548 | current_ring_node_asm_norm_f0 = asm_ring_norm_f0; | |
|
549 | current_ring_node_asm_burst_sbm_f0 = asm_ring_burst_sbm_f0; | |
|
521 | 550 | } |
|
522 | 551 | |
|
523 | 552 | void ASM_init_header( Header_TM_LFR_SCIENCE_ASM_t *header) |
@@ -558,7 +587,6 void SM_average( float *averaged_spec_ma | |||
|
558 | 587 | { |
|
559 | 588 | float sum; |
|
560 | 589 | unsigned int i; |
|
561 | unsigned char *ptr; | |
|
562 | 590 | |
|
563 | 591 | for(i=0; i<TOTAL_SIZE_SM; i++) |
|
564 | 592 | { |
@@ -573,62 +601,45 void SM_average( float *averaged_spec_ma | |||
|
573 | 601 | |
|
574 | 602 | if ( (nbAverageNormF0 == 0) && (nbAverageSBM1F0 == 0) ) |
|
575 | 603 | { |
|
576 |
averaged_spec_mat_f0[ |
|
|
577 |
averaged_spec_mat_f1[ |
|
|
604 | averaged_spec_mat_f0[ i ] = sum; | |
|
605 | averaged_spec_mat_f1[ i ] = sum; | |
|
578 | 606 | } |
|
579 | 607 | else if ( (nbAverageNormF0 != 0) && (nbAverageSBM1F0 != 0) ) |
|
580 | 608 | { |
|
581 |
averaged_spec_mat_f0[ |
|
|
582 |
averaged_spec_mat_f1[ |
|
|
609 | averaged_spec_mat_f0[ i ] = ( averaged_spec_mat_f0[ i ] + sum ); | |
|
610 | averaged_spec_mat_f1[ i ] = ( averaged_spec_mat_f1[ i ] + sum ); | |
|
583 | 611 | } |
|
584 | 612 | else if ( (nbAverageNormF0 != 0) && (nbAverageSBM1F0 == 0) ) |
|
585 | 613 | { |
|
586 |
averaged_spec_mat_f0[ |
|
|
587 |
averaged_spec_mat_f1[ |
|
|
614 | averaged_spec_mat_f0[ i ] = ( averaged_spec_mat_f0[ i ] + sum ); | |
|
615 | averaged_spec_mat_f1[ i ] = sum; | |
|
588 | 616 | } |
|
589 | 617 | else |
|
590 | 618 | { |
|
591 | 619 | PRINTF2("ERR *** in SM_average *** unexpected parameters %d %d\n", nbAverageNormF0, nbAverageSBM1F0) |
|
592 | 620 | } |
|
593 | 621 | } |
|
594 | if ( (nbAverageNormF0 == 0) && (nbAverageSBM1F0 == 0) ) | |
|
595 | { | |
|
596 | ptr = (unsigned char *) averaged_spec_mat_f0; | |
|
597 | ptr[0] = (unsigned char) (time_management_regs->coarse_time >> 24); | |
|
598 | ptr[1] = (unsigned char) (time_management_regs->coarse_time >> 16); | |
|
599 | ptr[2] = (unsigned char) (time_management_regs->coarse_time >> 8 ); | |
|
600 | ptr[3] = (unsigned char) (time_management_regs->coarse_time ); | |
|
601 | ptr[4] = (unsigned char) (time_management_regs->fine_time >> 24); | |
|
602 | ptr[5] = (unsigned char) (time_management_regs->fine_time >> 16); | |
|
603 | ptr[6] = (unsigned char) (time_management_regs->fine_time >> 8 ); | |
|
604 | ptr[7] = (unsigned char) (time_management_regs->fine_time ); | |
|
605 | ptr = (unsigned char *) averaged_spec_mat_f1; | |
|
606 | ptr[0] = (unsigned char) (time_management_regs->coarse_time >> 24); | |
|
607 | ptr[1] = (unsigned char) (time_management_regs->coarse_time >> 16); | |
|
608 | ptr[2] = (unsigned char) (time_management_regs->coarse_time >> 8 ); | |
|
609 | ptr[3] = (unsigned char) (time_management_regs->coarse_time ); | |
|
610 | ptr[4] = (unsigned char) (time_management_regs->fine_time >> 24); | |
|
611 | ptr[5] = (unsigned char) (time_management_regs->fine_time >> 16); | |
|
612 | ptr[6] = (unsigned char) (time_management_regs->fine_time >> 8 ); | |
|
613 | ptr[7] = (unsigned char) (time_management_regs->fine_time ); | |
|
614 | } | |
|
615 | 622 | } |
|
616 | 623 | |
|
617 | 624 | void ASM_reorganize_and_divide( float *averaged_spec_mat, float *averaged_spec_mat_reorganized, float divider ) |
|
618 | 625 | { |
|
619 | 626 | int frequencyBin; |
|
620 | 627 | int asmComponent; |
|
621 | ||
|
622 | // copy the time information | |
|
623 | averaged_spec_mat_reorganized[ 0 ] = averaged_spec_mat[ 0 ]; | |
|
624 | averaged_spec_mat_reorganized[ 1 ] = averaged_spec_mat[ 1 ]; | |
|
628 | unsigned int offsetAveragedSpecMatReorganized; | |
|
629 | unsigned int offsetAveragedSpecMat; | |
|
625 | 630 | |
|
626 | 631 | for (asmComponent = 0; asmComponent < NB_VALUES_PER_SM; asmComponent++) |
|
627 | 632 | { |
|
628 | 633 | for( frequencyBin = 0; frequencyBin < NB_BINS_PER_SM; frequencyBin++ ) |
|
629 | 634 | { |
|
630 | averaged_spec_mat_reorganized[ TIME_OFFSET + frequencyBin * NB_VALUES_PER_SM + asmComponent ] = | |
|
631 | averaged_spec_mat[ TIME_OFFSET + asmComponent * NB_BINS_PER_SM + frequencyBin ] / divider; | |
|
635 | offsetAveragedSpecMatReorganized = | |
|
636 | frequencyBin * NB_VALUES_PER_SM | |
|
637 | + asmComponent; | |
|
638 | offsetAveragedSpecMat = | |
|
639 | asmComponent * NB_BINS_PER_SM | |
|
640 | + frequencyBin; | |
|
641 | averaged_spec_mat_reorganized[offsetAveragedSpecMatReorganized ] = | |
|
642 | averaged_spec_mat[ offsetAveragedSpecMat ] / divider; | |
|
632 | 643 | } |
|
633 | 644 | } |
|
634 | 645 | } |
@@ -642,20 +653,16 void ASM_compress_reorganize_and_divide( | |||
|
642 | 653 | int offsetCompressed; |
|
643 | 654 | int k; |
|
644 | 655 | |
|
645 | // copy the time information | |
|
646 | compressed_spec_mat[ 0 ] = averaged_spec_mat[ 0 ]; | |
|
647 | compressed_spec_mat[ 1 ] = averaged_spec_mat[ 1 ]; | |
|
648 | ||
|
649 | 656 | // build data |
|
650 | 657 | for (asmComponent = 0; asmComponent < NB_VALUES_PER_SM; asmComponent++) |
|
651 | 658 | { |
|
652 | 659 | for( frequencyBin = 0; frequencyBin < nbBinsCompressedMatrix; frequencyBin++ ) |
|
653 | 660 | { |
|
654 |
offsetCompressed = |
|
|
655 |
|
|
|
661 | offsetCompressed = // NO TIME OFFSET | |
|
662 | frequencyBin * NB_VALUES_PER_SM | |
|
656 | 663 | + asmComponent; |
|
657 |
offsetASM = |
|
|
658 |
|
|
|
664 | offsetASM = // NO TIME OFFSET | |
|
665 | asmComponent * NB_BINS_PER_SM | |
|
659 | 666 | + ASMIndexStart |
|
660 | 667 | + frequencyBin * nbBinsToAverage; |
|
661 | 668 | compressed_spec_mat[ offsetCompressed ] = 0; |
@@ -671,28 +678,25 void ASM_compress_reorganize_and_divide( | |||
|
671 | 678 | |
|
672 | 679 | void ASM_convert( volatile float *input_matrix, char *output_matrix) |
|
673 | 680 | { |
|
674 | unsigned int i; | |
|
675 | 681 | unsigned int frequencyBin; |
|
676 | 682 | unsigned int asmComponent; |
|
677 | 683 | char * pt_char_input; |
|
678 | 684 | char * pt_char_output; |
|
685 | unsigned int offsetInput; | |
|
686 | unsigned int offsetOutput; | |
|
679 | 687 | |
|
680 | 688 | pt_char_input = (char*) &input_matrix; |
|
681 | 689 | pt_char_output = (char*) &output_matrix; |
|
682 | 690 | |
|
683 | // copy the time information | |
|
684 | for (i=0; i<TIME_OFFSET_IN_BYTES; i++) | |
|
685 | { | |
|
686 | pt_char_output[ i ] = pt_char_output[ i ]; | |
|
687 | } | |
|
688 | ||
|
689 | 691 | // convert all other data |
|
690 | 692 | for( frequencyBin=0; frequencyBin<NB_BINS_PER_SM; frequencyBin++) |
|
691 | 693 | { |
|
692 | 694 | for ( asmComponent=0; asmComponent<NB_VALUES_PER_SM; asmComponent++) |
|
693 | 695 | { |
|
694 |
|
|
|
695 |
|
|
|
696 | offsetInput = (frequencyBin*NB_VALUES_PER_SM) + asmComponent ; | |
|
697 | offsetOutput = 2 * ( (frequencyBin*NB_VALUES_PER_SM) + asmComponent ) ; | |
|
698 | pt_char_input = (char*) &input_matrix [ offsetInput ]; | |
|
699 | pt_char_output = (char*) &output_matrix[ offsetOutput ]; | |
|
696 | 700 | pt_char_output[0] = pt_char_input[0]; // bits 31 downto 24 of the float |
|
697 | 701 | pt_char_output[1] = pt_char_input[1]; // bits 23 downto 16 of the float |
|
698 | 702 | } |
@@ -715,7 +719,6 void ASM_send(Header_TM_LFR_SCIENCE_ASM_ | |||
|
715 | 719 | spw_ioctl_send->dlen = TOTAL_SIZE_ASM_F0_IN_BYTES / 2; |
|
716 | 720 | spw_ioctl_send->data = &spectral_matrix[ |
|
717 | 721 | ( (ASM_F0_INDICE_START + (i*NB_BINS_PER_PKT_ASM_F0) ) * NB_VALUES_PER_SM ) * 2 |
|
718 | + TIME_OFFSET_IN_BYTES | |
|
719 | 722 | ]; |
|
720 | 723 | length = PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F0; |
|
721 | 724 | header->pa_lfr_asm_blk_nr[0] = (unsigned char) ( (NB_BINS_PER_PKT_ASM_F0) >> 8 ); // BLK_NR MSB |
@@ -202,8 +202,8 rtems_task send_task( rtems_task_argumen | |||
|
202 | 202 | * |
|
203 | 203 | */ |
|
204 | 204 | |
|
205 | rtems_status_code status; // RTEMS status code | |
|
206 |
char incomingData[ |
|
|
205 | rtems_status_code status; // RTEMS status code | |
|
206 | char incomingData[MSG_QUEUE_SIZE_SEND]; // incoming data buffer | |
|
207 | 207 | spw_ioctl_pkt_send *spw_ioctl_send; |
|
208 | 208 | size_t size; // size of the incoming TC packet |
|
209 | 209 | u_int32_t count; |
@@ -532,7 +532,8 int enter_mode( unsigned char mode, unsi | |||
|
532 | 532 | #endif |
|
533 | 533 | status = restart_science_tasks( mode ); |
|
534 | 534 | launch_waveform_picker( mode, transitionCoarseTime ); |
|
535 |
launch_spectral_matrix |
|
|
535 | // launch_spectral_matrix( ); | |
|
536 | // launch_spectral_matrix_simu( ); | |
|
536 | 537 | } |
|
537 | 538 | else if ( mode == LFR_MODE_STANDBY ) |
|
538 | 539 | { |
@@ -541,6 +542,7 int enter_mode( unsigned char mode, unsi | |||
|
541 | 542 | #endif |
|
542 | 543 | |
|
543 | 544 | #ifdef PRINT_STACK_REPORT |
|
545 | PRINTF("stack report selected\n") | |
|
544 | 546 | rtems_stack_checker_report_usage(); |
|
545 | 547 | #endif |
|
546 | 548 | PRINTF1("maxCount = %d\n", maxCount) |
@@ -702,7 +704,7 void launch_waveform_picker( unsigned ch | |||
|
702 | 704 | } |
|
703 | 705 | } |
|
704 | 706 | |
|
705 |
void launch_spectral_matrix( |
|
|
707 | void launch_spectral_matrix( void ) | |
|
706 | 708 | { |
|
707 | 709 | SM_reset_current_ring_nodes(); |
|
708 | 710 | ASM_reset_current_ring_node(); |
@@ -710,8 +712,8 void launch_spectral_matrix( unsigned ch | |||
|
710 | 712 | |
|
711 | 713 | struct grgpio_regs_str *grgpio_regs = (struct grgpio_regs_str *) REGS_ADDR_GRGPIO; |
|
712 | 714 | grgpio_regs->io_port_direction_register = |
|
713 |
grgpio_regs->io_port_direction_register | 0x01; // [000 |
|
|
714 |
grgpio_regs->io_port_output_register = grgpio_regs->io_port_output_register |
|
|
715 | grgpio_regs->io_port_direction_register | 0x01; // [0000 0001], 0 = output disabled, 1 = output enabled | |
|
716 | grgpio_regs->io_port_output_register = grgpio_regs->io_port_output_register & 0xfffffffe; // set the bit 0 to 0 | |
|
715 | 717 | set_irq_on_new_ready_matrix( 1 ); |
|
716 | 718 | LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); |
|
717 | 719 | LEON_Unmask_interrupt( IRQ_SPECTRAL_MATRIX ); |
@@ -719,6 +721,19 void launch_spectral_matrix( unsigned ch | |||
|
719 | 721 | |
|
720 | 722 | } |
|
721 | 723 | |
|
724 | void launch_spectral_matrix_simu( void ) | |
|
725 | { | |
|
726 | SM_reset_current_ring_nodes(); | |
|
727 | ASM_reset_current_ring_node(); | |
|
728 | reset_spectral_matrix_regs(); | |
|
729 | ||
|
730 | // Spectral Matrices simulator | |
|
731 | timer_start( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR ); | |
|
732 | LEON_Clear_interrupt( IRQ_SM_SIMULATOR ); | |
|
733 | LEON_Unmask_interrupt( IRQ_SM_SIMULATOR ); | |
|
734 | set_local_nb_interrupt_f0_MAX(); | |
|
735 | } | |
|
736 | ||
|
722 | 737 | void set_irq_on_new_ready_matrix( unsigned char value ) |
|
723 | 738 | { |
|
724 | 739 | if (value == 1) |
@@ -743,19 +758,6 void set_run_matrix_spectral( unsigned c | |||
|
743 | 758 | } |
|
744 | 759 | } |
|
745 | 760 | |
|
746 | void launch_spectral_matrix_simu( unsigned char mode ) | |
|
747 | { | |
|
748 | SM_reset_current_ring_nodes(); | |
|
749 | ASM_reset_current_ring_node(); | |
|
750 | reset_spectral_matrix_regs(); | |
|
751 | ||
|
752 | // Spectral Matrices simulator | |
|
753 | timer_start( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR ); | |
|
754 | LEON_Clear_interrupt( IRQ_SM_SIMULATOR ); | |
|
755 | LEON_Unmask_interrupt( IRQ_SM_SIMULATOR ); | |
|
756 | set_local_nb_interrupt_f0_MAX(); | |
|
757 | } | |
|
758 | ||
|
759 | 761 | //**************** |
|
760 | 762 | // CLOSING ACTIONS |
|
761 | 763 | void update_last_TC_exe( ccsdsTelecommandPacket_t *TC, unsigned char * time ) |
@@ -43,6 +43,7 int action_load_normal_par(ccsdsTelecomm | |||
|
43 | 43 | rtems_status_code status; |
|
44 | 44 | unsigned char sy_lfr_n_bp_p0; |
|
45 | 45 | unsigned char sy_lfr_n_bp_p1; |
|
46 | unsigned int sy_lfr_n_asm_p; | |
|
46 | 47 | float aux; |
|
47 | 48 | |
|
48 | 49 | flag = LFR_SUCCESSFUL; |
@@ -75,17 +76,6 int action_load_normal_par(ccsdsTelecomm | |||
|
75 | 76 | } |
|
76 | 77 | } |
|
77 | 78 | |
|
78 | //*************** | |
|
79 | // sy_lfr_n_asm_p | |
|
80 | if (flag == LFR_SUCCESSFUL) | |
|
81 | { | |
|
82 | result = set_sy_lfr_n_asm_p( TC, queue_id ); | |
|
83 | if (result != LFR_SUCCESSFUL) | |
|
84 | { | |
|
85 | flag = LFR_DEFAULT; | |
|
86 | } | |
|
87 | } | |
|
88 | ||
|
89 | 79 | //**************************************************************** |
|
90 | 80 | // check the consistency between sy_lfr_n_bp_p0 and sy_lfr_n_bp_p1 |
|
91 | 81 | if (flag == LFR_SUCCESSFUL) |
@@ -122,6 +112,33 int action_load_normal_par(ccsdsTelecomm | |||
|
122 | 112 | } |
|
123 | 113 | } |
|
124 | 114 | |
|
115 | //**************************************************************** | |
|
116 | // check the consistency between sy_lfr_n_asm_p and sy_lfr_n_bp_p0 | |
|
117 | if (flag == LFR_SUCCESSFUL) | |
|
118 | { | |
|
119 | sy_lfr_n_bp_p0 = TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_BP_P0 ]; | |
|
120 | sy_lfr_n_asm_p = | |
|
121 | TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_ASM_P ] * 256 | |
|
122 | + TC->dataAndCRC[ DATAFIELD_POS_SY_LFR_N_ASM_P + 1 ]; | |
|
123 | aux = ( (float ) sy_lfr_n_asm_p / sy_lfr_n_bp_p0 ) - floor(sy_lfr_n_asm_p / sy_lfr_n_bp_p0); | |
|
124 | if (aux != 0) | |
|
125 | { | |
|
126 | status = send_tm_lfr_tc_exe_inconsistent( TC, queue_id, DATAFIELD_POS_SY_LFR_N_ASM_P+10, sy_lfr_n_asm_p ); | |
|
127 | flag = LFR_DEFAULT; | |
|
128 | } | |
|
129 | } | |
|
130 | ||
|
131 | //*************** | |
|
132 | // sy_lfr_n_asm_p | |
|
133 | if (flag == LFR_SUCCESSFUL) | |
|
134 | { | |
|
135 | result = set_sy_lfr_n_asm_p( TC, queue_id ); | |
|
136 | if (result != LFR_SUCCESSFUL) | |
|
137 | { | |
|
138 | flag = LFR_DEFAULT; | |
|
139 | } | |
|
140 | } | |
|
141 | ||
|
125 | 142 | //********************* |
|
126 | 143 | // sy_lfr_n_cwf_long_f3 |
|
127 | 144 | if (flag == LFR_SUCCESSFUL) |
@@ -65,7 +65,6 rtems_isr waveforms_isr( rtems_vector_nu | |||
|
65 | 65 | */ |
|
66 | 66 | |
|
67 | 67 | rtems_status_code status; |
|
68 | static unsigned char nb_swf = 0; | |
|
69 | 68 | |
|
70 | 69 | if ( (lfrCurrentMode == LFR_MODE_NORMAL) |
|
71 | 70 | || (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) ) |
@@ -115,23 +114,12 rtems_isr waveforms_isr( rtems_vector_nu | |||
|
115 | 114 | current_ring_node_f2 = current_ring_node_f2->next; |
|
116 | 115 | waveform_picker_regs->addr_data_f2 = current_ring_node_f2->buffer_address; |
|
117 | 116 | // |
|
118 | // if (nb_swf < 2) | |
|
119 | if (true) | |
|
117 | if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) | |
|
120 | 118 | { |
|
121 |
|
|
|
122 | rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 ); | |
|
123 | } | |
|
124 | waveform_picker_regs->status = waveform_picker_regs->status & 0xfffff888; // [1000 1000 1000] | |
|
125 | nb_swf = nb_swf + 1; | |
|
119 | rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 ); | |
|
126 | 120 | } |
|
127 | else | |
|
128 | { | |
|
129 | reset_wfp_burst_enable(); | |
|
130 | nb_swf = 0; | |
|
131 | } | |
|
132 | ||
|
121 | waveform_picker_regs->status = waveform_picker_regs->status & 0xfffff888; // [1000 1000 1000] | |
|
133 | 122 | } |
|
134 | ||
|
135 | 123 | break; |
|
136 | 124 | |
|
137 | 125 | //****** |
General Comments 0
You need to be logged in to leave comments.
Login now