예제 #1
0
void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,unsigned char extended_prefix_flag,u16 Nid_cell,u8 N_RB_DL,u8 osf) {

  LTE_DL_FRAME_PARMS *lte_frame_parms;

  printf("Start lte_param_init\n");
  PHY_vars_eNB = (PHY_VARS_eNB *)malloc(sizeof(PHY_VARS_eNB));

  PHY_vars_UE = (PHY_VARS_UE *)malloc(sizeof(PHY_VARS_UE));
  //PHY_config = malloc(sizeof(PHY_CONFIG));
//  mac_xface = malloc(sizeof(MAC_xface));

  randominit(0);
  set_taus_seed(0);
  
  lte_frame_parms = &(PHY_vars_eNB->lte_frame_parms);

  lte_frame_parms->N_RB_DL            = N_RB_DL;   //50 for 10MHz and 25 for 5 MHz
  lte_frame_parms->N_RB_UL            = N_RB_DL;   
  lte_frame_parms->Ncp                = extended_prefix_flag;
  lte_frame_parms->Nid_cell           = Nid_cell;
  lte_frame_parms->nushift            = 0;
  lte_frame_parms->nb_antennas_tx     = N_tx;
  lte_frame_parms->nb_antennas_rx     = N_rx;
  //  lte_frame_parms->Csrs = 2;
  //  lte_frame_parms->Bsrs = 0;
  //  lte_frame_parms->kTC = 0;
  //  lte_frame_parms->n_RRC = 0;
  lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
  lte_frame_parms->tdd_config = 1;
  lte_frame_parms->frame_type = 1;
  init_frame_parms(lte_frame_parms,osf);
  
  //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
  
  phy_init_top(lte_frame_parms); //allocation
  
  lte_frame_parms->twiddle_fft      = twiddle_fft;
  lte_frame_parms->twiddle_ifft     = twiddle_ifft;
  lte_frame_parms->rev              = rev;
  
  PHY_vars_UE->lte_frame_parms = *lte_frame_parms;

  phy_init_lte_top(lte_frame_parms);

  phy_init_lte_ue(PHY_vars_UE,0);

  phy_init_lte_eNB(PHY_vars_eNB,0,0,0);


  


  printf("Done lte_param_init\n");

}
예제 #2
0
void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,unsigned char extended_prefix_flag,uint16_t Nid_cell,uint8_t tdd_config)
{

  unsigned int ind;
  LTE_DL_FRAME_PARMS *lte_frame_parms;

  printf("Start lte_param_init (Nid_cell %d, extended_prefix %d, transmission_mode %d, N_tx %d, N_rx %d)\n",
         Nid_cell, extended_prefix_flag,transmission_mode,N_tx,N_rx);
  PHY_vars_eNB = malloc(sizeof(PHY_VARS_eNB));

  PHY_vars_UE = malloc(sizeof(PHY_VARS_UE));
  mac_xface = malloc(sizeof(MAC_xface));

  randominit(0);
  set_taus_seed(0);

  lte_frame_parms = &(PHY_vars_eNB->lte_frame_parms);

  lte_frame_parms->N_RB_DL            = 25;   //50 for 10MHz and 25 for 5 MHz
  lte_frame_parms->N_RB_UL            = 25;
  lte_frame_parms->Ncp                = extended_prefix_flag;
  lte_frame_parms->Nid_cell           = Nid_cell;
  lte_frame_parms->nushift            = 0;
  lte_frame_parms->nb_antennas_tx     = N_tx;
  lte_frame_parms->nb_antennas_rx     = N_rx;
  lte_frame_parms->tdd_config         = tdd_config;

  //  lte_frame_parms->Csrs = 2;
  //  lte_frame_parms->Bsrs = 0;
  //  lte_frame_parms->kTC = 0;
  //  lte_frame_parms->n_RRC = 0;
  lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;

  init_frame_parms(lte_frame_parms,1);

  //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));

  phy_init_top(lte_frame_parms); //allocation


  lte_frame_parms->twiddle_fft      = twiddle_fft;
  lte_frame_parms->twiddle_ifft     = twiddle_ifft;
  lte_frame_parms->rev              = rev;

  memcpy(&PHY_vars_UE->lte_frame_parms,lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));


  phy_init_lte_top(lte_frame_parms);
  phy_init_lte_ue(PHY_vars_UE,1,0);
  phy_init_lte_eNB(PHY_vars_eNB,0,0,0);

  printf("Done lte_param_init\n");


}
예제 #3
0
파일: gd_rx.c 프로젝트: gkchai/garud
void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,uint8_t extended_prefix_flag,uint8_t N_RB_DL,uint8_t frame_type,uint8_t tdd_config,uint8_t osf, int num_bss)
{

      LTE_DL_FRAME_PARMS *lte_frame_parms[num_bss];
      PHY_vars_eNB = malloc(num_bss*sizeof(PHY_VARS_eNB*));
      PHY_vars_UE = malloc(num_bss*sizeof(PHY_VARS_UE*));
      var = malloc(num_bss*sizeof(uint8_t));

      randominit(0);
      set_taus_seed(0);
      mac_xface = malloc(sizeof(MAC_xface));


      int i = 0;
      for (i = 0; i < num_bss; i++){
          PHY_vars_eNB[i] = malloc(sizeof(PHY_VARS_eNB));
          PHY_vars_UE[i] = malloc(sizeof(PHY_VARS_UE));

          lte_frame_parms[i] = &(PHY_vars_eNB[i]->lte_frame_parms);
          lte_frame_parms[i]->frame_type         = frame_type;
          lte_frame_parms[i]->tdd_config         = tdd_config;
          lte_frame_parms[i]->N_RB_DL            = N_RB_DL;   //50 for 10MHz and 25 for 5 MHz
          lte_frame_parms[i]->N_RB_UL            = N_RB_DL;
          lte_frame_parms[i]->Ncp                = extended_prefix_flag;
          lte_frame_parms[i]->Ncp_UL             = extended_prefix_flag;
          lte_frame_parms[i]->Nid_cell           = 10;
          lte_frame_parms[i]->nushift            = 0;
          lte_frame_parms[i]->nb_antennas_tx     = N_tx;
          lte_frame_parms[i]->nb_antennas_rx     = N_rx;
          lte_frame_parms[i]->mode1_flag = (transmission_mode == 1)? 1 : 0;
          lte_frame_parms[i]->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = 0;//n_DMRS1 set to 0

          init_frame_parms(lte_frame_parms[i],osf);
          PHY_vars_UE[i]->lte_frame_parms = *lte_frame_parms[i];
          phy_init_lte_top(lte_frame_parms[i]);
          phy_init_lte_ue(PHY_vars_UE[i],1,0);
          phy_init_lte_eNB(PHY_vars_eNB[i],0,0,0);

    }



}
예제 #4
0
void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs],
                   uint8_t frame_type,
                   uint8_t tdd_config,
                   uint8_t tdd_config_S,
                   uint8_t extended_prefix_flag,
                   uint8_t N_RB_DL,
                   uint16_t Nid_cell,
                   uint8_t cooperation_flag,uint8_t transmission_mode,uint8_t abstraction_flag,
                   int nb_antennas_rx, uint8_t eMBMS_active_state)
{

  uint8_t eNB_id,UE_id,RN_id,CC_id;

  mac_xface = malloc(sizeof(MAC_xface));

  memset(mac_xface, 0, sizeof(MAC_xface));

  LOG_I(PHY,"init lte parms: Nid_cell %d, Frame type %d, N_RB_DL %d\n",Nid_cell,frame_type,N_RB_DL);

  for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
    frame_parms[CC_id] = calloc(1, sizeof(LTE_DL_FRAME_PARMS));
    (frame_parms[CC_id])->frame_type         = frame_type;
    (frame_parms[CC_id])->tdd_config         = tdd_config;
    (frame_parms[CC_id])->tdd_config_S       = tdd_config_S;
    (frame_parms[CC_id])->N_RB_DL            = N_RB_DL;
    (frame_parms[CC_id])->N_RB_UL            = (frame_parms[CC_id])->N_RB_DL;
    (frame_parms[CC_id])->phich_config_common.phich_resource = oneSixth;
    (frame_parms[CC_id])->phich_config_common.phich_duration = normal;
    (frame_parms[CC_id])->Ncp                = extended_prefix_flag;
    (frame_parms[CC_id])->Nid_cell           = Nid_cell;
    (frame_parms[CC_id])->nushift            = (Nid_cell%6);
    (frame_parms[CC_id])->nb_antennas_tx     = (transmission_mode == 1) ? 1 : 2;
    (frame_parms[CC_id])->nb_antennas_tx_eNB = (transmission_mode == 1) ? 1 : 2;
    (frame_parms[CC_id])->nb_antennas_rx     = (transmission_mode == 1) ? 1 : 2;
    (frame_parms[CC_id])->mode1_flag = (transmission_mode == 1) ? 1 : 0;

    init_frame_parms(frame_parms[CC_id],1);

    (frame_parms[CC_id])->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = 0;//n_DMRS1 set to 0
    (frame_parms[CC_id])->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = 1;
    (frame_parms[CC_id])->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = 0;
    (frame_parms[CC_id])->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH = 0;
    init_ul_hopping(frame_parms[CC_id]);
  }


  //  phy_init_top(frame_parms[0]);

  phy_init_lte_top(frame_parms[0]);

  PHY_vars_eNB_g = (PHY_VARS_eNB***)malloc(NB_eNB_INST*sizeof(PHY_VARS_eNB**));

  for (eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++) {
    PHY_vars_eNB_g[eNB_id] = (PHY_VARS_eNB**) malloc(MAX_NUM_CCs*sizeof(PHY_VARS_eNB*));

    for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
      PHY_vars_eNB_g[eNB_id][CC_id] = init_lte_eNB(frame_parms[CC_id],eNB_id,Nid_cell,cooperation_flag,transmission_mode,abstraction_flag);
      PHY_vars_eNB_g[eNB_id][CC_id]->Mod_id=eNB_id;
      PHY_vars_eNB_g[eNB_id][CC_id]->CC_id=CC_id;
    }
  }


  PHY_vars_UE_g = (PHY_VARS_UE***)malloc(NB_UE_INST*sizeof(PHY_VARS_UE**));

  for (UE_id=0; UE_id<NB_UE_INST; UE_id++) {
    PHY_vars_UE_g[UE_id] = (PHY_VARS_UE**) malloc(MAX_NUM_CCs*sizeof(PHY_VARS_UE*));

    for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
      (frame_parms[CC_id])->nb_antennas_tx     = 1;
      (frame_parms[CC_id])->nb_antennas_rx     = nb_antennas_rx;


      PHY_vars_UE_g[UE_id][CC_id] = init_lte_UE(frame_parms[CC_id], UE_id,abstraction_flag,transmission_mode);
      PHY_vars_UE_g[UE_id][CC_id]->Mod_id=UE_id;
      PHY_vars_UE_g[UE_id][CC_id]->CC_id=CC_id;
    }
  }

  if (NB_RN_INST > 0) {
    PHY_vars_RN_g = malloc(NB_RN_INST*sizeof(PHY_VARS_RN*));

    for (RN_id=0; RN_id<NB_RN_INST; RN_id++) {
      PHY_vars_RN_g[RN_id] = init_lte_RN(*frame_parms,RN_id,eMBMS_active_state);
    }
  }

}
예제 #5
0
파일: openair_rf.c 프로젝트: a4a881d4/oai
int main (int argc, char **argv) {

  int openair_fd,rx_sig_fifo_fd,frequency,i;

  unsigned int action;
  char *dma_buffer_local;
  char device_name[16];
  unsigned char temp[4];
  unsigned int tmp;
  int result=-1;

  FILE *chbch_file,*rx_frame_file,*tx_frame_file;
  unsigned int fc;
  int  ifreq, target_freq;

  char *chbch_pdu;
  int chbch_size;

  TX_VARS *TX_vars;
  LTE_DL_FRAME_PARMS *frame_parms;

  if (argc < 3) {
    printf("[openair][INFO] Usage %s  frequency(0,1,2,3)  action (0-14) params . . .  \n" , argv[0]);
    printf("[openair][INFO] ACTION DESCRIPTIONS\n");
    printf("[openair][INFO] Action 0  : Configure PHY/MAC (Kernel module and FPGA) - param dual_tx (0/1) - param tdd (0/1)\n");
    printf("[openair][INFO] Action 1  : Start Primary Clusterhead - param 0/1 = frequency offset on/off - param NODE_ID\n");
    printf("[openair][INFO] Action 2  : Start Secondary Clusterhead - param 0/1 = frequency offset on/off - param NODE_ID\n");
    printf("[openair][INFO] Action 3  : Start Node - param 0/1 = frequency offset on/off - param NODE_ID\n");
    printf("[openair][INFO] Action 4  : Standby - param 0/1 = frequency offset on/off\n");
    printf("[openair][INFO] Action 5  : Get frame and save to rx_frame.dat - param 0/1 = frequency offset on/off\n");
    printf("[openair][INFO] Action 6  : Set TX gains - param 2394_0 (0-255),9862_TX_0(0-255),2394_1(0-255),9862_TX_1(0-255)\n");
    printf("[openair][INFO] Action 7  : Set RX gains - param 2391_0 (0-255),9862_RX_0(0-19),2391_1(0-255),9862_RX_1(0-19) (also turns off AGC)\n");
    printf("[openair][INFO] Action 8  : TX C/W @ fs/4 + offset - param 0/1 = 66 kHz frequency offset on/off\n");
    printf("[openair][INFO] Action 9  : TX OFDM/QPSK - param 0/1 = 66 kHz frequency offset on/off\n");
    printf("[openair][INFO] Action 10 : TX SCCP/QPSK param 0/1 = 66 kHz frequency offset on/off\n");
    printf("[openair][INFO] Action 11 : TX SCCP/16QAM param 0/1 = 66 kHz frequency offset on/off\n");
    printf("[openair][INFO] Action 12 : TX I/Q impulses (delay test)\n");
    printf("[openair][INFO] Action 13 : TX real C/W fs/4 + offset with DC component - param 0/1 = 66 kHz frequency offset off/on\n");  
    printf("[openair][INFO] Action 14 : SET RX RF Mode - param\n");
    printf("[openair][INFO] Action 15 : SET TCXO param (set > 255 to use calibrated value)\n");
    printf("[openair][INFO] Action 16 : SET CALIBRATED RX GAIN param (also turns off AGC)\n");
    printf("[openair][INFO] Action 22 : Update SoC firmware\n");
    printf("[openair][INFO] Action 25 : SET TIMING ADVANCE param\n");
    printf("[openair][INFO] Action 26 : SET FREQ OFFSET param\n");
    printf("[openair][INFO] Action 27 : Start Primary Clusterhead in cognitive mode - param 0/1 = frequency offset on/off - param NODE_ID\n");
    printf("[openair][INFO] Action 28 : Set UE DL MCS - param 0-31\n");
    printf("[openair][INFO] Action 29 : Set UE UL MCS - param 0-31\n");
    printf("[openair][INFO] Action 30 : Start UE UL NB RB 2-9\n");
    printf("[openair][INFO] Action 31 : Start UE Rate Adaptation param 0/1\n");
    printf("[openair][INFO] Action 32 : Set DLSCH Transmission Mode param 1-7\n");
    printf("[openair][INFO] Action 33 : Set ULSCH Allocation Mode param 0-2\n");
    printf("[openair][INFO] Action 35 : Set cooperation flag (0=no coop, 1=delay diversity, 2=distrib Alamouti)\n");
    exit (-1);
  }


  frequency = atoi(argv[1]);
  //  printf ("[openair][INFO][START] RBT file            is %s\n", argv[2]);
  printf ("[openair][INFO][START] Frequency           is %d\n", frequency);
  //  printf ("[openair][INFO][START] number of antennas  is %d\n", nb_rf_cards);

  action = atoi(argv[2]);

  if (action == 0) // configure
    printf("[openair][INFO][START] Action              is : configuration\n");
  else if (action == 1) // start clusterhead
    printf("[openair][INFO][START] Action              is : start primary clusterhead\n");
  else if (action == 2) // start terminode
    printf("[openair][INFO][START] Action              is : start secondary clusterhead\n");
  else if (action == 3) // stop
    printf("[openair][INFO][START] Action              is : start node\n");
  else if (action == 4) // stop
    printf("[openair][INFO][START] Action              is : stop\n");
  else if (action == 5) // stop
    printf("[openair][INFO][START] Action              is : GET_FRAME\n");
  else if (action == 6) // stop
    printf("[openair][INFO][START] Action              is : SET_TX_GAIN\n");
  else if (action == 7) // stop
    printf("[openair][INFO][START] Action              is : SET_RX_GAIN\n");
  else if (action == 8) // stop
    printf("[openair][INFO][START] Action              is : START_FS4_TEST\n");
  else if (action == 9) // stop
    printf("[openair][INFO][START] Action              is : START_OFDM_TEST\n");
  else if (action == 11) // stop
    printf("[openair][INFO][START] Action              is : START_QAM16_TEST\n");
  else if (action == 10) // stop
    printf("[openair][INFO][START] Action              is : START_QPSK_TEST\n");
  else if (action == 12) // stop
    printf("[openair][INFO][START] Action              is : START_IQ_IMPULSES_TEST\n");
  else if (action == 13) // stop
    printf("[openair][INFO][START] Action              is : START_REAL_FS4_WITH_DC_TEST\n");
  else if (action == 14) // stop
    printf("[openair][INFO][START] Action              is : SET_RX_RF MODE\n");
  else if (action == 15) // stop
    printf("[openair][INFO][START] Action              is : SET_TCXO_DAC\n");
  else if (action == 16) // Set calibrated gain
    printf("[openair][INFO][START] Action              is : SET_CALIBRATED_RX_GAIN\n");
  else if (action == 22) // Update firmware
    printf("[openair][INFO][START] Action              is : UPDATE_FIRMWARE\n");
  else if (action == 23) // Set Topology info
    printf("[openair][INFO][START] Action              is : SET_TOPOLOGY_INFORMATION\n");
  else if (action == 24) // Stop_EMULATION_TX_RX for node// disconnect from CH
    printf("[openair][INFO][START] Action              is : STOP_EMULATION_TX_RX\n");
  else if (action == 25) // Set timing advance
    printf("[openair][INFO][START] Action              is : SET_TIMING_ADVANCE\n");
  else if (action == 26) // Set freq offset
    printf("[openair][INFO][START] Action              is : SET_FREQ_OFFSET\n");
  else if (action == 28) // 
    printf("[openair][INFO][START] Action              is : SET_UE_DL_MCS\n");
  else if (action == 29) // 
    printf("[openair][INFO][START] Action              is : SET_UE_UL_MCS\n");
  else if (action == 30) // 
    printf("[openair][INFO][START] Action              is : SET_UE_UL_NB_RB\n");
  else if (action == 31) // 
    printf("[openair][INFO][START] Action              is : SET_DLSCH_RATE_ADAPTATION\n");
  else if (action == 32) // 
    printf("[openair][INFO][START] Action              is : SET_DLSCH_TRANSMISSION_MODE\n");
  else if (action == 33) // 
    printf("[openair][INFO][START] Action              is : SET_ULSCH_ALLOCATION_MODE\n");
  else if (action == 39) // Send EMOS Rec flag
    printf("[openair][INFO][START] Action              is : START_EMOS_NODEB\n");
  else {
    printf("[openair][INFO][START] Action              is : unknown action %d\n",action);
  }


  printf("[openair][INFO][START] Opening /dev/openair0\n");
  if ((openair_fd = open("/dev/openair0", O_RDWR,0)) <0) {
    fprintf(stderr,"Error %d opening /dev/openair0\n",openair_fd);
    exit(-1);
  }

  //PHY_config = (PHY_CONFIG *)&PHY_config_mem;
  //PHY_vars = malloc(sizeof(PHY_VARS));
  //mac_xface = malloc(sizeof(MAC_xface));
  TX_vars = malloc(sizeof(TX_VARS));
  frame_parms = malloc(sizeof(LTE_DL_FRAME_PARMS));

  frame_parms->N_RB_DL            = 25;
  frame_parms->N_RB_UL            = 25;
  frame_parms->Nid_cell           = 0;
  frame_parms->Ncp                = 1;
  frame_parms->Ncp_UL             = 1;
  frame_parms->nushift            = 0;
  frame_parms->frame_type         = 1; //TDD
  frame_parms->tdd_config         = 3;
  frame_parms->tdd_config_S       = 0;
  frame_parms->mode1_flag         = 0; 
  frame_parms->nb_antennas_tx     = 2; //NB_ANTENNAS_TX;
  frame_parms->nb_antennas_rx     = 2; //NB_ANTENNAS_RX;

  frame_parms->phich_config_common.phich_resource = oneSixth;
  frame_parms->phich_config_common.phich_duration = normal;
  
  init_frame_parms(frame_parms,1);

  printf("Initialized PHY variables\n");


#ifndef OPENAIR_LTE
  chbch_size = (NUMBER_OF_USEFUL_CARRIERS*NUMBER_OF_CHBCH_SYMBOLS)>>3;
  chbch_pdu  = malloc(chbch_size);

  for (i=0;i<chbch_size-4;i++) {
    chbch_pdu[i] = i;
  }

  printf("Filled CHBCH PDU with random data\n");
#endif //OPENAIR_LTE

  dma_buffer_local = (char *)malloc(NB_ANTENNAS_RX*FRAME_LENGTH_BYTES);

  if (!dma_buffer_local) {
    printf("could not allocated dma buffer\n");
    exit(-1);
  }

  printf("Running action %d\n",action);
  switch (action) {

  case 0 :

    if (argc<5) {
      printf("Please provide fdd parameter (0/1)\n");
      exit(-1);
    }
    if (argc<4) {
      printf("Please provide dual_tx parameter (0/1)\n");
      exit(-1);
    }
    frame_parms->dual_tx    = (unsigned char) atoi(argv[3]);
    frame_parms->frame_type = (unsigned char) atoi(argv[4]);
    frame_parms->freq_idx   = (unsigned char) frequency;

    dump_frame_parms(frame_parms);

    result=ioctl(openair_fd, openair_DUMP_CONFIG,(char *)frame_parms);
    if (result == 0) {
      printf ("[openair][CONFIG][INFO] loading openair configuration in kernel space\n");
    } else {
      printf ("[openair][START][INFO] loading openair configuration in kernel space failed \n");
    }


    break;
    
  case 1 :
    printf("[openair][START][INFO] Starting clusterhead\n");
    fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4) | ((atoi(argv[4])&0xFF) << 7);
    printf("[openair][START][INFO] fc = %d\n",fc);
    result=ioctl(openair_fd,openair_START_1ARY_CLUSTERHEAD, &fc);
    if (result == 0) {
      printf ("[openair][START][INFO] primary clusterhead running\n");
    } else {
      printf ("[openair][START][INFO] starting primary clusterhead failed \n");
    }
    break;
  case 2 :
    printf("[openair][START][INFO] Starting secondary clusterhead\n");
    fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4) |  ((atoi(argv[4])&0xFF) << 7);
    result=ioctl(openair_fd,openair_START_2ARY_CLUSTERHEAD,&fc);
    if (result == 0) {
      printf ("[openair][START][INFO] secondary clusterhead running\n");
    } else {
      printf ("[openair][START][INFO] starting secondary clusterhead failed \n");
    }

    break;

  case 3 :
    printf("[openair][START][INFO] Starting NODE ...(%x)\n",openair_START_NODE);
    fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4) |  ((atoi(argv[4])&0xFF) << 7);
    result=ioctl(openair_fd,openair_START_NODE, &fc);

    if (result == 0) {
      printf ("[openair][START][INFO] ok! \n");
    } else {
      printf ("[openair][START][INFO] not ok! \n");
    }



    break;

  case 4 : 
    printf("[openair][START][INFO] Stoping ...\n");
    fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4);

    result=ioctl(openair_fd,openair_STOP,(void *)&fc);
    if (result == 0) {
      printf ("[openair][STOP][INFO] ok! \n");
    } else {
      printf ("[openair][STOP][INFO] not ok! \n");
    }

    /*
    if ((rx_frame_file = fopen("rx_frame.dat","w")) == NULL)
      {
	printf("[openair][STOP][INFO] Cannot open rx_frame.m data file\n");
	exit(0);
      }

    read(rx_sig_fifo_fd,(void *)dma_buffer_local,NB_ANTENNAS_RX*FRAME_LENGTH_BYTES);
    fwrite(dma_buffer_local,4,NB_ANTENNAS_RX*FRAME_LENGTH_COMPLEX_SAMPLES,rx_frame_file);
    fclose(rx_frame_file);
    */

    break;

  case 5 : 

    if ((rx_frame_file = fopen("rx_frame.dat","w")) == NULL)
      {
	printf("[openair][INFO] Cannot open rx_frame.m data file\n");
	exit(0);
      }

    if ((rx_sig_fifo_fd = open("/dev/rtf59",O_RDONLY,0)) <0)
      {
	printf("[openair][INFO] Cannot open rx_sig_fifo\n");
	exit(0);
      }

    fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4);
    ioctl(openair_fd,openair_GET_BUFFER,(void *)&fc);

    sleep(2);

    read(rx_sig_fifo_fd,(void *)dma_buffer_local,NB_ANTENNAS_RX*FRAME_LENGTH_BYTES);
    fwrite(dma_buffer_local,4,NB_ANTENNAS_RX*FRAME_LENGTH_COMPLEX_SAMPLES,rx_frame_file);

    fclose(rx_frame_file);
    break;

  case 6 :
    printf("[openair][START][INFO] Setting TX gains to %d,%d,%d,%d\n",atoi(argv[3]),atoi(argv[4]),atoi(argv[5]),atoi(argv[6]));
    temp[0] = atoi(argv[3]);
    temp[1] = atoi(argv[4]);
    temp[2] = atoi(argv[5]);
    temp[3] = atoi(argv[6]);

    result=ioctl(openair_fd,openair_SET_TX_GAIN,&temp[0]);
    break;

  case 7 :
    printf("[openair][START][INFO] Setting RX gains to %d,%d,%d,%d\n",atoi(argv[3]),atoi(argv[4]),atoi(argv[5]),atoi(argv[6]));
    temp[0] = atoi(argv[3]);
    temp[1] = atoi(argv[4]);
    temp[2] = atoi(argv[5]);
    temp[3] = atoi(argv[6]);


    result=ioctl(openair_fd,openair_SET_RX_GAIN,&temp[0]);
    break;

  case 8 :
    printf("[openair][START][INFO] TX Test FS/4\n");
    fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4);
    result=ioctl(openair_fd,openair_START_FS4_TEST,&fc);
    break;

  case 9 :
    printf("[openair][START][INFO] TX Test OFDM, first_rb %d, nb_rb %d\n",atoi(argv[4]),atoi(argv[5]) );
    /*
    if ((tx_frame_file = fopen("tx_frame.dat","w")) == NULL)
      {
	printf("[openair][INFO] Cannot open tx_frame.dat data file\n");
	exit(0);
      }
    
    //openair_generate_ofdm(1,0xffff,chbch_pdu);
    openair_generate_ofdm(TX_vars,4,0,0);

    printf("[openair][START][INFO] TX_DMA_BUFFER = %p\n",TX_vars->TX_DMA_BUFFER[0]);
    result=ioctl(openair_fd,openair_START_TX_SIG,(void *)TX_vars);
#ifdef IFFT_FPGA
    fwrite(TX_vars->TX_DMA_BUFFER[0],1,NUMBER_OF_USEFUL_CARRIERS*NUMBER_OF_SYMBOLS_PER_FRAME,tx_frame_file);
#else
    fwrite(TX_vars->TX_DMA_BUFFER[0],4,FRAME_LENGTH_COMPLEX_SAMPLES,tx_frame_file);
#endif
    fclose(tx_frame_file);
    */

    fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4) | (atoi(argv[4])<<7) | (atoi(argv[5])<<12);
    result=ioctl(openair_fd,openair_START_OFDM_TEST,&fc);
   
    break;

  case 10 :
    printf("[openair][START][INFO] TX Test QAM16\n");
    fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4);;
    result=ioctl(openair_fd,openair_START_QAM16_TEST,&fc);
    break;

  case 11 :
    printf("[openair][START][INFO] TX Test QPSK\n");
    fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4);;
    result=ioctl(openair_fd,openair_START_QPSK_TEST,&fc);
    break;

  case 12 :
    printf("[openair][START][INFO] TX Test I/Q Impulses\n");
    fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4);;
    result=ioctl(openair_fd,openair_START_IQ_IMPULSES_TEST,&fc);
    break;

  case 13:
    //printf("[openair][START][INFO] FS4 Test with DC\n");
    printf("[openair][START][INFO] FS4 Test\n");
    fc = atoi(argv[3]);
    //result=ioctl(openair_fd,openair_START_REAL_FS4_WITH_DC_TEST,&fc);
    result=ioctl(openair_fd,openair_START_FS4_TEST,&fc);
    break;

  case 14:        // SET RX RF MODE
    printf("[openair][START][INFO] SET RX RF MODE\n");
    fc = atoi(argv[3]);
    result=ioctl(openair_fd,openair_RX_RF_MODE,&fc);
    break;

  case 15:        // SET TCXO DAC level
    printf("[openair][START][INFO] SET TCXO DAC\n");
    fc = atoi(argv[3]);
    result=ioctl(openair_fd,openair_SET_TCXO_DAC,&fc);
    break;

  case 16:        // SET Calibrated
    printf("[openair][START][INFO] SET RX GAIN\n");
    fc = atoi(argv[3]);
    result=ioctl(openair_fd,openair_SET_CALIBRATED_RX_GAIN,&fc);
    break;

    /*
  case 17:        // DO SYNCHRONIZATION
    printf("[openair][INFO] Do CHBCH Synchronization\n");
    ((unsigned char *)&dma_buffer_local[0])[0] = (unsigned char)((atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4));
    ((unsigned char *)&dma_buffer_local[0])[1] = (unsigned char)(atoi(argv[4]));
    ioctl(openair_fd,openair_DO_SYNCH,(void *)dma_buffer_local);
    break;

  case 18:        // GET SIGNALS

    temp[0] = atoi(argv[4]);
    
    if (temp[0]==0)
      printf("[openair][START][INFO] Get Synch Symbols\n");
    else if (temp[0]==1)
      printf("[openair][START][INFO] Get Channel Estimate\n");
    else if (temp[0]==2)
      printf("[openair][START][INFO] Get Estimated data\n");
    else if (temp[0]==3)
      printf("[openair][START][INFO] Get Decoded Data\n");
    else
      printf("[openair][START][INFO] Get Signals : wrong selection (choose from 0-3)\n");
    

    if ((rx_frame_file = fopen("rx_frame.dat","w")) == NULL)
      {
	printf("[openair][GET_SIGNALS][INFO] Cannot open rx_frame.dat data file\n");
	exit(0);
      }
    
    ((unsigned int *)&dma_buffer_local[0])[0] = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4);
    ((unsigned char *)&dma_buffer_local[0])[1] = (unsigned char)(atoi(argv[4]));

    if (temp[0] < 4)
      ioctl(openair_fd,openair_GET_SIGNALS,(void *)dma_buffer_local);
    //    sleep(2);
    
    fwrite(dma_buffer_local,4,7*256,rx_frame_file);
    
    fclose(rx_frame_file);
    break;
    */
    
  case 19:        // SET FFT SCALE
    printf("[openair][START][INFO] Set FFT Scale to %d, %d\n",atoi(argv[3]),atoi(argv[4]));
    
    temp[0] = atoi(argv[3]);
    temp[1] = atoi(argv[4]);
    result=ioctl(openair_fd,openair_SET_FFT_SCALE,&temp[0]);
    break;


  case 21:        // FFT TEST
    fc = atoi(argv[3]);
    result=ioctl(openair_fd,openair_SET_CALIBRATED_RX_GAIN,&fc);
    break;

  case 22:
    result=ioctl(openair_fd, openair_UPDATE_FIRMWARE);
    if (result) printf("[openair][START][INFO] NOK, ioctl failed\n");
    break;

/*
//#else //PHY_EMUL_IOCTL
  case 23 :
    printf("[OPENAIR][START][Topology] Configuring Topology,\n",argc);
    unsigned short ri=0,rj=3,Nb_inst,Nb_ch,Nb_ue,kk;
    Topo_info[ri++]=atoi(argv[rj++]);//NUMBER OF EMULATION MASTER (Machines)
    printf("NUMBER OF MASTER %d\n",Topo_info[ri-1]);
    Topo_info[ri++]=atoi(argv[rj++]);//LOCAL MASTER ID
    printf("LOCAL MASTER ID %d\n",Topo_info[ri-1]);
    Nb_inst=atoi(argv[rj++]);//LOCAL NUMBER OF INSTANCES
    Topo_info[ri++]=Nb_inst;
    printf("NUMBER OF INSTANCE %d\n",Topo_info[ri-1]);
    for(i=0;i<Nb_inst;i++){
      printf("INSTANCE %d\n",i);
      Topo_info[ri++]=atoi(argv[rj++]);//Node_id of Instance i 
      printf("NODE_ID %d\n",Topo_info[ri-1]);
      Nb_ch=atoi(argv[rj++]);//Number of CH in the range
      Topo_info[ri++]=Nb_ch;
      printf("NB_CH %d\n",Topo_info[ri-1]);
      for(kk=0;kk<Nb_ch;kk++)
	Topo_info[ri++]=atoi(argv[rj++]);//List of CH IDs in the range
      Nb_ue=atoi(argv[rj++]);//Number of UE in the range
      Topo_info[ri++]=Nb_ue;
      printf("NB_UE %d\n",Topo_info[ri-1]);
      for(kk=0;kk<Nb_ue;kk++)
	Topo_info[ri++]=atoi(argv[rj++]);//List of UE IDs in the range
    }
    result=ioctl(openair_fd,openair_config_topology, &Topo_info[0]);
    
    if (result == 0) {
      printf ("[openair][START][Topology] ok! \n");
    } else {
      printf ("[openair][START][Topology] not ok! \n");
    }
    break;

case 24 :
    printf("[OPENAIR][STOP][EMULTION] Disconnect Node\n");
    Topo_info[0]=atoi(argv[3]);
    result=ioctl(openair_fd,openair_stop_emulation, &Topo_info[0]);

    if (result == 0) {
      printf ("[openair][STOP][EMULATION] ok! \n");
    } else {
      printf ("[openair][STOP][EMULATION] not ok! \n");
    }
    break;
//#endif //PHY_EMUL_IOCTL
*/

  case 25:
    
    fc = atoi(argv[3]);
    printf("[openair][START][INFO] SET TIMING ADVANCE to %d\n",fc);
    result = ioctl(openair_fd,openair_SET_TIMING_ADVANCE, &fc);
    break;

  case 26:
    
    fc = atoi(argv[3]);
    printf("[openair][START][INFO] SET FREQ OFFSET to %d\n",fc);
    result = ioctl(openair_fd,openair_SET_FREQ_OFFSET, &fc);
    break;

  case 27 :
    printf("[openair][START][INFO] Starting clusterhead in cognitive mode\n");
    fc = 0; //dummy value  - not needed
    result=ioctl(openair_fd,openair_START_1ARY_CLUSTERHEAD_COGNITIVE, &fc);
    if (result == 0) {
      printf ("[openair][START][INFO] primary clusterhead running\n");
    } else {
      printf ("[openair][START][INFO] starting primary clusterhead failed \n");
    }
    break;

  case 28:
    
    fc = atoi(argv[3]);
    printf("[openair][START][INFO] SET UE DL MCS to %d\n",fc);
    result = ioctl(openair_fd,openair_SET_UE_DL_MCS, &fc);
    break;

  case 29:
    
    fc = atoi(argv[3]);
    printf("[openair][START][INFO] SET UE UL MCS to %d\n",fc);
    result = ioctl(openair_fd,openair_SET_UE_UL_MCS, &fc);
    break;

  case 30:
    
    fc = atoi(argv[3]);
    printf("[openair][START][INFO] SET UE NB_RB to %d\n",fc);
    result = ioctl(openair_fd,openair_SET_UE_UL_NB_RB, &fc);
    break;

  case 31:
    
    fc = atoi(argv[3]);
    printf("[openair][START][INFO] SET DLSCH Rate Adaptation to %d\n",fc);
    result = ioctl(openair_fd,openair_SET_DLSCH_RATE_ADAPTATION, &fc);
    break;

  case 32:
    
    fc = atoi(argv[3]);
    printf("[openair][START][INFO] SET DLSCH Transmission Mode to %d\n",fc);
    result = ioctl(openair_fd,openair_SET_DLSCH_TRANSMISSION_MODE, &fc);
    break;

  case 33:
    
    fc = atoi(argv[3]);
    printf("[openair][START][INFO] SET ULSCH Allocation Mode to %d\n",fc);
    result = ioctl(openair_fd,openair_SET_ULSCH_ALLOCATION_MODE, &fc);
    break;

  case 34:

    result = ioctl(openair_fd,openair_SET_RRC_CONN_SETUP, NULL);
    break;

  case 35: 

    fc = atoi(argv[3]);
    result = ioctl(openair_fd,openair_SET_COOPERATION_FLAG, &fc);
    break;
	
  default: 

    printf("[openair] Action unknown\n");
    return(-1);

  }
  
  close(openair_fd);
  
  return(0);
}
예제 #6
0
파일: dlsim.c 프로젝트: a4a881d4/oai
void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode) {

  unsigned int ind;

  printf("Start lte_param_init\n");
  PHY_vars_eNb = malloc(sizeof(PHY_VARS_eNB));
  PHY_vars_UE = malloc(sizeof(PHY_VARS_UE));
  PHY_config = malloc(sizeof(PHY_CONFIG));
  mac_xface = malloc(sizeof(MAC_xface));

  randominit(0);
  set_taus_seed(0);
  
  lte_frame_parms = &(PHY_vars_eNb->lte_frame_parms);

  lte_frame_parms->N_RB_DL            = 25;   //50 for 10MHz and 25 for 5 MHz
  lte_frame_parms->N_RB_UL            = 25;   
  lte_frame_parms->Ncp                = 1;
  lte_frame_parms->Nid_cell           = 0;
  lte_frame_parms->nushift            = 0;
  lte_frame_parms->nb_antennas_tx     = N_tx;
  lte_frame_parms->nb_antennas_rx     = N_rx;
  lte_frame_parms->first_dlsch_symbol = 4;
  lte_frame_parms->num_dlsch_symbols  = 6;
  lte_frame_parms->Csrs = 2;
  lte_frame_parms->Bsrs = 0;
  lte_frame_parms->kTC = 0;
  lte_frame_parms->n_RRC = 0;
  lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;

  init_frame_parms(lte_frame_parms);
  
  copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
  
  phy_init_top(N_tx); //allocation
  
  lte_frame_parms->twiddle_fft      = twiddle_fft;
  lte_frame_parms->twiddle_ifft     = twiddle_ifft;
  lte_frame_parms->rev              = rev;
  
  PHY_vars_UE->lte_frame_parms = *lte_frame_parms;
  
  lte_gold(lte_frame_parms);
  generate_ul_ref_sigs();
  generate_ul_ref_sigs_rx();
  generate_64qam_table();
  generate_16qam_table();
  generate_RIV_tables();

  generate_pcfich_reg_mapping(lte_frame_parms);
  generate_phich_reg_mapping_ext(lte_frame_parms);

  phy_init_lte_ue(&PHY_vars_UE->lte_frame_parms,
		  &PHY_vars_UE->lte_ue_common_vars,
		  PHY_vars_UE->lte_ue_dlsch_vars,
		  PHY_vars_UE->lte_ue_dlsch_vars_cntl,
		  PHY_vars_UE->lte_ue_dlsch_vars_ra,
		  PHY_vars_UE->lte_ue_dlsch_vars_1A,
		  PHY_vars_UE->lte_ue_pbch_vars,
		  PHY_vars_UE->lte_ue_pdcch_vars,
		  PHY_vars_UE);

  phy_init_lte_eNB(&PHY_vars_eNb->lte_frame_parms,
		   &PHY_vars_eNb->lte_eNB_common_vars,
		   PHY_vars_eNb->lte_eNB_ulsch_vars,
		   0,
		   PHY_vars_eNb);

  
  printf("Done lte_param_init\n");


}
예제 #7
0
void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,unsigned char extended_prefix_flag,unsigned char frame_type, uint16_t Nid_cell,uint8_t N_RB_DL,uint8_t osf)
{

  //  unsigned int ind;
  LTE_DL_FRAME_PARMS *lte_frame_parms;
  int i;

  printf("Start lte_param_init\n");
  PHY_vars_eNb = malloc(sizeof(PHY_VARS_eNB));
  PHY_vars_eNb1 = malloc(sizeof(PHY_VARS_eNB));
  PHY_vars_eNb2 = malloc(sizeof(PHY_VARS_eNB));

  PHY_vars_UE = malloc(sizeof(PHY_VARS_UE));
  //PHY_config = malloc(sizeof(PHY_CONFIG));
  mac_xface = malloc(sizeof(MAC_xface));

  randominit(0);
  set_taus_seed(0);

  lte_frame_parms = &(PHY_vars_eNb->lte_frame_parms);

  lte_frame_parms->N_RB_DL            = N_RB_DL;   //50 for 10MHz and 25 for 5 MHz
  lte_frame_parms->N_RB_UL            = N_RB_DL;
  lte_frame_parms->Ncp                = extended_prefix_flag;
  lte_frame_parms->Nid_cell           = Nid_cell;
  lte_frame_parms->nushift            = Nid_cell%6;
  lte_frame_parms->nb_antennas_tx     = N_tx;
  lte_frame_parms->nb_antennas_tx_eNB = N_tx;
  lte_frame_parms->nb_antennas_rx     = N_rx;
  //  lte_frame_parms->Csrs = 2;
  //  lte_frame_parms->Bsrs = 0;
  //  lte_frame_parms->kTC = 0;
  //  lte_frame_parms->n_RRC = 0;
  lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0;
  lte_frame_parms->tdd_config = 3;
  lte_frame_parms->frame_type = frame_type;
  init_frame_parms(lte_frame_parms,osf);

  //copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));


  PHY_vars_UE->lte_frame_parms = *lte_frame_parms;

  phy_init_lte_top(lte_frame_parms);

  PHY_vars_UE->PHY_measurements.n_adj_cells=2;
  PHY_vars_UE->PHY_measurements.adj_cell_id[0] = Nid_cell+1;
  PHY_vars_UE->PHY_measurements.adj_cell_id[1] = Nid_cell+2;

  for (i=0; i<3; i++)
    lte_gold(lte_frame_parms,PHY_vars_UE->lte_gold_table[i],Nid_cell+i);

  phy_init_lte_ue(PHY_vars_UE,1,0);

  phy_init_lte_eNB(PHY_vars_eNb,0,0,0);

  for (i=0; i<10; i++) {
    PHY_vars_UE->scan_info[0].amp[0][i] = 0;
    PHY_vars_UE->scan_info[0].amp[1][i] = 0;
    PHY_vars_UE->scan_info[0].amp[2][i] = 0;
  }

  memcpy((void*)&PHY_vars_eNb1->lte_frame_parms,(void*)&PHY_vars_eNb->lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
  PHY_vars_eNb1->lte_frame_parms.Nid_cell=Nid_cell+1;
  PHY_vars_eNb1->lte_frame_parms.nushift=(Nid_cell+1)%6;
  PHY_vars_eNb1->Mod_id=1;

  memcpy((void*)&PHY_vars_eNb2->lte_frame_parms,(void*)&PHY_vars_eNb->lte_frame_parms,sizeof(LTE_DL_FRAME_PARMS));
  PHY_vars_eNb2->lte_frame_parms.Nid_cell=Nid_cell+2;
  PHY_vars_eNb2->lte_frame_parms.nushift=(Nid_cell+2)%6;
  PHY_vars_eNb2->Mod_id=2;

  phy_init_lte_eNB(PHY_vars_eNb1,0,0,0);

  phy_init_lte_eNB(PHY_vars_eNb2,0,0,0);

  phy_init_lte_top(lte_frame_parms);

  printf("Done lte_param_init\n");


}