diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc index 129c47e82a9fd6c9d5d97960a31b9f5e67e0fe37..76615b1a815dcd674e7821ad1ad00ddca15298f9 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc +++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc @@ -33,7 +33,7 @@ static bool any_bad_argument(const octave_value_list &args) if ((!v.is_real_scalar()) || (v.scalar_value() < -2) || (floor(v.scalar_value()) != v.scalar_value()) || (v.scalar_value() >= MAX_CARDS)) { error(FCNNAME); - error("card must be 0-3 for a specific card, or -1 to get frame from all cards.\nSet framing.sync_mode =SYNCMODE_MASTER for one card and =SYNCMODE_SLAVE to obtain synchronized frames.\n"); + error("card must be 0-19 for a specific card, or -1 to get frame from all cards.\nSet framing.sync_mode =SYNCMODE_MASTER for one card and =SYNCMODE_SLAVE to obtain synchronized frames.\n"); return true; } return false; @@ -82,10 +82,10 @@ DEFUN_DLD (oarf_get_frame, args, nargout,"Get frame") int card = args(0).int_value(); octave_value returnvalue; - int i,aa; + int i,aa,j; short *rx_sig[MAX_CARDS * MAX_ANTENNAS]; int ret; - int frame_length_samples=0; + int frame_length_samples[MAX_CARDS]; ret = openair0_open(); if ( ret != 0 ) @@ -106,8 +106,10 @@ DEFUN_DLD (oarf_get_frame, args, nargout,"Get frame") card = -1; } - if (card <-1 || card >= openair0_num_detected_cards) + if (card <-1 || card >= openair0_num_detected_cards) { error("card number must be between 0 and %d. Or -1 for all cards.", openair0_num_detected_cards-1); + return octave_value(-4); + } if (card == -1) { numant = openair0_num_detected_cards * openair0_num_antennas[0]; @@ -131,20 +133,22 @@ DEFUN_DLD (oarf_get_frame, args, nargout,"Get frame") } printf("\n"); } - - if (openair0_exmimo_pci[0].exmimo_config_ptr->framing.resampling_factor[0] == 2) - frame_length_samples = FRAME_LENGTH_COMPLEX_SAMPLES; - else if (openair0_exmimo_pci[0].exmimo_config_ptr->framing.resampling_factor[0] == 1) - frame_length_samples = FRAME_LENGTH_COMPLEX_SAMPLES*2; - else if (openair0_exmimo_pci[0].exmimo_config_ptr->framing.resampling_factor[0] == 0) - frame_length_samples = FRAME_LENGTH_COMPLEX_SAMPLES*4; + + for (i=0; i<openair0_num_detected_cards; i++) + { + if (openair0_exmimo_pci[i].exmimo_config_ptr->framing.resampling_factor[0] == 2) + frame_length_samples[i] = FRAME_LENGTH_COMPLEX_SAMPLES; + else if (openair0_exmimo_pci[i].exmimo_config_ptr->framing.resampling_factor[0] == 1) + frame_length_samples[i] = FRAME_LENGTH_COMPLEX_SAMPLES*2; + else if (openair0_exmimo_pci[i].exmimo_config_ptr->framing.resampling_factor[0] == 0) + frame_length_samples[i] = FRAME_LENGTH_COMPLEX_SAMPLES*4; else - frame_length_samples = FRAME_LENGTH_COMPLEX_SAMPLES; - + frame_length_samples[i] = FRAME_LENGTH_COMPLEX_SAMPLES; + } printf("Info : Only resampling_factor of channel 0 is taken into account for copying received frame for all the other chains\n"); - ComplexMatrix dx (frame_length_samples, numant); - + + ComplexMatrix dx (FRAME_LENGTH_COMPLEX_SAMPLES*4, numant*openair0_num_detected_cards); /* // set the tx buffer to 0x00010001 to put switch in rx mode for (aa=0; aa<numant; aa++) @@ -155,24 +159,28 @@ DEFUN_DLD (oarf_get_frame, args, nargout,"Get frame") printf("Warning: tdd_config is not set to TXRXSWITCH_TESTRX! You better know what you are doing! :)\n"); // assign userspace pointers - for (i=0; i<numant; i++) + + for (j=0; j<openair0_num_detected_cards;j++) { - if ( numant == openair0_num_antennas[card] ) - rx_sig[i] = (short*) openair0_exmimo_pci[ card ].adc_head[ i ]; - else - rx_sig[i] = (short*) openair0_exmimo_pci[ i / (int)openair0_num_antennas[0] ].adc_head[i % openair0_num_antennas[0]]; + for (i=0; i<numant; i++) + { + //if ( numant == openair0_num_antennas[j] ) + rx_sig[i+(j*MAX_ANTENNAS)] = (short*) openair0_exmimo_pci[ j ].adc_head[ i ]; + //else + // rx_sig[i+(j*MAX_ANTENNAS)] = (short*) openair0_exmimo_pci[ i / (int)openair0_num_antennas[0] ].adc_head[i % openair0_num_antennas[0]]; - //printf("adc_head[%i] = %p ", i, rx_sig[i]); + // printf("Card %i adc_head[%i] = %p \n",j, i, rx_sig[i+(j*MAX_ANTENNAS)]); + } } - printf("frame length samples : %d\n",frame_length_samples); // msg("Getting buffer...\n"); if ( no_getframe_ioctl == 0) openair0_get_frame(card); - for (i=0; i<frame_length_samples; i++) + for (j=0; j<openair0_num_detected_cards;j++) + for (i=0; i<frame_length_samples[j]; i++) for (aa=0; aa<numant; aa++) - dx(i, aa) = Complex( rx_sig[aa][i*2], rx_sig[aa][i*2+1] ); + dx(i, aa+j*MAX_ANTENNAS) = Complex( rx_sig[aa+j*MAX_ANTENNAS][i*2], rx_sig[aa+j*MAX_ANTENNAS][i*2+1] ); openair0_close();