Commit bda839bc authored by aligungr's avatar aligungr

RRC developments

parent 9dfe831f
......@@ -89,7 +89,10 @@ void NasMm::performPlmnSelection()
}
}
else if (lastSelectedPlmn != selected)
{
m_logger->info("Selected PLMN[%s]", ToJson(selected).str().c_str());
m_base->rrcTask->push(new NwUeNasToRrc(NwUeNasToRrc::RRC_NOTIFY));
}
m_base->shCtx.selectedPlmn.set(selected);
}
......
......@@ -94,6 +94,7 @@ struct NwUeNasToRrc : NtsMessage
LOCAL_RELEASE_CONNECTION,
INITIAL_NAS_DELIVERY,
UPLINK_NAS_DELIVERY,
RRC_NOTIFY,
} present;
// INITIAL_NAS_DELIVERY
......@@ -125,6 +126,18 @@ struct NwUeRrcToRls : NtsMessage
}
};
struct NwUeRrcToRrc : NtsMessage
{
enum PR
{
TRIGGER_CYCLE,
} present;
explicit NwUeRrcToRrc(PR present) : NtsMessage(NtsMessageType::UE_RRC_TO_RRC), present(present)
{
}
};
struct NwUeRlsToRrc : NtsMessage
{
enum PR
......
......@@ -10,8 +10,6 @@
#include <algorithm>
#include <lib/asn/rrc.hpp>
#include <lib/asn/utils.hpp>
#include <lib/rrc/encode.hpp>
#include <ue/nas/task.hpp>
......
......@@ -29,4 +29,32 @@ void UeRrcTask::handleRlsSapMessage(NwUeRlsToRrc &msg)
}
}
void UeRrcTask::handleNasSapMessage(NwUeNasToRrc &msg)
{
switch (msg.present)
{
case NwUeNasToRrc::INITIAL_NAS_DELIVERY: {
// TODO
// deliverInitialNas(std::move(msg.nasPdu), msg.rrcEstablishmentCause);
break;
}
case NwUeNasToRrc::UPLINK_NAS_DELIVERY: {
// TODO
// deliverUplinkNas(std::move(msg.nasPdu));
break;
}
case NwUeNasToRrc::LOCAL_RELEASE_CONNECTION: {
// TODO
// m_state = ERrcState::RRC_IDLE;
// m_base->nasTask->push(new NwUeRrcToNas(NwUeRrcToNas::RRC_CONNECTION_RELEASE));
// m_base->rlsTask->push(new NwUeRrcToRls(NwUeRrcToRls::RESET_STI));
break;
}
case NwUeNasToRrc::RRC_NOTIFY: {
triggerCycle();
break;
}
}
}
} // namespace nr::ue
\ No newline at end of file
......@@ -16,6 +16,11 @@
namespace nr::ue
{
void UeRrcTask::triggerCycle()
{
push(new NwUeRrcToRrc(NwUeRrcToRrc::TRIGGER_CYCLE));
}
void UeRrcTask::performCycle()
{
if (m_state == ERrcState::RRC_CONNECTED)
......
......@@ -32,6 +32,8 @@ UeRrcTask::UeRrcTask(TaskBase *base) : m_base{base}
void UeRrcTask::onStart()
{
triggerCycle();
setTimer(TIMER_ID_MACHINE_CYCLE, TIMER_PERIOD_MACHINE_CYCLE);
}
......@@ -49,30 +51,23 @@ void UeRrcTask::onLoop()
switch (msg->msgType)
{
case NtsMessageType::UE_NAS_TO_RRC: {
auto *w = dynamic_cast<NwUeNasToRrc *>(msg);
switch (w->present)
{
case NwUeNasToRrc::INITIAL_NAS_DELIVERY: {
deliverInitialNas(std::move(w->nasPdu), w->rrcEstablishmentCause);
break;
}
case NwUeNasToRrc::UPLINK_NAS_DELIVERY: {
deliverUplinkNas(std::move(w->nasPdu));
break;
}
case NwUeNasToRrc::LOCAL_RELEASE_CONNECTION: {
m_state = ERrcState::RRC_IDLE;
m_base->nasTask->push(new NwUeRrcToNas(NwUeRrcToNas::RRC_CONNECTION_RELEASE));
m_base->rlsTask->push(new NwUeRrcToRls(NwUeRrcToRls::RESET_STI));
break;
}
}
handleNasSapMessage(*dynamic_cast<NwUeNasToRrc *>(msg));
break;
}
case NtsMessageType::UE_RLS_TO_RRC: {
handleRlsSapMessage(*dynamic_cast<NwUeRlsToRrc *>(msg));
break;
}
case NtsMessageType::UE_RRC_TO_RRC: {
auto *w = dynamic_cast<NwUeRrcToRrc *>(msg);
switch (w->present)
{
case NwUeRrcToRrc::TRIGGER_CYCLE:
performCycle();
break;
}
break;
}
case NtsMessageType::TIMER_EXPIRED: {
auto *w = dynamic_cast<NwTimerExpired *>(msg);
if (w->timerId == TIMER_ID_MACHINE_CYCLE)
......
......@@ -94,10 +94,12 @@ class UeRrcTask : public NtsTask
void receiveRrcMessage(int cellId, ASN_RRC_DL_DCCH_Message *msg);
void receiveRrcMessage(int cellId, ASN_RRC_PCCH_Message *msg);
/* RLS Service Access Point */
/* Service Access Point */
void handleRlsSapMessage(NwUeRlsToRrc &msg);
void handleNasSapMessage(NwUeNasToRrc &msg);
/* State Management */
void triggerCycle();
void performCycle();
/* Idle Mode Operations */
......
......@@ -51,7 +51,8 @@ enum class NtsMessageType
UE_TUN_TO_APP,
UE_RRC_TO_NAS,
UE_NAS_TO_RRC,
UE_RRC_TO_RLS,
UE_RRC_TO_RLS,
UE_RRC_TO_RRC,
UE_NAS_TO_NAS,
UE_RLS_TO_RRC,
UE_RLS_TO_APP,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment