diff --git a/ci-scripts/xml_files/container_4g_l2sim_proxy.xml b/ci-scripts/xml_files/container_4g_l2sim_proxy.xml
index 2d841cbc69..4c8f9ae019 100644
--- a/ci-scripts/xml_files/container_4g_l2sim_proxy.xml
+++ b/ci-scripts/xml_files/container_4g_l2sim_proxy.xml
@@ -36,7 +36,7 @@
1
1
True
- a2fa216
+ f390610304baf6b66e4ec8cc00bf91398a651172
diff --git a/ci-scripts/xml_files/container_l2sim_proxy.xml b/ci-scripts/xml_files/container_l2sim_proxy.xml
index a237d7be5f..8a8dbd05c2 100644
--- a/ci-scripts/xml_files/container_l2sim_proxy.xml
+++ b/ci-scripts/xml_files/container_l2sim_proxy.xml
@@ -36,7 +36,7 @@
1
1
True
- a2fa216
+ f390610304baf6b66e4ec8cc00bf91398a651172
diff --git a/nfapi/oai_integration/nfapi_pnf.c b/nfapi/oai_integration/nfapi_pnf.c
index 2e2bea2061..3536f23a08 100644
--- a/nfapi/oai_integration/nfapi_pnf.c
+++ b/nfapi/oai_integration/nfapi_pnf.c
@@ -250,7 +250,8 @@ void *pnf_nr_p7_thread_start(void *ptr) {
return 0;
}
-int pnf_nr_param_request(nfapi_pnf_config_t *config, nfapi_nr_pnf_param_request_t *req) {
+int pnf_nr_param_request(nfapi_pnf_config_t *config, nfapi_nr_pnf_param_request_t *req)
+{
printf("[PNF] pnf param request\n");
nfapi_nr_pnf_param_response_t resp;
memset(&resp, 0, sizeof(resp));
@@ -271,10 +272,11 @@ int pnf_nr_param_request(nfapi_pnf_config_t *config, nfapi_nr_pnf_param_request_
resp.pnf_param_general.shared_bands = pnf->shared_bands;
resp.pnf_param_general.shared_pa = pnf->shared_pa;
resp.pnf_param_general.maximum_total_power = pnf->max_total_power;
+ resp.num_tlvs = 1;
resp.pnf_phy.tl.tag = NFAPI_PNF_PHY_TAG;
resp.pnf_phy.number_of_phys = 1;
- for(int i = 0; i < 1; ++i) {
+ for (int i = 0; i < 1; ++i) {
resp.pnf_phy.phy[i].phy_config_index = pnf->phys[i].index;
resp.pnf_phy.phy[i].downlink_channel_bandwidth_supported = pnf->phys[i].dl_channel_bw_support;
resp.pnf_phy.phy[i].uplink_channel_bandwidth_supported = pnf->phys[i].ul_channel_bw_support;
@@ -284,21 +286,21 @@ int pnf_nr_param_request(nfapi_pnf_config_t *config, nfapi_nr_pnf_param_request_
resp.pnf_phy.phy[i].nmm_modes_supported = pnf->phys[i].nmm_modes_supported;
resp.pnf_phy.phy[i].number_of_rfs = 2;
- for(int j = 0; j < 1; ++j) {
+ for (int j = 0; j < 1; ++j) {
resp.pnf_phy.phy[i].rf_config[j].rf_config_index = pnf->phys[i].rfs[j];
}
resp.pnf_phy.phy[i].number_of_rf_exclusions = 0;
- for(int j = 0; j < 0; ++j) {
+ for (int j = 0; j < 0; ++j) {
resp.pnf_phy.phy[i].excluded_rf_config[j].rf_config_index = pnf->phys[i].excluded_rfs[j];
}
+ resp.num_tlvs++;
}
nfapi_nr_pnf_pnf_param_resp(config, &resp);
return 0;
}
-
int pnf_param_request(nfapi_pnf_config_t *config, nfapi_pnf_param_request_t *req) {
printf("[PNF] pnf param request\n");
nfapi_pnf_param_response_t resp;
@@ -989,33 +991,35 @@ int config_request(nfapi_pnf_config_t *config, nfapi_pnf_phy_config_t *phy, nfap
return 0;
}
-int nr_config_request(nfapi_pnf_config_t *config, nfapi_pnf_phy_config_t *phy, nfapi_nr_config_request_scf_t *req)
+int nr_config_request(nfapi_pnf_config_t *config, nfapi_pnf_phy_config_t *phy, nfapi_nr_config_request_scf_t *req)
{
printf("[PNF] Received NFAPI_CONFIG_REQ phy_id:%d\n", req->header.phy_id);
pnf_info *pnf = (pnf_info *)(config->user_data);
uint8_t num_tlv = 0;
- //struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0];
- // In the case of nfapi_mode = 3 (UE = PNF) we should not have dependency on any eNB var. So we aim
- // to keep only the necessary just to keep the nfapi FSM rolling by sending a dummy response.
+ // struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0];
+ // In the case of nfapi_mode = 3 (UE = PNF) we should not have dependency on any eNB var. So we aim
+ // to keep only the necessary just to keep the nfapi FSM rolling by sending a dummy response.
NR_DL_FRAME_PARMS *fp;
- if (NFAPI_MODE!=NFAPI_UE_STUB_PNF) {
+ if (NFAPI_MODE != NFAPI_UE_STUB_PNF) {
struct PHY_VARS_gNB_s *gNB = RC.gNB[0];
fp = &gNB->frame_parms;
} else {
- fp = (NR_DL_FRAME_PARMS *) malloc(sizeof(NR_DL_FRAME_PARMS));
+ fp = (NR_DL_FRAME_PARMS *)malloc(sizeof(NR_DL_FRAME_PARMS));
}
phy_info *phy_info = pnf->phys;
- printf("\nTiming window tag: %d\n",NFAPI_NR_NFAPI_TIMING_WINDOW_TAG);
- if(req->nfapi_config.timing_window.tl.tag == NFAPI_NR_NFAPI_TIMING_WINDOW_TAG) {
+ printf("\nTiming window tag: %d\n", NFAPI_NR_NFAPI_TIMING_WINDOW_TAG);
+ if (req->nfapi_config.timing_window.tl.tag == NFAPI_NR_NFAPI_TIMING_WINDOW_TAG) {
phy_info->timing_window = req->nfapi_config.timing_window.value;
- printf("Phy_info:Timing window:%u NFAPI_CONFIG:timing_window:%u\n", phy_info->timing_window, req->nfapi_config.timing_window.value);
+ printf("Phy_info:Timing window:%u NFAPI_CONFIG:timing_window:%u\n",
+ phy_info->timing_window,
+ req->nfapi_config.timing_window.value);
num_tlv++;
}
- if(req->nfapi_config.timing_info_mode.tl.tag == NFAPI_NR_NFAPI_TIMING_INFO_MODE_TAG) {
+ if (req->nfapi_config.timing_info_mode.tl.tag == NFAPI_NR_NFAPI_TIMING_INFO_MODE_TAG) {
printf("timing info mode:%d\n", req->nfapi_config.timing_info_mode.value);
phy_info->timing_info_mode = req->nfapi_config.timing_info_mode.value;
num_tlv++;
@@ -1023,8 +1027,8 @@ int nr_config_request(nfapi_pnf_config_t *config, nfapi_pnf_phy_config_t *phy, n
phy_info->timing_info_mode = 0;
printf("NO timing info mode provided\n");
}
- //TODO: Read the P7 message offset values
- if(req->nfapi_config.timing_info_period.tl.tag == NFAPI_NR_NFAPI_TIMING_INFO_PERIOD_TAG) {
+ // TODO: Read the P7 message offset values
+ if (req->nfapi_config.timing_info_period.tl.tag == NFAPI_NR_NFAPI_TIMING_INFO_PERIOD_TAG) {
printf("timing info period provided value:%d\n", req->nfapi_config.timing_info_period.value);
phy_info->timing_info_period = req->nfapi_config.timing_info_period.value;
num_tlv++;
@@ -1032,18 +1036,18 @@ int nr_config_request(nfapi_pnf_config_t *config, nfapi_pnf_phy_config_t *phy, n
phy_info->timing_info_period = 0;
}
- if(req->carrier_config.dl_bandwidth.tl.tag == NFAPI_NR_CONFIG_DL_BANDWIDTH_TAG) {
- phy_info->dl_channel_bw_support = req->carrier_config.dl_bandwidth.value; //rf_config.dl_channel_bandwidth.value;
- fp->N_RB_DL = req->carrier_config.dl_bandwidth.value; //rf_config.dl_channel_bandwidth.value;
+ if (req->carrier_config.dl_bandwidth.tl.tag == NFAPI_NR_CONFIG_DL_BANDWIDTH_TAG) {
+ phy_info->dl_channel_bw_support = req->carrier_config.dl_bandwidth.value; // rf_config.dl_channel_bandwidth.value;
+ fp->N_RB_DL = req->carrier_config.dl_bandwidth.value; // rf_config.dl_channel_bandwidth.value;
num_tlv++;
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s() NFAPI_NR_CONFIG_DL_BANDWIDTH_TAG N_RB_DL:%u\n", __FUNCTION__, fp->N_RB_DL);
- } else {
+ } else {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s() Missing NFAPI_NR_CONFIG_DL_BANDWIDTH_TAG\n", __FUNCTION__);
}
- if(req->carrier_config.uplink_bandwidth.tl.tag == NFAPI_NR_CONFIG_UPLINK_BANDWIDTH_TAG) {
- phy_info->ul_channel_bw_support = req->carrier_config.uplink_bandwidth.value; //req->rf_config.ul_channel_bandwidth.value;
- fp->N_RB_UL = req->carrier_config.uplink_bandwidth.value; //req->rf_config.ul_channel_bandwidth.value;
+ if (req->carrier_config.uplink_bandwidth.tl.tag == NFAPI_NR_CONFIG_UPLINK_BANDWIDTH_TAG) {
+ phy_info->ul_channel_bw_support = req->carrier_config.uplink_bandwidth.value; // req->rf_config.ul_channel_bandwidth.value;
+ fp->N_RB_UL = req->carrier_config.uplink_bandwidth.value; // req->rf_config.ul_channel_bandwidth.value;
num_tlv++;
}
@@ -1052,12 +1056,12 @@ int nr_config_request(nfapi_pnf_config_t *config, nfapi_pnf_phy_config_t *phy, n
num_tlv++;
}
- if(NFAPI_MODE!=NFAPI_UE_STUB_PNF) {
+ if (NFAPI_MODE != NFAPI_UE_STUB_PNF) {
printf("[PNF] CONFIG_REQUEST[num_tlv:%d] TLVs processed:%d\n", req->num_tlv, num_tlv);
printf("[PNF] Simulating PHY CONFIG\n");
NR_PHY_Config_t nr_phy_config;
nr_phy_config.Mod_id = 0;
- nr_phy_config.CC_id=0;
+ nr_phy_config.CC_id = 0;
nr_phy_config.cfg = req;
nr_phy_config_request(&nr_phy_config);
nr_dump_frame_parms(fp);
@@ -1066,19 +1070,28 @@ int nr_config_request(nfapi_pnf_config_t *config, nfapi_pnf_phy_config_t *phy, n
struct sockaddr_in vnf_p7_sockaddr;
memcpy(&vnf_p7_sockaddr.sin_addr.s_addr, &(req->nfapi_config.p7_vnf_address_ipv4.address[0]), 4);
phy_info->remote_addr = inet_ntoa(vnf_p7_sockaddr.sin_addr);
- printf("[PNF] %d vnf p7 %s:%d timing %d %d %d\n", phy_info->id, phy_info->remote_addr, phy_info->remote_port,
- phy_info->timing_window, phy_info->timing_info_mode, phy_info->timing_info_period);
+ printf("[PNF] %d vnf p7 %s:%d timing %d %d %d\n",
+ phy_info->id,
+ phy_info->remote_addr,
+ phy_info->remote_port,
+ phy_info->timing_window,
+ phy_info->timing_info_mode,
+ phy_info->timing_info_period);
nfapi_nr_config_response_scf_t nfapi_resp;
memset(&nfapi_resp, 0, sizeof(nfapi_resp));
nfapi_resp.header.message_id = NFAPI_NR_PHY_MSG_TYPE_CONFIG_RESPONSE;
nfapi_resp.header.phy_id = phy_info->id;
nfapi_resp.error_code = 0;
+ nfapi_resp.num_invalid_tlvs = 0;
+ nfapi_resp.num_invalid_tlvs_configured_in_idle = 0;
+ nfapi_resp.num_invalid_tlvs_configured_in_running = 0;
+ nfapi_resp.num_missing_tlvs = 0;
nfapi_nr_pnf_config_resp(config, &nfapi_resp);
printf("[PNF] Sent NFAPI_PNF_CONFIG_RESPONSE phy_id:%d\n", phy_info->id);
- if(NFAPI_MODE==NFAPI_UE_STUB_PNF)
+ if (NFAPI_MODE == NFAPI_UE_STUB_PNF)
free(fp);
-
+
return 0;
}
diff --git a/nfapi/open-nFAPI/nfapi/inc/nfapi.h b/nfapi/open-nFAPI/nfapi/inc/nfapi.h
index c1f423a8db..e1a0ec4f4e 100644
--- a/nfapi/open-nFAPI/nfapi/inc/nfapi.h
+++ b/nfapi/open-nFAPI/nfapi/inc/nfapi.h
@@ -1,12 +1,12 @@
/*
* Copyright 2017 Cisco Systems, Inc.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-
#ifndef _NFAPI_H_
#define _NFAPI_H_
@@ -40,7 +39,6 @@ uint8_t pulls16(uint8_t **in, int16_t *out, uint8_t *end);
uint8_t pull32(uint8_t **in, uint32_t *out, uint8_t *end);
uint8_t pulls32(uint8_t **in, int32_t *out, uint8_t *end);
-
uint32_t pullarray8(uint8_t **in, uint8_t out[], uint32_t max_len, uint32_t len, uint8_t *end);
uint32_t pullarray16(uint8_t **in, uint16_t out[], uint32_t max_len, uint32_t len, uint8_t *end);
uint32_t pullarrays16(uint8_t **in, int16_t out[], uint32_t max_len, uint32_t len, uint8_t *end);
@@ -61,40 +59,79 @@ uint32_t pusharray32(const uint32_t *values_to_push,
uint8_t *out_end);
uint32_t pusharrays32(int32_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end);
-typedef uint8_t (*pack_array_elem_fn)(void* elem, uint8_t **ppWritePackedMsg, uint8_t *end);
-uint8_t packarray(void* array, uint16_t elem_size, uint16_t max_count, uint16_t count, uint8_t **ppWritePackedMsg, uint8_t *end, pack_array_elem_fn fn);
+typedef uint8_t (*pack_array_elem_fn)(void *elem, uint8_t **ppWritePackedMsg, uint8_t *end);
+uint8_t packarray(void *array,
+ uint16_t elem_size,
+ uint16_t max_count,
+ uint16_t count,
+ uint8_t **ppWritePackedMsg,
+ uint8_t *end,
+ pack_array_elem_fn fn);
-typedef uint8_t (*unpack_array_elem_fn)(void* elem, uint8_t **ppReadPackedMsg, uint8_t *end);
-uint8_t unpackarray(uint8_t **ppReadPackedMsg, void* array, uint16_t elem_size, uint16_t max_count, uint16_t count, uint8_t *end, unpack_array_elem_fn fn);
+typedef uint8_t (*unpack_array_elem_fn)(void *elem, uint8_t **ppReadPackedMsg, uint8_t *end);
+uint8_t unpackarray(uint8_t **ppReadPackedMsg,
+ void *array,
+ uint16_t elem_size,
+ uint16_t max_count,
+ uint16_t count,
+ uint8_t *end,
+ unpack_array_elem_fn fn);
uint8_t pack_tl(nfapi_tl_t *tl, uint8_t **ppWritePackedMsg, uint8_t *end);
uint8_t unpack_tl(uint8_t **ppReadPackedMsg, nfapi_tl_t *tl, uint8_t *end);
-typedef uint8_t (*pack_tlv_fn)(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end);
+typedef uint8_t (*pack_tlv_fn)(void *tlv, uint8_t **ppWritePackedMsg, uint8_t *end);
uint8_t pack_tlv(uint16_t tag, void *tlv, uint8_t **ppWritePackedMsg, uint8_t *end, pack_tlv_fn fn);
+uint8_t pack_nr_tlv(uint16_t tag, void *tlv, uint8_t **ppWritePackedMsg, uint8_t *end, pack_tlv_fn fn);
-uint32_t pack_vendor_extension_tlv(nfapi_tl_t* ve, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t* config);
-int unpack_vendor_extension(nfapi_tl_t* tl, uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t* config, nfapi_tl_t** ve_tlv);
+uint32_t pack_vendor_extension_tlv(nfapi_tl_t *ve, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config);
+int unpack_vendor_extension_tlv(nfapi_tl_t *tl,
+ uint8_t **ppReadPackedMsg,
+ uint8_t *end,
+ nfapi_p4_p5_codec_config_t *config,
+ nfapi_tl_t **ve_tlv);
-typedef uint8_t (*unpack_tlv_fn)(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end);
-typedef struct
-{
- uint16_t tag;
- void* tlv;
- unpack_tlv_fn unpack_func;
+uint8_t get_tlv_padding(uint16_t tlv_length);
+
+typedef uint8_t (*unpack_tlv_fn)(void *tlv, uint8_t **ppWritePackedMsg, uint8_t *end);
+typedef struct {
+ uint16_t tag;
+ void *tlv;
+ unpack_tlv_fn unpack_func;
} unpack_tlv_t;
-int unpack_tlv_list(unpack_tlv_t unpack_fns[], uint16_t size, uint8_t **ppReadPackedMsg, uint8_t* packedMsgEnd, nfapi_p4_p5_codec_config_t* config, nfapi_tl_t** ve);
+int unpack_tlv_list(unpack_tlv_t unpack_fns[],
+ uint16_t size,
+ uint8_t **ppReadPackedMsg,
+ uint8_t *packedMsgEnd,
+ nfapi_p4_p5_codec_config_t *config,
+ nfapi_tl_t **ve);
+int unpack_nr_tlv_list(unpack_tlv_t unpack_fns[],
+ uint16_t size,
+ uint8_t **ppReadPackedMsg,
+ uint8_t *packedMsgEnd,
+ nfapi_p4_p5_codec_config_t *config,
+ nfapi_tl_t **ve);
-uint32_t pack_p7_vendor_extension_tlv(nfapi_tl_t *ve, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p7_codec_config_t* config);
-typedef uint8_t (*unpack_p7_tlv_fn)(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p7_codec_config_t*);
-typedef struct
-{
- uint16_t tag;
- void* tlv;
- unpack_p7_tlv_fn unpack_func;
+uint32_t pack_p7_vendor_extension_tlv(nfapi_tl_t *ve, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p7_codec_config_t *config);
+typedef uint8_t (*unpack_p7_tlv_fn)(void *tlv, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p7_codec_config_t *);
+typedef struct {
+ uint16_t tag;
+ void *tlv;
+ unpack_p7_tlv_fn unpack_func;
} unpack_p7_tlv_t;
-int unpack_p7_tlv_list(unpack_p7_tlv_t unpack_fns[], uint16_t size, uint8_t **ppReadPackedMsg, uint8_t* packedMsgEnd, nfapi_p7_codec_config_t* config, nfapi_tl_t** ve);
+int unpack_p7_tlv_list(unpack_p7_tlv_t unpack_fns[],
+ uint16_t size,
+ uint8_t **ppReadPackedMsg,
+ uint8_t *packedMsgEnd,
+ nfapi_p7_codec_config_t *config,
+ nfapi_tl_t **ve);
+int unpack_nr_p7_tlv_list(unpack_p7_tlv_t unpack_fns[],
+ uint16_t size,
+ uint8_t **ppReadPackedMsg,
+ uint8_t *packedMsgEnd,
+ nfapi_p7_codec_config_t *config,
+ nfapi_tl_t **ve);
#if defined(__cplusplus)
}
diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
index fbe7a0e170..9abebfee50 100644
--- a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
+++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h
@@ -292,8 +292,8 @@ typedef enum {
} nfapi_nr_ssb_and_cset_mux_pattern_type_e;
typedef enum {
- NFAPI_NR_CCE_REG_MAPPING_INTERLEAVED=0,
- NFAPI_NR_CCE_REG_MAPPING_NON_INTERLEAVED=1
+ NFAPI_NR_CCE_REG_MAPPING_INTERLEAVED=1,
+ NFAPI_NR_CCE_REG_MAPPING_NON_INTERLEAVED=0
} nfapi_nr_cce_reg_mapping_type_e;
typedef enum {
diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
index 67ee697934..a9338cf3ca 100644
--- a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
+++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h
@@ -474,7 +474,8 @@ typedef struct {
typedef struct {
nfapi_p4_p5_message_header_t header;
- uint32_t error_code;
+ uint8_t error_code;
+ uint8_t num_tlvs;
nfapi_pnf_param_general_t pnf_param_general;
nfapi_pnf_phy_t pnf_phy;
nfapi_vendor_extension_tlv_t vendor_extension;
@@ -489,7 +490,7 @@ typedef struct {
typedef struct {
nfapi_p4_p5_message_header_t header;
- uint32_t error_code;
+ uint8_t error_code;
nfapi_vendor_extension_tlv_t vendor_extension;
} nfapi_nr_pnf_config_response_t;
@@ -566,7 +567,10 @@ typedef struct {
typedef struct {
nfapi_p4_p5_message_header_t header;
uint8_t error_code;
- //uint8_t num_invalid_tlvs;
+ uint8_t num_invalid_tlvs;
+ uint8_t num_invalid_tlvs_configured_in_idle;
+ uint8_t num_invalid_tlvs_configured_in_running;
+ uint8_t num_missing_tlvs;
// TODO: add list of invalid/unsupported TLVs (see Table 3.18)
nfapi_vendor_extension_tlv_t vendor_extension;
} nfapi_nr_config_response_scf_t;
diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi.c b/nfapi/open-nFAPI/nfapi/src/nfapi.c
index 26fc5cd82c..ef80c86849 100644
--- a/nfapi/open-nFAPI/nfapi/src/nfapi.c
+++ b/nfapi/open-nFAPI/nfapi/src/nfapi.c
@@ -567,9 +567,14 @@ uint32_t pack_vendor_extension_tlv(nfapi_tl_t *ve, uint8_t **ppWritePackedMsg, u
return 1;
}
-uint32_t unpack_vendor_extension_tlv(nfapi_tl_t *tl, uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config, nfapi_tl_t **ve_tlv) {
- if(ve_tlv != 0 && config != 0) {
- if(config->unpack_vendor_extension_tlv) {
+int unpack_vendor_extension_tlv(nfapi_tl_t *tl,
+ uint8_t **ppReadPackedMsg,
+ uint8_t *end,
+ nfapi_p4_p5_codec_config_t *config,
+ nfapi_tl_t **ve_tlv)
+{
+ if (ve_tlv != 0 && config != 0) {
+ if (config->unpack_vendor_extension_tlv) {
return (config->unpack_vendor_extension_tlv)(tl, ppReadPackedMsg, end, (void **)ve_tlv, config);
}
}
@@ -702,6 +707,104 @@ int unpack_tlv_list(unpack_tlv_t unpack_fns[], uint16_t size, uint8_t **ppReadPa
return 1;
}
+
+int unpack_nr_tlv_list(unpack_tlv_t unpack_fns[],
+ uint16_t size,
+ uint8_t **ppReadPackedMsg,
+ uint8_t *end,
+ nfapi_p4_p5_codec_config_t *config,
+ nfapi_tl_t **ve)
+{
+ nfapi_tl_t generic_tl;
+ uint8_t numBadTags = 0;
+ uint16_t idx = 0;
+
+ while ((uint8_t *)(*ppReadPackedMsg) < end) {
+ // unpack the tl and process the values accordingly
+ if (unpack_tl(ppReadPackedMsg, &generic_tl, end) == 0)
+ return 0;
+
+ uint8_t tagMatch = 0;
+ uint8_t *pStartOfValue = *ppReadPackedMsg;
+
+ for (idx = 0; idx < size; ++idx) {
+ if (unpack_fns[idx].tag == generic_tl.tag) { // match the extracted tag value with all the tags in unpack_fn list
+ tagMatch = 1;
+ nfapi_tl_t *tl = (nfapi_tl_t *)(unpack_fns[idx].tlv);
+ tl->tag = generic_tl.tag;
+ tl->length = generic_tl.length;
+ int result = (*unpack_fns[idx].unpack_func)(tl, ppReadPackedMsg, end);
+
+ if (result == 0) {
+ return 0;
+ }
+
+ // check if the length was right;
+ if (tl->length != (*ppReadPackedMsg - pStartOfValue)) {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR,
+ "Warning tlv tag 0x%x length %d not equal to unpack %ld\n",
+ tl->tag,
+ tl->length,
+ (*ppReadPackedMsg - pStartOfValue));
+ on_error();
+ }
+ // Remove padding that ensures multiple of 4 bytes (SCF 225 Section 2.3.2.1)
+ int padding = get_tlv_padding(tl->length);
+ if (padding != 0) {
+ (*ppReadPackedMsg) += padding;
+ }
+ }
+ }
+
+ if (tagMatch == 0) {
+ if (generic_tl.tag >= NFAPI_VENDOR_EXTENSION_MIN_TAG_VALUE && generic_tl.tag <= NFAPI_VENDOR_EXTENSION_MAX_TAG_VALUE) {
+ int result = unpack_vendor_extension_tlv(&generic_tl, ppReadPackedMsg, end, config, ve);
+
+ if (result == 0) {
+ // got tot the end.
+ return 0;
+ } else if (result < 0) {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR, "Unknown VE TAG value: 0x%04x\n", generic_tl.tag);
+ on_error();
+
+ if (++numBadTags > MAX_BAD_TAG) {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR, "Supplied message has had too many bad tags\n");
+ on_error();
+ return 0;
+ }
+
+ if ((end - *ppReadPackedMsg) >= generic_tl.length) {
+ // Advance past the unknown TLV
+ (*ppReadPackedMsg) += generic_tl.length + get_tlv_padding(generic_tl.length);
+ } else {
+ // go to the end
+ return 0;
+ }
+ }
+ } else {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR, "Unknown TAG value: 0x%04x\n", generic_tl.tag);
+ on_error();
+
+ if (++numBadTags > MAX_BAD_TAG) {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR, "Supplied message has had too many bad tags\n");
+ on_error();
+ return 0;
+ }
+
+ if ((end - *ppReadPackedMsg) >= generic_tl.length) {
+ // Advance past the unknown TLV
+ (*ppReadPackedMsg) += generic_tl.length + get_tlv_padding(generic_tl.length);
+ } else {
+ // go to the end
+ return 0;
+ }
+ }
+ }
+ }
+
+ return 1;
+}
+
int unpack_p7_tlv_list(unpack_p7_tlv_t unpack_fns[], uint16_t size, uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_p7_codec_config_t *config, nfapi_tl_t **ve) {
nfapi_tl_t generic_tl;
uint8_t numBadTags = 0;
@@ -785,6 +888,103 @@ int unpack_p7_tlv_list(unpack_p7_tlv_t unpack_fns[], uint16_t size, uint8_t **pp
return 1;
}
+int unpack_nr_p7_tlv_list(unpack_p7_tlv_t unpack_fns[],
+ uint16_t size,
+ uint8_t **ppReadPackedMsg,
+ uint8_t *end,
+ nfapi_p7_codec_config_t *config,
+ nfapi_tl_t **ve)
+{
+ nfapi_tl_t generic_tl;
+ uint8_t numBadTags = 0;
+ uint16_t idx = 0;
+
+ while ((uint8_t *)(*ppReadPackedMsg) < end) {
+ // unpack the tl and process the values accordingly
+ if (unpack_tl(ppReadPackedMsg, &generic_tl, end) == 0)
+ return 0;
+
+ uint8_t tagMatch = 0;
+ uint8_t *pStartOfValue = *ppReadPackedMsg;
+
+ for (idx = 0; idx < size; ++idx) {
+ if (unpack_fns[idx].tag == generic_tl.tag) {
+ tagMatch = 1;
+ nfapi_tl_t *tl = (nfapi_tl_t *)(unpack_fns[idx].tlv);
+ tl->tag = generic_tl.tag;
+ tl->length = generic_tl.length;
+ int result = (*unpack_fns[idx].unpack_func)(tl, ppReadPackedMsg, end, config);
+
+ if (result == 0) {
+ return 0;
+ }
+
+ // check if the length was right;
+ if (tl->length != (*ppReadPackedMsg - pStartOfValue)) {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR,
+ "Warning tlv tag 0x%x length %d not equal to unpack %ld\n",
+ tl->tag,
+ tl->length,
+ (*ppReadPackedMsg - pStartOfValue));
+ on_error();
+ }
+ // Remove padding that ensures multiple of 4 bytes (SCF 225 Section 2.3.2.1)
+ int padding = get_tlv_padding(tl->length);
+ if (padding != 0) {
+ (*ppReadPackedMsg) += padding;
+ }
+ }
+ }
+
+ if (tagMatch == 0) {
+ if (generic_tl.tag >= NFAPI_VENDOR_EXTENSION_MIN_TAG_VALUE && generic_tl.tag <= NFAPI_VENDOR_EXTENSION_MAX_TAG_VALUE) {
+ int result = unpack_p7_vendor_extension_tlv(&generic_tl, ppReadPackedMsg, end, config, ve);
+
+ if (result == 0) {
+ // got to end
+ return 0;
+ } else if (result < 0) {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR, "Unknown TAG value: 0x%04x\n", generic_tl.tag);
+ on_error();
+
+ if (++numBadTags > MAX_BAD_TAG) {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR, "Supplied message has had too many bad tags\n");
+ on_error();
+ return -1;
+ }
+
+ if ((end - *ppReadPackedMsg) >= generic_tl.length) {
+ // Advance past the unknown TLV
+ (*ppReadPackedMsg) += generic_tl.length + get_tlv_padding(generic_tl.length);
+ } else {
+ // got ot the dn
+ return 0;
+ }
+ }
+ } else {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR, "Unknown TAG value: 0x%04x\n", generic_tl.tag);
+ on_error();
+
+ if (++numBadTags > MAX_BAD_TAG) {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR, "Supplied message has had too many bad tags\n");
+ on_error();
+ return -1;
+ }
+
+ if ((end - *ppReadPackedMsg) >= generic_tl.length) {
+ // Advance past the unknown TLV
+ (*ppReadPackedMsg) += generic_tl.length + get_tlv_padding(generic_tl.length);
+ } else {
+ // got ot the dn
+ return 0;
+ }
+ }
+ }
+ }
+
+ return 1;
+}
+
// This intermediate function deals with calculating the length of the value
// and writing into the tlv header.
uint8_t pack_tlv(uint16_t tag, void *tlv, uint8_t **ppWritePackedMsg, uint8_t *end, pack_tlv_fn fn) {
@@ -820,6 +1020,47 @@ uint8_t pack_tlv(uint16_t tag, void *tlv, uint8_t **ppWritePackedMsg, uint8_t *e
return 1;
}
+uint8_t pack_nr_tlv(uint16_t tag, void *tlv, uint8_t **ppWritePackedMsg, uint8_t *end, pack_tlv_fn fn)
+{
+ nfapi_tl_t *tl = (nfapi_tl_t *)tlv;
+
+ // If the tag is defined
+ if (tl->tag == tag) {
+ uint8_t *pStartOfTlv = *ppWritePackedMsg;
+
+ // write a dumy tlv header
+ if (pack_tl(tl, ppWritePackedMsg, end) == 0)
+ return 0;
+
+ // Record the start of the value
+ uint8_t *pStartOfValue = *ppWritePackedMsg;
+
+ // pack the tlv value
+ if (fn(tlv, ppWritePackedMsg, end) == 0)
+ return 0;
+
+ // calculate the length of the value and rewrite the tl header
+ tl->length = (*ppWritePackedMsg) - pStartOfValue;
+ // rewrite the header with the correct length
+ pack_tl(tl, &pStartOfTlv, end);
+ // Add padding that ensures multiple of 4 bytes (SCF 225 Section 2.3.2.1)
+ int padding = get_tlv_padding(tl->length);
+ NFAPI_TRACE(NFAPI_TRACE_DEBUG, "TLV 0x%x with padding of %d bytes\n", tl->tag, padding);
+ if (padding != 0) {
+ memset(*ppWritePackedMsg, 0, padding);
+ (*ppWritePackedMsg) += padding;
+ }
+ } else {
+ if (tl->tag != 0) {
+ NFAPI_TRACE(NFAPI_TRACE_WARN, "Warning pack_tlv tag 0x%x does not match expected 0x%x\n", tl->tag, tag);
+ } else {
+ // NFAPI_TRACE(NFAPI_TRACE_ERROR, "Warning pack_tlv tag 0x%x ZERO does not match expected 0x%x\n", tl->tag, tag);
+ }
+ }
+
+ return 1;
+}
+
const char *nfapi_error_code_to_str(nfapi_error_code_e value) {
switch(value) {
case NFAPI_MSG_OK:
@@ -853,3 +1094,8 @@ const char *nfapi_error_code_to_str(nfapi_error_code_e value) {
return "UNKNOWN";
}
}
+
+uint8_t get_tlv_padding(uint16_t tlv_length)
+{
+ return (4 - (tlv_length % 4)) % 4;
+}
diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p5.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p5.c
index 9f2da4d013..661120d961 100644
--- a/nfapi/open-nFAPI/nfapi/src/nfapi_p5.c
+++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p5.c
@@ -216,15 +216,16 @@ static uint8_t pack_nr_pnf_param_response(void *msg, uint8_t **ppWritePackedMsg,
pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
}
*/
-static uint8_t pack_nr_pnf_param_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config) {
+static uint8_t pack_nr_pnf_param_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config)
+{
nfapi_nr_pnf_param_response_t *pNfapiMsg = (nfapi_nr_pnf_param_response_t *)msg;
- return (push32(pNfapiMsg->error_code, ppWritePackedMsg, end) &&
- pack_tlv(NFAPI_PNF_PARAM_GENERAL_TAG, &pNfapiMsg->pnf_param_general, ppWritePackedMsg, end, &pack_pnf_param_general_value) &&
- pack_tlv(NFAPI_PNF_PHY_TAG, &pNfapiMsg->pnf_phy, ppWritePackedMsg, end, &pack_pnf_phy_value) &&
- pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
+ return (
+ push8(pNfapiMsg->error_code, ppWritePackedMsg, end) && push8(pNfapiMsg->num_tlvs, ppWritePackedMsg, end) && // numTLVs
+ pack_nr_tlv(NFAPI_PNF_PARAM_GENERAL_TAG, &pNfapiMsg->pnf_param_general, ppWritePackedMsg, end, &pack_pnf_param_general_value)
+ && pack_nr_tlv(NFAPI_PNF_PHY_TAG, &pNfapiMsg->pnf_phy, ppWritePackedMsg, end, &pack_pnf_phy_value)
+ && pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
}
-
static uint8_t pack_pnf_param_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config) {
nfapi_pnf_param_response_t *pNfapiMsg = (nfapi_pnf_param_response_t *)msg;
return (push32(pNfapiMsg->error_code, ppWritePackedMsg, end) &&
@@ -254,11 +255,12 @@ static uint8_t pack_pnf_phy_rf_config_value(void *tlv, uint8_t **ppWritePackedMs
packarray(value->phy_rf_config, sizeof(nfapi_phy_rf_config_info_t), NFAPI_MAX_PHY_RF_INSTANCES, value->number_phy_rf_config_info, ppWritePackedMsg, end, &pack_phy_rf_config_info));
}
-static uint8_t pack_nr_pnf_config_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config) {
+static uint8_t pack_nr_pnf_config_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config)
+{
nfapi_nr_pnf_config_request_t *pNfapiMsg = (nfapi_nr_pnf_config_request_t *)msg;
- return (pack_tlv(NFAPI_PNF_PHY_RF_TAG, &pNfapiMsg->pnf_phy_rf_config, ppWritePackedMsg, end, &pack_pnf_phy_rf_config_value) &&
- //push8(pNfapiMsg->num_tlvs,ppWritePackedMsg,end) &&
- pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
+ return (push8(pNfapiMsg->num_tlvs, ppWritePackedMsg, end) && // numTLVs
+ pack_nr_tlv(NFAPI_PNF_PHY_RF_TAG, &pNfapiMsg->pnf_phy_rf_config, ppWritePackedMsg, end, &pack_pnf_phy_rf_config_value)
+ && pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
}
static uint8_t pack_pnf_config_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config) {
@@ -268,14 +270,13 @@ static uint8_t pack_pnf_config_request(void *msg, uint8_t **ppWritePackedMsg, ui
pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
}
-
-static uint8_t pack_nr_pnf_config_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config) {
+static uint8_t pack_nr_pnf_config_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config)
+{
nfapi_nr_pnf_config_response_t *pNfapiMsg = (nfapi_nr_pnf_config_response_t *)msg;
- return ( push32(pNfapiMsg->error_code, ppWritePackedMsg, end) &&
- pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
+ return (push8(pNfapiMsg->error_code, ppWritePackedMsg, end)
+ && pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
}
-
static uint8_t pack_pnf_config_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config) {
nfapi_pnf_config_response_t *pNfapiMsg = (nfapi_pnf_config_response_t *)msg;
return ( push32(pNfapiMsg->error_code, ppWritePackedMsg, end) &&
@@ -430,349 +431,1490 @@ static uint8_t pack_embms_mbsfn_config_value(void *tlv, uint8_t **ppWritePackedM
pusharrays32(value->mbsfn_subframeconfig, 8, value->num_mbsfn_config, ppWritePackedMsg, end));
}
-static uint8_t pack_param_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config) {
+static uint8_t pack_param_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config)
+{
nfapi_param_response_t *pNfapiMsg = (nfapi_param_response_t *)msg;
- return( push8(pNfapiMsg->error_code, ppWritePackedMsg, end) &&
- push8(pNfapiMsg->num_tlv, ppWritePackedMsg, end) &&
- pack_tlv(NFAPI_L1_STATUS_PHY_STATE_TAG, &pNfapiMsg->l1_status.phy_state, ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- // Do we check the phy state and then just fill those sepecified, however
- // we do not know the duplex mode, so just attempt to pack all and assumme
- // that the callee has set the right tlvs
- pack_tlv(NFAPI_PHY_CAPABILITIES_DL_BANDWIDTH_SUPPORT_TAG, &(pNfapiMsg->phy_capabilities.dl_bandwidth_support), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PHY_CAPABILITIES_UL_BANDWIDTH_SUPPORT_TAG, &(pNfapiMsg->phy_capabilities.ul_bandwidth_support), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PHY_CAPABILITIES_DL_MODULATION_SUPPORT_TAG, &(pNfapiMsg->phy_capabilities.dl_modulation_support), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PHY_CAPABILITIES_UL_MODULATION_SUPPORT_TAG, &(pNfapiMsg->phy_capabilities.ul_modulation_support), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PHY_CAPABILITIES_PHY_ANTENNA_CAPABILITY_TAG, &(pNfapiMsg->phy_capabilities.phy_antenna_capability), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PHY_CAPABILITIES_RELEASE_CAPABILITY_TAG, &(pNfapiMsg->phy_capabilities.release_capability), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PHY_CAPABILITIES_MBSFN_CAPABILITY_TAG, &(pNfapiMsg->phy_capabilities.mbsfn_capability), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- // laa capability
- pack_tlv(NFAPI_SUBFRAME_CONFIG_DUPLEX_MODE_TAG, &(pNfapiMsg->subframe_config.duplex_mode), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SUBFRAME_CONFIG_PCFICH_POWER_OFFSET_TAG, &(pNfapiMsg->subframe_config.pcfich_power_offset), ppWritePackedMsg, end, &pack_uint16_tlv_value)&&
- pack_tlv(NFAPI_SUBFRAME_CONFIG_PB_TAG, &(pNfapiMsg->subframe_config.pb), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SUBFRAME_CONFIG_DL_CYCLIC_PREFIX_TYPE_TAG, &(pNfapiMsg->subframe_config.dl_cyclic_prefix_type), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SUBFRAME_CONFIG_UL_CYCLIC_PREFIX_TYPE_TAG, &(pNfapiMsg->subframe_config.ul_cyclic_prefix_type), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG, &(pNfapiMsg->rf_config.dl_channel_bandwidth), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG, &(pNfapiMsg->rf_config.ul_channel_bandwidth), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_RF_CONFIG_REFERENCE_SIGNAL_POWER_TAG, &(pNfapiMsg->rf_config.reference_signal_power), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_RF_CONFIG_TX_ANTENNA_PORTS_TAG, &(pNfapiMsg->rf_config.tx_antenna_ports), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_RF_CONFIG_RX_ANTENNA_PORTS_TAG, &(pNfapiMsg->rf_config.rx_antenna_ports), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PHICH_CONFIG_PHICH_RESOURCE_TAG, &(pNfapiMsg->phich_config.phich_resource), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PHICH_CONFIG_PHICH_DURATION_TAG, &(pNfapiMsg->phich_config.phich_duration), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PHICH_CONFIG_PHICH_POWER_OFFSET_TAG, &(pNfapiMsg->phich_config.phich_power_offset), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SCH_CONFIG_PRIMARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG, &(pNfapiMsg->sch_config.primary_synchronization_signal_epre_eprers), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SCH_CONFIG_SECONDARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG, &(pNfapiMsg->sch_config.secondary_synchronization_signal_epre_eprers), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SCH_CONFIG_PHYSICAL_CELL_ID_TAG, &(pNfapiMsg->sch_config.physical_cell_id), ppWritePackedMsg, end,&pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PRACH_CONFIG_CONFIGURATION_INDEX_TAG, &(pNfapiMsg->prach_config.configuration_index), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PRACH_CONFIG_ROOT_SEQUENCE_INDEX_TAG, &(pNfapiMsg->prach_config.root_sequence_index), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PRACH_CONFIG_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG, &(pNfapiMsg->prach_config.zero_correlation_zone_configuration), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PRACH_CONFIG_HIGH_SPEED_FLAG_TAG, &(pNfapiMsg->prach_config.high_speed_flag), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PRACH_CONFIG_FREQUENCY_OFFSET_TAG, &(pNfapiMsg->prach_config.frequency_offset), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PUSCH_CONFIG_HOPPING_MODE_TAG, &(pNfapiMsg->pusch_config.hopping_mode), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PUSCH_CONFIG_HOPPING_OFFSET_TAG, &(pNfapiMsg->pusch_config.hopping_offset), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PUSCH_CONFIG_NUMBER_OF_SUBBANDS_TAG, &(pNfapiMsg->pusch_config.number_of_subbands), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PUCCH_CONFIG_DELTA_PUCCH_SHIFT_TAG, &(pNfapiMsg->pucch_config.delta_pucch_shift), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PUCCH_CONFIG_N_CQI_RB_TAG, &(pNfapiMsg->pucch_config.n_cqi_rb), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PUCCH_CONFIG_N_AN_CS_TAG, &(pNfapiMsg->pucch_config.n_an_cs), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PUCCH_CONFIG_N1_PUCCH_AN_TAG, &(pNfapiMsg->pucch_config.n1_pucch_an), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMBMS_MBSFN_CONFIG_AREA_IDX_TAG, &(pNfapiMsg->embms_sib13_config.mbsfn_area_idx), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_EMBMS_MBSFN_CONFIG_AREA_IDR9_TAG, &(pNfapiMsg->embms_sib13_config.mbsfn_area_id_r9), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMBMS_MBSFN_CONFIG_TAG, &(pNfapiMsg->embms_mbsfn_config), ppWritePackedMsg, end, &pack_embms_mbsfn_config_value) &&
- pack_tlv(NFAPI_FEMBMS_CONFIG_RADIOFRAME_ALLOCATION_PERIOD_TAG, &(pNfapiMsg->fembms_config.radioframe_allocation_period), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_FEMBMS_CONFIG_RADIOFRAME_ALLOCATION_OFFSET_TAG, &(pNfapiMsg->fembms_config.radioframe_allocation_offset), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_FEMBMS_CONFIG_NON_MBSFN_FLAG_TAG, &(pNfapiMsg->fembms_config.non_mbsfn_config_flag), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_FEMBMS_CONFIG_NON_MBSFN_SUBFRAMECONFIG_TAG, &(pNfapiMsg->fembms_config.non_mbsfn_subframeconfig), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SRS_CONFIG_BANDWIDTH_CONFIGURATION_TAG, &(pNfapiMsg->srs_config.bandwidth_configuration), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SRS_CONFIG_MAX_UP_PTS_TAG, &(pNfapiMsg->srs_config.max_up_pts), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SRS_CONFIG_SRS_SUBFRAME_CONFIGURATION_TAG, &(pNfapiMsg->srs_config.srs_subframe_configuration), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SRS_CONFIG_SRS_ACKNACK_SRS_SIMULTANEOUS_TRANSMISSION_TAG, &(pNfapiMsg->srs_config.srs_acknack_srs_simultaneous_transmission), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_UPLINK_RS_HOPPING_TAG, &(pNfapiMsg->uplink_reference_signal_config.uplink_rs_hopping), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_GROUP_ASSIGNMENT_TAG, &(pNfapiMsg->uplink_reference_signal_config.group_assignment), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_CYCLIC_SHIFT_1_FOR_DRMS_TAG, &(pNfapiMsg->uplink_reference_signal_config.cyclic_shift_1_for_drms), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_TDD_FRAME_STRUCTURE_SUBFRAME_ASSIGNMENT_TAG, &(pNfapiMsg->tdd_frame_structure_config.subframe_assignment), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_TDD_FRAME_STRUCTURE_SPECIAL_SUBFRAME_PATTERNS_TAG, &(pNfapiMsg->tdd_frame_structure_config.special_subframe_patterns), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_L23_CONFIG_DATA_REPORT_MODE_TAG, &(pNfapiMsg->l23_config.data_report_mode), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_L23_CONFIG_SFNSF_TAG, &(pNfapiMsg->l23_config.sfnsf), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_P7_VNF_ADDRESS_IPV4_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv4), ppWritePackedMsg, end, &pack_ipv4_address_value) &&
- pack_tlv(NFAPI_NFAPI_P7_VNF_ADDRESS_IPV6_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv6), ppWritePackedMsg, end, &pack_ipv6_address_value) &&
- pack_tlv(NFAPI_NFAPI_P7_VNF_PORT_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_port), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_P7_PNF_ADDRESS_IPV4_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv4), ppWritePackedMsg, end, &pack_ipv4_address_value) &&
- pack_tlv(NFAPI_NFAPI_P7_PNF_ADDRESS_IPV6_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv6), ppWritePackedMsg, end, &pack_ipv6_address_value) &&
- pack_tlv(NFAPI_NFAPI_P7_PNF_PORT_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_port), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG, &(pNfapiMsg->nfapi_config.dl_ue_per_sf), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG, &(pNfapiMsg->nfapi_config.ul_ue_per_sf), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_RF_BANDS_TAG, &(pNfapiMsg->nfapi_config.rf_bands), ppWritePackedMsg, end, &pack_rf_bands_value) &&
- pack_tlv(NFAPI_NFAPI_TIMING_WINDOW_TAG, &(pNfapiMsg->nfapi_config.timing_window), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_TIMING_INFO_MODE_TAG, &(pNfapiMsg->nfapi_config.timing_info_mode), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_TIMING_INFO_PERIOD_TAG, &(pNfapiMsg->nfapi_config.timing_info_period), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG, &(pNfapiMsg->nfapi_config.max_transmit_power), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_EARFCN_TAG, &(pNfapiMsg->nfapi_config.earfcn), ppWritePackedMsg, end, &pack_uint32_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG, &(pNfapiMsg->nfapi_config.nmm_gsm_frequency_bands), ppWritePackedMsg, end, &pack_nmm_frequency_bands_value) &&
- pack_tlv(NFAPI_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG, &(pNfapiMsg->nfapi_config.nmm_umts_frequency_bands), ppWritePackedMsg, end, &pack_nmm_frequency_bands_value) &&
- pack_tlv(NFAPI_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG, &(pNfapiMsg->nfapi_config.nmm_lte_frequency_bands), ppWritePackedMsg, end, &pack_nmm_frequency_bands_value) &&
- pack_tlv(NFAPI_NFAPI_NMM_UPLINK_RSSI_SUPPORTED_TAG, &(pNfapiMsg->nfapi_config.nmm_uplink_rssi_supported), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config) );
+ return (
+ push8(pNfapiMsg->error_code, ppWritePackedMsg, end) && push8(pNfapiMsg->num_tlv, ppWritePackedMsg, end)
+ && pack_tlv(NFAPI_L1_STATUS_PHY_STATE_TAG, &pNfapiMsg->l1_status.phy_state, ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
+ // Do we check the phy state and then just fill those sepecified, however
+ // we do not know the duplex mode, so just attempt to pack all and assumme
+ // that the callee has set the right tlvs
+ pack_tlv(NFAPI_PHY_CAPABILITIES_DL_BANDWIDTH_SUPPORT_TAG,
+ &(pNfapiMsg->phy_capabilities.dl_bandwidth_support),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PHY_CAPABILITIES_UL_BANDWIDTH_SUPPORT_TAG,
+ &(pNfapiMsg->phy_capabilities.ul_bandwidth_support),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PHY_CAPABILITIES_DL_MODULATION_SUPPORT_TAG,
+ &(pNfapiMsg->phy_capabilities.dl_modulation_support),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PHY_CAPABILITIES_UL_MODULATION_SUPPORT_TAG,
+ &(pNfapiMsg->phy_capabilities.ul_modulation_support),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PHY_CAPABILITIES_PHY_ANTENNA_CAPABILITY_TAG,
+ &(pNfapiMsg->phy_capabilities.phy_antenna_capability),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PHY_CAPABILITIES_RELEASE_CAPABILITY_TAG,
+ &(pNfapiMsg->phy_capabilities.release_capability),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PHY_CAPABILITIES_MBSFN_CAPABILITY_TAG,
+ &(pNfapiMsg->phy_capabilities.mbsfn_capability),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ &&
+ // laa capability
+ pack_tlv(NFAPI_SUBFRAME_CONFIG_DUPLEX_MODE_TAG,
+ &(pNfapiMsg->subframe_config.duplex_mode),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SUBFRAME_CONFIG_PCFICH_POWER_OFFSET_TAG,
+ &(pNfapiMsg->subframe_config.pcfich_power_offset),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SUBFRAME_CONFIG_PB_TAG, &(pNfapiMsg->subframe_config.pb), ppWritePackedMsg, end, &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SUBFRAME_CONFIG_DL_CYCLIC_PREFIX_TYPE_TAG,
+ &(pNfapiMsg->subframe_config.dl_cyclic_prefix_type),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SUBFRAME_CONFIG_UL_CYCLIC_PREFIX_TYPE_TAG,
+ &(pNfapiMsg->subframe_config.ul_cyclic_prefix_type),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG,
+ &(pNfapiMsg->rf_config.dl_channel_bandwidth),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG,
+ &(pNfapiMsg->rf_config.ul_channel_bandwidth),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_RF_CONFIG_REFERENCE_SIGNAL_POWER_TAG,
+ &(pNfapiMsg->rf_config.reference_signal_power),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_RF_CONFIG_TX_ANTENNA_PORTS_TAG,
+ &(pNfapiMsg->rf_config.tx_antenna_ports),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_RF_CONFIG_RX_ANTENNA_PORTS_TAG,
+ &(pNfapiMsg->rf_config.rx_antenna_ports),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PHICH_CONFIG_PHICH_RESOURCE_TAG,
+ &(pNfapiMsg->phich_config.phich_resource),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PHICH_CONFIG_PHICH_DURATION_TAG,
+ &(pNfapiMsg->phich_config.phich_duration),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PHICH_CONFIG_PHICH_POWER_OFFSET_TAG,
+ &(pNfapiMsg->phich_config.phich_power_offset),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SCH_CONFIG_PRIMARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG,
+ &(pNfapiMsg->sch_config.primary_synchronization_signal_epre_eprers),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SCH_CONFIG_SECONDARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG,
+ &(pNfapiMsg->sch_config.secondary_synchronization_signal_epre_eprers),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SCH_CONFIG_PHYSICAL_CELL_ID_TAG,
+ &(pNfapiMsg->sch_config.physical_cell_id),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PRACH_CONFIG_CONFIGURATION_INDEX_TAG,
+ &(pNfapiMsg->prach_config.configuration_index),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PRACH_CONFIG_ROOT_SEQUENCE_INDEX_TAG,
+ &(pNfapiMsg->prach_config.root_sequence_index),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PRACH_CONFIG_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG,
+ &(pNfapiMsg->prach_config.zero_correlation_zone_configuration),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PRACH_CONFIG_HIGH_SPEED_FLAG_TAG,
+ &(pNfapiMsg->prach_config.high_speed_flag),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PRACH_CONFIG_FREQUENCY_OFFSET_TAG,
+ &(pNfapiMsg->prach_config.frequency_offset),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PUSCH_CONFIG_HOPPING_MODE_TAG,
+ &(pNfapiMsg->pusch_config.hopping_mode),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PUSCH_CONFIG_HOPPING_OFFSET_TAG,
+ &(pNfapiMsg->pusch_config.hopping_offset),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PUSCH_CONFIG_NUMBER_OF_SUBBANDS_TAG,
+ &(pNfapiMsg->pusch_config.number_of_subbands),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PUCCH_CONFIG_DELTA_PUCCH_SHIFT_TAG,
+ &(pNfapiMsg->pucch_config.delta_pucch_shift),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PUCCH_CONFIG_N_CQI_RB_TAG,
+ &(pNfapiMsg->pucch_config.n_cqi_rb),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PUCCH_CONFIG_N_AN_CS_TAG, &(pNfapiMsg->pucch_config.n_an_cs), ppWritePackedMsg, end, &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PUCCH_CONFIG_N1_PUCCH_AN_TAG,
+ &(pNfapiMsg->pucch_config.n1_pucch_an),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMBMS_MBSFN_CONFIG_AREA_IDX_TAG,
+ &(pNfapiMsg->embms_sib13_config.mbsfn_area_idx),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_tlv(NFAPI_EMBMS_MBSFN_CONFIG_AREA_IDR9_TAG,
+ &(pNfapiMsg->embms_sib13_config.mbsfn_area_id_r9),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMBMS_MBSFN_CONFIG_TAG,
+ &(pNfapiMsg->embms_mbsfn_config),
+ ppWritePackedMsg,
+ end,
+ &pack_embms_mbsfn_config_value)
+ && pack_tlv(NFAPI_FEMBMS_CONFIG_RADIOFRAME_ALLOCATION_PERIOD_TAG,
+ &(pNfapiMsg->fembms_config.radioframe_allocation_period),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_tlv(NFAPI_FEMBMS_CONFIG_RADIOFRAME_ALLOCATION_OFFSET_TAG,
+ &(pNfapiMsg->fembms_config.radioframe_allocation_offset),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_tlv(NFAPI_FEMBMS_CONFIG_NON_MBSFN_FLAG_TAG,
+ &(pNfapiMsg->fembms_config.non_mbsfn_config_flag),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_tlv(NFAPI_FEMBMS_CONFIG_NON_MBSFN_SUBFRAMECONFIG_TAG,
+ &(pNfapiMsg->fembms_config.non_mbsfn_subframeconfig),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SRS_CONFIG_BANDWIDTH_CONFIGURATION_TAG,
+ &(pNfapiMsg->srs_config.bandwidth_configuration),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SRS_CONFIG_MAX_UP_PTS_TAG,
+ &(pNfapiMsg->srs_config.max_up_pts),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SRS_CONFIG_SRS_SUBFRAME_CONFIGURATION_TAG,
+ &(pNfapiMsg->srs_config.srs_subframe_configuration),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SRS_CONFIG_SRS_ACKNACK_SRS_SIMULTANEOUS_TRANSMISSION_TAG,
+ &(pNfapiMsg->srs_config.srs_acknack_srs_simultaneous_transmission),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_UPLINK_RS_HOPPING_TAG,
+ &(pNfapiMsg->uplink_reference_signal_config.uplink_rs_hopping),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_GROUP_ASSIGNMENT_TAG,
+ &(pNfapiMsg->uplink_reference_signal_config.group_assignment),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_CYCLIC_SHIFT_1_FOR_DRMS_TAG,
+ &(pNfapiMsg->uplink_reference_signal_config.cyclic_shift_1_for_drms),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_TDD_FRAME_STRUCTURE_SUBFRAME_ASSIGNMENT_TAG,
+ &(pNfapiMsg->tdd_frame_structure_config.subframe_assignment),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_TDD_FRAME_STRUCTURE_SPECIAL_SUBFRAME_PATTERNS_TAG,
+ &(pNfapiMsg->tdd_frame_structure_config.special_subframe_patterns),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_L23_CONFIG_DATA_REPORT_MODE_TAG,
+ &(pNfapiMsg->l23_config.data_report_mode),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_L23_CONFIG_SFNSF_TAG, &(pNfapiMsg->l23_config.sfnsf), ppWritePackedMsg, end, &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_NFAPI_P7_VNF_ADDRESS_IPV4_TAG,
+ &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv4),
+ ppWritePackedMsg,
+ end,
+ &pack_ipv4_address_value)
+ && pack_tlv(NFAPI_NFAPI_P7_VNF_ADDRESS_IPV6_TAG,
+ &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv6),
+ ppWritePackedMsg,
+ end,
+ &pack_ipv6_address_value)
+ && pack_tlv(NFAPI_NFAPI_P7_VNF_PORT_TAG,
+ &(pNfapiMsg->nfapi_config.p7_vnf_port),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_NFAPI_P7_PNF_ADDRESS_IPV4_TAG,
+ &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv4),
+ ppWritePackedMsg,
+ end,
+ &pack_ipv4_address_value)
+ && pack_tlv(NFAPI_NFAPI_P7_PNF_ADDRESS_IPV6_TAG,
+ &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv6),
+ ppWritePackedMsg,
+ end,
+ &pack_ipv6_address_value)
+ && pack_tlv(NFAPI_NFAPI_P7_PNF_PORT_TAG,
+ &(pNfapiMsg->nfapi_config.p7_pnf_port),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG,
+ &(pNfapiMsg->nfapi_config.dl_ue_per_sf),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_tlv(NFAPI_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG,
+ &(pNfapiMsg->nfapi_config.ul_ue_per_sf),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_tlv(NFAPI_NFAPI_RF_BANDS_TAG, &(pNfapiMsg->nfapi_config.rf_bands), ppWritePackedMsg, end, &pack_rf_bands_value)
+ && pack_tlv(NFAPI_NFAPI_TIMING_WINDOW_TAG,
+ &(pNfapiMsg->nfapi_config.timing_window),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_tlv(NFAPI_NFAPI_TIMING_INFO_MODE_TAG,
+ &(pNfapiMsg->nfapi_config.timing_info_mode),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_tlv(NFAPI_NFAPI_TIMING_INFO_PERIOD_TAG,
+ &(pNfapiMsg->nfapi_config.timing_info_period),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_tlv(NFAPI_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG,
+ &(pNfapiMsg->nfapi_config.max_transmit_power),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_NFAPI_EARFCN_TAG, &(pNfapiMsg->nfapi_config.earfcn), ppWritePackedMsg, end, &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG,
+ &(pNfapiMsg->nfapi_config.nmm_gsm_frequency_bands),
+ ppWritePackedMsg,
+ end,
+ &pack_nmm_frequency_bands_value)
+ && pack_tlv(NFAPI_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG,
+ &(pNfapiMsg->nfapi_config.nmm_umts_frequency_bands),
+ ppWritePackedMsg,
+ end,
+ &pack_nmm_frequency_bands_value)
+ && pack_tlv(NFAPI_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG,
+ &(pNfapiMsg->nfapi_config.nmm_lte_frequency_bands),
+ ppWritePackedMsg,
+ end,
+ &pack_nmm_frequency_bands_value)
+ && pack_tlv(NFAPI_NFAPI_NMM_UPLINK_RSSI_SUPPORTED_TAG,
+ &(pNfapiMsg->nfapi_config.nmm_uplink_rssi_supported),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
}
-static uint8_t pack_nr_param_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config) {
+static uint8_t pack_nr_param_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config)
+{
printf("\nRUNNING pack_param_response\n");
nfapi_nr_param_response_scf_t *pNfapiMsg = (nfapi_nr_param_response_scf_t *)msg;
- return (push8(pNfapiMsg->error_code, ppWritePackedMsg, end) &&
- push8(pNfapiMsg->num_tlv, ppWritePackedMsg, end) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_RELEASE_CAPABILITY_TAG, &(pNfapiMsg->cell_param.release_capability), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PHY_STATE_TAG, &(pNfapiMsg->cell_param.phy_state), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_SKIP_BLANK_DL_CONFIG_TAG, &(pNfapiMsg->cell_param.skip_blank_dl_config), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_SKIP_BLANK_UL_CONFIG_TAG, &(pNfapiMsg->cell_param.skip_blank_ul_config), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_NUM_CONFIG_TLVS_TO_REPORT_TAG, &(pNfapiMsg->cell_param.num_config_tlvs_to_report ), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_CYCLIC_PREFIX_TAG, &(pNfapiMsg->carrier_param.cyclic_prefix), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_SUPPORTED_SUBCARRIER_SPACINGS_DL_TAG, &(pNfapiMsg->carrier_param.supported_subcarrier_spacings_dl), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_SUPPORTED_BANDWIDTH_DL_TAG, &(pNfapiMsg->carrier_param.supported_bandwidth_dl), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_SUPPORTED_SUBCARRIER_SPACINGS_UL_TAG, &(pNfapiMsg->carrier_param.supported_subcarrier_spacings_ul), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_SUPPORTED_BANDWIDTH_UL_TAG, &(pNfapiMsg->carrier_param.supported_bandwidth_ul), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_CCE_MAPPING_TYPE_TAG, &(pNfapiMsg->pdcch_param.cce_mapping_type), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_CORESET_OUTSIDE_FIRST_3_OFDM_SYMS_OF_SLOT_TAG, &(pNfapiMsg->pdcch_param.coreset_outside_first_3_of_ofdm_syms_of_slot), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PRECODER_GRANULARITY_CORESET_TAG, &(pNfapiMsg->pdcch_param.coreset_precoder_granularity_coreset), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PDCCH_MU_MIMO_TAG, &(pNfapiMsg->pdcch_param.pdcch_mu_mimo), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PDCCH_PRECODER_CYCLING_TAG, &(pNfapiMsg->pdcch_param.pdcch_precoder_cycling), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_MAX_PDCCHS_PER_SLOT_TAG, &(pNfapiMsg->pdcch_param.max_pdcch_per_slot), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PUCCH_FORMATS_TAG, &(pNfapiMsg->pucch_param.pucch_formats), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_MAX_PUCCHS_PER_SLOT_TAG, &(pNfapiMsg->pucch_param.max_pucchs_per_slot), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PDSCH_MAPPING_TYPE_TAG, &(pNfapiMsg->pdsch_param.pdsch_mapping_type), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PDSCH_ALLOCATION_TYPES_TAG, &(pNfapiMsg->pdsch_param.pdsch_allocation_types), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PDSCH_VRB_TO_PRB_MAPPING_TAG, &(pNfapiMsg->pdsch_param.pdsch_vrb_to_prb_mapping), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PDSCH_CBG_TAG, &(pNfapiMsg->pdsch_param.pdsch_cbg), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PDSCH_DMRS_CONFIG_TYPES_TAG, &(pNfapiMsg->pdsch_param.pdsch_dmrs_config_types), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PDSCH_DMRS_MAX_LENGTH_TAG, &(pNfapiMsg->pdsch_param.pdsch_dmrs_max_length), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PDSCH_DMRS_ADDITIONAL_POS_TAG, &(pNfapiMsg->pdsch_param.pdsch_dmrs_additional_pos), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_MAX_PDSCH_S_YBS_PER_SLOT_TAG, &(pNfapiMsg->pdsch_param.max_pdsch_tbs_per_slot), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_MAX_NUMBER_MIMO_LAYERS_PDSCH_TAG, &(pNfapiMsg->pdsch_param.max_number_mimo_layers_pdsch), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_MAX_MU_MIMO_USERS_DL_TAG, &(pNfapiMsg->pdsch_param.max_mu_mimo_users_dl), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PDSCH_DATA_IN_DMRS_SYMBOLS_TAG, &(pNfapiMsg->pdsch_param.pdsch_data_in_dmrs_symbols), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PREMPTION_SUPPORT_TAG, &(pNfapiMsg->pdsch_param.premption_support), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PDSCH_NON_SLOT_SUPPORT_TAG, &(pNfapiMsg->pdsch_param.pdsch_non_slot_support), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_UCI_MUX_ULSCH_IN_PUSCH_TAG, &(pNfapiMsg->pusch_param.uci_mux_ulsch_in_pusch), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_UCI_ONLY_PUSCH_TAG, &(pNfapiMsg->pusch_param.uci_only_pusch), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PUSCH_FREQUENCY_HOPPING_TAG, &(pNfapiMsg->pusch_param.pusch_frequency_hopping), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PUSCH_DMRS_CONFIG_TYPES_TAG, &(pNfapiMsg->pusch_param.pusch_dmrs_config_types), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PUSCH_DMRS_MAX_LEN_TAG, &(pNfapiMsg->pusch_param.pusch_dmrs_max_len), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PUSCH_DMRS_ADDITIONAL_POS_TAG, &(pNfapiMsg->pusch_param.pusch_dmrs_additional_pos), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PUSCH_CBG_TAG, &(pNfapiMsg->pusch_param.pusch_cbg), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PUSCH_MAPPING_TYPE_TAG, &(pNfapiMsg->pusch_param.pusch_mapping_type), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PUSCH_ALLOCATION_TYPES_TAG, &(pNfapiMsg->pusch_param.pusch_allocation_types), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PUSCH_VRB_TO_PRB_MAPPING_TAG, &(pNfapiMsg->pusch_param.pusch_vrb_to_prb_mapping), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PUSCH_MAX_PTRS_PORTS_TAG, &(pNfapiMsg->pusch_param.pusch_max_ptrs_ports), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_MAX_PDUSCHS_TBS_PER_SLOT_TAG, &(pNfapiMsg->pusch_param.max_pduschs_tbs_per_slot), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_MAX_NUMBER_MIMO_LAYERS_NON_CB_PUSCH_TAG, &(pNfapiMsg->pusch_param.max_number_mimo_layers_non_cb_pusch), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_SUPPORTED_MODULATION_ORDER_UL_TAG, &(pNfapiMsg->pusch_param.supported_modulation_order_ul), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_MAX_MU_MIMO_USERS_UL_TAG, &(pNfapiMsg->pusch_param.max_mu_mimo_users_ul), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_DFTS_OFDM_SUPPORT_TAG, &(pNfapiMsg->pusch_param.dfts_ofdm_support), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PUSCH_AGGREGATION_FACTOR_TAG, &(pNfapiMsg->pusch_param.pusch_aggregation_factor), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PRACH_LONG_FORMATS_TAG, &(pNfapiMsg->prach_param.prach_long_formats), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PRACH_SHORT_FORMATS_TAG, &(pNfapiMsg->prach_param.prach_short_formats), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_PRACH_RESTRICTED_SETS_TAG, &(pNfapiMsg->prach_param.prach_restricted_sets), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_MAX_PRACH_FD_OCCASIONS_IN_A_SLOT_TAG, &(pNfapiMsg->prach_param.max_prach_fd_occasions_in_a_slot), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_PARAM_TLV_RSSI_MEASUREMENT_SUPPORT_TAG, &(pNfapiMsg->measurement_param.rssi_measurement_support), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
+ return (push8(pNfapiMsg->error_code, ppWritePackedMsg, end) && push8(pNfapiMsg->num_tlv, ppWritePackedMsg, end)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_RELEASE_CAPABILITY_TAG,
+ &(pNfapiMsg->cell_param.release_capability),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PHY_STATE_TAG,
+ &(pNfapiMsg->cell_param.phy_state),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_SKIP_BLANK_DL_CONFIG_TAG,
+ &(pNfapiMsg->cell_param.skip_blank_dl_config),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_SKIP_BLANK_UL_CONFIG_TAG,
+ &(pNfapiMsg->cell_param.skip_blank_ul_config),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_NUM_CONFIG_TLVS_TO_REPORT_TAG,
+ &(pNfapiMsg->cell_param.num_config_tlvs_to_report),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_CYCLIC_PREFIX_TAG,
+ &(pNfapiMsg->carrier_param.cyclic_prefix),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_SUPPORTED_SUBCARRIER_SPACINGS_DL_TAG,
+ &(pNfapiMsg->carrier_param.supported_subcarrier_spacings_dl),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_SUPPORTED_BANDWIDTH_DL_TAG,
+ &(pNfapiMsg->carrier_param.supported_bandwidth_dl),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_SUPPORTED_SUBCARRIER_SPACINGS_UL_TAG,
+ &(pNfapiMsg->carrier_param.supported_subcarrier_spacings_ul),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_SUPPORTED_BANDWIDTH_UL_TAG,
+ &(pNfapiMsg->carrier_param.supported_bandwidth_ul),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_CCE_MAPPING_TYPE_TAG,
+ &(pNfapiMsg->pdcch_param.cce_mapping_type),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_CORESET_OUTSIDE_FIRST_3_OFDM_SYMS_OF_SLOT_TAG,
+ &(pNfapiMsg->pdcch_param.coreset_outside_first_3_of_ofdm_syms_of_slot),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PRECODER_GRANULARITY_CORESET_TAG,
+ &(pNfapiMsg->pdcch_param.coreset_precoder_granularity_coreset),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PDCCH_MU_MIMO_TAG,
+ &(pNfapiMsg->pdcch_param.pdcch_mu_mimo),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PDCCH_PRECODER_CYCLING_TAG,
+ &(pNfapiMsg->pdcch_param.pdcch_precoder_cycling),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_MAX_PDCCHS_PER_SLOT_TAG,
+ &(pNfapiMsg->pdcch_param.max_pdcch_per_slot),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PUCCH_FORMATS_TAG,
+ &(pNfapiMsg->pucch_param.pucch_formats),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_MAX_PUCCHS_PER_SLOT_TAG,
+ &(pNfapiMsg->pucch_param.max_pucchs_per_slot),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PDSCH_MAPPING_TYPE_TAG,
+ &(pNfapiMsg->pdsch_param.pdsch_mapping_type),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PDSCH_ALLOCATION_TYPES_TAG,
+ &(pNfapiMsg->pdsch_param.pdsch_allocation_types),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PDSCH_VRB_TO_PRB_MAPPING_TAG,
+ &(pNfapiMsg->pdsch_param.pdsch_vrb_to_prb_mapping),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PDSCH_CBG_TAG,
+ &(pNfapiMsg->pdsch_param.pdsch_cbg),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PDSCH_DMRS_CONFIG_TYPES_TAG,
+ &(pNfapiMsg->pdsch_param.pdsch_dmrs_config_types),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PDSCH_DMRS_MAX_LENGTH_TAG,
+ &(pNfapiMsg->pdsch_param.pdsch_dmrs_max_length),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PDSCH_DMRS_ADDITIONAL_POS_TAG,
+ &(pNfapiMsg->pdsch_param.pdsch_dmrs_additional_pos),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_MAX_PDSCH_S_YBS_PER_SLOT_TAG,
+ &(pNfapiMsg->pdsch_param.max_pdsch_tbs_per_slot),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_MAX_NUMBER_MIMO_LAYERS_PDSCH_TAG,
+ &(pNfapiMsg->pdsch_param.max_number_mimo_layers_pdsch),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_MAX_MU_MIMO_USERS_DL_TAG,
+ &(pNfapiMsg->pdsch_param.max_mu_mimo_users_dl),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PDSCH_DATA_IN_DMRS_SYMBOLS_TAG,
+ &(pNfapiMsg->pdsch_param.pdsch_data_in_dmrs_symbols),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PREMPTION_SUPPORT_TAG,
+ &(pNfapiMsg->pdsch_param.premption_support),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PDSCH_NON_SLOT_SUPPORT_TAG,
+ &(pNfapiMsg->pdsch_param.pdsch_non_slot_support),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_UCI_MUX_ULSCH_IN_PUSCH_TAG,
+ &(pNfapiMsg->pusch_param.uci_mux_ulsch_in_pusch),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_UCI_ONLY_PUSCH_TAG,
+ &(pNfapiMsg->pusch_param.uci_only_pusch),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PUSCH_FREQUENCY_HOPPING_TAG,
+ &(pNfapiMsg->pusch_param.pusch_frequency_hopping),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PUSCH_DMRS_CONFIG_TYPES_TAG,
+ &(pNfapiMsg->pusch_param.pusch_dmrs_config_types),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PUSCH_DMRS_MAX_LEN_TAG,
+ &(pNfapiMsg->pusch_param.pusch_dmrs_max_len),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PUSCH_DMRS_ADDITIONAL_POS_TAG,
+ &(pNfapiMsg->pusch_param.pusch_dmrs_additional_pos),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PUSCH_CBG_TAG,
+ &(pNfapiMsg->pusch_param.pusch_cbg),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PUSCH_MAPPING_TYPE_TAG,
+ &(pNfapiMsg->pusch_param.pusch_mapping_type),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PUSCH_ALLOCATION_TYPES_TAG,
+ &(pNfapiMsg->pusch_param.pusch_allocation_types),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PUSCH_VRB_TO_PRB_MAPPING_TAG,
+ &(pNfapiMsg->pusch_param.pusch_vrb_to_prb_mapping),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PUSCH_MAX_PTRS_PORTS_TAG,
+ &(pNfapiMsg->pusch_param.pusch_max_ptrs_ports),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_MAX_PDUSCHS_TBS_PER_SLOT_TAG,
+ &(pNfapiMsg->pusch_param.max_pduschs_tbs_per_slot),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_MAX_NUMBER_MIMO_LAYERS_NON_CB_PUSCH_TAG,
+ &(pNfapiMsg->pusch_param.max_number_mimo_layers_non_cb_pusch),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_SUPPORTED_MODULATION_ORDER_UL_TAG,
+ &(pNfapiMsg->pusch_param.supported_modulation_order_ul),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_MAX_MU_MIMO_USERS_UL_TAG,
+ &(pNfapiMsg->pusch_param.max_mu_mimo_users_ul),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_DFTS_OFDM_SUPPORT_TAG,
+ &(pNfapiMsg->pusch_param.dfts_ofdm_support),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PUSCH_AGGREGATION_FACTOR_TAG,
+ &(pNfapiMsg->pusch_param.pusch_aggregation_factor),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PRACH_LONG_FORMATS_TAG,
+ &(pNfapiMsg->prach_param.prach_long_formats),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PRACH_SHORT_FORMATS_TAG,
+ &(pNfapiMsg->prach_param.prach_short_formats),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_PRACH_RESTRICTED_SETS_TAG,
+ &(pNfapiMsg->prach_param.prach_restricted_sets),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_MAX_PRACH_FD_OCCASIONS_IN_A_SLOT_TAG,
+ &(pNfapiMsg->prach_param.max_prach_fd_occasions_in_a_slot),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_PARAM_TLV_RSSI_MEASUREMENT_SUPPORT_TAG,
+ &(pNfapiMsg->measurement_param.rssi_measurement_support),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ &&
// config:
- pack_tlv(NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV4_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv4), ppWritePackedMsg, end, &pack_ipv4_address_value) &&
- pack_tlv(NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV6_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv6), ppWritePackedMsg, end, &pack_ipv6_address_value) &&
- pack_tlv(NFAPI_NR_NFAPI_P7_VNF_PORT_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_port), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV4_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv4), ppWritePackedMsg, end, &pack_ipv4_address_value) &&
- pack_tlv(NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV6_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv6), ppWritePackedMsg, end, &pack_ipv6_address_value) &&
- pack_tlv(NFAPI_NR_NFAPI_P7_PNF_PORT_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_port), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_NFAPI_TIMING_WINDOW_TAG, &(pNfapiMsg->nfapi_config.timing_window), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_NFAPI_TIMING_INFO_MODE_TAG, &(pNfapiMsg->nfapi_config.timing_info_mode), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_NFAPI_TIMING_INFO_PERIOD_TAG, &(pNfapiMsg->nfapi_config.timing_info_period), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
+ pack_nr_tlv(NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV4_TAG,
+ &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv4),
+ ppWritePackedMsg,
+ end,
+ &pack_ipv4_address_value)
+ && pack_nr_tlv(NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV6_TAG,
+ &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv6),
+ ppWritePackedMsg,
+ end,
+ &pack_ipv6_address_value)
+ && pack_nr_tlv(NFAPI_NR_NFAPI_P7_VNF_PORT_TAG,
+ &(pNfapiMsg->nfapi_config.p7_vnf_port),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV4_TAG,
+ &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv4),
+ ppWritePackedMsg,
+ end,
+ &pack_ipv4_address_value)
+ && pack_nr_tlv(NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV6_TAG,
+ &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv6),
+ ppWritePackedMsg,
+ end,
+ &pack_ipv6_address_value)
+ && pack_nr_tlv(NFAPI_NR_NFAPI_P7_PNF_PORT_TAG,
+ &(pNfapiMsg->nfapi_config.p7_pnf_port),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_NFAPI_TIMING_WINDOW_TAG,
+ &(pNfapiMsg->nfapi_config.timing_window),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_NFAPI_TIMING_INFO_MODE_TAG,
+ &(pNfapiMsg->nfapi_config.timing_info_mode),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_nr_tlv(NFAPI_NR_NFAPI_TIMING_INFO_PERIOD_TAG,
+ &(pNfapiMsg->nfapi_config.timing_info_period),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
}
-static uint8_t pack_config_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config) {
- nfapi_config_request_t *pNfapiMsg = (nfapi_config_request_t *)msg;
- return ( push8(pNfapiMsg->num_tlv, ppWritePackedMsg, end) &&
- // Do we check the phy state and then just fill those sepecified, however
- // we do not know the duplex mode, so just attempt to pack all and assumme
- // that the callee has set the right tlvs
- pack_tlv(NFAPI_SUBFRAME_CONFIG_DUPLEX_MODE_TAG, &(pNfapiMsg->subframe_config.duplex_mode), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SUBFRAME_CONFIG_PCFICH_POWER_OFFSET_TAG, &(pNfapiMsg->subframe_config.pcfich_power_offset), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SUBFRAME_CONFIG_PB_TAG, &(pNfapiMsg->subframe_config.pb), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SUBFRAME_CONFIG_DL_CYCLIC_PREFIX_TYPE_TAG, &(pNfapiMsg->subframe_config.dl_cyclic_prefix_type), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SUBFRAME_CONFIG_UL_CYCLIC_PREFIX_TYPE_TAG, &(pNfapiMsg->subframe_config.ul_cyclic_prefix_type), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG, &(pNfapiMsg->rf_config.dl_channel_bandwidth), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG, &(pNfapiMsg->rf_config.ul_channel_bandwidth), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_RF_CONFIG_REFERENCE_SIGNAL_POWER_TAG, &(pNfapiMsg->rf_config.reference_signal_power), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_RF_CONFIG_TX_ANTENNA_PORTS_TAG, &(pNfapiMsg->rf_config.tx_antenna_ports), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_RF_CONFIG_RX_ANTENNA_PORTS_TAG, &(pNfapiMsg->rf_config.rx_antenna_ports), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PHICH_CONFIG_PHICH_RESOURCE_TAG, &(pNfapiMsg->phich_config.phich_resource), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PHICH_CONFIG_PHICH_DURATION_TAG, &(pNfapiMsg->phich_config.phich_duration), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PHICH_CONFIG_PHICH_POWER_OFFSET_TAG, &(pNfapiMsg->phich_config.phich_power_offset), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SCH_CONFIG_PRIMARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG, &(pNfapiMsg->sch_config.primary_synchronization_signal_epre_eprers), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SCH_CONFIG_SECONDARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG, &(pNfapiMsg->sch_config.secondary_synchronization_signal_epre_eprers), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SCH_CONFIG_PHYSICAL_CELL_ID_TAG, &(pNfapiMsg->sch_config.physical_cell_id), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PRACH_CONFIG_CONFIGURATION_INDEX_TAG, &(pNfapiMsg->prach_config.configuration_index), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PRACH_CONFIG_ROOT_SEQUENCE_INDEX_TAG, &(pNfapiMsg->prach_config.root_sequence_index), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PRACH_CONFIG_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG, &(pNfapiMsg->prach_config.zero_correlation_zone_configuration), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PRACH_CONFIG_HIGH_SPEED_FLAG_TAG, &(pNfapiMsg->prach_config.high_speed_flag), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PRACH_CONFIG_FREQUENCY_OFFSET_TAG, &(pNfapiMsg->prach_config.frequency_offset), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PUSCH_CONFIG_HOPPING_MODE_TAG, &(pNfapiMsg->pusch_config.hopping_mode), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PUSCH_CONFIG_HOPPING_OFFSET_TAG, &(pNfapiMsg->pusch_config.hopping_offset), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PUSCH_CONFIG_NUMBER_OF_SUBBANDS_TAG, &(pNfapiMsg->pusch_config.number_of_subbands), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PUCCH_CONFIG_DELTA_PUCCH_SHIFT_TAG, &(pNfapiMsg->pucch_config.delta_pucch_shift), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PUCCH_CONFIG_N_CQI_RB_TAG, &(pNfapiMsg->pucch_config.n_cqi_rb), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PUCCH_CONFIG_N_AN_CS_TAG, &(pNfapiMsg->pucch_config.n_an_cs), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_PUCCH_CONFIG_N1_PUCCH_AN_TAG, &(pNfapiMsg->pucch_config.n1_pucch_an), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SRS_CONFIG_BANDWIDTH_CONFIGURATION_TAG, &(pNfapiMsg->srs_config.bandwidth_configuration), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SRS_CONFIG_MAX_UP_PTS_TAG, &(pNfapiMsg->srs_config.max_up_pts), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SRS_CONFIG_SRS_SUBFRAME_CONFIGURATION_TAG, &(pNfapiMsg->srs_config.srs_subframe_configuration), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_SRS_CONFIG_SRS_ACKNACK_SRS_SIMULTANEOUS_TRANSMISSION_TAG, &(pNfapiMsg->srs_config.srs_acknack_srs_simultaneous_transmission), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_UPLINK_RS_HOPPING_TAG, &(pNfapiMsg->uplink_reference_signal_config.uplink_rs_hopping), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_GROUP_ASSIGNMENT_TAG, &(pNfapiMsg->uplink_reference_signal_config.group_assignment), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_CYCLIC_SHIFT_1_FOR_DRMS_TAG, &(pNfapiMsg->uplink_reference_signal_config.cyclic_shift_1_for_drms), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_LAA_CONFIG_ED_THRESHOLD_FOR_LBT_FOR_PDSCH_TAG, &(pNfapiMsg->laa_config.ed_threshold_lbt_pdsch), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_LAA_CONFIG_ED_THRESHOLD_FOR_LBT_FOR_DRS_TAG, &(pNfapiMsg->laa_config.ed_threshold_lbt_drs), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_LAA_CONFIG_PD_THRESHOLD_TAG, &(pNfapiMsg->laa_config.pd_threshold), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_LAA_CONFIG_MULTI_CARRIER_TYPE_TAG, &(pNfapiMsg->laa_config.multi_carrier_type), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_LAA_CONFIG_MULTI_CARRIER_TX_TAG, &(pNfapiMsg->laa_config.multi_carrier_tx), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_LAA_CONFIG_MULTI_CARRIER_FREEZE_TAG, &(pNfapiMsg->laa_config.multi_carrier_freeze), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_LAA_CONFIG_TX_ANTENNA_PORTS_FOR_DRS_TAG, &(pNfapiMsg->laa_config.tx_antenna_ports_drs), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_LAA_CONFIG_TRANSMISSION_POWER_FOR_DRS_TAG, &(pNfapiMsg->laa_config.tx_power_drs), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PBCH_REPETITIONS_ENABLE_R13_TAG, &(pNfapiMsg->emtc_config.pbch_repetitions_enable_r13), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CATM_ROOT_SEQUENCE_INDEX_TAG, &(pNfapiMsg->emtc_config.prach_catm_root_sequence_index), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CATM_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG, &(pNfapiMsg->emtc_config.prach_catm_zero_correlation_zone_configuration), ppWritePackedMsg, end,
- &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CATM_HIGH_SPEED_FLAG, &(pNfapiMsg->emtc_config.prach_catm_high_speed_flag), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_ENABLE_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_0_enable), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_CONFIGURATION_INDEX_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_0_configuration_index), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_FREQUENCY_OFFSET_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_0_frequency_offset), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_0_number_of_repetitions_per_attempt), ppWritePackedMsg, end,
- &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_STARTING_SUBFRAME_PERIODICITY_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_0_starting_subframe_periodicity), ppWritePackedMsg, end,
- &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_HOPPING_ENABLE_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_0_hopping_enable), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_HOPPING_OFFSET_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_0_hopping_offset), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_ENABLE_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_1_enable), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_CONFIGURATION_INDEX_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_1_configuration_index), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_FREQUENCY_OFFSET_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_1_frequency_offset), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_1_number_of_repetitions_per_attempt), ppWritePackedMsg, end,
- &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_STARTING_SUBFRAME_PERIODICITY_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_1_starting_subframe_periodicity), ppWritePackedMsg, end,
- &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_HOPPING_ENABLE_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_1_hopping_enable), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_HOPPING_OFFSET_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_1_hopping_offset), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_ENABLE_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_2_enable), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_CONFIGURATION_INDEX_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_2_configuration_index), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_FREQUENCY_OFFSET_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_2_frequency_offset), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_2_number_of_repetitions_per_attempt), ppWritePackedMsg, end,
- &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_STARTING_SUBFRAME_PERIODICITY_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_2_starting_subframe_periodicity), ppWritePackedMsg, end,
- &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_HOPPING_ENABLE_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_2_hopping_enable), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_HOPPING_OFFSET_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_2_hopping_offset), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_ENABLE_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_3_enable), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_CONFIGURATION_INDEX_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_3_configuration_index), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_FREQUENCY_OFFSET_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_3_frequency_offset), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_3_number_of_repetitions_per_attempt), ppWritePackedMsg, end,
- &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_STARTING_SUBFRAME_PERIODICITY_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_3_starting_subframe_periodicity), ppWritePackedMsg, end,
- &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_HOPPING_ENABLE_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_3_hopping_enable), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_HOPPING_OFFSET_TAG, &(pNfapiMsg->emtc_config.prach_ce_level_3_hopping_offset), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEA_TAG, &(pNfapiMsg->emtc_config.pucch_interval_ulhoppingconfigcommonmodea), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEB_TAG, &(pNfapiMsg->emtc_config.pucch_interval_ulhoppingconfigcommonmodeb), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_TDD_FRAME_STRUCTURE_SUBFRAME_ASSIGNMENT_TAG, &(pNfapiMsg->tdd_frame_structure_config.subframe_assignment), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_TDD_FRAME_STRUCTURE_SPECIAL_SUBFRAME_PATTERNS_TAG, &(pNfapiMsg->tdd_frame_structure_config.special_subframe_patterns), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_L23_CONFIG_DATA_REPORT_MODE_TAG, &(pNfapiMsg->l23_config.data_report_mode), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_L23_CONFIG_SFNSF_TAG, &(pNfapiMsg->l23_config.sfnsf), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_P7_VNF_ADDRESS_IPV4_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv4), ppWritePackedMsg, end, &pack_ipv4_address_value) &&
- pack_tlv(NFAPI_NFAPI_P7_VNF_ADDRESS_IPV6_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv6), ppWritePackedMsg, end, &pack_ipv6_address_value) &&
- pack_tlv(NFAPI_NFAPI_P7_VNF_PORT_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_port), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_P7_PNF_ADDRESS_IPV4_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv4), ppWritePackedMsg, end, &pack_ipv4_address_value) &&
- pack_tlv(NFAPI_NFAPI_P7_PNF_ADDRESS_IPV6_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv6), ppWritePackedMsg, end, &pack_ipv6_address_value) &&
- pack_tlv(NFAPI_NFAPI_P7_PNF_PORT_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_port), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG, &(pNfapiMsg->nfapi_config.dl_ue_per_sf), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG, &(pNfapiMsg->nfapi_config.ul_ue_per_sf), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_PHY_RF_BANDS_TAG, &(pNfapiMsg->nfapi_config.rf_bands), ppWritePackedMsg, end, &pack_rf_bands_value) &&
- pack_tlv(NFAPI_NFAPI_TIMING_WINDOW_TAG, &(pNfapiMsg->nfapi_config.timing_window), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_TIMING_INFO_MODE_TAG, &(pNfapiMsg->nfapi_config.timing_info_mode), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_TIMING_INFO_PERIOD_TAG, &(pNfapiMsg->nfapi_config.timing_info_period), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG, &(pNfapiMsg->nfapi_config.max_transmit_power), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_EARFCN_TAG, &(pNfapiMsg->nfapi_config.earfcn), ppWritePackedMsg, end, &pack_uint32_tlv_value) &&
- pack_tlv(NFAPI_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG, &(pNfapiMsg->nfapi_config.nmm_gsm_frequency_bands), ppWritePackedMsg, end, &pack_nmm_frequency_bands_value) &&
- pack_tlv(NFAPI_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG, &(pNfapiMsg->nfapi_config.nmm_umts_frequency_bands), ppWritePackedMsg, end, &pack_nmm_frequency_bands_value) &&
- pack_tlv(NFAPI_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG, &(pNfapiMsg->nfapi_config.nmm_lte_frequency_bands), ppWritePackedMsg, end, &pack_nmm_frequency_bands_value) &&
- pack_tlv(NFAPI_NFAPI_NMM_UPLINK_RSSI_SUPPORTED_TAG, &(pNfapiMsg->nfapi_config.nmm_uplink_rssi_supported), ppWritePackedMsg, end, &pack_uint8_tlv_value));
-}
-
-
-static uint8_t pack_nr_config_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t* config)
+static uint8_t pack_config_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config)
{
-
- nfapi_nr_config_request_scf_t *pNfapiMsg = (nfapi_nr_config_request_scf_t*)msg;
-
- for(int i = 0; i<40; i++){ //packing tdd slot config
- for(int symbol = 0; symbol<14;symbol++){
- push8(pNfapiMsg->tdd_table.max_tdd_periodicity_list[i].max_num_of_symbol_per_slot_list[symbol].slot_config.value, ppWritePackedMsg,end);
- }
- }
-
- return (push8(pNfapiMsg->num_tlv, ppWritePackedMsg, end) &&
- pack_tlv(NFAPI_NR_CONFIG_DL_BANDWIDTH_TAG, &(pNfapiMsg->carrier_config.dl_bandwidth), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_DL_FREQUENCY_TAG, &(pNfapiMsg->carrier_config.dl_frequency), ppWritePackedMsg, end, &pack_uint32_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_DL_GRID_SIZE_TAG, &(pNfapiMsg->carrier_config.dl_grid_size[1]), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_DL_K0_TAG, &(pNfapiMsg->carrier_config.dl_k0[1]), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_NUM_RX_ANT_TAG, &(pNfapiMsg->carrier_config.num_rx_ant), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_NUM_TX_ANT_TAG, &(pNfapiMsg->carrier_config.num_tx_ant), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_UL_GRID_SIZE_TAG, &(pNfapiMsg->carrier_config.ul_grid_size[1]), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_UL_K0_TAG, &(pNfapiMsg->carrier_config.ul_k0[1]), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_UPLINK_BANDWIDTH_TAG, &(pNfapiMsg->carrier_config.uplink_bandwidth), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_UPLINK_FREQUENCY_TAG, &(pNfapiMsg->carrier_config.uplink_frequency), ppWritePackedMsg, end, &pack_uint32_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_FREQUENCY_SHIFT_7P5KHZ_TAG, &(pNfapiMsg->carrier_config.frequency_shift_7p5khz), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
-
- pack_tlv(NFAPI_NR_CONFIG_FRAME_DUPLEX_TYPE_TAG, &(pNfapiMsg->cell_config.frame_duplex_type), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_PHY_CELL_ID_TAG, &(pNfapiMsg->cell_config.phy_cell_id), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
-
- pack_tlv(NFAPI_NR_CONFIG_PRACH_MULTIPLE_CARRIERS_IN_A_BAND_TAG, &(pNfapiMsg->prach_config.prach_multiple_carriers_in_a_band), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_PRACH_CONFIG_INDEX_TAG, &(pNfapiMsg->prach_config.prach_ConfigurationIndex), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_NUM_PRACH_FD_OCCASIONS_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_PRACH_SEQUENCE_LENGTH_TAG, &(pNfapiMsg->prach_config.prach_sequence_length), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_RESTRICTED_SET_CONFIG_TAG, &(pNfapiMsg->prach_config.restricted_set_config), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_SSB_PER_RACH_TAG, &(pNfapiMsg->prach_config.ssb_per_rach), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_PRACH_SUB_C_SPACING_TAG, &(pNfapiMsg->prach_config.prach_sub_c_spacing), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_PRACH_ROOT_SEQUENCE_INDEX_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].prach_root_sequence_index), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_K1_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].k1), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_PRACH_ZERO_CORR_CONF_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].prach_zero_corr_conf), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_NUM_ROOT_SEQUENCES_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].num_root_sequences), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
-
- pack_tlv(NFAPI_NR_CONFIG_SCS_COMMON_TAG, &(pNfapiMsg->ssb_config.scs_common), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_BCH_PAYLOAD_TAG, &(pNfapiMsg->ssb_config.bch_payload), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_SS_PBCH_POWER_TAG, &(pNfapiMsg->ssb_config.ss_pbch_power), ppWritePackedMsg, end, &pack_uint32_tlv_value) &&
-
- pack_tlv(NFAPI_NR_CONFIG_BETA_PSS_TAG, &(pNfapiMsg->ssb_table.beta_pss), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_MIB_TAG, &(pNfapiMsg->ssb_table.MIB), ppWritePackedMsg, end, &pack_uint32_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_SSB_MASK_TAG, &(pNfapiMsg->ssb_table.ssb_mask_list[0].ssb_mask), ppWritePackedMsg, end, &pack_uint32_tlv_value) &&
- // TODO: Not sure what's going on, ssb_mask_list[1] packing below seems to match unpack, but is causing problems
- // pack_tlv(NFAPI_NR_CONFIG_SSB_MASK_TAG, &(pNfapiMsg->ssb_table.ssb_mask_list[1].ssb_mask), ppWritePackedMsg, end, &pack_uint32_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_BEAM_ID_TAG, &(pNfapiMsg->ssb_table.ssb_beam_id_list[0].beam_id), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_SSB_OFFSET_POINT_A_TAG, &(pNfapiMsg->ssb_table.ssb_offset_point_a), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_SSB_PERIOD_TAG, &(pNfapiMsg->ssb_table.ssb_period), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_SSB_SUBCARRIER_OFFSET_TAG, &(pNfapiMsg->ssb_table.ssb_subcarrier_offset), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_SS_PBCH_MULTIPLE_CARRIERS_IN_A_BAND_TAG, &(pNfapiMsg->ssb_table.ss_pbch_multiple_carriers_in_a_band), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_CONFIG_MULTIPLE_CELLS_SS_PBCH_IN_A_CARRIER_TAG, &(pNfapiMsg->ssb_table.multiple_cells_ss_pbch_in_a_carrier), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
-
- pack_tlv(NFAPI_NR_CONFIG_TDD_PERIOD_TAG, &(pNfapiMsg->tdd_table.tdd_period), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
-
- pack_tlv(NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV4_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv4), ppWritePackedMsg, end, &pack_ipv4_address_value) &&
- pack_tlv(NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV6_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv6), ppWritePackedMsg, end, &pack_ipv6_address_value) &&
- pack_tlv(NFAPI_NR_NFAPI_P7_VNF_PORT_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_port), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV4_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv4), ppWritePackedMsg, end, &pack_ipv4_address_value) &&
- pack_tlv(NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV6_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv6), ppWritePackedMsg, end, &pack_ipv6_address_value) &&
- pack_tlv(NFAPI_NR_NFAPI_P7_PNF_PORT_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_port), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
- pack_tlv(NFAPI_NR_NFAPI_TIMING_WINDOW_TAG, &(pNfapiMsg->nfapi_config.timing_window), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_NFAPI_TIMING_INFO_MODE_TAG, &(pNfapiMsg->nfapi_config.timing_info_mode), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
- pack_tlv(NFAPI_NR_NFAPI_TIMING_INFO_PERIOD_TAG, &(pNfapiMsg->nfapi_config.timing_info_period), ppWritePackedMsg, end, &pack_uint8_tlv_value));
+ nfapi_config_request_t *pNfapiMsg = (nfapi_config_request_t *)msg;
+ return (
+ push8(pNfapiMsg->num_tlv, ppWritePackedMsg, end) &&
+ // Do we check the phy state and then just fill those sepecified, however
+ // we do not know the duplex mode, so just attempt to pack all and assumme
+ // that the callee has set the right tlvs
+ pack_tlv(NFAPI_SUBFRAME_CONFIG_DUPLEX_MODE_TAG,
+ &(pNfapiMsg->subframe_config.duplex_mode),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SUBFRAME_CONFIG_PCFICH_POWER_OFFSET_TAG,
+ &(pNfapiMsg->subframe_config.pcfich_power_offset),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SUBFRAME_CONFIG_PB_TAG, &(pNfapiMsg->subframe_config.pb), ppWritePackedMsg, end, &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SUBFRAME_CONFIG_DL_CYCLIC_PREFIX_TYPE_TAG,
+ &(pNfapiMsg->subframe_config.dl_cyclic_prefix_type),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SUBFRAME_CONFIG_UL_CYCLIC_PREFIX_TYPE_TAG,
+ &(pNfapiMsg->subframe_config.ul_cyclic_prefix_type),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG,
+ &(pNfapiMsg->rf_config.dl_channel_bandwidth),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG,
+ &(pNfapiMsg->rf_config.ul_channel_bandwidth),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_RF_CONFIG_REFERENCE_SIGNAL_POWER_TAG,
+ &(pNfapiMsg->rf_config.reference_signal_power),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_RF_CONFIG_TX_ANTENNA_PORTS_TAG,
+ &(pNfapiMsg->rf_config.tx_antenna_ports),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_RF_CONFIG_RX_ANTENNA_PORTS_TAG,
+ &(pNfapiMsg->rf_config.rx_antenna_ports),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PHICH_CONFIG_PHICH_RESOURCE_TAG,
+ &(pNfapiMsg->phich_config.phich_resource),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PHICH_CONFIG_PHICH_DURATION_TAG,
+ &(pNfapiMsg->phich_config.phich_duration),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PHICH_CONFIG_PHICH_POWER_OFFSET_TAG,
+ &(pNfapiMsg->phich_config.phich_power_offset),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SCH_CONFIG_PRIMARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG,
+ &(pNfapiMsg->sch_config.primary_synchronization_signal_epre_eprers),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SCH_CONFIG_SECONDARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG,
+ &(pNfapiMsg->sch_config.secondary_synchronization_signal_epre_eprers),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SCH_CONFIG_PHYSICAL_CELL_ID_TAG,
+ &(pNfapiMsg->sch_config.physical_cell_id),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PRACH_CONFIG_CONFIGURATION_INDEX_TAG,
+ &(pNfapiMsg->prach_config.configuration_index),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PRACH_CONFIG_ROOT_SEQUENCE_INDEX_TAG,
+ &(pNfapiMsg->prach_config.root_sequence_index),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PRACH_CONFIG_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG,
+ &(pNfapiMsg->prach_config.zero_correlation_zone_configuration),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PRACH_CONFIG_HIGH_SPEED_FLAG_TAG,
+ &(pNfapiMsg->prach_config.high_speed_flag),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PRACH_CONFIG_FREQUENCY_OFFSET_TAG,
+ &(pNfapiMsg->prach_config.frequency_offset),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PUSCH_CONFIG_HOPPING_MODE_TAG,
+ &(pNfapiMsg->pusch_config.hopping_mode),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PUSCH_CONFIG_HOPPING_OFFSET_TAG,
+ &(pNfapiMsg->pusch_config.hopping_offset),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PUSCH_CONFIG_NUMBER_OF_SUBBANDS_TAG,
+ &(pNfapiMsg->pusch_config.number_of_subbands),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PUCCH_CONFIG_DELTA_PUCCH_SHIFT_TAG,
+ &(pNfapiMsg->pucch_config.delta_pucch_shift),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PUCCH_CONFIG_N_CQI_RB_TAG,
+ &(pNfapiMsg->pucch_config.n_cqi_rb),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PUCCH_CONFIG_N_AN_CS_TAG, &(pNfapiMsg->pucch_config.n_an_cs), ppWritePackedMsg, end, &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_PUCCH_CONFIG_N1_PUCCH_AN_TAG,
+ &(pNfapiMsg->pucch_config.n1_pucch_an),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SRS_CONFIG_BANDWIDTH_CONFIGURATION_TAG,
+ &(pNfapiMsg->srs_config.bandwidth_configuration),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SRS_CONFIG_MAX_UP_PTS_TAG,
+ &(pNfapiMsg->srs_config.max_up_pts),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SRS_CONFIG_SRS_SUBFRAME_CONFIGURATION_TAG,
+ &(pNfapiMsg->srs_config.srs_subframe_configuration),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_SRS_CONFIG_SRS_ACKNACK_SRS_SIMULTANEOUS_TRANSMISSION_TAG,
+ &(pNfapiMsg->srs_config.srs_acknack_srs_simultaneous_transmission),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_UPLINK_RS_HOPPING_TAG,
+ &(pNfapiMsg->uplink_reference_signal_config.uplink_rs_hopping),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_GROUP_ASSIGNMENT_TAG,
+ &(pNfapiMsg->uplink_reference_signal_config.group_assignment),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_CYCLIC_SHIFT_1_FOR_DRMS_TAG,
+ &(pNfapiMsg->uplink_reference_signal_config.cyclic_shift_1_for_drms),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_LAA_CONFIG_ED_THRESHOLD_FOR_LBT_FOR_PDSCH_TAG,
+ &(pNfapiMsg->laa_config.ed_threshold_lbt_pdsch),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_LAA_CONFIG_ED_THRESHOLD_FOR_LBT_FOR_DRS_TAG,
+ &(pNfapiMsg->laa_config.ed_threshold_lbt_drs),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_LAA_CONFIG_PD_THRESHOLD_TAG,
+ &(pNfapiMsg->laa_config.pd_threshold),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_LAA_CONFIG_MULTI_CARRIER_TYPE_TAG,
+ &(pNfapiMsg->laa_config.multi_carrier_type),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_LAA_CONFIG_MULTI_CARRIER_TX_TAG,
+ &(pNfapiMsg->laa_config.multi_carrier_tx),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_LAA_CONFIG_MULTI_CARRIER_FREEZE_TAG,
+ &(pNfapiMsg->laa_config.multi_carrier_freeze),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_LAA_CONFIG_TX_ANTENNA_PORTS_FOR_DRS_TAG,
+ &(pNfapiMsg->laa_config.tx_antenna_ports_drs),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_LAA_CONFIG_TRANSMISSION_POWER_FOR_DRS_TAG,
+ &(pNfapiMsg->laa_config.tx_power_drs),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PBCH_REPETITIONS_ENABLE_R13_TAG,
+ &(pNfapiMsg->emtc_config.pbch_repetitions_enable_r13),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CATM_ROOT_SEQUENCE_INDEX_TAG,
+ &(pNfapiMsg->emtc_config.prach_catm_root_sequence_index),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CATM_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG,
+ &(pNfapiMsg->emtc_config.prach_catm_zero_correlation_zone_configuration),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CATM_HIGH_SPEED_FLAG,
+ &(pNfapiMsg->emtc_config.prach_catm_high_speed_flag),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_ENABLE_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_0_enable),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_CONFIGURATION_INDEX_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_0_configuration_index),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_FREQUENCY_OFFSET_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_0_frequency_offset),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_0_number_of_repetitions_per_attempt),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_STARTING_SUBFRAME_PERIODICITY_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_0_starting_subframe_periodicity),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_HOPPING_ENABLE_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_0_hopping_enable),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_HOPPING_OFFSET_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_0_hopping_offset),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_ENABLE_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_1_enable),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_CONFIGURATION_INDEX_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_1_configuration_index),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_FREQUENCY_OFFSET_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_1_frequency_offset),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_1_number_of_repetitions_per_attempt),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_STARTING_SUBFRAME_PERIODICITY_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_1_starting_subframe_periodicity),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_HOPPING_ENABLE_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_1_hopping_enable),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_HOPPING_OFFSET_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_1_hopping_offset),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_ENABLE_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_2_enable),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_CONFIGURATION_INDEX_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_2_configuration_index),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_FREQUENCY_OFFSET_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_2_frequency_offset),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_2_number_of_repetitions_per_attempt),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_STARTING_SUBFRAME_PERIODICITY_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_2_starting_subframe_periodicity),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_HOPPING_ENABLE_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_2_hopping_enable),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_HOPPING_OFFSET_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_2_hopping_offset),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_ENABLE_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_3_enable),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_CONFIGURATION_INDEX_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_3_configuration_index),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_FREQUENCY_OFFSET_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_3_frequency_offset),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_3_number_of_repetitions_per_attempt),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_STARTING_SUBFRAME_PERIODICITY_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_3_starting_subframe_periodicity),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_HOPPING_ENABLE_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_3_hopping_enable),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_HOPPING_OFFSET_TAG,
+ &(pNfapiMsg->emtc_config.prach_ce_level_3_hopping_offset),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEA_TAG,
+ &(pNfapiMsg->emtc_config.pucch_interval_ulhoppingconfigcommonmodea),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEB_TAG,
+ &(pNfapiMsg->emtc_config.pucch_interval_ulhoppingconfigcommonmodeb),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_TDD_FRAME_STRUCTURE_SUBFRAME_ASSIGNMENT_TAG,
+ &(pNfapiMsg->tdd_frame_structure_config.subframe_assignment),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_TDD_FRAME_STRUCTURE_SPECIAL_SUBFRAME_PATTERNS_TAG,
+ &(pNfapiMsg->tdd_frame_structure_config.special_subframe_patterns),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_L23_CONFIG_DATA_REPORT_MODE_TAG,
+ &(pNfapiMsg->l23_config.data_report_mode),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_L23_CONFIG_SFNSF_TAG, &(pNfapiMsg->l23_config.sfnsf), ppWritePackedMsg, end, &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_NFAPI_P7_VNF_ADDRESS_IPV4_TAG,
+ &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv4),
+ ppWritePackedMsg,
+ end,
+ &pack_ipv4_address_value)
+ && pack_tlv(NFAPI_NFAPI_P7_VNF_ADDRESS_IPV6_TAG,
+ &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv6),
+ ppWritePackedMsg,
+ end,
+ &pack_ipv6_address_value)
+ && pack_tlv(NFAPI_NFAPI_P7_VNF_PORT_TAG,
+ &(pNfapiMsg->nfapi_config.p7_vnf_port),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_NFAPI_P7_PNF_ADDRESS_IPV4_TAG,
+ &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv4),
+ ppWritePackedMsg,
+ end,
+ &pack_ipv4_address_value)
+ && pack_tlv(NFAPI_NFAPI_P7_PNF_ADDRESS_IPV6_TAG,
+ &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv6),
+ ppWritePackedMsg,
+ end,
+ &pack_ipv6_address_value)
+ && pack_tlv(NFAPI_NFAPI_P7_PNF_PORT_TAG,
+ &(pNfapiMsg->nfapi_config.p7_pnf_port),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG,
+ &(pNfapiMsg->nfapi_config.dl_ue_per_sf),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_tlv(NFAPI_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG,
+ &(pNfapiMsg->nfapi_config.ul_ue_per_sf),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_tlv(NFAPI_PHY_RF_BANDS_TAG, &(pNfapiMsg->nfapi_config.rf_bands), ppWritePackedMsg, end, &pack_rf_bands_value)
+ && pack_tlv(NFAPI_NFAPI_TIMING_WINDOW_TAG,
+ &(pNfapiMsg->nfapi_config.timing_window),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_tlv(NFAPI_NFAPI_TIMING_INFO_MODE_TAG,
+ &(pNfapiMsg->nfapi_config.timing_info_mode),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_tlv(NFAPI_NFAPI_TIMING_INFO_PERIOD_TAG,
+ &(pNfapiMsg->nfapi_config.timing_info_period),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value)
+ && pack_tlv(NFAPI_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG,
+ &(pNfapiMsg->nfapi_config.max_transmit_power),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_NFAPI_EARFCN_TAG, &(pNfapiMsg->nfapi_config.earfcn), ppWritePackedMsg, end, &pack_uint16_tlv_value)
+ && pack_tlv(NFAPI_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG,
+ &(pNfapiMsg->nfapi_config.nmm_gsm_frequency_bands),
+ ppWritePackedMsg,
+ end,
+ &pack_nmm_frequency_bands_value)
+ && pack_tlv(NFAPI_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG,
+ &(pNfapiMsg->nfapi_config.nmm_umts_frequency_bands),
+ ppWritePackedMsg,
+ end,
+ &pack_nmm_frequency_bands_value)
+ && pack_tlv(NFAPI_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG,
+ &(pNfapiMsg->nfapi_config.nmm_lte_frequency_bands),
+ ppWritePackedMsg,
+ end,
+ &pack_nmm_frequency_bands_value)
+ && pack_tlv(NFAPI_NFAPI_NMM_UPLINK_RSSI_SUPPORTED_TAG,
+ &(pNfapiMsg->nfapi_config.nmm_uplink_rssi_supported),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value));
}
-static uint8_t pack_nr_config_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config) {
+static uint8_t pack_nr_config_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config)
+{
+ uint8_t *pNumTLVFields = (uint8_t *)*ppWritePackedMsg;
+
+ nfapi_nr_config_request_scf_t *pNfapiMsg = (nfapi_nr_config_request_scf_t *)msg;
+ uint8_t numTLVs = 0;
+ *ppWritePackedMsg += 1; // Advance the buffer past the 'location' to push numTLVs
+ // START Carrier Configuration
+ uint8_t retval = pack_nr_tlv(NFAPI_NR_CONFIG_DL_BANDWIDTH_TAG,
+ &(pNfapiMsg->carrier_config.dl_bandwidth),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_DL_FREQUENCY_TAG,
+ &(pNfapiMsg->carrier_config.dl_frequency),
+ ppWritePackedMsg,
+ end,
+ &pack_uint32_tlv_value);
+ numTLVs++;
+
+ retval &= push16(NFAPI_NR_CONFIG_DL_K0_TAG, ppWritePackedMsg, end) && push16(5 * sizeof(uint16_t), ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.dl_k0[0].value, ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.dl_k0[1].value, ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.dl_k0[2].value, ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.dl_k0[3].value, ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.dl_k0[4].value, ppWritePackedMsg, end)
+ && push16(0, ppWritePackedMsg, end); // Padding
+ numTLVs++;
+
+ retval &= push16(NFAPI_NR_CONFIG_DL_GRID_SIZE_TAG, ppWritePackedMsg, end) && push16(5 * sizeof(uint16_t), ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.dl_grid_size[0].value, ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.dl_grid_size[1].value, ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.dl_grid_size[2].value, ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.dl_grid_size[3].value, ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.dl_grid_size[4].value, ppWritePackedMsg, end)
+ && push16(0, ppWritePackedMsg, end); // Padding
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_NUM_TX_ANT_TAG,
+ &(pNfapiMsg->carrier_config.num_tx_ant),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_UPLINK_BANDWIDTH_TAG,
+ &(pNfapiMsg->carrier_config.uplink_bandwidth),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_UPLINK_FREQUENCY_TAG,
+ &(pNfapiMsg->carrier_config.uplink_frequency),
+ ppWritePackedMsg,
+ end,
+ &pack_uint32_tlv_value);
+ numTLVs++;
+
+ retval &= push16(NFAPI_NR_CONFIG_UL_K0_TAG, ppWritePackedMsg, end) && push16(5 * sizeof(uint16_t), ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.ul_k0[0].value, ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.ul_k0[1].value, ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.ul_k0[2].value, ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.ul_k0[3].value, ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.ul_k0[4].value, ppWritePackedMsg, end)
+ && push16(0, ppWritePackedMsg, end); // Padding
+ numTLVs++;
+
+ retval &= push16(NFAPI_NR_CONFIG_UL_GRID_SIZE_TAG, ppWritePackedMsg, end) && push16(5 * sizeof(uint16_t), ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.ul_grid_size[0].value, ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.ul_grid_size[1].value, ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.ul_grid_size[2].value, ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.ul_grid_size[3].value, ppWritePackedMsg, end)
+ && push16(pNfapiMsg->carrier_config.ul_grid_size[4].value, ppWritePackedMsg, end)
+ && push16(0, ppWritePackedMsg, end); // Padding
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_NUM_RX_ANT_TAG,
+ &(pNfapiMsg->carrier_config.num_rx_ant),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value);
+ numTLVs++;
+ // END Carrier Configuration
+
+ // START Cell Configuration
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_PHY_CELL_ID_TAG,
+ &(pNfapiMsg->cell_config.phy_cell_id),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_FRAME_DUPLEX_TYPE_TAG,
+ &(pNfapiMsg->cell_config.frame_duplex_type),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value);
+ numTLVs++;
+ // END Cell Configuration
+
+ // START SSB Configuration
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_SS_PBCH_POWER_TAG,
+ &(pNfapiMsg->ssb_config.ss_pbch_power),
+ ppWritePackedMsg,
+ end,
+ &pack_uint32_tlv_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_BCH_PAYLOAD_TAG,
+ &(pNfapiMsg->ssb_config.bch_payload),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_SCS_COMMON_TAG,
+ &(pNfapiMsg->ssb_config.scs_common),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value);
+ numTLVs++;
+ // END SSB Configuration
+
+ // START PRACH Configuration
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_PRACH_SEQUENCE_LENGTH_TAG,
+ &(pNfapiMsg->prach_config.prach_sequence_length),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_PRACH_SUB_C_SPACING_TAG,
+ &(pNfapiMsg->prach_config.prach_sub_c_spacing),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_RESTRICTED_SET_CONFIG_TAG,
+ &(pNfapiMsg->prach_config.restricted_set_config),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_NUM_PRACH_FD_OCCASIONS_TAG,
+ &(pNfapiMsg->prach_config.num_prach_fd_occasions),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_PRACH_CONFIG_INDEX_TAG,
+ &(pNfapiMsg->prach_config.prach_ConfigurationIndex),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value);
+ numTLVs++;
+
+ for (int i = 0; i < pNfapiMsg->prach_config.num_prach_fd_occasions.value; i++) {
+ nfapi_nr_num_prach_fd_occasions_t prach_fd_occasion = pNfapiMsg->prach_config.num_prach_fd_occasions_list[i];
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_PRACH_ROOT_SEQUENCE_INDEX_TAG,
+ &(prach_fd_occasion.prach_root_sequence_index),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_NUM_ROOT_SEQUENCES_TAG,
+ &(prach_fd_occasion.num_root_sequences),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_K1_TAG, &(prach_fd_occasion.k1), ppWritePackedMsg, end, &pack_uint16_tlv_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_PRACH_ZERO_CORR_CONF_TAG,
+ &(prach_fd_occasion.prach_zero_corr_conf),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_NUM_UNUSED_ROOT_SEQUENCES_TAG,
+ &(prach_fd_occasion.num_unused_root_sequences),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value);
+ numTLVs++;
+ }
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_SSB_PER_RACH_TAG,
+ &(pNfapiMsg->prach_config.ssb_per_rach),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value);
+ numTLVs++;
+ // END PRACH Configuration
+ // START SSB Table
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_SSB_OFFSET_POINT_A_TAG,
+ &(pNfapiMsg->ssb_table.ssb_offset_point_a),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value);
+ numTLVs++;
+
+ retval &=
+ pack_nr_tlv(NFAPI_NR_CONFIG_SSB_PERIOD_TAG, &(pNfapiMsg->ssb_table.ssb_period), ppWritePackedMsg, end, &pack_uint8_tlv_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_SSB_SUBCARRIER_OFFSET_TAG,
+ &(pNfapiMsg->ssb_table.ssb_subcarrier_offset),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value);
+ numTLVs++;
+
+ // SCF222.10.02 Table 3-25 : If included there must be two instances of this TLV
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_SSB_MASK_TAG,
+ &(pNfapiMsg->ssb_table.ssb_mask_list[0].ssb_mask),
+ ppWritePackedMsg,
+ end,
+ &pack_uint32_tlv_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_SSB_MASK_TAG,
+ &(pNfapiMsg->ssb_table.ssb_mask_list[1].ssb_mask),
+ ppWritePackedMsg,
+ end,
+ &pack_uint32_tlv_value);
+ numTLVs++;
+
+ for (int i = 0; i < 64; i++) {
+ // SCF222.10.02 Table 3-25 : If included there must be 64 instances of this TLV
+ retval &= pack_nr_tlv(NFAPI_NR_CONFIG_BEAM_ID_TAG,
+ &(pNfapiMsg->ssb_table.ssb_beam_id_list[i].beam_id),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value);
+ numTLVs++;
+ }
+
+ // END SSB Table
+ // START TDD Table
+ retval &=
+ pack_nr_tlv(NFAPI_NR_CONFIG_TDD_PERIOD_TAG, &(pNfapiMsg->tdd_table.tdd_period), ppWritePackedMsg, end, &pack_uint8_tlv_value);
+ numTLVs++;
+ // END TDD Table
+
+ // START Measurement Config
+ // SCF222.10.02 Table 3-27 : Contains only one TLV and is currently unused
+ // END Measurement Config
+
+ // START Digital Beam Table (DBT) PDU
+ // Struct in nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h nfapi_nr_dbt_pdu_t, currently unused
+ // END Digital Beam Table (DBT) PDU
+
+ // START Precoding Matrix (PM) PDU
+ // Struct in nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h nfapi_nr_pm_pdu_t, currently unused, tag to use for AERIAL
+ // is 0xA011 END Precoding Matrix (PM) PDU
+
+ // START nFAPI TLVs included in CONFIG.request for IDLE and CONFIGURED states
+ retval &= pack_nr_tlv(NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV4_TAG,
+ &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv4),
+ ppWritePackedMsg,
+ end,
+ &pack_ipv4_address_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV6_TAG,
+ &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv6),
+ ppWritePackedMsg,
+ end,
+ &pack_ipv6_address_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_NFAPI_P7_VNF_PORT_TAG,
+ &(pNfapiMsg->nfapi_config.p7_vnf_port),
+ ppWritePackedMsg,
+ end,
+ &pack_uint16_tlv_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_NFAPI_TIMING_WINDOW_TAG,
+ &(pNfapiMsg->nfapi_config.timing_window),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_NFAPI_TIMING_INFO_MODE_TAG,
+ &(pNfapiMsg->nfapi_config.timing_info_mode),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value);
+ numTLVs++;
+
+ retval &= pack_nr_tlv(NFAPI_NR_NFAPI_TIMING_INFO_PERIOD_TAG,
+ &(pNfapiMsg->nfapi_config.timing_info_period),
+ ppWritePackedMsg,
+ end,
+ &pack_uint8_tlv_value);
+ numTLVs++;
+ // END nFAPI TLVs included in CONFIG.request for IDLE and CONFIGURED states
+
+ if (pNfapiMsg->vendor_extension != 0 && config != 0) {
+ retval &= pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config);
+ NFAPI_TRACE(NFAPI_TRACE_DEBUG, "Packing CONFIG.request vendor_extension_tlv %d\n", pNfapiMsg->vendor_extension->tag);
+ numTLVs++;
+ }
+
+ pNfapiMsg->num_tlv = numTLVs;
+ retval &= push8(pNfapiMsg->num_tlv, &pNumTLVFields, end);
+ return retval;
+}
+
+static uint8_t pack_nr_config_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config)
+{
nfapi_nr_config_response_scf_t *pNfapiMsg = (nfapi_nr_config_response_scf_t *)msg;
- return ( push8(pNfapiMsg->error_code, ppWritePackedMsg, end) &&
- pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config) );
+ return (push8(pNfapiMsg->error_code, ppWritePackedMsg, end) && push8(pNfapiMsg->num_invalid_tlvs, ppWritePackedMsg, end)
+ && push8(pNfapiMsg->num_invalid_tlvs_configured_in_idle, ppWritePackedMsg, end)
+ && push8(pNfapiMsg->num_invalid_tlvs_configured_in_running, ppWritePackedMsg, end)
+ && push8(pNfapiMsg->num_missing_tlvs, ppWritePackedMsg, end)
+ && pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
}
static uint8_t pack_config_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config) {
@@ -1036,10 +2178,16 @@ static uint32_t get_packed_msg_len(uintptr_t msgHead, uintptr_t msgEnd) {
}
// Main pack function - public
-int nfapi_nr_p5_message_pack(void *pMessageBuf, uint32_t messageBufLen, void *pPackedBuf, uint32_t packedBufLen, nfapi_p4_p5_codec_config_t *config) {
+int nfapi_nr_p5_message_pack(void *pMessageBuf,
+ uint32_t messageBufLen,
+ void *pPackedBuf,
+ uint32_t packedBufLen,
+ nfapi_p4_p5_codec_config_t *config)
+{
nfapi_p4_p5_message_header_t *pMessageHeader = pMessageBuf;
uint8_t *pWritePackedMessage = pPackedBuf;
uint32_t packedMsgLen;
+ uint32_t packedBodyLen;
uint16_t packedMsgLen16;
if (pMessageBuf == NULL || pPackedBuf == NULL) {
@@ -1049,25 +2197,28 @@ int nfapi_nr_p5_message_pack(void *pMessageBuf, uint32_t messageBufLen, void *pP
uint8_t *pPackMessageEnd = pPackedBuf + packedBufLen;
uint8_t *pPackedLengthField = &pWritePackedMessage[4];
+ uint8_t *pPacketBodyFieldStart = &pWritePackedMessage[8];
+ uint8_t *pPacketBodyField = &pWritePackedMessage[8];
// pack the message
- if(push16(pMessageHeader->phy_id, &pWritePackedMessage, pPackMessageEnd) &&
- push16(pMessageHeader->message_id, &pWritePackedMessage, pPackMessageEnd) &&
- push16(0, &pWritePackedMessage, pPackMessageEnd) &&
- push16(pMessageHeader->spare, &pWritePackedMessage, pPackMessageEnd) &&
- pack_nr_p5_message_body(pMessageHeader, &pWritePackedMessage, pPackMessageEnd, config)) {
- // check for a valid message length
- packedMsgLen = get_packed_msg_len((uintptr_t)pPackedBuf, (uintptr_t)pWritePackedMessage);
+ if (push16(pMessageHeader->phy_id, &pWritePackedMessage, pPackMessageEnd)
+ && push16(pMessageHeader->message_id, &pWritePackedMessage, pPackMessageEnd)
+ && push16(0, &pWritePackedMessage, pPackMessageEnd) && push16(pMessageHeader->spare, &pWritePackedMessage, pPackMessageEnd)
+ && pack_nr_p5_message_body(pMessageHeader, &pPacketBodyField, pPackMessageEnd, config)) {
+ // to check if whole message is bigger than the buffer provided
+ packedMsgLen = get_packed_msg_len((uintptr_t)pPackedBuf, (uintptr_t)pPacketBodyField);
+ // obtain the length of the message body to pack
+ packedBodyLen = get_packed_msg_len((uintptr_t)pPacketBodyFieldStart, (uintptr_t)pPacketBodyField);
if (packedMsgLen > 0xFFFF || packedMsgLen > packedBufLen) {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "Packed message length error %d, buffer supplied %d\n", packedMsgLen, packedBufLen);
return -1;
} else {
- packedMsgLen16 = (uint16_t)packedMsgLen;
+ packedMsgLen16 = (uint16_t)packedBodyLen;
}
// Update the message length in the header
- if(!push16(packedMsgLen16, &pPackedLengthField, pPackMessageEnd))
+ if (!push16(packedMsgLen16, &pPackedLengthField, pPackMessageEnd))
return -1;
// return the packed length
@@ -1126,13 +2277,12 @@ int nfapi_p5_message_pack(void *pMessageBuf, uint32_t messageBufLen, void *pPack
// Unpack routines
-
-static uint8_t unpack_nr_pnf_param_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
+static uint8_t unpack_nr_pnf_param_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config)
+{
nfapi_nr_pnf_param_request_t *pNfapiMsg = (nfapi_nr_pnf_param_request_t *)msg;
- return unpack_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension));
+ return unpack_nr_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension));
}
-
static uint8_t unpack_pnf_param_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
nfapi_pnf_param_request_t *pNfapiMsg = (nfapi_pnf_param_request_t *)msg;
return unpack_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension));
@@ -1293,18 +2443,23 @@ static uint8_t unpack_pnf_phy_rel13_nb_iot_value(void *tlv, uint8_t **ppReadPack
unpackarray(ppReadPackedMsg, value->phy, sizeof(nfapi_pnf_phy_rel13_nb_iot_info_t), NFAPI_MAX_PNF_PHY, value->number_of_phys, end, &unpack_pnf_phy_rel13_nb_info_info));
}
-static uint8_t unpack_nr_pnf_param_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
+static uint8_t unpack_nr_pnf_param_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config)
+{
nfapi_nr_pnf_param_response_t *pNfapiMsg = (nfapi_nr_pnf_param_response_t *)msg;
unpack_tlv_t unpack_fns[] = {
- { NFAPI_PNF_PARAM_GENERAL_TAG, &pNfapiMsg->pnf_param_general, &unpack_pnf_param_general_value},
- { NFAPI_PNF_PHY_TAG, &pNfapiMsg->pnf_phy, &unpack_pnf_phy_value},
+ {NFAPI_PNF_PARAM_GENERAL_TAG, &pNfapiMsg->pnf_param_general, &unpack_pnf_param_general_value},
+ {NFAPI_PNF_PHY_TAG, &pNfapiMsg->pnf_phy, &unpack_pnf_phy_value},
};
- return ( pull32(ppReadPackedMsg, &pNfapiMsg->error_code, end) &&
- unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension));
+ return (pull8(ppReadPackedMsg, (uint8_t *)&pNfapiMsg->error_code, end)
+ && pull8(ppReadPackedMsg, (uint8_t *)&pNfapiMsg->num_tlvs, end)
+ && unpack_nr_tlv_list(unpack_fns,
+ sizeof(unpack_fns) / sizeof(unpack_tlv_t),
+ ppReadPackedMsg,
+ end,
+ config,
+ &pNfapiMsg->vendor_extension));
}
-
-
static uint8_t unpack_pnf_param_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
nfapi_pnf_param_response_t *pNfapiMsg = (nfapi_pnf_param_response_t *)msg;
unpack_tlv_t unpack_fns[] = {
@@ -1336,15 +2491,21 @@ static uint8_t unpack_pnf_phy_rf_config_value(void *tlv, uint8_t **ppReadPackedM
unpackarray(ppReadPackedMsg, value->phy_rf_config, sizeof(nfapi_phy_rf_config_info_t), NFAPI_MAX_PHY_RF_INSTANCES, value->number_phy_rf_config_info, end, &unpack_phy_rf_config_info));
}
-static uint8_t unpack_nr_pnf_config_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
+static uint8_t unpack_nr_pnf_config_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config)
+{
nfapi_nr_pnf_config_request_t *pNfapiMsg = (nfapi_nr_pnf_config_request_t *)msg;
+ pull8(ppReadPackedMsg, &pNfapiMsg->num_tlvs, end);
unpack_tlv_t unpack_fns[] = {
- { NFAPI_PNF_PHY_RF_TAG, &pNfapiMsg->pnf_phy_rf_config, &unpack_pnf_phy_rf_config_value},
+ {NFAPI_PNF_PHY_RF_TAG, &pNfapiMsg->pnf_phy_rf_config, &unpack_pnf_phy_rf_config_value},
};
- return unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension);
+ return unpack_nr_tlv_list(unpack_fns,
+ sizeof(unpack_fns) / sizeof(unpack_tlv_t),
+ ppReadPackedMsg,
+ end,
+ config,
+ &pNfapiMsg->vendor_extension);
}
-
static uint8_t unpack_pnf_config_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
nfapi_pnf_config_request_t *pNfapiMsg = (nfapi_pnf_config_request_t *)msg;
unpack_tlv_t unpack_fns[] = {
@@ -1354,11 +2515,11 @@ static uint8_t unpack_pnf_config_request(uint8_t **ppReadPackedMsg, uint8_t *end
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension));
}
-
-static uint8_t unpack_nr_pnf_config_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
+static uint8_t unpack_nr_pnf_config_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config)
+{
nfapi_nr_pnf_config_response_t *pNfapiMsg = (nfapi_nr_pnf_config_response_t *)msg;
- return ( pull32(ppReadPackedMsg, &pNfapiMsg->error_code, end) &&
- unpack_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension)));
+ return (pull8(ppReadPackedMsg, &pNfapiMsg->error_code, end)
+ && unpack_nr_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension)));
}
static uint8_t unpack_pnf_config_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
@@ -1367,12 +2528,12 @@ static uint8_t unpack_pnf_config_response(uint8_t **ppReadPackedMsg, uint8_t *en
unpack_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension)));
}
-static uint8_t unpack_nr_pnf_start_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
+static uint8_t unpack_nr_pnf_start_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config)
+{
nfapi_nr_pnf_start_request_t *pNfapiMsg = (nfapi_nr_pnf_start_request_t *)msg;
- return unpack_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension));
+ return unpack_nr_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension));
}
-
static uint8_t unpack_pnf_start_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
nfapi_pnf_start_request_t *pNfapiMsg = (nfapi_pnf_start_request_t *)msg;
return unpack_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension));
@@ -1385,13 +2546,13 @@ static uint8_t unpack_pnf_start_response(uint8_t **ppReadPackedMsg, uint8_t *end
unpack_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension)));
}
-static uint8_t unpack_nr_pnf_start_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
+static uint8_t unpack_nr_pnf_start_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config)
+{
nfapi_nr_pnf_start_response_t *pNfapiMsg = (nfapi_nr_pnf_start_response_t *)msg;
- return ( pull32(ppReadPackedMsg, &pNfapiMsg->error_code, end ) &&
- unpack_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension)));
+ return (pull32(ppReadPackedMsg, &pNfapiMsg->error_code, end)
+ && unpack_nr_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension)));
}
-
static uint8_t unpack_pnf_stop_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
nfapi_pnf_stop_request_t *pNfapiMsg = (nfapi_pnf_stop_request_t *)msg;
return unpack_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension));
@@ -1408,394 +2569,793 @@ static uint8_t unpack_param_request(uint8_t **ppReadPackedMsg, uint8_t *end, voi
return unpack_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension));
}
-static uint8_t unpack_nr_param_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
+static uint8_t unpack_nr_param_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config)
+{
nfapi_nr_param_request_scf_t *pNfapiMsg = (nfapi_nr_param_request_scf_t *)msg;
- return unpack_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension));
+ return unpack_nr_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension));
}
-static uint8_t unpack_param_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
+static uint8_t unpack_param_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config)
+{
nfapi_param_response_t *pNfapiMsg = (nfapi_param_response_t *)msg;
unpack_tlv_t unpack_fns[] = {
- { NFAPI_L1_STATUS_PHY_STATE_TAG, &pNfapiMsg->l1_status.phy_state, &unpack_uint16_tlv_value},
+ {NFAPI_L1_STATUS_PHY_STATE_TAG, &pNfapiMsg->l1_status.phy_state, &unpack_uint16_tlv_value},
- { NFAPI_PHY_CAPABILITIES_DL_BANDWIDTH_SUPPORT_TAG, &pNfapiMsg->phy_capabilities.dl_bandwidth_support, &unpack_uint16_tlv_value},
- { NFAPI_PHY_CAPABILITIES_UL_BANDWIDTH_SUPPORT_TAG, &pNfapiMsg->phy_capabilities.ul_bandwidth_support, &unpack_uint16_tlv_value},
- { NFAPI_PHY_CAPABILITIES_DL_MODULATION_SUPPORT_TAG, &pNfapiMsg->phy_capabilities.dl_modulation_support, &unpack_uint16_tlv_value},
- { NFAPI_PHY_CAPABILITIES_UL_MODULATION_SUPPORT_TAG, &pNfapiMsg->phy_capabilities.ul_modulation_support, &unpack_uint16_tlv_value},
- { NFAPI_PHY_CAPABILITIES_PHY_ANTENNA_CAPABILITY_TAG, &pNfapiMsg->phy_capabilities.phy_antenna_capability, &unpack_uint16_tlv_value},
- { NFAPI_PHY_CAPABILITIES_RELEASE_CAPABILITY_TAG, &pNfapiMsg->phy_capabilities.release_capability, &unpack_uint16_tlv_value},
- { NFAPI_PHY_CAPABILITIES_MBSFN_CAPABILITY_TAG, &pNfapiMsg->phy_capabilities.mbsfn_capability, &unpack_uint16_tlv_value},
+ {NFAPI_PHY_CAPABILITIES_DL_BANDWIDTH_SUPPORT_TAG,
+ &pNfapiMsg->phy_capabilities.dl_bandwidth_support,
+ &unpack_uint16_tlv_value},
+ {NFAPI_PHY_CAPABILITIES_UL_BANDWIDTH_SUPPORT_TAG,
+ &pNfapiMsg->phy_capabilities.ul_bandwidth_support,
+ &unpack_uint16_tlv_value},
+ {NFAPI_PHY_CAPABILITIES_DL_MODULATION_SUPPORT_TAG,
+ &pNfapiMsg->phy_capabilities.dl_modulation_support,
+ &unpack_uint16_tlv_value},
+ {NFAPI_PHY_CAPABILITIES_UL_MODULATION_SUPPORT_TAG,
+ &pNfapiMsg->phy_capabilities.ul_modulation_support,
+ &unpack_uint16_tlv_value},
+ {NFAPI_PHY_CAPABILITIES_PHY_ANTENNA_CAPABILITY_TAG,
+ &pNfapiMsg->phy_capabilities.phy_antenna_capability,
+ &unpack_uint16_tlv_value},
+ {NFAPI_PHY_CAPABILITIES_RELEASE_CAPABILITY_TAG, &pNfapiMsg->phy_capabilities.release_capability, &unpack_uint16_tlv_value},
+ {NFAPI_PHY_CAPABILITIES_MBSFN_CAPABILITY_TAG, &pNfapiMsg->phy_capabilities.mbsfn_capability, &unpack_uint16_tlv_value},
- { NFAPI_LAA_CAPABILITY_LAA_SUPPORT_TAG, &pNfapiMsg->laa_capability.laa_support, &unpack_uint16_tlv_value},
- { NFAPI_LAA_CAPABILITY_PD_SENSING_LBT_SUPPORT_TAG, &pNfapiMsg->laa_capability.pd_sensing_lbt_support, &unpack_uint16_tlv_value},
- { NFAPI_LAA_CAPABILITY_MULTI_CARRIER_LBT_SUPPORT_TAG, &pNfapiMsg->laa_capability.multi_carrier_lbt_support, &unpack_uint16_tlv_value},
- { NFAPI_LAA_CAPABILITY_PARTIAL_SF_SUPPORT_TAG, &pNfapiMsg->laa_capability.partial_sf_support, &unpack_uint16_tlv_value},
+ {NFAPI_LAA_CAPABILITY_LAA_SUPPORT_TAG, &pNfapiMsg->laa_capability.laa_support, &unpack_uint16_tlv_value},
+ {NFAPI_LAA_CAPABILITY_PD_SENSING_LBT_SUPPORT_TAG,
+ &pNfapiMsg->laa_capability.pd_sensing_lbt_support,
+ &unpack_uint16_tlv_value},
+ {NFAPI_LAA_CAPABILITY_MULTI_CARRIER_LBT_SUPPORT_TAG,
+ &pNfapiMsg->laa_capability.multi_carrier_lbt_support,
+ &unpack_uint16_tlv_value},
+ {NFAPI_LAA_CAPABILITY_PARTIAL_SF_SUPPORT_TAG, &pNfapiMsg->laa_capability.partial_sf_support, &unpack_uint16_tlv_value},
- { NFAPI_SUBFRAME_CONFIG_DUPLEX_MODE_TAG, &pNfapiMsg->subframe_config.duplex_mode, &unpack_uint16_tlv_value},
- { NFAPI_SUBFRAME_CONFIG_PCFICH_POWER_OFFSET_TAG, &pNfapiMsg->subframe_config.pcfich_power_offset, &unpack_uint16_tlv_value},
- { NFAPI_SUBFRAME_CONFIG_PB_TAG, &pNfapiMsg->subframe_config.pb, &unpack_uint16_tlv_value},
- { NFAPI_SUBFRAME_CONFIG_DL_CYCLIC_PREFIX_TYPE_TAG, &pNfapiMsg->subframe_config.dl_cyclic_prefix_type, &unpack_uint16_tlv_value},
- { NFAPI_SUBFRAME_CONFIG_UL_CYCLIC_PREFIX_TYPE_TAG, &pNfapiMsg->subframe_config.ul_cyclic_prefix_type, &unpack_uint16_tlv_value},
+ {NFAPI_SUBFRAME_CONFIG_DUPLEX_MODE_TAG, &pNfapiMsg->subframe_config.duplex_mode, &unpack_uint16_tlv_value},
+ {NFAPI_SUBFRAME_CONFIG_PCFICH_POWER_OFFSET_TAG, &pNfapiMsg->subframe_config.pcfich_power_offset, &unpack_uint16_tlv_value},
+ {NFAPI_SUBFRAME_CONFIG_PB_TAG, &pNfapiMsg->subframe_config.pb, &unpack_uint16_tlv_value},
+ {NFAPI_SUBFRAME_CONFIG_DL_CYCLIC_PREFIX_TYPE_TAG,
+ &pNfapiMsg->subframe_config.dl_cyclic_prefix_type,
+ &unpack_uint16_tlv_value},
+ {NFAPI_SUBFRAME_CONFIG_UL_CYCLIC_PREFIX_TYPE_TAG,
+ &pNfapiMsg->subframe_config.ul_cyclic_prefix_type,
+ &unpack_uint16_tlv_value},
- { NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG, &pNfapiMsg->rf_config.dl_channel_bandwidth, &unpack_uint16_tlv_value},
- { NFAPI_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG, &pNfapiMsg->rf_config.ul_channel_bandwidth, &unpack_uint16_tlv_value},
- { NFAPI_RF_CONFIG_REFERENCE_SIGNAL_POWER_TAG, &pNfapiMsg->rf_config.reference_signal_power, &unpack_uint16_tlv_value},
- { NFAPI_RF_CONFIG_TX_ANTENNA_PORTS_TAG, &pNfapiMsg->rf_config.tx_antenna_ports, &unpack_uint16_tlv_value},
- { NFAPI_RF_CONFIG_RX_ANTENNA_PORTS_TAG, &pNfapiMsg->rf_config.rx_antenna_ports, &unpack_uint16_tlv_value},
+ {NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG, &pNfapiMsg->rf_config.dl_channel_bandwidth, &unpack_uint16_tlv_value},
+ {NFAPI_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG, &pNfapiMsg->rf_config.ul_channel_bandwidth, &unpack_uint16_tlv_value},
+ {NFAPI_RF_CONFIG_REFERENCE_SIGNAL_POWER_TAG, &pNfapiMsg->rf_config.reference_signal_power, &unpack_uint16_tlv_value},
+ {NFAPI_RF_CONFIG_TX_ANTENNA_PORTS_TAG, &pNfapiMsg->rf_config.tx_antenna_ports, &unpack_uint16_tlv_value},
+ {NFAPI_RF_CONFIG_RX_ANTENNA_PORTS_TAG, &pNfapiMsg->rf_config.rx_antenna_ports, &unpack_uint16_tlv_value},
- { NFAPI_PHICH_CONFIG_PHICH_RESOURCE_TAG, &pNfapiMsg->phich_config.phich_resource, &unpack_uint16_tlv_value},
- { NFAPI_PHICH_CONFIG_PHICH_DURATION_TAG, &pNfapiMsg->phich_config.phich_duration, &unpack_uint16_tlv_value},
- { NFAPI_PHICH_CONFIG_PHICH_POWER_OFFSET_TAG, &pNfapiMsg->phich_config.phich_power_offset, &unpack_uint16_tlv_value},
+ {NFAPI_PHICH_CONFIG_PHICH_RESOURCE_TAG, &pNfapiMsg->phich_config.phich_resource, &unpack_uint16_tlv_value},
+ {NFAPI_PHICH_CONFIG_PHICH_DURATION_TAG, &pNfapiMsg->phich_config.phich_duration, &unpack_uint16_tlv_value},
+ {NFAPI_PHICH_CONFIG_PHICH_POWER_OFFSET_TAG, &pNfapiMsg->phich_config.phich_power_offset, &unpack_uint16_tlv_value},
- { NFAPI_SCH_CONFIG_PRIMARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG, &pNfapiMsg->sch_config.primary_synchronization_signal_epre_eprers, &unpack_uint16_tlv_value},
- { NFAPI_SCH_CONFIG_SECONDARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG, &pNfapiMsg->sch_config.secondary_synchronization_signal_epre_eprers, &unpack_uint16_tlv_value},
- { NFAPI_SCH_CONFIG_PHYSICAL_CELL_ID_TAG, &pNfapiMsg->sch_config.physical_cell_id, &unpack_uint16_tlv_value},
+ {NFAPI_SCH_CONFIG_PRIMARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG,
+ &pNfapiMsg->sch_config.primary_synchronization_signal_epre_eprers,
+ &unpack_uint16_tlv_value},
+ {NFAPI_SCH_CONFIG_SECONDARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG,
+ &pNfapiMsg->sch_config.secondary_synchronization_signal_epre_eprers,
+ &unpack_uint16_tlv_value},
+ {NFAPI_SCH_CONFIG_PHYSICAL_CELL_ID_TAG, &pNfapiMsg->sch_config.physical_cell_id, &unpack_uint16_tlv_value},
- { NFAPI_PRACH_CONFIG_CONFIGURATION_INDEX_TAG, &pNfapiMsg->prach_config.configuration_index, &unpack_uint16_tlv_value},
- { NFAPI_PRACH_CONFIG_ROOT_SEQUENCE_INDEX_TAG, &pNfapiMsg->prach_config.root_sequence_index, &unpack_uint16_tlv_value},
- { NFAPI_PRACH_CONFIG_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG, &pNfapiMsg->prach_config.zero_correlation_zone_configuration, &unpack_uint16_tlv_value},
- { NFAPI_PRACH_CONFIG_HIGH_SPEED_FLAG_TAG, &pNfapiMsg->prach_config.high_speed_flag, &unpack_uint16_tlv_value},
- { NFAPI_PRACH_CONFIG_FREQUENCY_OFFSET_TAG, &pNfapiMsg->prach_config.frequency_offset, &unpack_uint16_tlv_value},
+ {NFAPI_PRACH_CONFIG_CONFIGURATION_INDEX_TAG, &pNfapiMsg->prach_config.configuration_index, &unpack_uint16_tlv_value},
+ {NFAPI_PRACH_CONFIG_ROOT_SEQUENCE_INDEX_TAG, &pNfapiMsg->prach_config.root_sequence_index, &unpack_uint16_tlv_value},
+ {NFAPI_PRACH_CONFIG_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG,
+ &pNfapiMsg->prach_config.zero_correlation_zone_configuration,
+ &unpack_uint16_tlv_value},
+ {NFAPI_PRACH_CONFIG_HIGH_SPEED_FLAG_TAG, &pNfapiMsg->prach_config.high_speed_flag, &unpack_uint16_tlv_value},
+ {NFAPI_PRACH_CONFIG_FREQUENCY_OFFSET_TAG, &pNfapiMsg->prach_config.frequency_offset, &unpack_uint16_tlv_value},
- { NFAPI_PUSCH_CONFIG_HOPPING_MODE_TAG, &pNfapiMsg->pusch_config.hopping_mode, &unpack_uint16_tlv_value},
- { NFAPI_PUSCH_CONFIG_HOPPING_OFFSET_TAG, &pNfapiMsg->pusch_config.hopping_offset, &unpack_uint16_tlv_value},
- { NFAPI_PUSCH_CONFIG_NUMBER_OF_SUBBANDS_TAG, &pNfapiMsg->pusch_config.number_of_subbands, &unpack_uint16_tlv_value},
+ {NFAPI_PUSCH_CONFIG_HOPPING_MODE_TAG, &pNfapiMsg->pusch_config.hopping_mode, &unpack_uint16_tlv_value},
+ {NFAPI_PUSCH_CONFIG_HOPPING_OFFSET_TAG, &pNfapiMsg->pusch_config.hopping_offset, &unpack_uint16_tlv_value},
+ {NFAPI_PUSCH_CONFIG_NUMBER_OF_SUBBANDS_TAG, &pNfapiMsg->pusch_config.number_of_subbands, &unpack_uint16_tlv_value},
- { NFAPI_PUCCH_CONFIG_DELTA_PUCCH_SHIFT_TAG, &pNfapiMsg->pucch_config.delta_pucch_shift, &unpack_uint16_tlv_value},
- { NFAPI_PUCCH_CONFIG_N_CQI_RB_TAG, &pNfapiMsg->pucch_config.n_cqi_rb, &unpack_uint16_tlv_value},
- { NFAPI_PUCCH_CONFIG_N_AN_CS_TAG, &pNfapiMsg->pucch_config.n_an_cs, &unpack_uint16_tlv_value},
- { NFAPI_PUCCH_CONFIG_N1_PUCCH_AN_TAG, &pNfapiMsg->pucch_config.n1_pucch_an, &unpack_uint16_tlv_value},
+ {NFAPI_PUCCH_CONFIG_DELTA_PUCCH_SHIFT_TAG, &pNfapiMsg->pucch_config.delta_pucch_shift, &unpack_uint16_tlv_value},
+ {NFAPI_PUCCH_CONFIG_N_CQI_RB_TAG, &pNfapiMsg->pucch_config.n_cqi_rb, &unpack_uint16_tlv_value},
+ {NFAPI_PUCCH_CONFIG_N_AN_CS_TAG, &pNfapiMsg->pucch_config.n_an_cs, &unpack_uint16_tlv_value},
+ {NFAPI_PUCCH_CONFIG_N1_PUCCH_AN_TAG, &pNfapiMsg->pucch_config.n1_pucch_an, &unpack_uint16_tlv_value},
- { NFAPI_SRS_CONFIG_BANDWIDTH_CONFIGURATION_TAG, &pNfapiMsg->srs_config.bandwidth_configuration, &unpack_uint16_tlv_value},
- { NFAPI_SRS_CONFIG_MAX_UP_PTS_TAG, &pNfapiMsg->srs_config.max_up_pts, &unpack_uint16_tlv_value},
- { NFAPI_SRS_CONFIG_SRS_SUBFRAME_CONFIGURATION_TAG, &pNfapiMsg->srs_config.srs_subframe_configuration, &unpack_uint16_tlv_value},
- { NFAPI_SRS_CONFIG_SRS_ACKNACK_SRS_SIMULTANEOUS_TRANSMISSION_TAG, &pNfapiMsg->srs_config.srs_acknack_srs_simultaneous_transmission, &unpack_uint16_tlv_value},
+ {NFAPI_SRS_CONFIG_BANDWIDTH_CONFIGURATION_TAG, &pNfapiMsg->srs_config.bandwidth_configuration, &unpack_uint16_tlv_value},
+ {NFAPI_SRS_CONFIG_MAX_UP_PTS_TAG, &pNfapiMsg->srs_config.max_up_pts, &unpack_uint16_tlv_value},
+ {NFAPI_SRS_CONFIG_SRS_SUBFRAME_CONFIGURATION_TAG,
+ &pNfapiMsg->srs_config.srs_subframe_configuration,
+ &unpack_uint16_tlv_value},
+ {NFAPI_SRS_CONFIG_SRS_ACKNACK_SRS_SIMULTANEOUS_TRANSMISSION_TAG,
+ &pNfapiMsg->srs_config.srs_acknack_srs_simultaneous_transmission,
+ &unpack_uint16_tlv_value},
- { NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_UPLINK_RS_HOPPING_TAG, &pNfapiMsg->uplink_reference_signal_config.uplink_rs_hopping, &unpack_uint16_tlv_value},
- { NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_GROUP_ASSIGNMENT_TAG, &pNfapiMsg->uplink_reference_signal_config.group_assignment, &unpack_uint16_tlv_value},
- { NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_CYCLIC_SHIFT_1_FOR_DRMS_TAG, &pNfapiMsg->uplink_reference_signal_config.cyclic_shift_1_for_drms, &unpack_uint16_tlv_value},
+ {NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_UPLINK_RS_HOPPING_TAG,
+ &pNfapiMsg->uplink_reference_signal_config.uplink_rs_hopping,
+ &unpack_uint16_tlv_value},
+ {NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_GROUP_ASSIGNMENT_TAG,
+ &pNfapiMsg->uplink_reference_signal_config.group_assignment,
+ &unpack_uint16_tlv_value},
+ {NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_CYCLIC_SHIFT_1_FOR_DRMS_TAG,
+ &pNfapiMsg->uplink_reference_signal_config.cyclic_shift_1_for_drms,
+ &unpack_uint16_tlv_value},
- { NFAPI_TDD_FRAME_STRUCTURE_SUBFRAME_ASSIGNMENT_TAG, &pNfapiMsg->tdd_frame_structure_config.subframe_assignment, &unpack_uint16_tlv_value},
- { NFAPI_TDD_FRAME_STRUCTURE_SPECIAL_SUBFRAME_PATTERNS_TAG, &pNfapiMsg->tdd_frame_structure_config.special_subframe_patterns, &unpack_uint16_tlv_value},
+ {NFAPI_TDD_FRAME_STRUCTURE_SUBFRAME_ASSIGNMENT_TAG,
+ &pNfapiMsg->tdd_frame_structure_config.subframe_assignment,
+ &unpack_uint16_tlv_value},
+ {NFAPI_TDD_FRAME_STRUCTURE_SPECIAL_SUBFRAME_PATTERNS_TAG,
+ &pNfapiMsg->tdd_frame_structure_config.special_subframe_patterns,
+ &unpack_uint16_tlv_value},
- { NFAPI_L23_CONFIG_DATA_REPORT_MODE_TAG, &pNfapiMsg->l23_config.data_report_mode, &unpack_uint16_tlv_value},
- { NFAPI_L23_CONFIG_SFNSF_TAG, &pNfapiMsg->l23_config.sfnsf, &unpack_uint16_tlv_value},
+ {NFAPI_L23_CONFIG_DATA_REPORT_MODE_TAG, &pNfapiMsg->l23_config.data_report_mode, &unpack_uint16_tlv_value},
+ {NFAPI_L23_CONFIG_SFNSF_TAG, &pNfapiMsg->l23_config.sfnsf, &unpack_uint16_tlv_value},
- { NFAPI_NFAPI_P7_VNF_ADDRESS_IPV4_TAG, &pNfapiMsg->nfapi_config.p7_vnf_address_ipv4, &unpack_ipv4_address_value},
- { NFAPI_NFAPI_P7_VNF_ADDRESS_IPV6_TAG, &pNfapiMsg->nfapi_config.p7_vnf_address_ipv6, &unpack_ipv6_address_value},
- { NFAPI_NFAPI_P7_VNF_PORT_TAG, &pNfapiMsg->nfapi_config.p7_vnf_port, &unpack_uint16_tlv_value},
- { NFAPI_NFAPI_P7_PNF_ADDRESS_IPV4_TAG, &pNfapiMsg->nfapi_config.p7_pnf_address_ipv4, &unpack_ipv4_address_value},
- { NFAPI_NFAPI_P7_PNF_ADDRESS_IPV6_TAG, &pNfapiMsg->nfapi_config.p7_pnf_address_ipv6, &unpack_ipv6_address_value},
- { NFAPI_NFAPI_P7_PNF_PORT_TAG, &pNfapiMsg->nfapi_config.p7_pnf_port, &unpack_uint16_tlv_value},
- { NFAPI_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG, &pNfapiMsg->nfapi_config.dl_ue_per_sf, &unpack_uint8_tlv_value},
- { NFAPI_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG, &pNfapiMsg->nfapi_config.ul_ue_per_sf, &unpack_uint8_tlv_value},
- { NFAPI_NFAPI_RF_BANDS_TAG, &pNfapiMsg->nfapi_config.rf_bands, &unpack_rf_bands_value},
- { NFAPI_NFAPI_TIMING_WINDOW_TAG, &pNfapiMsg->nfapi_config.timing_window, &unpack_uint8_tlv_value},
- { NFAPI_NFAPI_TIMING_INFO_MODE_TAG, &pNfapiMsg->nfapi_config.timing_info_mode, &unpack_uint8_tlv_value},
- { NFAPI_NFAPI_TIMING_INFO_PERIOD_TAG, &pNfapiMsg->nfapi_config.timing_info_period, &unpack_uint8_tlv_value},
- { NFAPI_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG, &pNfapiMsg->nfapi_config.max_transmit_power, &unpack_uint16_tlv_value},
- { NFAPI_NFAPI_EARFCN_TAG, &pNfapiMsg->nfapi_config.earfcn, &unpack_uint32_tlv_value},
- { NFAPI_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG, &pNfapiMsg->nfapi_config.nmm_gsm_frequency_bands, &unpack_nmm_frequency_bands_value},
- { NFAPI_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG, &pNfapiMsg->nfapi_config.nmm_umts_frequency_bands, &unpack_nmm_frequency_bands_value},
- { NFAPI_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG, &pNfapiMsg->nfapi_config.nmm_lte_frequency_bands, &unpack_nmm_frequency_bands_value},
- { NFAPI_NFAPI_NMM_UPLINK_RSSI_SUPPORTED_TAG, &pNfapiMsg->nfapi_config.nmm_uplink_rssi_supported, &unpack_uint8_tlv_value},
+ {NFAPI_NFAPI_P7_VNF_ADDRESS_IPV4_TAG, &pNfapiMsg->nfapi_config.p7_vnf_address_ipv4, &unpack_ipv4_address_value},
+ {NFAPI_NFAPI_P7_VNF_ADDRESS_IPV6_TAG, &pNfapiMsg->nfapi_config.p7_vnf_address_ipv6, &unpack_ipv6_address_value},
+ {NFAPI_NFAPI_P7_VNF_PORT_TAG, &pNfapiMsg->nfapi_config.p7_vnf_port, &unpack_uint16_tlv_value},
+ {NFAPI_NFAPI_P7_PNF_ADDRESS_IPV4_TAG, &pNfapiMsg->nfapi_config.p7_pnf_address_ipv4, &unpack_ipv4_address_value},
+ {NFAPI_NFAPI_P7_PNF_ADDRESS_IPV6_TAG, &pNfapiMsg->nfapi_config.p7_pnf_address_ipv6, &unpack_ipv6_address_value},
+ {NFAPI_NFAPI_P7_PNF_PORT_TAG, &pNfapiMsg->nfapi_config.p7_pnf_port, &unpack_uint16_tlv_value},
+ {NFAPI_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG, &pNfapiMsg->nfapi_config.dl_ue_per_sf, &unpack_uint8_tlv_value},
+ {NFAPI_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG, &pNfapiMsg->nfapi_config.ul_ue_per_sf, &unpack_uint8_tlv_value},
+ {NFAPI_NFAPI_RF_BANDS_TAG, &pNfapiMsg->nfapi_config.rf_bands, &unpack_rf_bands_value},
+ {NFAPI_NFAPI_TIMING_WINDOW_TAG, &pNfapiMsg->nfapi_config.timing_window, &unpack_uint8_tlv_value},
+ {NFAPI_NFAPI_TIMING_INFO_MODE_TAG, &pNfapiMsg->nfapi_config.timing_info_mode, &unpack_uint8_tlv_value},
+ {NFAPI_NFAPI_TIMING_INFO_PERIOD_TAG, &pNfapiMsg->nfapi_config.timing_info_period, &unpack_uint8_tlv_value},
+ {NFAPI_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG, &pNfapiMsg->nfapi_config.max_transmit_power, &unpack_uint16_tlv_value},
+ {NFAPI_NFAPI_EARFCN_TAG, &pNfapiMsg->nfapi_config.earfcn, &unpack_uint16_tlv_value},
+ {NFAPI_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG,
+ &pNfapiMsg->nfapi_config.nmm_gsm_frequency_bands,
+ &unpack_nmm_frequency_bands_value},
+ {NFAPI_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG,
+ &pNfapiMsg->nfapi_config.nmm_umts_frequency_bands,
+ &unpack_nmm_frequency_bands_value},
+ {NFAPI_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG,
+ &pNfapiMsg->nfapi_config.nmm_lte_frequency_bands,
+ &unpack_nmm_frequency_bands_value},
+ {NFAPI_NFAPI_NMM_UPLINK_RSSI_SUPPORTED_TAG, &pNfapiMsg->nfapi_config.nmm_uplink_rssi_supported, &unpack_uint8_tlv_value},
};
- return ( pull8(ppReadPackedMsg, &pNfapiMsg->error_code, end) &&
- pull8(ppReadPackedMsg, &pNfapiMsg->num_tlv, end) &&
- unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension));
+ return (pull8(ppReadPackedMsg, &pNfapiMsg->error_code, end) && pull8(ppReadPackedMsg, &pNfapiMsg->num_tlv, end)
+ && unpack_tlv_list(unpack_fns,
+ sizeof(unpack_fns) / sizeof(unpack_tlv_t),
+ ppReadPackedMsg,
+ end,
+ config,
+ &pNfapiMsg->vendor_extension));
}
-static uint8_t unpack_nr_param_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
+static uint8_t unpack_nr_param_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config)
+{
nfapi_nr_param_response_scf_t *pNfapiMsg = (nfapi_nr_param_response_scf_t *)msg;
unpack_tlv_t unpack_fns[] = {
- { NFAPI_NR_PARAM_TLV_RELEASE_CAPABILITY_TAG, &(pNfapiMsg->cell_param.release_capability), &unpack_uint16_tlv_value},
- { NFAPI_NR_PARAM_TLV_PHY_STATE_TAG, &(pNfapiMsg->cell_param.phy_state),&unpack_uint16_tlv_value},
- { NFAPI_NR_PARAM_TLV_SKIP_BLANK_DL_CONFIG_TAG, &(pNfapiMsg->cell_param.skip_blank_dl_config), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_SKIP_BLANK_UL_CONFIG_TAG, &(pNfapiMsg->cell_param.skip_blank_ul_config), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_NUM_CONFIG_TLVS_TO_REPORT_TAG, &(pNfapiMsg->cell_param.num_config_tlvs_to_report ), &unpack_uint16_tlv_value},
+ {NFAPI_NR_PARAM_TLV_RELEASE_CAPABILITY_TAG, &(pNfapiMsg->cell_param.release_capability), &unpack_uint16_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PHY_STATE_TAG, &(pNfapiMsg->cell_param.phy_state), &unpack_uint16_tlv_value},
+ {NFAPI_NR_PARAM_TLV_SKIP_BLANK_DL_CONFIG_TAG, &(pNfapiMsg->cell_param.skip_blank_dl_config), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_SKIP_BLANK_UL_CONFIG_TAG, &(pNfapiMsg->cell_param.skip_blank_ul_config), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_NUM_CONFIG_TLVS_TO_REPORT_TAG,
+ &(pNfapiMsg->cell_param.num_config_tlvs_to_report),
+ &unpack_uint16_tlv_value},
- { NFAPI_NR_PARAM_TLV_CYCLIC_PREFIX_TAG, &(pNfapiMsg->carrier_param.cyclic_prefix), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_SUPPORTED_SUBCARRIER_SPACINGS_DL_TAG, &(pNfapiMsg->carrier_param.supported_subcarrier_spacings_dl), &unpack_uint16_tlv_value},
- { NFAPI_NR_PARAM_TLV_SUPPORTED_BANDWIDTH_DL_TAG, &(pNfapiMsg->carrier_param.supported_bandwidth_dl), &unpack_uint16_tlv_value},
- { NFAPI_NR_PARAM_TLV_SUPPORTED_SUBCARRIER_SPACINGS_UL_TAG, &(pNfapiMsg->carrier_param.supported_subcarrier_spacings_ul), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_SUPPORTED_BANDWIDTH_UL_TAG, &(pNfapiMsg->carrier_param.supported_bandwidth_ul), &unpack_uint16_tlv_value},
+ {NFAPI_NR_PARAM_TLV_CYCLIC_PREFIX_TAG, &(pNfapiMsg->carrier_param.cyclic_prefix), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_SUPPORTED_SUBCARRIER_SPACINGS_DL_TAG,
+ &(pNfapiMsg->carrier_param.supported_subcarrier_spacings_dl),
+ &unpack_uint16_tlv_value},
+ {NFAPI_NR_PARAM_TLV_SUPPORTED_BANDWIDTH_DL_TAG, &(pNfapiMsg->carrier_param.supported_bandwidth_dl), &unpack_uint16_tlv_value},
+ {NFAPI_NR_PARAM_TLV_SUPPORTED_SUBCARRIER_SPACINGS_UL_TAG,
+ &(pNfapiMsg->carrier_param.supported_subcarrier_spacings_ul),
+ &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_SUPPORTED_BANDWIDTH_UL_TAG, &(pNfapiMsg->carrier_param.supported_bandwidth_ul), &unpack_uint16_tlv_value},
+ {NFAPI_NR_PARAM_TLV_CCE_MAPPING_TYPE_TAG, &(pNfapiMsg->pdcch_param.cce_mapping_type), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_CORESET_OUTSIDE_FIRST_3_OFDM_SYMS_OF_SLOT_TAG,
+ &(pNfapiMsg->pdcch_param.coreset_outside_first_3_of_ofdm_syms_of_slot),
+ &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PRECODER_GRANULARITY_CORESET_TAG,
+ &(pNfapiMsg->pdcch_param.coreset_precoder_granularity_coreset),
+ &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PDCCH_MU_MIMO_TAG, &(pNfapiMsg->pdcch_param.pdcch_mu_mimo), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PDCCH_PRECODER_CYCLING_TAG, &(pNfapiMsg->pdcch_param.pdcch_precoder_cycling), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_MAX_PDCCHS_PER_SLOT_TAG, &(pNfapiMsg->pdcch_param.max_pdcch_per_slot), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_CCE_MAPPING_TYPE_TAG, &(pNfapiMsg->pdcch_param.cce_mapping_type), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_CORESET_OUTSIDE_FIRST_3_OFDM_SYMS_OF_SLOT_TAG, &(pNfapiMsg->pdcch_param.coreset_outside_first_3_of_ofdm_syms_of_slot), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PRECODER_GRANULARITY_CORESET_TAG, &(pNfapiMsg->pdcch_param.coreset_precoder_granularity_coreset), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PDCCH_MU_MIMO_TAG, &(pNfapiMsg->pdcch_param.pdcch_mu_mimo), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PDCCH_PRECODER_CYCLING_TAG, &(pNfapiMsg->pdcch_param.pdcch_precoder_cycling), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_MAX_PDCCHS_PER_SLOT_TAG, &(pNfapiMsg->pdcch_param.max_pdcch_per_slot), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PUCCH_FORMATS_TAG, &(pNfapiMsg->pucch_param.pucch_formats), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_MAX_PUCCHS_PER_SLOT_TAG, &(pNfapiMsg->pucch_param.max_pucchs_per_slot), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PUCCH_FORMATS_TAG, &(pNfapiMsg->pucch_param.pucch_formats), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_MAX_PUCCHS_PER_SLOT_TAG, &(pNfapiMsg->pucch_param.max_pucchs_per_slot), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PDSCH_MAPPING_TYPE_TAG, &(pNfapiMsg->pdsch_param.pdsch_mapping_type), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PDSCH_ALLOCATION_TYPES_TAG, &(pNfapiMsg->pdsch_param.pdsch_allocation_types), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PDSCH_VRB_TO_PRB_MAPPING_TAG,
+ &(pNfapiMsg->pdsch_param.pdsch_vrb_to_prb_mapping),
+ &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PDSCH_CBG_TAG, &(pNfapiMsg->pdsch_param.pdsch_cbg), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PDSCH_DMRS_CONFIG_TYPES_TAG, &(pNfapiMsg->pdsch_param.pdsch_dmrs_config_types), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PDSCH_DMRS_MAX_LENGTH_TAG, &(pNfapiMsg->pdsch_param.pdsch_dmrs_max_length), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PDSCH_DMRS_ADDITIONAL_POS_TAG,
+ &(pNfapiMsg->pdsch_param.pdsch_dmrs_additional_pos),
+ &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_MAX_PDSCH_S_YBS_PER_SLOT_TAG, &(pNfapiMsg->pdsch_param.max_pdsch_tbs_per_slot), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_MAX_NUMBER_MIMO_LAYERS_PDSCH_TAG,
+ &(pNfapiMsg->pdsch_param.max_number_mimo_layers_pdsch),
+ &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_MAX_MU_MIMO_USERS_DL_TAG, &(pNfapiMsg->pdsch_param.max_mu_mimo_users_dl), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PDSCH_DATA_IN_DMRS_SYMBOLS_TAG,
+ &(pNfapiMsg->pdsch_param.pdsch_data_in_dmrs_symbols),
+ &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PREMPTION_SUPPORT_TAG, &(pNfapiMsg->pdsch_param.premption_support), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PDSCH_NON_SLOT_SUPPORT_TAG, &(pNfapiMsg->pdsch_param.pdsch_non_slot_support), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PDSCH_MAPPING_TYPE_TAG, &(pNfapiMsg->pdsch_param.pdsch_mapping_type), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PDSCH_ALLOCATION_TYPES_TAG, &(pNfapiMsg->pdsch_param.pdsch_allocation_types), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PDSCH_VRB_TO_PRB_MAPPING_TAG, &(pNfapiMsg->pdsch_param.pdsch_vrb_to_prb_mapping), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PDSCH_CBG_TAG, &(pNfapiMsg->pdsch_param.pdsch_cbg), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PDSCH_DMRS_CONFIG_TYPES_TAG, &(pNfapiMsg->pdsch_param.pdsch_dmrs_config_types), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PDSCH_DMRS_MAX_LENGTH_TAG, &(pNfapiMsg->pdsch_param.pdsch_dmrs_max_length), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PDSCH_DMRS_ADDITIONAL_POS_TAG, &(pNfapiMsg->pdsch_param.pdsch_dmrs_additional_pos), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_MAX_PDSCH_S_YBS_PER_SLOT_TAG, &(pNfapiMsg->pdsch_param.max_pdsch_tbs_per_slot), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_MAX_NUMBER_MIMO_LAYERS_PDSCH_TAG, &(pNfapiMsg->pdsch_param.max_number_mimo_layers_pdsch), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_MAX_MU_MIMO_USERS_DL_TAG, &(pNfapiMsg->pdsch_param.max_mu_mimo_users_dl), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PDSCH_DATA_IN_DMRS_SYMBOLS_TAG, &(pNfapiMsg->pdsch_param.pdsch_data_in_dmrs_symbols), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PREMPTION_SUPPORT_TAG, &(pNfapiMsg->pdsch_param.premption_support), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PDSCH_NON_SLOT_SUPPORT_TAG, &(pNfapiMsg->pdsch_param.pdsch_non_slot_support), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_UCI_MUX_ULSCH_IN_PUSCH_TAG, &(pNfapiMsg->pusch_param.uci_mux_ulsch_in_pusch), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_UCI_ONLY_PUSCH_TAG, &(pNfapiMsg->pusch_param.uci_only_pusch), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PUSCH_FREQUENCY_HOPPING_TAG, &(pNfapiMsg->pusch_param.pusch_frequency_hopping), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PUSCH_DMRS_CONFIG_TYPES_TAG, &(pNfapiMsg->pusch_param.pusch_dmrs_config_types), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PUSCH_DMRS_MAX_LEN_TAG, &(pNfapiMsg->pusch_param.pusch_dmrs_max_len), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PUSCH_DMRS_ADDITIONAL_POS_TAG,
+ &(pNfapiMsg->pusch_param.pusch_dmrs_additional_pos),
+ &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PUSCH_CBG_TAG, &(pNfapiMsg->pusch_param.pusch_cbg), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PUSCH_MAPPING_TYPE_TAG, &(pNfapiMsg->pusch_param.pusch_mapping_type), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PUSCH_ALLOCATION_TYPES_TAG, &(pNfapiMsg->pusch_param.pusch_allocation_types), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PUSCH_VRB_TO_PRB_MAPPING_TAG,
+ &(pNfapiMsg->pusch_param.pusch_vrb_to_prb_mapping),
+ &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PUSCH_MAX_PTRS_PORTS_TAG, &(pNfapiMsg->pusch_param.pusch_max_ptrs_ports), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_MAX_PDUSCHS_TBS_PER_SLOT_TAG,
+ &(pNfapiMsg->pusch_param.max_pduschs_tbs_per_slot),
+ &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_MAX_NUMBER_MIMO_LAYERS_NON_CB_PUSCH_TAG,
+ &(pNfapiMsg->pusch_param.max_number_mimo_layers_non_cb_pusch),
+ &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_SUPPORTED_MODULATION_ORDER_UL_TAG,
+ &(pNfapiMsg->pusch_param.supported_modulation_order_ul),
+ &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_MAX_MU_MIMO_USERS_UL_TAG, &(pNfapiMsg->pusch_param.max_mu_mimo_users_ul), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_DFTS_OFDM_SUPPORT_TAG, &(pNfapiMsg->pusch_param.dfts_ofdm_support), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PUSCH_AGGREGATION_FACTOR_TAG,
+ &(pNfapiMsg->pusch_param.pusch_aggregation_factor),
+ &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_UCI_MUX_ULSCH_IN_PUSCH_TAG, &(pNfapiMsg->pusch_param.uci_mux_ulsch_in_pusch), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_UCI_ONLY_PUSCH_TAG, &(pNfapiMsg->pusch_param.uci_only_pusch), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PUSCH_FREQUENCY_HOPPING_TAG, &(pNfapiMsg->pusch_param.pusch_frequency_hopping), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PUSCH_DMRS_CONFIG_TYPES_TAG, &(pNfapiMsg->pusch_param.pusch_dmrs_config_types), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PUSCH_DMRS_MAX_LEN_TAG, &(pNfapiMsg->pusch_param.pusch_dmrs_max_len), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PUSCH_DMRS_ADDITIONAL_POS_TAG, &(pNfapiMsg->pusch_param.pusch_dmrs_additional_pos), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PUSCH_CBG_TAG, &(pNfapiMsg->pusch_param.pusch_cbg), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PUSCH_MAPPING_TYPE_TAG, &(pNfapiMsg->pusch_param.pusch_mapping_type), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PUSCH_ALLOCATION_TYPES_TAG, &(pNfapiMsg->pusch_param.pusch_allocation_types), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PUSCH_VRB_TO_PRB_MAPPING_TAG, &(pNfapiMsg->pusch_param.pusch_vrb_to_prb_mapping), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PUSCH_MAX_PTRS_PORTS_TAG, &(pNfapiMsg->pusch_param.pusch_max_ptrs_ports), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_MAX_PDUSCHS_TBS_PER_SLOT_TAG, &(pNfapiMsg->pusch_param.max_pduschs_tbs_per_slot), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_MAX_NUMBER_MIMO_LAYERS_NON_CB_PUSCH_TAG, &(pNfapiMsg->pusch_param.max_number_mimo_layers_non_cb_pusch), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_SUPPORTED_MODULATION_ORDER_UL_TAG, &(pNfapiMsg->pusch_param.supported_modulation_order_ul), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_MAX_MU_MIMO_USERS_UL_TAG, &(pNfapiMsg->pusch_param.max_mu_mimo_users_ul), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_DFTS_OFDM_SUPPORT_TAG, &(pNfapiMsg->pusch_param.dfts_ofdm_support), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PUSCH_AGGREGATION_FACTOR_TAG, &(pNfapiMsg->pusch_param.pusch_aggregation_factor), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PRACH_LONG_FORMATS_TAG, &(pNfapiMsg->prach_param.prach_long_formats), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PRACH_SHORT_FORMATS_TAG, &(pNfapiMsg->prach_param.prach_short_formats), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_PRACH_RESTRICTED_SETS_TAG, &(pNfapiMsg->prach_param.prach_restricted_sets), &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_MAX_PRACH_FD_OCCASIONS_IN_A_SLOT_TAG,
+ &(pNfapiMsg->prach_param.max_prach_fd_occasions_in_a_slot),
+ &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PRACH_LONG_FORMATS_TAG, &(pNfapiMsg->prach_param.prach_long_formats), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PRACH_SHORT_FORMATS_TAG, &(pNfapiMsg->prach_param.prach_short_formats), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_PRACH_RESTRICTED_SETS_TAG, &(pNfapiMsg->prach_param.prach_restricted_sets), &unpack_uint8_tlv_value},
- { NFAPI_NR_PARAM_TLV_MAX_PRACH_FD_OCCASIONS_IN_A_SLOT_TAG, &(pNfapiMsg->prach_param.max_prach_fd_occasions_in_a_slot), &unpack_uint8_tlv_value},
-
- { NFAPI_NR_PARAM_TLV_RSSI_MEASUREMENT_SUPPORT_TAG, &(pNfapiMsg->measurement_param.rssi_measurement_support), &unpack_uint8_tlv_value},
- //config
- { NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV4_TAG, &pNfapiMsg->nfapi_config.p7_vnf_address_ipv4, &unpack_ipv4_address_value},
- { NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV6_TAG, &pNfapiMsg->nfapi_config.p7_vnf_address_ipv6, &unpack_ipv6_address_value},
- { NFAPI_NR_NFAPI_P7_VNF_PORT_TAG, &pNfapiMsg->nfapi_config.p7_vnf_port, &unpack_uint16_tlv_value},
- { NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV4_TAG, &pNfapiMsg->nfapi_config.p7_pnf_address_ipv4, &unpack_ipv4_address_value},
- { NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV6_TAG, &pNfapiMsg->nfapi_config.p7_pnf_address_ipv6, &unpack_ipv6_address_value},
- { NFAPI_NR_NFAPI_P7_PNF_PORT_TAG, &pNfapiMsg->nfapi_config.p7_pnf_port, &unpack_uint16_tlv_value},
- { NFAPI_NR_NFAPI_TIMING_WINDOW_TAG, &pNfapiMsg->nfapi_config.timing_window, &unpack_uint8_tlv_value},
- { NFAPI_NR_NFAPI_TIMING_INFO_MODE_TAG, &pNfapiMsg->nfapi_config.timing_info_mode, &unpack_uint8_tlv_value},
- { NFAPI_NR_NFAPI_TIMING_INFO_PERIOD_TAG, &pNfapiMsg->nfapi_config.timing_info_period, &unpack_uint8_tlv_value},
+ {NFAPI_NR_PARAM_TLV_RSSI_MEASUREMENT_SUPPORT_TAG,
+ &(pNfapiMsg->measurement_param.rssi_measurement_support),
+ &unpack_uint8_tlv_value},
+ // config
+ {NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV4_TAG, &pNfapiMsg->nfapi_config.p7_vnf_address_ipv4, &unpack_ipv4_address_value},
+ {NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV6_TAG, &pNfapiMsg->nfapi_config.p7_vnf_address_ipv6, &unpack_ipv6_address_value},
+ {NFAPI_NR_NFAPI_P7_VNF_PORT_TAG, &pNfapiMsg->nfapi_config.p7_vnf_port, &unpack_uint16_tlv_value},
+ {NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV4_TAG, &pNfapiMsg->nfapi_config.p7_pnf_address_ipv4, &unpack_ipv4_address_value},
+ {NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV6_TAG, &pNfapiMsg->nfapi_config.p7_pnf_address_ipv6, &unpack_ipv6_address_value},
+ {NFAPI_NR_NFAPI_P7_PNF_PORT_TAG, &pNfapiMsg->nfapi_config.p7_pnf_port, &unpack_uint16_tlv_value},
+ {NFAPI_NR_NFAPI_TIMING_WINDOW_TAG, &pNfapiMsg->nfapi_config.timing_window, &unpack_uint8_tlv_value},
+ {NFAPI_NR_NFAPI_TIMING_INFO_MODE_TAG, &pNfapiMsg->nfapi_config.timing_info_mode, &unpack_uint8_tlv_value},
+ {NFAPI_NR_NFAPI_TIMING_INFO_PERIOD_TAG, &pNfapiMsg->nfapi_config.timing_info_period, &unpack_uint8_tlv_value},
};
// print ppReadPackedMsg
uint8_t *ptr = *ppReadPackedMsg;
printf("\n Read message unpack_param_response: ");
- while(ptr < end) {
- printf(" %d ", *ptr);
+ while (ptr < end) {
+ printf(" %02x ", *ptr);
ptr++;
}
printf("\n");
- return ( pull8(ppReadPackedMsg, &pNfapiMsg->error_code, end) &&
- pull8(ppReadPackedMsg, &pNfapiMsg->num_tlv, end) &&
- unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension));
+ return (pull8(ppReadPackedMsg, &pNfapiMsg->error_code, end) && pull8(ppReadPackedMsg, &pNfapiMsg->num_tlv, end)
+ && unpack_nr_tlv_list(unpack_fns,
+ sizeof(unpack_fns) / sizeof(unpack_tlv_t),
+ ppReadPackedMsg,
+ end,
+ config,
+ &pNfapiMsg->vendor_extension));
}
-static uint8_t unpack_config_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
+static uint8_t unpack_config_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config)
+{
nfapi_config_request_t *pNfapiMsg = (nfapi_config_request_t *)msg;
unpack_tlv_t unpack_fns[] = {
- { NFAPI_SUBFRAME_CONFIG_DUPLEX_MODE_TAG, &pNfapiMsg->subframe_config.duplex_mode, &unpack_uint16_tlv_value},
- { NFAPI_SUBFRAME_CONFIG_PCFICH_POWER_OFFSET_TAG, &pNfapiMsg->subframe_config.pcfich_power_offset, &unpack_uint16_tlv_value},
- { NFAPI_SUBFRAME_CONFIG_PB_TAG, &pNfapiMsg->subframe_config.pb, &unpack_uint16_tlv_value},
- { NFAPI_SUBFRAME_CONFIG_DL_CYCLIC_PREFIX_TYPE_TAG, &pNfapiMsg->subframe_config.dl_cyclic_prefix_type, &unpack_uint16_tlv_value},
- { NFAPI_SUBFRAME_CONFIG_UL_CYCLIC_PREFIX_TYPE_TAG, &pNfapiMsg->subframe_config.ul_cyclic_prefix_type, &unpack_uint16_tlv_value},
+ {NFAPI_SUBFRAME_CONFIG_DUPLEX_MODE_TAG, &pNfapiMsg->subframe_config.duplex_mode, &unpack_uint16_tlv_value},
+ {NFAPI_SUBFRAME_CONFIG_PCFICH_POWER_OFFSET_TAG, &pNfapiMsg->subframe_config.pcfich_power_offset, &unpack_uint16_tlv_value},
+ {NFAPI_SUBFRAME_CONFIG_PB_TAG, &pNfapiMsg->subframe_config.pb, &unpack_uint16_tlv_value},
+ {NFAPI_SUBFRAME_CONFIG_DL_CYCLIC_PREFIX_TYPE_TAG,
+ &pNfapiMsg->subframe_config.dl_cyclic_prefix_type,
+ &unpack_uint16_tlv_value},
+ {NFAPI_SUBFRAME_CONFIG_UL_CYCLIC_PREFIX_TYPE_TAG,
+ &pNfapiMsg->subframe_config.ul_cyclic_prefix_type,
+ &unpack_uint16_tlv_value},
- { NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG, &pNfapiMsg->rf_config.dl_channel_bandwidth, &unpack_uint16_tlv_value},
- { NFAPI_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG, &pNfapiMsg->rf_config.ul_channel_bandwidth, &unpack_uint16_tlv_value},
- { NFAPI_RF_CONFIG_REFERENCE_SIGNAL_POWER_TAG, &pNfapiMsg->rf_config.reference_signal_power, &unpack_uint16_tlv_value},
- { NFAPI_RF_CONFIG_TX_ANTENNA_PORTS_TAG, &pNfapiMsg->rf_config.tx_antenna_ports, &unpack_uint16_tlv_value},
- { NFAPI_RF_CONFIG_RX_ANTENNA_PORTS_TAG, &pNfapiMsg->rf_config.rx_antenna_ports, &unpack_uint16_tlv_value},
+ {NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG, &pNfapiMsg->rf_config.dl_channel_bandwidth, &unpack_uint16_tlv_value},
+ {NFAPI_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG, &pNfapiMsg->rf_config.ul_channel_bandwidth, &unpack_uint16_tlv_value},
+ {NFAPI_RF_CONFIG_REFERENCE_SIGNAL_POWER_TAG, &pNfapiMsg->rf_config.reference_signal_power, &unpack_uint16_tlv_value},
+ {NFAPI_RF_CONFIG_TX_ANTENNA_PORTS_TAG, &pNfapiMsg->rf_config.tx_antenna_ports, &unpack_uint16_tlv_value},
+ {NFAPI_RF_CONFIG_RX_ANTENNA_PORTS_TAG, &pNfapiMsg->rf_config.rx_antenna_ports, &unpack_uint16_tlv_value},
- { NFAPI_PHICH_CONFIG_PHICH_RESOURCE_TAG, &pNfapiMsg->phich_config.phich_resource, &unpack_uint16_tlv_value},
- { NFAPI_PHICH_CONFIG_PHICH_DURATION_TAG, &pNfapiMsg->phich_config.phich_duration, &unpack_uint16_tlv_value},
- { NFAPI_PHICH_CONFIG_PHICH_POWER_OFFSET_TAG, &pNfapiMsg->phich_config.phich_power_offset, &unpack_uint16_tlv_value},
+ {NFAPI_PHICH_CONFIG_PHICH_RESOURCE_TAG, &pNfapiMsg->phich_config.phich_resource, &unpack_uint16_tlv_value},
+ {NFAPI_PHICH_CONFIG_PHICH_DURATION_TAG, &pNfapiMsg->phich_config.phich_duration, &unpack_uint16_tlv_value},
+ {NFAPI_PHICH_CONFIG_PHICH_POWER_OFFSET_TAG, &pNfapiMsg->phich_config.phich_power_offset, &unpack_uint16_tlv_value},
- { NFAPI_SCH_CONFIG_PRIMARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG, &pNfapiMsg->sch_config.primary_synchronization_signal_epre_eprers, &unpack_uint16_tlv_value},
- { NFAPI_SCH_CONFIG_SECONDARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG, &pNfapiMsg->sch_config.secondary_synchronization_signal_epre_eprers, &unpack_uint16_tlv_value},
- { NFAPI_SCH_CONFIG_PHYSICAL_CELL_ID_TAG, &pNfapiMsg->sch_config.physical_cell_id, &unpack_uint16_tlv_value},
+ {NFAPI_SCH_CONFIG_PRIMARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG,
+ &pNfapiMsg->sch_config.primary_synchronization_signal_epre_eprers,
+ &unpack_uint16_tlv_value},
+ {NFAPI_SCH_CONFIG_SECONDARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG,
+ &pNfapiMsg->sch_config.secondary_synchronization_signal_epre_eprers,
+ &unpack_uint16_tlv_value},
+ {NFAPI_SCH_CONFIG_PHYSICAL_CELL_ID_TAG, &pNfapiMsg->sch_config.physical_cell_id, &unpack_uint16_tlv_value},
- { NFAPI_PRACH_CONFIG_CONFIGURATION_INDEX_TAG, &pNfapiMsg->prach_config.configuration_index, &unpack_uint16_tlv_value},
- { NFAPI_PRACH_CONFIG_ROOT_SEQUENCE_INDEX_TAG, &pNfapiMsg->prach_config.root_sequence_index, &unpack_uint16_tlv_value},
- { NFAPI_PRACH_CONFIG_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG, &pNfapiMsg->prach_config.zero_correlation_zone_configuration, &unpack_uint16_tlv_value},
- { NFAPI_PRACH_CONFIG_HIGH_SPEED_FLAG_TAG, &pNfapiMsg->prach_config.high_speed_flag, &unpack_uint16_tlv_value},
- { NFAPI_PRACH_CONFIG_FREQUENCY_OFFSET_TAG, &pNfapiMsg->prach_config.frequency_offset, &unpack_uint16_tlv_value},
+ {NFAPI_PRACH_CONFIG_CONFIGURATION_INDEX_TAG, &pNfapiMsg->prach_config.configuration_index, &unpack_uint16_tlv_value},
+ {NFAPI_PRACH_CONFIG_ROOT_SEQUENCE_INDEX_TAG, &pNfapiMsg->prach_config.root_sequence_index, &unpack_uint16_tlv_value},
+ {NFAPI_PRACH_CONFIG_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG,
+ &pNfapiMsg->prach_config.zero_correlation_zone_configuration,
+ &unpack_uint16_tlv_value},
+ {NFAPI_PRACH_CONFIG_HIGH_SPEED_FLAG_TAG, &pNfapiMsg->prach_config.high_speed_flag, &unpack_uint16_tlv_value},
+ {NFAPI_PRACH_CONFIG_FREQUENCY_OFFSET_TAG, &pNfapiMsg->prach_config.frequency_offset, &unpack_uint16_tlv_value},
- { NFAPI_PUSCH_CONFIG_HOPPING_MODE_TAG, &pNfapiMsg->pusch_config.hopping_mode, &unpack_uint16_tlv_value},
- { NFAPI_PUSCH_CONFIG_HOPPING_OFFSET_TAG, &pNfapiMsg->pusch_config.hopping_offset, &unpack_uint16_tlv_value},
- { NFAPI_PUSCH_CONFIG_NUMBER_OF_SUBBANDS_TAG, &pNfapiMsg->pusch_config.number_of_subbands, &unpack_uint16_tlv_value},
+ {NFAPI_PUSCH_CONFIG_HOPPING_MODE_TAG, &pNfapiMsg->pusch_config.hopping_mode, &unpack_uint16_tlv_value},
+ {NFAPI_PUSCH_CONFIG_HOPPING_OFFSET_TAG, &pNfapiMsg->pusch_config.hopping_offset, &unpack_uint16_tlv_value},
+ {NFAPI_PUSCH_CONFIG_NUMBER_OF_SUBBANDS_TAG, &pNfapiMsg->pusch_config.number_of_subbands, &unpack_uint16_tlv_value},
- { NFAPI_PUCCH_CONFIG_DELTA_PUCCH_SHIFT_TAG, &pNfapiMsg->pucch_config.delta_pucch_shift, &unpack_uint16_tlv_value},
- { NFAPI_PUCCH_CONFIG_N_CQI_RB_TAG, &pNfapiMsg->pucch_config.n_cqi_rb, &unpack_uint16_tlv_value},
- { NFAPI_PUCCH_CONFIG_N_AN_CS_TAG, &pNfapiMsg->pucch_config.n_an_cs, &unpack_uint16_tlv_value},
- { NFAPI_PUCCH_CONFIG_N1_PUCCH_AN_TAG, &pNfapiMsg->pucch_config.n1_pucch_an, &unpack_uint16_tlv_value},
+ {NFAPI_PUCCH_CONFIG_DELTA_PUCCH_SHIFT_TAG, &pNfapiMsg->pucch_config.delta_pucch_shift, &unpack_uint16_tlv_value},
+ {NFAPI_PUCCH_CONFIG_N_CQI_RB_TAG, &pNfapiMsg->pucch_config.n_cqi_rb, &unpack_uint16_tlv_value},
+ {NFAPI_PUCCH_CONFIG_N_AN_CS_TAG, &pNfapiMsg->pucch_config.n_an_cs, &unpack_uint16_tlv_value},
+ {NFAPI_PUCCH_CONFIG_N1_PUCCH_AN_TAG, &pNfapiMsg->pucch_config.n1_pucch_an, &unpack_uint16_tlv_value},
- { NFAPI_SRS_CONFIG_BANDWIDTH_CONFIGURATION_TAG, &pNfapiMsg->srs_config.bandwidth_configuration, &unpack_uint16_tlv_value},
- { NFAPI_SRS_CONFIG_MAX_UP_PTS_TAG, &pNfapiMsg->srs_config.max_up_pts, &unpack_uint16_tlv_value},
- { NFAPI_SRS_CONFIG_SRS_SUBFRAME_CONFIGURATION_TAG, &pNfapiMsg->srs_config.srs_subframe_configuration, &unpack_uint16_tlv_value},
- { NFAPI_SRS_CONFIG_SRS_ACKNACK_SRS_SIMULTANEOUS_TRANSMISSION_TAG, &pNfapiMsg->srs_config.srs_acknack_srs_simultaneous_transmission, &unpack_uint16_tlv_value},
+ {NFAPI_SRS_CONFIG_BANDWIDTH_CONFIGURATION_TAG, &pNfapiMsg->srs_config.bandwidth_configuration, &unpack_uint16_tlv_value},
+ {NFAPI_SRS_CONFIG_MAX_UP_PTS_TAG, &pNfapiMsg->srs_config.max_up_pts, &unpack_uint16_tlv_value},
+ {NFAPI_SRS_CONFIG_SRS_SUBFRAME_CONFIGURATION_TAG,
+ &pNfapiMsg->srs_config.srs_subframe_configuration,
+ &unpack_uint16_tlv_value},
+ {NFAPI_SRS_CONFIG_SRS_ACKNACK_SRS_SIMULTANEOUS_TRANSMISSION_TAG,
+ &pNfapiMsg->srs_config.srs_acknack_srs_simultaneous_transmission,
+ &unpack_uint16_tlv_value},
- { NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_UPLINK_RS_HOPPING_TAG, &pNfapiMsg->uplink_reference_signal_config.uplink_rs_hopping, &unpack_uint16_tlv_value},
- { NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_GROUP_ASSIGNMENT_TAG, &pNfapiMsg->uplink_reference_signal_config.group_assignment, &unpack_uint16_tlv_value},
- { NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_CYCLIC_SHIFT_1_FOR_DRMS_TAG, &pNfapiMsg->uplink_reference_signal_config.cyclic_shift_1_for_drms, &unpack_uint16_tlv_value},
+ {NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_UPLINK_RS_HOPPING_TAG,
+ &pNfapiMsg->uplink_reference_signal_config.uplink_rs_hopping,
+ &unpack_uint16_tlv_value},
+ {NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_GROUP_ASSIGNMENT_TAG,
+ &pNfapiMsg->uplink_reference_signal_config.group_assignment,
+ &unpack_uint16_tlv_value},
+ {NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_CYCLIC_SHIFT_1_FOR_DRMS_TAG,
+ &pNfapiMsg->uplink_reference_signal_config.cyclic_shift_1_for_drms,
+ &unpack_uint16_tlv_value},
+ {NFAPI_LAA_CONFIG_ED_THRESHOLD_FOR_LBT_FOR_PDSCH_TAG,
+ &pNfapiMsg->laa_config.ed_threshold_lbt_pdsch,
+ &unpack_uint16_tlv_value},
+ {NFAPI_LAA_CONFIG_ED_THRESHOLD_FOR_LBT_FOR_DRS_TAG, &pNfapiMsg->laa_config.ed_threshold_lbt_drs, &unpack_uint16_tlv_value},
+ {NFAPI_LAA_CONFIG_PD_THRESHOLD_TAG, &pNfapiMsg->laa_config.pd_threshold, &unpack_uint16_tlv_value},
+ {NFAPI_LAA_CONFIG_MULTI_CARRIER_TYPE_TAG, &pNfapiMsg->laa_config.multi_carrier_type, &unpack_uint16_tlv_value},
+ {NFAPI_LAA_CONFIG_MULTI_CARRIER_TX_TAG, &pNfapiMsg->laa_config.multi_carrier_tx, &unpack_uint16_tlv_value},
+ {NFAPI_LAA_CONFIG_MULTI_CARRIER_FREEZE_TAG, &pNfapiMsg->laa_config.multi_carrier_freeze, &unpack_uint16_tlv_value},
+ {NFAPI_LAA_CONFIG_TX_ANTENNA_PORTS_FOR_DRS_TAG, &pNfapiMsg->laa_config.tx_antenna_ports_drs, &unpack_uint16_tlv_value},
+ {NFAPI_LAA_CONFIG_TRANSMISSION_POWER_FOR_DRS_TAG, &pNfapiMsg->laa_config.tx_power_drs, &unpack_uint16_tlv_value},
- { NFAPI_LAA_CONFIG_ED_THRESHOLD_FOR_LBT_FOR_PDSCH_TAG, &pNfapiMsg->laa_config.ed_threshold_lbt_pdsch, &unpack_uint16_tlv_value},
- { NFAPI_LAA_CONFIG_ED_THRESHOLD_FOR_LBT_FOR_DRS_TAG, &pNfapiMsg->laa_config.ed_threshold_lbt_drs, &unpack_uint16_tlv_value},
- { NFAPI_LAA_CONFIG_PD_THRESHOLD_TAG, &pNfapiMsg->laa_config.pd_threshold, &unpack_uint16_tlv_value},
- { NFAPI_LAA_CONFIG_MULTI_CARRIER_TYPE_TAG, &pNfapiMsg->laa_config.multi_carrier_type, &unpack_uint16_tlv_value},
- { NFAPI_LAA_CONFIG_MULTI_CARRIER_TX_TAG, &pNfapiMsg->laa_config.multi_carrier_tx, &unpack_uint16_tlv_value},
- { NFAPI_LAA_CONFIG_MULTI_CARRIER_FREEZE_TAG, &pNfapiMsg->laa_config.multi_carrier_freeze, &unpack_uint16_tlv_value},
- { NFAPI_LAA_CONFIG_TX_ANTENNA_PORTS_FOR_DRS_TAG, &pNfapiMsg->laa_config.tx_antenna_ports_drs, &unpack_uint16_tlv_value},
- { NFAPI_LAA_CONFIG_TRANSMISSION_POWER_FOR_DRS_TAG, &pNfapiMsg->laa_config.tx_power_drs, &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PBCH_REPETITIONS_ENABLE_R13_TAG,
+ &pNfapiMsg->emtc_config.pbch_repetitions_enable_r13,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CATM_ROOT_SEQUENCE_INDEX_TAG,
+ &pNfapiMsg->emtc_config.prach_catm_root_sequence_index,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CATM_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG,
+ &pNfapiMsg->emtc_config.prach_catm_zero_correlation_zone_configuration,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CATM_HIGH_SPEED_FLAG, &pNfapiMsg->emtc_config.prach_catm_high_speed_flag, &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_ENABLE_TAG, &pNfapiMsg->emtc_config.prach_ce_level_0_enable, &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_CONFIGURATION_INDEX_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_0_configuration_index,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_FREQUENCY_OFFSET_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_0_frequency_offset,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_0_number_of_repetitions_per_attempt,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_STARTING_SUBFRAME_PERIODICITY_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_0_starting_subframe_periodicity,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_HOPPING_ENABLE_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_0_hopping_enable,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_HOPPING_OFFSET_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_0_hopping_offset,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_ENABLE_TAG, &pNfapiMsg->emtc_config.prach_ce_level_1_enable, &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_CONFIGURATION_INDEX_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_1_configuration_index,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_FREQUENCY_OFFSET_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_1_frequency_offset,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_1_number_of_repetitions_per_attempt,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_STARTING_SUBFRAME_PERIODICITY_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_1_starting_subframe_periodicity,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_HOPPING_ENABLE_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_1_hopping_enable,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_HOPPING_OFFSET_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_1_hopping_offset,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_ENABLE_TAG, &pNfapiMsg->emtc_config.prach_ce_level_2_enable, &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_CONFIGURATION_INDEX_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_2_configuration_index,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_FREQUENCY_OFFSET_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_2_frequency_offset,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_2_number_of_repetitions_per_attempt,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_STARTING_SUBFRAME_PERIODICITY_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_2_starting_subframe_periodicity,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_HOPPING_ENABLE_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_2_hopping_enable,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_HOPPING_OFFSET_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_2_hopping_offset,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_ENABLE_TAG, &pNfapiMsg->emtc_config.prach_ce_level_3_enable, &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_CONFIGURATION_INDEX_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_3_configuration_index,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_FREQUENCY_OFFSET_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_3_frequency_offset,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_3_number_of_repetitions_per_attempt,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_STARTING_SUBFRAME_PERIODICITY_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_3_starting_subframe_periodicity,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_HOPPING_ENABLE_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_3_hopping_enable,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_HOPPING_OFFSET_TAG,
+ &pNfapiMsg->emtc_config.prach_ce_level_3_hopping_offset,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEA_TAG,
+ &pNfapiMsg->emtc_config.pucch_interval_ulhoppingconfigcommonmodea,
+ &unpack_uint16_tlv_value},
+ {NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEB_TAG,
+ &pNfapiMsg->emtc_config.pucch_interval_ulhoppingconfigcommonmodeb,
+ &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PBCH_REPETITIONS_ENABLE_R13_TAG, &pNfapiMsg->emtc_config.pbch_repetitions_enable_r13, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CATM_ROOT_SEQUENCE_INDEX_TAG, &pNfapiMsg->emtc_config.prach_catm_root_sequence_index, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CATM_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG, &pNfapiMsg->emtc_config.prach_catm_zero_correlation_zone_configuration, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CATM_HIGH_SPEED_FLAG, &pNfapiMsg->emtc_config.prach_catm_high_speed_flag, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_ENABLE_TAG, &pNfapiMsg->emtc_config.prach_ce_level_0_enable, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_CONFIGURATION_INDEX_TAG, &pNfapiMsg->emtc_config.prach_ce_level_0_configuration_index, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_FREQUENCY_OFFSET_TAG, &pNfapiMsg->emtc_config.prach_ce_level_0_frequency_offset, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG, &pNfapiMsg->emtc_config.prach_ce_level_0_number_of_repetitions_per_attempt, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_STARTING_SUBFRAME_PERIODICITY_TAG, &pNfapiMsg->emtc_config.prach_ce_level_0_starting_subframe_periodicity, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_HOPPING_ENABLE_TAG, &pNfapiMsg->emtc_config.prach_ce_level_0_hopping_enable, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_HOPPING_OFFSET_TAG, &pNfapiMsg->emtc_config.prach_ce_level_0_hopping_offset, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_ENABLE_TAG, &pNfapiMsg->emtc_config.prach_ce_level_1_enable, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_CONFIGURATION_INDEX_TAG, &pNfapiMsg->emtc_config.prach_ce_level_1_configuration_index, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_FREQUENCY_OFFSET_TAG, &pNfapiMsg->emtc_config.prach_ce_level_1_frequency_offset, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG, &pNfapiMsg->emtc_config.prach_ce_level_1_number_of_repetitions_per_attempt, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_STARTING_SUBFRAME_PERIODICITY_TAG, &pNfapiMsg->emtc_config.prach_ce_level_1_starting_subframe_periodicity, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_HOPPING_ENABLE_TAG, &pNfapiMsg->emtc_config.prach_ce_level_1_hopping_enable, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_HOPPING_OFFSET_TAG, &pNfapiMsg->emtc_config.prach_ce_level_1_hopping_offset, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_ENABLE_TAG, &pNfapiMsg->emtc_config.prach_ce_level_2_enable, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_CONFIGURATION_INDEX_TAG, &pNfapiMsg->emtc_config.prach_ce_level_2_configuration_index, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_FREQUENCY_OFFSET_TAG, &pNfapiMsg->emtc_config.prach_ce_level_2_frequency_offset, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG, &pNfapiMsg->emtc_config.prach_ce_level_2_number_of_repetitions_per_attempt, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_STARTING_SUBFRAME_PERIODICITY_TAG, &pNfapiMsg->emtc_config.prach_ce_level_2_starting_subframe_periodicity, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_HOPPING_ENABLE_TAG, &pNfapiMsg->emtc_config.prach_ce_level_2_hopping_enable, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_HOPPING_OFFSET_TAG, &pNfapiMsg->emtc_config.prach_ce_level_2_hopping_offset, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_ENABLE_TAG, &pNfapiMsg->emtc_config.prach_ce_level_3_enable, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_CONFIGURATION_INDEX_TAG, &pNfapiMsg->emtc_config.prach_ce_level_3_configuration_index, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_FREQUENCY_OFFSET_TAG, &pNfapiMsg->emtc_config.prach_ce_level_3_frequency_offset, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG, &pNfapiMsg->emtc_config.prach_ce_level_3_number_of_repetitions_per_attempt, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_STARTING_SUBFRAME_PERIODICITY_TAG, &pNfapiMsg->emtc_config.prach_ce_level_3_starting_subframe_periodicity, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_HOPPING_ENABLE_TAG, &pNfapiMsg->emtc_config.prach_ce_level_3_hopping_enable, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_HOPPING_OFFSET_TAG, &pNfapiMsg->emtc_config.prach_ce_level_3_hopping_offset, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEA_TAG, &pNfapiMsg->emtc_config.pucch_interval_ulhoppingconfigcommonmodea, &unpack_uint16_tlv_value},
- { NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEB_TAG, &pNfapiMsg->emtc_config.pucch_interval_ulhoppingconfigcommonmodeb, &unpack_uint16_tlv_value},
+ {NFAPI_TDD_FRAME_STRUCTURE_SUBFRAME_ASSIGNMENT_TAG,
+ &pNfapiMsg->tdd_frame_structure_config.subframe_assignment,
+ &unpack_uint16_tlv_value},
+ {NFAPI_TDD_FRAME_STRUCTURE_SPECIAL_SUBFRAME_PATTERNS_TAG,
+ &pNfapiMsg->tdd_frame_structure_config.special_subframe_patterns,
+ &unpack_uint16_tlv_value},
- { NFAPI_TDD_FRAME_STRUCTURE_SUBFRAME_ASSIGNMENT_TAG, &pNfapiMsg->tdd_frame_structure_config.subframe_assignment, &unpack_uint16_tlv_value},
- { NFAPI_TDD_FRAME_STRUCTURE_SPECIAL_SUBFRAME_PATTERNS_TAG, &pNfapiMsg->tdd_frame_structure_config.special_subframe_patterns, &unpack_uint16_tlv_value},
+ {NFAPI_L23_CONFIG_DATA_REPORT_MODE_TAG, &pNfapiMsg->l23_config.data_report_mode, &unpack_uint16_tlv_value},
+ {NFAPI_L23_CONFIG_SFNSF_TAG, &pNfapiMsg->l23_config.sfnsf, &unpack_uint16_tlv_value},
- { NFAPI_L23_CONFIG_DATA_REPORT_MODE_TAG, &pNfapiMsg->l23_config.data_report_mode, &unpack_uint16_tlv_value},
- { NFAPI_L23_CONFIG_SFNSF_TAG, &pNfapiMsg->l23_config.sfnsf, &unpack_uint16_tlv_value},
-
- { NFAPI_NFAPI_P7_VNF_ADDRESS_IPV4_TAG, &pNfapiMsg->nfapi_config.p7_vnf_address_ipv4, &unpack_ipv4_address_value},
- { NFAPI_NFAPI_P7_VNF_ADDRESS_IPV6_TAG, &pNfapiMsg->nfapi_config.p7_vnf_address_ipv6, &unpack_ipv6_address_value},
- { NFAPI_NFAPI_P7_VNF_PORT_TAG, &pNfapiMsg->nfapi_config.p7_vnf_port, &unpack_uint16_tlv_value},
- { NFAPI_NFAPI_P7_PNF_ADDRESS_IPV4_TAG, &pNfapiMsg->nfapi_config.p7_pnf_address_ipv4, &unpack_ipv4_address_value},
- { NFAPI_NFAPI_P7_PNF_ADDRESS_IPV6_TAG, &pNfapiMsg->nfapi_config.p7_pnf_address_ipv6, &unpack_ipv6_address_value},
- { NFAPI_NFAPI_P7_PNF_PORT_TAG, &pNfapiMsg->nfapi_config.p7_pnf_port, &unpack_uint16_tlv_value},
- { NFAPI_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG, &pNfapiMsg->nfapi_config.dl_ue_per_sf, &unpack_uint8_tlv_value},
- { NFAPI_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG, &pNfapiMsg->nfapi_config.ul_ue_per_sf, &unpack_uint8_tlv_value},
- { NFAPI_NFAPI_RF_BANDS_TAG, &pNfapiMsg->nfapi_config.rf_bands, &unpack_rf_bands_value},
- { NFAPI_NFAPI_TIMING_WINDOW_TAG, &pNfapiMsg->nfapi_config.timing_window, &unpack_uint8_tlv_value},
- { NFAPI_NFAPI_TIMING_INFO_MODE_TAG, &pNfapiMsg->nfapi_config.timing_info_mode, &unpack_uint8_tlv_value},
- { NFAPI_NFAPI_TIMING_INFO_PERIOD_TAG, &pNfapiMsg->nfapi_config.timing_info_period, &unpack_uint8_tlv_value},
- { NFAPI_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG, &pNfapiMsg->nfapi_config.max_transmit_power, &unpack_uint16_tlv_value},
- { NFAPI_NFAPI_EARFCN_TAG, &pNfapiMsg->nfapi_config.earfcn, &unpack_uint32_tlv_value},
- { NFAPI_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG, &pNfapiMsg->nfapi_config.nmm_gsm_frequency_bands, &unpack_nmm_frequency_bands_value},
- { NFAPI_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG, &pNfapiMsg->nfapi_config.nmm_umts_frequency_bands, &unpack_nmm_frequency_bands_value},
- { NFAPI_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG, &pNfapiMsg->nfapi_config.nmm_lte_frequency_bands, &unpack_nmm_frequency_bands_value},
- { NFAPI_NFAPI_NMM_UPLINK_RSSI_SUPPORTED_TAG, &pNfapiMsg->nfapi_config.nmm_uplink_rssi_supported, &unpack_uint8_tlv_value},
+ {NFAPI_NFAPI_P7_VNF_ADDRESS_IPV4_TAG, &pNfapiMsg->nfapi_config.p7_vnf_address_ipv4, &unpack_ipv4_address_value},
+ {NFAPI_NFAPI_P7_VNF_ADDRESS_IPV6_TAG, &pNfapiMsg->nfapi_config.p7_vnf_address_ipv6, &unpack_ipv6_address_value},
+ {NFAPI_NFAPI_P7_VNF_PORT_TAG, &pNfapiMsg->nfapi_config.p7_vnf_port, &unpack_uint16_tlv_value},
+ {NFAPI_NFAPI_P7_PNF_ADDRESS_IPV4_TAG, &pNfapiMsg->nfapi_config.p7_pnf_address_ipv4, &unpack_ipv4_address_value},
+ {NFAPI_NFAPI_P7_PNF_ADDRESS_IPV6_TAG, &pNfapiMsg->nfapi_config.p7_pnf_address_ipv6, &unpack_ipv6_address_value},
+ {NFAPI_NFAPI_P7_PNF_PORT_TAG, &pNfapiMsg->nfapi_config.p7_pnf_port, &unpack_uint16_tlv_value},
+ {NFAPI_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG, &pNfapiMsg->nfapi_config.dl_ue_per_sf, &unpack_uint8_tlv_value},
+ {NFAPI_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG, &pNfapiMsg->nfapi_config.ul_ue_per_sf, &unpack_uint8_tlv_value},
+ {NFAPI_NFAPI_RF_BANDS_TAG, &pNfapiMsg->nfapi_config.rf_bands, &unpack_rf_bands_value},
+ {NFAPI_NFAPI_TIMING_WINDOW_TAG, &pNfapiMsg->nfapi_config.timing_window, &unpack_uint8_tlv_value},
+ {NFAPI_NFAPI_TIMING_INFO_MODE_TAG, &pNfapiMsg->nfapi_config.timing_info_mode, &unpack_uint8_tlv_value},
+ {NFAPI_NFAPI_TIMING_INFO_PERIOD_TAG, &pNfapiMsg->nfapi_config.timing_info_period, &unpack_uint8_tlv_value},
+ {NFAPI_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG, &pNfapiMsg->nfapi_config.max_transmit_power, &unpack_uint16_tlv_value},
+ {NFAPI_NFAPI_EARFCN_TAG, &pNfapiMsg->nfapi_config.earfcn, &unpack_uint16_tlv_value},
+ {NFAPI_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG,
+ &pNfapiMsg->nfapi_config.nmm_gsm_frequency_bands,
+ &unpack_nmm_frequency_bands_value},
+ {NFAPI_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG,
+ &pNfapiMsg->nfapi_config.nmm_umts_frequency_bands,
+ &unpack_nmm_frequency_bands_value},
+ {NFAPI_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG,
+ &pNfapiMsg->nfapi_config.nmm_lte_frequency_bands,
+ &unpack_nmm_frequency_bands_value},
+ {NFAPI_NFAPI_NMM_UPLINK_RSSI_SUPPORTED_TAG, &pNfapiMsg->nfapi_config.nmm_uplink_rssi_supported, &unpack_uint8_tlv_value},
};
- return ( pull8(ppReadPackedMsg, &pNfapiMsg->num_tlv, end) &&
- unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension));
+ return (pull8(ppReadPackedMsg, &pNfapiMsg->num_tlv, end)
+ && unpack_tlv_list(unpack_fns,
+ sizeof(unpack_fns) / sizeof(unpack_tlv_t),
+ ppReadPackedMsg,
+ end,
+ config,
+ &pNfapiMsg->vendor_extension));
}
-static uint8_t unpack_nr_config_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t* config)
+static uint8_t unpack_nr_config_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config)
{
- nfapi_nr_config_request_scf_t *pNfapiMsg = (nfapi_nr_config_request_scf_t*)msg;
+ // Helper vars for indexed TLVs
+ int prach_root_seq_idx = 0;
+ int unused_root_seq_idx = 0;
+ int ssb_mask_idx = 0;
+ int config_beam_idx = 0;
+ int tdd_periodicity_idx = 0;
+ int symbol_per_slot_idx = 0;
+ nfapi_nr_config_request_scf_t *pNfapiMsg = (nfapi_nr_config_request_scf_t *)msg;
+ // Memory allocations
+ pNfapiMsg->tdd_table.max_tdd_periodicity_list =
+ (nfapi_nr_max_tdd_periodicity_t *)malloc(40 * sizeof(nfapi_nr_max_tdd_periodicity_t));
- pNfapiMsg->tdd_table.max_tdd_periodicity_list = (nfapi_nr_max_tdd_periodicity_t*) malloc(40*sizeof(nfapi_nr_max_tdd_periodicity_t));
+ for (int i = 0; i < 40; i++) {
+ pNfapiMsg->tdd_table.max_tdd_periodicity_list[i].max_num_of_symbol_per_slot_list =
+ (nfapi_nr_max_num_of_symbol_per_slot_t *)malloc(14 * sizeof(nfapi_nr_max_num_of_symbol_per_slot_t));
+ }
+ pNfapiMsg->prach_config.num_prach_fd_occasions_list =
+ (nfapi_nr_num_prach_fd_occasions_t *)malloc(sizeof(nfapi_nr_num_prach_fd_occasions_t));
+ // unpack TLVs
- for(int i=0;i<40;i++)
- pNfapiMsg->tdd_table.max_tdd_periodicity_list[i].max_num_of_symbol_per_slot_list = (nfapi_nr_max_num_of_symbol_per_slot_t*) malloc(14*sizeof(nfapi_nr_max_num_of_symbol_per_slot_t));
+ unpack_tlv_t unpack_fns[] = {
+ {NFAPI_NR_CONFIG_DL_BANDWIDTH_TAG, &(pNfapiMsg->carrier_config.dl_bandwidth), &unpack_uint16_tlv_value},
+ {NFAPI_NR_CONFIG_DL_FREQUENCY_TAG, &(pNfapiMsg->carrier_config.dl_frequency), &unpack_uint32_tlv_value},
+ {NFAPI_NR_CONFIG_DL_GRID_SIZE_TAG, &(pNfapiMsg->carrier_config.dl_grid_size[1]), &unpack_uint16_tlv_value},
+ {NFAPI_NR_CONFIG_DL_K0_TAG, &(pNfapiMsg->carrier_config.dl_k0[1]), &unpack_uint16_tlv_value},
+ {NFAPI_NR_CONFIG_NUM_TX_ANT_TAG, &(pNfapiMsg->carrier_config.num_tx_ant), &unpack_uint16_tlv_value},
+ {NFAPI_NR_CONFIG_UPLINK_BANDWIDTH_TAG, &(pNfapiMsg->carrier_config.uplink_bandwidth), &unpack_uint16_tlv_value},
+ {NFAPI_NR_CONFIG_UPLINK_FREQUENCY_TAG, &(pNfapiMsg->carrier_config.uplink_frequency), &unpack_uint32_tlv_value},
+ {NFAPI_NR_CONFIG_UL_GRID_SIZE_TAG, &(pNfapiMsg->carrier_config.ul_grid_size[1]), &unpack_uint16_tlv_value},
+ {NFAPI_NR_CONFIG_UL_K0_TAG, &(pNfapiMsg->carrier_config.ul_k0[1]), &unpack_uint16_tlv_value},
+ {NFAPI_NR_CONFIG_NUM_RX_ANT_TAG, &(pNfapiMsg->carrier_config.num_rx_ant), &unpack_uint16_tlv_value},
+ {NFAPI_NR_CONFIG_FREQUENCY_SHIFT_7P5KHZ_TAG, &(pNfapiMsg->carrier_config.frequency_shift_7p5khz), &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_PHY_CELL_ID_TAG, &(pNfapiMsg->cell_config.phy_cell_id), &unpack_uint16_tlv_value},
+ {NFAPI_NR_CONFIG_FRAME_DUPLEX_TYPE_TAG, &(pNfapiMsg->cell_config.frame_duplex_type), &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_SS_PBCH_POWER_TAG, &(pNfapiMsg->ssb_config.ss_pbch_power), &unpack_uint32_tlv_value},
+ {NFAPI_NR_CONFIG_BCH_PAYLOAD_TAG, &(pNfapiMsg->ssb_config.bch_payload), &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_SCS_COMMON_TAG, &(pNfapiMsg->ssb_config.scs_common), &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_PRACH_SEQUENCE_LENGTH_TAG, &(pNfapiMsg->prach_config.prach_sequence_length), &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_PRACH_SUB_C_SPACING_TAG, &(pNfapiMsg->prach_config.prach_sub_c_spacing), &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_RESTRICTED_SET_CONFIG_TAG, &(pNfapiMsg->prach_config.restricted_set_config), &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_NUM_PRACH_FD_OCCASIONS_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions), &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_PRACH_CONFIG_INDEX_TAG, &(pNfapiMsg->prach_config.prach_ConfigurationIndex), &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_PRACH_ROOT_SEQUENCE_INDEX_TAG,
+ &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].prach_root_sequence_index),
+ &unpack_uint16_tlv_value},
+ {NFAPI_NR_CONFIG_NUM_ROOT_SEQUENCES_TAG,
+ &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].num_root_sequences),
+ &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_K1_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].k1), &unpack_uint16_tlv_value},
+ {NFAPI_NR_CONFIG_PRACH_ZERO_CORR_CONF_TAG,
+ &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].prach_zero_corr_conf),
+ &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_NUM_UNUSED_ROOT_SEQUENCES_TAG,
+ &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].num_unused_root_sequences),
+ &unpack_uint16_tlv_value},
+ {NFAPI_NR_CONFIG_UNUSED_ROOT_SEQUENCES_TAG,
+ &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].unused_root_sequences_list[0]),
+ &unpack_uint16_tlv_value},
+ {NFAPI_NR_CONFIG_SSB_PER_RACH_TAG, &(pNfapiMsg->prach_config.ssb_per_rach), &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_PRACH_MULTIPLE_CARRIERS_IN_A_BAND_TAG,
+ &(pNfapiMsg->prach_config.prach_multiple_carriers_in_a_band),
+ &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_SSB_OFFSET_POINT_A_TAG, &(pNfapiMsg->ssb_table.ssb_offset_point_a), &unpack_uint16_tlv_value},
+ {NFAPI_NR_CONFIG_BETA_PSS_TAG, &(pNfapiMsg->ssb_table.beta_pss), &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_SSB_PERIOD_TAG, &(pNfapiMsg->ssb_table.ssb_period), &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_SSB_SUBCARRIER_OFFSET_TAG, &(pNfapiMsg->ssb_table.ssb_subcarrier_offset), &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_MIB_TAG, &(pNfapiMsg->ssb_table.MIB), &unpack_uint32_tlv_value},
+ {NFAPI_NR_CONFIG_SSB_MASK_TAG, &(pNfapiMsg->ssb_table.ssb_mask_list[0].ssb_mask), &unpack_uint32_tlv_value},
+ {NFAPI_NR_CONFIG_BEAM_ID_TAG, &(pNfapiMsg->ssb_table.ssb_beam_id_list[0].beam_id), &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_SS_PBCH_MULTIPLE_CARRIERS_IN_A_BAND_TAG,
+ &(pNfapiMsg->ssb_table.ss_pbch_multiple_carriers_in_a_band),
+ &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_MULTIPLE_CELLS_SS_PBCH_IN_A_CARRIER_TAG,
+ &(pNfapiMsg->ssb_table.multiple_cells_ss_pbch_in_a_carrier),
+ &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_TDD_PERIOD_TAG, &(pNfapiMsg->tdd_table.tdd_period), &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_SLOT_CONFIG_TAG,
+ &(pNfapiMsg->tdd_table.max_tdd_periodicity_list[0].max_num_of_symbol_per_slot_list[0].slot_config),
+ &unpack_uint8_tlv_value},
+ {NFAPI_NR_CONFIG_RSSI_MEASUREMENT_TAG, &(pNfapiMsg->measurement_config.rssi_measurement), &unpack_uint8_tlv_value},
+ {NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV4_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv4), &unpack_ipv4_address_value},
+ {NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV6_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv6), &unpack_ipv6_address_value},
+ {NFAPI_NR_NFAPI_P7_VNF_PORT_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_port), &unpack_uint16_tlv_value},
+ {NFAPI_NR_NFAPI_TIMING_WINDOW_TAG, &(pNfapiMsg->nfapi_config.timing_window), &unpack_uint8_tlv_value},
+ {NFAPI_NR_NFAPI_TIMING_INFO_MODE_TAG, &(pNfapiMsg->nfapi_config.timing_info_mode), &unpack_uint8_tlv_value},
+ {NFAPI_NR_NFAPI_TIMING_INFO_PERIOD_TAG, &(pNfapiMsg->nfapi_config.timing_info_period), &unpack_uint8_tlv_value},
+ {NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV6_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv6), &unpack_ipv6_address_value},
+ {NFAPI_NR_NFAPI_P7_PNF_PORT_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_port), &unpack_uint16_tlv_value}};
+ pull8(ppReadPackedMsg, &pNfapiMsg->num_tlv, end);
- for(int i = 0; i < 40; i++){ //unpacking tdd slot config
- for(int symbol = 0; symbol<14;symbol++){
- pull8(ppReadPackedMsg,&pNfapiMsg->tdd_table.max_tdd_periodicity_list[i].max_num_of_symbol_per_slot_list[symbol].slot_config.value, end);
- }
- }
- pNfapiMsg->prach_config.num_prach_fd_occasions_list=(nfapi_nr_num_prach_fd_occasions_t *) malloc(sizeof(nfapi_nr_num_prach_fd_occasions_t));
+ pNfapiMsg->vendor_extension = malloc(sizeof(&(pNfapiMsg->vendor_extension)));
+ nfapi_tl_t generic_tl;
+ uint8_t numBadTags = 0;
+ unsigned long idx = 0;
+ while ((uint8_t *)(*ppReadPackedMsg) < end) {
+ // unpack the tl and process the values accordingly
+ if (unpack_tl(ppReadPackedMsg, &generic_tl, end) == 0)
+ return 0;
+ uint8_t tagMatch = 0;
+ uint8_t *pStartOfValue = 0;
+ for (idx = 0; idx < sizeof(unpack_fns) / sizeof(unpack_tlv_t); ++idx) {
+ if (unpack_fns[idx].tag == generic_tl.tag) { // match the extracted tag value with all the tags in unpack_fn list
+ pStartOfValue = *ppReadPackedMsg;
+ tagMatch = 1;
+ nfapi_tl_t *tl = (nfapi_tl_t *)(unpack_fns[idx].tlv);
+ tl->tag = generic_tl.tag;
+ tl->length = generic_tl.length;
+ int result = 0;
+ switch (generic_tl.tag) {
+ case NFAPI_NR_CONFIG_PRACH_ROOT_SEQUENCE_INDEX_TAG:
+ pNfapiMsg->prach_config.num_prach_fd_occasions_list[prach_root_seq_idx].prach_root_sequence_index.tl.tag =
+ generic_tl.tag;
+ pNfapiMsg->prach_config.num_prach_fd_occasions_list[prach_root_seq_idx].prach_root_sequence_index.tl.length =
+ generic_tl.length;
+ result = (*unpack_fns[idx].unpack_func)(
+ &pNfapiMsg->prach_config.num_prach_fd_occasions_list[prach_root_seq_idx].prach_root_sequence_index,
+ ppReadPackedMsg,
+ end);
+ prach_root_seq_idx++;
+ break;
+ case NFAPI_NR_CONFIG_K1_TAG:
+ pNfapiMsg->prach_config.num_prach_fd_occasions_list[prach_root_seq_idx].k1.tl.tag = generic_tl.tag;
+ pNfapiMsg->prach_config.num_prach_fd_occasions_list[prach_root_seq_idx].k1.tl.length = generic_tl.length;
+ result = (*unpack_fns[idx].unpack_func)(&pNfapiMsg->prach_config.num_prach_fd_occasions_list[prach_root_seq_idx].k1,
+ ppReadPackedMsg,
+ end);
+ break;
+ case NFAPI_NR_CONFIG_PRACH_ZERO_CORR_CONF_TAG:
+ pNfapiMsg->prach_config.num_prach_fd_occasions_list[prach_root_seq_idx].prach_zero_corr_conf.tl.tag = generic_tl.tag;
+ pNfapiMsg->prach_config.num_prach_fd_occasions_list[prach_root_seq_idx].prach_zero_corr_conf.tl.length =
+ generic_tl.length;
+ result = (*unpack_fns[idx].unpack_func)(
+ &pNfapiMsg->prach_config.num_prach_fd_occasions_list[prach_root_seq_idx].prach_zero_corr_conf,
+ ppReadPackedMsg,
+ end);
+ break;
+ case NFAPI_NR_CONFIG_NUM_ROOT_SEQUENCES_TAG:
+ pNfapiMsg->prach_config.num_prach_fd_occasions_list[prach_root_seq_idx].num_root_sequences.tl.tag = generic_tl.tag;
+ pNfapiMsg->prach_config.num_prach_fd_occasions_list[prach_root_seq_idx].num_root_sequences.tl.length =
+ generic_tl.length;
+ result = (*unpack_fns[idx].unpack_func)(
+ &pNfapiMsg->prach_config.num_prach_fd_occasions_list[prach_root_seq_idx].num_root_sequences,
+ ppReadPackedMsg,
+ end);
+ break;
+ case NFAPI_NR_CONFIG_NUM_UNUSED_ROOT_SEQUENCES_TAG:
+ pNfapiMsg->prach_config.num_prach_fd_occasions_list[prach_root_seq_idx].num_unused_root_sequences.tl.tag =
+ generic_tl.tag;
+ pNfapiMsg->prach_config.num_prach_fd_occasions_list[prach_root_seq_idx].num_unused_root_sequences.tl.length =
+ generic_tl.length;
+ result = (*unpack_fns[idx].unpack_func)(
+ &pNfapiMsg->prach_config.num_prach_fd_occasions_list[prach_root_seq_idx].num_unused_root_sequences,
+ ppReadPackedMsg,
+ end);
+ break;
+ case NFAPI_NR_CONFIG_UNUSED_ROOT_SEQUENCES_TAG:
+ pNfapiMsg->prach_config.num_prach_fd_occasions_list[prach_root_seq_idx]
+ .unused_root_sequences_list[unused_root_seq_idx]
+ .tl.tag = generic_tl.tag;
+ pNfapiMsg->prach_config.num_prach_fd_occasions_list[prach_root_seq_idx]
+ .unused_root_sequences_list[unused_root_seq_idx]
+ .tl.length = generic_tl.length;
+ result = (*unpack_fns[idx].unpack_func)(&pNfapiMsg->prach_config.num_prach_fd_occasions_list[prach_root_seq_idx]
+ .unused_root_sequences_list[unused_root_seq_idx],
+ ppReadPackedMsg,
+ end);
+ unused_root_seq_idx++;
+ break;
+ case NFAPI_NR_CONFIG_SSB_MASK_TAG:
+ pNfapiMsg->ssb_table.ssb_mask_list[ssb_mask_idx].ssb_mask.tl.tag = generic_tl.tag;
+ pNfapiMsg->ssb_table.ssb_mask_list[ssb_mask_idx].ssb_mask.tl.length = generic_tl.length;
+ result = unpack_uint32_tlv_value(&pNfapiMsg->ssb_table.ssb_mask_list[ssb_mask_idx].ssb_mask, ppReadPackedMsg, end);
+ ssb_mask_idx++;
+ break;
+ case NFAPI_NR_CONFIG_DL_GRID_SIZE_TAG:
+ for (int i = 0; i < 5; i++) {
+ result = unpack_uint16_tlv_value(&pNfapiMsg->carrier_config.dl_grid_size[i], ppReadPackedMsg, end);
+ }
+ break;
+ case NFAPI_NR_CONFIG_DL_K0_TAG:
+ for (int i = 0; i < 5; i++) {
+ result = unpack_uint16_tlv_value(&pNfapiMsg->carrier_config.dl_k0[i], ppReadPackedMsg, end);
+ }
+ break;
+ case NFAPI_NR_CONFIG_UL_GRID_SIZE_TAG:
+ for (int i = 0; i < 5; i++) {
+ result = unpack_uint16_tlv_value(&pNfapiMsg->carrier_config.ul_grid_size[i], ppReadPackedMsg, end);
+ }
+ break;
+ case NFAPI_NR_CONFIG_UL_K0_TAG:
+ for (int i = 0; i < 5; i++) {
+ result = unpack_uint16_tlv_value(&pNfapiMsg->carrier_config.ul_k0[i], ppReadPackedMsg, end);
+ }
+ break;
+ case NFAPI_NR_CONFIG_BEAM_ID_TAG:
+ pNfapiMsg->ssb_table.ssb_beam_id_list[config_beam_idx].beam_id.tl.tag = generic_tl.tag;
+ pNfapiMsg->ssb_table.ssb_beam_id_list[config_beam_idx].beam_id.tl.length = generic_tl.length;
+ result = (*unpack_fns[idx].unpack_func)(&pNfapiMsg->ssb_table.ssb_beam_id_list[config_beam_idx].beam_id,
+ ppReadPackedMsg,
+ end);
+ config_beam_idx++;
+ break;
+ case NFAPI_NR_CONFIG_SLOT_CONFIG_TAG:
+ pNfapiMsg->tdd_table.max_tdd_periodicity_list[tdd_periodicity_idx]
+ .max_num_of_symbol_per_slot_list[symbol_per_slot_idx]
+ .slot_config.tl.tag = generic_tl.tag;
+ pNfapiMsg->tdd_table.max_tdd_periodicity_list[tdd_periodicity_idx]
+ .max_num_of_symbol_per_slot_list[symbol_per_slot_idx]
+ .slot_config.tl.length = generic_tl.length;
+ result = (*unpack_fns[idx].unpack_func)(&pNfapiMsg->tdd_table.max_tdd_periodicity_list[tdd_periodicity_idx]
+ .max_num_of_symbol_per_slot_list[symbol_per_slot_idx]
+ .slot_config,
+ ppReadPackedMsg,
+ end);
+ symbol_per_slot_idx = (symbol_per_slot_idx + 1) % 14;
+ if (symbol_per_slot_idx == 0) {
+ tdd_periodicity_idx++;
+ }
+ break;
+ default:
+ result = (*unpack_fns[idx].unpack_func)(tl, ppReadPackedMsg, end);
+ break;
+ }
- unpack_tlv_t unpack_fns[] =
- {
- { NFAPI_NR_CONFIG_DL_BANDWIDTH_TAG, &(pNfapiMsg->carrier_config.dl_bandwidth), &unpack_uint16_tlv_value},
- { NFAPI_NR_CONFIG_DL_FREQUENCY_TAG, &(pNfapiMsg->carrier_config.dl_frequency), &unpack_uint32_tlv_value},
- { NFAPI_NR_CONFIG_DL_GRID_SIZE_TAG, &(pNfapiMsg->carrier_config.dl_grid_size[1]), &unpack_uint16_tlv_value},
- { NFAPI_NR_CONFIG_DL_K0_TAG, &(pNfapiMsg->carrier_config.dl_k0[1]), &unpack_uint16_tlv_value},
- { NFAPI_NR_CONFIG_NUM_RX_ANT_TAG, &(pNfapiMsg->carrier_config.num_rx_ant), &unpack_uint16_tlv_value},
- { NFAPI_NR_CONFIG_NUM_TX_ANT_TAG, &(pNfapiMsg->carrier_config.num_tx_ant), &unpack_uint16_tlv_value},
- { NFAPI_NR_CONFIG_UL_GRID_SIZE_TAG, &(pNfapiMsg->carrier_config.ul_grid_size[1]), &unpack_uint16_tlv_value},
- { NFAPI_NR_CONFIG_UL_K0_TAG, &(pNfapiMsg->carrier_config.ul_k0[1]), &unpack_uint16_tlv_value},
- { NFAPI_NR_CONFIG_UPLINK_BANDWIDTH_TAG, &(pNfapiMsg->carrier_config.uplink_bandwidth), &unpack_uint16_tlv_value},
- { NFAPI_NR_CONFIG_UPLINK_FREQUENCY_TAG, &(pNfapiMsg->carrier_config.uplink_frequency), &unpack_uint32_tlv_value},
- { NFAPI_NR_CONFIG_FREQUENCY_SHIFT_7P5KHZ_TAG, &(pNfapiMsg->carrier_config.frequency_shift_7p5khz), &unpack_uint8_tlv_value},
+ if (result == 0)
+ return 0;
- { NFAPI_NR_CONFIG_FRAME_DUPLEX_TYPE_TAG, &(pNfapiMsg->cell_config.frame_duplex_type), &unpack_uint8_tlv_value},
- { NFAPI_NR_CONFIG_PHY_CELL_ID_TAG, &(pNfapiMsg->cell_config.phy_cell_id), &unpack_uint16_tlv_value},
+ // check if the length was right;
+ if (tl->length != (((*ppReadPackedMsg)) - pStartOfValue))
+ NFAPI_TRACE(NFAPI_TRACE_ERROR,
+ "Warning tlv tag 0x%x length %d not equal to unpack %lu\n",
+ tl->tag,
+ tl->length,
+ (*ppReadPackedMsg - pStartOfValue));
- { NFAPI_NR_CONFIG_PRACH_MULTIPLE_CARRIERS_IN_A_BAND_TAG, &(pNfapiMsg->prach_config.prach_multiple_carriers_in_a_band), &unpack_uint8_tlv_value},
- { NFAPI_NR_CONFIG_PRACH_CONFIG_INDEX_TAG, &(pNfapiMsg->prach_config.prach_ConfigurationIndex), &unpack_uint8_tlv_value},
- { NFAPI_NR_CONFIG_NUM_PRACH_FD_OCCASIONS_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions), &unpack_uint8_tlv_value},
- { NFAPI_NR_CONFIG_PRACH_SEQUENCE_LENGTH_TAG, &(pNfapiMsg->prach_config.prach_sequence_length), &unpack_uint8_tlv_value},
- { NFAPI_NR_CONFIG_RESTRICTED_SET_CONFIG_TAG, &(pNfapiMsg->prach_config.restricted_set_config), &unpack_uint8_tlv_value},
- { NFAPI_NR_CONFIG_SSB_PER_RACH_TAG, &(pNfapiMsg->prach_config.ssb_per_rach), &unpack_uint8_tlv_value},
- { NFAPI_NR_CONFIG_PRACH_SUB_C_SPACING_TAG, &(pNfapiMsg->prach_config.prach_sub_c_spacing), &unpack_uint8_tlv_value},
- { NFAPI_NR_CONFIG_PRACH_ROOT_SEQUENCE_INDEX_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].prach_root_sequence_index), &unpack_uint16_tlv_value},
- { NFAPI_NR_CONFIG_K1_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].k1), &unpack_uint16_tlv_value},
- { NFAPI_NR_CONFIG_PRACH_ZERO_CORR_CONF_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].prach_zero_corr_conf), &unpack_uint8_tlv_value},
- { NFAPI_NR_CONFIG_NUM_ROOT_SEQUENCES_TAG, &(pNfapiMsg->prach_config.num_prach_fd_occasions_list[0].num_root_sequences), &unpack_uint8_tlv_value},
+ // Remove padding that ensures multiple of 4 bytes (SCF 225 Section 2.3.2.1)
+ int padding = get_tlv_padding(tl->length);
+ NFAPI_TRACE(NFAPI_TRACE_DEBUG, "TLV 0x%x length %d with padding of %d bytes\n", tl->tag, tl->length, padding);
+ if (padding != 0)
+ (*ppReadPackedMsg) += padding;
+ }
+ }
- { NFAPI_NR_CONFIG_SCS_COMMON_TAG, &(pNfapiMsg->ssb_config.scs_common), &unpack_uint8_tlv_value},
- { NFAPI_NR_CONFIG_BCH_PAYLOAD_TAG, &(pNfapiMsg->ssb_config.bch_payload), &unpack_uint8_tlv_value},
- { NFAPI_NR_CONFIG_SS_PBCH_POWER_TAG, &(pNfapiMsg->ssb_config.ss_pbch_power), &unpack_uint32_tlv_value},
+ if (tagMatch == 0) {
+ if (generic_tl.tag >= NFAPI_VENDOR_EXTENSION_MIN_TAG_VALUE && generic_tl.tag <= NFAPI_VENDOR_EXTENSION_MAX_TAG_VALUE) {
+ int result = unpack_vendor_extension_tlv(&generic_tl, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension));
+ if (result == 0) {
+ // got to the end.
+ return 0;
+ } else if (result < 0) {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR, "Unknown VE TAG value: 0x%04x\n", generic_tl.tag);
- { NFAPI_NR_CONFIG_BETA_PSS_TAG, &(pNfapiMsg->ssb_table.beta_pss), &unpack_uint8_tlv_value},
- { NFAPI_NR_CONFIG_MIB_TAG, &(pNfapiMsg->ssb_table.MIB), &unpack_uint32_tlv_value},
- { NFAPI_NR_CONFIG_SSB_MASK_TAG, &(pNfapiMsg->ssb_table.ssb_mask_list[0].ssb_mask), &unpack_uint32_tlv_value},
- // TODO: Not sure what's going on, ssb_mask_list[1] unpacking below seems to match pack, but is causing problems
- // { NFAPI_NR_CONFIG_SSB_MASK_TAG, &(pNfapiMsg->ssb_table.ssb_mask_list[1].ssb_mask), &unpack_uint32_tlv_value},
- { NFAPI_NR_CONFIG_BEAM_ID_TAG, &(pNfapiMsg->ssb_table.ssb_beam_id_list[0].beam_id), &unpack_uint8_tlv_value},
- { NFAPI_NR_CONFIG_SSB_OFFSET_POINT_A_TAG, &(pNfapiMsg->ssb_table.ssb_offset_point_a), &unpack_uint16_tlv_value},
- { NFAPI_NR_CONFIG_SSB_PERIOD_TAG, &(pNfapiMsg->ssb_table.ssb_period), &unpack_uint8_tlv_value},
- { NFAPI_NR_CONFIG_SSB_SUBCARRIER_OFFSET_TAG, &(pNfapiMsg->ssb_table.ssb_subcarrier_offset), &unpack_uint8_tlv_value},
- { NFAPI_NR_CONFIG_SS_PBCH_MULTIPLE_CARRIERS_IN_A_BAND_TAG, &(pNfapiMsg->ssb_table.ss_pbch_multiple_carriers_in_a_band), &unpack_uint8_tlv_value},
- { NFAPI_NR_CONFIG_MULTIPLE_CELLS_SS_PBCH_IN_A_CARRIER_TAG, &(pNfapiMsg->ssb_table.multiple_cells_ss_pbch_in_a_carrier), &unpack_uint8_tlv_value},
+ if (++numBadTags > MAX_BAD_TAG) {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR, "Supplied message has had too many bad tags\n");
+ return 0;
+ }
- { NFAPI_NR_CONFIG_TDD_PERIOD_TAG, &(pNfapiMsg->tdd_table.tdd_period), &unpack_uint8_tlv_value},
+ if ((end - *ppReadPackedMsg) >= generic_tl.length) {
+ // Advance past the unknown TLV
+ (*ppReadPackedMsg) += generic_tl.length;
+ int padding = get_tlv_padding(generic_tl.length);
+ (*ppReadPackedMsg) += padding;
+ } else {
+ // go to the end
+ return 0;
+ }
+ }
+ } else {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR, "Unknown TAG value: 0x%04x\n", generic_tl.tag);
+ if (++numBadTags > MAX_BAD_TAG) {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR, "Supplied message has had too many bad tags\n");
+ return 0;
+ }
- { NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV4_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv4), &unpack_ipv4_address_value},
- { NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV6_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv6), &unpack_ipv6_address_value},
- { NFAPI_NR_NFAPI_P7_VNF_PORT_TAG, &(pNfapiMsg->nfapi_config.p7_vnf_port), &unpack_uint16_tlv_value},
- { NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV4_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv4), &unpack_ipv4_address_value},
- { NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV6_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_address_ipv6), &unpack_ipv6_address_value},
- { NFAPI_NR_NFAPI_P7_PNF_PORT_TAG, &(pNfapiMsg->nfapi_config.p7_pnf_port), &unpack_uint16_tlv_value},
- { NFAPI_NR_NFAPI_TIMING_WINDOW_TAG, &(pNfapiMsg->nfapi_config.timing_window), &unpack_uint8_tlv_value},
- { NFAPI_NR_NFAPI_TIMING_INFO_MODE_TAG, &(pNfapiMsg->nfapi_config.timing_info_mode), &unpack_uint8_tlv_value},
- { NFAPI_NR_NFAPI_TIMING_INFO_PERIOD_TAG, &(pNfapiMsg->nfapi_config.timing_info_period), &unpack_uint8_tlv_value},
- };
+ if ((end - *ppReadPackedMsg) >= generic_tl.length) {
+ // Advance past the unknown TLV
+ (*ppReadPackedMsg) += generic_tl.length;
+ int padding = get_tlv_padding(generic_tl.length);
+ (*ppReadPackedMsg) += padding;
+ } else {
+ // go to the end
+ return 0;
+ }
+ }
+ }
+ }
+ struct sockaddr_in vnf_p7_sockaddr;
+ memcpy(&vnf_p7_sockaddr.sin_addr.s_addr, &(pNfapiMsg->nfapi_config.p7_vnf_address_ipv4), 4);
- return ( pull8(ppReadPackedMsg, &pNfapiMsg->num_tlv, end) &&
- unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension));
-
+ printf("[PNF] vnf p7 %s:%d\n", inet_ntoa(vnf_p7_sockaddr.sin_addr), pNfapiMsg->nfapi_config.p7_vnf_port.value);
+ return 1;
}
static uint8_t unpack_config_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
@@ -1804,15 +3364,22 @@ static uint8_t unpack_config_response(uint8_t **ppReadPackedMsg, uint8_t *end, v
unpack_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension)));
}
-static uint8_t unpack_nr_config_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
+static uint8_t unpack_nr_config_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config)
+{
nfapi_nr_config_response_scf_t *pNfapiMsg = (nfapi_nr_config_response_scf_t *)msg;
- return ( pull8(ppReadPackedMsg, &pNfapiMsg->error_code, end) &&
- unpack_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension)));
+ uint8_t invalid_unsupported_TLVs, invalidTLVsIdle, InvalidTLVsRunning, missingTLVS;
+ uint8_t retVal = (pull8(ppReadPackedMsg, &pNfapiMsg->error_code, end) && pull8(ppReadPackedMsg, &invalid_unsupported_TLVs, end)
+ && pull8(ppReadPackedMsg, &invalidTLVsIdle, end) && pull8(ppReadPackedMsg, &InvalidTLVsRunning, end)
+ && pull8(ppReadPackedMsg, &missingTLVS, end)
+ && unpack_nr_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension)));
+ // TODO: Process and use the invalid TLVs fields
+ return retVal;
}
-static uint8_t unpack_nr_start_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
- nfapi_nr_start_request_scf_t *pNfapiMsg = ( nfapi_nr_start_request_scf_t *)msg;
- return unpack_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension));
+static uint8_t unpack_nr_start_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config)
+{
+ nfapi_nr_start_request_scf_t *pNfapiMsg = (nfapi_nr_start_request_scf_t *)msg;
+ return unpack_nr_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension));
}
static uint8_t unpack_start_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
@@ -1826,10 +3393,11 @@ static uint8_t unpack_start_response(uint8_t **ppReadPackedMsg, uint8_t *end, vo
unpack_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension)));
}
-static uint8_t unpack_nr_start_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
+static uint8_t unpack_nr_start_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config)
+{
nfapi_nr_start_response_scf_t *pNfapiMsg = (nfapi_nr_start_response_scf_t *)msg;
- return ( pull32(ppReadPackedMsg, &pNfapiMsg->error_code, end) &&
- unpack_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension)));
+ return (pull32(ppReadPackedMsg, &pNfapiMsg->error_code, end)
+ && unpack_nr_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &(pNfapiMsg->vendor_extension)));
}
static uint8_t unpack_stop_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config) {
@@ -2127,7 +3695,12 @@ int nfapi_p5_message_header_unpack(void *pMessageBuf, uint32_t messageBufLen, vo
pull16(&pReadPackedMessage, &pMessageHeader->spare, end) );
}
-int nfapi_nr_p5_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nfapi_p4_p5_codec_config_t *config) {
+int nfapi_nr_p5_message_unpack(void *pMessageBuf,
+ uint32_t messageBufLen,
+ void *pUnpackedBuf,
+ uint32_t unpackedBufLen,
+ nfapi_p4_p5_codec_config_t *config)
+{
nfapi_p4_p5_message_header_t *pMessageHeader = pUnpackedBuf;
uint8_t *pReadPackedMessage = pMessageBuf;
@@ -2144,10 +3717,10 @@ int nfapi_nr_p5_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *
}
uint8_t *ptr = pReadPackedMessage;
- printf("\n Read message unpack: ");
+ printf("\n Read NR message unpack: ");
- while(ptr < end) {
- printf(" %d ", *ptr);
+ while (ptr < end) {
+ printf(" %02x ", *ptr);
ptr++;
}
@@ -2156,17 +3729,16 @@ int nfapi_nr_p5_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *
(void)memset(pUnpackedBuf, 0, unpackedBufLen);
// process the header
- if( !(pull16(&pReadPackedMessage, &pMessageHeader->phy_id, end ) &&
- pull16(&pReadPackedMessage, &pMessageHeader->message_id, end) &&
- pull16(&pReadPackedMessage, &pMessageHeader->message_length, end) &&
- pull16(&pReadPackedMessage, &pMessageHeader->spare, end))) {
+ if (!(pull16(&pReadPackedMessage, &pMessageHeader->phy_id, end) && pull16(&pReadPackedMessage, &pMessageHeader->message_id, end)
+ && pull16(&pReadPackedMessage, &pMessageHeader->message_length, end)
+ && pull16(&pReadPackedMessage, &pMessageHeader->spare, end))) {
// failed to read the header
return -1;
}
int result = -1;
- if(check_nr_unpack_length(pMessageHeader->message_id, unpackedBufLen) == 0) {
+ if (check_nr_unpack_length(pMessageHeader->message_id, unpackedBufLen) == 0) {
// the unpack buffer is not big enough for the struct
return -1;
}
@@ -2246,12 +3818,14 @@ int nfapi_nr_p5_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *
break;
default:
- if(pMessageHeader->message_id >= NFAPI_VENDOR_EXT_MSG_MIN &&
- pMessageHeader->message_id <= NFAPI_VENDOR_EXT_MSG_MAX) {
- if(config && config->unpack_p4_p5_vendor_extension) {
+ if (pMessageHeader->message_id >= NFAPI_VENDOR_EXT_MSG_MIN && pMessageHeader->message_id <= NFAPI_VENDOR_EXT_MSG_MAX) {
+ if (config && config->unpack_p4_p5_vendor_extension) {
result = (config->unpack_p4_p5_vendor_extension)(pMessageHeader, &pReadPackedMessage, end, config);
} else {
- NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s VE NFAPI message ID %d. No ve decoder provided\n", __FUNCTION__, pMessageHeader->message_id);
+ NFAPI_TRACE(NFAPI_TRACE_ERROR,
+ "%s VE NFAPI message ID %d. No ve decoder provided\n",
+ __FUNCTION__,
+ pMessageHeader->message_id);
}
} else {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s NFAPI Unknown P5 message ID %d\n", __FUNCTION__, pMessageHeader->message_id);
@@ -2263,7 +3837,12 @@ int nfapi_nr_p5_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *
return result;
}
-int nfapi_p5_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nfapi_p4_p5_codec_config_t *config) {
+int nfapi_p5_message_unpack(void *pMessageBuf,
+ uint32_t messageBufLen,
+ void *pUnpackedBuf,
+ uint32_t unpackedBufLen,
+ nfapi_p4_p5_codec_config_t *config)
+{
nfapi_p4_p5_message_header_t *pMessageHeader = pUnpackedBuf;
uint8_t *pReadPackedMessage = pMessageBuf;
@@ -2280,10 +3859,10 @@ int nfapi_p5_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUn
}
uint8_t *ptr = pReadPackedMessage;
- printf("\n Read message unpack: ");
+ printf("\n Read LTE message unpack: ");
- while(ptr < end) {
- printf(" %d ", *ptr);
+ while (ptr < end) {
+ printf(" %02x ", *ptr);
ptr++;
}
@@ -2292,17 +3871,16 @@ int nfapi_p5_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUn
(void)memset(pUnpackedBuf, 0, unpackedBufLen);
// process the header
- if( !(pull16(&pReadPackedMessage, &pMessageHeader->phy_id, end ) &&
- pull16(&pReadPackedMessage, &pMessageHeader->message_id, end) &&
- pull16(&pReadPackedMessage, &pMessageHeader->message_length, end) &&
- pull16(&pReadPackedMessage, &pMessageHeader->spare, end))) {
+ if (!(pull16(&pReadPackedMessage, &pMessageHeader->phy_id, end) && pull16(&pReadPackedMessage, &pMessageHeader->message_id, end)
+ && pull16(&pReadPackedMessage, &pMessageHeader->message_length, end)
+ && pull16(&pReadPackedMessage, &pMessageHeader->spare, end))) {
// failed to read the header
return -1;
}
int result = -1;
- if(check_unpack_length(pMessageHeader->message_id, unpackedBufLen) == 0) {
+ if (check_unpack_length(pMessageHeader->message_id, unpackedBufLen) == 0) {
// the unpack buffer is not big enough for the struct
return -1;
}
@@ -2382,12 +3960,14 @@ int nfapi_p5_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUn
break;
default:
- if(pMessageHeader->message_id >= NFAPI_VENDOR_EXT_MSG_MIN &&
- pMessageHeader->message_id <= NFAPI_VENDOR_EXT_MSG_MAX) {
- if(config && config->unpack_p4_p5_vendor_extension) {
+ if (pMessageHeader->message_id >= NFAPI_VENDOR_EXT_MSG_MIN && pMessageHeader->message_id <= NFAPI_VENDOR_EXT_MSG_MAX) {
+ if (config && config->unpack_p4_p5_vendor_extension) {
result = (config->unpack_p4_p5_vendor_extension)(pMessageHeader, &pReadPackedMessage, end, config);
} else {
- NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s VE NFAPI message ID %d. No ve decoder provided\n", __FUNCTION__, pMessageHeader->message_id);
+ NFAPI_TRACE(NFAPI_TRACE_ERROR,
+ "%s VE NFAPI message ID %d. No ve decoder provided\n",
+ __FUNCTION__,
+ pMessageHeader->message_id);
}
} else {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s NFAPI Unknown P5 message ID %d\n", __FUNCTION__, pMessageHeader->message_id);
@@ -2398,4 +3978,3 @@ int nfapi_p5_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUn
return result;
}
-
diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c
index 0536664377..f5a05d0d71 100644
--- a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c
+++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c
@@ -2025,6 +2025,18 @@ static uint8_t pack_ue_release_request(void *msg, uint8_t **ppWritePackedMsg, ui
return x && y && z;
}
+static uint8_t pack_nr_ue_release_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p7_codec_config_t *config)
+{
+ nfapi_ue_release_request_t *pNfapiMsg = (nfapi_ue_release_request_t *)msg;
+ return push16(pNfapiMsg->sfn_sf, ppWritePackedMsg, end)
+ && pack_nr_tlv(NFAPI_UE_RELEASE_BODY_TAG,
+ &pNfapiMsg->ue_release_request_body,
+ ppWritePackedMsg,
+ end,
+ &pack_release_request_body_value)
+ && pack_p7_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config);
+}
+
static uint8_t pack_ue_release_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p7_codec_config_t *config) {
nfapi_ue_release_response_t *pNfapiMsg = (nfapi_ue_release_response_t *)msg;
int x = push32(pNfapiMsg->error_code, ppWritePackedMsg, end);
@@ -3432,157 +3444,146 @@ return 1;
// Main pack function - public
-int nfapi_nr_p7_message_pack(void *pMessageBuf, void *pPackedBuf, uint32_t packedBufLen, nfapi_p7_codec_config_t* config)
+int nfapi_nr_p7_message_pack(void *pMessageBuf, void *pPackedBuf, uint32_t packedBufLen, nfapi_p7_codec_config_t *config)
{
- nfapi_p7_message_header_t *pMessageHeader = pMessageBuf;
- uint8_t *pWritePackedMessage = pPackedBuf;
- uint8_t *pPackedLengthField = &pWritePackedMessage[4];
+nfapi_p7_message_header_t *pMessageHeader = pMessageBuf;
+uint8_t *pWritePackedMessage = pPackedBuf;
+uint8_t *pPackedLengthField = &pWritePackedMessage[4];
- if (pMessageBuf == NULL || pPackedBuf == NULL)
- {
- NFAPI_TRACE(NFAPI_TRACE_ERROR, "P7 Pack supplied pointers are null\n");
- return -1;
- }
+if (pMessageBuf == NULL || pPackedBuf == NULL) {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR, "P7 Pack supplied pointers are null\n");
+ return -1;
+}
- uint8_t *end = (uint8_t *)pPackedBuf + packedBufLen;
+uint8_t *end = (uint8_t *)pPackedBuf + packedBufLen;
- // process the header
- if(!(push16(pMessageHeader->phy_id, &pWritePackedMessage, end) &&
- push16(pMessageHeader->message_id, &pWritePackedMessage, end) &&
- push16(0/*pMessageHeader->message_length*/, &pWritePackedMessage, end) &&
- push16(pMessageHeader->m_segment_sequence, &pWritePackedMessage, end) &&
- push32(0/*pMessageHeader->checksum*/, &pWritePackedMessage, end) &&
- push32(pMessageHeader->transmit_timestamp, &pWritePackedMessage, end)))
- {
- NFAPI_TRACE(NFAPI_TRACE_ERROR, "P7 Pack header failed\n");
- return -1;
- }
+// process the header
+if (!(push16(pMessageHeader->phy_id, &pWritePackedMessage, end) && push16(pMessageHeader->message_id, &pWritePackedMessage, end)
+ && push16(0 /*pMessageHeader->message_length*/, &pWritePackedMessage, end)
+ && push16(pMessageHeader->m_segment_sequence, &pWritePackedMessage, end)
+ && push32(0 /*pMessageHeader->checksum*/, &pWritePackedMessage, end)
+ && push32(pMessageHeader->transmit_timestamp, &pWritePackedMessage, end))) {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR, "P7 Pack header failed\n");
+ return -1;
+}
- if (pMessageHeader->message_id != NFAPI_TIMING_INFO)
- {
- //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() message_id:0x%04x phy_id:%u m_segment_sequence:%u timestamp:%u\n", __FUNCTION__, pMessageHeader->message_id, pMessageHeader->phy_id, pMessageHeader->m_segment_sequence, pMessageHeader->transmit_timestamp);
+if (pMessageHeader->message_id != NFAPI_TIMING_INFO) {
+ // NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() message_id:0x%04x phy_id:%u m_segment_sequence:%u timestamp:%u\n", __FUNCTION__,
+ // pMessageHeader->message_id, pMessageHeader->phy_id, pMessageHeader->m_segment_sequence, pMessageHeader->transmit_timestamp);
+}
+// look for the specific message
+uint8_t result = 0;
+switch (pMessageHeader->message_id) {
+ case NFAPI_NR_PHY_MSG_TYPE_DL_TTI_REQUEST:
+ result = pack_dl_tti_request(pMessageHeader, &pWritePackedMessage, end, config);
+ break;
+
+ case NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST:
+ result = pack_ul_tti_request(pMessageHeader, &pWritePackedMessage, end, config);
+ break;
+
+ case NFAPI_NR_PHY_MSG_TYPE_TX_DATA_REQUEST:
+ result = pack_tx_data_request(pMessageHeader, &pWritePackedMessage, end, config);
+ break;
+
+ case NFAPI_NR_PHY_MSG_TYPE_UL_DCI_REQUEST:
+ result = pack_ul_dci_request(pMessageHeader, &pWritePackedMessage, end, config);
+ break;
+ case NFAPI_UE_RELEASE_REQUEST:
+ result = pack_nr_ue_release_request(pMessageHeader, &pWritePackedMessage, end, config);
+ break;
+
+ case NFAPI_UE_RELEASE_RESPONSE:
+ result = pack_ue_release_response(pMessageHeader, &pWritePackedMessage, end, config);
+ break;
+
+ case NFAPI_NR_PHY_MSG_TYPE_SLOT_INDICATION:
+ result = pack_nr_slot_indication(pMessageHeader, &pWritePackedMessage, end, config);
+ break;
+
+ case NFAPI_NR_PHY_MSG_TYPE_RX_DATA_INDICATION:
+ result = pack_nr_rx_data_indication(pMessageHeader, &pWritePackedMessage, end, config);
+ break;
+
+ case NFAPI_NR_PHY_MSG_TYPE_CRC_INDICATION:
+ result = pack_nr_crc_indication(pMessageHeader, &pWritePackedMessage, end, config);
+ break;
+
+ case NFAPI_NR_PHY_MSG_TYPE_UCI_INDICATION:
+ result = pack_nr_uci_indication(pMessageHeader, &pWritePackedMessage, end, config);
+ break;
+
+ case NFAPI_NR_PHY_MSG_TYPE_SRS_INDICATION:
+ result = pack_nr_srs_indication(pMessageHeader, &pWritePackedMessage, end, config);
+ break;
+
+ case NFAPI_NR_PHY_MSG_TYPE_RACH_INDICATION:
+ result = pack_nr_rach_indication(pMessageHeader, &pWritePackedMessage, end, config);
+ break;
+
+ case NFAPI_NR_PHY_MSG_TYPE_DL_NODE_SYNC:
+ result = pack_nr_dl_node_sync(pMessageHeader, &pWritePackedMessage, end, config);
+ break;
+
+ case NFAPI_NR_PHY_MSG_TYPE_UL_NODE_SYNC:
+ result = pack_nr_ul_node_sync(pMessageHeader, &pWritePackedMessage, end, config);
+ break;
+
+ case NFAPI_TIMING_INFO:
+ result = pack_nr_timing_info(pMessageHeader, &pWritePackedMessage, end, config);
+ break;
+
+ default: {
+ if (pMessageHeader->message_id >= NFAPI_VENDOR_EXT_MSG_MIN && pMessageHeader->message_id <= NFAPI_VENDOR_EXT_MSG_MAX) {
+ if (config && config->pack_p7_vendor_extension) {
+ result = (config->pack_p7_vendor_extension)(pMessageHeader, &pWritePackedMessage, end, config);
+ } else {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR,
+ "%s VE NFAPI message ID %d. No ve ecoder provided\n",
+ __FUNCTION__,
+ pMessageHeader->message_id);
}
- // look for the specific message
- uint8_t result = 0;
- switch (pMessageHeader->message_id)
- {
- case NFAPI_NR_PHY_MSG_TYPE_DL_TTI_REQUEST:
- result = pack_dl_tti_request(pMessageHeader, &pWritePackedMessage, end, config);
- break;
+ } else {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s NFAPI Unknown message ID %d\n", __FUNCTION__, pMessageHeader->message_id);
+ }
+ } break;
+}
- case NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST:
- result = pack_ul_tti_request(pMessageHeader, &pWritePackedMessage, end, config);
- break;
+if (result == 0) {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR, "P7 Pack failed to pack message\n");
+ return -1;
+}
- case NFAPI_NR_PHY_MSG_TYPE_TX_DATA_REQUEST:
- result = pack_tx_data_request(pMessageHeader, &pWritePackedMessage, end, config);
- break;
+// check for a valid message length
+uintptr_t msgHead = (uintptr_t)pPackedBuf;
+uintptr_t msgEnd = (uintptr_t)pWritePackedMessage;
+uint32_t packedMsgLen = msgEnd - msgHead;
+uint16_t packedMsgLen16;
+if (packedMsgLen > 0xFFFF || packedMsgLen > packedBufLen) {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR, "Packed message length error %d, buffer supplied %d\n", packedMsgLen, packedBufLen);
+ return -1;
+} else {
+ packedMsgLen16 = (uint16_t)packedMsgLen;
+}
- case NFAPI_NR_PHY_MSG_TYPE_UL_DCI_REQUEST:
- result = pack_ul_dci_request(pMessageHeader, &pWritePackedMessage, end, config);
- break;
- case NFAPI_UE_RELEASE_REQUEST:
- result =pack_ue_release_request(pMessageHeader, &pWritePackedMessage, end, config);
- break;
+// Update the message length in the header
+pMessageHeader->message_length = packedMsgLen16;
- case NFAPI_UE_RELEASE_RESPONSE:
- result =pack_ue_release_response(pMessageHeader, &pWritePackedMessage, end, config);
- break;
+if (!push16(packedMsgLen16, &pPackedLengthField, end))
+ return -1;
- case NFAPI_NR_PHY_MSG_TYPE_SLOT_INDICATION:
- result = pack_nr_slot_indication(pMessageHeader, &pWritePackedMessage, end, config);
+if (1) {
+ // quick test
+ if (pMessageHeader->message_length != packedMsgLen) {
+ NFAPI_TRACE(NFAPI_TRACE_ERROR,
+ "nfapi packedMsgLen(%d) != message_length(%d) id %d\n",
+ packedMsgLen,
+ pMessageHeader->message_length,
+ pMessageHeader->message_id);
+ }
+}
- case NFAPI_NR_PHY_MSG_TYPE_RX_DATA_INDICATION:
- result = pack_nr_rx_data_indication(pMessageHeader, &pWritePackedMessage, end, config);
- break;
-
- case NFAPI_NR_PHY_MSG_TYPE_CRC_INDICATION:
- result = pack_nr_crc_indication(pMessageHeader, &pWritePackedMessage, end, config);
- break;
-
- case NFAPI_NR_PHY_MSG_TYPE_UCI_INDICATION:
- result = pack_nr_uci_indication(pMessageHeader, &pWritePackedMessage, end, config);
- break;
-
- case NFAPI_NR_PHY_MSG_TYPE_SRS_INDICATION:
- result = pack_nr_srs_indication(pMessageHeader, &pWritePackedMessage, end, config);
- break;
-
- case NFAPI_NR_PHY_MSG_TYPE_RACH_INDICATION:
- result = pack_nr_rach_indication(pMessageHeader, &pWritePackedMessage, end, config);
- break;
-
- case NFAPI_NR_PHY_MSG_TYPE_DL_NODE_SYNC:
- result = pack_nr_dl_node_sync(pMessageHeader, &pWritePackedMessage, end, config);
- break;
-
- case NFAPI_NR_PHY_MSG_TYPE_UL_NODE_SYNC:
- result = pack_nr_ul_node_sync(pMessageHeader, &pWritePackedMessage, end, config);
- break;
-
- case NFAPI_TIMING_INFO:
- result = pack_nr_timing_info(pMessageHeader, &pWritePackedMessage, end, config);
- break;
-
- default:
- {
- if(pMessageHeader->message_id >= NFAPI_VENDOR_EXT_MSG_MIN &&
- pMessageHeader->message_id <= NFAPI_VENDOR_EXT_MSG_MAX)
- {
- if(config && config->pack_p7_vendor_extension)
- {
- result = (config->pack_p7_vendor_extension)(pMessageHeader, &pWritePackedMessage, end, config);
- }
- else
- {
- NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s VE NFAPI message ID %d. No ve ecoder provided\n", __FUNCTION__, pMessageHeader->message_id);
- }
- }
- else
- {
- NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s NFAPI Unknown message ID %d\n", __FUNCTION__, pMessageHeader->message_id);
- }
- }
- break;
- }
-
- if(result == 0)
- {
- NFAPI_TRACE(NFAPI_TRACE_ERROR, "P7 Pack failed to pack message\n");
- return -1;
- }
-
- // check for a valid message length
- uintptr_t msgHead = (uintptr_t)pPackedBuf;
- uintptr_t msgEnd = (uintptr_t)pWritePackedMessage;
- uint32_t packedMsgLen = msgEnd - msgHead;
- uint16_t packedMsgLen16;
- if (packedMsgLen > 0xFFFF || packedMsgLen > packedBufLen)
- {
- NFAPI_TRACE(NFAPI_TRACE_ERROR, "Packed message length error %d, buffer supplied %d\n", packedMsgLen, packedBufLen);
- return -1;
- }
- else
- {
- packedMsgLen16 = (uint16_t)packedMsgLen;
- }
-
- // Update the message length in the header
- pMessageHeader->message_length = packedMsgLen16;
-
- if(!push16(packedMsgLen16, &pPackedLengthField, end))
- return -1;
-
- if(1)
- {
- //quick test
- if(pMessageHeader->message_length != packedMsgLen)
- {
- NFAPI_TRACE(NFAPI_TRACE_ERROR, "nfapi packedMsgLen(%d) != message_length(%d) id %d\n", packedMsgLen, pMessageHeader->message_length, pMessageHeader->message_id);
- }
- }
-
- return (packedMsgLen);
+return (packedMsgLen);
}
int nfapi_p7_message_pack(void *pMessageBuf, void *pPackedBuf, uint32_t packedBufLen, nfapi_p7_codec_config_t *config) {
@@ -4624,8 +4625,8 @@ static uint8_t unpack_ul_tti_request_pusch_pdu(void *tlv, uint8_t **ppReadPacked
return(
pull8(ppReadPackedMsg, &pusch_pdu->pusch_ptrs.num_ptrs_ports, end) &&
pull8(ppReadPackedMsg, &pusch_pdu->pusch_ptrs.ptrs_ports_list->ptrs_dmrs_port, end) &&
- + pull16(ppReadPackedMsg, &pusch_pdu->pusch_ptrs.ptrs_ports_list->ptrs_port_index, end) &&
- + pull8(ppReadPackedMsg, &pusch_pdu->pusch_ptrs.ptrs_ports_list->ptrs_re_offset, end) &&
+ pull16(ppReadPackedMsg, &pusch_pdu->pusch_ptrs.ptrs_ports_list->ptrs_port_index, end) &&
+ pull8(ppReadPackedMsg, &pusch_pdu->pusch_ptrs.ptrs_ports_list->ptrs_re_offset, end) &&
pull8(ppReadPackedMsg, &pusch_pdu->pusch_ptrs.ptrs_time_density, end) &&
pull8(ppReadPackedMsg, &pusch_pdu->pusch_ptrs.ptrs_freq_density, end) &&
pull8(ppReadPackedMsg, &pusch_pdu->pusch_ptrs.ul_ptrs_power, end)
@@ -7492,11 +7493,11 @@ static uint8_t unpack_nrach_indication(uint8_t **ppReadPackedMsg, uint8_t *end,
unpack_p7_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension));
}
-static uint8_t unpack_nr_dl_node_sync(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p7_codec_config_t *config) {
+static uint8_t unpack_nr_dl_node_sync(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p7_codec_config_t *config)
+{
nfapi_nr_dl_node_sync_t *pNfapiMsg = (nfapi_nr_dl_node_sync_t *)msg;
- return (pull32(ppReadPackedMsg, &pNfapiMsg->t1, end) &&
- pulls32(ppReadPackedMsg, &pNfapiMsg->delta_sfn_slot, end) &&
- unpack_p7_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension));
+ return (pull32(ppReadPackedMsg, &pNfapiMsg->t1, end) && pulls32(ppReadPackedMsg, &pNfapiMsg->delta_sfn_slot, end)
+ && unpack_nr_p7_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension));
}
static uint8_t unpack_dl_node_sync(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p7_codec_config_t *config) {
@@ -7506,16 +7507,14 @@ static uint8_t unpack_dl_node_sync(uint8_t **ppReadPackedMsg, uint8_t *end, void
unpack_p7_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension));
}
-
-static uint8_t unpack_nr_ul_node_sync(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p7_codec_config_t *config) {
+static uint8_t unpack_nr_ul_node_sync(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p7_codec_config_t *config)
+{
nfapi_nr_ul_node_sync_t *pNfapiMsg = (nfapi_nr_ul_node_sync_t *)msg;
- return (pull32(ppReadPackedMsg, &pNfapiMsg->t1, end) &&
- pull32(ppReadPackedMsg, &pNfapiMsg->t2, end) &&
- pull32(ppReadPackedMsg, &pNfapiMsg->t3, end) &&
- unpack_p7_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension));
+ return (pull32(ppReadPackedMsg, &pNfapiMsg->t1, end) && pull32(ppReadPackedMsg, &pNfapiMsg->t2, end)
+ && pull32(ppReadPackedMsg, &pNfapiMsg->t3, end)
+ && unpack_nr_p7_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension));
}
-
static uint8_t unpack_ul_node_sync(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p7_codec_config_t *config) {
nfapi_ul_node_sync_t *pNfapiMsg = (nfapi_ul_node_sync_t *)msg;
return (pull32(ppReadPackedMsg, &pNfapiMsg->t1, end) &&
@@ -7543,29 +7542,25 @@ static uint8_t unpack_timing_info(uint8_t **ppReadPackedMsg, uint8_t *end, void
unpack_p7_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension));
}
-
-static uint8_t unpack_nr_timing_info(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p7_codec_config_t *config) {
+static uint8_t unpack_nr_timing_info(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p7_codec_config_t *config)
+{
nfapi_nr_timing_info_t *pNfapiMsg = (nfapi_nr_timing_info_t *)msg;
- return (pull32(ppReadPackedMsg, &pNfapiMsg->last_sfn, end) &&
- pull32(ppReadPackedMsg, &pNfapiMsg->last_slot, end) &&
- pull32(ppReadPackedMsg, &pNfapiMsg->time_since_last_timing_info, end) &&
- pull32(ppReadPackedMsg, &pNfapiMsg->dl_tti_jitter, end) &&
- pull32(ppReadPackedMsg, &pNfapiMsg->tx_data_request_jitter, end) &&
- pull32(ppReadPackedMsg, &pNfapiMsg->ul_tti_jitter, end) &&
- pull32(ppReadPackedMsg, &pNfapiMsg->ul_dci_jitter, end) &&
- pulls32(ppReadPackedMsg, &pNfapiMsg->dl_tti_latest_delay, end) &&
- pulls32(ppReadPackedMsg, &pNfapiMsg->tx_data_request_latest_delay, end) &&
- pulls32(ppReadPackedMsg, &pNfapiMsg->ul_tti_latest_delay, end) &&
- pulls32(ppReadPackedMsg, &pNfapiMsg->ul_dci_latest_delay, end) &&
- pulls32(ppReadPackedMsg, &pNfapiMsg->dl_tti_earliest_arrival, end) &&
- pulls32(ppReadPackedMsg, &pNfapiMsg->tx_data_request_earliest_arrival, end) &&
- pulls32(ppReadPackedMsg, &pNfapiMsg->ul_tti_earliest_arrival, end) &&
- pulls32(ppReadPackedMsg, &pNfapiMsg->ul_dci_earliest_arrival, end) &&
- unpack_p7_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension));
+ return (pull32(ppReadPackedMsg, &pNfapiMsg->last_sfn, end) && pull32(ppReadPackedMsg, &pNfapiMsg->last_slot, end)
+ && pull32(ppReadPackedMsg, &pNfapiMsg->time_since_last_timing_info, end)
+ && pull32(ppReadPackedMsg, &pNfapiMsg->dl_tti_jitter, end)
+ && pull32(ppReadPackedMsg, &pNfapiMsg->tx_data_request_jitter, end)
+ && pull32(ppReadPackedMsg, &pNfapiMsg->ul_tti_jitter, end) && pull32(ppReadPackedMsg, &pNfapiMsg->ul_dci_jitter, end)
+ && pulls32(ppReadPackedMsg, &pNfapiMsg->dl_tti_latest_delay, end)
+ && pulls32(ppReadPackedMsg, &pNfapiMsg->tx_data_request_latest_delay, end)
+ && pulls32(ppReadPackedMsg, &pNfapiMsg->ul_tti_latest_delay, end)
+ && pulls32(ppReadPackedMsg, &pNfapiMsg->ul_dci_latest_delay, end)
+ && pulls32(ppReadPackedMsg, &pNfapiMsg->dl_tti_earliest_arrival, end)
+ && pulls32(ppReadPackedMsg, &pNfapiMsg->tx_data_request_earliest_arrival, end)
+ && pulls32(ppReadPackedMsg, &pNfapiMsg->ul_tti_earliest_arrival, end)
+ && pulls32(ppReadPackedMsg, &pNfapiMsg->ul_dci_earliest_arrival, end)
+ && unpack_nr_p7_tlv_list(NULL, 0, ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension));
}
-
-
// unpack length check
static int check_unpack_length(nfapi_message_id_e msgId, uint32_t unpackedBufLen) {
diff --git a/nfapi/open-nFAPI/pnf/src/pnf.c b/nfapi/open-nFAPI/pnf/src/pnf.c
index 3783e34708..11bc86e42e 100644
--- a/nfapi/open-nFAPI/pnf/src/pnf.c
+++ b/nfapi/open-nFAPI/pnf/src/pnf.c
@@ -2131,77 +2131,77 @@ int pnf_read_dispatch_message(pnf_t* pnf)
int pnf_nr_read_dispatch_message(pnf_t* pnf)
{
- int socket_connected = 1;
+ int socket_connected = 1;
- // 1. Peek the message header
- // 2. If the message is larger than the stack buffer then create a dynamic buffer
- // 3. Read the buffer
- // 4. Handle the p5 message
+ // 1. Peek the message header
+ // 2. If the message is larger than the stack buffer then create a dynamic buffer
+ // 3. Read the buffer
+ // 4. Handle the p5 message
- uint32_t header_buffer_size = NFAPI_HEADER_LENGTH;
- uint8_t header_buffer[header_buffer_size];
+ uint32_t header_buffer_size = NFAPI_HEADER_LENGTH;
+ uint8_t header_buffer[header_buffer_size];
- uint32_t stack_buffer_size = 32; //should it be the size of then sctp_notificatoin structure
- uint8_t stack_buffer[stack_buffer_size];
+ uint32_t stack_buffer_size = 32; // should it be the size of then sctp_notificatoin structure
+ uint8_t stack_buffer[stack_buffer_size];
- uint8_t* dynamic_buffer = 0;
+ uint8_t* dynamic_buffer = 0;
- uint8_t* read_buffer = &stack_buffer[0];
- uint32_t message_size = 0;
+ uint8_t* read_buffer = &stack_buffer[0];
+ uint32_t message_size = 0;
- struct sockaddr_in addr;
- socklen_t addr_len = sizeof(addr);
+ struct sockaddr_in addr;
+ socklen_t addr_len = sizeof(addr);
- struct sctp_sndrcvinfo sndrcvinfo;
- (void)memset(&sndrcvinfo, 0, sizeof(struct sctp_sndrcvinfo));
+ struct sctp_sndrcvinfo sndrcvinfo;
+ (void)memset(&sndrcvinfo, 0, sizeof(struct sctp_sndrcvinfo));
- {
- int flags = MSG_PEEK;
- message_size = sctp_recvmsg(pnf->p5_sock, header_buffer, header_buffer_size, /*(struct sockaddr*)&addr, &addr_len*/ 0, 0, &sndrcvinfo, &flags);
+ {
+ int flags = MSG_PEEK;
+ message_size = sctp_recvmsg(pnf->p5_sock,
+ header_buffer,
+ header_buffer_size,
+ /*(struct sockaddr*)&addr, &addr_len*/ 0,
+ 0,
+ &sndrcvinfo,
+ &flags);
- if(message_size == -1)
- {
- NFAPI_TRACE(NFAPI_TRACE_INFO, "PNF Failed to peek sctp message size errno:%d\n", errno);
- return 0;
- }
+ if (message_size == -1) {
+ NFAPI_TRACE(NFAPI_TRACE_INFO, "PNF Failed to peek sctp message size errno:%d\n", errno);
+ return 0;
+ }
- nfapi_p4_p5_message_header_t header;
- int unpack_result = nfapi_p5_message_header_unpack(header_buffer, header_buffer_size, &header, sizeof(header), 0);
- if(unpack_result < 0)
- {
- NFAPI_TRACE(NFAPI_TRACE_INFO, "PNF Failed to unpack p5 message header\n");
- return 0;
- }
- message_size = header.message_length;
+ nfapi_p4_p5_message_header_t header;
+ int unpack_result = nfapi_p5_message_header_unpack(header_buffer, header_buffer_size, &header, sizeof(header), 0);
+ if (unpack_result < 0) {
+ NFAPI_TRACE(NFAPI_TRACE_INFO, "PNF Failed to unpack p5 message header\n");
+ return 0;
+ }
+ message_size = header.message_length + header_buffer_size;
- // now have the size of the mesage
- }
+ // now have the size of the mesage
+ }
- if(message_size > stack_buffer_size)
- {
- dynamic_buffer = (uint8_t*)malloc(message_size);
+ if (message_size > stack_buffer_size) {
+ dynamic_buffer = (uint8_t*)malloc(message_size);
- if(dynamic_buffer == NULL)
- {
- // todo : add error mesage
- NFAPI_TRACE(NFAPI_TRACE_INFO, "PNF Failed to allocate dynamic buffer for sctp_recvmsg size:%d\n", message_size);
- return -1;
- }
+ if (dynamic_buffer == NULL) {
+ // todo : add error mesage
+ NFAPI_TRACE(NFAPI_TRACE_INFO, "PNF Failed to allocate dynamic buffer for sctp_recvmsg size:%d\n", message_size);
+ return -1;
+ }
- read_buffer = dynamic_buffer;
- }
+ read_buffer = dynamic_buffer;
+ }
- {
- int flags = 0;
- (void)memset(&sndrcvinfo, 0, sizeof(struct sctp_sndrcvinfo));
+ {
+ int flags = 0;
+ (void)memset(&sndrcvinfo, 0, sizeof(struct sctp_sndrcvinfo));
- int recvmsg_result = sctp_recvmsg(pnf->p5_sock, read_buffer, message_size, (struct sockaddr*)&addr, &addr_len, &sndrcvinfo, &flags);
- if(recvmsg_result == -1)
- {
- NFAPI_TRACE(NFAPI_TRACE_INFO, "Failed to read sctp message size errno:%d\n", errno);
- }
- else
- {
+ int recvmsg_result =
+ sctp_recvmsg(pnf->p5_sock, read_buffer, message_size, (struct sockaddr*)&addr, &addr_len, &sndrcvinfo, &flags);
+ if (recvmsg_result == -1) {
+ NFAPI_TRACE(NFAPI_TRACE_INFO, "Failed to read sctp message size errno:%d\n", errno);
+ } else {
#if 0
// print the received message
printf("\n MESSAGE RECEIVED: \n");
@@ -2211,56 +2211,44 @@ int pnf_nr_read_dispatch_message(pnf_t* pnf)
printf("\n");
#endif
- if (flags & MSG_NOTIFICATION)
- {
- NFAPI_TRACE(NFAPI_TRACE_INFO, "Notification received from %s:%u\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
+ if (flags & MSG_NOTIFICATION) {
+ NFAPI_TRACE(NFAPI_TRACE_INFO, "Notification received from %s:%u\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
- // todo - handle the events
- }
- else
- {
- /*
- NFAPI_TRACE(NFAPI_TRACE_INFO, "Received message fd:%d from %s:%u assoc:%d on stream %d, PPID %d, length %d, flags 0x%x\n",
- pnf->p5_sock,
- inet_ntoa(addr.sin_addr),
- ntohs(addr.sin_port),
- sndrcvinfo.sinfo_assoc_id,
- sndrcvinfo.sinfo_stream,
- ntohl(sndrcvinfo.sinfo_ppid),
- message_size,
- flags);
- */
+ // todo - handle the events
+ } else {
+ /*
+ NFAPI_TRACE(NFAPI_TRACE_INFO, "Received message fd:%d from %s:%u assoc:%d on stream %d, PPID %d, length %d, flags 0x%x\n",
+ pnf->p5_sock,
+ inet_ntoa(addr.sin_addr),
+ ntohs(addr.sin_port),
+ sndrcvinfo.sinfo_assoc_id,
+ sndrcvinfo.sinfo_stream,
+ ntohl(sndrcvinfo.sinfo_ppid),
+ message_size,
+ flags);
+ */
- // handle now if complete message in one or more segments
- if ((flags & 0x80) == 0x80)
- {
- pnf_nr_handle_p5_message(pnf, read_buffer, message_size);
- }
- else
- {
- NFAPI_TRACE(NFAPI_TRACE_WARN, "sctp_recvmsg: unhandled mode with flags 0x%x\n", flags);
+ // handle now if complete message in one or more segments
+ if ((flags & 0x80) == 0x80) {
+ pnf_nr_handle_p5_message(pnf, read_buffer, message_size);
+ } else {
+ NFAPI_TRACE(NFAPI_TRACE_WARN, "sctp_recvmsg: unhandled mode with flags 0x%x\n", flags);
- // assume socket disconnected
- NFAPI_TRACE(NFAPI_TRACE_WARN, "Disconnected socket\n");
- socket_connected = 0;
- }
-
-
- }
- }
- }
-
- if(dynamic_buffer)
- {
- free(dynamic_buffer);
- }
-
- return socket_connected;
+ // assume socket disconnected
+ NFAPI_TRACE(NFAPI_TRACE_WARN, "Disconnected socket\n");
+ socket_connected = 0;
+ }
+ }
+ }
+ }
+ if (dynamic_buffer) {
+ free(dynamic_buffer);
+ }
+ return socket_connected;
}
-
int pnf_message_pump(pnf_t* pnf)
{
uint8_t socketConnected = 1;
diff --git a/nfapi/open-nFAPI/vnf/src/vnf.c b/nfapi/open-nFAPI/vnf/src/vnf.c
index e0431ced17..48efffb5e6 100644
--- a/nfapi/open-nFAPI/vnf/src/vnf.c
+++ b/nfapi/open-nFAPI/vnf/src/vnf.c
@@ -1240,134 +1240,118 @@ void vnf_handle_p4_p5_message(void *pRecvMsg, int recvMsgLen, int p5_idx, nfapi_
}
}
-
int vnf_nr_read_dispatch_message(nfapi_vnf_config_t* config, nfapi_vnf_pnf_info_t* pnf)
{
- if(1)
- {
- int socket_connected = 1;
+ if (1) {
+ int socket_connected = 1;
- // 1. Peek the message header
- // 2. If the message is larger than the stack buffer then create a dynamic buffer
- // 3. Read the buffer
- // 4. Handle the p5 message
-
- uint32_t header_buffer_size = NFAPI_HEADER_LENGTH;
- uint8_t header_buffer[header_buffer_size];
+ // 1. Peek the message header
+ // 2. If the message is larger than the stack buffer then create a dynamic buffer
+ // 3. Read the buffer
+ // 4. Handle the p5 message
- uint32_t stack_buffer_size = 32; //should it be the size of then sctp_notificatoin structure
- uint8_t stack_buffer[stack_buffer_size];
+ uint32_t header_buffer_size = NFAPI_HEADER_LENGTH;
+ uint8_t header_buffer[header_buffer_size];
- uint8_t* dynamic_buffer = 0;
+ uint32_t stack_buffer_size = 32; // should it be the size of then sctp_notificatoin structure
+ uint8_t stack_buffer[stack_buffer_size];
- uint8_t* read_buffer = &stack_buffer[0];
- uint32_t message_size = 0;
+ uint8_t* dynamic_buffer = 0;
- struct sockaddr_in addr;
- socklen_t addr_len = sizeof(addr);
+ uint8_t* read_buffer = &stack_buffer[0];
+ uint32_t message_size = 0;
- struct sctp_sndrcvinfo sndrcvinfo;
- (void)memset(&sndrcvinfo, 0, sizeof(struct sctp_sndrcvinfo));
+ struct sockaddr_in addr;
+ socklen_t addr_len = sizeof(addr);
- {
- int flags = MSG_PEEK;
- message_size = sctp_recvmsg(pnf->p5_sock, header_buffer, header_buffer_size, (struct sockaddr*)&addr, &addr_len, &sndrcvinfo, &flags);
+ struct sctp_sndrcvinfo sndrcvinfo;
+ (void)memset(&sndrcvinfo, 0, sizeof(struct sctp_sndrcvinfo));
- if(message_size == -1)
- {
- NFAPI_TRACE(NFAPI_TRACE_INFO, "VNF Failed to peek sctp message size errno:%d\n", errno);
- return 0;
- }
+ {
+ int flags = MSG_PEEK;
+ message_size =
+ sctp_recvmsg(pnf->p5_sock, header_buffer, header_buffer_size, (struct sockaddr*)&addr, &addr_len, &sndrcvinfo, &flags);
- nfapi_p4_p5_message_header_t header;
- int unpack_result = nfapi_p5_message_header_unpack(header_buffer, header_buffer_size, &header, sizeof(header), 0);
- if(unpack_result < 0)
- {
- NFAPI_TRACE(NFAPI_TRACE_INFO, "VNF Failed to decode message header %d\n", unpack_result);
- return 0;
- }
- message_size = header.message_length;
+ if (message_size == -1) {
+ NFAPI_TRACE(NFAPI_TRACE_INFO, "VNF Failed to peek sctp message size errno:%d\n", errno);
+ return 0;
+ }
- // now have the size of the mesage
- }
+ nfapi_p4_p5_message_header_t header;
+ int unpack_result = nfapi_p5_message_header_unpack(header_buffer, header_buffer_size, &header, sizeof(header), 0);
+ if (unpack_result < 0) {
+ NFAPI_TRACE(NFAPI_TRACE_INFO, "VNF Failed to decode message header %d\n", unpack_result);
+ return 0;
+ }
+ message_size = header.message_length + header_buffer_size;
- if(message_size > stack_buffer_size)
- {
- dynamic_buffer = (uint8_t*)malloc(message_size);
+ // now have the size of the mesage
+ }
- if(dynamic_buffer == NULL)
- {
- // todo : add error mesage
- NFAPI_TRACE(NFAPI_TRACE_INFO, "VNF Failed to allocate dynamic buffer for sctp_recvmsg size:%d\n", message_size);
- return -1;
- }
+ if (message_size > stack_buffer_size) {
+ dynamic_buffer = (uint8_t*)malloc(message_size);
- read_buffer = dynamic_buffer;
- }
+ if (dynamic_buffer == NULL) {
+ // todo : add error mesage
+ NFAPI_TRACE(NFAPI_TRACE_INFO, "VNF Failed to allocate dynamic buffer for sctp_recvmsg size:%d\n", message_size);
+ return -1;
+ }
- {
- int flags = 0;
- (void)memset(&sndrcvinfo, 0, sizeof(struct sctp_sndrcvinfo));
+ read_buffer = dynamic_buffer;
+ }
- int recvmsg_result = sctp_recvmsg(pnf->p5_sock, read_buffer, message_size, (struct sockaddr*)&addr, &addr_len, &sndrcvinfo, &flags);
- if(recvmsg_result == -1)
- {
- NFAPI_TRACE(NFAPI_TRACE_INFO, "Failed to read sctp message size errno:%d\n", errno);
- }
- else
- {
- if (flags & MSG_NOTIFICATION)
- {
- NFAPI_TRACE(NFAPI_TRACE_INFO, "Notification received from %s:%u\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
+ {
+ int flags = 0;
+ (void)memset(&sndrcvinfo, 0, sizeof(struct sctp_sndrcvinfo));
- // todo - handle the events
- }
- else
- {
- /*
- NFAPI_TRACE(NFAPI_TRACE_INFO, "Received message fd:%d from %s:%u assoc:%d on stream %d, PPID %d, length %d, flags 0x%x\n",
- pnf->p5_sock,
- inet_ntoa(addr.sin_addr),
- ntohs(addr.sin_port),
- sndrcvinfo.sinfo_assoc_id,
- sndrcvinfo.sinfo_stream,
- ntohl(sndrcvinfo.sinfo_ppid),
- message_size,
- flags);
- */
+ int recvmsg_result =
+ sctp_recvmsg(pnf->p5_sock, read_buffer, message_size, (struct sockaddr*)&addr, &addr_len, &sndrcvinfo, &flags);
+ if (recvmsg_result == -1) {
+ NFAPI_TRACE(NFAPI_TRACE_INFO, "Failed to read sctp message size errno:%d\n", errno);
+ } else {
+ if (flags & MSG_NOTIFICATION) {
+ NFAPI_TRACE(NFAPI_TRACE_INFO, "Notification received from %s:%u\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
- // handle now if complete message in one or more segments
- if ((flags & 0x80) == 0x80)
- {
- // printf("\nVNF RECEIVES:\n");
- // for(int i=0; ip5_sock,
+ inet_ntoa(addr.sin_addr),
+ ntohs(addr.sin_port),
+ sndrcvinfo.sinfo_assoc_id,
+ sndrcvinfo.sinfo_stream,
+ ntohl(sndrcvinfo.sinfo_ppid),
+ message_size,
+ flags);
+ */
- vnf_nr_handle_p4_p5_message(read_buffer, message_size, pnf->p5_idx, config);
- }
- else
- {
- NFAPI_TRACE(NFAPI_TRACE_WARN, "sctp_recvmsg: unhandled mode with flags 0x%x\n", flags);
+ // handle now if complete message in one or more segments
+ if ((flags & 0x80) == 0x80) {
+ // printf("\nVNF RECEIVES:\n");
+ // for(int i=0; ip5_idx, config);
+ } else {
+ NFAPI_TRACE(NFAPI_TRACE_WARN, "sctp_recvmsg: unhandled mode with flags 0x%x\n", flags);
+ // assume socket disconnected
+ NFAPI_TRACE(NFAPI_TRACE_WARN, "Disconnected socket\n");
+ socket_connected = 0;
+ }
+ }
+ }
+ }
- }
- }
- }
+ if (dynamic_buffer) {
+ free(dynamic_buffer);
+ }
- if(dynamic_buffer)
- {
- free(dynamic_buffer);
- }
-
- return socket_connected;
- }
+ return socket_connected;
+ }
}
int vnf_read_dispatch_message(nfapi_vnf_config_t* config, nfapi_vnf_pnf_info_t* pnf)
diff --git a/openair2/LAYER2/NR_MAC_gNB/config.c b/openair2/LAYER2/NR_MAC_gNB/config.c
index 01ec2a1dd5..853770887e 100644
--- a/openair2/LAYER2/NR_MAC_gNB/config.c
+++ b/openair2/LAYER2/NR_MAC_gNB/config.c
@@ -124,26 +124,28 @@ void process_CellGroup(NR_CellGroupConfig_t *CellGroup, NR_UE_info_t *UE)
static void config_common(gNB_MAC_INST *nrmac, int pdsch_AntennaPorts, int pusch_AntennaPorts, NR_ServingCellConfigCommon_t *scc)
{
- nfapi_nr_config_request_scf_t *cfg = &nrmac->config[0];
- nrmac->common_channels[0].ServingCellConfigCommon = scc;
+ nfapi_nr_config_request_scf_t *cfg = &nrmac->config[0];
+ nrmac->common_channels[0].ServingCellConfigCommon = scc;
- // Carrier configuration
- struct NR_FrequencyInfoDL *frequencyInfoDL = scc->downlinkConfigCommon->frequencyInfoDL;
- int bw_index = get_supported_band_index(frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing,
- *frequencyInfoDL->frequencyBandList.list.array[0],
- frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth);
- cfg->carrier_config.dl_bandwidth.value = get_supported_bw_mhz(*frequencyInfoDL->frequencyBandList.list.array[0] > 256 ? FR2 : FR1, bw_index);
- cfg->carrier_config.dl_bandwidth.tl.tag = NFAPI_NR_CONFIG_DL_BANDWIDTH_TAG; //temporary
- cfg->num_tlv++;
- LOG_I(NR_MAC,"%s() dl_BandwidthP:%d\n", __FUNCTION__, cfg->carrier_config.dl_bandwidth.value);
+ // Carrier configuration
+ struct NR_FrequencyInfoDL *frequencyInfoDL = scc->downlinkConfigCommon->frequencyInfoDL;
+ int bw_index = get_supported_band_index(frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing,
+ *frequencyInfoDL->frequencyBandList.list.array[0],
+ frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth);
+ cfg->carrier_config.dl_bandwidth.value =
+ get_supported_bw_mhz(*frequencyInfoDL->frequencyBandList.list.array[0] > 256 ? FR2 : FR1, bw_index);
+ cfg->carrier_config.dl_bandwidth.tl.tag = NFAPI_NR_CONFIG_DL_BANDWIDTH_TAG; // temporary
+ cfg->num_tlv++;
+ LOG_I(NR_MAC, "%s() dl_BandwidthP:%d\n", __FUNCTION__, cfg->carrier_config.dl_bandwidth.value);
- cfg->carrier_config.dl_frequency.value = from_nrarfcn(*frequencyInfoDL->frequencyBandList.list.array[0],
- *scc->ssbSubcarrierSpacing,
- frequencyInfoDL->absoluteFrequencyPointA)/1000; // freq in kHz
- cfg->carrier_config.dl_frequency.tl.tag = NFAPI_NR_CONFIG_DL_FREQUENCY_TAG;
- cfg->num_tlv++;
+ cfg->carrier_config.dl_frequency.value = from_nrarfcn(*frequencyInfoDL->frequencyBandList.list.array[0],
+ *scc->ssbSubcarrierSpacing,
+ frequencyInfoDL->absoluteFrequencyPointA)
+ / 1000; // freq in kHz
+ cfg->carrier_config.dl_frequency.tl.tag = NFAPI_NR_CONFIG_DL_FREQUENCY_TAG;
+ cfg->num_tlv++;
- for (int i = 0; i < 5; i++) {
+ for (int i = 0; i < 5; i++) {
if (i == frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing) {
cfg->carrier_config.dl_grid_size[i].value = frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth;
cfg->carrier_config.dl_k0[i].value = frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->offsetToCarrier;
@@ -151,34 +153,35 @@ static void config_common(gNB_MAC_INST *nrmac, int pdsch_AntennaPorts, int pusch
cfg->carrier_config.dl_k0[i].tl.tag = NFAPI_NR_CONFIG_DL_K0_TAG;
cfg->num_tlv++;
cfg->num_tlv++;
- }
- else {
+ } else {
cfg->carrier_config.dl_grid_size[i].value = 0;
cfg->carrier_config.dl_k0[i].value = 0;
}
- }
- struct NR_FrequencyInfoUL *frequencyInfoUL = scc->uplinkConfigCommon->frequencyInfoUL;
- bw_index = get_supported_band_index(frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing,
- *frequencyInfoUL->frequencyBandList->list.array[0],
- frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth);
- cfg->carrier_config.uplink_bandwidth.value = get_supported_bw_mhz(*frequencyInfoUL->frequencyBandList->list.array[0] > 256 ? FR2 : FR1, bw_index);
- cfg->carrier_config.uplink_bandwidth.tl.tag = NFAPI_NR_CONFIG_UPLINK_BANDWIDTH_TAG; //temporary
- cfg->num_tlv++;
- LOG_I(NR_MAC,"%s() dl_BandwidthP:%d\n", __FUNCTION__, cfg->carrier_config.uplink_bandwidth.value);
+ }
+ struct NR_FrequencyInfoUL *frequencyInfoUL = scc->uplinkConfigCommon->frequencyInfoUL;
+ bw_index = get_supported_band_index(frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing,
+ *frequencyInfoUL->frequencyBandList->list.array[0],
+ frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth);
+ cfg->carrier_config.uplink_bandwidth.value =
+ get_supported_bw_mhz(*frequencyInfoUL->frequencyBandList->list.array[0] > 256 ? FR2 : FR1, bw_index);
+ cfg->carrier_config.uplink_bandwidth.tl.tag = NFAPI_NR_CONFIG_UPLINK_BANDWIDTH_TAG; // temporary
+ cfg->num_tlv++;
+ LOG_I(NR_MAC, "%s() dl_BandwidthP:%d\n", __FUNCTION__, cfg->carrier_config.uplink_bandwidth.value);
- int UL_pointA;
- if (frequencyInfoUL->absoluteFrequencyPointA == NULL)
+ int UL_pointA;
+ if (frequencyInfoUL->absoluteFrequencyPointA == NULL)
UL_pointA = frequencyInfoDL->absoluteFrequencyPointA;
- else
+ else
UL_pointA = *frequencyInfoUL->absoluteFrequencyPointA;
- cfg->carrier_config.uplink_frequency.value = from_nrarfcn(*frequencyInfoUL->frequencyBandList->list.array[0],
- *scc->ssbSubcarrierSpacing,
- UL_pointA)/1000; // freq in kHz
- cfg->carrier_config.uplink_frequency.tl.tag = NFAPI_NR_CONFIG_UPLINK_FREQUENCY_TAG;
- cfg->num_tlv++;
+ cfg->carrier_config.uplink_frequency.value = from_nrarfcn(*frequencyInfoUL->frequencyBandList->list.array[0],
+ *scc->ssbSubcarrierSpacing,
+ UL_pointA)
+ / 1000; // freq in kHz
+ cfg->carrier_config.uplink_frequency.tl.tag = NFAPI_NR_CONFIG_UPLINK_FREQUENCY_TAG;
+ cfg->num_tlv++;
- for (int i = 0; i < 5; i++) {
+ for (int i = 0; i < 5; i++) {
if (i == frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing) {
cfg->carrier_config.ul_grid_size[i].value = frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth;
cfg->carrier_config.ul_k0[i].value = frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->offsetToCarrier;
@@ -186,219 +189,235 @@ static void config_common(gNB_MAC_INST *nrmac, int pdsch_AntennaPorts, int pusch
cfg->carrier_config.ul_k0[i].tl.tag = NFAPI_NR_CONFIG_UL_K0_TAG;
cfg->num_tlv++;
cfg->num_tlv++;
- }
- else {
+ } else {
cfg->carrier_config.ul_grid_size[i].value = 0;
cfg->carrier_config.ul_k0[i].value = 0;
}
- }
+ }
- uint32_t band = *frequencyInfoDL->frequencyBandList.list.array[0];
- frequency_range_t frequency_range = band<100?FR1:FR2;
+ uint32_t band = *frequencyInfoDL->frequencyBandList.list.array[0];
+ frequency_range_t frequency_range = band < 100 ? FR1 : FR2;
- frame_type_t frame_type = get_frame_type(*frequencyInfoDL->frequencyBandList.list.array[0], *scc->ssbSubcarrierSpacing);
- nrmac->common_channels[0].frame_type = frame_type;
+ frame_type_t frame_type = get_frame_type(*frequencyInfoDL->frequencyBandList.list.array[0], *scc->ssbSubcarrierSpacing);
+ nrmac->common_channels[0].frame_type = frame_type;
- // Cell configuration
- cfg->cell_config.phy_cell_id.value = *scc->physCellId;
- cfg->cell_config.phy_cell_id.tl.tag = NFAPI_NR_CONFIG_PHY_CELL_ID_TAG;
- cfg->num_tlv++;
+ // Cell configuration
+ cfg->cell_config.phy_cell_id.value = *scc->physCellId;
+ cfg->cell_config.phy_cell_id.tl.tag = NFAPI_NR_CONFIG_PHY_CELL_ID_TAG;
+ cfg->num_tlv++;
- cfg->cell_config.frame_duplex_type.value = frame_type;
- cfg->cell_config.frame_duplex_type.tl.tag = NFAPI_NR_CONFIG_FRAME_DUPLEX_TYPE_TAG;
- cfg->num_tlv++;
+ cfg->cell_config.frame_duplex_type.value = frame_type;
+ cfg->cell_config.frame_duplex_type.tl.tag = NFAPI_NR_CONFIG_FRAME_DUPLEX_TYPE_TAG;
+ cfg->num_tlv++;
+ // SSB configuration
+ cfg->ssb_config.ss_pbch_power.value = scc->ss_PBCH_BlockPower;
+ cfg->ssb_config.ss_pbch_power.tl.tag = NFAPI_NR_CONFIG_SS_PBCH_POWER_TAG;
+ cfg->num_tlv++;
- // SSB configuration
- cfg->ssb_config.ss_pbch_power.value = scc->ss_PBCH_BlockPower;
- cfg->ssb_config.ss_pbch_power.tl.tag = NFAPI_NR_CONFIG_SS_PBCH_POWER_TAG;
- cfg->num_tlv++;
+ cfg->ssb_config.bch_payload.value = 1;
+ cfg->ssb_config.bch_payload.tl.tag = NFAPI_NR_CONFIG_BCH_PAYLOAD_TAG;
+ cfg->num_tlv++;
- cfg->ssb_config.bch_payload.value = 1;
- cfg->ssb_config.bch_payload.tl.tag = NFAPI_NR_CONFIG_BCH_PAYLOAD_TAG;
- cfg->num_tlv++;
+ cfg->ssb_config.scs_common.value = *scc->ssbSubcarrierSpacing;
+ cfg->ssb_config.scs_common.tl.tag = NFAPI_NR_CONFIG_SCS_COMMON_TAG;
+ cfg->num_tlv++;
- cfg->ssb_config.scs_common.value = *scc->ssbSubcarrierSpacing;
- cfg->ssb_config.scs_common.tl.tag = NFAPI_NR_CONFIG_SCS_COMMON_TAG;
- cfg->num_tlv++;
+ // PRACH configuration
- // PRACH configuration
+ uint8_t nb_preambles = 64;
+ NR_RACH_ConfigCommon_t *rach_ConfigCommon = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup;
+ if (rach_ConfigCommon->totalNumberOfRA_Preambles != NULL)
+ nb_preambles = *rach_ConfigCommon->totalNumberOfRA_Preambles;
- uint8_t nb_preambles = 64;
- NR_RACH_ConfigCommon_t *rach_ConfigCommon = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup;
- if(rach_ConfigCommon->totalNumberOfRA_Preambles != NULL)
- nb_preambles = *rach_ConfigCommon->totalNumberOfRA_Preambles;
+ cfg->prach_config.prach_sequence_length.value = rach_ConfigCommon->prach_RootSequenceIndex.present - 1;
+ cfg->prach_config.prach_sequence_length.tl.tag = NFAPI_NR_CONFIG_PRACH_SEQUENCE_LENGTH_TAG;
+ cfg->num_tlv++;
- cfg->prach_config.prach_sequence_length.value = rach_ConfigCommon->prach_RootSequenceIndex.present-1;
- cfg->prach_config.prach_sequence_length.tl.tag = NFAPI_NR_CONFIG_PRACH_SEQUENCE_LENGTH_TAG;
- cfg->num_tlv++;
-
- if (rach_ConfigCommon->msg1_SubcarrierSpacing)
+ if (rach_ConfigCommon->msg1_SubcarrierSpacing)
cfg->prach_config.prach_sub_c_spacing.value = *rach_ConfigCommon->msg1_SubcarrierSpacing;
- else
+ else
cfg->prach_config.prach_sub_c_spacing.value = frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing;
- cfg->prach_config.prach_sub_c_spacing.tl.tag = NFAPI_NR_CONFIG_PRACH_SUB_C_SPACING_TAG;
- cfg->num_tlv++;
- cfg->prach_config.restricted_set_config.value = rach_ConfigCommon->restrictedSetConfig;
- cfg->prach_config.restricted_set_config.tl.tag = NFAPI_NR_CONFIG_RESTRICTED_SET_CONFIG_TAG;
- cfg->num_tlv++;
- cfg->prach_config.prach_ConfigurationIndex.value = rach_ConfigCommon->rach_ConfigGeneric.prach_ConfigurationIndex;
- cfg->prach_config.prach_ConfigurationIndex.tl.tag = NFAPI_NR_CONFIG_PRACH_CONFIG_INDEX_TAG;
- cfg->num_tlv++;
+ cfg->prach_config.prach_sub_c_spacing.tl.tag = NFAPI_NR_CONFIG_PRACH_SUB_C_SPACING_TAG;
+ cfg->num_tlv++;
+ cfg->prach_config.restricted_set_config.value = rach_ConfigCommon->restrictedSetConfig;
+ cfg->prach_config.restricted_set_config.tl.tag = NFAPI_NR_CONFIG_RESTRICTED_SET_CONFIG_TAG;
+ cfg->num_tlv++;
+ cfg->prach_config.prach_ConfigurationIndex.value = rach_ConfigCommon->rach_ConfigGeneric.prach_ConfigurationIndex;
+ cfg->prach_config.prach_ConfigurationIndex.tl.tag = NFAPI_NR_CONFIG_PRACH_CONFIG_INDEX_TAG;
+ cfg->num_tlv++;
- switch (rach_ConfigCommon->rach_ConfigGeneric.msg1_FDM) {
- case 0 :
+ switch (rach_ConfigCommon->rach_ConfigGeneric.msg1_FDM) {
+ case 0:
cfg->prach_config.num_prach_fd_occasions.value = 1;
break;
- case 1 :
+ case 1:
cfg->prach_config.num_prach_fd_occasions.value = 2;
break;
- case 2 :
+ case 2:
cfg->prach_config.num_prach_fd_occasions.value = 4;
break;
- case 3 :
+ case 3:
cfg->prach_config.num_prach_fd_occasions.value = 8;
break;
default:
- AssertFatal(1==0,"msg1 FDM identifier %ld undefined (0,1,2,3) \n", rach_ConfigCommon->rach_ConfigGeneric.msg1_FDM);
- }
- cfg->prach_config.num_prach_fd_occasions.tl.tag = NFAPI_NR_CONFIG_NUM_PRACH_FD_OCCASIONS_TAG;
- cfg->num_tlv++;
+ AssertFatal(1 == 0, "msg1 FDM identifier %ld undefined (0,1,2,3) \n", rach_ConfigCommon->rach_ConfigGeneric.msg1_FDM);
+ }
+ cfg->prach_config.num_prach_fd_occasions.tl.tag = NFAPI_NR_CONFIG_NUM_PRACH_FD_OCCASIONS_TAG;
+ cfg->num_tlv++;
- cfg->prach_config.prach_ConfigurationIndex.value = rach_ConfigCommon->rach_ConfigGeneric.prach_ConfigurationIndex;
- cfg->prach_config.prach_ConfigurationIndex.tl.tag = NFAPI_NR_CONFIG_PRACH_CONFIG_INDEX_TAG;
- cfg->num_tlv++;
+ cfg->prach_config.prach_ConfigurationIndex.value = rach_ConfigCommon->rach_ConfigGeneric.prach_ConfigurationIndex;
+ cfg->prach_config.prach_ConfigurationIndex.tl.tag = NFAPI_NR_CONFIG_PRACH_CONFIG_INDEX_TAG;
+ cfg->num_tlv++;
- cfg->prach_config.num_prach_fd_occasions_list = (nfapi_nr_num_prach_fd_occasions_t *) malloc(cfg->prach_config.num_prach_fd_occasions.value*sizeof(nfapi_nr_num_prach_fd_occasions_t));
- for (int i=0; iprach_config.num_prach_fd_occasions.value; i++) {
+ cfg->prach_config.num_prach_fd_occasions_list = (nfapi_nr_num_prach_fd_occasions_t *)malloc(
+ cfg->prach_config.num_prach_fd_occasions.value * sizeof(nfapi_nr_num_prach_fd_occasions_t));
+ for (int i = 0; i < cfg->prach_config.num_prach_fd_occasions.value; i++) {
nfapi_nr_num_prach_fd_occasions_t *prach_fd_occasion = &cfg->prach_config.num_prach_fd_occasions_list[i];
// prach_fd_occasion->num_prach_fd_occasions = i;
if (cfg->prach_config.prach_sequence_length.value)
- prach_fd_occasion->prach_root_sequence_index.value = rach_ConfigCommon->prach_RootSequenceIndex.choice.l139;
+ prach_fd_occasion->prach_root_sequence_index.value = rach_ConfigCommon->prach_RootSequenceIndex.choice.l139;
else
prach_fd_occasion->prach_root_sequence_index.value = rach_ConfigCommon->prach_RootSequenceIndex.choice.l839;
prach_fd_occasion->prach_root_sequence_index.tl.tag = NFAPI_NR_CONFIG_PRACH_ROOT_SEQUENCE_INDEX_TAG;
cfg->num_tlv++;
- prach_fd_occasion->k1.value = NRRIV2PRBOFFSET(scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE) +
- rach_ConfigCommon->rach_ConfigGeneric.msg1_FrequencyStart +
- (get_N_RA_RB(cfg->prach_config.prach_sub_c_spacing.value, frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing ) * i);
+ prach_fd_occasion->k1.value =
+ NRRIV2PRBOFFSET(scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE)
+ + rach_ConfigCommon->rach_ConfigGeneric.msg1_FrequencyStart
+ + (get_N_RA_RB(cfg->prach_config.prach_sub_c_spacing.value,
+ frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing)
+ * i);
if (get_softmodem_params()->sa) {
- prach_fd_occasion->k1.value = NRRIV2PRBOFFSET(scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE) +
- rach_ConfigCommon->rach_ConfigGeneric.msg1_FrequencyStart +
- (get_N_RA_RB(cfg->prach_config.prach_sub_c_spacing.value, frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing ) * i);
+ prach_fd_occasion->k1.value =
+ NRRIV2PRBOFFSET(scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE)
+ + rach_ConfigCommon->rach_ConfigGeneric.msg1_FrequencyStart
+ + (get_N_RA_RB(cfg->prach_config.prach_sub_c_spacing.value,
+ frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing)
+ * i);
} else {
- prach_fd_occasion->k1.value = rach_ConfigCommon->rach_ConfigGeneric.msg1_FrequencyStart +
- (get_N_RA_RB(cfg->prach_config.prach_sub_c_spacing.value, frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing ) * i);
+ prach_fd_occasion->k1.value = rach_ConfigCommon->rach_ConfigGeneric.msg1_FrequencyStart
+ + (get_N_RA_RB(cfg->prach_config.prach_sub_c_spacing.value,
+ frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing)
+ * i);
}
prach_fd_occasion->k1.tl.tag = NFAPI_NR_CONFIG_K1_TAG;
cfg->num_tlv++;
prach_fd_occasion->prach_zero_corr_conf.value = rach_ConfigCommon->rach_ConfigGeneric.zeroCorrelationZoneConfig;
prach_fd_occasion->prach_zero_corr_conf.tl.tag = NFAPI_NR_CONFIG_PRACH_ZERO_CORR_CONF_TAG;
cfg->num_tlv++;
- prach_fd_occasion->num_root_sequences.value = compute_nr_root_seq(rach_ConfigCommon,
- nb_preambles,
- frame_type,
- frequency_range);
+ prach_fd_occasion->num_root_sequences.value = compute_nr_root_seq(rach_ConfigCommon, nb_preambles, frame_type, frequency_range);
prach_fd_occasion->num_root_sequences.tl.tag = NFAPI_NR_CONFIG_NUM_ROOT_SEQUENCES_TAG;
cfg->num_tlv++;
- prach_fd_occasion->num_unused_root_sequences.value = 1;
- }
+ prach_fd_occasion->num_unused_root_sequences.tl.tag = NFAPI_NR_CONFIG_NUM_UNUSED_ROOT_SEQUENCES_TAG;
+ prach_fd_occasion->num_unused_root_sequences.value = 0;
+ cfg->num_tlv++;
+ }
- cfg->prach_config.ssb_per_rach.value = rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present-1;
- cfg->prach_config.ssb_per_rach.tl.tag = NFAPI_NR_CONFIG_SSB_PER_RACH_TAG;
- cfg->num_tlv++;
+ cfg->prach_config.ssb_per_rach.value = rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present - 1;
+ cfg->prach_config.ssb_per_rach.tl.tag = NFAPI_NR_CONFIG_SSB_PER_RACH_TAG;
+ cfg->num_tlv++;
- // SSB Table Configuration
-
- cfg->ssb_table.ssb_offset_point_a.value =
- get_ssb_offset_to_pointA(*scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB,
- scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA,
- *scc->ssbSubcarrierSpacing,
- frequency_range);
- cfg->ssb_table.ssb_offset_point_a.tl.tag = NFAPI_NR_CONFIG_SSB_OFFSET_POINT_A_TAG;
- cfg->num_tlv++;
- cfg->ssb_table.ssb_period.value = *scc->ssb_periodicityServingCell;
- cfg->ssb_table.ssb_period.tl.tag = NFAPI_NR_CONFIG_SSB_PERIOD_TAG;
- cfg->num_tlv++;
- cfg->ssb_table.ssb_subcarrier_offset.value =
- get_ssb_subcarrier_offset(*scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB,
- scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA);
- cfg->ssb_table.ssb_subcarrier_offset.tl.tag = NFAPI_NR_CONFIG_SSB_SUBCARRIER_OFFSET_TAG;
- cfg->num_tlv++;
+ // SSB Table Configuration
- nrmac->ssb_SubcarrierOffset = cfg->ssb_table.ssb_subcarrier_offset.value;
- nrmac->ssb_OffsetPointA = cfg->ssb_table.ssb_offset_point_a.value;
- LOG_I(NR_MAC,
- "ssb_OffsetPointA %d, ssb_SubcarrierOffset %d\n",
- cfg->ssb_table.ssb_offset_point_a.value,
- cfg->ssb_table.ssb_subcarrier_offset.value);
+ cfg->ssb_table.ssb_offset_point_a.value =
+ get_ssb_offset_to_pointA(*scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB,
+ scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA,
+ *scc->ssbSubcarrierSpacing,
+ frequency_range);
+ cfg->ssb_table.ssb_offset_point_a.tl.tag = NFAPI_NR_CONFIG_SSB_OFFSET_POINT_A_TAG;
+ cfg->num_tlv++;
+ cfg->ssb_table.ssb_period.value = *scc->ssb_periodicityServingCell;
+ cfg->ssb_table.ssb_period.tl.tag = NFAPI_NR_CONFIG_SSB_PERIOD_TAG;
+ cfg->num_tlv++;
+ cfg->ssb_table.ssb_subcarrier_offset.value =
+ get_ssb_subcarrier_offset(*scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB,
+ scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA);
+ cfg->ssb_table.ssb_subcarrier_offset.tl.tag = NFAPI_NR_CONFIG_SSB_SUBCARRIER_OFFSET_TAG;
+ cfg->num_tlv++;
- switch (scc->ssb_PositionsInBurst->present) {
- case 1 :
+ nrmac->ssb_SubcarrierOffset = cfg->ssb_table.ssb_subcarrier_offset.value;
+ nrmac->ssb_OffsetPointA = cfg->ssb_table.ssb_offset_point_a.value;
+ LOG_I(NR_MAC,
+ "ssb_OffsetPointA %d, ssb_SubcarrierOffset %d\n",
+ cfg->ssb_table.ssb_offset_point_a.value,
+ cfg->ssb_table.ssb_subcarrier_offset.value);
+
+ switch (scc->ssb_PositionsInBurst->present) {
+ case 1:
cfg->ssb_table.ssb_mask_list[0].ssb_mask.value = scc->ssb_PositionsInBurst->choice.shortBitmap.buf[0] << 24;
cfg->ssb_table.ssb_mask_list[1].ssb_mask.value = 0;
break;
- case 2 :
- cfg->ssb_table.ssb_mask_list[0].ssb_mask.value = ((uint32_t) scc->ssb_PositionsInBurst->choice.mediumBitmap.buf[0]) << 24;
+ case 2:
+ cfg->ssb_table.ssb_mask_list[0].ssb_mask.value = ((uint32_t)scc->ssb_PositionsInBurst->choice.mediumBitmap.buf[0]) << 24;
cfg->ssb_table.ssb_mask_list[1].ssb_mask.value = 0;
break;
- case 3 :
+ case 3:
cfg->ssb_table.ssb_mask_list[0].ssb_mask.value = 0;
cfg->ssb_table.ssb_mask_list[1].ssb_mask.value = 0;
- for (int i=0; i<4; i++) {
- cfg->ssb_table.ssb_mask_list[0].ssb_mask.value += (uint32_t) scc->ssb_PositionsInBurst->choice.longBitmap.buf[3 - i] << i * 8;
- cfg->ssb_table.ssb_mask_list[1].ssb_mask.value += (uint32_t) scc->ssb_PositionsInBurst->choice.longBitmap.buf[7 - i] << i * 8;
+ for (int i = 0; i < 4; i++) {
+ cfg->ssb_table.ssb_mask_list[0].ssb_mask.value += (uint32_t)scc->ssb_PositionsInBurst->choice.longBitmap.buf[3 - i]
+ << i * 8;
+ cfg->ssb_table.ssb_mask_list[1].ssb_mask.value += (uint32_t)scc->ssb_PositionsInBurst->choice.longBitmap.buf[7 - i]
+ << i * 8;
}
break;
default:
- AssertFatal(1==0,"SSB bitmap size value %d undefined (allowed values 1,2,3) \n", scc->ssb_PositionsInBurst->present);
- }
+ AssertFatal(1 == 0, "SSB bitmap size value %d undefined (allowed values 1,2,3) \n", scc->ssb_PositionsInBurst->present);
+ }
- cfg->ssb_table.ssb_mask_list[0].ssb_mask.tl.tag = NFAPI_NR_CONFIG_SSB_MASK_TAG;
- cfg->ssb_table.ssb_mask_list[1].ssb_mask.tl.tag = NFAPI_NR_CONFIG_SSB_MASK_TAG;
- cfg->num_tlv+=2;
+ cfg->ssb_table.ssb_mask_list[0].ssb_mask.tl.tag = NFAPI_NR_CONFIG_SSB_MASK_TAG;
+ cfg->ssb_table.ssb_mask_list[1].ssb_mask.tl.tag = NFAPI_NR_CONFIG_SSB_MASK_TAG;
+ cfg->num_tlv += 2;
- // logical antenna ports
- cfg->carrier_config.num_tx_ant.value = pdsch_AntennaPorts;
- AssertFatal(pdsch_AntennaPorts > 0 && pdsch_AntennaPorts < 33, "pdsch_AntennaPorts in 1...32\n");
- cfg->carrier_config.num_tx_ant.tl.tag = NFAPI_NR_CONFIG_NUM_TX_ANT_TAG;
+ // logical antenna ports
+ cfg->carrier_config.num_tx_ant.value = pdsch_AntennaPorts;
+ AssertFatal(pdsch_AntennaPorts > 0 && pdsch_AntennaPorts < 33, "pdsch_AntennaPorts in 1...32\n");
+ cfg->carrier_config.num_tx_ant.tl.tag = NFAPI_NR_CONFIG_NUM_TX_ANT_TAG;
- int num_ssb=0;
- for (int i=0;i<32;i++) {
+ int num_ssb = 0;
+ for (int i = 0; i < 32; i++) {
cfg->ssb_table.ssb_beam_id_list[i].beam_id.tl.tag = NFAPI_NR_CONFIG_BEAM_ID_TAG;
- if ((cfg->ssb_table.ssb_mask_list[0].ssb_mask.value>>(31-i))&1) {
+ if ((cfg->ssb_table.ssb_mask_list[0].ssb_mask.value >> (31 - i)) & 1) {
cfg->ssb_table.ssb_beam_id_list[i].beam_id.value = num_ssb;
num_ssb++;
}
cfg->num_tlv++;
- }
- for (int i=0;i<32;i++) {
- cfg->ssb_table.ssb_beam_id_list[32+i].beam_id.tl.tag = NFAPI_NR_CONFIG_BEAM_ID_TAG;
- if ((cfg->ssb_table.ssb_mask_list[1].ssb_mask.value>>(31-i))&1) {
- cfg->ssb_table.ssb_beam_id_list[32+i].beam_id.value = num_ssb;
+ }
+ for (int i = 0; i < 32; i++) {
+ cfg->ssb_table.ssb_beam_id_list[32 + i].beam_id.tl.tag = NFAPI_NR_CONFIG_BEAM_ID_TAG;
+ if ((cfg->ssb_table.ssb_mask_list[1].ssb_mask.value >> (31 - i)) & 1) {
+ cfg->ssb_table.ssb_beam_id_list[32 + i].beam_id.value = num_ssb;
num_ssb++;
}
cfg->num_tlv++;
- }
+ }
- cfg->carrier_config.num_rx_ant.value = pusch_AntennaPorts;
- AssertFatal(pusch_AntennaPorts > 0 && pusch_AntennaPorts < 13, "pusch_AntennaPorts in 1...12\n");
- cfg->carrier_config.num_rx_ant.tl.tag = NFAPI_NR_CONFIG_NUM_RX_ANT_TAG;
- LOG_I(NR_MAC,"Set RX antenna number to %d, Set TX antenna number to %d (num ssb %d: %x,%x)\n",
- cfg->carrier_config.num_tx_ant.value,cfg->carrier_config.num_rx_ant.value,num_ssb,cfg->ssb_table.ssb_mask_list[0].ssb_mask.value,cfg->ssb_table.ssb_mask_list[1].ssb_mask.value);
- AssertFatal(cfg->carrier_config.num_tx_ant.value > 0,"carrier_config.num_tx_ant.value %d !\n",cfg->carrier_config.num_tx_ant.value );
- cfg->num_tlv++;
- cfg->num_tlv++;
+ cfg->carrier_config.num_rx_ant.value = pusch_AntennaPorts;
+ AssertFatal(pusch_AntennaPorts > 0 && pusch_AntennaPorts < 13, "pusch_AntennaPorts in 1...12\n");
+ cfg->carrier_config.num_rx_ant.tl.tag = NFAPI_NR_CONFIG_NUM_RX_ANT_TAG;
+ LOG_I(NR_MAC,
+ "Set RX antenna number to %d, Set TX antenna number to %d (num ssb %d: %x,%x)\n",
+ cfg->carrier_config.num_tx_ant.value,
+ cfg->carrier_config.num_rx_ant.value,
+ num_ssb,
+ cfg->ssb_table.ssb_mask_list[0].ssb_mask.value,
+ cfg->ssb_table.ssb_mask_list[1].ssb_mask.value);
+ AssertFatal(cfg->carrier_config.num_tx_ant.value > 0,
+ "carrier_config.num_tx_ant.value %d !\n",
+ cfg->carrier_config.num_tx_ant.value);
+ cfg->num_tlv++;
+ cfg->num_tlv++;
- // TDD Table Configuration
- if (cfg->cell_config.frame_duplex_type.value == TDD){
+ // TDD Table Configuration
+ if (cfg->cell_config.frame_duplex_type.value == TDD) {
cfg->tdd_table.tdd_period.tl.tag = NFAPI_NR_CONFIG_TDD_PERIOD_TAG;
cfg->num_tlv++;
if (scc->tdd_UL_DL_ConfigurationCommon->pattern1.ext1 == NULL) {
cfg->tdd_table.tdd_period.value = scc->tdd_UL_DL_ConfigurationCommon->pattern1.dl_UL_TransmissionPeriodicity;
} else {
AssertFatal(scc->tdd_UL_DL_ConfigurationCommon->pattern1.ext1->dl_UL_TransmissionPeriodicity_v1530 != NULL,
- "In %s: scc->tdd_UL_DL_ConfigurationCommon->pattern1.ext1->dl_UL_TransmissionPeriodicity_v1530 is null\n", __FUNCTION__);
+ "In %s: scc->tdd_UL_DL_ConfigurationCommon->pattern1.ext1->dl_UL_TransmissionPeriodicity_v1530 is null\n",
+ __FUNCTION__);
cfg->tdd_table.tdd_period.value = *scc->tdd_UL_DL_ConfigurationCommon->pattern1.ext1->dl_UL_TransmissionPeriodicity_v1530;
}
LOG_I(NR_MAC, "Setting TDD configuration period to %d\n", cfg->tdd_table.tdd_period.value);
@@ -410,12 +429,12 @@ static void config_common(gNB_MAC_INST *nrmac, int pdsch_AntennaPorts, int pusch
scc->tdd_UL_DL_ConfigurationCommon->pattern1.nrofUplinkSymbols);
if (periods_per_frame < 0)
- LOG_E(NR_MAC,"TDD configuration can not be done\n");
+ LOG_E(NR_MAC, "TDD configuration can not be done\n");
else {
- LOG_I(NR_MAC,"TDD has been properly configurated\n");
- nrmac->tdd_beam_association = (int16_t *)malloc16(periods_per_frame*sizeof(int16_t));
+ LOG_I(NR_MAC, "TDD has been properly configurated\n");
+ nrmac->tdd_beam_association = (int16_t *)malloc16(periods_per_frame * sizeof(int16_t));
}
- }
+ }
}
int nr_mac_enable_ue_rrc_processing_timer(module_id_t Mod_idP, rnti_t rnti, NR_SubcarrierSpacing_t subcarrierSpacing, uint32_t rrc_reconfiguration_delay)