Trạng thái nguồn SoC
Các trạng thái nguồn của hệ thống trên chip (SoC) là: bật, không hoạt động và tạm dừng. “Bật” là khi SoC đang chạy. “Không hoạt động” là chế độ năng lượng trung bình trong đó SoC được cấp nguồn nhưng không thực hiện bất kỳ tác vụ nào. “Tạm dừng” là chế độ năng lượng thấp trong đó SoC không được cấp nguồn. Mức tiêu thụ điện năng của thiết bị ở chế độ này thường ít hơn 100 lần so với ở chế độ “Bật”.
Cảm biến không đánh thức
Cảm biến không đánh thức là cảm biến không ngăn SoC chuyển sang chế độ tạm dừng và không đánh thức SoC để báo cáo dữ liệu. Đặc biệt, người lái xe không được phép giữ khóa đánh thức. Trách nhiệm của các ứng dụng là giữ khóa chế độ thức một phần nếu chúng muốn nhận các sự kiện từ cảm biến không đánh thức trong khi màn hình tắt. Trong khi SoC ở chế độ tạm dừng, các cảm biến phải tiếp tục hoạt động và tạo ra các sự kiện được đưa vào FIFO phần cứng. (Xem Lô để biết thêm chi tiết.) Các sự kiện trong FIFO được gửi đến ứng dụng khi SoC thức dậy. Nếu FIFO quá nhỏ để lưu trữ tất cả các sự kiện thì các sự kiện cũ sẽ bị mất; dữ liệu cũ nhất bị loại bỏ để chứa dữ liệu mới nhất. Trong trường hợp đặc biệt khi FIFO không tồn tại, tất cả các sự kiện được tạo trong khi SoC ở chế độ tạm dừng sẽ bị mất. Một ngoại lệ là sự kiện mới nhất từ mỗi cảm biến khi thay đổi: sự kiện cuối cùng phải được lưu bên ngoài FIFO để không thể bị mất.
Ngay khi SoC thoát khỏi chế độ tạm dừng, tất cả các sự kiện từ FIFO sẽ được báo cáo và hoạt động sẽ tiếp tục như bình thường.
Các ứng dụng sử dụng cảm biến không đánh thức phải giữ khóa chế độ thức để đảm bảo hệ thống không bị tạm dừng, hủy đăng ký cảm biến khi chúng không cần hoặc dự kiến sẽ mất các sự kiện khi SoC ở chế độ tạm dừng.
Cảm biến đánh thức
Ngược lại với cảm biến không đánh thức, cảm biến đánh thức đảm bảo rằng dữ liệu của chúng được phân phối độc lập với trạng thái của SoC. Trong khi SoC hoạt động, các cảm biến đánh thức hoạt động giống như các cảm biến không đánh thức. Khi SoC ở chế độ ngủ, các cảm biến đánh thức phải đánh thức SoC để đưa ra các sự kiện. Họ vẫn phải để SoC chuyển sang chế độ tạm dừng nhưng cũng phải đánh thức nó khi có sự kiện cần được báo cáo. Nghĩa là, cảm biến phải đánh thức SoC và phân phối các sự kiện trước khi hết độ trễ báo cáo tối đa hoặc FIFO phần cứng đã đầy. Xem Lô để biết thêm chi tiết.
Để đảm bảo các ứng dụng có thời gian nhận sự kiện trước khi SoC chuyển sang chế độ ngủ, trình điều khiển phải giữ "khóa đánh thức hết thời gian chờ" trong 200 mili giây mỗi lần một sự kiện được báo cáo. Nghĩa là, SoC không được phép quay lại chế độ ngủ trong vòng 200 mili giây sau khi gián đoạn đánh thức. Yêu cầu này sẽ biến mất trong bản phát hành Android trong tương lai và chúng tôi cần khóa chế độ thức hết thời gian chờ này cho đến lúc đó.
Làm cách nào để xác định cảm biến đánh thức và không đánh thức?
Đối với KitKat, cảm biến là cảm biến đánh thức hay không đánh thức được quyết định bởi loại cảm biến: hầu hết đều là cảm biến không đánh thức, ngoại trừ cảm biến tiệm cận và máy dò chuyển động quan trọng .
Bắt đầu bằng L, việc cảm biến nhất định có phải là cảm biến đánh thức hay không được chỉ định bằng cờ trong định nghĩa cảm biến. Hầu hết các cảm biến có thể được xác định bằng các cặp biến thể đánh thức và không đánh thức của cùng một cảm biến, trong trường hợp đó, chúng phải hoạt động như hai cảm biến độc lập, không tương tác với nhau. Xem Tương tác để biết thêm chi tiết.
Trừ khi có quy định khác trong định nghĩa loại cảm biến, bạn nên triển khai một cảm biến đánh thức và một cảm biến không đánh thức cho mỗi loại cảm biến được liệt kê trong Loại cảm biến . Trong mỗi định nghĩa loại cảm biến, hãy xem cảm biến nào (đánh thức hoặc không đánh thức) sẽ được trả về bởi SensorManager.getDefaultSensor(sensorType)
. Đây là cảm biến mà hầu hết các ứng dụng sẽ sử dụng.