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_0
và 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ó 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
, maxDelay
và minDelay
:
-
period_ns
bằng nano giây trong khimaxDelay
/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ăngbatch
có thể không thành công là lỗi nội bộ hoặcsensor_handle,
bị lỗi hoặcsampling_period_ns
âm hoặcmax_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ủabatch()
.) - 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àmbatch
không được sử dụng nữa.DRY_RUN
vàWAKE_UPON_FIFO_FULL
đều không được dùng nữa và sẽ không bao giờ được chuyển cho hàmbatch
. - Đối số thời gian chờ hàng loạt bây giờ được gọi là đối số
max_report_latency
.