Added new Host mode Audio Class driver.

Added new EVENT_Audio_StreamStartStopChange() event to the Audio Device Class driver to detect stream start/stop events.
This commit is contained in:
Dean Camera 2011-06-08 01:26:52 +00:00
parent 605ef921cc
commit e572ee7ff2
11 changed files with 621 additions and 22 deletions

View file

@ -70,6 +70,7 @@ void Audio_Device_ProcessControlRequest(USB_ClassInfo_Audio_Device_t* const Audi
Endpoint_ClearStatusStage();
AudioInterfaceInfo->State.InterfaceEnabled = ((USB_ControlRequest.wValue & 0xFF) != 0);
EVENT_Audio_StreamStartStopChange(AudioInterfaceInfo);
}
break;
@ -164,4 +165,9 @@ bool Audio_Device_ConfigureEndpoints(USB_ClassInfo_Audio_Device_t* const AudioIn
return true;
}
void Audio_Device_Event_Stub(void)
{
}
#endif

View file

@ -101,9 +101,9 @@
*/
struct
{
bool InterfaceEnabled; /**< Set and cleared by the class driver to indicate if the host has enabled the streaming endpoints
* of the Audio Streaming interface.
*/
bool InterfaceEnabled; /**< Set and cleared by the class driver to indicate if the host has enabled the streaming endpoints
* of the Audio Streaming interface.
*/
} State; /**< State data for the USB class interface within the device. All elements in this section
* are reset to their defaults when the interface is enumerated.
*/
@ -160,6 +160,14 @@
uint16_t* const DataLength,
uint8_t* Data);
/** Audio class driver event for an Audio Stream start/stop change. This event fires each time the device receives a stream enable or
* disable control request from the host, to start and stop the audio stream. The current state of the stream can be determined by the
* State.InterfaceEnabled value inside the Audio interface structure passed as a parameter.
*
* \param[in,out] AudioInterfaceInfo Pointer to a structure containing an Audio Class configuration and state.
*/
void EVENT_Audio_StreamStartStopChange(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo);
/* Inline Functions: */
/** General management task for a given Audio class interface, required for the correct operation of the interface. This should
* be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().
@ -348,6 +356,18 @@
Endpoint_ClearIN();
}
/* Private Interface - For use in library only: */
#if !defined(__DOXYGEN__)
/* Function Prototypes: */
#if defined(__INCLUDE_FROM_AUDIO_DEVICE_C)
void Audio_Device_Event_Stub(void) ATTR_CONST;
void EVENT_Audio_StreamStartStopChange(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo)
ATTR_WEAK ATTR_NON_NULL_PTR_ARG(1) ATTR_ALIAS(Audio_Device_Event_Stub);
#endif
#endif
/* Disable C linkage for C++ Compilers: */
#if defined(__cplusplus)
}

View file

@ -177,7 +177,7 @@
/** CDC class driver event for a control line state change on a CDC interface. This event fires each time the host requests a
* control line state change (containing the virtual serial control line states, such as DTR) and may be hooked in the
* user program by declaring a handler function with the same name and parameters listed here. The new control line states
* are available in the ControlLineStates.HostToDevice value inside the CDC interface structure passed as a parameter, set as
* are available in the State.ControlLineStates.HostToDevice value inside the CDC interface structure passed as a parameter, set as
* a mask of CDC_CONTROL_LINE_OUT_* masks.
*
* \param[in,out] CDCInterfaceInfo Pointer to a structure containing a CDC Class configuration and state.