Оборудование камеры
Общие сведения о топологии
С точки зрения поддержки драйверов Windows подсистема камеры содержит компоненты off-System on a Chip (SoC), такие как датчик камеры, необязательный блок автоматического фокуса и вспышка, а также, возможно, другое связанное оборудование. Оборудование камеры также включает в себя блоки обработки изображений на soC.
Оборудование обработки изображений на основе SoC должно управляться питанием с помощью подключаемого модуля питания (PEP), предоставленного поставщиком SoC. Оборудование для обработки изображений должно быть перечислено в качестве одного устройства в ACPI и управляться драйвером Windows Driver Framework (WDF). Включите системное управление временем ожидания простоя устройства обработки изображений, чтобы PEP могла управлять любой топологией совместного использования часов и электрорельсов, которая является уникальной для SoC. Любое оборудование для обработки изображений в SoC должно отключать каждый раз, когда устройство камеры выключено.
Некоторые конструкции SoC имеют общий блок функций, который выполняет захват с камеры и другую обработку изображений и графики. На платформе, которая использует такой SoC, peP, предоставляемый поставщиком SoC, должен учитывать использование этого общего блока и отключать его, когда все клиенты находятся в режиме простоя.
На некоторых платформах оборудование для обработки изображений на soC может совместно использоваться двумя или более устройствами камеры. В этом случае оборудование обработки изображений мультиплексируется между устройствами камеры. Компоненты каждого устройства камеры должны описываться независимо в пространстве имен ACPI и перечисляться в диспетчере Plug and Play Windows как отдельные объекты устройства.
Платформы с двумя (или более) встроенными камерами требуются Windows для использования (т. е. потокового содержимого) обеих (или всех) камер одновременно с любым сочетанием режимов и разрешений, поддерживаемых отдельными камерами. Поставщики SoC, которые не могут выполнить это требование, должны напрямую сотрудничать с корпорацией Майкрософт для получения рекомендаций по реализации драйверов и встроенного ПО системы.
Поддерживаемая конфигурация питания
Windows поддерживает единую конфигурацию аппаратного управления питанием для устройств камеры на современных резервных платформах. Короче говоря, каждый датчик камеры должен быть подключен к системе на микросхеме (SoC) через miPI-CSI канал, и при необходимости может быть подключен к шине I2C и одному или нескольким контактам GPIO. Устройство датчика камеры, его дополнительная вспышка и любые другие компоненты камеры вне SoC должны быть размещены на направляющей питания, которую может включать и выключать встроенное ПО ACPI.
Если в дополнение к каналу MIPI-CSI устройство камеры имеет контакты I2C или GPIO для управления датчиком камеры или флэш-устройством, эти контакты должны направляться на соответствующие контакты контроллера I2C или контроллера GPIO в SoC. Системный интегратор должен перечислить ресурсы I2C и GPIO для датчика камеры и устройства флэш-памяти в объекте _CRS под устройством камеры в пространстве имен ACPI.
Примечание Системный интегратор должен сотрудничать с разработчиком драйвера подсистемы камеры, чтобы определить, как драйверы камеры ожидают упорядочения ресурсов GPIO и I2C. Например, драйвер, получающий два ресурса I2C, различает их в соответствии с порядком их отображения в списке ресурсов. Аналогичным образом драйвер, получающий три ресурса GPIO, ожидает, что эти ресурсы будут перечислены в определенном порядке. Системный интегратор должен перечислить ресурсы I2C и GPIO в одном порядке в объекте _CRS.
Датчик камеры и устройство флэш-памяти должны быть размещены на направляющей питания, которую можно включать и выключать с помощью методов управления ACPI. Для управления оборудованием коммутатора питания рекомендуется использовать контакт GPIO из SoC. GPIO следует перечислить в области операций GPIO, чтобы его состояние можно было изменить с помощью методов управления ACPI. Системный интегратор должен описать ресурс питания для устройства камеры (датчик, вспышка или любой другой компонент камеры) в пространстве имен ACPI. Этот ресурс должен включать метод _ON и метод _OFF для изменения состояния сигнала GPIO, направляемого на оборудование коммутатора питания. Под устройством камеры в пространстве имен ACPI системный интегратор должен предоставить объект _PR0 и объект _PR3, ссылающийся на ресурс питания.
Когда драйвер контроллера камеры обнаруживает, что все контакты потоковой передачи вступили в состояние KSSTATE_STOP, он использует закрытый интерфейс, чтобы сообщить драйверам, управляющим компонентами камеры вне SoC, что захват больше не требуется. В свою очередь, эти драйверы вызывают метод IWDFDevice2::ResumeIdle, чтобы сообщить платформе драйверов, что их оборудование неактивно. В ответ платформа драйвера инициирует переход на D3, что приводит к тому, что IRP D3 проходит через стек драйверов устройств камеры. (IRP D3 — это IRP_MJ_POWER IRP, задающий значение перечисления DEVICE_POWER_STATE PowerDeviceD3.) Драйвер Windows ACPI, Acpi.sys, будет наблюдать за D3 IRP и выполнять метод _OFF ресурса питания, который определяется объектом _PR3 под устройством камеры в пространстве имен ACPI.
В последнем предложении в предыдущем абзаце предполагается, что ресурс питания не обеспечивает питание ни для одного устройства, кроме одного устройства камеры. Если другие устройства имеют ссылки на этот ресурс питания, Acpi.sys будет запускать метод _OFF только после того, как все остальные устройства, ссылающиеся на этот ресурс питания, перейдут на D3. Дополнительные сведения см. в разделе Включение переходов в D3cold.
Аналогичным процессом является возврат оборудования камеры в активное состояние питания. Когда драйвер контроллера камеры обнаруживает первый контакт захвата потока для входа в состояние KSSTATE_ACQUIRE, драйвер контроллера камеры взаимодействует с драйверами для других компонентов on-SoC и off-SoC, входящих в подсистему камеры. В ответ драйвер, управляющий единицей обработки изображений на основе SoC, вызывает метод IWDFDevice2::StopIdle, который сообщает PEP о том, что оборудование блока обработки изображений должно быть включено. Драйвер контроллера камеры сообщает драйверам, которые управляют компонентами камеры вне SoC, что они должны вернуться в активное состояние. В свою очередь, эти драйверы вызывают StopIdle, чтобы сообщить платформе драйверов о том, что оборудование больше не простаивает, что приводит к тому, что D0 IRP проходит через стек драйверов устройств камеры. (D0 IRP — это IRP_MJ_POWER IRP, задающий значение перечисления DEVICE_POWER_STATE PowerDeviceD0.) Acpi.sys реагирует на D0 IRP, выполняя метод _ON ресурса питания, который определяется объектом _PR0 под устройством камеры в пространстве имен ACPI.
Если платформа имеет несколько устройств камеры, каждое устройство камеры должно иметь собственную независимо переключаемую шину питания и ресурс питания, описанные в пространстве имен ACPI. Для каждого устройства камеры в пространстве имен ACPI системный интегратор должен предоставить объект _PLD, указывающий, находится ли устройство камеры на передней или задней части компьютера. Если устройство камеры встроено в крышку компьютера с форм-фактором и сталкивается с пользователем при открытии крышки, _PLD объект этого устройства должен указывать на то, что камера находится на передней части платформы. Если устройство камеры встроено в крышку компьютера с форм-фактором раскладушки и при открытии крышки находится далеко от пользователя, объект _PLD этого устройства должен указывать на то, что камера находится на задней части системы.
Проблемы пробуждения
Оборудование устройства камеры не должно поддерживать пробуждение. Windows не ожидает, что устройства камеры смогут вывести SoC из самого низкого состояния питания во время современного режима ожидания. Многие мобильные телефоны позволяют SoC выходить из спящего режима, когда пользователь нажимает кнопку камеры. Кнопка камеры рассматривается Windows как устройство ввода данных пользователя, работа которого отделена от интеграции с ситемами или управления питанием устройства камеры, его датчика и необязательной вспышки.