STM32H750VB_DAC_AzureRTOS/Core/Src/usbd_uac_process.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) {
//
}