Để đảm bảo rằng 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 nguồ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ờ được đáp ứng.
Bạn có thể áp dụng chính sách nguồn ở các trạng thái Chờ VHAL và Bật (đôi khi có một số hạn chế). Ở trạng thái Chuẩn bị tắt, Chế độ nhà để xe đang chạy và không được làm gián đoạn 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, 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ó tương tác của người dùng) sẽ được áp dụng ở trạng thái Chuẩn bị tắt.
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 này:

Hình 1. Sơ đồ trạng thái nguồn của AAOS.
Mỗi trạng thái nguồn được mô tả dưới đây:
| Giá trị | Mô tả |
|---|---|
| Tắt |
|
| Chờ VHAL |
|
| Bật |
|
| Chuẩn bị tắt |
|
| Chờ VHAL hoàn tất |
|
| Tạm ngưng sang RAM (STR) |
|
| Tạm ngưng sang đĩa (STD) |
|
Chính sách nguồn được xác định như thế nào?
Người 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à tự động được áp dụng khi quá trình chuyển đổi trạng thái nguồn xảy ra.
- Ghi đè chính sách nguồn hệ thống.
Chính sách nguồn
Chính sách nguồn bao gồm một tập hợp 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ợ các thành phần này trong chính sách nguồn:
|
ÂM THANH NỘI DUNG NGHE NHÌN HIỂN THỊ BLUETOOTH |
WIFI MẠNG DI ĐỘNG ETHERNET DỰ ĐOÁN |
NFC ĐẦU VÀO TƯƠNG TÁC BẰNG GIỌNG NÓI TƯƠNG TÁC BẰNG HÌNH ẢNH |
PHÁT HIỆN THIẾT BỊ ĐÁNG TIN CẬY VỊ TRÍ MICRÔ 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 nguồn. Xác định các thành phần nguồn tuỳ chỉnh trong cùng một tệp XML như các chính sách 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 nguồn
Nhóm chính sách nguồn chỉ định chính sách nguồn mặc định để tự động áp dụng khi chuyển đổi trạng thái nguồn. Nhà cung cấp có thể xác định chính sách nguồn mặc định cho trạng thái Chờ VHAL, Bật và Chờ VHAL hoàn tất (Nhập trạng thái Ngủ sâu hoặc Bắt đầu tắt).
Chính sách nguồn hệ thống
AAOS hỗ trợ 2 chính sách nguồn hệ thống là không có lượt 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 sang RAM hoặc Tạm ngưng sang đĩ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 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ị đáng tin cậy trong
chính sách nguồn hệ thống không có tương tác của người dùng. Cá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ó 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 để đăng nhập người dùng | Bật | Có |
| Vị trí | Tắt | Không |
| Micrô | Tắt | Không |
| CPU | Bật | Không |
chuẩn bị tạm ngưng
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 cho 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 để đăng nhập người dùng | 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 của ô tô chạy trong lớp hệ thống đăng ký 2 thuộc tính để nghe các yêu cầu từ VHAL:
POWER_POLICY_REQVHAL ghi mã chính sách nguồn vào thuộc tính này.POWER_POLICY_GROUP_REQVHAL ghi mã nhóm chính sách 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 của ô tô sẽ cập nhật thuộc tính CURRENT_POWER_POLICY để thông báo
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 thông tin duy nhất về các chính sách nguồn trong hệ thống. Trình nền chính sách nguồn của ô tô quản lý trạng thái chính sách nguồn và thông báo cho CPMS, VHAL và các ứng dụng gốc khác về các thay đổi.
Trình nền chính sách nguồ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. Chúng có thể được thông báo khi một chính sách nguồn mới được thay đổi. Nói cách khác, khi mỗi chính sách nguồn 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:
- Nhận 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ó đặc quyền hệ thống mới có thể sử dụng các phương thức này. Các mô-đun muốn được
thông báo khi một chính sách nguồn được áp dụng có thể đăng ký trình nghe thay đổi chính sách nguồn cho
CarPowerManager