diff --git a/CMakeLists.txt b/CMakeLists.txt index 48c2e6b53e..6235c561fc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -716,6 +716,7 @@ set(NFAPI_PNF_SRC ) add_library(NFAPI_PNF_LIB ${NFAPI_PNF_SRC}) target_link_libraries(NFAPI_PNF_LIB PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs) +target_link_libraries(NFAPI_PNF_LIB PUBLIC nr_fapi_p7) include_directories(${NFAPI_DIR}/pnf/public_inc) include_directories(${NFAPI_DIR}/pnf/inc) 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 c68566634d..39e9eca3e0 100644 --- a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h +++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h @@ -10,6 +10,8 @@ #define _NFAPI_NR_INTERFACE_H_ #include "nfapi_common_interface.h" +#include + #define NFAPI_NR_P5_HEADER_LENGTH 10 #define NFAPI_NR_P7_HEADER_LENGTH 18 @@ -177,6 +179,18 @@ int nfapi_nr_p7_message_unpack(void *pMessageBuf, uint32_t unpackedBufLen, nfapi_p7_codec_config_t *config); +/*! \brief Peeks the SFN and Slot of an (n)FAPI P7 message + * \param pMessageBuf A pointer to an encoded P7 message header + * \param messageBufLen The size of the encoded P7 message header + * \param SFN A pointer to store the peeked SFN + * \param Slot A pointer to store the peeked Slot + * \return true on success, false, otherwise. + * + * The function will decode the encoded SFN and Slot from an encoded P7 (n)FAPI message + + */ +bool peek_nr_nfapi_p7_sfn_slot(void *pMessageBuf, uint32_t messageBufLen, uint16_t *SFN, uint16_t *Slot); + /*! \brief Calculates the checksum of a message * * \param buffer Pointer to the packed message diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c index df554ab599..8cf42cf511 100644 --- a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c +++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c @@ -6202,6 +6202,18 @@ int nfapi_p7_message_unpack(void *pMessageBuf, return 0; } +bool peek_nr_nfapi_p7_sfn_slot(void *pMessageBuf, uint32_t messageBufLen, uint16_t *SFN, uint16_t *Slot) +{ + uint8_t *pReadPackedMessage = &((uint8_t *)pMessageBuf)[NFAPI_NR_P7_HEADER_LENGTH]; + uint8_t *end = (uint8_t*)pMessageBuf + messageBufLen; + if(!(pull16(&pReadPackedMessage, SFN, end) && pull16(&pReadPackedMessage, Slot, end))) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "Failed to peek SFN.Slot\n"); + return false; + } + NFAPI_TRACE(NFAPI_TRACE_DEBUG, "Peeked SFN.Slot is (%d.%d)\n", *SFN, *Slot); + return true; +} + int nfapi_nr_p7_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, diff --git a/nfapi/open-nFAPI/pnf/src/pnf_p7.c b/nfapi/open-nFAPI/pnf/src/pnf_p7.c index 9ad9bd9fe9..3325d2106b 100644 --- a/nfapi/open-nFAPI/pnf/src/pnf_p7.c +++ b/nfapi/open-nFAPI/pnf/src/pnf_p7.c @@ -28,6 +28,7 @@ #include #include "pnf_p7.h" +#include "nr_fapi_p7_utils.h" // for 5G/NR message utils #define FAPI2_IP_DSCP 0