/** * \brief Asynchronous buffer read * * Sets up the driver to read from the USART to a given buffer. If registered * and enabled, a callback function will be called. * * \param[in] module Pointer to USART software instance struct * \param[out] rx_data Pointer to data buffer to receive * \param[in] length Data buffer length * * \returns Status of the operation * \retval STATUS_OK If operation was completed * \retval STATUS_BUSY If operation was not completed, due to the * USART module being busy * \retval STATUS_ERR_INVALID_ARG If operation was not completed, due to invalid * arguments * \retval STATUS_ERR_DENIED If the transmitter is not enabled */ enum status_code usart_read_buffer_job( struct usart_module *const module, uint8_t *rx_data, uint16_t length) { /* Sanity check arguments */ Assert(module); Assert(rx_data); if (length == 0) { return STATUS_ERR_INVALID_ARG; } /* Check that the receiver is enabled */ if (!(module->receiver_enabled)) { return STATUS_ERR_DENIED; } /* Check if the USART receiver is busy */ if (module->remaining_rx_buffer_length > 0) { return STATUS_BUSY; } /* Issue internal asynchronous read */ _usart_read_buffer(module, rx_data, length); return STATUS_OK; }
/** * \brief Asynchronous read a single char * * Sets up the driver to read data from the USART module to the data * pointer given. If registered and enabled, a callback will be called * when the receiving is completed. * * \param[in] module Pointer to USART software instance struct * \param[out] rx_data Pointer to where received data should be put * * \returns Status of the operation. * \retval STATUS_OK If operation was completed * \retval STATUS_BUSY If operation was not completed */ enum status_code usart_read_job( struct usart_module *const module, uint16_t *const rx_data) { /* Sanity check arguments */ Assert(module); Assert(rx_data); /* Call internal read buffer function with length 1 */ return _usart_read_buffer(module, (uint8_t *)rx_data, 1); }
/** * \brief Asynchronous read a single char * * Sets up the driver to read data from the USART module to the data * pointer given. If registered and enabled, a callback will be called * when the receiving is completed. * * \param[in] module Pointer to USART software instance struct * \param[out] rx_data Pointer to where received data should be put * * \returns Status of the operation * \retval STATUS_OK If operation was completed * \retval STATUS_BUSY If operation was not completed, */ enum status_code usart_read_job( struct usart_module *const module, uint16_t *const rx_data) { /* Sanity check arguments */ Assert(module); /* Check if the USART receiver is busy */ if (module->remaining_rx_buffer_length > 0) { return STATUS_BUSY; } /* Call internal read buffer function with length 1 */ _usart_read_buffer(module, (uint8_t *)rx_data, 1); return STATUS_OK; }