Add Positioning Activation Request NRPPA message decoding procedures
This commit is contained in:
@@ -32,3 +32,7 @@ MESSAGE_DEF(NRPPA_POSITIONING_INFORMATION_RESP,
|
||||
MESSAGE_PRIORITY_MED,
|
||||
nrppa_positioning_information_resp_t,
|
||||
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 @@
|
||||
#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_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 */
|
||||
/* 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 {
|
||||
uint32_t trp_information_item_length;
|
||||
} 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 {
|
||||
// IE 9.2.4 (mandatory)
|
||||
uint16_t transaction_id;
|
||||
@@ -599,4 +616,11 @@ typedef struct nrppa_positioning_information_resp_s {
|
||||
nrppa_srs_configuration_t *srs_configuration;
|
||||
} 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_
|
||||
|
||||
@@ -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");
|
||||
free(res.buffer);
|
||||
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:
|
||||
AssertFatal(false, "Unknown procedure ID (%d) for initiating message\n", (int)pdu->choice.initiatingMessage->procedureCode);
|
||||
return -1;
|
||||
|
||||
@@ -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_MeasurementFailureIndication ((NRPPA_ProcedureCode_t)15)
|
||||
{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)
|
||||
};
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
LOG_I(NRPPA, "Processing Received TRP Information Request \n");
|
||||
@@ -1244,3 +1275,40 @@ int nrppa_gNB_positioning_information_response(instance_t instance, MessageDef *
|
||||
free(buffer);
|
||||
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_
|
||||
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);
|
||||
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_ */
|
||||
|
||||
@@ -69,5 +69,7 @@
|
||||
#include "NRPPA_PosResourceSetTypePeriodic.h"
|
||||
#include "NRPPA_PosResourceSetTypeSemi-persistent.h"
|
||||
#include "NRPPA_PosResourceSetTypeAperiodic.h"
|
||||
#include "NRPPA_SemipersistentSRS.h"
|
||||
#include "NRPPA_AperiodicSRS.h"
|
||||
|
||||
#endif /* NRPPA_INCLUDE_H_ */
|
||||
|
||||
Reference in New Issue
Block a user