Android Automotive OS (AAOS) chứa các thuộc tính VHAL phổ biến có thể để xem trong cửa sổ VHAL của trình mô phỏng. Kết quả là bạn có thể xem được nhiều thông tin về VHAL, bao gồm cả 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 bạn thêm thuộc tính VHAL của riêng mình để sử dụng độc quyền trên thiết bị, hãy xem siêu dữ liệu VHAL trong cửa sổ VHAL, bạn cần sửa đổi mã và tạo trình mô phỏng QEMU tuỳ chỉnh. Người nhận 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 rồi đưa chúng vào hệ thống của bạn hình ảnh.
Tổng quan
Trang này trình bày chi tiết cách bạn có thể mở rộng 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 kết thúc bằng -types-meta.json
trong đường dẫn Thiết bị ảo Android (AVD). Tệp JSON cần bao gồm một mảng
Enum
đối tượng như minh hoạ dưới đây.
Đố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 đó là thư mục gốc. Nội dung của chuyến đi sẽ được thêm vào bản đồ thuộc tính xe. Lý do khác
Enums
(có tên không phải là VehicleProperty
) xác định bản đồ của các tên này
của các giá trị tuỳ chỉnh.
Enum: { "name" : String, "values" : Array of { ValueObject } }
Đối tượng giá trị
ValueObject: { "name" : String, "value" : Integer, "data_enum" : String, VehicleProperty only, optional, }
Đối với VehicleProperty
, tên Enum
mô tả cách điều này
thuộc tính này sẽ xuất hiện trong cửa sổ VHAL của trình mô phỏng. Giá trị là
property_id
của thuộc tính mà 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 để ánh xạ một giá trị thành một chuỗi mà con người có thể đọc được và chỉ tồn tại cho
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 làm tên Current Gear.
(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ả mã được cố định giá trị trong mã
cho mục đích minh hoạ.)
Hình 1. Thuộc tính xe đượ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 để đọc
CURRENT_GEAR
như dự kiến.
dữ_liệu_enum
Trong ví dụ trên, giá trị được hiển thị là 4 khi bánh răng được đặt thành B.
Hình 2. Giá trị được hiển thị là 4.
Như đã dự tính, trên thẻ VHAL Properties (Thuộc tính VHAL) trong trình mô phỏng, tên sẽ xuất hiện như
CURRENT_GEAR
. Điều này trái ngược với trình mô phỏng hiện có, trong đó trình mô phỏng thể hiện dưới dạng
B.
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 AIDL định nghĩa.
Theo định nghĩa trong AIDL, giá trị của bánh răng Đỗ xe là 4, tức là
có nghĩa là bạn cần chuyển giá trị 4 sang P. Đây là khi bạn
sử dụng data_enum
để liên kết giá trị thuộc tính này với một chuỗi mà con người có thể đọc được trong một chuỗi khác
Enum
Trình mô phỏng sử dụng bản đồ này để dịch các giá trị của 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 Enum
khác
có tên VehicleGear
với giá trị là một mảng ValueObject
, trong đó
giá trị thuộc tính (có giá trị) sẽ được hiển thị dưới dạng tên.
Hình 3. Giá trị được hiển thị dưới dạng GEAR_PARK.
Trên thẻ Thuộc tính VHAL cho trình mô phỏng, tên sẽ được làm mới để đọc
CURRENT_GEAR
, đúng như dự kiến. Giá trị thuộc tính của 4
được 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 thuộc tính này Tập lệnh Python (có trong nguồn Android) để tạo thuộc tính mở rộng JSON từ thông tin trong AIDL.
JSON thu được có chứa 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,
các giá trị JSON này không ảnh hưởng đến nội dung xuất hiện 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 sẽ 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.