Files
2025-05-06 13:07:01 +00:00

119 lines
3.8 KiB
C

/**
* \file
* \brief Radio Network Message Layer
* \author (c) 2013-2014 Erich Styger, http://mcuoneclipse.com/
* \note MIT License (http://opensource.org/licenses/mit-license.html), see 'RNet_License.txt'
*
* This module implements radio message handling module of the radio network stack.
*/
#ifndef RADIOMESSAGE_H_
#define RADIOMESSAGE_H_
#include "McuRNetConfig.h"
#if McuRNET_CONFIG_IS_ENABLED
#include "RPHY.h"
#include "McuShell.h"
/*!
* \brief Parses a command
* \param cmd Command string to be parsed
* \param handled Sets this variable to TRUE if command was handled
* \param io I/O stream to be used for input/output
* \return Error code, ERR_OK if everything was fine
*/
uint8_t RMSG_ParseCommand(const unsigned char *cmd, bool *handled, const McuShell_StdIOType *io);
/*!
* \brief Returns the number of messages in the Rx queue
* \return Number of items in the Rx queue
*/
unsigned int RMSG_RxQueueNofItems(void);
/*!
* \brief Returns the number of messages in the Tx queue
* \return Number of items in the Tx queue
*/
unsigned int RMSG_TxQueueNofItems(void);
/*!
* \brief Flushes the Rx queue (makes it empty).
* \return Error code, ERR_OK for everything fine.
*/
uint8_t RMSG_FlushRxQueue(void);
/*!
* \brief Flushes the Rx queue (makes it empty).
* \return Error code, ERR_OK for everything fine.
*/
uint8_t RMSG_FlushTxQueue(void);
/*!
* \brief Queues a message to be sent to the radio transceiver.
* \param buf Pointer to the message data to be sent.
* \param bufSize Size of buffer.
* \param payloadSize Size of payload data.
* \param fromISR If called from an ISR routine.
* \param isTx If message is TX or RX.
* \param toBack If message shall be sent to the back of the list.
* \param flags Packet flags.
* \return Error code, ERR_OK if message has been queued.
*/
uint8_t RMSG_QueuePut(uint8_t *buf, size_t bufSize, uint8_t payloadSize, bool fromISR, bool isTx, bool toBack, RPHY_FlagsType flags);
/*!
* \brief Puts a message into the TX queue for resending (in front of the queue)
* \param buf[in] pointer to message
* \param bufSize[in] size of message
* \return Error code, ERR_OK if message has been queued.
*/
uint8_t RMSG_PutRetryTxMsg(uint8_t *buf, size_t bufSize);
/*!
* \brief Used to check if we have a message incoming from the RX queue.
* \param[in] buf Buffer where to store the incoming message
* \param[in] bufSize Size of buffer, must be at least of size PHY_BUFFER_SIZE
* \param[in] payLoadPtr Pointer to payload start.
* \param[in] payloadSize Size of payload.
* \return ERR_OK if we have a message, otherwise error code.
*/
uint8_t RMSG_GetRxMsg(uint8_t *buf, size_t bufSize);
/*!
* \brief Used to check if we have a message outgoing in the TX queue.
* \param buf Buffer where to store the incoming message
* \param bufSize Size of buffer, must be at least of size RMSG_QUEUE_ITEM_SIZE
* \return ERR_OK if we have a message, otherwise error code.
*/
uint8_t RMSG_GetTxMsg(uint8_t *buf, size_t bufSize);
/*!
* \brief Add a message to the TX queue.
* \param buf Pointer to the message data.
* \param bufSize Size of the buffer in bytes, must be RPHY_BUFFER_SIZE.
* \param payloadSize Size of payload in buffer.
* \param flags Packet flags.
* \return ERR_OK, or error code.
*/
uint8_t RMSG_QueueTxMsg(uint8_t *buf, size_t bufSize, uint8_t payloadSize, RPHY_FlagsType flags);
/*!
* \brief Add a message to the RX queue.
* \param buf Pointer to the message data.
* \param bufSize Size of the buffer in bytes.
* \param payloadSize Size of payload in buffer.
* \param flags Packet flags
* \return ERR_OK, or error code.
*/
uint8_t RMSG_QueueRxMsg(uint8_t *buf, size_t bufSize, uint8_t payloadSize, RPHY_FlagsType flags);
/*! \brief Initializes the module */
void RMSG_Init(void);
/*! \brief Deinitializes the module */
void RMSG_Deinit(void);
#endif /* RADIOMESSAGE_H_ */
#endif /* McuRNET_CONFIG_IS_ENABLED */