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
và 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
, maxDelay
và minDelay
:
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àmbatch
có thể gặp lỗi là lỗi nội bộ hoặc lỗisensor_handle,
hoặc phủ địnhsampling_period_ns
hoặcmax_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ủabatch()
.) - 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àmbatch
là không được sử dụng nữa.DRY_RUN
vàWAKE_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àmbatch
. - Đối số hết thời gian chờ hàng loạt hiện được gọi là
Đối số
max_report_latency
.