Resolved UE building error and updated packing of P7 messages

This commit is contained in:
Mahesh
2020-10-07 15:01:40 +05:30
parent 0531e27c7a
commit ff64d6ac10
28 changed files with 952 additions and 820 deletions
@@ -126,6 +126,8 @@ typedef struct {
#define NFAPI_SFNSLOT2SFN(_sfnslot) ((_sfnslot) >> 6)
#define NFAPI_SFNSLOT2SLOT(_sfnslot) ((_sfnslot) & 0x3F)
#define NFAPI_SFNSLOTDEC2SFN(_sfnslot_dec) ((_sfnslot_dec) / 20)
#define NFAPI_SFNSLOTDEC2SLOT(_sfnslot_dec) ((_sfnslot_dec) % 20)
#define NFAPI_MAX_SFNSLOTDEC 1024*20 // 20 is for numerology 1
@@ -1123,6 +1125,7 @@ typedef struct {
uint32_t error_code;
nfapi_pnf_param_general_t pnf_param_general;
nfapi_pnf_phy_t pnf_phy;
/*
nfapi_pnf_rf_t pnf_rf;
nfapi_pnf_phy_rel10_t pnf_phy_rel10;
nfapi_pnf_phy_rel11_t pnf_phy_rel11;
@@ -1130,11 +1133,13 @@ typedef struct {
nfapi_pnf_phy_rel13_t pnf_phy_rel13;
nfapi_pnf_phy_rel13_nb_iot_t pnf_phy_rel13_nb_iot;
nfapi_pnf_phy_rel15_t pnf_phy_rel15;
*/
nfapi_vendor_extension_tlv_t vendor_extension;
} nfapi_pnf_param_response_t;
typedef struct {
nfapi_p4_p5_message_header_t header;
uint8_t num_tlvs;
nfapi_pnf_phy_rf_config_t pnf_phy_rf_config;
nfapi_vendor_extension_tlv_t vendor_extension;
} nfapi_pnf_config_request_t;
@@ -2495,7 +2500,8 @@ typedef struct {
typedef struct {
nfapi_p7_message_header_t header;
uint32_t t1;
int32_t delta_sfn_sf;
//int32_t delta_sfn_sf;
int32_t delta_sfn_slot;
nfapi_vendor_extension_tlv_t vendor_extension;
} nfapi_dl_node_sync_t;
@@ -3708,22 +3714,30 @@ typedef struct
nfapi_ipv4_address_t p7_pnf_address_ipv4;
nfapi_ipv6_address_t p7_pnf_address_ipv6;
nfapi_uint16_tlv_t p7_pnf_port;
nfapi_uint8_tlv_t timing_window; //Value: 0 → 30,000 microseconds
nfapi_uint8_tlv_t timing_info_mode;
nfapi_uint8_tlv_t timing_info_period;
nfapi_uint32_tlv_t dl_tti_timing_offset;
nfapi_uint32_tlv_t ul_tti_timing_offset;
nfapi_uint32_tlv_t ul_dci_timing_offset;
nfapi_uint32_tlv_t tx_data_timing_offset;
// // These TLVs are used to setup the transport connection between VNF and PNF
// These TLVs are used to setup the transport connection between VNF and PNF
/*
nfapi_uint8_tlv_t dl_ue_per_sf;
nfapi_uint8_tlv_t ul_ue_per_sf;
// These TLVs are used by PNF to report its RF capabilities to the VNF software
nfapi_rf_bands_t rf_bands;
*/
// These TLVs are used by the VNF to configure the synchronization with the PNF.
nfapi_uint8_tlv_t timing_window;
nfapi_uint8_tlv_t timing_info_mode;
nfapi_uint8_tlv_t timing_info_period;
// These TLVs are used by the VNF to configure the RF in the PNF
nfapi_uint16_tlv_t max_transmit_power;
nfapi_uint32_tlv_t nrarfcn;
//nfapi_uint16_tlv_t max_transmit_power;
//nfapi_uint32_tlv_t nrarfcn;
// nfapi_nmm_frequency_bands_t nmm_gsm_frequency_bands;
// nfapi_nmm_frequency_bands_t nmm_umts_frequency_bands;
@@ -23,28 +23,31 @@
//These TLVs are used exclusively by nFAPI
#define NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV4_TAG 0x0100
#define NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV6_TAG 0x0101
#define NFAPI_NR_NFAPI_P7_VNF_PORT_TAG 0x0102
#define NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV4_TAG 0x0103
#define NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV6_TAG 0x0104
#define NFAPI_NR_NFAPI_P7_PNF_PORT_TAG 0x0105
#define NFAPI_NR_NFAPI_DL_TTI_TIMING_OFFSET 0x0106
#define NFAPI_NR_NFAPI_UL_TTI_TIMING_OFFSET 0x0107
#define NFAPI_NR_NFAPI_UL_DCI_TIMING_OFFSET 0x0108
#define NFAPI_NR_NFAPI_TX_DATA_TIMING_OFFSET 0x0109
#define NFAPI_NR_NFAPI_TIMING_WINDOW_TAG 0x011E
#define NFAPI_NR_NFAPI_TIMING_INFO_MODE_TAG 0x011F
#define NFAPI_NR_NFAPI_TIMING_INFO_PERIOD_TAG 0x0120
#define NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV4_TAG 0x5100
#define NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV6_TAG 0x5101
#define NFAPI_NR_NFAPI_P7_VNF_PORT_TAG 0x5102
#define NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV4_TAG 0x5103
#define NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV6_TAG 0x5104
#define NFAPI_NR_NFAPI_P7_PNF_PORT_TAG 0x5105
/*
#define NFAPI_NR_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG 0x510A
#define NFAPI_NR_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG 0x510B
#define NFAPI_NR_NFAPI_RF_BANDS_TAG 0x5114
#define NFAPI_NR_NFAPI_TIMING_WINDOW_TAG 0x511E
#define NFAPI_NR_NFAPI_TIMING_INFO_MODE_TAG 0x511F
#define NFAPI_NR_NFAPI_TIMING_INFO_PERIOD_TAG 0x5120
#define NFAPI_NR_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG 0x5128
#define NFAPI_NR_NFAPI_NRARFCN_TAG 0x5129
#define NFAPI_NR_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG 0x5130
#define NFAPI_NR_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG 0x5131
#define NFAPI_NR_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG 0x5132
#define NFAPI_NR_NFAPI_NMM_UPLINK_RSSI_SUPPORTED_TAG 0x5133
*/
// P5 Message Structures
typedef struct {
@@ -290,7 +293,7 @@ typedef enum {
typedef enum {
NFAPI_NR_CCE_REG_MAPPING_INTERLEAVED=0,
NFAPI_NR_CCE_REG_MAPPING_NON_INTERLEAVED
NFAPI_NR_CCE_REG_MAPPING_NON_INTERLEAVED=1
} nfapi_nr_cce_reg_mapping_type_e;
typedef enum {
@@ -24,13 +24,6 @@
#define NFAPI_MAX_NUM_GROUPS 8
#define NFAPI_MAX_NUM_CB 8
#define NFAPI_NR_DL_TTI_CSI_RS_REL_IISC 0x5551
#define NFAPI_NR_DL_TTI_PDCCH_REL_IISC 0x5552
#define NFAPI_NR_DL_TTI_PDSCH_REL_IISC 0x5553
#define NFAPI_NR_DL_TTI_SSB_REL_IISC 0x5554
#define NFAPI_NR_UL_TTI_PDU_LIST_REL_IISC 0x5555
#define NFAPI_NR_UL_TTI_GROUP_LIST_REL_IISC 0x5555
// Extension to the generic structures for single tlv values
@@ -730,7 +723,7 @@ typedef struct {
///Granularity of precoding [TS38.211 sec 7.3.2.2] Field Type Description 0: sameAsRegBundle 1: allContiguousRBs
uint8_t precoderGranularity;
///Number of DCIs in this CORESET.Value: 0->MaxDciPerSlot
uint16_t numDlDci;
volatile uint16_t numDlDci;
///The RNTI used for identifying the UE when receiving the PDU Value: 1 -> 65535.
uint16_t RNTI[MAX_DCI_CORESET];
///For a UE-specific search space it equals the higher-layer parameter PDCCH-DMRSScrambling-ID if configured, otherwise it should be set to the phy cell ID. [TS38.211, sec 7.3.2.3] Value: 0->65535
@@ -993,6 +986,7 @@ typedef struct {
} nfapi_nr_dl_tti_request_pdu_t;
#define NFAPI_NR_MAX_DL_TTI_PDUS 32
/*
typedef struct {
/// Number of PDUs that are included in this message. All PDUs in the message are numbered in order. Value 0 -> 255
uint8_t nPDUs;
@@ -1005,14 +999,25 @@ typedef struct {
/// This value is an index for number of PDU identified by nPDU in this message Value: 0 -> 255
uint8_t PduIdx[256][12];
} nfapi_nr_dl_tti_request_body_t;
*/
typedef struct {
nfapi_p7_message_header_t header;
/// System Frame Number (0-1023)
uint16_t SFN;
/// Slot number (0-319)
/// Slot number (0-19)
uint16_t Slot;
nfapi_nr_dl_tti_request_body_t dl_tti_request_body;
/// Number of PDUs that are included in this message. All PDUs in the message are numbered in order. Value 0 -> 255
uint8_t nPDUs;
/// Number of UEs in the Group included in this message. Value 0 -> 255
uint8_t nGroup;
/// List containing PDUs
nfapi_nr_dl_tti_request_pdu_t dl_tti_pdu_list[NFAPI_NR_MAX_DL_TTI_PDUS];
//nfapi_nr_dl_tti_request_pdu_t *dl_tti_pdu_list;
/// Number of UE in this group. For SU-MIMO, one group includes one UE only. For MU-MIMO, one group includes up to 12 UEs. Value 1 -> 12
uint8_t nUe[256];
/// This value is an index for number of PDU identified by nPDU in this message Value: 0 -> 255
uint8_t PduIdx[256][12];
nfapi_vendor_extension_tlv_t vendor_extension;
} nfapi_nr_dl_tti_request_t;
+27 -22
View File
@@ -244,12 +244,14 @@ static uint8_t pack_pnf_param_response(void *msg, uint8_t **ppWritePackedMsg, ui
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_tlv(NFAPI_PNF_RF_TAG, &pNfapiMsg->pnf_rf, ppWritePackedMsg, end, &pack_pnf_rf_value) &&
pack_tlv(NFAPI_PNF_PHY_REL10_TAG, &pNfapiMsg->pnf_phy_rel10, ppWritePackedMsg, end, &pack_pnf_phy_rel10_value) &&
pack_tlv(NFAPI_PNF_PHY_REL11_TAG, &pNfapiMsg->pnf_phy_rel11, ppWritePackedMsg, end, &pack_pnf_phy_rel11_value) &&
pack_tlv(NFAPI_PNF_PHY_REL12_TAG, &pNfapiMsg->pnf_phy_rel12, ppWritePackedMsg, end, &pack_pnf_phy_rel12_value) &&
pack_tlv(NFAPI_PNF_PHY_REL13_TAG, &pNfapiMsg->pnf_phy_rel13, ppWritePackedMsg, end, &pack_pnf_phy_rel13_value) &&
pack_tlv(NFAPI_PNF_PHY_REL13_NB_IOT_TAG, &pNfapiMsg->pnf_phy_rel13_nb_iot, ppWritePackedMsg, end, &pack_pnf_phy_rel13_nb_iot_value) &&
*/
pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
}
@@ -275,8 +277,9 @@ static uint8_t pack_pnf_phy_rf_config_value(void *tlv, uint8_t **ppWritePackedMs
static uint8_t pack_pnf_config_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t* config)
{
nfapi_pnf_config_request_t *pNfapiMsg = (nfapi_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) &&
pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end , config));
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));
}
@@ -574,18 +577,16 @@ static uint8_t pack_param_response(void *msg, uint8_t **ppWritePackedMsg, uint8_
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_tlv(NFAPI_NR_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG, &(pNfapiMsg->nfapi_config.dl_ue_per_sf), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
pack_tlv(NFAPI_NR_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG, &(pNfapiMsg->nfapi_config.ul_ue_per_sf), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
pack_tlv(NFAPI_NR_NFAPI_RF_BANDS_TAG, &(pNfapiMsg->nfapi_config.rf_bands), ppWritePackedMsg, end, &pack_rf_bands_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_tlv(NFAPI_NR_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG, &(pNfapiMsg->nfapi_config.max_transmit_power), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
*/
// vendor extension:
pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
@@ -750,20 +751,20 @@ static uint8_t pack_config_request(void *msg, uint8_t **ppWritePackedMsg, uint8_
pack_tlv(NFAPI_NR_CONFIG_TDD_PERIOD_TAG, &(pNfapiMsg->tdd_table.tdd_period), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
pack_tlv(NFAPI_NR_CONFIG_SLOT_CONFIG_TAG, &(pNfapiMsg->tdd_table.max_tdd_periodicity_list[0].max_num_of_symbol_per_slot_list[0].slot_config), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
pack_tlv(NFAPI_NR_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG, &(pNfapiMsg->nfapi_config.dl_ue_per_sf), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
pack_tlv(NFAPI_NR_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG, &(pNfapiMsg->nfapi_config.max_transmit_power), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
pack_tlv(NFAPI_NR_NFAPI_NRARFCN_TAG, &(pNfapiMsg->nfapi_config.nrarfcn), ppWritePackedMsg, end, &pack_uint32_tlv_value) &&
//pack_tlv(NFAPI_NR_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG, &(pNfapiMsg->nfapi_config.dl_ue_per_sf), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
//pack_tlv(NFAPI_NR_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG, &(pNfapiMsg->nfapi_config.max_transmit_power), ppWritePackedMsg, end, &pack_uint16_tlv_value) &&
//pack_tlv(NFAPI_NR_NFAPI_NRARFCN_TAG, &(pNfapiMsg->nfapi_config.nrarfcn), ppWritePackedMsg, end, &pack_uint32_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_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_RF_BANDS_TAG, &(pNfapiMsg->nfapi_config.rf_bands), ppWritePackedMsg, end, &pack_rf_bands_value) &&
//pack_tlv(NFAPI_NR_NFAPI_RF_BANDS_TAG, &(pNfapiMsg->nfapi_config.rf_bands), ppWritePackedMsg, end, &pack_rf_bands_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_tlv(NFAPI_NR_NFAPI_TIMING_WINDOW_TAG, &(pNfapiMsg->nfapi_config.timing_window), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
pack_tlv(NFAPI_NR_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG, &(pNfapiMsg->nfapi_config.ul_ue_per_sf), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
//pack_tlv(NFAPI_NR_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG, &(pNfapiMsg->nfapi_config.ul_ue_per_sf), ppWritePackedMsg, end, &pack_uint8_tlv_value) &&
pack_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config) );
@@ -1350,12 +1351,14 @@ static uint8_t unpack_pnf_param_response(uint8_t **ppReadPackedMsg, uint8_t *end
{
{ 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_RF_TAG, &pNfapiMsg->pnf_rf, &unpack_pnf_rf_value},
{ NFAPI_PNF_PHY_REL10_TAG, &pNfapiMsg->pnf_phy_rel10, &unpack_pnf_phy_rel10_value},
{ NFAPI_PNF_PHY_REL11_TAG, &pNfapiMsg->pnf_phy_rel11, &unpack_pnf_phy_rel11_value},
{ NFAPI_PNF_PHY_REL12_TAG, &pNfapiMsg->pnf_phy_rel12, &unpack_pnf_phy_rel12_value},
{ NFAPI_PNF_PHY_REL13_TAG, &pNfapiMsg->pnf_phy_rel13, &unpack_pnf_phy_rel13_value},
{ NFAPI_PNF_PHY_REL13_NB_IOT_TAG, &pNfapiMsg->pnf_phy_rel13_nb_iot, &unpack_pnf_phy_rel13_nb_iot_value},
*/
};
return ( pull32(ppReadPackedMsg, &pNfapiMsg->error_code, end) &&
@@ -1538,13 +1541,15 @@ static uint8_t unpack_param_response(uint8_t **ppReadPackedMsg, uint8_t *end, vo
{ 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_DOWNLINK_UES_PER_SUBFRAME_TAG, &pNfapiMsg->nfapi_config.dl_ue_per_sf, &unpack_uint8_tlv_value},
{ NFAPI_NR_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG, &pNfapiMsg->nfapi_config.ul_ue_per_sf, &unpack_uint8_tlv_value},
{ NFAPI_NR_NFAPI_RF_BANDS_TAG, &pNfapiMsg->nfapi_config.rf_bands, &unpack_rf_bands_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_DOWNLINK_UES_PER_SUBFRAME_TAG, &pNfapiMsg->nfapi_config.dl_ue_per_sf, &unpack_uint8_tlv_value},
{ NFAPI_NR_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG, &pNfapiMsg->nfapi_config.ul_ue_per_sf, &unpack_uint8_tlv_value},
{ NFAPI_NR_NFAPI_RF_BANDS_TAG, &pNfapiMsg->nfapi_config.rf_bands, &unpack_rf_bands_value},
{ NFAPI_NR_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG, &pNfapiMsg->nfapi_config.max_transmit_power, &unpack_uint16_tlv_value}
*/
};
#if LTE
{ NFAPI_L1_STATUS_PHY_STATE_TAG, &pNfapiMsg->l1_status.phy_state, &unpack_uint16_tlv_value},
@@ -1695,20 +1700,20 @@ static uint8_t unpack_config_request(uint8_t **ppReadPackedMsg, uint8_t *end, vo
{ NFAPI_NR_CONFIG_SSB_SUBCARRIER_OFFSET_TAG, &(pNfapiMsg->ssb_table.ssb_subcarrier_offset), &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_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG, &(pNfapiMsg->nfapi_config.dl_ue_per_sf), &unpack_uint8_tlv_value},
{ NFAPI_NR_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG, &(pNfapiMsg->nfapi_config.max_transmit_power), &unpack_uint16_tlv_value},
{ NFAPI_NR_NFAPI_NRARFCN_TAG, &(pNfapiMsg->nfapi_config.nrarfcn), &unpack_uint32_tlv_value},
//{ NFAPI_NR_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG, &(pNfapiMsg->nfapi_config.dl_ue_per_sf), &unpack_uint8_tlv_value},
//{ NFAPI_NR_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG, &(pNfapiMsg->nfapi_config.max_transmit_power), &unpack_uint16_tlv_value},
//{ NFAPI_NR_NFAPI_NRARFCN_TAG, &(pNfapiMsg->nfapi_config.nrarfcn), &unpack_uint32_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_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_RF_BANDS_TAG, &(pNfapiMsg->nfapi_config.rf_bands), &unpack_rf_bands_value},
//{ NFAPI_NR_NFAPI_RF_BANDS_TAG, &(pNfapiMsg->nfapi_config.rf_bands), &unpack_rf_bands_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_TIMING_WINDOW_TAG, &(pNfapiMsg->nfapi_config.timing_window), &unpack_uint8_tlv_value},
{ NFAPI_NR_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG, &(pNfapiMsg->nfapi_config.ul_ue_per_sf), &unpack_uint8_tlv_value},
//{ NFAPI_NR_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG, &(pNfapiMsg->nfapi_config.ul_ue_per_sf), &unpack_uint8_tlv_value},
};
#if LTE
{
+229 -468
View File
@@ -284,17 +284,17 @@ static uint8_t pack_dl_tti_pdcch_pdu_rel15_value(void* tlv, uint8_t **ppWritePac
push8(value->precoderGranularity, ppWritePackedMsg, end) &&
push16(value->numDlDci, ppWritePackedMsg, end) &&
pusharray16(value->RNTI, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
pusharray16(value->ScramblingId, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
pusharray16(value->RNTI, MAX_DCI_CORESET, value->numDlDci, ppWritePackedMsg, end) &&
pusharray16(value->ScramblingId, MAX_DCI_CORESET, value->numDlDci, ppWritePackedMsg, end) &&
pusharray16(value->ScramblingRNTI, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
pusharray8(value->CceIndex, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
pusharray8(value->AggregationLevel, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
pusharray8(value->beta_PDCCH_1_0, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
pusharray16(value->ScramblingRNTI, MAX_DCI_CORESET, value->numDlDci, ppWritePackedMsg, end) &&
pusharray8(value->CceIndex, MAX_DCI_CORESET, value->numDlDci, ppWritePackedMsg, end) &&
pusharray8(value->AggregationLevel, MAX_DCI_CORESET, value->numDlDci, ppWritePackedMsg, end) &&
pusharray8(value->beta_PDCCH_1_0, MAX_DCI_CORESET, value->numDlDci, ppWritePackedMsg, end) &&
pusharray8(value->powerControlOffsetSS, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
pusharray16(value->PayloadSizeBits, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
pusharray8(value->Payload[0], MAX_DCI_CORESET*DCI_PAYLOAD_BYTE_LEN, 1, ppWritePackedMsg, end)
pusharray8(value->powerControlOffsetSS, MAX_DCI_CORESET, value->numDlDci, ppWritePackedMsg, end) &&
pusharray16(value->PayloadSizeBits, MAX_DCI_CORESET, value->numDlDci, ppWritePackedMsg, end) &&
pusharray8(value->Payload[0], MAX_DCI_CORESET*DCI_PAYLOAD_BYTE_LEN, value->numDlDci, ppWritePackedMsg, end)
);
}
@@ -701,116 +701,50 @@ static uint8_t pack_dl_config_ndlsch_pdu_rel13_value(void* tlv, uint8_t **ppWrit
static uint8_t pack_dl_tti_request_body_value(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end)
{
nfapi_nr_dl_tti_request_body_t* value = (nfapi_nr_dl_tti_request_body_t*)tlv;
nfapi_nr_dl_tti_request_pdu_t* value = (nfapi_nr_dl_tti_request_pdu_t*)tlv;
//NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s() dci:%u pdu:%u pdsch:%u rnti:%u pcfich:%u\n", __FUNCTION__, value->number_dci, value->number_pdu, value->number_pdsch_rnti, value->transmission_power_pcfich);
if(!(push8(value->PDUSize, ppWritePackedMsg, end) &&
push8(value->PDUType, ppWritePackedMsg, end) ))
return 0;
if(!(push8(value->nGroup, ppWritePackedMsg, end) &&
push8(value->nPDUs, ppWritePackedMsg, end) &&
push8(value->nUe, ppWritePackedMsg, end) &&
push8(value->PduIdx, ppWritePackedMsg, end)))
// first match the pdu type, then call the respective function
switch(value->PDUType)
{
return 0;
}
uint16_t i = 0;
uint16_t total_number_of_pdus = value->nPDUs;
for(; i < total_number_of_pdus; ++i)
{
nfapi_nr_dl_tti_request_pdu_t* pdu = &(value->dl_tti_pdu_list[i]);
if(push8(pdu->PDUType, ppWritePackedMsg, end) == 0)
return 0;
// Put a 0 size in and then determine the size after the pdu
// has been writen and write the calculated size
uint8_t* pWritePackedMsgPduSize = *ppWritePackedMsg;
pdu->PDUSize = 0;
if(push8(pdu->PDUSize, ppWritePackedMsg, end) == 0)
return 0;
// TODO: cannot find appropriate TAGs, so using DUMMY_TAG for all the tlvs here
switch(pdu->PDUType)
case NFAPI_NR_DL_TTI_CSI_RS_PDU_TYPE:
{
case NFAPI_NR_DL_TTI_CSI_RS_PDU_TYPE:
{
if(
!( pack_tlv(
NFAPI_NR_DL_TTI_CSI_RS_REL_IISC,
&pdu->csi_rs_pdu.csi_rs_pdu_rel15,
ppWritePackedMsg, end,
&pack_dl_tti_csi_rs_pdu_rel15_value)
)
)
{
return 0;
}
}
break;
case NFAPI_NR_DL_TTI_PDCCH_PDU_TYPE:
{
if(
!( pack_tlv(
NFAPI_NR_DL_TTI_PDCCH_REL_IISC,
&pdu->pdcch_pdu.pdcch_pdu_rel15,
ppWritePackedMsg, end,
&pack_dl_tti_pdcch_pdu_rel15_value)
)
)
{
return 0;
}
}
break;
case NFAPI_NR_DL_TTI_PDSCH_PDU_TYPE:
{
if(
!( pack_tlv(
NFAPI_NR_DL_TTI_PDSCH_REL_IISC,
&pdu->pdsch_pdu.pdsch_pdu_rel15,
ppWritePackedMsg, end,
&pack_dl_tti_pdsch_pdu_rel15_value)
)
)
{
return 0;
}
}
break;
case NFAPI_NR_DL_TTI_SSB_PDU_TYPE:
{
if(
!( pack_tlv(
NFAPI_NR_DL_TTI_SSB_REL_IISC,
&pdu->ssb_pdu.ssb_pdu_rel15,
ppWritePackedMsg, end,
&pack_dl_tti_ssb_pdu_rel15_value)
)
)
{
return 0;
}
}
break;
default:
{
NFAPI_TRACE(NFAPI_TRACE_ERROR, "FIXME : Invalid pdu type %d \n", pdu->PDUType );
}
break;
if(!(pack_dl_tti_csi_rs_pdu_rel15_value(&value->csi_rs_pdu.csi_rs_pdu_rel15,ppWritePackedMsg,end)))
return 0;
}
break;
// add 1 for the pdu_type. The delta will include the pdu_size
pdu->PDUSize = 1 + (*ppWritePackedMsg - pWritePackedMsgPduSize);
push8(pdu->PDUSize, &pWritePackedMsgPduSize, end);
case NFAPI_NR_DL_TTI_PDCCH_PDU_TYPE:
{
if(!(pack_dl_tti_pdcch_pdu_rel15_value(&value->pdcch_pdu.pdcch_pdu_rel15,ppWritePackedMsg,end)))
return 0;
}
break;
case NFAPI_NR_DL_TTI_PDSCH_PDU_TYPE:
{
if(!(pack_dl_tti_pdsch_pdu_rel15_value(&value->pdsch_pdu.pdsch_pdu_rel15,ppWritePackedMsg,end)))
return 0;
}
break;
case NFAPI_NR_DL_TTI_SSB_PDU_TYPE:
{
if(!(pack_dl_tti_ssb_pdu_rel15_value(&value->ssb_pdu.ssb_pdu_rel15,ppWritePackedMsg,end)))
return 0;
}
break;
default:
{
NFAPI_TRACE(NFAPI_TRACE_ERROR, "FIXME : Invalid DL_TTI pdu type %d \n", value->PDUType );
}
break;
}
return 1;
}
static uint8_t pack_dl_config_request_body_value(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end)
@@ -962,22 +896,34 @@ static uint8_t pack_dl_config_request_body_value(void* tlv, uint8_t **ppWritePac
static uint8_t pack_dl_tti_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p7_codec_config_t* config)
{
nfapi_nr_dl_tti_request_t *pNfapiMsg = (nfapi_nr_dl_tti_request_t*)msg;
//return ( push16(pNfapiMsg->sfn_sf, ppWritePackedMsg, end) &&
//pack_tlv(NFAPI_DL_CONFIG_REQUEST_BODY_TAG, &pNfapiMsg->dl_config_request_body, ppWritePackedMsg, end, &pack_dl_config_request_body_value) &&
//pack_p7_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
{ uint8_t w = push16(pNfapiMsg->SFN, ppWritePackedMsg, end);
uint8_t x = push16(pNfapiMsg->Slot, ppWritePackedMsg, end);
uint8_t y = pack_tlv(NFAPI_NR_PHY_MSG_TYPE_DL_TTI_REQUEST, &pNfapiMsg->dl_tti_request_body, ppWritePackedMsg, end, &pack_dl_tti_request_body_value);
uint8_t z = pack_p7_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config);
if (!w || !x || !y || !z)
{
NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() NFAPI_DL_CONFIG_REQUEST w:%u x:%u y:%u z:%u \n", __FUNCTION__,w,x,y,z);
}
if (!(push16(pNfapiMsg->SFN , ppWritePackedMsg, end) &&
push16(pNfapiMsg->Slot , ppWritePackedMsg, end) &&
push8(pNfapiMsg->nGroup , ppWritePackedMsg, end) &&
push8(pNfapiMsg->nPDUs , ppWritePackedMsg, end) &&
pusharray8(pNfapiMsg->nUe ,256,pNfapiMsg->nGroup, ppWritePackedMsg, end)
//pusharray8(pNfapiMsg->PduIdx[0] ,256,256, ppWritePackedMsg, end)
))
return 0;
return w && x && y && z;
}
int arr[12];
for(int i=0;i<pNfapiMsg->nGroup;i++)
{
for(int j=0;j<pNfapiMsg->nUe[i];j++)
{
arr[j] = pNfapiMsg->PduIdx[i][j];
}
if(!(pusharray8(arr,12,pNfapiMsg->nUe[i],ppWritePackedMsg, end)))
return 0;
}
for(int i=0;i<pNfapiMsg->nPDUs;i++)
{
if(!pack_dl_tti_request_body_value(&pNfapiMsg->dl_tti_pdu_list[i],ppWritePackedMsg,end))
return 0;
}
return 1;
}
@@ -1613,7 +1559,7 @@ static uint8_t pack_ul_tti_pdu_list_value(void* tlv, uint8_t **ppWritePackedMsg,
return 0;
// first natch the pdu type, then call the respective function
// first match the pdu type, then call the respective function
switch(value->pdu_type)
{
case NFAPI_NR_UL_CONFIG_PRACH_PDU_TYPE:
@@ -3318,7 +3264,7 @@ static uint8_t pack_dl_node_sync(void *msg, uint8_t **ppWritePackedMsg, uint8_t
nfapi_dl_node_sync_t *pNfapiMsg = (nfapi_dl_node_sync_t*)msg;
return ( push32(pNfapiMsg->t1, ppWritePackedMsg, end) &&
pushs32(pNfapiMsg->delta_sfn_sf, ppWritePackedMsg, end) &&
pushs32(pNfapiMsg->delta_sfn_slot, ppWritePackedMsg, end) &&
pack_p7_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
}
@@ -3387,13 +3333,13 @@ int nfapi_p7_message_pack(void *pMessageBuf, void *pPackedBuf, uint32_t packedBu
NFAPI_TRACE(NFAPI_TRACE_ERROR, "P7 Pack supplied pointers are null\n");
return -1;
}
/*
/*
printf("\n P7 MESSAGE SENT: \n");
for(int i=0; i< packedBufLen; i++){
printf("%d", *(uint8_t *)(pMessageBuf + i));
}
printf("\n");
*/
*/
// process the header
if(!(push16(pMessageHeader->phy_id, &pWritePackedMessage, end) &&
push16(pMessageHeader->message_id, &pWritePackedMessage, end) &&
@@ -3575,144 +3521,144 @@ int nfapi_p7_message_pack(void *pMessageBuf, void *pPackedBuf, uint32_t packedBu
// Unpack routines
// NR:
static uint8_t unpack_dl_tti_csi_rs_pdu_rel15_value(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end)
static uint8_t unpack_dl_tti_csi_rs_pdu_rel15_value(void* tlv, uint8_t **ppReadPackedMsg, uint8_t *end)
{
nfapi_nr_dl_tti_csi_rs_pdu_rel15_t* value = (nfapi_nr_dl_tti_csi_rs_pdu_rel15_t*)tlv;
return(
pull16(value->bwp_size, ppWritePackedMsg, end) &&
pull16(value->bwp_start, ppWritePackedMsg, end) &&
pull16(ppReadPackedMsg, &value->bwp_size, end) &&
pull16(ppReadPackedMsg, &value->bwp_start, end) &&
pull8(value->subcarrier_spacing, ppWritePackedMsg, end) &&
pull8(value->cyclic_prefix, ppWritePackedMsg, end) &&
pull8(ppReadPackedMsg, &value->subcarrier_spacing, end) &&
pull8(ppReadPackedMsg, &value->cyclic_prefix, end) &&
pull16(value->start_rb, ppWritePackedMsg, end) &&
pull16(value->nr_of_rbs, ppWritePackedMsg, end) &&
pull16(ppReadPackedMsg, &value->start_rb, end) &&
pull16(ppReadPackedMsg, &value->nr_of_rbs, end) &&
pull8(value->csi_type, ppWritePackedMsg, end) &&
pull8(value->row, ppWritePackedMsg, end) &&
pull8(ppReadPackedMsg, &value->csi_type, end) &&
pull8(ppReadPackedMsg, &value->row, end) &&
pull16(value->freq_domain, ppWritePackedMsg, end) &&
pull8(value->symb_l0, ppWritePackedMsg, end) &&
pull16(ppReadPackedMsg, &value->freq_domain, end) &&
pull8(ppReadPackedMsg, &value->symb_l0, end) &&
push8(value->symb_l1, ppWritePackedMsg, end) &&
pull8(value->cdm_type, ppWritePackedMsg, end) &&
push8(ppReadPackedMsg, &value->symb_l1, end) &&
pull8(ppReadPackedMsg, &value->cdm_type, end) &&
pull8(value->freq_density, ppWritePackedMsg, end) &&
pull16(value->scramb_id, ppWritePackedMsg, end) &&
pull8(ppReadPackedMsg, &value->freq_density, end) &&
pull16(ppReadPackedMsg, &value->scramb_id, end) &&
pull8(value->power_control_offset, ppWritePackedMsg, end) &&
pull8(value->power_control_offset_ss, ppWritePackedMsg, end)
pull8(ppReadPackedMsg, &value->power_control_offset, end) &&
pull8(ppReadPackedMsg, &value->power_control_offset_ss, end)
);
}
static uint8_t unpack_dl_tti_pdcch_pdu_rel15_value(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end)
static uint8_t unpack_dl_tti_pdcch_pdu_rel15_value(void* tlv, uint8_t **ppReadPackedMsg, uint8_t *end)
{
nfapi_nr_dl_tti_pdcch_pdu_rel15_t* value = (nfapi_nr_dl_tti_pdcch_pdu_rel15_t*)tlv;
// TODO: resolve the packaging of array (currently sending a single element)
return(
pull16(value->BWPSize, ppWritePackedMsg, end) &&
pull16(value->BWPStart, ppWritePackedMsg, end) &&
pull8(value->SubcarrierSpacing, ppWritePackedMsg, end) &&
pull8(value->CyclicPrefix, ppWritePackedMsg, end) &&
pull16(ppReadPackedMsg, &value->BWPSize, end) &&
pull16(ppReadPackedMsg, &value->BWPStart, end) &&
pull8(ppReadPackedMsg, &value->SubcarrierSpacing, end) &&
pull8(ppReadPackedMsg, &value->CyclicPrefix, end) &&
pull8(value->StartSymbolIndex, ppWritePackedMsg, end) &&
pull8(value->DurationSymbols, ppWritePackedMsg, end) &&
pullarray16(value->FreqDomainResource, 6, 1, ppWritePackedMsg, end) &&
pull8(value->CceRegMappingType, ppWritePackedMsg, end) &&
pull8(ppReadPackedMsg, &value->StartSymbolIndex, end) &&
pull8(ppReadPackedMsg, &value->DurationSymbols, end) &&
pullarray16(ppReadPackedMsg, &value->FreqDomainResource, 6, 1, end) &&
pull8(ppReadPackedMsg, &value->CceRegMappingType, end) &&
pull8(value->RegBundleSize, ppWritePackedMsg, end) &&
pull8(value->InterleaverSize, ppWritePackedMsg, end) &&
pull8(value->CoreSetType, ppWritePackedMsg, end) &&
pull16(value->ShiftIndex, ppWritePackedMsg, end) &&
pull8(ppReadPackedMsg, &value->RegBundleSize, end) &&
pull8(ppReadPackedMsg, &value->InterleaverSize, end) &&
pull8(ppReadPackedMsg, &value->CoreSetType, end) &&
pull16(ppReadPackedMsg, &value->ShiftIndex, end) &&
pull8(value->precoderGranularity, ppWritePackedMsg, end) &&
pull16(value->numDlDci, ppWritePackedMsg, end) &&
pullarray16(value->RNTI, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
pullarray16(value->ScramblingId, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
pull8(ppReadPackedMsg, &value->precoderGranularity, end) &&
pull16(ppReadPackedMsg, &value->numDlDci, end) &&
pullarray16(ppReadPackedMsg, &value->RNTI, MAX_DCI_CORESET, value->numDlDci, end) &&
pullarray16(ppReadPackedMsg, &value->ScramblingId, MAX_DCI_CORESET, value->numDlDci, end) &&
pullarray16(value->ScramblingRNTI, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
pullarray8(value->CceIndex, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
pullarray8(value->AggregationLevel, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
pullarray8(value->beta_PDCCH_1_0, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
pullarray16(ppReadPackedMsg, &value->ScramblingRNTI, MAX_DCI_CORESET, value->numDlDci, end) &&
pullarray8(ppReadPackedMsg, &value->CceIndex, MAX_DCI_CORESET, value->numDlDci, end) &&
pullarray8(ppReadPackedMsg, &value->AggregationLevel, MAX_DCI_CORESET,value->numDlDci, end) &&
pullarray8(ppReadPackedMsg, &value->beta_PDCCH_1_0, MAX_DCI_CORESET, value->numDlDci, end) &&
pullarray8(value->powerControlOffsetSS, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
pullarray16(value->PayloadSizeBits, MAX_DCI_CORESET, 1, ppWritePackedMsg, end) &&
pullarray8(value->Payload[0], MAX_DCI_CORESET*DCI_PAYLOAD_BYTE_LEN, 1, ppWritePackedMsg, end)
pullarray8(ppReadPackedMsg, &value->powerControlOffsetSS, MAX_DCI_CORESET, value->numDlDci, end) &&
pullarray16(ppReadPackedMsg, &value->PayloadSizeBits, MAX_DCI_CORESET, value->numDlDci, end) &&
pullarray8(ppReadPackedMsg, &value->Payload[0], MAX_DCI_CORESET*DCI_PAYLOAD_BYTE_LEN, value->numDlDci, end)
);
}
static uint8_t unpack_dl_tti_pdsch_pdu_rel15_value(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end)
static uint8_t unpack_dl_tti_pdsch_pdu_rel15_value(void* tlv, uint8_t **ppReadPackedMsg, uint8_t *end)
{
nfapi_nr_dl_tti_pdsch_pdu_rel15_t* value = (nfapi_nr_dl_tti_pdsch_pdu_rel15_t*)tlv;
// TODO: resolve the packaging of array (currently sending a single element)
return(
pull16(value->pduBitmap, ppWritePackedMsg, end) &&
pull16(value->rnti, ppWritePackedMsg, end) &&
pull16(value->pduIndex, ppWritePackedMsg, end) &&
pull16(value->BWPSize, ppWritePackedMsg, end) &&
pull16(ppReadPackedMsg, &value->pduBitmap, end) &&
pull16(ppReadPackedMsg, &value->rnti, end) &&
pull16(ppReadPackedMsg, &value->pduIndex, end) &&
pull16(ppReadPackedMsg, &value->BWPSize, end) &&
pull16(value->BWPStart, ppWritePackedMsg, end) &&
pull8(value->SubcarrierSpacing, ppWritePackedMsg, end) &&
pull8(value->CyclicPrefix, ppWritePackedMsg, end) &&
pull8(value->NrOfCodewords, ppWritePackedMsg, end) &&
pull16(ppReadPackedMsg, &value->BWPStart, end) &&
pull8(ppReadPackedMsg, &value->SubcarrierSpacing, end) &&
pull8(ppReadPackedMsg, &value->CyclicPrefix, end) &&
pull8(ppReadPackedMsg, &value->NrOfCodewords, end) &&
pullarray16(value->targetCodeRate, 2, 1, ppWritePackedMsg, end) &&
pullarray8(value->qamModOrder, 2, 1, ppWritePackedMsg, end) &&
pullarray8(value->mcsIndex, 2, 1, ppWritePackedMsg, end) &&
pullarray8(value->mcsTable, 2, 1, ppWritePackedMsg, end) &&
pullarray16(ppReadPackedMsg, &value->targetCodeRate, 2, 1, end) &&
pullarray8(ppReadPackedMsg, &value->qamModOrder, 2, 1, end) &&
pullarray8(ppReadPackedMsg, &value->mcsIndex, 2, 1, end) &&
pullarray8(ppReadPackedMsg, &value->mcsTable, 2, 1, end) &&
pullarray8(value->rvIndex, 2, 1, ppWritePackedMsg, end) &&
pullarray32(value->TBSize, 2, 1, ppWritePackedMsg, end) &&
pull16(value->dataScramblingId, ppWritePackedMsg, end) &&
pull8(value->nrOfLayers, ppWritePackedMsg, end) &&
pullarray8(ppReadPackedMsg, &value->rvIndex, 2, 1, end) &&
pullarray32(ppReadPackedMsg, &value->TBSize, 2, 1, end) &&
pull16(ppReadPackedMsg, &value->dataScramblingId, end) &&
pull8(ppReadPackedMsg, &value->nrOfLayers, end) &&
pull8(value->transmissionScheme, ppWritePackedMsg, end) &&
pull8(value->refPoint, ppWritePackedMsg, end) &&
pull16(value->dlDmrsSymbPos, ppWritePackedMsg, end) &&
pull8(value->dmrsConfigType, ppWritePackedMsg, end) &&
pull8(ppReadPackedMsg, &value->transmissionScheme, end) &&
pull8(ppReadPackedMsg, &value->refPoint, end) &&
pull16(ppReadPackedMsg, &value->dlDmrsSymbPos, end) &&
pull8(ppReadPackedMsg, &value->dmrsConfigType, end) &&
pull16(value->dlDmrsScramblingId, ppWritePackedMsg, end) &&
pull8(value->SCID, ppWritePackedMsg, end) &&
pull8(value->numDmrsCdmGrpsNoData, ppWritePackedMsg, end) &&
pull16(value->dmrsPorts, ppWritePackedMsg, end) &&
pull16(ppReadPackedMsg, &value->dlDmrsScramblingId, end) &&
pull8(ppReadPackedMsg, &value->SCID, end) &&
pull8(ppReadPackedMsg, &value->numDmrsCdmGrpsNoData, end) &&
pull16(ppReadPackedMsg, &value->dmrsPorts, end) &&
pull8(value->resourceAlloc, ppWritePackedMsg, end) &&
pullarray8(value->rbBitmap, 36, 1, ppWritePackedMsg, end) &&
pull16(value->rbStart, ppWritePackedMsg, end) &&
pull16(value->rbSize, ppWritePackedMsg, end) &&
pull8(ppReadPackedMsg, &value->resourceAlloc, end) &&
pullarray8(ppReadPackedMsg, &value->rbBitmap, 36, 1, end) &&
pull16(ppReadPackedMsg, &value->rbStart, end) &&
pull16(ppReadPackedMsg, &value->rbSize, end) &&
pull8(value->VRBtoPRBMapping, ppWritePackedMsg, end) &&
pull8(value->StartSymbolIndex, ppWritePackedMsg, end) &&
pull8(value->NrOfSymbols, ppWritePackedMsg, end) &&
pull8(value->PTRSPortIndex, ppWritePackedMsg, end) &&
pull8(ppReadPackedMsg, &value->VRBtoPRBMapping, end) &&
pull8(ppReadPackedMsg, &value->StartSymbolIndex, end) &&
pull8(ppReadPackedMsg, &value->NrOfSymbols, end) &&
pull8(ppReadPackedMsg, &value->PTRSPortIndex, end) &&
pull8(value->PTRSTimeDensity, ppWritePackedMsg, end) &&
pull8(value->PTRSFreqDensity, ppWritePackedMsg, end) &&
pull8(value->PTRSReOffset, ppWritePackedMsg, end)
pull8(ppReadPackedMsg, &value->PTRSTimeDensity, end) &&
pull8(ppReadPackedMsg, &value->PTRSFreqDensity, end) &&
pull8(ppReadPackedMsg, &value->PTRSReOffset, end)
);
}
static uint8_t unpack_dl_tti_ssb_pdu_rel15_value(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end)
static uint8_t unpack_dl_tti_ssb_pdu_rel15_value(void* tlv, uint8_t **ppReadPackedMsg, uint8_t *end)
{
nfapi_nr_dl_tti_ssb_pdu_rel15_t* value = (nfapi_nr_dl_tti_ssb_pdu_rel15_t*)tlv;
return(
pull16(value->PhysCellId, ppWritePackedMsg, end) &&
pull8(value->BetaPss, ppWritePackedMsg, end) &&
pull8(value->SsbBlockIndex, ppWritePackedMsg, end) &&
pull8(value->SsbSubcarrierOffset, ppWritePackedMsg, end) &&
pull16(value->ssbOffsetPointA, ppWritePackedMsg, end) &&
pull8(value->bchPayloadFlag, ppWritePackedMsg, end) &&
pull32(value->bchPayload, ppWritePackedMsg, end)
pull16(ppReadPackedMsg, &value->PhysCellId, end) &&
pull8(ppReadPackedMsg, &value->BetaPss, end) &&
pull8(ppReadPackedMsg, &value->SsbBlockIndex, end) &&
pull8(ppReadPackedMsg, &value->SsbSubcarrierOffset, end) &&
pull16(ppReadPackedMsg, &value->ssbOffsetPointA, end) &&
pull8(ppReadPackedMsg, &value->bchPayloadFlag, end) &&
pull32(ppReadPackedMsg, &value->bchPayload, end)
// TODO: pack precoding_and_beamforming too
);
@@ -4164,258 +4110,51 @@ static uint8_t unpack_dl_config_ndlsch_pdu_rel13_value(void *tlv, uint8_t **ppRe
}
static uint8_t unpack_dl_tti_request_body_value(void *tlv, uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_p7_codec_config_t* config)
static uint8_t unpack_dl_tti_request_body_value(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg)
{
nfapi_nr_dl_tti_request_body_t* value = (nfapi_nr_dl_tti_request_body_t*)tlv;
nfapi_nr_dl_tti_request_pdu_t* value = (nfapi_nr_dl_tti_request_pdu_t*)msg;
if(!(pull8(ppReadPackedMsg, &value->nGroup, end) &&
pull8(ppReadPackedMsg, &value->nPDUs, end) &&
pull8(ppReadPackedMsg, &value->nUe, end) &&
pull8(ppReadPackedMsg, &value->PduIdx, end)
))
return 0;
if(!(pull8(ppReadPackedMsg, &value->PDUSize, end) &&
pull8(ppReadPackedMsg, &value->PDUType, end) ))
return 0;
if(value->nPDUs > NFAPI_NR_MAX_DL_TTI_PDUS)
// first match the pdu type, then call the respective function
switch(value->PDUType)
{
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s number of dl tti pdu's exceed maxium (count:%d max:%d)\n", __FUNCTION__, value->nPDUs, NFAPI_NR_MAX_DL_TTI_PDUS);
return 0;
}
if(value->nPDUs)
{
// value->dl_tti_pdu_list = (nfapi_nr_dl_tti_request_pdu_t*)nfapi_p7_allocate(sizeof(nfapi_nr_dl_tti_request_pdu_t) * value->nPDUs, config);
if(value->dl_tti_pdu_list == NULL)
case NFAPI_NR_DL_TTI_CSI_RS_PDU_TYPE:
{
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s failed to allocate dl config pdu list (count:%d)\n", __FUNCTION__, value->nPDUs);
return 0;
if(!(unpack_dl_tti_csi_rs_pdu_rel15_value(&value->csi_rs_pdu.csi_rs_pdu_rel15,ppReadPackedMsg,end)))
return 0;
}
}
else
{
//value->dl_tti_pdu_list = 0;
}
break;
uint16_t i;
uint16_t total_number_of_pdus = value->nPDUs;
for(i = 0; i < total_number_of_pdus; ++i)
{
nfapi_nr_dl_tti_request_pdu_t* pdu = &(value->dl_tti_pdu_list[i]);
if(!(pull8(ppReadPackedMsg, &pdu->PDUType, end) &&
pull8(ppReadPackedMsg, &pdu->PDUSize, end)))
return 0;
uint8_t *packedPduEnd = (*ppReadPackedMsg) + pdu->PDUSize - 2;
if(packedPduEnd > end)
case NFAPI_NR_DL_TTI_PDCCH_PDU_TYPE:
{
// pdu end of beyond buffer end
return 0;
if(!(unpack_dl_tti_pdcch_pdu_rel15_value(&value->pdcch_pdu.pdcch_pdu_rel15,ppReadPackedMsg,end)))
return 0;
}
switch(pdu->PDUSize)
break;
case NFAPI_NR_DL_TTI_PDSCH_PDU_TYPE:
{
case NFAPI_NR_DL_TTI_CSI_RS_PDU_TYPE:
{
unpack_tlv_t unpack_fns[] =
{
{ NFAPI_NR_DL_TTI_CSI_RS_REL_IISC, &pdu->csi_rs_pdu.csi_rs_pdu_rel15, &unpack_dl_tti_csi_rs_pdu_rel15_value},
};
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
}
break;
case NFAPI_NR_DL_TTI_PDCCH_PDU_TYPE:
{
unpack_tlv_t unpack_fns[] =
{
{ NFAPI_NR_DL_TTI_PDCCH_REL_IISC, &pdu->pdcch_pdu.pdcch_pdu_rel15, &unpack_dl_tti_pdcch_pdu_rel15_value},
};
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
}
break;
case NFAPI_NR_DL_TTI_PDSCH_PDU_TYPE:
{
unpack_tlv_t unpack_fns[] =
{
{ NFAPI_NR_DL_TTI_PDSCH_REL_IISC, &pdu->pdsch_pdu.pdsch_pdu_rel15, &unpack_dl_tti_pdsch_pdu_rel15_value},
};
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
}
break;
case NFAPI_NR_DL_TTI_SSB_PDU_TYPE:
{
unpack_tlv_t unpack_fns[] =
{
{ NFAPI_NR_DL_TTI_SSB_REL_IISC, &pdu->ssb_pdu.ssb_pdu_rel15, &unpack_dl_tti_ssb_pdu_rel15_value},
};
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
}
break;
default:
// Need to log an error
break;
if(!(unpack_dl_tti_pdsch_pdu_rel15_value(&value->pdsch_pdu.pdsch_pdu_rel15,ppReadPackedMsg,end)))
return 0;
}
break;
case NFAPI_NR_DL_TTI_SSB_PDU_TYPE:
{
if(!(unpack_dl_tti_ssb_pdu_rel15_value(&value->ssb_pdu.ssb_pdu_rel15,ppReadPackedMsg,end)))
return 0;
}
break;
default:
{
NFAPI_TRACE(NFAPI_TRACE_ERROR, "FIXME : Invalid DL_TTI pdu type %d \n", value->PDUType );
}
break;
}
#if 0
switch(pdu->PDUSize)
{
case NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE:
{
unpack_tlv_t unpack_fns[] =
{
{ NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel8, &unpack_dl_config_dci_dl_pdu_rel8_value},
{ NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL9_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel9, &unpack_dl_config_dci_dl_pdu_rel9_value},
{ NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL10_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel10, &unpack_dl_config_dci_dl_pdu_rel10_value},
{ NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL11_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel11, &unpack_dl_config_dci_dl_pdu_rel11_value},
{ NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL12_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel12, &unpack_dl_config_dci_dl_pdu_rel12_value},
{ NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL13_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel13, &unpack_dl_config_dci_dl_pdu_rel13_value},
};
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
}
break;
case NFAPI_DL_CONFIG_BCH_PDU_TYPE:
{
unpack_tlv_t unpack_fns[] =
{
{ NFAPI_DL_CONFIG_REQUEST_BCH_PDU_REL8_TAG, &pdu->bch_pdu.bch_pdu_rel8, &unpack_dl_config_bch_pdu_rel8_value},
};
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
}
break;
case NFAPI_DL_CONFIG_MCH_PDU_TYPE:
{
unpack_tlv_t unpack_fns[] =
{
{ NFAPI_DL_CONFIG_REQUEST_MCH_PDU_REL8_TAG, &pdu->mch_pdu.mch_pdu_rel8, &unpack_dl_config_mch_pdu_rel8_value},
};
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
}
break;
case NFAPI_DL_CONFIG_DLSCH_PDU_TYPE:
{
unpack_tlv_t unpack_fns[] =
{
{ NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG, &pdu->dlsch_pdu.dlsch_pdu_rel8, &unpack_dl_config_dlsch_pdu_rel8_value},
{ NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL9_TAG, &pdu->dlsch_pdu.dlsch_pdu_rel9, &unpack_dl_config_dlsch_pdu_rel9_value},
{ NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG, &pdu->dlsch_pdu.dlsch_pdu_rel10, &unpack_dl_config_dlsch_pdu_rel10_value},
{ NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL11_TAG, &pdu->dlsch_pdu.dlsch_pdu_rel11, &unpack_dl_config_dlsch_pdu_rel11_value},
{ NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL12_TAG, &pdu->dlsch_pdu.dlsch_pdu_rel12, &unpack_dl_config_dlsch_pdu_rel12_value},
{ NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG, &pdu->dlsch_pdu.dlsch_pdu_rel13, &unpack_dl_config_dlsch_pdu_rel13_value},
};
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
}
break;
case NFAPI_DL_CONFIG_PCH_PDU_TYPE:
{
unpack_tlv_t unpack_fns[] =
{
{ NFAPI_DL_CONFIG_REQUEST_PCH_PDU_REL8_TAG, &pdu->pch_pdu.pch_pdu_rel8, &unpack_dl_config_pch_pdu_rel8_value},
{ NFAPI_DL_CONFIG_REQUEST_PCH_PDU_REL13_TAG, &pdu->pch_pdu.pch_pdu_rel13, &unpack_dl_config_pch_pdu_rel13_value},
};
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
}
break;
case NFAPI_DL_CONFIG_PRS_PDU_TYPE:
{
unpack_tlv_t unpack_fns[] =
{
{ NFAPI_DL_CONFIG_REQUEST_PRS_PDU_REL9_TAG, &pdu->prs_pdu.prs_pdu_rel9, &unpack_dl_config_prs_pdu_rel9_value},
};
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
}
break;
case NFAPI_DL_CONFIG_CSI_RS_PDU_TYPE:
{
unpack_tlv_t unpack_fns[] =
{
{ NFAPI_DL_CONFIG_REQUEST_CSI_RS_PDU_REL10_TAG, &pdu->csi_rs_pdu.csi_rs_pdu_rel10, &unpack_dl_config_csi_rs_pdu_rel10_value},
{ NFAPI_DL_CONFIG_REQUEST_CSI_RS_PDU_REL13_TAG, &pdu->csi_rs_pdu.csi_rs_pdu_rel13, &unpack_dl_config_csi_rs_pdu_rel13_value},
};
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
}
break;
case NFAPI_DL_CONFIG_EPDCCH_DL_PDU_TYPE:
{
unpack_tlv_t unpack_fns[] =
{
{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL8_TAG, &pdu->epdcch_pdu.epdcch_pdu_rel8, &unpack_dl_config_dci_dl_pdu_rel8_value},
{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL9_TAG, &pdu->epdcch_pdu.epdcch_pdu_rel9, &unpack_dl_config_dci_dl_pdu_rel9_value},
{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL10_TAG, &pdu->epdcch_pdu.epdcch_pdu_rel10, &unpack_dl_config_dci_dl_pdu_rel10_value},
{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL11_TAG, &pdu->epdcch_pdu.epdcch_pdu_rel11, &unpack_dl_config_dci_dl_pdu_rel11_value},
{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL12_TAG, &pdu->epdcch_pdu.epdcch_pdu_rel12, &unpack_dl_config_dci_dl_pdu_rel12_value},
{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL13_TAG, &pdu->epdcch_pdu.epdcch_pdu_rel13, &unpack_dl_config_dci_dl_pdu_rel13_value},
{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PARAM_REL11_TAG, &pdu->epdcch_pdu.epdcch_params_rel11, &unpack_dl_config_epdcch_params_rel11_value},
{ NFAPI_DL_CONFIG_REQUEST_EPDCCH_PARAM_REL13_TAG, &pdu->epdcch_pdu.epdcch_params_rel13, &unpack_dl_config_epdcch_params_rel13_value},
};
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
}
break;
case NFAPI_DL_CONFIG_MPDCCH_PDU_TYPE:
{
unpack_tlv_t unpack_fns[] =
{
{ NFAPI_DL_CONFIG_REQUEST_MPDCCH_PDU_REL13_TAG, &pdu->mpdcch_pdu.mpdcch_pdu_rel13, &unpack_dl_config_mpdcch_pdu_rel13_value},
};
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
}
break;
case NFAPI_DL_CONFIG_NBCH_PDU_TYPE:
{
unpack_tlv_t unpack_fns[] =
{
{ NFAPI_DL_CONFIG_REQUEST_NBCH_PDU_REL13_TAG, &pdu->nbch_pdu.nbch_pdu_rel13, &unpack_dl_config_nbch_pdu_rel13_value},
};
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
}
break;
case NFAPI_DL_CONFIG_NPDCCH_PDU_TYPE:
{
unpack_tlv_t unpack_fns[] =
{
{ NFAPI_DL_CONFIG_REQUEST_NPDCCH_PDU_REL13_TAG, &pdu->npdcch_pdu.npdcch_pdu_rel13, &unpack_dl_config_npdcch_pdu_rel13_value},
};
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
}
break;
case NFAPI_DL_CONFIG_NDLSCH_PDU_TYPE:
{
unpack_tlv_t unpack_fns[] =
{
{ NFAPI_DL_CONFIG_REQUEST_NDLSCH_PDU_REL13_TAG, &pdu->ndlsch_pdu.ndlsch_pdu_rel13, &unpack_dl_config_ndlsch_pdu_rel13_value},
};
unpack_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, packedPduEnd, 0, 0);
}
break;
default:
// Need to log an error
break;
}
}
#endif
return 1;
}
@@ -4627,15 +4366,37 @@ static uint8_t unpack_dl_config_request_body_value(void *tlv, uint8_t **ppReadPa
static uint8_t unpack_dl_tti_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p7_codec_config_t* config)
{
nfapi_nr_dl_tti_request_t *pNfapiMsg = (nfapi_nr_dl_tti_request_t*)msg;
//TODO: Check if we need to add a seperate tag for dl_tti_request_body
unpack_p7_tlv_t unpack_fns[] =
{
{ NFAPI_NR_PHY_MSG_TYPE_DL_TTI_REQUEST, &pNfapiMsg->dl_tti_request_body, &unpack_dl_tti_request_body_value},
};
return ( pull16(ppReadPackedMsg, &pNfapiMsg->SFN, end) &&
pull16(ppReadPackedMsg, &pNfapiMsg->Slot, end) &&
unpack_p7_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension));
if (!(pull16(ppReadPackedMsg,&pNfapiMsg->SFN, end) &&
pull16(ppReadPackedMsg, &pNfapiMsg->Slot, end) &&
pull8(ppReadPackedMsg, &pNfapiMsg->nGroup, end) &&
pull8(ppReadPackedMsg, &pNfapiMsg->nPDUs, end) &&
pullarray8(ppReadPackedMsg,&pNfapiMsg->nUe ,256,pNfapiMsg->nGroup, end)
//pusharray8(pNfapiMsg->PduIdx[0] ,256,256, ppWritePackedMsg, end)
))
return 0;
if(pNfapiMsg->Slot % 2 != 0){
printf("\nEntering unpack_dl_tti_request Odd sfn=%d,slot=%d\n",pNfapiMsg->SFN,pNfapiMsg->Slot);
}
int arr[12];
for(int i=0;i<pNfapiMsg->nGroup;i++)
{
for(int j=0;j<pNfapiMsg->nUe[i];j++)
{
arr[j] = pNfapiMsg->PduIdx[i][j];
}
if(!(pullarray8(ppReadPackedMsg,arr,12,pNfapiMsg->nUe[i], end)))
return 0;
}
for(int i=0;i<pNfapiMsg->nPDUs;i++)
{
if(!unpack_dl_tti_request_body_value(ppReadPackedMsg, end, &pNfapiMsg->dl_tti_pdu_list[i]))
return 0;
}
return 1;
}
@@ -4645,11 +4406,11 @@ static uint8_t unpack_ul_tti_request_prach_pdu(void *tlv, uint8_t **ppReadPacked
return(
pull16(ppReadPackedMsg, &prach_pdu->phys_cell_id, end) &&
pull8(ppReadPackedMsg, prach_pdu->num_prach_ocas, end) &&
pull8(ppReadPackedMsg, prach_pdu->prach_format, end) &&
pull8(ppReadPackedMsg, prach_pdu->num_ra, end) &&
pull8(ppReadPackedMsg, prach_pdu->prach_start_symbol, end) &&
pull16(ppReadPackedMsg, prach_pdu->num_cs, end)
pull8(ppReadPackedMsg, &prach_pdu->num_prach_ocas, end) &&
pull8(ppReadPackedMsg, &prach_pdu->prach_format, end) &&
pull8(ppReadPackedMsg, &prach_pdu->num_ra, end) &&
pull8(ppReadPackedMsg, &prach_pdu->prach_start_symbol, end) &&
pull16(ppReadPackedMsg, &prach_pdu->num_cs, end)
// TODO: ignoring beamforming tlv for now
);
}
@@ -7475,7 +7236,7 @@ static uint8_t unpack_dl_node_sync(uint8_t **ppReadPackedMsg, uint8_t *end, void
};
return (pull32(ppReadPackedMsg, &pNfapiMsg->t1, end) &&
pulls32(ppReadPackedMsg, &pNfapiMsg->delta_sfn_sf, end) &&
pulls32(ppReadPackedMsg, &pNfapiMsg->delta_sfn_slot, end) &&
unpack_p7_tlv_list(unpack_fns, sizeof(unpack_fns)/sizeof(unpack_tlv_t), ppReadPackedMsg, end, config, &pNfapiMsg->vendor_extension));
}
@@ -7710,7 +7471,7 @@ int nfapi_p7_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUn
NFAPI_TRACE(NFAPI_TRACE_ERROR, "P7 unpack supplied message buffer is too small %d, %d\n", messageBufLen, unpackedBufLen);
return -1;
}
/*
uint8_t *ptr = pMessageBuf;
printf("\n Read P7 message unpack: ");
while(ptr < end){
@@ -7718,7 +7479,7 @@ int nfapi_p7_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUn
ptr++;
}
printf("\n");
*/
// clean the supplied buffer for - tag value blanking
(void)memset(pUnpackedBuf, 0, unpackedBufLen);