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"); }
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"); }
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); } }
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); } } }
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); }
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"); }
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"); }