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ẽ tạm ngừng hỗ trợ một số lớp trừu tượng phần cứng (HAL) cho cảm biến của Google. 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, có thể chúng tôi cũng sẽ ngừng hỗ trợ 1_0.

1_0 không có khái niệm phân lô. Nếu có thể, tất cả các thiết bị sử dụng 1_0 NÊN nâng cấp lên 1_3.

1_1 và 1_2 bị định nghĩa kém về khái niệm phân lô, và không được hỗ trợ nữa

Tất cả cá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 1_3, chúng tôi đã đơn giản hoá khái niệm phân lô và giới thiệu tính năng đánh thức các cảm biến.

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

Triển khai hàm hàng loạt

Ngay cả khi không triển khai tính năng phân lô (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. Nó sẽ thay thế setDelay. setDelay sẽ không được gọi nữa.

Nếu không triển khai hàng loạt, bạn có thể triển khai batch bằng cách chỉ gọi hàm setDelay hiện có bằng hàm Tham số sampling_period_ns.

Triển khai hàm flush

Ngay cả khi không triển khai phân lô, bạn vẫn phải triển khai Hàm flush.

Nếu bạn không triển khai việc phân lô, flush phải tạo một yêu cầu Sự kiện META_DATA_FLUSH_COMPLETE và trả về 0 (thành công).

Thay đổi cảm biến_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 về cảm biến

Khi xác định từng cảm biến, ngoài sensor_t thông thường trườ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,

fifoSavedEventCount: Nếu không triển khai tính năng phân lô, hãy đặt giá trị này thành 0.

fifoMaxEventCount: Nếu không triển khai phân lô, hãy đặt giá trị này thành 0

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

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

maxDelay: Đây là giá trị quan trọng và bạn cần phải đặt giá trị này theo khả năng của cảm biến và của người điều khiển 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à đang thay đổi. Đó 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 hỗ trợ. Khi tần suất thấp hơn được yêu cầu thông qua batch, các sự kiện sẽ được tạo với tần suất này thay thế. Khung hoặc ứng dụng có thể sử dụng dữ liệu này để ước tính thời điểm lô FIFO có thể đã đầy. Nếu giá trị này không được thiết lập đúng cách, CTS sẽ không đạt. Đối với các cảm biến chế độ báo cáo một lần và chế độ báo cáo đặc biệt, 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 trong micrô giây.

Các chính sách sau đây áp dụng cho period_ns, maxDelayminDelay:

  • period_ns tính bằng nano giây trong khi đó maxDelay/minDelay tính bằng micrô giây.
  • maxDelay phải luôn nằm vừa khít trong số nguyên 32 bit đã ký. Nó 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.

flags: 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ó cảm biến đánh thức.

Nếu bạn không thực hiện phân lô và chỉ chuyển từ 1.0 sang 1.3, hãy thiết lập thành:

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

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

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ừ 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ạo lô, không phụ thuộc vào giá trị của đối số hết thời gian chờ. Các trường hợp duy nhất nơi hàm batch có thể gặp lỗi là lỗi nội bộ hoặc lỗi sensor_handle, hoặc phủ định sampling_period_ns hoặc max_report_latency_ns phủ định.
  • Việc cảm biến có hỗ trợ tạo lô hay không được xác định thông qua việc cảm biến có fifoMaxEventCount lớn hơn 0. (Trong các phiên bản trước, dựa trên giá trị trả về của batch().)
  • Các cảm biến hỗ trợ hoạt động phân lô luôn nằm trong phạm vi mà chúng tôi gọi là "lô sản phẩm" mode" 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 phân theo lô, 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 là không được sử dụng nữa. DRY_RUNWAKE_UPON_FIFO_FULL là cả hai đều không được dùng nữa và sẽ không bao giờ được truyền cho hàm batch.
  • Đối số hết thời gian chờ hàng loạt hiện được gọi là Đối số max_report_latency.