#include <IOKit/audio/IOAudioControl.h>
IOKit/audio/IOAudioControl.h
@class IOAudioControl
@abstract Represents any controllable attribute of an IOAudioDevice.
@discussion An IOAudioControl instance may belong to one IOAudioPort. Additionally, it may associated
with an IOAudioEngine as a default control for that IOAudioEngine.
When its value changes, it sends a notification to the CoreAudio.framework (HAL). It also makes a call
to the ValueChangeHandler.
The base IOAudioControl class contains a type, a value and a channel ID representing the channel(s) which
the control acts on. It may also contain a readable format for the name of the channel as well as a
control ID that can be used to identify unique controls. Additionally it may contain a subType and a usage.
Each type has its own set of possible subTypes. There currently four different control types defined:
kIOAudioControlTypeLevel, kIOAudioControlTypeToggle, kIOAudioControlTypeSelector.
Each one is represented by a subclass of IOAudioControl: IOAudioLevelControl, IOAudioToggleControl,
IOAudioSelectorControl. The level control defines a range of allowed values and has
a defined subtype of kIOAudioLevelControlSubTypeVolume used to define a volume control. The toggle control
allows for a boolean value and has a defined subtype kIOAudioToggleControlSubTypeMute for a mute control. The
selector control has a list of allowed selections with a value and description for each allowed selection and
has the following sub types: kIOAudioSelectorControlSubTypeOutput for an output selector and
kIOAudioSelectorControlSubTypeInput for an input selector. See the subclass documentation for a more
complete description of each
There are enums for default channel ID values and common channel names in IOAudioTypes.h. The channel ID
values are prefixed with 'kIOAudioControlChannelID' and the common channel names are prefixed with
'kIOAudioControlChannelName'. All of the attributes of the IOAudioControl are stored in the registry.
The key used for each attribute is defined in IOAudioTypes.h with the define matching the following
pattern: 'kIOAudioControl<attribute name>Key'. For example: kIOAudioControlChannelIDKey.
In addition to the existing defined control types, drivers can define their own as well for other purposes.
Changes to the IOAudioControl's value made by the CoreAudio.framework are done through the IORegistry.
When the CoreAudio.framework initiates a value change, the control receives a setProperties() message.
The setProperties() implementation looks for the property 'IOAudioControlValue' and if present, calls
setValue() on the driver's IOWorkLoop with the new value. The setValue() function first checks to see
if the new value is different. If so, it calls performValueChange() to call through to the driver
to make the change in the hardware. If that call succeeds the value is changed and the new value is set
in the registry. Additionally notifications are sent to all clients that have registered for them.
IOKit/IOService.h@header
IOKit/audio/IOAudioEngine.h@header IOAudioEngine