Chính sách về nguồ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 có chọn lọc khi cần, AAOS cung cấp một chính sách về nguồn điện, bao gồm một tập hợp các 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 các dịch vụ của nhà cung cấp có đặc quyền 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 chuyển đổi hoặc khi các điều kiện mà chúng đang chờ đợi được đáp ứng.

Bạn được phép áp dụng chính sách về nguồn điện ở các trạng thái Chờ VHAL, Bật và Chuẩn bị trước khi tắt (đôi khi có một số hạn chế). Không giống như Wait for VHAL và On, bạn không thể định cấu hình chính sách nguồn mặc định cho Pre Shutdown Prepare trong một nhóm chính sách nguồn. Trong giai đoạn Chuẩn bị tắt cốt lõi, Chế độ nhà để xe đang chạy và không bị ảnh hưởng bởi sự 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, nhưng một chính sách nguồn đặc biệt (chính sách nguồn hệ thống có tên là không có sự tương tác của người dùng) sẽ được áp dụng trong giai đoạn Chuẩn bị tắt cốt lõi.

Trạng thái nguồn của 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 của AAOS.

Dưới đây là nội dung mô tả từng trạng thái nguồn:

Giá trị Mô tả
Tắt
  • Không có nguồn điện nào được cung cấp cho bộ vi xử lý ứng dụng (AP), bộ nhớ và các thiết bị ngoại vi.
Chờ 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ẽ cấp nguồn cho AP, bộ nhớ và các thiết bị ngoại vi.
  • AAOS chuyển đổi 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 chuyển sang Chờ VHAL, nơi hệ thống chờ phối hợp với VHAL.
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 theo chính sách nguồn chứ không phải theo các lệnh gọi Bật/Tắt màn hình Android cho các kiểu dáng khác.
Chuẩn bị tắt
  • Khi người lái xe dừng lái, VHAL sẽ hướng dẫn AAOS chuyển sang trạng thái Chuẩn bị tắt. Trạng thái này bắt đầu bằng giai đoạn Chuẩn bị trước khi tắt, sau đó là giai đoạn Chuẩn bị tắt cốt lõi. Trong giai đoạn cốt lõi, màn hình và âm thanh sẽ tắt và AAOS không tương tác với người lái xe. 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 mọi bản cập nhật hoàn tất, hệ thống Android sẽ chuyển sang trạng thái Wait for VHAL Finish (Chờ VHAL hoàn tất).
Chờ VHAL hoàn tất
  • AAOS thông báo cho VHAL rằng hệ thống có thể tắt. Đơn vị vi điều khiển xe (VMCU) dự kiến sẽ đặt Hệ thống trên vi mạch (SoC) ở chế độ Ngủ sâu và loại bỏ nguồn điệ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 trả về, thì đầu phát trung tâm (HU) sẽ chuyển đổi trực tiếp sang Chờ VHAL.
Tạm ngưng vào 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 được duy trì cho RAM AP.
Tạm ngưng vào ổ đĩa (STD)
  • Xe và AP đang tắt, không có mã nào đang được thực thi và không có nguồn điện nào được duy trì cho bộ xử lý và RAM AP.

Chính sách về nguồn điện được xác định như thế nào?

Người triển khai xác định các chính sách về nguồn điện trong /vendor/etc/automotive/power_policy.xml, trong đó:

  • Xác định chính sách về nguồn điệ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à tự động áp dụng khi trạng thái nguồn chuyển đổi.
  • 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 về nguồn điện bao gồm một tập hợp các trạng thái nguồn điện dự kiến của các thành phần phần cứng và phần mềm. AAOS hỗ trợ các thành phần sau trong chính sách nguồn:

ÂM THANH
NỘI DUNG MULTIMEDIA
MÀN HÌNH
BLUETOOTH
WI-FI
DỮ LIỆU DI ĐỘNG
ETHERNET
CHIẾU
NFC
INPUT
VOICE_INTERACTION
VISUAL_INTERACTION
TRUSTED_DEVICE_DETECTION
LOCATION
MICROPHONE
CPU

Nhà cung cấp cũng có thể xác định các thành phần nguồn tuỳ chỉnh của riêng họ để sử dụng với các chính sách về nguồn. Xác định 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 về nguồn, như trong ví dụ này:

<customComponents>
  CUSTOM_COMPONENT_1000
  CUSTOM_COMPONENT_SPECIAL_SENSOR
  CUSTOM_COMPONENT_AUX_INPUT
</customComponents>

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

Nhóm chính sách về nguồn điện chỉ định chính sách mặc định về nguồn điện để tự động áp dụng khi chuyển đổi trạng thái nguồn điện. Nhà cung cấp có thể xác định chính sách nguồn mặc định cho Wait for VHAL và On.

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

AAOS hỗ trợ 2 chính sách nguồn hệ thống là không có hoạt động tương tác của người dùng và chuẩn bị tạm ngưng. Chính sách nguồn hệ thống được áp dụng khi thiết bị chuyển sang Chế độ im lặng, Chế độ nhà để xe, Tạm ngưng vào RAM hoặc Tạm ngưng vào ổ đĩ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 đè Bluetooth, NFC và tính năng phát hiện Thiết bị tin cậy trong chính sách nguồn hệ thống không có sự tương tác của người dùng. Các chế độ ghi đè được áp dụng trong /vendor/etc/automotive/power_policy.xml.

không có hoạt động 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ó hoạt động tương tác của người dù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
Âm thanh Tắt Không
Nội dung nghe nhìn Tắt Không
Hiển thị Tắt Không
Bluetooth Tắt Có
Wifi Bật Không
Mạng di động Bật Không
Ethernet Bật Không
Dự đoán Tắt Không
NFC Tắt Có
Đầu vào Tắt Không
Trợ lý Tắt Không
Lượt tương tác của người dùng Tắt Không
Phát hiện thiết bị đáng tin cậy khi người dùng đăng nhập Bật Có
Vị trí Tắt Không
Micrô Tắt Không
CPU Bật Không

tạm ngưng prep

Hành vi của chính sách nguồn 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 theo OEM
Âm thanh Tắt Không
Nội dung nghe nhìn Không áp dụng Không
Hiển thị 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
Trợ lý Không áp dụng Không
Lượt tương tác của người dùng Không áp dụng Không
Phát hiện thiết bị đáng tin cậy khi 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ô chạy trong lớp hệ thống đăng ký 2 thuộc tính để theo dõi các yêu cầu từ VHAL:

  • POWER_POLICY_REQ VHAL ghi mã chính sách về nguồn vào thuộc tính này.
  • POWER_POLICY_GROUP_REQ VHAL ghi mã nhóm chính sách về nguồn vào thuộc tính này.

Các mô-đun khác ngoài 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 về thay đổi cho VHAL.

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

CarPowerManagementService (CPMS) uỷ quyền quản lý chính sách nguồn cho trình nền chính sách nguồn của ô tô. Trình nền là nguồn đáng tin cậy duy nhất cho các chính sách về nguồn trong hệ thống. Trình nền chính sách nguồn điện của ô tô quản lý trạng thái chính sách nguồn điện và thông báo cho CPMS, VHAL và các ứng dụng gốc khác về những thay đổi.

Trình nền chính sách nguồn điện của ô tô xuất các 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 có chính sách nguồn mới được thay đổi. Nói cách khác, khi mỗi thiết bị phải thay đổi trạng thái nguồn.

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:

  • Lấy chính sách nguồn hiện tại
  • Áp dụng chính sách nguồn mới
  • Thiết lập nhóm chính sách nguồn mới

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