Android Automotive OS (AAOS) chứa các thuộc tính VHAL phổ biến mà bạn có thể xem trong cửa sổ VHAL của trình mô phỏng. Do đó, bạn có thể xem nhiều thông tin về VHAL, bao gồm tên, nội dung mô tả và ý nghĩa của các giá trị. Thông tin này được trích xuất từ siêu dữ liệu của các thuộc tính VHAL, được mã hoá cứng vào trình mô phỏng QEMU.
Khi thêm các thuộc tính VHAL của riêng bạn để sử dụng riêng trên thiết bị, bạn cần sửa đổi mã và tạo trình mô phỏng QEMU tuỳ chỉnh để xem siêu dữ liệu VHAL trong cửa sổ VHAL. Để giải quyết vấn đề này, bạn có thể viết nội dung mô tả của riêng mình ở định dạng JSON và thêm vào hình ảnh hệ thống.
Tổng quan
Trang này trình bày chi tiết cách bạn có thể mở rộng nội dung mô tả thuộc tính VHAL trong trình mô phỏng AAOS.
Tạo siêu dữ liệu JSON để mở rộng các thuộc tính VHAL
Trình mô phỏng tìm siêu dữ liệu bổ sung trong tất cả các tệp có đuôi -types-meta.json
trong đường dẫn Thiết bị Android ảo (AVD). Tệp JSON dự kiến sẽ bao gồm một mảng các đối tượng Enum
như minh hoạ bên dưới.
Đối tượng enum
Đối tượng Enum
có tên VehicleProperty
là một trường hợp đặc biệt trong đó bạn có thể coi đối tượng này là gốc. Nội dung của tệp này được thêm vào bản đồ thuộc tính xe. Các Enums
khác (có tên khác với VehicleProperty
) xác định các bản đồ tên của các giá trị tuỳ chỉnh.
Enum: { "name" : String, "values" : Array of { ValueObject } }
ValueObject
ValueObject: { "name" : String, "value" : Integer, "data_enum" : String, VehicleProperty only, optional, }
Đối với VehicleProperty
, tên Enum
mô tả cách thuộc tính này hiển thị trong cửa sổ VHAL của trình mô phỏng. Giá trị này là property_id
của thuộc tính do ValueObject
mô tả.
data_enum
liên kết ValueObject
với một Enum
khác.
Mối liên kết này được dùng để liên kết một giá trị vào một chuỗi mà con người có thể đọc được và chỉ tồn tại đối với ValueObjects
trong Enum
cho VehicleProperty
.
Dưới đây là ví dụ về VehicleProperty
:
[ { "name": "VehicleProperty", "values": [ { "name": "CURRENT_GEAR", "value": 289408001 } ] } ]
Trong ví dụ này, property_id
có value
là 289408001 được cung cấp dưới dạng name
cho CURRENT_GEAR
.
Trong trình mô phỏng, thuộc tính này đã được mã hoá cứng dưới dạng tên Current Gear (Băng số hiện tại).
(Bạn không thể tái hiện trường hợp này vì trang này được tạo sau khi xoá tất cả các thuộc tính được mã hoá cứng cho mục đích minh hoạ.)
Hình 1. VehicleProperty được xác định bằng tên và giá trị.
Trong thẻ VHAL Properties (Thuộc tính VHAL) của trình mô phỏng, tên sẽ được làm mới để hiển thị là CURRENT_GEAR
như dự kiến.
data_enum
Trong ví dụ trên, giá trị hiển thị là 4 khi chế độ số được đặt thành P.
Hình 2. Giá trị hiển thị là 4.
Như dự kiến, trên thẻ VHAL Properties (Thuộc tính VHAL) trong trình mô phỏng, tên sẽ xuất hiện là CURRENT_GEAR
. Điều này trái ngược với trình mô phỏng hiện có, trong đó nút này hiển thị dưới dạng P.
enum VehicleGear { GEAR_UNKNOWN = 0x0000, GEAR_NEUTRAL = 0x0001, GEAR_REVERSE = 0x0002, GEAR_PARK = 0x0004, GEAR_DRIVE = 0x0008, GEAR_1 = 0x0010, GEAR_2 = 0x0020, GEAR_3 = 0x0040, GEAR_4 = 0x0080, GEAR_5 = 0x0100, GEAR_6 = 0x0200, GEAR_7 = 0x0400, GEAR_8 = 0x0800, GEAR_9 = 0x1000, }
Để tìm hiểu thêm, hãy xem định nghĩa về AIDL.
Như đã xác định trong AIDL, giá trị của chế độ Đỗ xe là 4, nghĩa là bạn cần dịch giá trị 4 thành P. Đây là lúc bạn sử dụng data_enum
để ánh xạ giá trị thuộc tính này đến một chuỗi mà con người có thể đọc được trong một Enum
khác. Trình mô phỏng sử dụng bản đồ này để dịch các giá trị thuộc tính. Ví dụ:
[ { "name": "VehicleProperty", "values": [ { "name": "CURRENT_GEAR", "value": 289408001, "data_enum": "VehicleGear" } ] }, { "name": "VehicleGear", "values": [ { "name": "GEAR_UNKNOWN", "value": 0 }, { "name": "GEAR_PARK", "value": 4 } ] } ]
Thêm "data_enum": "VehicleGear"
để trình mô phỏng sử dụng Enum
có tên là VehicleGear
để dịch giá trị thuộc tính. Thêm một Enum
khác có tên là VehicleGear
với giá trị là một mảng ValueObject
, trong đó giá trị thuộc tính (có giá trị) sẽ hiển thị dưới dạng tên.
Hình 3. Giá trị hiển thị dưới dạng GEAR_PARK.
Trên thẻ VHAL Properties (Thuộc tính VHAL) cho trình mô phỏng, tên sẽ được làm mới để hiển thị là CURRENT_GEAR
, như dự kiến. Giá trị thuộc tính của 4
hiển thị dưới dạng GEAR_PARK
.
Sử dụng siêu dữ liệu JSON để mở rộng các thuộc tính VHAL
Để sử dụng siêu dữ liệu JSON nhằm mở rộng các thuộc tính VHAL, hãy chạy tập lệnh Python này (có trong nguồn Android) để tạo JSON thuộc tính mở rộng từ thông tin trong AIDL.
JSON thu được bao gồm một số giá trị thừa, chẳng hạn như change_mode
, access
và unit
. Mặc dù thông tin này là một phần của thuộc tính VHAL, nhưng các giá trị JSON này không ảnh hưởng đến nội dung hiển thị trong cửa sổ thuộc tính VHAL của trình mô phỏng.
Thêm siêu dữ liệu JSON vào hình ảnh hệ thống
Xin lưu ý rằng tên tệp phải kết thúc bằng -types-meta.json
. Nếu không, tệp sẽ bị bỏ qua.
Thêm mục tiêu bản dựng
Thêm tệp -types-meta.json
vào PRODUCT_COPY_FILE
. Ví dụ:
PRODUCT_COPY_FILES += \ device/generic/car/common/vehicle-types-meta.json:vehicle-types-meta.json
Mã này sao chép tệp vào out/target/product/{your_target_path}/
, thư mục gốc của đầu ra mục tiêu đã tạo.