Ngừng sử dụng phiên bản HAL

Trong bản phát hành L của Android, chúng tôi sẽ ngừng hỗ trợ một số phiên bản HAL cảm biến. Các phiên bản duy nhất được hỗ trợ là SENSORS_DEVICE_API_VERSION_1_0 SENSORS_DEVICE_API_VERSION_1_3.

Trong các bản phát hành tiếp theo, chúng tôi cũng có thể ngừng hỗ trợ phiên bản 1_0.

1_0 không có khái niệm về tính năng xử lý hàng loạt. Nếu có thể, tất cả thiết bị sử dụng 1_0 PHẢI cập nhật lên 1_3.

1_1 và 1_2 bị định nghĩa không rõ ràng về khái niệm xử lý hàng loạt và không còn được hỗ trợ nữa

Tất cả thiết bị hiện đang sử dụng 1_1 hoặc 1_2 PHẢI nâng cấp lên 1_3.

Trong phiên bản 1_3, chúng tôi đã đơn giản hoá khái niệm về tính năng xử lý hàng loạt và giới thiệu cảm biến đánh thức.

Để nâng cấp lên phiên bản 1_3, hãy làm theo các thay đổi được liệt kê bên dưới.

Triển khai hàm xử lý hàng loạt

Ngay cả khi không triển khai tính năng xử lý hàng loạt (phần cứng của bạn không có FIFO), bạn vẫn phải triển khai hàm batch. batch được dùng để đặt khoảng thời gian lấy mẫu và độ trễ báo cáo tối đa cho một cảm biến nhất định. Phương thức này thay thế setDelay. setDelay sẽ không được gọi nữa.

Nếu không triển khai tính năng xử lý hàng loạt, bạn có thể triển khai batch bằng cách chỉ cần gọi hàm setDelay hiện có với tham số sampling_period_ns được cung cấp.

Triển khai hàm xả

Ngay cả khi không triển khai tính năng xử lý hàng loạt, bạn vẫn phải triển khai hàm flush.

Nếu bạn không triển khai tính năng xử lý hàng loạt, flush phải tạo một sự kiện META_DATA_FLUSH_COMPLETE và trả về 0 (thành công).

Thay đổi sensors_poll_device_t.common.version

your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3

Thêm các trường mới vào định nghĩa của cảm biến

Khi xác định từng cảm biến, ngoài các trường sensor_t thông thường:

.name =       "My magnetic field Sensor",
.vendor =     "My company",
.version
=    1,
.handle =     mag_handle,
.type =       SENSOR_TYPE_MAGNETIC_FIELD,
.maxRange =   200.0f,
.resolution = CONVERT_M,
.power =      5.0f,
.minDelay =
 16667,

bạn cũng phải đặt các trường mới, được xác định trong khoảng từ 1_0 đến 1_3:

.fifoReservedEventCount = 0,
.fifoMaxEventCount =   0,
.stringType =         0,
.requiredPermission = 0,
.maxDelay =      200000
.flags =
SENSOR_FLAG_CONTINUOUS_MODE,

fifoReservedEventCount: Nếu không triển khai tính năng xử lý hàng loạt, hãy đặt giá trị này thành 0.

fifoMaxEventCount: Nếu không triển khai tính năng xử lý hàng loạt, hãy đặt giá trị này thành 0

stringType: Đặt thành 0 cho tất cả cảm biến Android chính thức (những cảm biến được xác định trong sensors.h), vì khung sẽ ghi đè giá trị này. Đối với các cảm biến không chính thức, hãy xem sensor_t để biết thông tin chi tiết về cách thiết lập.

requiredPermission: Đây là quyền mà các ứng dụng bắt buộc phải có để truy cập vào cảm biến của bạn. Thông thường, bạn có thể đặt giá trị này thành 0 cho tất cả cảm biến, nhưng cảm biến có loại HEART_RATE phải đặt giá trị này thành SENSOR_PERMISSION_BODY_SENSORS.

maxDelay: Giá trị này rất quan trọng và bạn cần đặt giá trị này theo khả năng của cảm biến và trình điều khiển của cảm biến.

Giá trị này chỉ được xác định cho các cảm biến liên tục và thay đổi. Đây là độ trễ giữa hai sự kiện cảm biến tương ứng với tần số thấp nhất mà cảm biến này hỗ trợ. Khi tần số thấp hơn được yêu cầu thông qua hàm batch, các sự kiện sẽ được tạo ở tần số này. Khung hoặc ứng dụng có thể sử dụng thông tin này để ước tính thời điểm hàng đợi FIFO theo lô có thể đầy. Nếu bạn không đặt giá trị này đúng cách, CTS sẽ không thành công. Đối với cảm biến chế độ báo cáo đặc biệt và một lần, hãy đặt maxDelay thành 0.

Đối với cảm biến liên tục, hãy đặt giá trị này thành khoảng thời gian lấy mẫu tối đa được phép tính bằng micro giây.

Sau đây là các nội dung áp dụng cho period_ns, maxDelayminDelay:

  • period_ns tính bằng nano giây còn maxDelay/minDelay tính bằng micrô giây.
  • maxDelay phải luôn nằm trong một số nguyên 32 bit đã ký. Tệp này chỉ được khai báo là 64 bit trên kiến trúc 64 bit vì lý do tương thích nhị phân.

cờ: Trường này xác định chế độ báo cáo của cảm biến và liệu cảm biến có phải là cảm biến đánh thức hay không.

Nếu bạn không triển khai tính năng xử lý hàng loạt và chỉ chuyển từ phiên bản 1.0 sang 1.3, hãy đặt giá trị này thành:

SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE cho cảm biến một lần

SENSOR_FLAG_CONTINUOUS_MODE đối với cảm biến liên tục, SENSOR_FLAG_ON_CHANGE_MODE đối với cảm biến thay đổi, ngoại trừ cảm biến gần, SENSOR_FLAG_SPECIAL_REPORTING_MODE đối với cảm biến có chế độ báo cáo đặc biệt, ngoại trừ trình phát hiện độ nghiêng.

SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE cho cảm biến độ gần và cảm biến trình phát hiện độ nghiêng chính thức của Android.

Lưu ý khi nâng cấp từ phiên bản 1_1 hoặc 1_2

  • Hàm batch hiện gần như luôn thành công, ngay cả đối với các cảm biến không hỗ trợ tính năng xử lý hàng loạt, độc lập với giá trị của đối số thời gian chờ. Các trường hợp duy nhất mà hàm batch có thể không thành công là lỗi nội bộ hoặc sensor_handle, không hợp lệ hoặc sampling_period_ns âm hoặc max_report_latency_ns âm.
  • Việc cảm biến có hỗ trợ tính năng xử lý hàng loạt hay không được xác định bằng việc cảm biến có fifoMaxEventCount lớn hơn 0 hay không. (Trong các phiên bản trước, giá trị này dựa trên giá trị trả về của batch().)
  • Các cảm biến hỗ trợ tính năng xử lý hàng loạt luôn ở chế độ mà chúng tôi gọi là "chế độ hàng loạt" trong các phiên bản trước: ngay cả khi tham số max_report_latency_ns là 0, cảm biến vẫn phải được xử lý hàng loạt, nghĩa là các sự kiện phải được lưu trữ trong FIFO khi SoC chuyển sang chế độ tạm ngưng.
  • Tham số flags của hàm batch không còn được sử dụng nữa. DRY_RUNWAKE_UPON_FIFO_FULL đều không được dùng nữa và sẽ không bao giờ được truyền vào hàm batch.
  • Đối số thời gian chờ hàng loạt hiện được gọi là đối số max_report_latency.