📄 caiaq-device.h
字号:
#ifndef CAIAQ_DEVICE_H#define CAIAQ_DEVICE_H#include "../usbaudio.h"#define USB_VID_NATIVEINSTRUMENTS 0x17cc#define USB_PID_RIGKONTROL2 0x1969#define USB_PID_RIGKONTROL3 0x1940#define USB_PID_KORECONTROLLER 0x4711#define USB_PID_AK1 0x0815#define USB_PID_AUDIO8DJ 0x1978#define EP1_BUFSIZE 64#define CAIAQ_USB_STR_LEN 0xff#define MAX_STREAMS 32//#define SND_USB_CAIAQ_DEBUG#define MODNAME "snd-usb-caiaq"#define log(x...) snd_printk(KERN_WARNING MODNAME" log: " x)#ifdef SND_USB_CAIAQ_DEBUG#define debug(x...) snd_printk(KERN_WARNING MODNAME " debug: " x)#else#define debug(x...) do { } while(0)#endif#define EP1_CMD_GET_DEVICE_INFO 0x1#define EP1_CMD_READ_ERP 0x2#define EP1_CMD_READ_ANALOG 0x3#define EP1_CMD_READ_IO 0x4#define EP1_CMD_WRITE_IO 0x5#define EP1_CMD_MIDI_READ 0x6#define EP1_CMD_MIDI_WRITE 0x7#define EP1_CMD_AUDIO_PARAMS 0x9#define EP1_CMD_AUTO_MSG 0xbstruct caiaq_device_spec { unsigned short fw_version; unsigned char hw_subtype; unsigned char num_erp; unsigned char num_analog_in; unsigned char num_digital_in; unsigned char num_digital_out; unsigned char num_analog_audio_out; unsigned char num_analog_audio_in; unsigned char num_digital_audio_out; unsigned char num_digital_audio_in; unsigned char num_midi_out; unsigned char num_midi_in; unsigned char data_alignment;} __attribute__ ((packed));struct snd_usb_caiaq_cb_info;struct snd_usb_caiaqdev { struct snd_usb_audio chip; struct urb ep1_in_urb; struct urb midi_out_urb; struct urb **data_urbs_in; struct urb **data_urbs_out; struct snd_usb_caiaq_cb_info *data_cb_info; unsigned char ep1_in_buf[EP1_BUFSIZE]; unsigned char ep1_out_buf[EP1_BUFSIZE]; unsigned char midi_out_buf[EP1_BUFSIZE]; struct caiaq_device_spec spec; spinlock_t spinlock; wait_queue_head_t ep1_wait_queue; wait_queue_head_t prepare_wait_queue; int spec_received, audio_parm_answer; char vendor_name[CAIAQ_USB_STR_LEN]; char product_name[CAIAQ_USB_STR_LEN]; char serial[CAIAQ_USB_STR_LEN]; int n_streams, n_audio_in, n_audio_out; int streaming, first_packet, output_running; int audio_in_buf_pos[MAX_STREAMS]; int audio_out_buf_pos[MAX_STREAMS]; int period_in_count[MAX_STREAMS]; int period_out_count[MAX_STREAMS]; int input_panic, output_panic; char *audio_in_buf, *audio_out_buf; unsigned int samplerates; struct snd_pcm_substream *sub_playback[MAX_STREAMS]; struct snd_pcm_substream *sub_capture[MAX_STREAMS]; /* Linux input */#ifdef CONFIG_SND_USB_CAIAQ_INPUT struct input_dev *input_dev;#endif /* ALSA */ struct snd_pcm *pcm; struct snd_pcm_hardware pcm_info; struct snd_rawmidi *rmidi; struct snd_rawmidi_substream *midi_receive_substream; struct snd_rawmidi_substream *midi_out_substream;};struct snd_usb_caiaq_cb_info { struct snd_usb_caiaqdev *dev; int index;};#define caiaqdev(c) ((struct snd_usb_caiaqdev*)(c)->private_data)int snd_usb_caiaq_set_audio_params (struct snd_usb_caiaqdev *dev, int rate, int depth, int bbp);int snd_usb_caiaq_set_auto_msg (struct snd_usb_caiaqdev *dev, int digital, int analog, int erp);#endif /* CAIAQ_DEVICE_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -