Commit defafa8d authored by Rakesh Mundlamuri's avatar Rakesh Mundlamuri

Add Positioning Activation Request NRPPA message decoding procedures

parent 559e3c31
...@@ -32,3 +32,7 @@ MESSAGE_DEF(NRPPA_POSITIONING_INFORMATION_RESP, ...@@ -32,3 +32,7 @@ MESSAGE_DEF(NRPPA_POSITIONING_INFORMATION_RESP,
MESSAGE_PRIORITY_MED, MESSAGE_PRIORITY_MED,
nrppa_positioning_information_resp_t, nrppa_positioning_information_resp_t,
nrppa_positioning_information_resp) nrppa_positioning_information_resp)
MESSAGE_DEF(NRPPA_POSITIONING_ACTIVATION_REQ,
MESSAGE_PRIORITY_MED,
nrppa_positioning_activation_req_t,
nrppa_positioning_activation_req)
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#define NRPPA_TRP_INFORMATION_RESP(mSGpTR) (mSGpTR)->ittiMsg.nrppa_trp_information_resp #define NRPPA_TRP_INFORMATION_RESP(mSGpTR) (mSGpTR)->ittiMsg.nrppa_trp_information_resp
#define NRPPA_POSITIONING_INFORMATION_REQ(mSGpTR) (mSGpTR)->ittiMsg.nrppa_positioning_information_req #define NRPPA_POSITIONING_INFORMATION_REQ(mSGpTR) (mSGpTR)->ittiMsg.nrppa_positioning_information_req
#define NRPPA_POSITIONING_INFORMATION_RESP(mSGpTR) (mSGpTR)->ittiMsg.nrppa_positioning_information_resp #define NRPPA_POSITIONING_INFORMATION_RESP(mSGpTR) (mSGpTR)->ittiMsg.nrppa_positioning_information_resp
#define NRPPA_POSITIONING_ACTIVATION_REQ(mSGpTR) (mSGpTR)->ittiMsg.nrppa_positioning_activation_req
/* Structure of Positioning related NRPPA messages */ /* Structure of Positioning related NRPPA messages */
/* IE structures for Positioning related messages as per TS 38.455 V16.7.1*/ /* IE structures for Positioning related messages as per TS 38.455 V16.7.1*/
...@@ -570,6 +571,22 @@ typedef struct nrppa_trp_information_list_s { ...@@ -570,6 +571,22 @@ typedef struct nrppa_trp_information_list_s {
uint32_t trp_information_item_length; uint32_t trp_information_item_length;
} nrppa_trp_information_list_t; } nrppa_trp_information_list_t;
typedef union nrppa_srs_type_c {
uint8_t *srs_resource_set_id;
bool *aperiodic;
} nrppa_srs_type_u;
typedef enum nrppa_srs_type_e {
NRPPA_SRS_TYPE_PR_NOTHING,
NRPPA_SRS_TYPE_PR_SEMIPERSISTENTSRS,
NRPPA_SRS_TYPE_PR_APERIODICSRS
} nrppa_srs_type_pr;
typedef struct nrppa_srs_type_s {
nrppa_srs_type_pr present;
nrppa_srs_type_u choice;
} nrppa_srs_type_t;
typedef struct nrppa_trp_information_req_s { typedef struct nrppa_trp_information_req_s {
// IE 9.2.4 (mandatory) // IE 9.2.4 (mandatory)
uint16_t transaction_id; uint16_t transaction_id;
...@@ -599,4 +616,11 @@ typedef struct nrppa_positioning_information_resp_s { ...@@ -599,4 +616,11 @@ typedef struct nrppa_positioning_information_resp_s {
nrppa_srs_configuration_t *srs_configuration; nrppa_srs_configuration_t *srs_configuration;
} nrppa_positioning_information_resp_t; } nrppa_positioning_information_resp_t;
typedef struct nrppa_positioning_activation_req_s {
// IE 9.2.4 (mandatory)
uint16_t transaction_id;
// (mandatory)
nrppa_srs_type_t srs_type;
} nrppa_positioning_activation_req_t;
#endif // NRPPA_MESSAGES_TYPES_H_ #endif // NRPPA_MESSAGES_TYPES_H_
...@@ -40,7 +40,11 @@ static int nrppa_gNB_decode_initiating_message(NRPPA_NRPPA_PDU_t *pdu) ...@@ -40,7 +40,11 @@ static int nrppa_gNB_decode_initiating_message(NRPPA_NRPPA_PDU_t *pdu)
LOG_I(NRPPA, "Positioning Information Request initiating message\n"); LOG_I(NRPPA, "Positioning Information Request initiating message\n");
free(res.buffer); free(res.buffer);
break; break;
case NRPPA_ProcedureCode_id_positioningActivation:
res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_NRPPA_NRPPA_PDU, pdu);
LOG_I(NRPPA, "Positioning Activation initiating message\n");
free(res.buffer);
break;
default: default:
AssertFatal(false, "Unknown procedure ID (%d) for initiating message\n", (int)pdu->choice.initiatingMessage->procedureCode); AssertFatal(false, "Unknown procedure ID (%d) for initiating message\n", (int)pdu->choice.initiatingMessage->procedureCode);
return -1; return -1;
......
...@@ -57,7 +57,9 @@ nrppa_message_decoded_callback nrppa_messages_callback[][3] = { ...@@ -57,7 +57,9 @@ nrppa_message_decoded_callback nrppa_messages_callback[][3] = {
{0, 0, 0}, // NRPPA_ProcedureCode_id_MeasurementAbort ((NRPPA_ProcedureCode_t)14) {0, 0, 0}, // NRPPA_ProcedureCode_id_MeasurementAbort ((NRPPA_ProcedureCode_t)14)
{0, 0, 0}, // NRPPA_ProcedureCode_id_MeasurementFailureIndication ((NRPPA_ProcedureCode_t)15) {0, 0, 0}, // NRPPA_ProcedureCode_id_MeasurementFailureIndication ((NRPPA_ProcedureCode_t)15)
{nrppa_gNB_handle_trp_information_request, 0, 0}, // NRPPA_ProcedureCode_id_tRPInformationExchange ((NRPPA_ProcedureCode_t)16) {nrppa_gNB_handle_trp_information_request, 0, 0}, // NRPPA_ProcedureCode_id_tRPInformationExchange ((NRPPA_ProcedureCode_t)16)
{0, 0, 0}, // NRPPA_ProcedureCode_id_positioningActivation ((NRPPA_ProcedureCode_t)17) {nrppa_gNB_handle_positioning_activation_request,
0,
0}, // NRPPA_ProcedureCode_id_positioningActivation ((NRPPA_ProcedureCode_t)17)
{0, 0, 0}, // NRPPA_ProcedureCode_id_positioningDeactivation ((NRPPA_ProcedureCode_t)18) {0, 0, 0}, // NRPPA_ProcedureCode_id_positioningDeactivation ((NRPPA_ProcedureCode_t)18)
}; };
......
...@@ -985,6 +985,37 @@ void free_positioning_information_response(nrppa_positioning_information_resp_t ...@@ -985,6 +985,37 @@ void free_positioning_information_response(nrppa_positioning_information_resp_t
} }
} }
void decode_nrppa_srstype(NRPPA_SRSType_t *srs_type, nrppa_srs_type_t *out)
{
switch (srs_type->present) {
case NRPPA_SRSType_PR_NOTHING:
out->present = NRPPA_SRS_TYPE_PR_NOTHING;
break;
case NRPPA_SRSType_PR_semipersistentSRS:
out->present = NRPPA_SRS_TYPE_PR_SEMIPERSISTENTSRS;
out->choice.srs_resource_set_id = calloc_or_fail(1, sizeof(*out->choice.srs_resource_set_id));
*out->choice.srs_resource_set_id = srs_type->choice.semipersistentSRS->sRSResourceSetID;
break;
case NRPPA_SRSType_PR_aperiodicSRS:
out->present = NRPPA_SRS_TYPE_PR_APERIODICSRS;
out->choice.aperiodic = calloc_or_fail(1, sizeof(*out->choice.aperiodic));
*out->choice.aperiodic = srs_type->choice.aperiodicSRS->aperiodic;
break;
default:
AssertFatal(false, "received illegal SRS type\n");
break;
}
}
void free_positioning_activation_request(nrppa_positioning_activation_req_t *msg)
{
if (msg->srs_type.present == NRPPA_SRS_TYPE_PR_SEMIPERSISTENTSRS) {
free(msg->srs_type.choice.srs_resource_set_id);
} else if (msg->srs_type.present == NRPPA_SRS_TYPE_PR_APERIODICSRS) {
free(msg->srs_type.choice.aperiodic);
}
}
int nrppa_gNB_handle_trp_information_request(nrppa_gnb_ue_info_t *nrppa_msg_info, const NRPPA_NRPPA_PDU_t *pdu) int nrppa_gNB_handle_trp_information_request(nrppa_gnb_ue_info_t *nrppa_msg_info, const NRPPA_NRPPA_PDU_t *pdu)
{ {
LOG_I(NRPPA, "Processing Received TRP Information Request \n"); LOG_I(NRPPA, "Processing Received TRP Information Request \n");
...@@ -1244,3 +1275,40 @@ int nrppa_gNB_positioning_information_response(instance_t instance, MessageDef * ...@@ -1244,3 +1275,40 @@ int nrppa_gNB_positioning_information_response(instance_t instance, MessageDef *
free(buffer); free(buffer);
return length; return length;
} }
int nrppa_gNB_handle_positioning_activation_request(nrppa_gnb_ue_info_t *nrppa_msg_info, const NRPPA_NRPPA_PDU_t *pdu)
{
LOG_I(NRPPA, "Processing Received Positioning Activation Request \n");
DevAssert(pdu != NULL);
DevAssert(nrppa_msg_info != NULL);
if (LOG_DEBUGFLAG(DEBUG_ASN1)) {
xer_fprint(stdout, &asn_DEF_NRPPA_NRPPA_PDU, pdu);
}
// Preparing positioning information request for RRC
MessageDef *msg = itti_alloc_new_message(TASK_RRC_GNB, 0, NRPPA_POSITIONING_ACTIVATION_REQ);
nrppa_positioning_activation_req_t *req = &NRPPA_POSITIONING_ACTIVATION_REQ(msg);
// Processing Received PositioningActivationRequest
NRPPA_PositioningActivationRequest_t *container = NULL;
NRPPA_PositioningActivationRequestIEs_t *ie = NULL;
// IE 9.2.3 Message type : mandatory
container = &pdu->choice.initiatingMessage->value.choice.PositioningActivationRequest;
// IE 9.2.4 nrppatransactionID : mandatory
req->transaction_id = pdu->choice.initiatingMessage->nrppatransactionID;
// IE SRSType : mandatory
NRPPA_FIND_PROTOCOLIE_BY_ID(NRPPA_PositioningActivationRequestIEs_t, ie, container, NRPPA_ProtocolIE_ID_id_SRSType, true);
decode_nrppa_srstype(&ie->value.choice.SRSType, &req->srs_type);
nrppa_store_ue_context(nrppa_msg_info, req->transaction_id);
LOG_I(NRPPA, "Forwarding to RRC Positioning Activation Request transaction id = %d\n", req->transaction_id);
itti_send_msg_to_task(TASK_RRC_GNB, 0, msg);
ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_NRPPA_NRPPA_PDU, &pdu);
return 0;
}
...@@ -32,5 +32,8 @@ int nrppa_gNB_handle_positioning_information_request(nrppa_gnb_ue_info_t *nrppa_ ...@@ -32,5 +32,8 @@ int nrppa_gNB_handle_positioning_information_request(nrppa_gnb_ue_info_t *nrppa_
int nrppa_gNB_positioning_information_response(instance_t instance, MessageDef *msg_p); int nrppa_gNB_positioning_information_response(instance_t instance, MessageDef *msg_p);
NRPPA_SRSCarrier_List_t encode_srs_carrier_list_nrppa(const nrppa_srs_carrier_list_t *in_list); NRPPA_SRSCarrier_List_t encode_srs_carrier_list_nrppa(const nrppa_srs_carrier_list_t *in_list);
void free_positioning_information_response(nrppa_positioning_information_resp_t *msg); void free_positioning_information_response(nrppa_positioning_information_resp_t *msg);
int nrppa_gNB_handle_positioning_activation_request(nrppa_gnb_ue_info_t *nrppa_msg_info, const NRPPA_NRPPA_PDU_t *pdu);
void decode_nrppa_srstype(NRPPA_SRSType_t *srs_type, nrppa_srs_type_t *out);
void free_positioning_activation_request(nrppa_positioning_activation_req_t *msg);
#endif /* NRPPA_GNB_POSITIONING_PROCEDURES_H_ */ #endif /* NRPPA_GNB_POSITIONING_PROCEDURES_H_ */
...@@ -69,5 +69,7 @@ ...@@ -69,5 +69,7 @@
#include "NRPPA_PosResourceSetTypePeriodic.h" #include "NRPPA_PosResourceSetTypePeriodic.h"
#include "NRPPA_PosResourceSetTypeSemi-persistent.h" #include "NRPPA_PosResourceSetTypeSemi-persistent.h"
#include "NRPPA_PosResourceSetTypeAperiodic.h" #include "NRPPA_PosResourceSetTypeAperiodic.h"
#include "NRPPA_SemipersistentSRS.h"
#include "NRPPA_AperiodicSRS.h"
#endif /* NRPPA_INCLUDE_H_ */ #endif /* NRPPA_INCLUDE_H_ */
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