Поделиться через


Требования к уведомлениям о медленной зарядке USB Type-C в Windows

С внедрением USB Type-C пользователь может использовать неоптимальный источник питания для зарядки системы. В этой статье описывается, как поставщики оборудования и встроенного ПО могут использовать уведомления Windows, когда пользователь подключается к источнику питания USB Type-C, что приводит к неоптимальному контракту на поставку питания.

Зарядка USB Type-C

Чтобы предоставить пользователям согласованный опыт, корпорация Майкрософт определила требования к сертификации системы USBTypeCCharging. Требование гласит, что если система с аккумулятором содержит порты USB Type-C, которые можно использовать для зарядки системы, эти порты должны соответствовать следующим требованиям в дополнение к спецификациям USB Type-C и питания (PD):

  • Система должна иметь возможность заряжать от неработающего аккумулятора с помощью зарядного устройства USB Type-C, которое обеспечивает достаточную мощность для системы.
  • Все порты USB Type-C в системе должны поддерживать зарядку системы.
  • Все порты USB Type-C в системе должны поддерживать источников при 15 Вт.
  • Системы должны разрешать зарядку от любого зарядного устройства, совместимого с PD, которое обеспечивает достаточную мощность для системы.
  • Системы и программное обеспечение должны обрабатывать все источники питания, совместимые с PD (например, зарядное устройство, концентратор, док-станция) одинаково, независимо от производителя.
  • Все уведомления о зарядке USB Type-C должны полагаться на встроенные уведомления Windows и не предоставляться сторонним программным обеспечением.

Windows может уведомить пользователя, когда он подключает зарядное устройство или зарядную док-станцию, которая договорилась о меньшем контракте питания, чем то, что требуется для оптимальной зарядки. Эта функция доступна на всех компьютерах с разъемами USB Type-C, управляемыми драйверами UcmCx следующих типов:

  1. На компьютерах с поддержкой UCSI драйвер клиента ACPI UCM-UCSI управляет соединителями USB Type-C. Это решение рекомендуется, так как оно использует драйверы, предоставляемые Windows, и не зависит от изготовителя оборудования или IHV, разрабатывающего собственный драйвер.
  2. Клиентские драйверы UcmCx для компьютеров, которые реализовали компьютеры состояний PD в оборудовании или встроенном ПО и не соответствуют требованиям UCSI.

Компьютеры с поддержкой UCSI

Компьютеры с поддержкой UCSI обычно имеют встроенный контроллер, содержащий встроенное ПО диспетчера политик платформы (PPM) для управления компьютерами состояний PD. Это управление прозрачно для диспетчера политик ОС (OPM), сущности в ОС, которую реализует драйвер UCSI для папки "Входящие". PPM использует механизм взаимодействия, изложенный в спецификации UCSI , для взаимодействия с OPM.

Ниже приведены механизмы, с помощью которых PPM может уведомлять OPM о медленной зарядке. О медленной зарядке Windows сообщается только в том случае, если роль питания соединителя является потребителем питания.

  1. Уведомление от PPM в OPM с индикатором изменения соединителя (CCI), установленным для номера соединителя, с которого должно поступать уведомление о медленной зарядке. В ответ на это уведомление OPM отправляет GET_CONNECTOR_STATUS команду UCSI в PPM. PMM должен отвечать на эту команду GET_CONNECTOR_STATUS данными со следующими битами.

    1. Изменение состояния соединителя (16–0) Состояние зарядки батареи измените бит на 1.
    2. Состояние возможности зарядки батареи (65–64) установлено как не заряжаемое (значение 0), низкая скорость зарядки (значение 2) или очень низкая скорость зарядки (значение 3).
  2. Если медленное зарядное устройство подключено во время выключения компьютера или в Sx (x > 0), PPM должен задать состояние заряда батареи, чтобы отразить одно из трех значений, упомянутых в 1b выше, когда OPM отправляет GET_CONNECTOR_STATUS в PPM после загрузки или возобновления Sx. При возобновлении Sx OPM обычно отправляет команду GET_CONNECTOR_STATUS в PPM после PPM_RESET.

    И наоборот, если номинальное зарядное устройство подключено, когда компьютер находится в Sx (x>0), OPM ожидает, что GET_CONNECTION_STATUS данных будет иметь поле состояния заряда батареи (65–64) с номинальной скоростью зарядки (значение 1), когда OPM отправляет GET_CONNECTOR_STATUS.

Особое внимание следует учитывать для BatteryChargingCapabilityStatus::NotCharging (значение 0)

GET_CONNECTOR_STATUS::Batter Charging Capability Status "Not Charging" (Не зарядка) — 0, которое также используется по умолчанию. Таким образом, если для соединителя не изменяется состояние (16–0), бит изменения состояния зарядки батареи имеет значение 1, OPM не может определить, является ли значение по умолчанию или явно задано значение 0 для PPM, чтобы указать, что не заряжается. Если для этого бита задано значение 0, операционная система может игнорировать состояние зарядки батареи, если состояние — Не зарядка.

Следовательно, мы рекомендуем ИСПОЛЬЗОВАТЬ PPM, чтобы всегда устанавливать изменение состояния соединителя (16–0) при изменении состояния зарядки батареи на 1 при отчете о не/медленной/очень медленной зарядке. Эта рекомендация заключается в том, чтобы упростить реализацию PPM для управления состояниями зарядки.

Особый случай для медленной и очень медленной зарядки

Этот раздел не содержит каких-либо конкретных рекомендаций для изготовителей оборудования, IHV или владельцев встроенного ПО UCSI. Скорее описывает определенную логику, которую драйвер UCSI использует для уведомлений о зарядке, которые могут быть полезны при проектировании встроенного ПО UCSI.

При первом уведомлении после присоединения партнера после получения данных ответа GET_CONNECTOR_STATUS драйвер UCSI сообщит операционной системе о медленной зарядке, даже если изменение состояния соединителя (16–0) — бит изменения состояния зарядки батареи не имеет значения 1, если выполняются следующие условия:

  1. Изменение состояния соединителя (16–0): ConnectChange указывает, что это первое уведомление партнера о присоединении.
  2. Состояние возможности зарядки батареи (62–65) имеет значение 2 или 3.

Причина такого поведения заключается в том, что драйвер UCSI не знает, было ли не зарядка намеренно, так как его значение равно 0, которое также является значением по умолчанию. Однако значения 2 и 3 можно обрабатывать, не полагаясь на изменение состояния зарядки батареи. Дополнительные сведения см. в следующем разделе.

Проверка соответствия требованиям UCSI

Так как оптимальный контракт питания зависит от компьютера, Windows не предоставляет тесты для всплывающих уведомлений "Медленно " или "Не заряжается" в Windows, так как тест теперь будет знать, какие уровни питания следует проверить уведомление. Однако мы рекомендуем изготовителям оборудования проверить, работают ли уведомления о зарядке батареи от PPM к OPM должным образом, с помощью следующего теста соответствия UCSI, который использует USB Type-C MUTT в качестве партнера по портам:

Драйверы клиента UCMCx

Клиентские драйверы UcmCx управляют соединителями USB Type-C без соответствия спецификациям UCSI. Помимо передачи другой информации о соединителях USB Type-C в ОС, расширение класса информирует ОС об изменениях в уровнях зарядки соединителя USB Type-C. Ниже приведены DDIs UmCx с драйвером клиента, которые могут информировать ОС о UCM_CHARGING_STATE соединителей.

  1. UcmConnectorTypeCAttach: при создании отчетов о новом партнере по портам, подключенном к UCM, клиент может сообщить об уровне зарядки с помощью входного параметра UCM_CONNECTOR_TYPEC_ATTACH_PARAMS::ChargingState

  2. UcmConnectorPdConnectionStateChanged: при отправке отчета о RDO в UCM для согласованного контракта питания. Клиент может сообщить об уровне зарядки с помощью UCM_CONNECTOR_PD_CONN_STATE_CHANGED_PARAMS::ChargingState

  3. UcmConnectorChargingStateChanged: в любом случае, когда драйвер клиента хотел бы обновить состояние зарядки до ОС. Param2 этого DDI содержит состояние зарядки соединителя.

Рассмотрим следующие значения UCM_CHARGING_STATE перечисления, чтобы отобразить всплывающее уведомление пользователю:

  • UcmChargingStateNotCharging
  • UcmChargingStateSlowCharging
  • UcmChargingStateTrickleCharging