1.1.5.3.3 DRV_I2S_WriteReadBufferAdd Function
void DRV_I2S_BufferAddWriteRead(const DRV_HANDLE handle, void *transmitBuffer, void *receiveBuffer,
size_t size, DRV_I2S_BUFFER_HANDLE *bufferHandle)
Summary
Queues a write/read operation.
Description
This function schedules a non-blocking write-read operation. The function returns with a valid buffer handle in the bufferHandle argument if the write-read request was scheduled successfully. The function adds the request to the hardware instance 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_I2S_BUFFER_HANDLE_INVALID:
if a buffer could not be allocated to the request
if the input buffer pointer is NULL
if the client opened the driver for read only or write only
if the buffer size is 0
if the queue is full or the queue depth is insufficient
If the requesting client registered an event callback with the driver, the driver will issue a DRV_I2S_BUFFER_EVENT_COMPLETE event if the buffer was processed successfully of DRV_I2S_BUFFER_EVENT_ERROR event if the buffer was not processed successfully.
Preconditions
DRV_I2S_Open must have been called to obtain a valid opened device handle.
Parameters
Parameters | Description |
---|---|
handle | Handle of the communication channel as return by the DRV_I2S_Open function. |
transmitBuffer | Data to be transmitted. |
receiveBuffer | Will hold data that is received. |
size | Buffer size in bytes (same for both buffers) |
bufferHandle | Pointer to an argument that will contain the return buffer handle. |
Returns
The bufferHandle parameter will contain the return buffer handle. This will be DRV_I2S_BUFFER_HANDLE_INVALID if the function was not successful.
Remarks
This function is thread safe in a RTOS application. It can be called from within the I2S Driver Buffer Event Handler that is registered by this client. It should not be called in the event handler associated with another I2S driver instance. It should not otherwise be called directly in an ISR.
This function is useful when there is valid read expected for every I2S write. The transmit and receive size must be same.
C
void DRV_I2S_WriteReadBufferAdd(const DRV_HANDLE handle, void * transmitBuffer, void * receiveBuffer, size_t size, DRV_I2S_BUFFER_HANDLE * bufferHandle);