Truyền phát HAL trên đài

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ả:
  • HAL HIDL: Khi phiên chỉnh mới được mở, phiên cũ phải được kết thúc.
  • AIDL HAL: Vì không có phiên điều chỉnh nào, nên bạn chỉ cần đặt lệnh gọi lại bộ dò. Nếu có, thì bạn không nên đặt lệnh gọi lại cũ.
HIDL 2.0 openSession(ITunerCallback callback) tạo (Result result, ITunerSession session)
AIDL void setTunerCallback(in ITunerCallback callback)
Nội dung mô tả:
  • HAL HIDL: Việc đóng phiên bộ dò không được không thành công và chỉ được cấp một lần.
  • AIDL HAL: Không có bộ dò và chỉ cần huỷ đặt lệnh gọi lại bộ dò.
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ặc status (trong AIDL) ngay lập tức. Nếu Result hoặc statusOK, lệnh gọi lại bộ dò Phải gọi tuneFailed hoặc currentProgramInfoChanged 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ỗi chunk 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 trong IBroadcastRadio. Trong khi đó, ANTENNA_DISCONNECTED_TIMEOUT_MS được đổi tên đến ANTENNA_STATE_CHANGE_TIMEOUT_MS. Một hằng số liên tục mới TUNER_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 RDSDeemphasis sẽ bị xoá trong AIDL và được xác định là const int trong AmFmRegionConfig. Tương ứng, cả fmDeemphasisfmRds trong ProgramInfo được khai báo là số nguyên, kết quả tính toán bit của cờ tương ứng. Trong khi đó, D50D75 được đổi tên thành DEEMPHASIS_D50DEEMPHASIS_D75.
  • Enum ProgramInfoFlags bị xoá trong AIDL và được định nghĩa là const int trong Đã thêm ProgramInfo kèm theo tiền tố FLAG_. Tương ứng, infoFlags trong ProgramInfo đượ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ành FLAG_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ành seekSpacing, vì scan được đổi tên thành seek trong AIDL.
  • Vì khái niệm hợp nhất được giới thiệu trong AIDL, MetadataKeyMetadata được xác định trong HIDL HAL không còn được sử dụng nữa. Hợp nhất AIDL Metadata được xác định trong AIDL HAL. Mỗi giá trị enum trước đây trong MetadataKey giờ là một trường trong Metadata có loại chuỗi hoặc số nguyên, tuỳ thuộc vào định nghĩa.