Các phần sau mô tả cách làm việc với lớp trừu tượng phần cứng (HAL) để triển khai đài phát sóng.
Giao diện HAL (Lớp trừu tượng phần cứng) cho đài phát
HAL đài phát sóng cung cấp cấu trúc và giao diện dữ liệu ở cấp độ phần cứng để triển khai đài phát sóng, chẳng hạn như đài AM/FM và DAB.
Giao diện HIDL 2.0 và AIDL
HAL (Lớp trừu tượng phần cứng) cho đài phát sóng sử dụng các giao diện được mô tả trong các phần sau.
InotificationListener
IAnnouncementListener
là giao diện gọi lại cho trình nghe thông báo
có thể đăng ký trên HAL (Lớp trừu tượng phần cứng) trên đài phát thanh để nhận thông báo. Giao diện có như sau
phương thức:
InotificationListener | ||
---|---|---|
Nội dung mô tả: Được gọi bất cứ khi nào danh sách thông báo có đã thay đổi. | ||
HIDL 2.0 | oneway onListUpdated(vec<Announcement> announcements) |
|
AIDL | oneway void onListUpdated(in Announcement[] announcements) |
Xử lý
ICloseHandle
là điều khiển đóng chung dùng để loại bỏ lệnh gọi lại không cần
giao diện đang hoạt động.
Xử lý | ||
---|---|---|
Mô tả: Đóng ô điều khiển. | ||
HIDL 2.0 | close() |
|
AIDL | void close() |
ITunerCallback
ITunerCallback
là giao diện gọi lại do HAL của đài phát sóng gọi đến
gửi bản cập nhật đến dịch vụ khách HAL.
ITunerCallback | ||
---|---|---|
Mô tả: Được HAL gọi vào khi điều chỉnh thao tác (điều chỉnh, tua (trong AIDL) hoặc quét (trong HIDL) và bước thành công) không đồng bộ. | ||
HIDL 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) |
|
AIDL | void onCurrentProgramInfoChanged(in ProgramInfo info) |
|
Nội dung mô tả: Được gọi khi chỉnh, tua (trong AIDL) hoặc quét (trong HIDL) hoặc bước thành công. | ||
HIDL 2.0 | oneway onTuneFailed(Result result, ProgramSelector selector) |
|
AIDL | void onTuneFailed(in Result result, in ProgramSelector selector) |
|
Nội dung mô tả: Được gọi khi chỉnh, tua (trong AIDL) hoặc quét (trong HIDL) hoặc bước thành công. | ||
HIDL 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) |
|
AIDL | void onCurrentProgramInfoChanged(in ProgramInfo info) |
|
Nội dung mô tả: Được gọi khi danh sách chương trình được cập nhật; thời gian kích thước của mỗi đoạn mã nên được giới hạn ở mức 500kiB. | ||
HIDL 2.0 | oneway onProgramListUpdated(ProgramListChunk chunk) |
|
AIDL | oneway onProgramListUpdated(ProgramListChunk chunk) |
|
Mô tả: Được gọi khi ăng-ten được kết nối hoặc đã ngắt kết nối. | ||
HIDL 2.0 | oneway onAntennaStateChange(bool connected) |
|
AIDL | void onCurrentProgramInfoChanged(in ProgramInfo info) |
|
Nội dung mô tả: Được gọi khi thông số của riêng nhà cung cấp
các giá trị được cập nhật nội bộ trong HAL (không gọi sau khi gọi
setParameters qua ứng dụng HAL). |
||
HIDL 2.0 | oneway onParametersUpdated(vec<VendorKeyValue> parameters) |
|
AIDL | void onParametersUpdated(in VendorKeyValue[] parameters) |
|
Nội dung mô tả: Tính năng mới trong AIDL. Được gọi khi cờ cấu hình được
được cập nhật nội bộ trong HAL (không nên
bị gọi sau khi gọi setConfigFlag bằng ứng dụng HAL). |
||
HIDL 2.0 | Không có. | |
AIDL | void onConfigFlagUpdated(in ConfigFlag flag, in boolean value) |
Đài phát thanh tôi
IBroadcastRadio
là giao diện chính cho lớp HAL (Lớp trừu tượng phần cứng) cho đài phát. Trong HIDL
HAL 2.0, sử dụng giao diện ITunerSession
với bộ dò để gọi các hoạt động. Tuy nhiên, lúc
hầu hết một bộ điều chỉnh hoạt động cùng một lúc (miễn là mỗi phiên bản HAL vô tuyến phát sóng chỉ có một bộ dò
khối).
ITunerSession
đã bị xoá khỏi giao diện AIDL và các giao diện của giao diện đó được chuyển sang
IBroadcastRadio
.
Đài phát thanh tôi | ||
---|---|---|
Nội dung mô tả: Xem nội dung mô tả về mô-đun và mô-đun các chức năng khác nhau. | ||
HIDL 2.0 | getProperties() generates (Properties properties) |
|
AIDL | Properties getProperties() |
|
Nội dung mô tả: Tìm nạp AM/FM hiện tại hoặc có thể có cấu hình khu vực. | ||
HIDL 2.0 | getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig
config) |
|
AIDL | AmFmRegionConfig getAmFmRegionConfig(bool full) |
|
Nội dung mô tả: Tìm nạp khu vực DAB hiện tại . | ||
HIDL 2.0 | getDabRegionConfig() generates (Result result, vec<DabTableEntry>
config) |
|
AIDL | DabTableEntry[] getDabRegionConfig() |
|
Mô tả: Lấy hình ảnh từ bộ nhớ đệm mô-đun radio. Trong AIDL, kích thước hình ảnh phải dưới 1 MB do giới hạn cố định trên vùng đệm giao dịch liên kết. | ||
HIDL 2.0 | getImage(uint32_t id) generates (vec<uint8_t> image) |
|
AIDL | byte[] getImage(in int id) |
|
Description (Nội dung mô tả): Đăng ký trình nghe thông báo. | ||
HIDL 2.0 | registerAnnouncementListener(vec<AnnouncementType>
enabled,IAnnouncementListener listener) generates (Result result, ICloseHandle
closeHandle) |
|
AIDL | ICloseHandle registerAnnouncementListener(in IAnnouncementListener listener, in
AnnouncementType[] enabled) |
|
Nội dung mô tả:
|
||
HIDL 2.0 | openSession(ITunerCallback callback) tạo
(Result result, ITunerSession session) |
|
AIDL | void setTunerCallback(in ITunerCallback callback) |
|
Nội dung mô tả:
|
||
HIDL 2.0 | close() |
|
AIDL | unsetTunerCallback() |
|
Mô tả: Điều chỉnh một chương trình cụ thể. | ||
HIDL 2.0 | tune(ProgramSelector program) generates (Result result) |
|
AIDL | void tune(in ProgramSelector program) |
|
Description: Tìm kiếm chương trình hợp lệ tiếp theo trên
không khí. Để tránh nhầm lẫn trong AIDL,
scan đổi tên thành seek .
|
||
HIDL 2.0 | scan(bool directionUp, bool skipSubChannel) generates (Result result) |
|
AIDL | void seek(in boolean directionUp, in boolean skipSubChannel) |
|
Mô tả: Các bước đến kênh liền kề (có thể không bị bất kỳ chương trình nào sử dụng. | ||
HIDL 2.0 | step(bool directionUp) generates (Result result) |
|
AIDL | void step(in boolean directionUp) |
|
Mô tả: Huỷ chỉnh, quét đang chờ xử lý (ở chế độ HIDL) hoặc tua (trong AIDL) hoặc phép toán từng bước. | ||
HIDL 2.0 | cancel() |
|
AIDL | void cancel() |
|
Nội dung mô tả: Áp dụng bộ lọc cho danh sách chương trình và
bắt đầu gửi thông tin cập nhật danh sách chương trình qua
Gọi lại onProgramListUpdated . |
||
HIDL 2.0 | startProgramListUpdates(ProgramFilter filter) generates (Result result) |
|
AIDL | void startProgramListUpdates(in ProgramFilter filter) |
|
Mô tả: Ngừng gửi thông tin cập nhật về danh sách chương trình. | ||
HIDL 2.0 | stopProgramListUpdates() |
|
AIDL | void stopProgramListUpdates() |
|
Nội dung mô tả: Tìm nạp chế độ cài đặt hiện tại của một chế độ cài đặt cụ thể config của chúng tôi. | ||
HIDL 2.0 | isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value) |
|
AIDL | boolean isConfigFlagSet(in ConfigFlag flag) |
|
Mô tả: Đặt cờ cấu hình đã cho. | ||
HIDL 2.0 | setConfigFlag(ConfigFlag flag, bool value) generates (Result result) |
|
AIDL | void setConfigFlag(in ConfigFlag flag, boolean value) |
|
Mô tả: Đặt giá trị thông số theo nhà cung cấp cụ thể. | ||
HIDL 2.0 | setParameters(vec<VendorKeyValue> parameters)
tạo, (vec<VendorKeyValue> results) |
|
AIDL | VendorKeyValue[] setParameters(in VendorKeyValue[] parameters) |
|
Nội dung mô tả: Truy xuất giá trị thông số theo nhà cung cấp cụ thể. | ||
HIDL 2.0 | getParameters(vec<string> keys) generates (vec<VendorKeyValue>
parameters) |
|
AIDL | VendorKeyValue[] getParameters(in String[] keys) |
Giải thích giao diện
Hành vi không đồng bộ
Vì mỗi thao tác điều chỉnh (ví dụ: chỉnh, quét (trong HIDL) hoặc tua (trong AIDL) và bước) có thể tốn thời gian và luồng không bị chặn trong một thời gian dài. lên lịch các thao tác tốn thời gian diễn ra sau đó và nhanh chóng trả về trạng thái hoặc kết quả. Cụ thể, mỗi thao tác nên:
- Huỷ tất cả các thao tác điều chỉnh đang chờ xử lý.
- Kiểm tra xem thao tác có thể được xử lý hay không dựa trên dữ liệu đầu vào của phương thức và trạng thái của bộ chỉnh.
- Lên lịch cho tác vụ điều chỉnh rồi trả về
Result
(trong HIDL) hoặcstatus
(trong AIDL) ngay lập tức. NếuResult
hoặcstatus
làOK
, lệnh gọi lại bộ dò Phải gọituneFailed
hoặccurrentProgramInfoChanged
khi chỉnh tác vụ không thành công (ví dụ: do hết thời gian chờ) hoặc đã hoàn tất.
Tương tự, startProgramListUpdates
cũng lên lịch cho tác vụ tốn thời gian của
cập nhật danh sách chương trình để diễn ra sau và để nhanh chóng trả lại trạng thái hoặc kết quả. Phương thức
trước tiên sẽ huỷ các yêu cầu cập nhật đang chờ xử lý rồi lên lịch tác vụ cập nhật và nhanh chóng trả về
kết quả.
Điều kiện tranh đấu
Do hoạt động không đồng bộ của các thao tác dò (ví dụ: chỉnh, dò (trong HIDL) hoặc tua
(trong AIDL) và bước), sẽ có một tình huống tương tranh giữa thao tác huỷ thao tác và thao tác điều chỉnh
các toán tử. Nếu cancel
được gọi sau khi HAL hoàn tất thao tác điều chỉnh và trước khi
lệnh gọi lại hoàn tất, lệnh huỷ có thể bị bỏ qua, lệnh gọi lại sẽ hoàn tất và được nhận
bởi ứng dụng HAL.
Tương tự, nếu stopProgramListUpdates
được gọi sau khi HAL hoàn tất một chương trình
cập nhật danh sách và trước khi lệnh gọi lại onCurrentProgramInfoChanged
hoàn tất,
stopProgramListUpdates
có thể bị bỏ qua và lệnh gọi lại sẽ hoàn tất.
Giới hạn kích thước dữ liệu
Vì có giới hạn cố định trên vùng đệm giao dịch liên kết, nên giới hạn dữ liệu cho một số giao diện các phương thức truyền dữ liệu có kích thước lớn được làm rõ trong HAL AIDL.
getImage
yêu cầu hình ảnh được trả về dưới 1 MB.onProgramListUpdate
yêu cầu mỗichunk
phải nhỏ hơn 500kiB. Các danh sách chương trình lớn hơn phải được chia bằng cách triển khai HAL (Lớp trừu tượng phần cứng) thành nhiều phần và được gửi qua nhiều lệnh gọi lại.
Các thay đổi về cấu trúc dữ liệu AIDL HAL
Ngoài những thay đổi về giao diện, những thay đổi này cũng được áp dụng cho cấu trúc dữ liệu xác định trong AIDL HAL dạng phát sóng vô tuyến, tận dụng AIDL.
- Enum
Constant
sẽ bị xoá trong AIDL và được xác định là const int trongIBroadcastRadio
. Trong khi đó,ANTENNA_DISCONNECTED_TIMEOUT_MS
được đổi tên đếnANTENNA_STATE_CHANGE_TIMEOUT_MS
. Một hằng số liên tục mớiTUNER_TIMEOUT_MS
là đã thêm. Tất cả các thao tác chỉnh, tua và bước phải được hoàn thành trong thời gian này. - Enum
RDS
vàDeemphasis
sẽ bị xoá trong AIDL và được xác định là const int trongAmFmRegionConfig
. Tương ứng, cảfmDeemphasis
vàfmRds
trongProgramInfo
được khai báo là số nguyên, kết quả tính toán bit của cờ tương ứng. Trong khi đó,D50
vàD75
được đổi tên thànhDEEMPHASIS_D50
vàDEEMPHASIS_D75
. - Enum
ProgramInfoFlags
bị xoá trong AIDL và được định nghĩa là const int trong Đã thêmProgramInfo
kèm theo tiền tốFLAG_
. Tương ứng,infoFlags
trongProgramInfo
được khai báo là số nguyên, một kết quả tính toán bit cờ.TUNED
cũng được đổi tên thànhFLAG_TUNABLE
để mô tả rõ hơn định nghĩa mà đài có thể được điều chỉnh. - Trong
AmFmBandRange
,scanSpacing
được đổi tên thànhseekSpacing
, vìscan
được đổi tên thànhseek
trong AIDL. - Vì khái niệm hợp nhất được giới thiệu trong AIDL,
MetadataKey
vàMetadata
được xác định trong HIDL HAL không còn được sử dụng nữa. Hợp nhất AIDLMetadata
được xác định trong AIDL HAL. Mỗi giá trị enum trước đây trongMetadataKey
giờ là một trường trongMetadata
có loại chuỗi hoặc số nguyên, tuỳ thuộc vào định nghĩa.