80 lines
3.5 KiB
C
80 lines
3.5 KiB
C
#include "usbd_uac_process.h"
|
|
|
|
UX_DEVICE_CLASS_AUDIO_PARAMETER audio_param;
|
|
UX_DEVICE_CLASS_AUDIO_STREAM_PARAMETER audio_stream_param[1];
|
|
UX_DEVICE_CLASS_AUDIO20_CONTROL audio_control[1];
|
|
|
|
static UINT usbd_uac_request_process(UX_DEVICE_CLASS_AUDIO *audio, UX_SLAVE_TRANSFER *transfer);
|
|
static VOID usbd_uac_activate(VOID *args);
|
|
static VOID usbd_uac_deactivate(VOID *args);
|
|
|
|
static VOID usbd_uac_stream_change(UX_DEVICE_CLASS_AUDIO_STREAM *stream, ULONG alt_setting);
|
|
static VOID usbd_uac_frame_done(UX_DEVICE_CLASS_AUDIO_STREAM *stream, ULONG actual_len);
|
|
|
|
UINT usbd_uac_class_register(void) {
|
|
audio_control[0].ux_device_class_audio20_control_cs_id = 0x10;
|
|
audio_control[0].ux_device_class_audio20_control_sampling_frequency = 48000;
|
|
audio_control[0].ux_device_class_audio20_control_fu_id = 0x30;
|
|
audio_control[0].ux_device_class_audio20_control_mute[0] = 0;
|
|
audio_control[0].ux_device_class_audio20_control_volume_min[0] = 0;
|
|
audio_control[0].ux_device_class_audio20_control_volume_max[0] = 100;
|
|
audio_control[0].ux_device_class_audio20_control_volume_res[0] = 1;
|
|
audio_control[0].ux_device_class_audio20_control_volume[0] = 100;
|
|
|
|
audio_stream_param[0].ux_device_class_audio_stream_parameter_callbacks.ux_device_class_audio_stream_change =
|
|
usbd_uac_stream_change;
|
|
audio_stream_param[0].ux_device_class_audio_stream_parameter_callbacks.ux_device_class_audio_stream_frame_done =
|
|
usbd_uac_frame_done;
|
|
audio_stream_param[0].ux_device_class_audio_stream_parameter_max_frame_buffer_nb = 2;
|
|
audio_stream_param[0].ux_device_class_audio_stream_parameter_max_frame_buffer_size = 256;
|
|
audio_stream_param[0].ux_device_class_audio_stream_parameter_thread_entry = ux_device_class_audio_read_thread_entry;
|
|
|
|
audio_param.ux_device_class_audio_parameter_streams_nb = 1;
|
|
audio_param.ux_device_class_audio_parameter_streams = audio_stream_param;
|
|
audio_param.ux_device_class_audio_parameter_callbacks.ux_slave_class_audio_instance_activate = usbd_uac_activate;
|
|
audio_param.ux_device_class_audio_parameter_callbacks.ux_slave_class_audio_instance_deactivate =
|
|
usbd_uac_deactivate;
|
|
audio_param.ux_device_class_audio_parameter_callbacks.ux_device_class_audio_control_process =
|
|
usbd_uac_request_process;
|
|
|
|
return ux_device_stack_class_register(_ux_system_slave_class_audio_name, ux_device_class_audio_entry, 1, 0,
|
|
&audio_param);
|
|
}
|
|
|
|
UINT usbd_uac_request_process(UX_DEVICE_CLASS_AUDIO *audio, UX_SLAVE_TRANSFER *transfer) {
|
|
UINT status;
|
|
UX_DEVICE_CLASS_AUDIO20_CONTROL_GROUP group = {1, audio_control};
|
|
|
|
//
|
|
status = ux_device_class_audio20_control_process(audio, transfer, &group);
|
|
if (status != UX_SUCCESS) {
|
|
return status;
|
|
}
|
|
|
|
switch (audio_control[0].ux_device_class_audio20_control_changed) {
|
|
case UX_DEVICE_CLASS_AUDIO20_CONTROL_MUTE_CHANGED:
|
|
break;
|
|
case UX_DEVICE_CLASS_AUDIO20_CONTROL_VOLUME_CHANGED:
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return UX_SUCCESS;
|
|
}
|
|
|
|
static VOID usbd_uac_activate(VOID *args) {
|
|
//
|
|
}
|
|
|
|
static VOID usbd_uac_deactivate(VOID *args) {
|
|
//
|
|
}
|
|
|
|
static VOID usbd_uac_stream_change(UX_DEVICE_CLASS_AUDIO_STREAM *stream, ULONG alt_setting) {
|
|
//
|
|
}
|
|
|
|
static VOID usbd_uac_frame_done(UX_DEVICE_CLASS_AUDIO_STREAM *stream, ULONG actual_len) {
|
|
//
|
|
} |