1.1.2.5.2 DRV_AK4954_BufferAddWrite Function
void DRV_AK4954_BufferAddWrite ( const DRV_HANDLE handle, DRV_AK4954_BUFFER_HANDLE *bufferHandle, void *buffer, size_t size )
Summary
Schedule a non-blocking driver write operation.
Description
This function schedules a non-blocking write operation. The function returns with a valid buffer handle in the bufferHandle argument if the write request was scheduled successfully. The function adds the request to the hardware instance transmit 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_AK4954_BUFFER_HANDLE_INVALID
if a buffer could not be allocated to the request
if the input buffer pointer is NULL
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_AK4954_BUFFER_EVENT_COMPLETE event if the buffer was processed successfully of DRV_AK4954_BUFFER_EVENT_ERROR event if the buffer was not processed successfully.
Preconditions
The DRV_AK4954_Initialize routine must have been called for the specified AK4954 device instance and the DRV_AK4954_Status must have returned SYS_STATUS_READY.
DRV_AK4954_Open must have been called to obtain a valid opened device handle.
DRV_IO_INTENT_WRITE must have been specified in the DRV_AK4954_Open call.
Parameters
Parameters | Description |
---|---|
handle | Handle of the AK4954 instance as return by the DRV_AK4954_Open function. |
buffer | Data to be transmitted. |
size | Buffer size in bytes. |
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_AK4954_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 AK4954 Driver Buffer Event Handler that is registered by this client. It should not be called in the event handler associated with another AK4954 driver instance. It should not otherwise be called directly in an ISR.
Example
MY_APP_OBJ myAppObj;
uint8_t mybuffer[MY_BUFFER_SIZE]; DRV_AK4954_BUFFER_HANDLE bufferHandle;
_\/\/ myAK4954Handle is the handle returned \/\/ by the DRV_AK4954_Open function._
_\/\/ Client registers an event handler with driver_
DRV_AK4954_BufferEventHandlerSet(myAK4954Handle,
APP_AK4954BufferEventHandler, (uintptr_t)&myAppObj);
DRV_AK4954_BufferAddWrite(myAK4954handle, &bufferHandle myBuffer, MY_BUFFER_SIZE); if(DRV_AK4954_BUFFER_HANDLE_INVALID == bufferHandle) {
_\/\/ Error handling here_
}
_\/\/ Event is received when \/\/ the buffer is processed._
void APP_AK4954BufferEventHandler(DRV_AK4954_BUFFER_EVENT event, DRV_AK4954_BUFFER_HANDLE bufferHandle, uintptr_t contextHandle)
{ _\/\/ contextHandle points to myAppObj._ switch(event) { case DRV_AK4954_BUFFER_EVENT_COMPLETE: _\/\/ This means the data was transferred._ break; case DRV_AK4954_BUFFER_EVENT_ERROR: _\/\/ Error handling here._ break; default: break; }
}
C
void DRV_AK4954_BufferAddWrite(const DRV_HANDLE handle, DRV_AK4954_BUFFER_HANDLE * bufferHandle, void * buffer, size_t size);