enum {
master_chan = 0x00,
Speed_control = 0x00,
/* Items below are defined by USB standard: */
Mute_control = 0x01,
Volume_control = 0x02,
Bass_control = 0x03,
Mid_control = 0x04,
Treble_control = 0x05,
Equalizer_control = 0x06,
Agc_control = 0x07,
Delay_control = 0x08,
Bassboost_control = 0x09,
Loudness_control = 0x0a,
/* Items below are defined by implementation: */
Channel_control = 0x0b,
Resolution_control = 0x0c,
Ncontrol,
Selector_control = 0x0d,
sampling_freq_control = 0x01,
};
#define AS_GENERAL 1
#define FORMAT_TYPE 2
#define FORMAT_SPECIFIC 3
#define PCM 1
#define PCM8 2
#define IEEE_FLOAT 3
#define ALAW 4
#define MULAW 5
#define SAMPLING_FREQ_CONTROL 0x01
typedef struct Audioalt Audioalt;
struct Audioalt {
int nchan;
int res;
int subframesize;
int minfreq, maxfreq; /* continuous freqs */
int freqs[8]; /* discrete freqs */
int caps; /* see below for meanings */
};
enum {
/* Audioalt->caps bits */
has_setspeed = 0x1, /* has a speed_set command */
has_pitchset = 0x2, /* has a pitch_set command */
has_contfreq = 0x4, /* frequency continuously variable */
has_discfreq = 0x8, /* discrete set of frequencies */
onefreq = 0x10, /* only one frequency */
maxpkt_only = 0x80, /* packets must be padded to max size */
};
extern int defaultspeed[2];
extern Device *ad;
extern Channel *controlchan;
void audio_interface(Device *d, int n, ulong csp, void *bb, int nb);
void setalt(Device *d, int endpt, int value);
int getalt(Device *d, int endpt);
int setspeed(int rec, int speed);
int setcontrol(int rec, char *name, long *value);
int getspecialcontrol(int rec, int ctl, int req, long *value);
int getcontrol(int rec, char *name, long *value);
int findalt(int rec, int nchan, int res, int speed);
void getcontrols(void);
void serve(void *);
int nbchanprint(Channel *c, char *fmt, ...);
int Aconv(Fmt *fp);
|