Phiên bản HAL không được dùng nữa

Trong phiên bản 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 được hỗ trợ duy nhất là SENSORS_DEVICE_API_VERSION_1_0SENSORS_DEVICE_API_VERSION_1_3 .

Trong các bản phát hành tiếp theo, chúng tôi cũng có khả năng bỏ hỗ trợ cho 1_0.

1_0 không có khái niệm về 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 phối 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 hóa khái niệm phân lô và giới thiệu cảm biến đánh thức.

Để 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 chức năng hàng loạt

Ngay cả khi bạn không triển khai hàng loạt (phần cứng của bạn không có FIFO), bạn phải triển khai chức năng batch . batch được sử 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ó thay thế setDelay . setDelay sẽ không được gọi nữa.

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

Thực hiện chức năng xả

Ngay cả khi bạn không thực hiện theo lô, bạn phải thực hiện chức năng flush .

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

Thay đổi sensor_poll_device_t.common.version của bạn

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ảm biến của bạ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 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 hàng loạt, hãy đặt giá trị này thành 0.

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

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

RequiredPermission : Đây là quyền mà các ứng dụng sẽ được yêu cầu phải có để truy cập vào cảm biến của bạn. Bạn thường có thể đặt giá trị này thành 0 cho tất cả các cảm biến của mình, nhưng các 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 quan trọng và bạn sẽ cần đặt nó theo khả năng của cảm biến và trình điều khiển của nó.

Giá trị này chỉ được xác định cho các cảm biến liên tục và thay đổi. Nó 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 các 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 ra ở tần số này. Nó có thể được sử dụng bởi khuôn khổ hoặc các ứng dụng để ước tính thời điểm FIFO của lô có thể đầy. Nếu giá trị này không được đặt đúng, CTS sẽ không thành công. Đối với cảm biến chế độ báo cáo một lần và đặc biệt, hãy đặt maxDelay thành 0.

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

Những điều sau đây được áp dụng cho period_ns , maxDelayminDelay :

  • period_ns bằng nano giây trong khi maxDelay / minDelay tính bằng micro giây.
  • maxDelay phải luôn nằm trong số nguyên có dấu 32 bit. Nó được khai báo là 64-bit trên kiến ​​trúc 64-bit chỉ 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 theo lô và chỉ đang chuyển từ 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 chụp

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

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

Các lưu ý khi nâng cấp từ 1_1 hoặc 1_2

  • Chức năng batch giờ đây 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 theo lô, không phụ thuộc vào giá trị của đối số thời gian chờ. Các trường hợp duy nhất mà chức năng batch có thể không thành công là lỗi nội bộ hoặc sensor_handle, bị lỗi hoặc sampling_period_ns âm hoặc max_report_latency_ns âm.
  • Việc một cảm biến có hỗ trợ theo lô hay không được xác định bằng cách liệu nó có một fifoMaxEventCount lớn hơn 0. (Trong các phiên bản trước, nó dựa trên giá trị trả về của batch() .)
  • Các cảm biến hỗ trợ theo đợt luôn ở chế độ mà chúng tôi gọi là “chế độ theo đợ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 theo đợt, có 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 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 chuyển cho hàm batch .
  • Đối số thời gian chờ hàng loạt bây giờ được gọi là đối số max_report_latency .