Initial commit: TXW82x FPV v2.7.0.7-42229 SDK + project sources
This commit is contained in:
109
sdk/lib/bus/rttusb/usbhost/class/usbh_audio.h
Normal file
109
sdk/lib/bus/rttusb/usbhost/class/usbh_audio.h
Normal file
@@ -0,0 +1,109 @@
|
||||
/*
|
||||
* Copyright (c) 2022, sakumisu
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
#ifndef USBH_AUDIO_H
|
||||
#define USBH_AUDIO_H
|
||||
|
||||
#include "rtthread.h"
|
||||
#include "include/rttusb_host.h"
|
||||
#include "uaudioreg.h"
|
||||
#include "dev/usb/hgusb20_v1_dev_api.h"
|
||||
#include "dev/usb/usb11_v0/hgusb11_v0_host_api.h"
|
||||
#include "lib/audio/uac/uac_host.h"
|
||||
#include "audio_usbh_msi.h"
|
||||
|
||||
#ifndef CONFIG_USBHOST_MAX_AUDIO_CLASS
|
||||
#define CONFIG_USBHOST_MAX_AUDIO_CLASS 1
|
||||
#endif
|
||||
|
||||
#define CONFIG_USBHOST_MAX_INTF_ALTSETTINGS 8
|
||||
#define CONFIG_USBHOST_DEV_NAMELEN 16
|
||||
|
||||
struct usbh_audio_format_type {
|
||||
rt_uint8_t channels;
|
||||
rt_uint8_t format_type;
|
||||
rt_uint8_t bitresolution;
|
||||
rt_uint8_t sampfreq_num;
|
||||
rt_uint32_t sampfreq[3];
|
||||
};
|
||||
|
||||
/**
|
||||
* bSourceID in feature_unit = input_terminal_id
|
||||
* bSourceID in output_terminal = feature_unit_id
|
||||
* terminal_link_id = input_terminal_id or output_terminal_id (if input_terminal_type or output_terminal_type is 0x0101)
|
||||
*
|
||||
*
|
||||
*/
|
||||
struct usbh_audio_module {
|
||||
const char *name;
|
||||
rt_uint8_t data_intf;
|
||||
rt_uint8_t input_terminal_id;
|
||||
rt_uint16_t input_terminal_type;
|
||||
rt_uint16_t input_channel_config;
|
||||
rt_uint8_t output_terminal_id;
|
||||
rt_uint16_t output_terminal_type;
|
||||
rt_uint8_t feature_unit_id;
|
||||
rt_uint8_t feature_unit_controlsize;
|
||||
rt_uint8_t feature_unit_controls[8];
|
||||
rt_uint8_t terminal_link_id;
|
||||
struct usbh_audio_format_type altsetting[CONFIG_USBHOST_MAX_INTF_ALTSETTINGS];
|
||||
};
|
||||
|
||||
struct usbh_audio {
|
||||
//struct usbh_hubport *hport;
|
||||
struct uinstance* device;
|
||||
char devname[CONFIG_USBHOST_DEV_NAMELEN];
|
||||
struct uendpoint_descriptor isoin; /* ISO IN endpoint */
|
||||
struct uendpoint_descriptor isoout; /* ISO OUT endpoint */
|
||||
|
||||
upipe_t pipe_in;
|
||||
upipe_t pipe_out;
|
||||
|
||||
rt_uint8_t ctrl_intf; /* interface number */
|
||||
rt_uint8_t minor;
|
||||
rt_uint16_t isoin_mps;
|
||||
rt_uint16_t isoout_mps;
|
||||
bool is_opened;
|
||||
rt_uint16_t bcdADC;
|
||||
rt_uint8_t bInCollection;
|
||||
rt_uint8_t num_of_intf_altsettings;
|
||||
struct usbh_audio_module module[2];
|
||||
rt_uint8_t module_num;
|
||||
rt_uint8_t *rx_buff;
|
||||
|
||||
void *user_data;
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
int usbh_audio_open(struct usbh_audio *audio_class, const char *name, rt_uint32_t samp_freq);
|
||||
int usbh_audio_close(struct usbh_audio *audio_class, const char *name);
|
||||
int usbh_audio_get_min_volume(struct usbh_audio *audio_class, const char *name, rt_uint16_t *min_volume);
|
||||
int usbh_audio_get_max_volume(struct usbh_audio *audio_class, const char *name, rt_uint16_t *max_volume);
|
||||
int usbh_audio_get_cur_volume(struct usbh_audio *audio_class, const char *name, rt_uint16_t *cur_volume);
|
||||
int usbh_audio_get_res_volume(struct usbh_audio *audio_class, const char *name, rt_uint16_t *res_volume);
|
||||
int usbh_audio_set_volume(struct usbh_audio *audio_class, const char *name, rt_uint16_t volume_hex);
|
||||
int usbh_audio_set_volume_db(struct usbh_audio *audio_class, const char *name, int volume_db, int min_volume_db, int max_volume_db);
|
||||
int usbh_audio_set_mute(struct usbh_audio *audio_class, const char *name, bool mute);
|
||||
|
||||
void rtt_usbh_audio_irq(void * dev, rt_uint32_t irq, rt_uint8_t ep);
|
||||
|
||||
rt_uint32_t rtt_usbh_audio_dev_pipe_mange(rt_uint8_t dev_num, const char *name, rt_uint8_t alloc_or_free);
|
||||
|
||||
rt_uint32_t rtt_usbh_audio_user_open();
|
||||
rt_uint32_t rtt_usbh_audio_user_close();
|
||||
rt_uint32_t rtt_usbh_audio_user_stop();
|
||||
rt_uint32_t rtt_usbh_audio_user_start();
|
||||
|
||||
void usbh_audio_run(struct usbh_audio *audio_class);
|
||||
void usbh_audio_stop(struct usbh_audio *audio_class);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* USBH_AUDIO_H */
|
||||
Reference in New Issue
Block a user