1.1.9.4.9 DRV_USART_ReadBufferAdd Function

C

void DRV_USART_ReadBufferAdd
(
    const DRV_HANDLE handle,
    void* buffer,
    const size_t size,
    DRV_USART_BUFFER_HANDLE* bufferHandle
)

Summary

Queues a read operation.

Description

This function schedules a non-blocking read operation. The function returns with a valid buffer handle in the bufferHandle argument if the read request was scheduled successfully. The function adds the request to the hardware instance receive queue and returns immediately. While the request is in the queue, the application buffer is owned by the driver and should not be modified. The function returns DRV_USART_BUFFER_HANDLE_INVALID in the bufferHandle argument:

  • if a buffer could not be allocated to the request because the queue is full

  • if the input buffer handle is NULL

  • if the input buffer pointer is NULL

  • if the buffer size (number of bytes to read) is 0

  • if the driver handle is invalid

If the requesting client registered an event callback with the driver, the driver will issue a DRV_USART_BUFFER_EVENT_COMPLETE event if the buffer was processed successfully of DRV_USART_BUFFER_EVENT_ERROR event if the buffer was not processed successfully.

Precondition

DRV_USART_Open must have been called to obtain a valid opened device handle.

Parameters

ParamDescription
handleHandle of the communication channel as returned by the DRV_USART_Open function.
bufferBuffer where the received data will be stored.
sizeBuffer size in bytes.
bufferHandlePointer to an argument that will contain the return buffer handle.

Returns

The buffer handle is returned in the bufferHandle argument. This is DRV_USART_BUFFER_HANDLE_INVALID if the request was not successful.

Example

MY_APP_OBJ myAppObj;
uint8_t mybuffer[MY_BUFFER_SIZE];
DRV_USART_BUFFER_HANDLE bufferHandle;

// myUSARTHandle is the handle returned
// by the DRV_USART_Open function.

DRV_USART_ReadBufferAdd(
    myUSARThandle,
    myBuffer,
    MY_BUFFER_SIZE,
    &bufferHandle
);

if(bufferHandle == DRV_USART_BUFFER_HANDLE_INVALID)
{
    // Error handling here
}

// Event is received when the buffer is processed.

Remarks

This function is thread safe in a RTOS application. It can be called from within the USART Driver Buffer Event Handler that is registered by the client. It should not be called in the event handler associated with another USART driver instance. It should not be called directly in an ISR.