updated config files for band 7 for exmimo2 and USRP
fixed bug in lte-softmodem for USRP and other minor updates other small fixes tested on EXMIMO and USRP git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5936 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -531,6 +531,8 @@ int16_t get_hundred_times_delta_IF_eNB(PHY_VARS_eNB *phy_vars_eNB,uint8_t UE_id,
|
|||||||
|
|
||||||
int16_t get_hundred_times_delta_IF_mac(module_id_t module_idP, uint8_t CC_id, rnti_t rnti, uint8_t harq_pid);
|
int16_t get_hundred_times_delta_IF_mac(module_id_t module_idP, uint8_t CC_id, rnti_t rnti, uint8_t harq_pid);
|
||||||
|
|
||||||
|
int16_t get_target_ul_rx_power(module_id_t module_idP, uint8_t CC_id);
|
||||||
|
|
||||||
int get_ue_active_harq_pid(uint8_t Mod_id,uint8_t CC_id,uint16_t rnti,int frame, uint8_t subframe,uint8_t *harq_pid,uint8_t *round,uint8_t ul_flag);
|
int get_ue_active_harq_pid(uint8_t Mod_id,uint8_t CC_id,uint16_t rnti,int frame, uint8_t subframe,uint8_t *harq_pid,uint8_t *round,uint8_t ul_flag);
|
||||||
|
|
||||||
void ulsch_decoding_procedures(unsigned char last_slot, unsigned int i, PHY_VARS_eNB *phy_vars_eNB, unsigned char abstraction_flag);
|
void ulsch_decoding_procedures(unsigned char last_slot, unsigned int i, PHY_VARS_eNB *phy_vars_eNB, unsigned char abstraction_flag);
|
||||||
|
|||||||
@@ -367,6 +367,10 @@ int get_nCCE_offset(unsigned char L, int nCCE, int common_dci, unsigned short rn
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int16_t get_target_ul_rx_power(module_id_t module_idP, uint8_t CC_id) {
|
||||||
|
return PHY_vars_eNB_g[module_idP][CC_id]->PHY_measurements_eNB[0].n0_power_tot_dBm;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef EMOS
|
#ifdef EMOS
|
||||||
void phy_procedures_emos_eNB_TX(unsigned char next_slot, PHY_VARS_eNB *phy_vars_eNB) {
|
void phy_procedures_emos_eNB_TX(unsigned char next_slot, PHY_VARS_eNB *phy_vars_eNB) {
|
||||||
|
|
||||||
@@ -2914,15 +2918,6 @@ void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
|||||||
stop_meas(&phy_vars_eNB->ulsch_demodulation_stats);
|
stop_meas(&phy_vars_eNB->ulsch_demodulation_stats);
|
||||||
|
|
||||||
|
|
||||||
for (j=0;j<phy_vars_eNB->lte_frame_parms.nb_antennas_rx;j++)
|
|
||||||
//this is the RSSI per RB
|
|
||||||
phy_vars_eNB->eNB_UE_stats[i].UL_rssi[j] =
|
|
||||||
dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[j]*
|
|
||||||
(phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb*12)/
|
|
||||||
phy_vars_eNB->lte_frame_parms.ofdm_symbol_size) -
|
|
||||||
phy_vars_eNB->rx_total_gain_eNB_dB -
|
|
||||||
hundred_times_log10_NPRB[phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb-1]/100;
|
|
||||||
|
|
||||||
start_meas(&phy_vars_eNB->ulsch_decoding_stats);
|
start_meas(&phy_vars_eNB->ulsch_decoding_stats);
|
||||||
if (abstraction_flag == 0) {
|
if (abstraction_flag == 0) {
|
||||||
ret = ulsch_decoding(phy_vars_eNB,
|
ret = ulsch_decoding(phy_vars_eNB,
|
||||||
@@ -3000,14 +2995,20 @@ void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ret == (1+MAX_TURBO_ITERATIONS)) {
|
if (ret == (1+MAX_TURBO_ITERATIONS)) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
if (phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round>0) {
|
||||||
|
dump_ulsch(phy_vars_eNB, sched_subframe, i);
|
||||||
|
mac_xface->macphy_exit("retransmission in error");
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
phy_vars_eNB->eNB_UE_stats[i].ulsch_round_errors[harq_pid][phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round]++;
|
phy_vars_eNB->eNB_UE_stats[i].ulsch_round_errors[harq_pid][phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round]++;
|
||||||
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 1;
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 1;
|
||||||
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_ACK = 0;
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_ACK = 0;
|
||||||
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round++;
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round++;
|
||||||
|
|
||||||
LOG_D(PHY,"[eNB][PUSCH %d] Increasing to round %d\n",harq_pid,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round);
|
LOG_D(PHY,"[eNB][PUSCH %d] Increasing to round %d\n",harq_pid,phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round);
|
||||||
// dump_ulsch(phy_vars_eNB, sched_subframe, i);
|
|
||||||
// exit(-1);
|
|
||||||
|
|
||||||
if (phy_vars_eNB->ulsch_eNB[i]->Msg3_flag == 1) {
|
if (phy_vars_eNB->ulsch_eNB[i]->Msg3_flag == 1) {
|
||||||
LOG_I(PHY,"[eNB %d][RAPROC] frame %d, subframe %d, UE %d: Error receiving ULSCH (Msg3), round %d/%d\n",
|
LOG_I(PHY,"[eNB %d][RAPROC] frame %d, subframe %d, UE %d: Error receiving ULSCH (Msg3), round %d/%d\n",
|
||||||
@@ -3096,6 +3097,9 @@ void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
|||||||
if (phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors == ULSCH_max_consecutive_errors) {
|
if (phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors == ULSCH_max_consecutive_errors) {
|
||||||
LOG_I(PHY,"[eNB %d] frame %d, subframe %d, UE %d: ULSCH consecutive error count reached %u, removing UE\n",
|
LOG_I(PHY,"[eNB %d] frame %d, subframe %d, UE %d: ULSCH consecutive error count reached %u, removing UE\n",
|
||||||
phy_vars_eNB->Mod_id,frame,subframe, i, phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors);
|
phy_vars_eNB->Mod_id,frame,subframe, i, phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors);
|
||||||
|
|
||||||
|
mac_xface->macphy_exit("Consecutive error count reached");
|
||||||
|
|
||||||
phy_vars_eNB->eNB_UE_stats[i].mode = PRACH;
|
phy_vars_eNB->eNB_UE_stats[i].mode = PRACH;
|
||||||
#ifdef OPENAIR2
|
#ifdef OPENAIR2
|
||||||
/* mac_xface->cancel_ra_proc(phy_vars_eNB->Mod_id,
|
/* mac_xface->cancel_ra_proc(phy_vars_eNB->Mod_id,
|
||||||
@@ -3113,6 +3117,16 @@ void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
|||||||
phy_vars_eNB->Mod_id,harq_pid,
|
phy_vars_eNB->Mod_id,harq_pid,
|
||||||
frame,subframe);
|
frame,subframe);
|
||||||
|
|
||||||
|
for (j=0;j<phy_vars_eNB->lte_frame_parms.nb_antennas_rx;j++)
|
||||||
|
//this is the RSSI per RB
|
||||||
|
phy_vars_eNB->eNB_UE_stats[i].UL_rssi[j] =
|
||||||
|
dB_fixed(phy_vars_eNB->lte_eNB_pusch_vars[i]->ulsch_power[j]*
|
||||||
|
(phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb*12)/
|
||||||
|
phy_vars_eNB->lte_frame_parms.ofdm_symbol_size) -
|
||||||
|
phy_vars_eNB->rx_total_gain_eNB_dB -
|
||||||
|
hundred_times_log10_NPRB[phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->nb_rb-1]/100 -
|
||||||
|
get_hundred_times_delta_IF_eNB(phy_vars_eNB,i,harq_pid)/100;
|
||||||
|
|
||||||
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 1;
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_active = 1;
|
||||||
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_ACK = 1;
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->phich_ACK = 1;
|
||||||
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round = 0;
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->round = 0;
|
||||||
|
|||||||
@@ -571,6 +571,7 @@ void schedule_ulsch_rnti(module_id_t module_idP,
|
|||||||
int32_t buffer_occupancy=0;
|
int32_t buffer_occupancy=0;
|
||||||
uint32_t cqi_req,cshift,ndi,mcs,rballoc,tpc;
|
uint32_t cqi_req,cshift,ndi,mcs,rballoc,tpc;
|
||||||
int32_t normalized_rx_power, target_rx_power=-85;
|
int32_t normalized_rx_power, target_rx_power=-85;
|
||||||
|
static int32_t tpc_accumulated=0;
|
||||||
|
|
||||||
int n,CC_id;
|
int n,CC_id;
|
||||||
eNB_MAC_INST *eNB=&eNB_mac_inst[module_idP];
|
eNB_MAC_INST *eNB=&eNB_mac_inst[module_idP];
|
||||||
@@ -654,23 +655,27 @@ void schedule_ulsch_rnti(module_id_t module_idP,
|
|||||||
//compute the expected ULSCH RX power (for the stats)
|
//compute the expected ULSCH RX power (for the stats)
|
||||||
|
|
||||||
// this is the normalized RX power and this should be constant (regardless of mcs
|
// this is the normalized RX power and this should be constant (regardless of mcs
|
||||||
//todo: put this function into mac_xface
|
normalized_rx_power = eNB_UE_stats->UL_rssi[0];
|
||||||
normalized_rx_power = eNB_UE_stats->UL_rssi[0] -
|
//-mac_xface->get_hundred_times_delta_TF(module_idP,CC_id,rnti,harq_pid)/100;
|
||||||
mac_xface->get_hundred_times_delta_TF(module_idP,CC_id,rnti,harq_pid)/100;
|
//target_rx_power = mac_xface->get_target_ul_rx_power(module_idP,CC_id)+5;
|
||||||
// this assumes accumulated tpc
|
// this assumes accumulated tpc
|
||||||
if (subframeP==0) {
|
if (subframeP==0) {
|
||||||
if (normalized_rx_power>(target_rx_power+1))
|
if (normalized_rx_power>(target_rx_power+1)) {
|
||||||
tpc = 0; //-1
|
tpc = 0; //-1
|
||||||
else if (normalized_rx_power<(target_rx_power-1))
|
tpc_accumulated--;
|
||||||
|
}
|
||||||
|
else if (normalized_rx_power<(target_rx_power-1)) {
|
||||||
tpc = 2; //+1
|
tpc = 2; //+1
|
||||||
|
tpc_accumulated++;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
tpc = 1; //0
|
tpc = 1; //0
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
tpc = 1; //0
|
tpc = 1; //0
|
||||||
|
|
||||||
// LOG_I(MAC,"[eNB %d] ULSCH scheduler: harq_pid %d, Ndi %d, mcs %d, tpc %d, normalized/target rx power %d/%d\n",module_idP,harq_pid,ndi,mcs,tpc,normalized_rx_power,target_rx_power);
|
LOG_D(MAC,"[eNB %d] ULSCH scheduler: subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n",module_idP,subframeP,harq_pid,tpc,tpc_accumulated,normalized_rx_power,target_rx_power);
|
||||||
|
|
||||||
|
|
||||||
// new transmission
|
// new transmission
|
||||||
if (round==0) {
|
if (round==0) {
|
||||||
|
|||||||
@@ -498,6 +498,7 @@ int l2_init(LTE_DL_FRAME_PARMS *frame_parms,int eMBMS_active, uint8_t cba_group_
|
|||||||
mac_xface->get_mu_mimo_mode = get_mu_mimo_mode;
|
mac_xface->get_mu_mimo_mode = get_mu_mimo_mode;
|
||||||
|
|
||||||
mac_xface->get_hundred_times_delta_TF = get_hundred_times_delta_IF_mac;
|
mac_xface->get_hundred_times_delta_TF = get_hundred_times_delta_IF_mac;
|
||||||
|
mac_xface->get_target_ul_rx_power = get_target_ul_rx_power;
|
||||||
|
|
||||||
#ifdef Rel10
|
#ifdef Rel10
|
||||||
mac_xface->get_mch_sdu = get_mch_sdu;
|
mac_xface->get_mch_sdu = get_mch_sdu;
|
||||||
|
|||||||
@@ -310,6 +310,8 @@ typedef struct
|
|||||||
|
|
||||||
int16_t (*get_hundred_times_delta_TF) (module_id_t module_idP, uint8_t CC_id, rnti_t rnti, uint8_t harq_pid);
|
int16_t (*get_hundred_times_delta_TF) (module_id_t module_idP, uint8_t CC_id, rnti_t rnti, uint8_t harq_pid);
|
||||||
|
|
||||||
|
int16_t (*get_target_ul_rx_power) (module_id_t module_idP, uint8_t CC_id);
|
||||||
|
|
||||||
unsigned char is_cluster_head;
|
unsigned char is_cluster_head;
|
||||||
unsigned char is_primary_cluster_head;
|
unsigned char is_primary_cluster_head;
|
||||||
unsigned char is_secondary_cluster_head;
|
unsigned char is_secondary_cluster_head;
|
||||||
|
|||||||
@@ -106,6 +106,8 @@ int errno;
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//#define XER_PRINT
|
||||||
|
|
||||||
typedef struct xer_sprint_string_s
|
typedef struct xer_sprint_string_s
|
||||||
{
|
{
|
||||||
char *string;
|
char *string;
|
||||||
@@ -1448,7 +1450,7 @@ uint8_t do_RRCConnectionSetup(uint8_t Mod_id,
|
|||||||
//assign_enum(&physicalConfigDedicated2->uplinkPowerControlDedicated->deltaMCS_Enabled,
|
//assign_enum(&physicalConfigDedicated2->uplinkPowerControlDedicated->deltaMCS_Enabled,
|
||||||
// UplinkPowerControlDedicated__deltaMCS_Enabled_en1);
|
// UplinkPowerControlDedicated__deltaMCS_Enabled_en1);
|
||||||
physicalConfigDedicated2->uplinkPowerControlDedicated->deltaMCS_Enabled= UplinkPowerControlDedicated__deltaMCS_Enabled_en1;
|
physicalConfigDedicated2->uplinkPowerControlDedicated->deltaMCS_Enabled= UplinkPowerControlDedicated__deltaMCS_Enabled_en1;
|
||||||
physicalConfigDedicated2->uplinkPowerControlDedicated->accumulationEnabled = 1; // FALSE
|
physicalConfigDedicated2->uplinkPowerControlDedicated->accumulationEnabled = 1; // TRUE
|
||||||
physicalConfigDedicated2->uplinkPowerControlDedicated->p0_UE_PUCCH = 0; // 0 dB
|
physicalConfigDedicated2->uplinkPowerControlDedicated->p0_UE_PUCCH = 0; // 0 dB
|
||||||
physicalConfigDedicated2->uplinkPowerControlDedicated->pSRS_Offset = 0; // 0 dB
|
physicalConfigDedicated2->uplinkPowerControlDedicated->pSRS_Offset = 0; // 0 dB
|
||||||
physicalConfigDedicated2->uplinkPowerControlDedicated->filterCoefficient = CALLOC(1,sizeof(*physicalConfigDedicated2->uplinkPowerControlDedicated->filterCoefficient));
|
physicalConfigDedicated2->uplinkPowerControlDedicated->filterCoefficient = CALLOC(1,sizeof(*physicalConfigDedicated2->uplinkPowerControlDedicated->filterCoefficient));
|
||||||
@@ -1590,6 +1592,9 @@ uint8_t do_RRCConnectionSetup(uint8_t Mod_id,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef XER_PRINT
|
||||||
|
xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
|
||||||
|
#endif
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message,
|
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message,
|
||||||
(void*)&dl_ccch_msg,
|
(void*)&dl_ccch_msg,
|
||||||
buffer,
|
buffer,
|
||||||
|
|||||||
@@ -2843,7 +2843,7 @@ int rrc_eNB_decode_ccch(
|
|||||||
rrcConnectionReestablishmentRequest = &ul_ccch_msg->message.choice.c1.choice.rrcConnectionReestablishmentRequest.criticalExtensions.choice.rrcConnectionReestablishmentRequest_r8;
|
rrcConnectionReestablishmentRequest = &ul_ccch_msg->message.choice.c1.choice.rrcConnectionReestablishmentRequest.criticalExtensions.choice.rrcConnectionReestablishmentRequest_r8;
|
||||||
|
|
||||||
LOG_I(RRC, "[eNB %d] Frame %d UE %d: RRCConnectionReestablishmentRequest cause %s\n", enb_mod_idP,
|
LOG_I(RRC, "[eNB %d] Frame %d UE %d: RRCConnectionReestablishmentRequest cause %s\n", enb_mod_idP,
|
||||||
frameP,
|
frameP, ue_mod_id,
|
||||||
((rrcConnectionReestablishmentRequest->reestablishmentCause == ReestablishmentCause_otherFailure) ? "Other Failure" :
|
((rrcConnectionReestablishmentRequest->reestablishmentCause == ReestablishmentCause_otherFailure) ? "Other Failure" :
|
||||||
(rrcConnectionReestablishmentRequest->reestablishmentCause == ReestablishmentCause_handoverFailure) ? "Handover Failure" :
|
(rrcConnectionReestablishmentRequest->reestablishmentCause == ReestablishmentCause_handoverFailure) ? "Handover Failure" :
|
||||||
"reconfigurationFailure"));
|
"reconfigurationFailure"));
|
||||||
@@ -2862,8 +2862,8 @@ int rrc_eNB_decode_ccch(
|
|||||||
}else {
|
}else {
|
||||||
rrc_eNB_generate_RRCConnectionReestablishementReject(enb_mod_idP, frameP, ue_mod_id);
|
rrc_eNB_generate_RRCConnectionReestablishementReject(enb_mod_idP, frameP, ue_mod_id);
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
*/
|
*/
|
||||||
|
break;
|
||||||
case UL_CCCH_MessageType__c1_PR_rrcConnectionRequest:
|
case UL_CCCH_MessageType__c1_PR_rrcConnectionRequest:
|
||||||
#ifdef RRC_MSG_PRINT
|
#ifdef RRC_MSG_PRINT
|
||||||
LOG_F(RRC,"[MSG] RRC Connection Request\n");
|
LOG_F(RRC,"[MSG] RRC Connection Request\n");
|
||||||
|
|||||||
@@ -832,7 +832,7 @@ int rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_COMMAND (MessageDef *msg_p, const ch
|
|||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
rrc_eNB_generate_RRCConnectionRelease(instance, 0 /*frame*/, ue_index);
|
//rrc_eNB_generate_RRCConnectionRelease(instance, 0 /*frame*/, ue_index);
|
||||||
LOG_W(RRC,
|
LOG_W(RRC,
|
||||||
"[eNB %d] In S1AP_UE_CONTEXT_RELEASE_COMMAND: TODO call rrc_eNB_connection_release for eNB %d\n",
|
"[eNB %d] In S1AP_UE_CONTEXT_RELEASE_COMMAND: TODO call rrc_eNB_connection_release for eNB %d\n",
|
||||||
instance,
|
instance,
|
||||||
|
|||||||
@@ -245,7 +245,7 @@ RTIME start;
|
|||||||
|
|
||||||
# define VCD_POLL_DELAY (500) // Poll delay in micro-seconds
|
# define VCD_POLL_DELAY (500) // Poll delay in micro-seconds
|
||||||
# define VCD_MAX_WAIT_DELAY (200 * 1000) // Maximum data ready wait delay in micro-seconds
|
# define VCD_MAX_WAIT_DELAY (200 * 1000) // Maximum data ready wait delay in micro-seconds
|
||||||
# define VCD_FIFO_NB_ELEMENTS (1 << 20) // Must be a power of 2
|
# define VCD_FIFO_NB_ELEMENTS (1 << 24) // Must be a power of 2
|
||||||
# define VCD_FIFO_MASK (VCD_FIFO_NB_ELEMENTS - 1)
|
# define VCD_FIFO_MASK (VCD_FIFO_NB_ELEMENTS - 1)
|
||||||
|
|
||||||
typedef struct vcd_queue_user_data_s {
|
typedef struct vcd_queue_user_data_s {
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ eNBs =
|
|||||||
tdd_config_s = 0;
|
tdd_config_s = 0;
|
||||||
prefix_type = "NORMAL";
|
prefix_type = "NORMAL";
|
||||||
eutra_band = 7;
|
eutra_band = 7;
|
||||||
downlink_frequency = 2660000000L;
|
downlink_frequency = 2680000000L;
|
||||||
uplink_frequency_offset = -120000000;
|
uplink_frequency_offset = -120000000;
|
||||||
Nid_cell = 0;
|
Nid_cell = 0;
|
||||||
N_RB_DL = 25;
|
N_RB_DL = 25;
|
||||||
@@ -39,7 +39,7 @@ eNBs =
|
|||||||
nb_antennas_rx = 1;
|
nb_antennas_rx = 1;
|
||||||
tx_gain = 20;
|
tx_gain = 20;
|
||||||
rx_gain = 20;
|
rx_gain = 20;
|
||||||
prach_root = 22;
|
prach_root = 0;
|
||||||
prach_config_index = 0;
|
prach_config_index = 0;
|
||||||
prach_high_speed = "DISABLE";
|
prach_high_speed = "DISABLE";
|
||||||
prach_zero_correlation = 1;
|
prach_zero_correlation = 1;
|
||||||
@@ -57,7 +57,7 @@ eNBs =
|
|||||||
pusch_groupHoppingEnabled = "ENABLE";
|
pusch_groupHoppingEnabled = "ENABLE";
|
||||||
pusch_groupAssignment = 0;
|
pusch_groupAssignment = 0;
|
||||||
pusch_sequenceHoppingEnabled = "DISABLE";
|
pusch_sequenceHoppingEnabled = "DISABLE";
|
||||||
pusch_nDMRS1 = 1;
|
pusch_nDMRS1 = 0;
|
||||||
phich_duration = "NORMAL";
|
phich_duration = "NORMAL";
|
||||||
phich_resource = "ONESIXTH";
|
phich_resource = "ONESIXTH";
|
||||||
srs_enable = "DISABLE";
|
srs_enable = "DISABLE";
|
||||||
@@ -123,19 +123,19 @@ eNBs =
|
|||||||
|
|
||||||
log_config :
|
log_config :
|
||||||
{
|
{
|
||||||
global_log_level ="info";
|
global_log_level ="debug";
|
||||||
global_log_verbosity ="medium";
|
global_log_verbosity ="medium";
|
||||||
hw_log_level ="debug";
|
hw_log_level ="debug";
|
||||||
hw_log_verbosity ="medium";
|
hw_log_verbosity ="medium";
|
||||||
phy_log_level ="info";
|
phy_log_level ="debug";
|
||||||
phy_log_verbosity ="medium";
|
phy_log_verbosity ="medium";
|
||||||
mac_log_level ="info";
|
mac_log_level ="debug";
|
||||||
mac_log_verbosity ="high";
|
mac_log_verbosity ="high";
|
||||||
rlc_log_level ="info";
|
rlc_log_level ="info";
|
||||||
rlc_log_verbosity ="medium";
|
rlc_log_verbosity ="medium";
|
||||||
pdcp_log_level ="info";
|
pdcp_log_level ="info";
|
||||||
pdcp_log_verbosity ="medium";
|
pdcp_log_verbosity ="medium";
|
||||||
rrc_log_level ="info";
|
rrc_log_level ="debug";
|
||||||
rrc_log_verbosity ="medium";
|
rrc_log_verbosity ="medium";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -30,31 +30,31 @@ eNBs =
|
|||||||
tdd_config_s = 0;
|
tdd_config_s = 0;
|
||||||
prefix_type = "NORMAL";
|
prefix_type = "NORMAL";
|
||||||
eutra_band = 7;
|
eutra_band = 7;
|
||||||
downlink_frequency = 2660000000L;
|
downlink_frequency = 2680000000L;
|
||||||
uplink_frequency_offset = -120000000;
|
uplink_frequency_offset = -120000000;
|
||||||
Nid_cell = 0;
|
Nid_cell = 0;
|
||||||
N_RB_DL = 25;
|
N_RB_DL = 25;
|
||||||
Nid_cell_mbsfn = 0;
|
Nid_cell_mbsfn = 0;
|
||||||
nb_antennas_tx = 1;
|
nb_antennas_tx = 1;
|
||||||
nb_antennas_rx = 1;
|
nb_antennas_rx = 1;
|
||||||
tx_gain = 120;
|
tx_gain = 90;
|
||||||
rx_gain = 135;
|
rx_gain = 135;
|
||||||
prach_root = 22;
|
prach_root = 0;
|
||||||
prach_config_index = 3;
|
prach_config_index = 0;
|
||||||
prach_high_speed = "DISABLE";
|
prach_high_speed = "DISABLE";
|
||||||
prach_zero_correlation = 0;
|
prach_zero_correlation = 1;
|
||||||
prach_freq_offset = 0;
|
prach_freq_offset = 2;
|
||||||
pucch_delta_shift = 1;
|
pucch_delta_shift = 1;
|
||||||
pucch_nRB_CQI = 1;
|
pucch_nRB_CQI = 1;
|
||||||
pucch_nCS_AN = 0;
|
pucch_nCS_AN = 0;
|
||||||
pucch_n1_AN = 32;
|
pucch_n1_AN = 32;
|
||||||
pdsch_referenceSignalPower = -24;
|
pdsch_referenceSignalPower = -26;
|
||||||
pdsch_p_b = 0;
|
pdsch_p_b = 0;
|
||||||
pusch_n_SB = 1;
|
pusch_n_SB = 1;
|
||||||
pusch_enable64QAM = "DISABLE";
|
pusch_enable64QAM = "DISABLE";
|
||||||
pusch_hoppingMode = "interSubFrame";
|
pusch_hoppingMode = "interSubFrame";
|
||||||
pusch_hoppingOffset = 4;
|
pusch_hoppingOffset = 0;
|
||||||
pusch_groupHoppingEnabled = "DISABLE";
|
pusch_groupHoppingEnabled = "ENABLE";
|
||||||
pusch_groupAssignment = 0;
|
pusch_groupAssignment = 0;
|
||||||
pusch_sequenceHoppingEnabled = "DISABLE";
|
pusch_sequenceHoppingEnabled = "DISABLE";
|
||||||
pusch_nDMRS1 = 1;
|
pusch_nDMRS1 = 1;
|
||||||
@@ -66,9 +66,9 @@ eNBs =
|
|||||||
srs_ackNackST =;
|
srs_ackNackST =;
|
||||||
srs_MaxUpPts =;*/
|
srs_MaxUpPts =;*/
|
||||||
|
|
||||||
pusch_p0_Nominal = -95;
|
pusch_p0_Nominal = -108;
|
||||||
pusch_alpha = "AL08";
|
pusch_alpha = "AL1";
|
||||||
pucch_p0_Nominal = -117;
|
pucch_p0_Nominal = -108;
|
||||||
msg3_delta_Preamble = 6;
|
msg3_delta_Preamble = 6;
|
||||||
pucch_deltaF_Format1 = "deltaF2";
|
pucch_deltaF_Format1 = "deltaF2";
|
||||||
pucch_deltaF_Format1b = "deltaF3";
|
pucch_deltaF_Format1b = "deltaF3";
|
||||||
@@ -76,16 +76,16 @@ eNBs =
|
|||||||
pucch_deltaF_Format2a = "deltaF0";
|
pucch_deltaF_Format2a = "deltaF0";
|
||||||
pucch_deltaF_Format2b = "deltaF0";
|
pucch_deltaF_Format2b = "deltaF0";
|
||||||
|
|
||||||
rach_numberOfRA_Preambles = 52;
|
rach_numberOfRA_Preambles = 64;
|
||||||
rach_preamblesGroupAConfig = "DISABLE";
|
rach_preamblesGroupAConfig = "DISABLE";
|
||||||
/*
|
/*
|
||||||
rach_sizeOfRA_PreamblesGroupA = ;
|
rach_sizeOfRA_PreamblesGroupA = ;
|
||||||
rach_messageSizeGroupA = ;
|
rach_messageSizeGroupA = ;
|
||||||
rach_messagePowerOffsetGroupB = ;
|
rach_messagePowerOffsetGroupB = ;
|
||||||
*/
|
*/
|
||||||
rach_powerRampingStep = 2;
|
rach_powerRampingStep = 4;
|
||||||
rach_preambleInitialReceivedTargetPower = -104;
|
rach_preambleInitialReceivedTargetPower = -108;
|
||||||
rach_preambleTransMax = 6;
|
rach_preambleTransMax = 10;
|
||||||
rach_raResponseWindowSize = 10;
|
rach_raResponseWindowSize = 10;
|
||||||
rach_macContentionResolutionTimer = 48;
|
rach_macContentionResolutionTimer = 48;
|
||||||
rach_maxHARQ_Msg3Tx = 4;
|
rach_maxHARQ_Msg3Tx = 4;
|
||||||
@@ -125,7 +125,7 @@ eNBs =
|
|||||||
{
|
{
|
||||||
global_log_level ="info";
|
global_log_level ="info";
|
||||||
global_log_verbosity ="medium";
|
global_log_verbosity ="medium";
|
||||||
hw_log_level ="debug";
|
hw_log_level ="info";
|
||||||
hw_log_verbosity ="medium";
|
hw_log_verbosity ="medium";
|
||||||
phy_log_level ="info";
|
phy_log_level ="info";
|
||||||
phy_log_verbosity ="medium";
|
phy_log_verbosity ="medium";
|
||||||
|
|||||||
@@ -37,8 +37,8 @@ endif
|
|||||||
|
|
||||||
ifeq ($(DEBUG),1)
|
ifeq ($(DEBUG),1)
|
||||||
CFLAGS += -g -ggdb
|
CFLAGS += -g -ggdb
|
||||||
CFLAGS += -DRRC_MSG_PRINT
|
#CFLAGS += -DRRC_MSG_PRINT
|
||||||
CFLAGS += -DPDCP_MSG_PRINT
|
#CFLAGS += -DPDCP_MSG_PRINT
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef ($(MSG_PRINT),1)
|
ifdef ($(MSG_PRINT),1)
|
||||||
|
|||||||
@@ -171,9 +171,8 @@ static SEM *mutex;
|
|||||||
|
|
||||||
static long main_eNB_thread;
|
static long main_eNB_thread;
|
||||||
static long main_ue_thread;
|
static long main_ue_thread;
|
||||||
#ifdef USRP
|
|
||||||
static SEM *sync_sem; // to sync rx & tx streaming
|
static SEM *sync_sem; // to sync rx & tx streaming
|
||||||
#endif
|
|
||||||
//static int sync_thread;
|
//static int sync_thread;
|
||||||
#else
|
#else
|
||||||
pthread_t main_eNB_thread;
|
pthread_t main_eNB_thread;
|
||||||
@@ -181,12 +180,11 @@ pthread_t main_ue_thread;
|
|||||||
pthread_attr_t attr_dlsch_threads;
|
pthread_attr_t attr_dlsch_threads;
|
||||||
struct sched_param sched_param_dlsch;
|
struct sched_param sched_param_dlsch;
|
||||||
|
|
||||||
#ifndef EXMIMO
|
|
||||||
pthread_cond_t sync_cond;
|
pthread_cond_t sync_cond;
|
||||||
pthread_mutex_t sync_mutex;
|
pthread_mutex_t sync_mutex;
|
||||||
|
int sync_var=-1;
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
RTIME T0;
|
RTIME T0;
|
||||||
|
|
||||||
pthread_attr_t attr_UE_init_synch;
|
pthread_attr_t attr_UE_init_synch;
|
||||||
@@ -1258,9 +1256,9 @@ static void *eNB_thread(void *arg)
|
|||||||
RT_TASK *task;
|
RT_TASK *task;
|
||||||
#endif
|
#endif
|
||||||
#ifdef EXMIMO
|
#ifdef EXMIMO
|
||||||
unsigned char slot=1;
|
|
||||||
#else
|
|
||||||
unsigned char slot=0;
|
unsigned char slot=0;
|
||||||
|
#else
|
||||||
|
unsigned char slot=1;
|
||||||
#endif
|
#endif
|
||||||
int frame=0;
|
int frame=0;
|
||||||
int CC_id;
|
int CC_id;
|
||||||
@@ -1283,10 +1281,12 @@ static void *eNB_thread(void *arg)
|
|||||||
hw_subframe = 0;
|
hw_subframe = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
#if defined(ENABLE_ITTI)
|
#if defined(ENABLE_ITTI)
|
||||||
/* Wait for eNB application initialization to be complete (eNB registration to MME) */
|
// Wait for eNB application initialization to be complete (eNB registration to MME)
|
||||||
wait_system_ready ("Waiting for eNB application to be ready %s\r", &start_eNB);
|
wait_system_ready ("Waiting for eNB application to be ready %s\r", &start_eNB);
|
||||||
#endif
|
#endif
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef RTAI
|
#ifdef RTAI
|
||||||
task = rt_task_init_schmod(nam2num("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF);
|
task = rt_task_init_schmod(nam2num("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF);
|
||||||
@@ -1313,17 +1313,16 @@ static void *eNB_thread(void *arg)
|
|||||||
timing_info.time_avg = 0;
|
timing_info.time_avg = 0;
|
||||||
timing_info.n_samples = 0;
|
timing_info.n_samples = 0;
|
||||||
|
|
||||||
#ifndef EXMIMO
|
printf("waiting for sync (eNB_thread)\n");
|
||||||
printf("waiting for USRP sync (eNB_thread)\n");
|
|
||||||
#ifdef RTAI
|
#ifdef RTAI
|
||||||
rt_sem_wait(sync_sem);
|
rt_sem_wait(sync_sem);
|
||||||
#else
|
#else
|
||||||
pthread_mutex_lock(&sync_mutex);
|
pthread_mutex_lock(&sync_mutex);
|
||||||
pthread_cond_wait(&sync_cond, &sync_mutex);
|
while (sync_var<0)
|
||||||
|
pthread_cond_wait(&sync_cond, &sync_mutex);
|
||||||
pthread_mutex_unlock(&sync_mutex);
|
pthread_mutex_unlock(&sync_mutex);
|
||||||
#endif
|
#endif
|
||||||
// printf("starting eNB thread @ %llu\n",get_usrp_time(&openair0));
|
// printf("starting eNB thread @ %llu\n",get_usrp_time(&openair0));
|
||||||
#endif
|
|
||||||
|
|
||||||
while (!oai_exit) {
|
while (!oai_exit) {
|
||||||
|
|
||||||
@@ -1634,7 +1633,8 @@ static void *UE_thread_synch(void *arg) {
|
|||||||
|
|
||||||
pthread_mutex_lock(&sync_mutex);
|
pthread_mutex_lock(&sync_mutex);
|
||||||
printf("Locked sync_mutex, waiting (UE_sync_thread)\n");
|
printf("Locked sync_mutex, waiting (UE_sync_thread)\n");
|
||||||
pthread_cond_wait(&sync_cond, &sync_mutex);
|
while (sync_var<0)
|
||||||
|
pthread_cond_wait(&sync_cond, &sync_mutex);
|
||||||
pthread_mutex_unlock(&sync_mutex);
|
pthread_mutex_unlock(&sync_mutex);
|
||||||
printf("unlocked sync_mutex (UE_sync_thread)\n");
|
printf("unlocked sync_mutex (UE_sync_thread)\n");
|
||||||
#endif
|
#endif
|
||||||
@@ -1814,7 +1814,8 @@ static void *UE_thread_rx(void *arg) {
|
|||||||
#else
|
#else
|
||||||
pthread_mutex_lock(&sync_mutex);
|
pthread_mutex_lock(&sync_mutex);
|
||||||
printf("Locked sync_mutex, waiting (UE_thread_rx)\n");
|
printf("Locked sync_mutex, waiting (UE_thread_rx)\n");
|
||||||
pthread_cond_wait(&sync_cond, &sync_mutex);
|
while (sync_var<0)
|
||||||
|
pthread_cond_wait(&sync_cond, &sync_mutex);
|
||||||
pthread_mutex_unlock(&sync_mutex);
|
pthread_mutex_unlock(&sync_mutex);
|
||||||
printf("unlocked sync_mutex, waiting (UE_thread_rx)\n");
|
printf("unlocked sync_mutex, waiting (UE_thread_rx)\n");
|
||||||
#endif
|
#endif
|
||||||
@@ -1906,7 +1907,8 @@ static void *UE_thread(void *arg) {
|
|||||||
#else
|
#else
|
||||||
pthread_mutex_lock(&sync_mutex);
|
pthread_mutex_lock(&sync_mutex);
|
||||||
printf("Locked sync_mutex, waiting (UE_thread)\n");
|
printf("Locked sync_mutex, waiting (UE_thread)\n");
|
||||||
pthread_cond_wait(&sync_cond, &sync_mutex);
|
while (sync_var<0)
|
||||||
|
pthread_cond_wait(&sync_cond, &sync_mutex);
|
||||||
pthread_mutex_unlock(&sync_mutex);
|
pthread_mutex_unlock(&sync_mutex);
|
||||||
printf("unlocked sync_mutex, waiting (UE_thread)\n");
|
printf("unlocked sync_mutex, waiting (UE_thread)\n");
|
||||||
#endif
|
#endif
|
||||||
@@ -3176,25 +3178,23 @@ int main(int argc, char **argv) {
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
printf("mutex=%p\n",mutex);
|
printf("mutex=%p\n",mutex);
|
||||||
#ifndef EXMIMO
|
|
||||||
sync_sem = rt_typed_sem_init(nam2num("syncsem"), 0, BIN_SEM|FIFO_Q);
|
sync_sem = rt_typed_sem_init(nam2num("syncsem"), 0, BIN_SEM|FIFO_Q);
|
||||||
if(sync_sem == 0)
|
if(sync_sem == 0)
|
||||||
printf("error init sync semphore\n");
|
printf("error init sync semphore\n");
|
||||||
#endif
|
|
||||||
#else
|
#else
|
||||||
#ifndef EXMIMO
|
|
||||||
pthread_cond_init(&sync_cond,NULL);
|
pthread_cond_init(&sync_cond,NULL);
|
||||||
pthread_mutex_init(&sync_mutex, NULL);
|
pthread_mutex_init(&sync_mutex, NULL);
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*#if defined(ENABLE_ITTI)
|
#if defined(ENABLE_ITTI)
|
||||||
// Wait for eNB application initialization to be complete (eNB registration to MME)
|
// Wait for eNB application initialization to be complete (eNB registration to MME)
|
||||||
if (UE_flag==0) {
|
if (UE_flag==0) {
|
||||||
printf("Waiting for eNB application to be ready\n");
|
printf("Waiting for eNB application to be ready\n");
|
||||||
wait_system_ready ("Waiting for eNB application to be ready %s\r", &start_eNB);
|
wait_system_ready ("Waiting for eNB application to be ready %s\r", &start_eNB);
|
||||||
}
|
}
|
||||||
#endif*/
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// this starts the DMA transfers
|
// this starts the DMA transfers
|
||||||
@@ -3207,24 +3207,16 @@ int main(int argc, char **argv) {
|
|||||||
#ifdef XFORMS
|
#ifdef XFORMS
|
||||||
if (do_forms==1) {
|
if (do_forms==1) {
|
||||||
fl_initialize (&argc, argv, NULL, 0, 0);
|
fl_initialize (&argc, argv, NULL, 0, 0);
|
||||||
form_stats = create_form_stats_form();
|
|
||||||
if (UE_flag==1) {
|
if (UE_flag==0) {
|
||||||
form_ue[UE_id] = create_lte_phy_scope_ue();
|
|
||||||
sprintf (title, "LTE DL SCOPE UE");
|
|
||||||
fl_show_form (form_ue[UE_id]->lte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
|
|
||||||
} else {
|
|
||||||
form_stats_l2 = create_form_stats_form();
|
form_stats_l2 = create_form_stats_form();
|
||||||
|
fl_show_form (form_stats_l2->stats_form, FL_PLACE_HOTSPOT, FL_FULLBORDER, "l2 stats");
|
||||||
|
form_stats = create_form_stats_form();
|
||||||
|
fl_show_form (form_stats->stats_form, FL_PLACE_HOTSPOT, FL_FULLBORDER, "stats");
|
||||||
for(UE_id=0;UE_id<scope_enb_num_ue;UE_id++) {
|
for(UE_id=0;UE_id<scope_enb_num_ue;UE_id++) {
|
||||||
form_enb[UE_id] = create_lte_phy_scope_enb();
|
form_enb[UE_id] = create_lte_phy_scope_enb();
|
||||||
sprintf (title, "UE%d LTE UL SCOPE eNB",UE_id+1);
|
sprintf (title, "UE%d LTE UL SCOPE eNB",UE_id+1);
|
||||||
fl_show_form (form_enb[UE_id]->lte_phy_scope_enb, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
|
fl_show_form (form_enb[UE_id]->lte_phy_scope_enb, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
|
||||||
}
|
|
||||||
}
|
|
||||||
fl_show_form (form_stats->stats_form, FL_PLACE_HOTSPOT, FL_FULLBORDER, "stats");
|
|
||||||
if (UE_flag==0) {
|
|
||||||
fl_show_form (form_stats_l2->stats_form, FL_PLACE_HOTSPOT, FL_FULLBORDER, "l2 stats");
|
|
||||||
|
|
||||||
for (UE_id=0;UE_id<scope_enb_num_ue;UE_id++) {
|
|
||||||
if (otg_enabled) {
|
if (otg_enabled) {
|
||||||
fl_set_button(form_enb[UE_id]->button_0,1);
|
fl_set_button(form_enb[UE_id]->button_0,1);
|
||||||
fl_set_object_label(form_enb[UE_id]->button_0,"DL Traffic ON");
|
fl_set_object_label(form_enb[UE_id]->button_0,"DL Traffic ON");
|
||||||
@@ -3236,6 +3228,13 @@ int main(int argc, char **argv) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
form_stats = create_form_stats_form();
|
||||||
|
fl_show_form (form_stats->stats_form, FL_PLACE_HOTSPOT, FL_FULLBORDER, "stats");
|
||||||
|
UE_id = 0;
|
||||||
|
form_ue[UE_id] = create_lte_phy_scope_ue();
|
||||||
|
sprintf (title, "LTE DL SCOPE UE");
|
||||||
|
fl_show_form (form_ue[UE_id]->lte_phy_scope_ue, FL_PLACE_HOTSPOT, FL_FULLBORDER, title);
|
||||||
|
|
||||||
if (openair_daq_vars.use_ia_receiver) {
|
if (openair_daq_vars.use_ia_receiver) {
|
||||||
fl_set_button(form_ue[UE_id]->button_0,1);
|
fl_set_button(form_ue[UE_id]->button_0,1);
|
||||||
fl_set_object_label(form_ue[UE_id]->button_0, "IA Receiver ON");
|
fl_set_object_label(form_ue[UE_id]->button_0, "IA Receiver ON");
|
||||||
@@ -3326,21 +3325,23 @@ int main(int argc, char **argv) {
|
|||||||
// Sleep to allow all threads to setup
|
// Sleep to allow all threads to setup
|
||||||
//sleep(1);
|
//sleep(1);
|
||||||
|
|
||||||
|
|
||||||
#ifndef EXMIMO
|
#ifndef EXMIMO
|
||||||
#ifndef USRP_DEBUG
|
#ifndef USRP_DEBUG
|
||||||
openair0.trx_start_func(&openair0);
|
openair0.trx_start_func(&openair0);
|
||||||
// printf("returning from usrp start streaming: %llu\n",get_usrp_time(&openair0));
|
// printf("returning from usrp start streaming: %llu\n",get_usrp_time(&openair0));
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef RTAI
|
#ifdef RTAI
|
||||||
rt_sem_signal(sync_sem);
|
rt_sem_signal(sync_sem);
|
||||||
#else
|
#else
|
||||||
pthread_mutex_lock(&sync_mutex);
|
pthread_mutex_lock(&sync_mutex);
|
||||||
printf("Sending sync ...\n");
|
printf("Sending sync ...\n");
|
||||||
|
sync_var=0;
|
||||||
pthread_cond_broadcast(&sync_cond);
|
pthread_cond_broadcast(&sync_cond);
|
||||||
pthread_mutex_unlock(&sync_mutex);
|
pthread_mutex_unlock(&sync_mutex);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
// wait for end of program
|
// wait for end of program
|
||||||
printf("TYPE <CTRL-C> TO TERMINATE\n");
|
printf("TYPE <CTRL-C> TO TERMINATE\n");
|
||||||
//getchar();
|
//getchar();
|
||||||
@@ -3415,7 +3416,6 @@ int main(int argc, char **argv) {
|
|||||||
//cleanup_pdcp_thread();
|
//cleanup_pdcp_thread();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef EXMIMO
|
|
||||||
#ifdef RTAI
|
#ifdef RTAI
|
||||||
rt_sem_delete(sync_sem);
|
rt_sem_delete(sync_sem);
|
||||||
stop_rt_timer();
|
stop_rt_timer();
|
||||||
@@ -3423,7 +3423,6 @@ int main(int argc, char **argv) {
|
|||||||
pthread_cond_destroy(&sync_cond);
|
pthread_cond_destroy(&sync_cond);
|
||||||
pthread_mutex_destroy(&sync_mutex);
|
pthread_mutex_destroy(&sync_mutex);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef EXMIMO
|
#ifdef EXMIMO
|
||||||
printf("stopping card\n");
|
printf("stopping card\n");
|
||||||
|
|||||||
Reference in New Issue
Block a user