IOAudioDevice
Абстрактный базовый класс для единственной части аудио аппаратных средств. IOAudioDevice обеспечивает точку централизованной координации для драйвера аудио.
Драйвер аудио требуется, чтобы разделять IOAudioDevice на подклассы для обеспечения рабочего аудио для системы. Единственный экземпляр драйвера будет содержать единственный экземпляр водительского подкласса IOAudioDevice. Подкласс ответственен за отображение всех ресурсов устройства от куска поставщика услуг. Это должно управлять доступом к аппаратным средствам так, чтобы аппаратные средства не входили в противоречивое состояние. Возможно, что различные потоки могут выполнить запросы аппаратных средств одновременно. Суперкласс IOAudioDevice предоставляет IOWorkLoop и IOCommandGate на IOWorkLoop, через который могут синхронизироваться все аппаратные доступы. Все точки входа ко всем частям драйвера, которым управляет IOAudioFamily, будут синхронизироваться через этот IOWorkLoop.
Подкласс IOAudioDevice ответственен за создание остальной части частей драйвера. Это должно идентифицировать и создать все IOAudioEngines, автоматически не создающиеся системой (т.е. те, которых не является соответствующим и инстанцирует IOKit непосредственно).
Подкласс IOAudioDevice должен перечислить и создать весь IOAudioControls для соответствия функций устройств.
Это должно также выполнить значение управления chages, когда требуется системой (т.е. настройки громкости).
Чтобы позволить сну и следу работать над системой, подкласс IOAudioDevice ответственен за выполнение необходимых действий, чтобы спать и разбудить его аппаратные средства (и восстановить необходимое состояние на следе).
Класс IOAudioDevice предоставляет услуги таймера, позволяющие различным элементам в драйвере аудио получать уведомления таймера по мере необходимости. Эти службы были разработаны с идеей, что самые синхронизированные события в типичном драйвере аудио должны быть сделаны, по крайней мере, так же часто как определенный интервал. Далее, это разработано с идеей, что быть вызванным чаще, чем указанный интервал ничего не повреждает - и фактически может помочь. С этим в памяти, услуги таймера, предоставленные классом IOAudioDevice, позволяют различным целям регистрироваться для обратных вызовов таймера, по крайней мере, так же часто как указанный интервал. Фактический интервал будет самым маленьким из интервалов всех обратных вызовов. Таким образом, мы избегаем издержек наличия многих таймеров в единственном аудиоустройстве. Как пример, каждый вывод IOAudioEngine имеет таймер для выполнения стирающей головки. Не повреждает выполнять стирающую головку чаще. Кроме того, типичный подкласс IOAudioDevice, возможно, должен выполнить таймер для проверки на изменения состояния устройства (например, вставки разъема).
Существует много строк, переданных от драйвера до CoreAudio.framework и затем в приложения. Все те строки должны быть локализованы драйвером. Чтобы сделать это, пакет kext должен иметь файлы локализованной строки, следующие инструкциям локализации Mac OS X. IOAudioDevice должен содержать свойство с именем bundle/kext, содержащего ресурсы локализованной строки. Чтобы сделать это, водительская индивидуальность в ресурсах пакета могла иметь свойство под названием 'IOAudioDeviceLocalizedBundle' с путем bundle/kext относительно '/System/Library/Extensions' '. Это могло также быть установлено подклассом IOAudioDevice в его initHardware () функция. Для этого вызовите setProperty (kIOAudioDeviceLocalizedBundleKey, «Driver.kext»).
В типичном драйвере подкласс IOAudioDevice реализует initHardware () для выполнения конструкции драйвера и инициализации аппаратного обеспечения. В той инициализации это должно создать по крайней мере один экземпляр IOAudioEngine и активировать его. Для активации, новый IOAudioEngine activateAudioEngine () нужно вызвать для каждого. Это должно создать IOAudioControls, соответствующий возможности оборудования, чтобы позволить системе регулировать громкость, бесшумный режим и вводить выбор. Для добавления тех средств управления к драйверу каждое управление должно быть присоединено к IOAudioEngine, к которому это применяется путем вызова addDefaultAudioControl () на IOAudioEngine. Во время инициализации это должно также вызвать setDeviceName (), setDeviceShortName () и setManufacturerName () с локализованными строками, представляющими каждый из атрибутов.
Если драйвер должен работать должным образом после сна/следа он должен реализовать performPowerStateChange () и соглашение с переходами следа и сном. Это может также иметь дело с переходами состояния ожидания для выключения питания устройства, когда это не используется (особенно полезный для устройств, присоединенных к переносимой работе заряда батареи).
Наследование
Не применимый
Соответствует
Не применимый
Оператор импорта
Не применимый
Objective C
@import Kernel;
Доступность
Доступный в OS X v10.1 и позже.
-
Это просто вызывает activateAudioEngine (IOAudioEngine *audioEngine, bool shouldStartAudioEngine) со значением истины для shouldStartAudioEngine.
Объявление
C++
virtual IOReturn activateAudioEngine( IOAudioEngine *
audioEngine
);Параметры
audioEngine
Экземпляр IOAudioEngine, который будет активирован. Это обрабатывается как недавно выделенный экземпляр.
Возвращаемое значение
Если аудио механизм был успешно активирован, возвращает true.
-
Это вызывают, чтобы добавить новый объект IOAudioEngine к IOAudioDevice.
Объявление
C++
virtual IOReturn activateAudioEngine( IOAudioEngine *
audioEngine
, boolshouldStartAudioEngine
);Параметры
audioEngine
Экземпляр IOAudioEngine, который будет активирован.
shouldStartAudioEngine
Если это правда, аудио двигатель обрабатывается как недавно выделенный экземпляр IOAudioEngine и соответственно присоединен и запущен согласно соглашению IOKit. Если это - ложь, предполагается, что некоторый другой процесс (возможно IOKit соответствие процесса) запустил IOAudioEngine и пропустит тот шаг.
Возвращаемое значение
Если аудио механизм был успешно активирован, возвращает true.
Обсуждение
Как только IOAudioEngine был активирован этой функцией, это готово начать перемещать аудиоданные. Это нужно вызвать любым во время initHardware подкласса () реализацией для каждого IOAudioEngine, который создает устройство. Если бы аудио механизм автоматически создавался соответствием IOKIT процесса, или это должен вызвать сам IOAudioEngine. Система не будет в состоянии должным образом отследить и управлять IOAudioEngines, если они не будут активированы хотя эта функция. Эта реализация сохранит IOAudioEngine, в то время как это обеспечивает контроль над ним. Когда аудио механизм будет деактивирован, IOAudioEngine будет выпущен. Если подкласс IOAudioDevice передаст недавно инстанцированный IOAudioEngine, то он должен будет выпустить аудио механизм после того, как он был активирован. Это обеспечит, чтобы refCount на аудио механизме был корректен, когда это деактивировано, когда останавливается драйвер. Это позволяет аудио механизму быть освобожденным, когда он больше не необходим.
-
Добавляет обратный вызов TimerEvent для данной цели, вызванной, по крайней мере, так же часто, как указано в интервале.
Объявление
C++
virtual IOReturn addTimerEvent( OSObject *
target
, TimerEventevent
, AbsoluteTimeinterval
);Параметры
target
Этот параметр является целевым объектом TimerEvent.
event
Функция обратного вызова вызвала каждый раз огни таймера.
interval
Обратный вызов будут часто вызывать, по крайней мере, этим.
Возвращаемое значение
Возвраты kIOReturnSuccess, если было успешно добавлено событие таймера.
Обсуждение
Частота обратных вызовов события таймера будет самым маленьким интервалом, указанным всеми целями. Только один интервал и обратный вызов могут быть указаны на цель. Если addTimerEvent вызывают дважды с той же целью, второй переопределяет первое. Если первый вызов имел самый маленький интервал, в настоящее время существует ошибка, инициированная. В этом случае тот самый маленький интервал все еще использовался бы.
-
Добавляет порт к списку IOAudioDevice портов и присоединяет порт к своему родителю и присоединяет дочерний элемент к порту.
Объявление
C++
virtual IOReturn attachAudioPort( IOAudioPort *
port
, IORegistryEntry *parent
, IORegistryEntry *child
);Параметры
port
Недавно создаваемый экземпляр IOAudioPort, который будет активирован.
parent
Родительский IOAudioPort или IOAudioEngine данного порта.
child
Дочерний IOAudioPort или IOAudioEngine данного порта.
Возвращаемое значение
Когда порт был успешно добавлен и присоединен, возвращает true.
Обсуждение
Эта функция обеспечивает функциональность для представления сигнальной цепочки устройства в IOAudioPlane в IORegistry. Родитель (и) IOAudioPort, прежде чем это в сигнальной цепочке и ее дочерних элементах после него. Этот метод можно вызвать многократно для единственного IOAudioPort. Когда существует много дочерних элементов или родителей, это необходимо. Как только отношение сделано, не необходимо сделать обратное отношение. Значение Нулевого может быть передано в или для родителя или для дочернего элемента или обоих. IOAudioPort передал в, должен быть недавно выделенный экземпляр IOAudioPort. Эта функция соответственно присоединит и запустит объект порта.Примечание: Не необходимо использовать IOAudioPorts в полностью функциональном драйвере аудио.
-
Вызванный IOAudioEngine, когда это запускает
Объявление
C++
virtual void audioEngineStarting();
Обсуждение
Это нужно только вызвать в то время как на IOWorkLoop. Это не предназначается, чтобы быть вызванным непосредственно. Это вызывают, когда IOAudioEngine запускает, чтобы позволить IOAudioDevice отслеживать рабочие аудио механизмы и изменять состояние электропитания от kIOAudioDeviceIdle до kIOAudioDeviceActive, когда первый аудио механизм запускает. Если изменение состояния сделано асинхронно, оно ожидает изменения состояния для завершения. Это должно гарантировать, что система не начинает играть аудио, пока IOAudioDevice не завершил свой переход к kIOAudioDeviceActive.
-
Вызванный IOAudioEngine, когда это остановилось
Объявление
C++
virtual void audioEngineStopped();
Обсуждение
Это нужно только вызвать в то время как на IOWorkLoop. Это не предназначается, чтобы быть вызванным непосредственно. Это вызывают, когда IOAudioEngine остановился, чтобы позволить IOAudioDevice отслеживать рабочие аудио механизмы и изменять состояние электропитания от kIOAudioDeviceActive до kIOAudioDeviceIdle, когда останавливается последний аудио механизм. Если изменение состояния сделано асинхронно, оно ожидает изменения состояния для завершения.
-
Вызванный, когда изменение состояния электропитания завершено
Объявление
C++
virtual IOReturn completePowerStateChange();
Возвращаемое значение
Возвраты kIOReturnSuccess на успешном завершении
Обсуждение
В случае асинхронного изменения состояния электропитания подкласс ответственен за вызывание этой функции. Безопасно вызвать эту функцию если не на IOWorkLoop. Это вызовы функции protectedCompletePowerStateChange () через IOCommandGate и completePowerStateChangeAction (). Если вызов уже находится на IOWorkLoop, безопасно вызвать protectedCompletePowerStateChange () непосредственно.
-
Действие IOCommandGate, вызывающее protectedCompletePowerStateChange () при содержании IOCommandGate.
Объявление
C++
static IOReturn completePowerStateChangeAction( OSObject *
owner
, void *arg1
, void *arg2
, void *arg3
, void *arg4
);Параметры
owner
Владелец IOCommandGate (IOAudioDevice в этом случае)
Возвращаемое значение
Возвращает результат protectedCompletePowerStateChange ()
Обсуждение
Это необходимо, чтобы позволить protectedCompletePowerStateChange () быть вызванным на IOWorkLoop.
-
Деактивировал все аудио механизмы в устройстве.
Объявление
C++
virtual void deactivateAllAudioEngines();
Обсуждение
Это вызывает остановка () и свободное () методы в IOAudioDevice для завершенного закрытия всех аудио механизмов, поскольку закрывается драйвер.
-
Деактивировал все порты в устройстве.
Объявление
C++
virtual void detachAllAudioPorts();
Обсуждение
Это вызывает остановка () и свободное () методы в IOAudioDevice для завершенного закрытия всех портов, поскольку закрывается драйвер.
-
Вызванный timerFired (), чтобы заставить обратные вызовы события таймера, которые вызовут.
Объявление
C++
virtual void dispatchTimerEvents( bool
force
);Параметры
force
bool параметрический усилитель, чтобы позволить событиям таймера, которые будут диспетчеризированы, даже если устройство находится в kIOAudioDeviceSleep состоянии электропитания.
Обсуждение
Этот метод выполняет итерации через все событие таймера, предназначается и вызывает обратный вызов на каждом. Если флаг силы не будет установлен в истину, события таймера будут только диспетчеризированы, если состояние электропитания не будет kIOAudioDeviceSleep. Это предотвращает неожиданные взрывы таймера при создании следа-> сон-> переходы следа. Эта функция должна быть вызвана на IOWorkLoop.
-
Силы каждый IOAudioControl в драйвере для спугивания его значения к аппаратным средствам. Это заставит любого ValueChangeHandler IOAudioControl быть вызванным.
Объявление
C++
virtual void flushAudioControls();
Обсуждение
Это может использоваться, чтобы вынудить аппаратные средства быть обновленными с текущей стоимостью каждого управления. Это может быть полезно во время следа, например.
-
Освобождает ресурсы, используемые экземпляром IOAudioDevice
Объявление
C++
virtual void free();
Обсуждение
Этот метод деактивирует все аудио аудио механизмы и выпустит audioEngines OSSet. Это также деактивирует все аудиопорты и выпустит аудиопорты OSSet. Это выпустит timerEvents OSDictionary, а также отменит любые выдающиеся обратные вызовы таймера. Это очистит все источники событий и workLoop.
Не вызывайте это непосредственно. Когда refcount экземпляра переходит в 0, это вызывает автоматически система. Постепенно уменьшать refcount, разъединение вызова () на объекте.
-
Возвращает IOCommandGate для этого IOAudioDevice
Объявление
C++
virtual IOCommandGate *getCommandGate() const;
Обсуждение
Этот IOCommandGate позволяет вызовам в этот IOAudioDevice синхронизироваться на IOWorkLoop.
-
Если изменение состояния происходит, возвращает незаконченное состояние электропитания. Иначе это возвращает текущее изменение состояния электропитания.
Объявление
C++
virtual IOAudioDevicePowerState getPendingPowerState();
Возвращаемое значение
Незаконченное состояние электропитания
-
Возвращает текущее состояние электропитания (старое состояние электропитания, если изменение происходит).
Объявление
C++
virtual IOAudioDevicePowerState getPowerState();
Возвращаемое значение
Текущее состояние электропитания
-
Возвращает IOWorkLoop для драйвера
Объявление
C++
virtual IOWorkLoop *getWorkLoop() const;
Обсуждение
IOWorkLoop привык к синхронизируемому все критические аспекты драйвера. Это включает все точки входа в драйвер, а также управление питанием.
-
Инициализируйте недавно создаваемый экземпляр IOAudioDevice.
Объявление
C++
virtual bool init( OSDictionary *
properties
);Параметры
properties
OSDictionary свойств устройства, передающийся супер:: init и набор в IORegistry.
Возвращаемое значение
истина, если инициализация была успешна
Обсуждение
Эта реализация инициализирует все структуры данных и переменные, используемые IOAudioDevice. currentPowerState и pendingPowerState переменные установлены в kIOAudioDeviceIdle. Подкласс, переопределяющий этот метод, должен вызвать реализацию суперкласса.
-
Эта функция вызвана запуском () для обеспечения удобного места для подкласса для выполнения его инициализации.
Объявление
C++
virtual bool initHardware( IOService *
provider
);Параметры
provider
Кусок поставщика услуг для устройства.
Возвращаемое значение
Эта функция должна возвратить true на успешной инициализации.
Обсуждение
В типичной реализации драйвер был бы реализация эта функция, и выполните много задач. Те включают отображающиеся аппаратные ресурсы, инициализируя аппаратные средства к известному состоянию, создавая IOAudioEngines, IOAudioControls и IOAudioStreams. Дополнительно это должно также вызвать setDeviceName (), setDeviceShortName (), setManufacturerName (). По возврату этой функции устройство должно быть готово начать продавать службы к системе.
-
Вызванный внутренне для выполнения изменения состояния электропитания
Объявление
C++
virtual IOReturn initiatePowerStateChange( UInt32 *microsecondsUntilComplete = NULL);
Параметры
microsecondsUntilComplete
Указатель на microsecondsUntilComplete, который должен быть установлен performPowerStateChange, если бы было запущено асинхронное изменение состояния электропитания.
Возвращаемое значение
Возвраты kIOReturnSuccess на успехе
Обсуждение
Эта функция должна быть вызвана на IOWorkLoop. Это вызывает performPowerStateChange (), чтобы позволить драйверу обработать изменение состояния. Если изменение состояния завершается синхронно драйвером (подкласс), это вызывает protectedCompletePowerStateChange (). Если сделано асинхронно это возвращает microsecondsUntilComplete, установленный performPowerStateChange (). Эта функция не должна быть вызвана непосредственно.
-
Когда изменение состояния электропитания необходимо, эта функция вызвана IOAudioDevice.
Объявление
C++
virtual IOReturn performPowerStateChange( IOAudioDevicePowerState
oldPowerState
, IOAudioDevicePowerStatenewPowerState
, UInt32 *microsecondsUntilComplete
);Параметры
oldPowerState
Состояние электропитания перед изменением состояния электропитания
newPowerState
Состояние электропитания, перешедшее к
microsecondsUntilComplete
Указатель на значение, представляющее верхнюю границу на числе микросекунд для завершения асинхронное изменение состояния электропитания. Это указывает на значение нуля в запуске и если это остается нулем, изменение состояния завершено по успешному возврату из функции.
Возвращаемое значение
Возвраты kIOReturnSuccess на успешном завершении
Обсуждение
Для контакта с изменениями состояния электропитания подкласс должен переопределить эту функцию. Любая комбинация старых и новых состояний электропитания может быть передана этой функции. Если работа должна быть выполнена при переходе для сна проверьте на newPowerState kIOAudioDeviceSleep. Если работа должна быть выполнена при переходе от сна проверьте на oldPowerState kIOAudioDeviceSleep. Состояние электропитания kIOAudioDeviceIdle означает, что система бодрствует, но никакие клиенты в настоящее время не играют или записывают аудио (т.е. никакие IOAudioEngines не активны). Состояние электропитания kIOAudioDeviceActive означает, что по крайней мере один IOAudioEngine активен. Для изменения состояния электропитания возможно быть выполненным синхронно или асинхронно. В случае синхронного изменения состояния электропитания, простой отпуск microsecondsUntilComplete один и возврат kIOReturnSuccess. Если асинхронное изменение состояния электропитания необходимо, драйвер должен сделать любое необходимое для планирования другого потока, чтобы закончить изменение состояния и установить microsecondsUntilComplete в верхнюю границу на количестве времени, которое это займет для завершения изменения состояния электропитания. Тогда, когда изменение состояния электропитания завершено, вызов должен быть выполнен к completePowerStateChange (). Во время асинхронного изменения состояния электропитания текущее состояние электропитания останется тем же как, прежде чем переход начался, и pendingPowerState установлен в новое состояние электропитания, которое будет установлено, когда изменение будет завершено.
-
Обращенный IOWorkLoop, когда изменение состояния электропитания завершено.
Объявление
C++
virtual IOReturn protectedCompletePowerStateChange();
Возвращаемое значение
Возвраты kIOReturnSuccess на успехе
Обсуждение
Эта функция выполняет работу для завершения изменения состояния электропитания (и синхронный и асинхронный). Если система просыпается от сна, система таймера перезапущена, и аудио механизмы возобновляются. Если это вызвали в результате асинхронного состояния электропитания, измененного, оно выполняет вызов управления питанием IOService acknowledgePowerChange () и сбрасывает asyncPowerStateChangeInProgress переменную. Наконец это устанавливает currentPowerState в pendingPowerState. Эта функция должна быть вызвана на IOWorkLoop. Если подкласс не находится на IOWorkLoop (например, содержание IOCommandGate), вызовите completePowerStateChange () вместо этого.
-
Вызванный setPowerStateAction () для контакта с состоянием электропитания изменяются от средства управления питанием IOService.
Объявление
C++
virtual IOReturn protectedSetPowerState( unsigned long
powerStateOrdinal
, IOService *device
);Параметры
powerStateOrdinal
Param передал setPowerState () - 0 для сна, 1 для следа
device
Param передал setPowerState - устройство, инициирующее изменение состояния электропитания
Возвращаемое значение
Возвраты 0, если изменение состояния электропитания завершено - число микросекунд до завершенный если его асинхронное.
Обсуждение
Когда система спит или просыпается, эта функция ответственна за выполнение необходимого сна и задач следа. Если выдающееся изменение состояния электропитания произойдет, то оно будет ожидать до изменений состояния завершился. При сне все аудио механизмы останавливаются прежде, чем вызвать initiatePowerStateChange () для вызова performPowerStateChange (), чтобы позволить драйверу иметь дело с запросом сна. При пробуждении это определяет, должно ли устройство быть неактивным или активным и продолжает вызывать initiatePowerStateChange (). Если initiatePowerStateChange () указывает, что изменение состояния электропитания происходит асинхронно, это возвращает число микросекунд. Эту функцию нужно вызвать на IOWorkLoop, но нельзя вызвать непосредственно.
-
Удаляет все события таймера и останавливает таймер
Объявление
C++
virtual void removeAllTimerEvents();
Обсуждение
Вызванный во время разрушения драйвера
-
Удаляет событие таймера для данной цели.
Объявление
C++
virtual void removeTimerEvent( OSObject *
target
);Параметры
target
Цель, событие таймера которой будет удалено.
Обсуждение
Если интервал для цели, которая будет удалена, является самым маленьким интервалом, интервал таймера повторно вычисляется на основе остающихся целей. Следующий раз огня приспособлен на основе нового интервала по сравнению с прошлым разом огня.
-
Если внешнее приложение конфигурирования доступно для установки который приложение запуститься, эта функция должна быть вызвана.
Объявление
C++
virtual void setConfigurationApplicationBundle( const char *
bundleID
);Параметры
bundleID
Пакет ID приложения, которое будет запущено HAL для конфигурации устройства и его механизма (ов).
Обсуждение
Это полезно для драйверов устройств, которые слишком сложны, чтобы быть представленными панелью Sound Preferences. ID пакета является более гибким способом указать, где приложение, чем твердый кодированный путь.
-
Если это устройство не должно быть устройством по умолчанию, эта функция должна быть вызвана, чтобы сказать CoreAudio.
Объявление
C++
virtual void setDeviceCanBeDefault( UInt32
defaultsFlags
);Параметры
defaultsFlags
Флаги, чтобы дать CoreAudio команду позволять этому устройству быть только обозначенными устройствами по умолчанию.
Обсуждение
Это полезно для драйверов устройств, не хотящих быть устройством по умолчанию. Может быть вызван с kIOAudioDeviceCanBeDefaultNothing, чтобы препятствовать тому, чтобы CoreAudio позволил этому устройству быть любым устройством по умолчанию, или это можно вызвать с любой комбинацией kIOAudioDeviceCanBeDefaultInput, kIOAudioDeviceCanBeDefaultOutput, или kIOAudioDeviceCanBeSystemOutput. Значение по умолчанию (kIOAudioDeviceCanBeDefaultInput | kIOAudioDeviceCanBeDefaultOutput | kIOAudioDeviceCanBeSystemOutput).
-
Определяет имя устройства
Объявление
C++
virtual void setDeviceName( const char *
deviceName
);Обсуждение
Этот метод нужно вызвать во время инициализации или запуска. Это должно быть установлено, к этому времени initHardware () завершается. Имя устройства используется CoreAudio.framework для идентификации определенной части аппаратных средств. Эта строка должна, должен быть локализован драйвером.
-
Определяет краткое имя устройства
Объявление
C++
virtual void setDeviceShortName( const char *
shortName
);Обсуждение
Краткое название является более коротким представлением имени устройства. Когда имя устройства является слишком длинным, это может использоваться приложениями. Это должно быть установлено, к этому времени initHardware () завершается. Строка должна быть локализована драйвером.
-
Вызванный набор, должна ли семья управлять питанием устройства throught управление питанием IOService APIs.
Объявление
C++
virtual void setFamilyManagePower( bool
manage
);Параметры
manage
Набор ко лжи, если не желательно, чтобы семья сделала управление питанием
Обсуждение
Поведение по умолчанию для семьи для управления питанием. Только необходимо вызвать эту функцию, если драйвер не хочет, чтобы семья управляла питанием. Не рекомендуется, чтобы эта функция была вызвана, потому что это делает управление питанием намного более трудным для драйвера. Если эта функция должна быть вызвана, ее нужно вызвать, прежде initHardware () завершается. Сразу после initHardware () вызывается запуском (), система управления питанием инициализируется, если семья должна управлять питанием.
-
Эта функция должна быть вызвана драйвером, не хотящим быть сказанным об аудио, идущем неактивный сразу, но в некоторый момент в будущем.
Объявление
C++
virtual void setIdleAudioSleepTime( unsigned long long
sleepDelay
);Параметры
sleepDelay
Количеству времени, в наносекундах, перед аппаратными средствами нужно сказать пойти неактивное.
Обсуждение
Это полезно, если устройство захочет выключить свои аппаратные средства в неактивное состояние сна, но не хочет делать это, если аудио не использовалось некоторое время. Если неактивное отличается с предыдущего раза, вызывание этой функции сразу изменяет неактивный таймер автоматического отключения и ставит его в очередь. Значения по умолчанию времени простоя к 0, что означает быть сразу вызванным (назад совместимым с предыдущими версиями IOAudioFamily). Значение средних значений 0xffffffffffffffffULL никогда не говорит драйвер о движении неактивного.
-
Определяет имя производителя устройства
Объявление
C++
virtual void setManufacturerName( const char *
manufacturerName
);Обсуждение
Этот метод нужно вызвать во время инициализации или запуска. Это нужно вызвать, к этому времени initHardware () завершается. Строка должна быть локализована драйвером.
-
Вызванный системой управления питанием в IOService, когда должно измениться состояние электропитания этой службы.
Объявление
C++
virtual IOReturn setPowerState( unsigned long
powerStateOrdinal
, IOService *device
);Параметры
powerStateOrdinal
Число состояния электропитания, как определено IOAudioDevice - 0 для сна, 1 для следа.
device
Производитель политики управления питанием.
Возвращаемое значение
Возвраты kIOPMAckImplied (0), когда изменение состояния электропитания завершено. Иначе верхняя граница на числе микросекунд до изменения состояния завершена, возвращается.
Обсуждение
Реализация по умолчанию IOAudioDevice устанавливает два состояния электропитания для IOService для использования. Состояние 0 является сном, и состояние 1 является следом. Эта функция не должна быть вызвана непосредственно. Это, как только предполагается, используется службами управления питанием IOService.
-
Действие IOCommandGate, вызывающее protectedSetPowerState () при содержании IOCommandGate
Объявление
C++
static IOReturn setPowerStateAction( OSObject *
owner
, void *arg1
, void *arg2
, void *arg3
, void *arg4
);Параметры
owner
Владелец IOCommandGate (IOAudioDevice в этом случае)
arg1
powerStateOrdinal, который будет передан protectedSetPowerState ()
arg2
Устройство, которое будет передано protectedSetPowerState ()
Возвращаемое значение
Возвращает результат protectedSetPowerState ()
Обсуждение
Это необходимо, чтобы позволить protectedSetPowerState () быть вызванным на IOWorkLoop
-
Эта функция вызвана автоматически системой, чтобы сказать драйверу начинать продавать службы к остальной части системы.
Объявление
C++
virtual bool start( IOService *
provider
);Параметры
provider
Это - кусок поставщика услуг, обеспечивающий доступ к аппаратным ресурсам.
Возвращаемое значение
Возвращает true на успехе
Обсуждение
Запуск () реализация в IOAudioDevice запускается путем вызова, запускаются () на ее суперклассе. Это тогда вызывает initHardware (), который подкласс должен переопределить для надлежащей инициализации себя и аппаратные средства. Если тот вызов успешно выполняется, он устанавливает управление питанием, если семья, как предполагается, управляет питанием (проверяющий familyManagePower переменную). Тогда наконец это вызывает registerService () для создания IOAudioDevice видимым в IORegistry.
-
Это ответственно за остановку устройства после того, как система сделана с ним (или если устройство удалено из системы).
Объявление
C++
virtual void stop( IOService *
provider
);Параметры
provider
Кусок поставщика услуг для устройства.
Обсуждение
IOAudioDevice implentation остановки () отключает сервисы таймера, деактивировал все аудио аудио механизмы и аудиопорты и останавливает управление питанием устройства. Аудио деактивация механизма и порта заставляет все аудио механизмы быть остановленными и весь аудио механизм и ресурсы портов и объекты, которые будут выпущены. Реализация подкласса может, мог закрыть аппаратные средства здесь при необходимости. Если эта функция переопределяется подклассом, реализацию суперкласса нужно вызвать.
-
Когда таймер стреляет, внутренняя статическая функция вызвала.
Объявление
C++
static void timerFired( OSObject *
target
, IOTimerEventSource *sender
);Параметры
target
Экземпляр IOAudioDevice, инициировавший обратный вызов таймера.
sender
IOTimerEventSources, вызывая этот обратный вызов
Обсуждение
Эта функция просто вызывает dispatchTimerEvents () на IOAudioDevice, чтобы сделать просто это.
-
Вызванный внутренне для ожидания, пока незаконченное изменение состояния электропитания не завершено.
Объявление
C++
virtual void waitForPendingPowerStateChange();
Обсуждение
Это только используется внутренними функциями для ожидания во время незаконченных изменений состояния электропитания. Это используется для предотвращения многократных изменений состояния электропитания одновременно. Эта функция должна быть вызвана при содержании IOCommandGate. Если асинхронное изменение состояния электропитания произойдет, то эта функция блокирует до изменения состояния, если завершенный. Один раз завершенный, это возвратится, все еще содержа IOCommandGate.
-
Универсальный обратный вызов события таймера целей таймера IOAudioDevice
Объявление
C++
typedef void ( *TimerEvent)( OSObject *target, IOAudioDevice *audioDevice);
Параметры
target
Цель события таймера - передала в том, когда было зарегистрировано событие таймера
audioDevice
IOAudioDevice, отправляющий событие
Обсуждение
Функция обратного вызова TimerEvent берет два параметра; цель события таймера и IOAudioDevice, отправляющего событие.
Оператор импорта
Objective C
#include <IOAudioDevice.h>;
Доступность
Доступный в OS X v10.1 через OS X v10.5.
-
IOWorkLoop для драйвера - это совместно используется с другими объектами в драйвере
Объявление
C++
IOWorkLoop *workLoop;
-
IOTimerEventSource присоединил к workLoop, используемому для служб таймера
Объявление
C++
IOTimerEventSource *timerEventSource;
-
Набор событий таймера в использовании устройством.
Ключ для словаря является целью события. Это означает, что единая цель может иметь только единственное событие, связанное с ним.
Набор событий таймера в использовании устройством.
Объявление
C++
OSDictionary * timerEvents;
-
Это используется для планирования следующего события таймера.
Объявление
C++
AbsoluteTime previousTimerFire;
-
Если изменение состояния электропитания происходит, это представляет незаконченное состояние электропитания. Все другие времена это совпадает с currentPowerState.
Объявление
C++
IOAudioDevicePowerState pendingPowerState;
-
Число выполнения IOAudioEngines. Это используется для поддержания неактивный по сравнению с активным состоянием электропитания.
Объявление
C++
UInt32 numRunningAudioEngines;
-
Самый маленький интервал таймера требуют все цели события таймера.
Объявление
C++
AbsoluteTime minimumInterval;
-
Набор к истине, если семья, как предполагается, управляет питанием - это - состояние по умолчанию. Это может быть изменено рано в процессе инициализации с вызовом к setFamilyManagePower ().
Объявление
C++
bool familyManagePower;
-
Набор переменной состояния к истине, в то время как драйвер запускает и ложь все другие времена
Объявление
C++
bool duringStartup;
-
Используемый для отслеживания существующего состояния электропитания - может быть выбран путем вызова getPowerState ()
Объявление
C++
IOAudioDevicePowerState currentPowerState;
-
IOCommandGate для этого IOAudioDevice. Это присоединено к workLoop
Объявление
C++
IOCommandGate *commandGate;
-
Набор объектов IOAudioPort связался с IOAudioDevice
Объявление
C++
OSSet * audioPorts;
-
Набор объектов IOAudioEngine продан IOAudioDevice.
Объявление
C++
OSArray * audioEngines;
-
Набор к истине, в то время как асинхронное изменение питания находится на рассмотрении и является ложью все другие времена.
Объявление
C++
bool asyncPowerStateChangeInProgress;