#ifndef _USB_AUDIO_H
#define _USB_AUDIO_H

typedef struct _uda_t {
#if USB_MIC_EN
    epcb_t *isoc_in;                         //mic endpoint
    u8 flag_isocin_int;
    u8 flag_isocin_en;
    u16 mic_vol;
    u8 mic_mute;
#endif
#if USB_SPEAKER_EN
    epcb_t *isoc_out;                        //speaker endpoint
    u8 flag_isocout_int;
    u8 flag_isocout_en;
    u8 spk_vol;
    u8 spk_mute;
#endif
} uda_t;


void uda_init(void);
void usb_isoc_ep_reset(void);
void usb_audio_init(void);
void usb_audio_deinit(void);
void usb_audio_process(void);

void uda_set_isocin_flag(u8 val);
uint8_t uda_get_isocin_flag(void);
bool uda_get_mic_mute(void);
bool uda_get_mic_volume(u8 req);
void uda_set_mic_mute(u8 val);
void uda_set_mic_volume(u16 val);
bool uda_mic_check(void);
void uda_mic_buffer_prepare(uint8_t *ibuf, uint32_t size);
void usb_audio_mic_stream(void *ibuf, u32 sample);

bool uda_get_spk_mute(void);
bool uda_get_spk_volume(u8 req);
void uda_set_isocout_flag(u8 val);
uint8_t uda_get_isocout_flag(void);
void uda_set_spk_mute(u8 val);
void uda_set_spk_volume(u16 val);
void usb_audio_speaker_stream(void *obuf, u32 *sample);

#endif // _USB_AUDIO_H
