Chính sách về nguồn điện

Để đảm bảo các thành phần phần cứng và phần mềm (chẳng hạn như màn hình, âm thanh và tương tác bằng giọng nói) được bật và tắt một cách có chọn lọc khi cần, AAOS cung cấp chính sách nguồn, bao gồm một nhóm trạng thái bật và tắt nguồn dự kiến cho các thành phần phần cứng và phần mềm. VHAL hoặc dịch vụ của nhà cung cấp đặc quyền của hệ thống, có thể áp dụng một chính sách nguồn mới khi trạng thái nguồn của Android hoặc khi các điều kiện chúng đang chờ được đáp ứng.

Việc áp dụng chính sách nguồn được cho phép ở các trạng thái Chờ VHAL và Đang bật (đôi khi có một số hạn chế). Trong phần Chuẩn bị tắt máy, Chế độ nhà để xe đang chạy và sẽ không bị ảnh hưởng bởi việc thay đổi trạng thái nguồn. Mặc dù không thể áp dụng chính sách nguồn thông thường, chính sách nguồn đặc biệt (tức là chính sách nguồn hệ thống không có tương tác của người dùng) được áp dụng trong Chuẩn bị tắt máy.

Trạng thái nguồn AAOS

Các thiết bị AAOS tuân theo sơ đồ trạng thái nguồn sau:

Sơ đồ trạng thái nguồn AAOS

Hình 1. Sơ đồ trạng thái nguồn AAOS.

Từng trạng thái nguồn được mô tả dưới đây:

Giá trị Mô tả
Tắt
  • Không được cấp nguồn điện thực tế cho bộ xử lý ứng dụng (AP), bộ nhớ và thiết bị ngoại vi.
Đợi VHAL
  • Khi người lái xe tương tác với xe (ví dụ: bằng cách mở cửa), VMCU sẽ áp dụng nguồn cho AP, bộ nhớ. và thiết bị ngoại vi.
  • Chuyển đổi AAOS từ một trong ba trạng thái (Tắt, Tạm ngưng sang RAM (STR, Chờ VHAL hoàn tất)) rồi vào Đợi VHAL, nơi nó chờ phối hợp với VHAL.
Đang bật
  • VHAL hướng dẫn AAOS chuyển sang trạng thái Bật. Ở trạng thái này, AAOS đang chạy hoàn toàn và tương tác với người lái xe.
  • Màn hình được kiểm soát bằng chính sách nguồn chứ không phải bằng các cuộc gọi Bật/Tắt của màn hình Android đối với kiểu dáng thiết bị.
Chuẩn bị tắt máy
  • Khi người lái xe đã dừng lái xe, VHAL hướng dẫn AAOS chuyển sang chế độ Tắt chế độ chuẩn bị. Ở trạng thái này, màn hình và âm thanh tắt, đồng thời AAOS không tương tác với trình điều khiển. Hệ thống Android vẫn đang chạy và có thể cập nhật các ứng dụng cũng như hệ thống Android. Khi quá trình cập nhật (nếu có) hoàn tất, hệ thống Android sẽ chuyển sang trạng thái Chờ kết thúc VHAL.
Đợi VHAL kết thúc
  • AAOS thông báo cho VHAL rằng hệ thống có thể tắt. Bộ vi điều khiển xe (VMCU) là hệ thống trên chip (SoC) cần được đặt vào chế độ ngủ sâu và loại bỏ nguồn khỏi AP. Sau đó, AAOS sẽ ở trạng thái STR, mặc dù không có mã nào đang được thực thi.
  • Nếu VHAL không hoàn tất và trình điều khiển quay lại, thì đầu phát trung tâm (HU) phải chuyển đổi trực tiếp để Chờ VHAL.
Tạm ngưng với RAM (STR)
  • Xe và AP đang tắt, không có mã nào đang được thực thi và nguồn điện vẫn đang được duy trì với RAM AP.
Tạm ngưng trên ổ đĩa (STD)
  • Xe và AP đang tắt, không có mã nào đang được thực thi, không có điện được duy trì vào bộ xử lý và RAM AP.

Chính sách nguồn điện được định nghĩa như thế nào?

Trình triển khai xác định các chính sách nguồn trong /vendor/etc/automotive/power_policy.xml, trong đó:

  • Xác định chính sách nguồn.
  • Xác định các nhóm chính sách nguồn, bao gồm chính sách nguồn mặc định và được tự động thêm vào được áp dụng khi diễn ra sự chuyển đổi trạng thái nguồn.
  • Ghi đè chính sách nguồn của hệ thống.

Chính sách về nguồn điện

Chính sách nguồn điện bao gồm một nhóm các trạng thái nguồn dự kiến của các thành phần phần cứng và phần mềm. AAOS hỗ trợ những thành phần sau trong chính sách nguồn điện:

ÂM THANH
TRUYỀN THÔNG
HIỂN THỊ
BLUETOOTH
Wi-Fi
DI ĐỘNG
Tiếng ETHERNET
Chiếu
NFC
ĐẦU VÀO
TƯƠNG TÁC_NÓI_TIẾNG
VISUAL_INTERACTION
TRUSTED_DEVICE_FINDION
VỊ TRÍ
MICROPHONE
CPU

Nhà cung cấp cũng có thể xác định các thành phần nguồn tuỳ chỉnh riêng để sử dụng cùng với chính sách nguồn. Định nghĩa các thành phần nguồn tuỳ chỉnh trong cùng một tệp XML với các chính sách nguồn, như trong ví dụ sau:

<customComponents>
  CUSTOM_COMPONENT_1000
  CUSTOM_COMPONENT_SPECIAL_SENSOR
  CUSTOM_COMPONENT_AUX_INPUT
</customComponents>

Nhóm chính sách nguồn

Chính sách nguồn mặc định được tự động áp dụng khi chuyển đổi trạng thái nguồn là được chỉ định trong nhóm chính sách nguồn. Nhà cung cấp có thể xác định chính sách nguồn mặc định cho Đợi VHAL, Bật và chờ VHAL hoàn tất (Nhập chế độ ngủ sâu hoặc Bắt đầu tắt).

Chính sách về nguồn điện của hệ thống

AAOS hỗ trợ hai chính sách nguồn của hệ thống, tức là không có tương tác của người dùngchuẩn bị tạm ngưng. Chính sách nguồn hệ thống sẽ được áp dụng khi thiết bị kết nối Chế độ im lặng, Chế độ nhà xe, Tạm ngưng với RAM hoặc Tạm ngưng với ổ đĩa.

Các bảng sau đây liệt kê hành vi của từng thành phần trong chính sách nguồn của hệ thống. Người triển khai có thể ghi đè tính năng phát hiện thiết bị qua Bluetooth, NFC và Đáng tin cậy trong chính sách nguồn của hệ thống không có sự tương tác của người dùng. Cơ chế ghi đè được áp dụng trong /vendor/etc/power_policy.xml.

không có tương tác của người dùng

Hành vi của chính sách nguồn hệ thống không có sự tương tác của người dùng được xác định trong phần này bảng:

Thành phần Trạng thái nguồn Có thể định cấu hình
Âm thanh Tắt Không
Nội dung nghe nhìn Tắt Không
Màn hình Tắt Không
Bluetooth Tắt
Wifi Đang bật Không
Mạng di động Đang bật Không
Ethernet Đang bật Không
Dự đoán Tắt Không
NFC Tắt
Đầu vào Tắt Không
Google Tắt Không
Tương tác với người dùng Tắt Không
Phát hiện thiết bị đáng tin cậy để người dùng đăng nhập Đang bật
Vị trí Tắt Không
Micrô Tắt Không
CPU Đang bật Không

chuẩn bị tạm ngưng

Hành vi của chính sách nguồn của hệ thống chuẩn bị tạm ngưng được xác định trong bảng này:

Thành phần Trạng thái nguồn Có thể định cấu hình OEM
Âm thanh Tắt Không
Nội dung nghe nhìn Không áp dụng Không
Màn hình Không áp dụng Không
Bluetooth Tắt Không
Wifi Tắt Không
Mạng di động Không áp dụng Không
Ethernet Không áp dụng Không
Dự đoán Không áp dụng Không
NFC Không áp dụng Không
Đầu vào Không áp dụng Không
Google Không áp dụng Không
Tương tác với người dùng Không áp dụng Không
Phát hiện thiết bị đáng tin cậy để người dùng đăng nhập Không áp dụng Không
Vị trí Tắt Không
Micrô Tắt Không
CPU Tắt Không

Tương tác với VHAL

Trình nền chính sách nguồn điện của ô tô đang chạy trong lớp hệ thống sẽ đăng ký 2 thuộc tính để theo dõi các yêu cầu của VHAL:

  • POWER_POLICY_REQ, VHAL ghi mã chính sách nguồn điện cho tài sản này.
  • POWER_POLICY_GROUP_REQ, VHAL ghi mã nhóm chính sách nguồn đối với tài sản này.

Không phải là VHAL có thể thay đổi chính sách nguồn hiện tại trong hệ thống. Trong trường hợp đó, trình nền chính sách nguồn điện của ô tô sẽ cập nhật thuộc tính CURRENT_POWER_POLICY để thông báo đổi sang VHAL.

Tương tác với các quy trình gốc

Như đã đề cập ở trên, trình nền chính sách nguồn điện của ô tô chạy trong lớp hệ thống và về nguồn điện quản lý chính sách, cung cấp chức năng gần như giống như CPMS chạy trong lớp khung. Ngoài ra, giả sử rằng trình nền chính sách nguồn điện ô tô và CPMS đã được đồng bộ hoá hoàn toàn.

Trình nền chính sách nguồn cho ô tô xuất giao diện AIDL để HAL và các quy trình gốc khác sử dụng. Họ có thể nhận được thông báo khi chính sách nguồn mới được thay đổi. Nói cách khác, khi từng chỉ số phải thay đổi trạng thái nguồn của thiết bị.

ICarPowerPolicyServer.aidl

  package android.frameworks.automotive.powerpolicy;

  import android.frameworks.automotive.powerpolicy.CarPowerPolicy;
  import android.frameworks.automotive.powerpolicy.CarPowerPolicyFilter;
  import android.frameworks.automotive.powerpolicy.ICarPowerPolicyChangeCallback;
  import android.frameworks.automotive.powerpolicy.PowerComponent;

  /**
   * ICarPowerPolicyServer is an interface implemented by the power policy daemon.
   * VHAL changes the power policy and the power policy daemon notifies the change to
   * registered subscribers. When subscribing to policy changes, a filter can be specified so
   * that the registered callbacks can listen only to a specific power component's change.
   */

  @VintfStability
  interface ICarPowerPolicyServer {
    /**
     * Gets the current power policy.
     * @throws IllegalStateException if the current policy is not set.
     */
    CarPowerPolicy getCurrentPowerPolicy();

    /**
     * Gets whether the power component is turned on or off.
     *
     * @param componentId Power component ID defined in PowerComponent.aidl to check power
     * state.
     * @return True if the component's power state is on.
     * @throws IllegalArgumentException if the componentId is invalid.
     */
    boolean getPowerComponentState(in PowerComponent componentId);

    /**
     * Subscribes to power policy change.
     * Notification is sent to the registered callback when the power policy changes and the
     * power state of the components which the callback is interested in changes.
     *
     * @param callback Callback that is invoked when the power policy changes.
     * @param filter The list of components which the callback is interested in.
     * @throws IllegalArgumentException if the callback is already registered.
     * @throws IllegalStateException if the callback is dead.
     */
    void registerPowerPolicyChangeCallback(in ICarPowerPolicyChangeCallback callback,
        in CarPowerPolicyFilter filter);

    /**
     * Unsubscribes from power policy change.
     *
     * @param callback Callback that doesn't want to receive power policy change.
     * @throws IllegalArgumentException if the callback is not registered.
     */
    void unregisterPowerPolicyChangeCallback(in ICarPowerPolicyChangeCallback callback);

    /**
     * Applies the power policy.
     *
     * 

{@code policyId} should be one of power policy IDs defined in * {@code /vendor/etc/automotive/power_policy.xml} or predefined system power policies. * * @param policyId ID of power policy. * @throws IllegalArgumentException if {@code policyId} is invalid. */ void applyPowerPolicy(in @utf8InCpp String policyId); /** * Sets the current power policy group. * *

{@code policyGroupId} should be one of power policy group IDs defined in * {@code /vendor/etc/automotive/power_policy.xml}. * * @param policyGroupId ID of power policy group. * @throws IllegalArgumentException if {@code policyGroupId} is invalid. */ void setPowerPolicyGroup(in @utf8InCpp String policyGroupId); }

ICarPowerPolicyChangeCallback.aidl

  package android.frameworks.automotive.powerpolicy;

  import android.frameworks.automotive.powerpolicy.CarPowerPolicy;

  /**
   * ICarPowerPolicyChangeCallback is notified when a power policy changes.
   */

  @VintfStability
  oneway interface ICarPowerPolicyChangeCallback {
    /**
     * Called when a power policy is fully changed.
     *
     * @param policy The current policy.
     */
    void onPolicyChanged(in CarPowerPolicy policy);
  }

Tương tác với các mô-đun Java

CarPowerManager cung cấp các phương thức để bật tính năng quản lý chính sách nguồn:

  • Tải chính sách nguồn hiện tại
  • Áp dụng chính sách nguồn mới
  • Đặt nhóm chính sách nguồn mới

Chỉ các mô-đun đặc quyền của hệ thống mới có thể sử dụng các phương thức này. Các mô-đun muốn trở thành được thông báo khi áp dụng chính sách nguồn có thể đăng ký trình nghe thay đổi chính sách nguồn cho CarPowerManager