Commit 23d792a0 authored by Rúben Soares Silva's avatar Rúben Soares Silva

Expose packing/unpacking functions for (n)FAPI P5 messages for FAPI library creation

Will be reused from other files in later commits.
Added packing/unpacking procedures for STOP.indication and ERROR.indication.
Separate a packing function for STOP.request for use in the NR FAPI library.
parent 489300f8
...@@ -4121,8 +4121,39 @@ int pack_nr_srs_beamforming_report(void *pMessageBuf, void *pPackedBuf, uint32_t ...@@ -4121,8 +4121,39 @@ int pack_nr_srs_beamforming_report(void *pMessageBuf, void *pPackedBuf, uint32_t
*/ */
int unpack_nr_srs_beamforming_report(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen); int unpack_nr_srs_beamforming_report(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen);
uint8_t unpack_nr_param_response(uint8_t** ppReadPackedMsg, uint8_t* end, void* msg, nfapi_p4_p5_codec_config_t* config); uint8_t pack_nr_param_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config);
uint8_t unpack_nr_config_response(uint8_t** ppReadPackedMsg, uint8_t* end, void* msg, nfapi_p4_p5_codec_config_t* config); uint8_t unpack_nr_param_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config);
uint8_t pack_nr_param_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config);
uint8_t unpack_nr_param_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config);
uint8_t pack_nr_config_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config);
uint8_t unpack_nr_config_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config);
uint8_t pack_nr_config_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config);
uint8_t unpack_nr_config_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config);
uint8_t pack_nr_start_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config);
uint8_t unpack_nr_start_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config);
uint8_t pack_nr_start_response(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config);
uint8_t unpack_nr_start_response(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config);
uint8_t pack_nr_stop_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config);
uint8_t unpack_nr_stop_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config);
uint8_t pack_nr_stop_indication(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config);
uint8_t unpack_nr_stop_indication(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config);
uint8_t pack_nr_error_indication(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config);
uint8_t unpack_nr_error_indication(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p4_p5_codec_config_t *config);
#endif /* _NFAPI_INTERFACE_H_ */ #endif /* _NFAPI_INTERFACE_H_ */
This diff is collapsed.
...@@ -214,21 +214,21 @@ typedef struct nfapi_pnf_config ...@@ -214,21 +214,21 @@ typedef struct nfapi_pnf_config
* STOP.request. This can be done in the call back. * STOP.request. This can be done in the call back.
*/ */
int (*stop_req)(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_stop_request_t* req); int (*stop_req)(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_stop_request_t* req);
int (*nr_stop_req)(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_nr_stop_request_t* req); int (*nr_stop_req)(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_nr_stop_request_scf_t* req);
/*! A callback for the MEASUREMENT.request /*! A callback for the MEASUREMENT.request
* \param config A pointer to the pnf configuration * \param config A pointer to the pnf configuration
* \param phy A pointer to the pnf phy configuration * \param phy A pointer to the pnf phy configuration
* \param req A data structure for the decoded MEASUREMENT.request. This will have * \param req A data structure for the decoded MEASUREMENT.request. This will have
* been allocated on the stack * been allocated on the stack
* \return not currently used * \return not currently used
* *
* The client is expected to send the MEASUREMENT.response after receiving the * The client is expected to send the MEASUREMENT.response after receiving the
* MEASUREMENT.request. This can be done in the call back. * MEASUREMENT.request. This can be done in the call back.
*/ */
int (*measurement_req)(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_measurement_request_t* req); int (*measurement_req)(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_measurement_request_t* req);
/*! A callback for the RSSI.request /*! A callback for the RSSI.request
* \param config A pointer to the pnf configuration * \param config A pointer to the pnf configuration
* \param phy A pointer to the pnf phy configuration * \param phy A pointer to the pnf phy configuration
* \param req A data structure for the decoded RSSI.request. This will have * \param req A data structure for the decoded RSSI.request. This will have
......
...@@ -937,75 +937,58 @@ void pnf_handle_stop_request(pnf_t* pnf, void *pRecvMsg, int recvMsgLen) ...@@ -937,75 +937,58 @@ void pnf_handle_stop_request(pnf_t* pnf, void *pRecvMsg, int recvMsgLen)
} }
} }
void pnf_nr_handle_stop_request(pnf_t* pnf, void *pRecvMsg, int recvMsgLen) void pnf_nr_handle_stop_request(pnf_t* pnf, void* pRecvMsg, int recvMsgLen)
{ {
// ensure it's valid // ensure it's valid
if (pRecvMsg == NULL || pnf == NULL) if (pRecvMsg == NULL || pnf == NULL) {
{ NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s: NULL parameters\n", __FUNCTION__);
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s: NULL parameters\n", __FUNCTION__); } else {
} nfapi_nr_stop_request_scf_t req;
else
{ NFAPI_TRACE(NFAPI_TRACE_INFO, "STOP.request received\n");
nfapi_nr_stop_request_t req;
nfapi_pnf_config_t* config = &(pnf->_public);
NFAPI_TRACE(NFAPI_TRACE_INFO, "STOP.request received\n");
// unpack the message
nfapi_pnf_config_t* config = &(pnf->_public); if (nfapi_nr_p5_message_unpack(pRecvMsg, recvMsgLen, &req, sizeof(req), &config->codec_config) >= 0) {
if (config->state == NFAPI_PNF_RUNNING) {
// unpack the message nfapi_pnf_phy_config_t* phy = nfapi_pnf_phy_config_find(config, req.header.phy_id);
if (nfapi_nr_p5_message_unpack(pRecvMsg, recvMsgLen, &req, sizeof(req), &config->codec_config) >= 0) if (phy) {
{ if (phy->state != NFAPI_PNF_PHY_RUNNING) {
if(config->state == NFAPI_PNF_RUNNING) if (config->nr_stop_req) {
{ (config->nr_stop_req)(config, phy, &req);
nfapi_pnf_phy_config_t* phy = nfapi_pnf_phy_config_find(config, req.header.phy_id); }
if(phy) } else {
{ nfapi_stop_response_t resp;
if(phy->state != NFAPI_PNF_PHY_RUNNING) memset(&resp, 0, sizeof(resp));
{ resp.header.message_id = NFAPI_NR_PHY_MSG_TYPE_STOP_RESPONSE;
if(config->nr_stop_req) resp.header.phy_id = req.header.phy_id;
{ resp.error_code = NFAPI_MSG_INVALID_STATE;
(config->nr_stop_req)(config, phy, &req); nfapi_pnf_stop_resp(config, &resp);
} }
} } else {
else nfapi_stop_response_t resp;
{ memset(&resp, 0, sizeof(resp));
nfapi_stop_response_t resp; resp.header.message_id = NFAPI_NR_PHY_MSG_TYPE_STOP_RESPONSE;
memset(&resp, 0, sizeof(resp)); resp.header.phy_id = req.header.phy_id;
resp.header.message_id = NFAPI_NR_PHY_MSG_TYPE_STOP_RESPONSE; resp.error_code = NFAPI_MSG_INVALID_CONFIG;
resp.header.phy_id = req.header.phy_id; nfapi_pnf_stop_resp(config, &resp);
resp.error_code = NFAPI_MSG_INVALID_STATE; }
nfapi_pnf_stop_resp(config, &resp); } else {
} nfapi_stop_response_t resp;
} memset(&resp, 0, sizeof(resp));
else resp.header.message_id = NFAPI_NR_PHY_MSG_TYPE_STOP_RESPONSE;
{ resp.header.phy_id = req.header.phy_id;
nfapi_stop_response_t resp; resp.error_code = NFAPI_MSG_INVALID_STATE;
memset(&resp, 0, sizeof(resp)); nfapi_pnf_stop_resp(config, &resp);
resp.header.message_id = NFAPI_NR_PHY_MSG_TYPE_STOP_RESPONSE; }
resp.header.phy_id = req.header.phy_id; } else {
resp.error_code = NFAPI_MSG_INVALID_CONFIG; NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s: Unpack message failed, ignoring\n", __FUNCTION__);
nfapi_pnf_stop_resp(config, &resp); }
}
}
else
{
nfapi_stop_response_t resp;
memset(&resp, 0, sizeof(resp));
resp.header.message_id = NFAPI_NR_PHY_MSG_TYPE_STOP_RESPONSE;
resp.header.phy_id = req.header.phy_id;
resp.error_code = NFAPI_MSG_INVALID_STATE;
nfapi_pnf_stop_resp(config, &resp);
}
}
else
{
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s: Unpack message failed, ignoring\n", __FUNCTION__);
}
if(req.vendor_extension)
pnf->_public.codec_config.deallocate(req.vendor_extension);
} if (req.vendor_extension)
pnf->_public.codec_config.deallocate(req.vendor_extension);
}
} }
void pnf_handle_measurement_request(pnf_t* pnf, void *pRecvMsg, int recvMsgLen) void pnf_handle_measurement_request(pnf_t* pnf, void *pRecvMsg, int recvMsgLen)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment