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
  • ryanbeasley/ioctlref/sndctl_audioinfo.txt
  • Last modified: 2008/06/17 21:37
  • by 127.0.0.1