typedef struct oss_audioinfo
{
int dev; /* Audio device number */
char name[64];
int busy; /* 0, OPEN_READ, OPEN_WRITE or OPEN_READWRITE */
int pid;
int caps; /* DSP_CAP_INPUT, DSP_CAP_OUTPUT */
int iformats, oformats;
int magic; /* Reserved for internal use */
char cmd[64]; /* Command using the device (if known) */
int card_number;
int port_number;
int mixer_dev;
int real_device; /* This is the right /dev/dsp# device to open */
int enabled; /* 1=enabled, 0=device not ready at this moment */
int flags; /* For internal use only - no practical meaning */
int min_rate, max_rate; /* Sample rate limits */
int min_channels, max_channels; /* Number of channels supported */
int binding; /* DSP_BIND_FRONT, etc. 0 means undefined */
int rate_source;
char handle[32];
int nrates, rates[20]; /* Please read the manual before using these */
oss_longname_t song_name; /* Song name (if given) */
oss_label_t label_name; /* Device label (if given) */
int filler[195];
} oss_audioinfo;
This ioctl is meant to go straight to the hardware, reporting only what's supported natively by the hardware. That rules out emulating SNDCTL_DSP_GETCAPS/GETFMTS, because they both depend on the intermediate channel interface. Mailed netchild & ariff for advice.
| field | TODO |
| dev | unit number? |
| name | device_get_desc() |
| busy | examine read and write channel flags for CHN_F_BUSY |
| pid | XXX – this depends on the channel opened; with virtual channels, multiple processes may have a single HW device |
| caps | XXX – need way to get to driver capabilties, formats, etc. w/o touching channel interface |
| iformats | XXX – same caveat as caps |
| ofortmats | XXX – same caveat as caps |
| cmd | XXX – see pid |
| card_number | set to -1 for now (not very useful; OSS docs recommend not using this field) |
| song_name | write SNDCTL_{GET,SET}SONG first |
| label | write SNDCTL_{GET,SET}LABEL first |
| port_number | |
| mixer_dev | |
| real_device | unit number – corresponds to /dev/dspN |
| devnode | cdev→si_name |
| enabled | device_t dev→state >= DS_ATTACHED |
| min_rate, max_rate | XXX – same caveat as caps |
| min_channels, max_channels | 1 = mono, 2 = stereo, etc.; XXX – same caveat as caps |
| binding | not officially part of OSS; see SNDCTL_DSP_BIND_CHANNEL |
| rate_source | sample rate group? unsure. |
| handle | constant identifier – (ex: PCI slot number, etc.) think about this later |
| nrates, rates | not exported by card drivers; would need to touch them all |