2.3.4.5 USB_DEVICE_AUDIO_StatusSend Function
C
USB_DEVICE_AUDIO_RESULT USB_DEVICE_AUDIO_StatusSend(
USB_DEVICE_AUDIO_INDEX instanceIndex,
USB_DEVICE_AUDIO_TRANSFER_HANDLE* transferHandle,
USB_AUDIO_INTERRUPT_STATUS_WORD* status
);
Summary
This function requests a status write to the USB Device Audio Function Driver Layer. The function places a requests with driver to arm the status interrupt Endpoint with the status provided, the request will get serviced as data is requested by the USB Host. A handle to the request is returned in the transferHandle parameter. The termination of the request is indicated by the USB_DEVICE_AUDIO_EVENT_STATUS_SEND_COMPLETE event.
The transfer handle expires when event handler for the USB_DEVICE_AUDIO_EVENT_STATUS_SEND_COMPLETE exits. If the Status Send request could not be accepted, the function returns an error code and transferHandle will contain the value USB_DEVICE_AUDIO_TRANSFER_HANDLE_INVALID.
Description
Description of the function.
Precondition
The USB Device should be in a configured state. The USB Configuration descriptor must contain Status interrupt Endpoint descriptor.
Parameters
Parameters | Description |
instance | USB Device Audio Function Driver instance. |
transferHandle | Pointer to a USB_DEVICE_AUDIO_TRANSFER_HANDLE type of variable. This variable will contain the transfer handle in case the write request was successful. |
status | pointer to the data buffer contains the Status. In case of PIC32MZ device, this buffer should be located in coherent memory and should be aligned a 16 byte boundary. |
Returns
- USB_DEVICE_AUDIO_RESULT_OK - The Status send request was successful. transferHandle contains a valid transfer handle.
- USB_DEVICE_AUDIO_RESULT_ERROR_TRANSFER_QUEUE_FULL - internal request queue is full. The status send request could not be added.
- USB_DEVICE_AUDIO_RESULT_ERROR_INSTANCE_NOT_CONFIGURED - The specified instance is not configured yet.
- USB_DEVICE_AUDIO_RESULT_ERROR_INSTANCE_INVALID - The specified instance was not provisioned in the application and is invalid.
Example
// Shows an example of how to Submit Status Send request to Host. This assumes // that device has been configured. USB_DEVICE_AUDIO_INDEX instanceIndex; USB_DEVICE_AUDIO_TRANSFER_HANDLE transferHandle; // Following must have __attribute__((coherent, aligned(16))) for PIC32MZ USB_AUDIO_INTERRUPT_STATUS_WORD statusWord; USB_DEVICE_AUDIO_RESULT statusSendResult; //specify the Audio Function driver instance number. instanceIndex = 0; // Fill in Status Word statusWord.bOriginator = 0x01; //ID of the terminal statusWord.originator = 0x00; //Audio Control interface statusWord.memoryContentsChanged = 1; //Memory contents changed statusWord.interruptPending = 1; //Interrupt is pending statusSendResult = USB_DEVICE_AUDIO_StatusSend ( instanceIndex, &transferHandle, &statusWord); if(USB_DEVICE_AUDIO_RESULT_OK != statusSendResult) { //Do Error handling here } // The completion of the read request will be indicated by the // USB_DEVICE_AUDIO_EVENT_STATUS_SEND event. The transfer handle // will be returned along with the event.
Remarks
While the using the Audio Function Driver with PIC32MZ USB module, the audio buffer provided to the USB_DEVICE_AUDIO_StatusSend function should be placed in coherent memory and aligned at a 16 byte boundary. This can be done by declaring the buffer using the __attribute__((coherent, aligned(16))) attribute. An example is shown here
USB_AUDIO_INTERRUPT_STATUS_WORD statusWord __attribute__((coherent, aligned(16)));