adjust_gain.c 5.78 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#include "PHY/types.h"
#include "PHY/defs.h"
#include "PHY/extern.h"
#include "MAC_INTERFACE/defs.h"
#include "MAC_INTERFACE/extern.h"

#ifdef EXMIMO
#ifdef DRIVER2013
#include "openair0_lib.h"
extern int card;
#else
#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h"
#include "ARCH/CBMIMO1/DEVICE_DRIVER/defs.h"
#include "ARCH/CBMIMO1/DEVICE_DRIVER/extern.h"
#endif
#endif

void
phy_adjust_gain (PHY_VARS_UE *phy_vars_ue, u8 eNB_id) {

21
    u16 rx_power_fil_dB;
22 23 24 25
#ifdef EXMIMO
#ifdef DRIVER2013
  exmimo_config_t *p_exmimo_config = openair0_exmimo_pci[card].exmimo_config_ptr;
#endif
26 27 28
#endif
#if defined(EXMIMO) || defined(CBMIMO1)
  u16 i;
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
#endif

  //rx_power_fil_dB = dB_fixed(phy_vars_ue->PHY_measurements.rssi);
  rx_power_fil_dB = phy_vars_ue->PHY_measurements.rx_power_avg_dB[eNB_id];

  // Gain control with hysterisis
  // Adjust gain in phy_vars_ue->rx_vars[0].rx_total_gain_dB

  if (rx_power_fil_dB < TARGET_RX_POWER - 5) //&& (phy_vars_ue->rx_total_gain_dB < MAX_RF_GAIN) )
    phy_vars_ue->rx_total_gain_dB+=5;
  else if (rx_power_fil_dB > TARGET_RX_POWER + 5) //&& (phy_vars_ue->rx_total_gain_dB > MIN_RF_GAIN) )
    phy_vars_ue->rx_total_gain_dB-=5;

  if (phy_vars_ue->rx_total_gain_dB>MAX_RF_GAIN) {
    /*
    if ((openair_daq_vars.rx_rf_mode==0) && (openair_daq_vars.mode == openair_NOT_SYNCHED)) {
      openair_daq_vars.rx_rf_mode=1;
      phy_vars_ue->rx_total_gain_dB = max(MIN_RF_GAIN,MAX_RF_GAIN-25);
    }
    else {
    */
    phy_vars_ue->rx_total_gain_dB = MAX_RF_GAIN;
  }
  else if (phy_vars_ue->rx_total_gain_dB<MIN_RF_GAIN) {
    /*
    if ((openair_daq_vars.rx_rf_mode==1) && (openair_daq_vars.mode == openair_NOT_SYNCHED)) {
      openair_daq_vars.rx_rf_mode=0;
      phy_vars_ue->rx_total_gain_dB = min(MAX_RF_GAIN,MIN_RF_GAIN+25);
    }
    else {
    */
    phy_vars_ue->rx_total_gain_dB = MIN_RF_GAIN;
  }


#ifdef CBMIMO1
  for (i=0;i<number_of_cards;i++) {
    //openair_set_rx_rf_mode(i,openair_daq_vars.rx_rf_mode);
    openair_set_rx_gain_cal_openair(i,phy_vars_ue->rx_total_gain_dB);
  }
#else
#ifdef EXMIMO

  //switch (phy_vars_ue->rx_gain_mode[0]) {
  //case max_gain:
      if (phy_vars_ue->rx_total_gain_dB>phy_vars_ue->rx_gain_max[0]) {
          phy_vars_ue->rx_total_gain_dB = phy_vars_ue->rx_gain_max[0];
#ifdef DRIVER2013
          for (i=0;i<phy_vars_ue->lte_frame_parms.nb_antennas_rx;i++) {
              p_exmimo_config->rf.rx_gain[i][0] = 30;
          }
#else
	  exmimo_pci_interface->rf.rx_gain00 = 30;
	  exmimo_pci_interface->rf.rx_gain10 = 30;
#endif

      }
      else if (phy_vars_ue->rx_total_gain_dB<(phy_vars_ue->rx_gain_max[0]-30)) {
          // for the moment we stay in max gain mode
          phy_vars_ue->rx_total_gain_dB = phy_vars_ue->rx_gain_max[0] - 30;
#ifdef DRIVER2013
          for (i=0;i<phy_vars_ue->lte_frame_parms.nb_antennas_rx;i++) {
              p_exmimo_config->rf.rx_gain[i][0] = 0;
          }
#else
	  exmimo_pci_interface->rf.rx_gain00 = 0;
	  exmimo_pci_interface->rf.rx_gain10 = 0;
#endif
          /*
            phy_vars_ue->rx_gain_mode[0] = byp;
            phy_vars_ue->rx_gain_mode[1] = byp;
            exmimo_pci_interface->rf.rf_mode0 = 22991; //bypass
            exmimo_pci_interface->rf.rf_mode1 = 22991; //bypass
            
            if (phy_vars_ue->rx_total_gain_dB<(phy_vars_ue->rx_gain_byp[0]-50)) {
            exmimo_pci_interface->rf.rx_gain00 = 0;
            exmimo_pci_interface->rf.rx_gain10 = 0;
            }
              */
      }
      else {
#ifdef DRIVER2013
          for (i=0;i<phy_vars_ue->lte_frame_parms.nb_antennas_rx;i++) {
              p_exmimo_config->rf.rx_gain[i][0] =  30 - phy_vars_ue->rx_gain_max[0] + phy_vars_ue->rx_total_gain_dB;
          }
#else
	  exmimo_pci_interface->rf.rx_gain00 = 30 - phy_vars_ue->rx_gain_max[0] + phy_vars_ue->rx_total_gain_dB;
	  exmimo_pci_interface->rf.rx_gain10 = 30 - phy_vars_ue->rx_gain_max[1] + phy_vars_ue->rx_total_gain_dB;
#endif
      }
      /*
        break;
      case med_gain:
      case byp_gain:
          if (phy_vars_ue->rx_total_gain_dB>phy_vars_ue->rx_gain_byp[0]) {
              phy_vars_ue->rx_gain_mode[0]   = max_gain;
              phy_vars_ue->rx_gain_mode[1]   = max_gain;
              exmimo_pci_interface->rf.rf_mode0 = 55759; //max gain
              exmimo_pci_interface->rf.rf_mode1 = 55759; //max gain
              
              if (phy_vars_ue->rx_total_gain_dB>phy_vars_ue->rx_gain_max[0]) {
                  exmimo_pci_interface->rf.rx_gain00 = 50;
                  exmimo_pci_interface->rf.rx_gain10 = 50;
              }
              else {
                  exmimo_pci_interface->rf.rx_gain00 = 50 - phy_vars_ue->rx_gain_max[0] + phy_vars_ue->rx_total_gain_dB;
                  exmimo_pci_interface->rf.rx_gain10 = 50 - phy_vars_ue->rx_gain_max[1] + phy_vars_ue->rx_total_gain_dB;
              }
          }
          else if (phy_vars_ue->rx_total_gain_dB<(phy_vars_ue->rx_gain_byp[0]-50)) {
              exmimo_pci_interface->rf.rx_gain00 = 0;
              exmimo_pci_interface->rf.rx_gain10 = 0;
          }
          else {
              exmimo_pci_interface->rf.rx_gain00 = 50 - phy_vars_ue->rx_gain_byp[0] + phy_vars_ue->rx_total_gain_dB;
              exmimo_pci_interface->rf.rx_gain10 = 50 - phy_vars_ue->rx_gain_byp[1] + phy_vars_ue->rx_total_gain_dB;
          }
          break;
      default:
          exmimo_pci_interface->rf.rx_gain00 = 50;
          exmimo_pci_interface->rf.rx_gain10 = 50;
          break;
      }
          */
#endif
#endif

#ifdef DEBUG_PHY
157
      /*  if ((phy_vars_ue->frame%100==0) || (phy_vars_ue->frame < 10))
gauthier's avatar
gauthier committed
158 159
    msg("[PHY][ADJUST_GAIN] frame %d,  rx_power = %d, rx_power_fil = %d, rx_power_fil_dB = %d, coef=%d, ncoef=%d, rx_total_gain_dB = %d (%d,%d,%d)\n",
        phy_vars_ue->frame,rx_power,rx_power_fil,rx_power_fil_dB,coef,ncoef,phy_vars_ue->rx_total_gain_dB,
160
	TARGET_RX_POWER,MAX_RF_GAIN,MIN_RF_GAIN);
161
      */
162 163 164 165 166
#endif //DEBUG_PHY
	
}