Управление питанием камеры
Режимы управления питанием
Компоненты off-System on a Chip (SoC) подсистемы камеры должны поддерживать два режима управления питанием. Компоненты камеры должны поддерживать активный режим, в котором устройство камеры активно выполняет потоковую передачу содержимого в приложение. Кроме того, компоненты камеры должны поддерживать режим отключения питания, в котором устройство камеры выключено, питание отключено, а устройство камеры потребляет ноль ватт. В следующей таблице описаны активные режимы управления питанием и режимы управления питанием для устройства камеры.
Режим | Описание | Состояние питания устройства (Dx) | Среднее энергопотребление | Задержка выхода на активный | Механизм перехода |
---|---|---|---|---|---|
Активный (потоковая передача) |
Устройство камеры активно выполняет потоковую передачу содержимого в приложение. Содержимое может быть полным, предварительным просмотром или фотосъемки. |
Да |
Специфичные для датчика, af и флэш-памяти. |
Н/Д |
Переход D0, инициированный программным обеспечением. (Приложение инициировало потоковую передачу, задав для пин-кода записи состояние KSSTATE_ACQUIRE.) |
Питание — удалено |
Устройство камеры не выполняет потоковую передачу содержимого в приложения. Контекст не сохраняется на датчике камеры, флэш-устройстве или механизме автоматической фокусировки. |
Да |
0 Вт |
< 200 миллисекундах до первого кадра (см. примечание следующей таблицы). |
Переход D3, инициированный программным обеспечением. (Для состояния всех контактов потоковой передачи задано любое значение, отличное от KSSTATE_RUN.) |
Примечание Windows ожидает, что время перехода из активного режима в режим отключения питания (задержка выключения) будет меньше 100 миллисекундам. Большинство усилий по управлению питанием сосредоточено на сокращении времени перехода из режима отключения питания в активный режим (задержка при включении).
Одни и те же два режима управления питанием, активный и удаленный от питания, должны поддерживаться единицами обработки изображений на основе SoC. Поставщик SoC определяет отдельные компоненты, составляющие блоки обработки изображений, и состояния управления питанием. Рекомендуется, чтобы один драйвер управлял единицами обработки изображений на soC, а все блоки обработки изображений для захвата камеры были представлены в подключаемом модуле двигателя питания (PEP) в виде единого компонента, управляемого питанием.
Механизмы управления питанием программного обеспечения
Ожидается, что как блоки обработки изображений в системе на микросхеме (SoC), так и компоненты камеры вне SoC не будут потреблять электроэнергию (ноль ватт), когда система находится в режиме ожидания и дисплей отключен. Основным программным механизмом управления питанием является подсчет ссылок на контакт захвата камеры. Это число ссылок поддерживается драйвером контроллера камеры, который является мини-драйвером AVStream. Этот базовый механизм управления питанием можно использовать в любое время, когда система включена, включая время включения системного дисплея.
Драйвер контроллера камеры должен пересылать переходы состояния управления питанием на драйверы, управляющие компонентами вне soC, такими как датчик камеры, автофокусировщик и вспышка. В ответ драйверы, управляющие этими устройствами, должны предпринять определенные действия для изменения состояния питания, а также для отключения или применения питания.
Рекомендуемая архитектура драйвера
Подсистема камеры должна быть доступна для Windows через один мини-драйвер AVStream, называемый драйвером контроллера камеры. Рекомендуется, чтобы драйвер контроллера камеры не обращается к оборудованию напрямую и не управляет аппаратными компонентами напрямую. Вместо этого драйвер контроллера камеры должен пересылать запросы на управление питанием и оборудование другим драйверам, составляющим подсистему камеры.
Оборудование обработки изображений на основе SoC должно управляться питанием с помощью подключаемого модуля подсистемы питания SoC (PEP). Оборудование для обработки изображений должно управляться драйвером Windows Driver Frameworks (WDF), и этот драйвер должен обеспечить взаимодействие с PEP, задав элемент IdleTimeout в структуре WDF_DEVICE_POWER_POLICY_IDLE_SETTINGSзначение SystemManagedIdleTimeout. Этот параметр позволяет PEP управлять любой топологией совместного использования часов и power-rail, которая является уникальной для оборудования SoC. Драйвер, управляющий блоком обработки изображений в SoC, должен представлять весь блок обработки изображений как единый компонент, управляемый питанием, чтобы можно было использовать возможности WDF по умолчанию для управления питанием.
Компоненты подсистемы камеры вне SoC должны управляться одним или несколькими драйверами платформы драйверов в режиме ядра (KMDF). Драйверы для компонентов вне SoC должны переходить в состояние выключения питания (D3), когда их компоненты больше не требуются для захвата камеры. Кроме того, драйверы для компонентов вне SoC должны включать D3cold, что позволяет базовой подсистеме ACPI изменять состояние линий GPIO для применения и отключения питания. Дополнительные сведения см. в разделе Поддержка D3cold в драйвере.
На следующей блок-схеме показана рекомендуемая архитектура драйвера.
Все драйверы, составляющие подсистему камеры, включая драйвер контроллера камеры, драйвер блока обработки изображений и драйверы для компонентов камеры вне SoC, должны быть перечислены в одном файле установки драйвера (INF). Все драйверы подсистемы камеры должны быть членами класса настройки устройства PnP для создания образов. ClassGuid для устройств обработки изображений — {6bdd1fc6-810f-11d0-bec7-08002be2092f}.
Каждый драйвер, представляющий один компонент камеры, должен быть перечислен как одно устройство в пространстве имен ACPI.
Активные и удаленные от питания состояния
Драйвер контроллера камеры должен перевести устройства камеры в состояние отключения питания, если ни один из приложений не выполняет потоковую передачу содержимого с устройства камеры. Приложение может остановить потоковую передачу, так как оно было закрыто пользователем или перемещено в фоновый режим и приостановлено.
Если приложение инициирует потоковую передачу с камеры, устройства которой находятся в состоянии выключения питания, драйвер контроллера камеры должен перевести устройства камеры обратно в активное состояние в течение 100 миллисекундах.
Чтобы изменить состояние питания различных компонентов подсистемы камеры, драйверы контроллера камеры используют собственные интерфейсы для взаимодействия с другими драйверами, составляющими подсистему камеры. Чтобы запросить соответствующий интерфейс, драйвер подсистемы камеры должен использовать стандартный метод, который заключается в отправке IRP_MN_QUERY_INTERFACE запроса ввода-вывода, который получает набор указателей функций.
Драйвер контроллера камеры должен поместить устройство камеры в состояние отключения питания, когда все контакты потоковой передачи переместились в состояние KSSTATE_STOP . Windows автоматически приостанавливает приложения переднего плана, когда пользователь нажимает кнопку питания и система переходит в режим ожидания с подключением. Когда приложение захвата приостановлено, API-интерфейсы захвата камеры, предоставляемые среда выполнения Windows, получают уведомление и изменяют состояние контактов захвата камеры, в результате чего они переходят в состояние KSSTATE_STOP.
Когда первый пин-код потоковой передачи переходит в состояние KSSTATE_ACQUIRE , драйвер контроллера камеры должен поместить устройство камеры, включая блок обработки изображений на soC, в активное состояние.
Связанные функции камеры
Датчик камеры и устройства флэш-памяти могут иметь дополнительные функции уровня платформы, которыми должен управлять драйвер. Эти функции могут включать в себя следующее:
- Включение, отключение и настройка датчика камеры через шину I2C.
- Настройка скорости вспышки и уровня яркости в шине I2C.
- Обнаружение тепловых условий из модуля флэш-памяти через линии GPIO из модуля флэш-памяти в SoC.
Для реализации этих функций разработчикам драйверов устройств камеры следует использовать методы и рекомендации, приведенные в следующей таблице.
Функция | Описание | Подключение к оборудованию и встроенному ПО | Программный механизм |
---|---|---|---|
Конфигурация датчиков | Перечислите возможности оборудования датчика камеры или настройте его текущий режим работы. | Связь через шину I2C. Ресурсы I2C описаны в методе _CRS под устройством камеры в пространстве имен ACPI. | Простой интерфейс запроса ввода-вывода периферийной шины (SPB) используется для взаимодействия с контроллером узла I2C и устройством датчика камеры. |
Обнаружение событий датчика | Поднимайте события или указывайте состояние с помощью линий GPIO из датчика камеры в SoC. | Ресурсы GPIO, предоставляемые устройству камеры. Эти ресурсы описаны в методе _CRS под устройством камеры в пространстве имен ACPI. Контакты GPIO, которые сигнализируют о событиях, должны быть описаны как ресурсы прерывания GPIO. | Прерывание обрабатывается драйвером в ответ на событие GPIO. Интерфейс запроса ввода-вывода SPB используется для связи с устройством датчика для определения причины прерывания. |
Конфигурация флэш-памяти | Настройте устройство флэш-памяти для ускорения, количества подключенных светодиодов или других свойств. | Связь через шину I2C. Ресурсы I2C описаны в методе _CRS под устройством камеры в пространстве имен ACPI. | Интерфейс запроса ввода-вывода SPB используется для взаимодействия с контроллером узла I2C и устройством датчика камеры. |
Координация с драйвером блока обработки изображений | Инициируйте и координирование захвата с помощью схемы обработки изображений на SoC. | Н/Д | Частный интерфейс предоставляется драйвером, который управляет единицами обработки изображений. |
Перечисление устройств камеры
Чтобы определить устройства камеры на платформе, приложения обычно запрашивают у диспетчера Plug and Play (PnP) экземпляры устройств камеры. Каждый экземпляр PnP соответствует одному устройству камеры. Для идентификации такого экземпляра системный интегратор определяет устройство камеры в пространстве имен ACPI. Устройство камеры может передавать содержимое только в одно приложение одновременно. Однако приложение может выполнять потоковую передачу с нескольких устройств камеры одновременно.
Каждое устройство камеры, представленное драйвером контроллера камеры (minidriver AVStream), должно быть перечислено в пространстве имен ACPI как отдельное устройство, являющееся дочерним элементом графического драйвера.
В особом случае, если платформа SoC не может одновременно выполнять потоковую передачу содержимого со всех устройств камеры на платформе при любом сочетании сообщаемых разрешений или режимов, вместо этого можно перечислить одно устройство камеры. Однако эта реализация требует тщательного рассмотрения и должна осуществляться только в непосредственном сотрудничестве с корпорацией Майкрософт.
Устройства, которые представляют оставшуюся часть подсистемы камеры, включая блок обработки изображений on-SoC и датчик камеры вне SoC, автофокусировщик и вспышку, должны быть перечислены как одно или несколько устройств в пространстве имен ACPI. Единица обработки изображений на основе SoC должна быть перечислена как устройство, отдельное от устройств, представляющих компоненты камеры вне SoC.
Контрольный список управления питанием камеры
Системные интеграторы, поставщики датчиков камеры и поставщики систем на микросхеме (SoC) должны использовать контрольный список в этой статье, чтобы убедиться, что их система управления питанием совместима с Windows 10.
- Системный интегратор должен взаимодействовать и сотрудничать с поставщиком SoC при выборе компонентов датчика камеры и интеграции устройств камеры.
- Разработчик драйвера контроллера камеры должен сделать следующее:
- Отключите питание оборудования камеры, если приложения больше не выполняют потоковую передачу содержимого с устройства камеры. (Это происходит, когда все контакты захвата находятся в состоянии KSSTATE_STOP.)
- Включите питание оборудования камеры, когда приложение начинает потоковую передачу с любого из контактов захвата на устройстве камеры.
- Разработайте один драйвер KMDF, который управляет единицей обработки образов на основе SoC. Драйвер контроллера камеры должен использовать пользовательские интерфейсы драйвера, чтобы сообщить драйверу блока обработки изображений инициировать или завершить захват камеры.
- Убедитесь, что драйвер блока обработки изображений зарегистрирован в платформе управления питанием Windows (PoFx), чтобы предоставляемый поставщиком SoC PEP может управлять питанием оборудования блока обработки изображений.
- Разработайте один драйвер Windows Driver Framework (WDF) для управления каждым аппаратным компонентом, который управляет оборудованием камеры вне SoC, включая датчик камеры, автофокусатор и дополнительную вспышку. Драйвер контроллера камеры должен использовать пользовательские интерфейсы драйверов, чтобы сообщить драйверам для аппаратного обеспечения камеры вне SoC инициировать или завершить захват камеры.
- Убедитесь, что драйверы, управляющие оборудованием камеры вне SoC, инициируют переход D3, когда компоненты камеры должны быть выключены, чтобы ACPI был проинформирован о переходе D3 и может отключить питание от компонентов. • Убедитесь, что драйверы, управляющие оборудованием камеры вне SoC, инициируют переход D0 при включении компонентов камеры, чтобы ACPI был проинформирован о переходе D0 и может применять питание к компонентам.
- Разработайте любой код драйвера для управления конфигурацией оборудования датчика камеры или устройства флэш-памяти.
- Сообщите системным интеграторам об ожидаемом порядке всех ресурсов GPIO и I2C, необходимых для управления оборудованием датчика камеры или флэш-устройством.
- Убедитесь, что все драйверы, составляющие подсистему камеры, перечислены в одном файле установки драйвера (INF).
- Убедитесь, что все драйверы, составляющие подсистему камеры, являются членами класса настройки устройства PnP для создания изображений. ClassGuid для устройств обработки изображений — {6bdd1fc6-810f-11d0-bec7-08002be2092f}.
- Системный интегратор должен разработать встроенное ПО ACPI платформы для выполнения следующих действий:
- Перечислите каждое устройство камеры как отдельное устройство в пространстве имен ACPI.
- Включите объект _PLD под каждым устройством камеры в пространстве имен ACPI, чтобы указать, находится ли камера на передней или задней части компьютера.
- Включите ресурс питания в корневой каталог пространства имен ACPI для каждого устройства камеры. Все аппаратные компоненты вне SoC для данного устройства камеры (датчик, af, вспышка и т. д.) должны находиться в одном ресурсе питания.
- Реализуйте _ON и _OFF методы управления для каждого ресурса питания, чтобы изменить состояние контакта GPIO из SoC, который управляет оборудованием переключения направляющей питания.
- Укажите методы _PR0 и _PR3 для каждого устройства камеры в пространстве имен, чтобы ссылаться на ресурс питания для каждого устройства камеры и связанного с ним оборудования.
- Укажите _CRS объект под каждым устройством камеры в пространстве имен ACPI, чтобы перечислить ресурсы GPIO и I2C для датчика камеры и оборудования флэш-памяти. Ресурсы GPIO и I2C должны находиться в порядке, указанном разработчиком драйвера датчика камеры.
- Системный интегратор должен разработать оборудование платформы и маршрутизацию питания таким образом, чтобы:
- Каждое устройство камеры имеет собственную направляющую питания, которая может управляться независимо от направляющих питания для других устройств камеры, и которую можно включать и выключать с помощью контакта GPIO из SoC.
- Системный интегратор должен протестировать и убедиться в том, что:
- Оборудование устройства камеры не потребляет электроэнергии (ноль ватт), если устройство камеры не используется приложением. Системный интегратор должен использовать инструментированное оборудование для измерения этого энергопотребления.