diff --git a/srsue/hdr/stack/ue_stack_lte.h b/srsue/hdr/stack/ue_stack_lte.h index 2715d7e22..8d99e552b 100644 --- a/srsue/hdr/stack/ue_stack_lte.h +++ b/srsue/hdr/stack/ue_stack_lte.h @@ -114,7 +114,7 @@ private: srsue::rrc rrc; srsue::nas nas; srsue::gw gw; - srsue::usim_base* usim; + std::unique_ptr usim; srslte::logger* logger; diff --git a/srsue/hdr/stack/upper/usim_base.h b/srsue/hdr/stack/upper/usim_base.h index 5f2b3714e..378d35720 100644 --- a/srsue/hdr/stack/upper/usim_base.h +++ b/srsue/hdr/stack/upper/usim_base.h @@ -58,7 +58,7 @@ class usim_base public: usim_base(); virtual ~usim_base(); - static usim_base* get_instance(usim_args_t* args); + static std::unique_ptr get_instance(usim_args_t* args); virtual int init(usim_args_t *args, srslte::log *usim_log_) = 0; virtual void stop() = 0; diff --git a/srsue/src/stack/ue_stack_lte.cc b/srsue/src/stack/ue_stack_lte.cc index 3ed7a8155..880e7054f 100644 --- a/srsue/src/stack/ue_stack_lte.cc +++ b/srsue/src/stack/ue_stack_lte.cc @@ -103,9 +103,9 @@ int ue_stack_lte::init(const stack_args_t& args_, srslte::logger* logger_) mac.init(phy, &rlc, &rrc, &mac_log); rlc.init(&pdcp, &rrc, NULL, &rlc_log, &mac, 0 /* RB_ID_SRB0 */); pdcp.init(&rlc, &rrc, &gw, &pdcp_log, 0 /* RB_ID_SRB0 */, SECURITY_DIRECTION_UPLINK); - nas.init(usim, &rrc, &gw, &nas_log, args.nas); + nas.init(usim.get(), &rrc, &gw, &nas_log, args.nas); gw.init(&pdcp, &nas, &gw_log, args.gw); - rrc.init(phy, &mac, &rlc, &pdcp, &nas, usim, &gw, &mac, &rrc_log, args.rrc); + rrc.init(phy, &mac, &rlc, &pdcp, &nas, usim.get(), &gw, &mac, &rrc_log, args.rrc); running = true; diff --git a/srsue/src/stack/upper/usim_base.cc b/srsue/src/stack/upper/usim_base.cc index a656ec1f0..064bf44e5 100644 --- a/srsue/src/stack/upper/usim_base.cc +++ b/srsue/src/stack/upper/usim_base.cc @@ -28,22 +28,16 @@ namespace srsue { -usim_base* usim_base::get_instance(usim_args_t* args) +std::unique_ptr usim_base::get_instance(usim_args_t* args) { - usim_base* instance = NULL; - if (args->mode == "soft") { - instance = new usim(); - } #if HAVE_PCSC - else if (args->mode == "pcsc") { - instance = new pcsc_usim(); + if (args->mode == "pcsc") { + return std::unique_ptr(new pcsc_usim()); } #endif - else { - // default to soft USIM - instance = new usim(); - } - return(instance); + + // default to soft USIM + return std::unique_ptr(new usim()); } usim_base::usim_base() {