Hệ điều hành ô tô Android (AAOS) chứa các thuộc tính VHAL phổ biến có thể xem được trong cửa sổ VHAL của trình mô phỏng. Do đó, bạn có thể xem rất nhiều thông tin về VHAL bao gồm tên, mô tả và ý nghĩa của các giá trị. Thông tin được trích xuất từ siêu dữ liệu của thuộc tính VHAL, được mã hóa 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ị của mình, việc xem siêu dữ liệu VHAL trong cửa sổ VHAL yêu cầu bạn sửa đổi mã và xây dựng trình mô phỏng QEMU tùy chỉnh. Để giải quyết vấn đề này, bạn có thể viết mô tả của riêng mình ở định dạng JSON và chúng vào hình ảnh hệ thống của bạn.
Tổng quan
Trang này nêu 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 thuộc tính VHAL
Trình mô phỏng tìm kiế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). Các tệp JSON dự kiến sẽ bao gồm một mảng các đối tượng Enum
như hiển thị bên dưới.
Đối tượng liệt kê
Đối tượng Enum
có tên VehicleProperty
là một trường hợp đặc biệt trong đó bạn có thể coi nó như một root. Nội dung của nó được thêm vào bản đồ thuộc tính xe. Enums
khác (có tên khác VehicleProperty
) xác định bản đồ tên của các giá trị tùy 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 hiển thị thuộc tính này trong cửa sổ VHAL của trình mô phỏng. Giá trị là property_id
của thuộc tính được mô tả bởi ValueObject
. data_enum
liên kết ValueObject
với một Enum
khác. Liên kết này được sử 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 đối với ValueObjects
trong Enum
cho VehicleProperty
. Một ví dụ về VehicleProperty
được hiển thị bên dưới:
[ { "name": "VehicleProperty", "values": [ { "name": "CURRENT_GEAR", "value": 289408001 } ] } ]
Trong ví dụ này, property_id
có value
289408001 được cung cấp làm name
cho CURRENT_GEAR
. Trong trình mô phỏng, thuộc tính này đã được mã hóa cứng dưới dạng tên Current Gear . (Bạn không thể tái tạo kịch bản này vì trang này được tạo sau khi xóa tất cả các thuộc tính được mã hóa cứng cho mục đích trình diễn.)
Hình 1. VehicleProperty được xác định bằng tên và giá trị.
Trong tab Thuộc tính VHAL của trình mô phỏng, tên được làm mới để đọc CURRENT_GEAR
như mong đợi.
dữ liệu_enum
Trong ví dụ trên, giá trị được hiển thị là 4 khi cài số P.
Hình 2. Giá trị hiển thị là 4.
Đúng như dự định, trên tab Thuộc tính VHAL trong trình mô phỏng, tên xuất hiện là CURRENT_GEAR
. Điều này trái ngược với trình giả lập hiện có, nơi nó được 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 AIDL .
Như được định nghĩa trong AIDL, giá trị của bánh răng Park là 4 , nghĩa là bạn cần dịch giá trị 4 thành P. Đây là khi bạn sử dụng data_enum
, ánh xạ giá trị thuộc tính này tới một chuỗ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 VehicleGear
để dịch giá trị thuộc tính. Thêm một 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 tab Thuộc tính VHAL dành cho trình mô phỏng, tên được làm mới để đọc CURRENT_GEAR
như mong đợi. Giá trị thuộc tính là 4
được hiển thị dưới dạng GEAR_PARK
.
Sử dụng siêu dữ liệu JSON để mở rộng thuộc tính VHAL
Để sử dụng siêu dữ liệu JSON nhằm mở rộng thuộc tính VHAL của bạn, 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 kết quả bao gồm một số giá trị dư 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
Hãy 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 tin sẽ bị bỏ qua.
Thêm mục tiêu xây 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}/
, gốc của đầu ra mục tiêu được xây dựng của bạn.