Change PNF to use functions pointers to pack/unpack messages.

Adds 3 new function pointers to the P5 and P7 PNF structures, allowing to configure which function to use to pack/unpack the messages, as well as unpack the message header, being then used seamlessly regardless of using the FAPI or nFAPI functions.

Changes the header unpack and message unpack functions to return true on success and false on failure, instead of an int
This commit is contained in:
Rúben Soares Silva
2025-06-26 16:57:08 +01:00
parent 1ea164468f
commit 00b5eba192
10 changed files with 178 additions and 103 deletions
@@ -110,11 +110,11 @@ uint8_t pack_nr_p5_message_body(nfapi_nr_p4_p5_message_header_t *header,
* \param pUnpackedBuf A pointer to the nfapi_message_header
* \param unpackedBufLen The size of nfapi_message_header structure.
* \param config A pointer to the nfapi configuration structure
* \return 10 ( size of the unpacked header ) on success, -1 on failure.
* \return true on success, false on failure.
*
* The function will decode a byte stream pointed to by pMessageBuf into a nfapi p5 header structure pointed to by pUnpackedBuf
*/
int nfapi_nr_p5_message_header_unpack(void *pMessageBuf,
bool nfapi_nr_p5_message_header_unpack(void *pMessageBuf,
uint32_t messageBufLen,
void *pUnpackedBuf,
uint32_t unpackedBufLen,
@@ -126,11 +126,11 @@ int nfapi_nr_p5_message_header_unpack(void *pMessageBuf,
* \param pUnpackedBuf A pointer to the nfapi_message_header
* \param unpackedBufLen The size of nfapi_message_header structure.
* \param config A pointer to the nfapi configuration structure
* \return != -1 means success, -1 means failure.
* \return true on success, false on failure.
*
* The function will decode a byte stream pointed to by pMessageBuf into a nfapi p5 message structure pointer to by pUnpackedBuf
*/
int nfapi_nr_p5_message_unpack(void *pMessageBuf,
bool nfapi_nr_p5_message_unpack(void *pMessageBuf,
uint32_t messageBufLen,
void *pUnpackedBuf,
uint32_t unpackedBufLen,
@@ -154,13 +154,13 @@ int nfapi_nr_p7_message_pack(void *pMessageBuf, void *pPackedBuf, uint32_t packe
* \param pUnpackedBuf A pointer to the nfapi_message_header
* \param unpackedBufLen The size of nfapi_message_header structure.
* \param config A pointer to the nfapi configuration structure
* \return 0 means success, -1 means failure.
* \return true on success, false on failure.
*
* The function will decode a byte stream pointed to by pMessageBuf into a nfapi_p7_message_header structure pointer to by
pUnpackedBuf
*/
int nfapi_nr_p7_message_header_unpack(void *pMessageBuf,
bool nfapi_nr_p7_message_header_unpack(void *pMessageBuf,
uint32_t messageBufLen,
void *pUnpackedBuf,
uint32_t unpackedBufLen,
@@ -172,11 +172,11 @@ int nfapi_nr_p7_message_header_unpack(void *pMessageBuf,
* \param pUnpackedBuf A pointer to the nfapi_message_header
* \param unpackedBufLen The size of nfapi_message_header structure.
* \param config A pointer to the nfapi configuration structure
* \return 0 means success, -1 means failure.
* \return true on success, false failure.
*
* The function will decode a byte stream pointed to by pMessageBuf into a nfapi p7 message structure pointer to by pUnpackedBuf
*/
int nfapi_nr_p7_message_unpack(void *pMessageBuf,
bool nfapi_nr_p7_message_unpack(void *pMessageBuf,
uint32_t messageBufLen,
void *pUnpackedBuf,
uint32_t unpackedBufLen,
+11 -11
View File
@@ -2325,7 +2325,7 @@ int nfapi_p5_message_header_unpack(void *pMessageBuf,
return 8;
}
int nfapi_nr_p5_message_header_unpack(void *pMessageBuf,
bool nfapi_nr_p5_message_header_unpack(void *pMessageBuf,
uint32_t messageBufLen,
void *pUnpackedBuf,
uint32_t unpackedBufLen,
@@ -2336,25 +2336,25 @@ int nfapi_nr_p5_message_header_unpack(void *pMessageBuf,
if (pMessageBuf == NULL || pUnpackedBuf == NULL) {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "P5 header unpack supplied pointers are null\n");
return -1;
return false;
}
uint8_t *end = pMessageBuf + messageBufLen;
if (messageBufLen < NFAPI_NR_P5_HEADER_LENGTH || unpackedBufLen < sizeof(nfapi_nr_p4_p5_message_header_t)) {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "P5 header unpack supplied message buffer is too small %d, %d\n", messageBufLen, unpackedBufLen);
return -1;
return false;
}
// process the header
if (!(pull16(&pReadPackedMessage, &pMessageHeader->phy_id, end) && pull16(&pReadPackedMessage, &pMessageHeader->message_id, end)
&& pull32(&pReadPackedMessage, &pMessageHeader->message_length, end)
&& pull16(&pReadPackedMessage, &pMessageHeader->spare, end))) {
return -1;
return false;
}
return NFAPI_NR_P5_HEADER_LENGTH;
return true;
}
int nfapi_nr_p5_message_unpack(void *pMessageBuf,
bool nfapi_nr_p5_message_unpack(void *pMessageBuf,
uint32_t messageBufLen,
void *pUnpackedBuf,
uint32_t unpackedBufLen,
@@ -2362,11 +2362,11 @@ int nfapi_nr_p5_message_unpack(void *pMessageBuf,
{
if (pMessageBuf == NULL || pUnpackedBuf == NULL) {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "P5 unpack supplied pointers are null\n");
return -1;
return false;
}
if (messageBufLen < NFAPI_NR_P5_HEADER_LENGTH || unpackedBufLen < sizeof(nfapi_nr_p4_p5_message_header_t)) {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "P5 unpack supplied message buffer is too small %d, %d\n", messageBufLen, unpackedBufLen);
return -1;
return false;
}
nfapi_nr_p4_p5_message_header_t *pMessageHeader = pUnpackedBuf;
@@ -2374,7 +2374,7 @@ int nfapi_nr_p5_message_unpack(void *pMessageBuf,
(void)memset(pUnpackedBuf, 0, unpackedBufLen);
// process the header
if (!nfapi_nr_p5_message_header_unpack(pMessageBuf, messageBufLen, pMessageHeader, unpackedBufLen, config)) {
return -1;
return false;
}
uint8_t *pReadPackedMessage = pMessageBuf + NFAPI_NR_P5_HEADER_LENGTH;
uint8_t *end = (uint8_t *)pMessageBuf + messageBufLen;
@@ -2382,7 +2382,7 @@ int nfapi_nr_p5_message_unpack(void *pMessageBuf,
if (check_nr_unpack_length(pMessageHeader->message_id, unpackedBufLen) == 0) {
// the unpack buffer is not big enough for the struct
return -1;
return false;
}
// look for the specific message
@@ -2476,7 +2476,7 @@ int nfapi_nr_p5_message_unpack(void *pMessageBuf,
break;
}
return result;
return result == 1;
}
int nfapi_p5_message_unpack(void *pMessageBuf,
+12 -12
View File
@@ -5930,7 +5930,7 @@ int nfapi_p7_message_header_unpack(void *pMessageBuf,
return 0;
}
int nfapi_nr_p7_message_header_unpack(void *pMessageBuf,
bool nfapi_nr_p7_message_header_unpack(void *pMessageBuf,
uint32_t messageBufLen,
void *pUnpackedBuf,
uint32_t unpackedBufLen,
@@ -5941,14 +5941,14 @@ int nfapi_nr_p7_message_header_unpack(void *pMessageBuf,
if (pMessageBuf == NULL || pUnpackedBuf == NULL) {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "P7 header unpack supplied pointers are null\n");
return -1;
return false;
}
uint8_t *end = (uint8_t *)pMessageBuf + messageBufLen;
if (messageBufLen < NFAPI_NR_P7_HEADER_LENGTH || unpackedBufLen < sizeof(nfapi_nr_p7_message_header_t)) {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "P7 header unpack supplied message buffer is too small %d, %d\n", messageBufLen, unpackedBufLen);
return -1;
return false;
}
// process the header
if (!(pull16(&pReadPackedMessage, &pMessageHeader->phy_id, end) && pull16(&pReadPackedMessage, &pMessageHeader->message_id, end)
@@ -5956,9 +5956,9 @@ int nfapi_nr_p7_message_header_unpack(void *pMessageBuf,
&& pull16(&pReadPackedMessage, &pMessageHeader->m_segment_sequence, end)
&& pull32(&pReadPackedMessage, &pMessageHeader->checksum, end)
&& pull32(&pReadPackedMessage, &pMessageHeader->transmit_timestamp, end)))
return -1;
return false;
return 0;
return true;
}
int nfapi_p7_message_unpack(void *pMessageBuf,
@@ -6213,7 +6213,7 @@ bool peek_nr_nfapi_p7_sfn_slot(void *pMessageBuf, uint32_t messageBufLen, uint16
return true;
}
int nfapi_nr_p7_message_unpack(void *pMessageBuf,
bool nfapi_nr_p7_message_unpack(void *pMessageBuf,
uint32_t messageBufLen,
void *pUnpackedBuf,
uint32_t unpackedBufLen,
@@ -6225,14 +6225,14 @@ int nfapi_nr_p7_message_unpack(void *pMessageBuf,
if (pMessageBuf == NULL || pUnpackedBuf == NULL) {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "P7 unpack supplied pointers are null\n");
return -1;
return false;
}
uint8_t *end = (uint8_t *)pMessageBuf + messageBufLen;
if (messageBufLen < NFAPI_NR_P7_HEADER_LENGTH || unpackedBufLen < sizeof(nfapi_nr_p7_message_header_t)) {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "P7 unpack supplied message buffer is too small %d, %d\n", messageBufLen, unpackedBufLen);
return -1;
return false;
}
// process the header
@@ -6242,11 +6242,11 @@ int nfapi_nr_p7_message_unpack(void *pMessageBuf,
&& pull32(&pReadPackedMessage, &pMessageHeader->checksum, end)
&& pull32(&pReadPackedMessage, &pMessageHeader->transmit_timestamp, end))) {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "P7 unpack header failed\n");
return -1;
return false;
}
if ((uint8_t *)(pMessageBuf + pMessageHeader->message_length) > end) {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "P7 unpack message length is greater than the message buffer \n");
return -1;
return false;
}
/*
@@ -6356,7 +6356,7 @@ int nfapi_nr_p7_message_unpack(void *pMessageBuf,
if (result == 0) {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "P7 Pack failed to pack message\n");
return -1;
return false;
}
return 0;
return true;
}