# HG changeset patch # User paul # Date 2014-02-21 14:57:54 # Node ID b37996d46c773ba528aedbf8dcf81015dedfcbe2 # Parent 30ac019d302a905ed1da989c6fb85ff9dcab24ff Bug #60 corrected Spectral matrices averaging and compression functional Spectral matrix transmission functional diff --git a/FSW-qt/Makefile b/FSW-qt/Makefile --- a/FSW-qt/Makefile +++ b/FSW-qt/Makefile @@ -1,6 +1,6 @@ ############################################################################# # Makefile for building: bin/fsw -# Generated by qmake (2.01a) (Qt 4.8.5) on: Wed Feb 19 13:04:42 2014 +# Generated by qmake (2.01a) (Qt 4.8.5) on: Fri Feb 21 15:32:25 2014 # Project: fsw-qt.pro # Template: app # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro @@ -10,7 +10,7 @@ CC = sparc-rtems-gcc CXX = sparc-rtems-g++ -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 +DEFINES = -DSW_VERSION_N1=1 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=2 -DPRINT_MESSAGES_ON_CONSOLE CFLAGS = -pipe -O3 -Wall $(DEFINES) CXXFLAGS = -pipe -O3 -Wall $(DEFINES) INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header -I../../LFR_basic-parameters diff --git a/FSW-qt/bin/load_spectral_matrix.py b/FSW-qt/bin/load_spectral_matrix.py --- a/FSW-qt/bin/load_spectral_matrix.py +++ b/FSW-qt/bin/load_spectral_matrix.py @@ -11,6 +11,10 @@ for frequencyBin in range(128): for component in range (25): dataToWrite.append( component ) +#for frequencyBin in range(64): +# for component in range (25): +# dataToWrite.append( 2 * component ) + # WRITE THE DATA print len(dataToWrite) RMAPPlugin0.Write( matrixF0_Address0, dataToWrite ) diff --git a/FSW-qt/fsw-qt.pro b/FSW-qt/fsw-qt.pro --- a/FSW-qt/fsw-qt.pro +++ b/FSW-qt/fsw-qt.pro @@ -1,7 +1,7 @@ TEMPLATE = app # CONFIG += console v8 sim # CONFIG options = verbose *** boot_messages *** debug_messages *** cpu_usage_report *** stack_report -CONFIG += console verbose cpu_usage_report debug_messages +CONFIG += console verbose CONFIG -= qt include(./sparc.pri) diff --git a/FSW-qt/fsw-qt.pro.user b/FSW-qt/fsw-qt.pro.user --- a/FSW-qt/fsw-qt.pro.user +++ b/FSW-qt/fsw-qt.pro.user @@ -1,6 +1,6 @@ - + ProjectExplorer.Project.ActiveTarget diff --git a/header/fsw_params.h b/header/fsw_params.h --- a/header/fsw_params.h +++ b/header/fsw_params.h @@ -131,7 +131,7 @@ typedef struct ring_node #define TASKID_SMIQ 4 #define TASKID_STAT 5 #define TASKID_AVF0 6 -#define TASKID_BPF0 7 +//#define TASKID_BPF0 7 #define TASKID_WFRM 8 #define TASKID_DUMB 9 #define TASKID_HOUS 10 diff --git a/header/fsw_params_processing.h b/header/fsw_params_processing.h --- a/header/fsw_params_processing.h +++ b/header/fsw_params_processing.h @@ -28,7 +28,13 @@ #define NB_BINS_COMPRESSED_SM_F1 13 #define NB_BINS_COMPRESSED_SM_F2 12 // -#define TOTAL_SIZE_COMPRESSED_MATRIX_f0 (NB_BINS_COMPRESSED_SM_F0 * NB_VALUES_PER_SM) +#define NB_BINS_TO_AVERAGE_ASM_F0 8 +#define NB_BINS_TO_AVERAGE_ASM_F1 8 +#define NB_BINS_TO_AVERAGE_ASM_F2 8 +// +#define TOTAL_SIZE_COMPRESSED_ASM_F0 275 // 11 * 25 +#define TOTAL_SIZE_COMPRESSED_ASM_F1 325 // 13 * 25 +#define TOTAL_SIZE_COMPRESSED_ASM_F2 300 // 12 * 25 #define NB_AVERAGE_NORMAL_f0 96*4 #define NB_SM_TO_RECEIVE_BEFORE_AVF0 8 diff --git a/header/fsw_processing.h b/header/fsw_processing.h --- a/header/fsw_processing.h +++ b/header/fsw_processing.h @@ -35,21 +35,19 @@ rtems_isr spectral_matrices_isr( rtems_v rtems_isr spectral_matrices_isr_simu( rtems_vector_number vector ); // RTEMS TASKS -rtems_task spw_bppr_task(rtems_task_argument argument); rtems_task avf0_task(rtems_task_argument argument); -rtems_task bpf0_task(rtems_task_argument argument); rtems_task smiq_task(rtems_task_argument argument); // added to test the spectral matrix simulator rtems_task matr_task(rtems_task_argument argument); -void matrix_compression(volatile float *averaged_spec_mat, unsigned char fChannel, float *compressed_spec_mat); void matrix_reset(volatile float *averaged_spec_mat); void BP1_set_old(float * compressed_spec_mat, unsigned char nb_bins_compressed_spec_mat, unsigned char * LFR_BP1); void BP2_set_old(float * compressed_spec_mat, unsigned char nb_bins_compressed_spec_mat); // void init_header_asm( Header_TM_LFR_SCIENCE_ASM_t *header); -void send_spectral_matrix(Header_TM_LFR_SCIENCE_ASM_t *header, char *spectral_matrix, +void compress_averaged_spectral_matrix( float *averaged_spec_mat, unsigned char fChannel, float *compressed_spec_mat ); +void convert_averaged_spectral_matrix(volatile float *input_matrix, char *output_matrix); +void send_averaged_spectral_matrix(Header_TM_LFR_SCIENCE_ASM_t *header, char *spectral_matrix, unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send, rtems_id queue_id); -void convert_averaged_spectral_matrix(volatile float *input_matrix, char *output_matrix); void fill_averaged_spectral_matrix( void ); void reset_spectral_matrix_regs(); diff --git a/src/fsw_init.c b/src/fsw_init.c --- a/src/fsw_init.c +++ b/src/fsw_init.c @@ -236,7 +236,7 @@ void create_names( void ) // create all Task_name[TASKID_SMIQ] = rtems_build_name( 'S', 'M', 'I', 'Q' ); Task_name[TASKID_STAT] = rtems_build_name( 'S', 'T', 'A', 'T' ); Task_name[TASKID_AVF0] = rtems_build_name( 'A', 'V', 'F', '0' ); - Task_name[TASKID_BPF0] = rtems_build_name( 'B', 'P', 'F', '0' ); +// Task_name[TASKID_BPF0] = rtems_build_name( 'B', 'P', 'F', '0' ); Task_name[TASKID_WFRM] = rtems_build_name( 'W', 'F', 'R', 'M' ); Task_name[TASKID_DUMB] = rtems_build_name( 'D', 'U', 'M', 'B' ); Task_name[TASKID_HOUS] = rtems_build_name( 'H', 'O', 'U', 'S' ); @@ -319,14 +319,6 @@ int create_all_tasks( void ) // create a RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_AVF0] ); } - if (status == RTEMS_SUCCESSFUL) // BPF0 - { - status = rtems_task_create( - Task_name[TASKID_BPF0], TASK_PRIORITY_BPF0, RTEMS_MINIMUM_STACK_SIZE, - RTEMS_DEFAULT_MODES, - RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_BPF0] - ); - } if (status == RTEMS_SUCCESSFUL) // WFRM { status = rtems_task_create( @@ -484,14 +476,6 @@ int start_all_tasks( void ) // start all } } - if (status == RTEMS_SUCCESSFUL) // BPF0 - { - status = rtems_task_start( Task_id[TASKID_BPF0], bpf0_task, 1 ); - if (status!=RTEMS_SUCCESSFUL) { - BOOT_PRINTF("in INIT *** Error starting TASK_BPF0\n") - } - } - if (status == RTEMS_SUCCESSFUL) // WFRM { status = rtems_task_start( Task_id[TASKID_WFRM], wfrm_task, 1 ); diff --git a/src/fsw_processing.c b/src/fsw_processing.c --- a/src/fsw_processing.c +++ b/src/fsw_processing.c @@ -24,7 +24,7 @@ ring_node *current_ring_node_sm_f2; BP1_t data_BP1[ NB_BINS_COMPRESSED_SM_F0 ]; float averaged_sm_f0[ TOTAL_SIZE_SM ]; char averaged_sm_f0_char[ TOTAL_SIZE_SM * 2 ]; -float compressed_sm_f0[ TOTAL_SIZE_COMPRESSED_MATRIX_f0 ]; +float compressed_sm_f0[ TOTAL_SIZE_COMPRESSED_ASM_F0 ]; unsigned int nb_sm_f0; @@ -109,13 +109,14 @@ rtems_isr spectral_matrices_isr( rtems_v rtems_isr spectral_matrices_isr_simu( rtems_vector_number vector ) { - //current_ring_node_sm_f0 = current_ring_node_sm_f0->next; - //spectral_matrix_regs->matrixF0_Address0 = current_ring_node_sm_f0->buffer_address; - //spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffffe; + current_ring_node_sm_f0 = current_ring_node_sm_f0->next; + spectral_matrix_regs->matrixF0_Address0 = current_ring_node_sm_f0->buffer_address; + spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffffe; if (nb_sm_f0 == (NB_SM_TO_RECEIVE_BEFORE_AVF0-1) ) { - ring_node_for_averaging_sm_f0 = current_ring_node_sm_f0; +// ring_node_for_averaging_sm_f0 = current_ring_node_sm_f0; + ring_node_for_averaging_sm_f0 = &sm_ring_f0[NB_SM_TO_RECEIVE_BEFORE_AVF0-1]; if (rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) { rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 ); @@ -142,18 +143,6 @@ rtems_task smiq_task(rtems_task_argument } } -rtems_task spw_bppr_task(rtems_task_argument argument) -{ - rtems_status_code status; - rtems_event_set event_out; - - BOOT_PRINTF("in BPPR ***\n"); - - while( true ){ // wait for an event to begin with the processing - status = rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); - } -} - rtems_task avf0_task(rtems_task_argument argument) { int i; @@ -168,7 +157,6 @@ rtems_task avf0_task(rtems_task_argument while(1){ rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0 - ring_node_for_averaging_sm_f0 = &sm_ring_f0[NB_SM_TO_RECEIVE_BEFORE_AVF0-1]; ring_node_tab[NB_SM_TO_RECEIVE_BEFORE_AVF0-1] = ring_node_for_averaging_sm_f0; for (i=2; idlen = TOTAL_SIZE_ASM_F0_IN_BYTES / 2; + spw_ioctl_send->data = &spectral_matrix[ ( (ASM_F0_INDICE_START+ (i*NB_BINS_PER_PKT_ASM_F0)) * NB_VALUES_PER_SM) * 2 ]; + length = PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F0; + header->pa_lfr_asm_blk_nr[0] = (unsigned char) ( (NB_BINS_PER_PKT_ASM_F0) >> 8 ); // BLK_NR MSB + header->pa_lfr_asm_blk_nr[1] = (unsigned char) (NB_BINS_PER_PKT_ASM_F0); // BLK_NR LSB break; - case 2: - // case fChannel = f1 to be completed later + case SID_NORM_ASM_F1: + break; + case SID_NORM_ASM_F2: break; default: + PRINTF1("ERR *** in send_averaged_spectral_matrix *** unexpected sid %d\n", sid) break; + } + spw_ioctl_send->hlen = HEADER_LENGTH_TM_LFR_SCIENCE_ASM + CCSDS_PROTOCOLE_EXTRA_BYTES; + spw_ioctl_send->hdr = (char *) header; + spw_ioctl_send->options = 0; + + // (2) BUILD THE HEADER + header->packetLength[0] = (unsigned char) (length>>8); + header->packetLength[1] = (unsigned char) (length); + header->sid = (unsigned char) sid; // SID + header->pa_lfr_pkt_cnt_asm = 2; + header->pa_lfr_pkt_nr_asm = (unsigned char) (i+1); + + // (3) SET PACKET TIME + header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24); + header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16); + header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8); + header->time[3] = (unsigned char) (time_management_regs->coarse_time); + header->time[4] = (unsigned char) (time_management_regs->fine_time>>8); + header->time[5] = (unsigned char) (time_management_regs->fine_time); + // + header->acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24); + header->acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16); + header->acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8); + header->acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time); + header->acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8); + header->acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time); + + // (4) SEND PACKET + status = rtems_message_queue_send( queue_id, spw_ioctl_send, ACTION_MSG_SPW_IOCTL_SEND_SIZE); + if (status != RTEMS_SUCCESSFUL) { + printf("in send_averaged_spectral_matrix *** ERR %d\n", (int) status); + } } } @@ -495,89 +571,6 @@ void init_header_asm( Header_TM_LFR_SCIE header->pa_lfr_asm_blk_nr[1] = 0x00; // BLK_NR LSB } -void send_spectral_matrix(Header_TM_LFR_SCIENCE_ASM_t *header, char *spectral_matrix, - unsigned int sid, spw_ioctl_pkt_send *spw_ioctl_send, rtems_id queue_id) -{ - unsigned int i; - unsigned int length = 0; - rtems_status_code status; - - for (i=0; i<2; i++) - { - // (1) BUILD THE DATA - switch(sid) - { - case SID_NORM_ASM_F0: - spw_ioctl_send->dlen = TOTAL_SIZE_ASM_F0_IN_BYTES / 2; - spw_ioctl_send->data = &spectral_matrix[ ( (ASM_F0_INDICE_START+ (i*NB_BINS_PER_PKT_ASM_F0)) * NB_VALUES_PER_SM) * 2 ]; - length = PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F0; - header->pa_lfr_asm_blk_nr[0] = (unsigned char) ( (NB_BINS_PER_PKT_ASM_F0) >> 8 ); // BLK_NR MSB - header->pa_lfr_asm_blk_nr[1] = (unsigned char) (NB_BINS_PER_PKT_ASM_F0); // BLK_NR LSB - break; - case SID_NORM_ASM_F1: - break; - case SID_NORM_ASM_F2: - break; - default: - PRINTF1("ERR *** in send_spectral_matrix *** unexpected sid %d\n", sid) - break; - } - spw_ioctl_send->hlen = HEADER_LENGTH_TM_LFR_SCIENCE_ASM + CCSDS_PROTOCOLE_EXTRA_BYTES; - spw_ioctl_send->hdr = (char *) header; - spw_ioctl_send->options = 0; - - // (2) BUILD THE HEADER - header->packetLength[0] = (unsigned char) (length>>8); - header->packetLength[1] = (unsigned char) (length); - header->sid = (unsigned char) sid; // SID - header->pa_lfr_pkt_cnt_asm = 2; - header->pa_lfr_pkt_nr_asm = (unsigned char) (i+1); - - // (3) SET PACKET TIME - header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24); - header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16); - header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8); - header->time[3] = (unsigned char) (time_management_regs->coarse_time); - header->time[4] = (unsigned char) (time_management_regs->fine_time>>8); - header->time[5] = (unsigned char) (time_management_regs->fine_time); - // - header->acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24); - header->acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16); - header->acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8); - header->acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time); - header->acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8); - header->acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time); - - // (4) SEND PACKET - status = rtems_message_queue_send( queue_id, spw_ioctl_send, ACTION_MSG_SPW_IOCTL_SEND_SIZE); - if (status != RTEMS_SUCCESSFUL) { - printf("in send_spectral_matrix *** ERR %d\n", (int) status); - } - } -} - -void convert_averaged_spectral_matrix( volatile float *input_matrix, char *output_matrix) -{ - unsigned int i; - unsigned int j; - char * pt_char_input; - char * pt_char_output; - - pt_char_input = NULL; - pt_char_output = NULL; - - for( i=0; i