Hình dưới đây thể hiện ngăn xếp cảm biến của Android. Mỗi thành phần chỉ giao tiếp với các thành phần trực tiếp bên trên và bên dưới nó, mặc dù một số cảm biến có thể bỏ qua trung tâm cảm biến khi nó hiện diện. Điều khiển truyền từ ứng dụng xuống cảm biến và dữ liệu truyền từ cảm biến đến ứng dụng.
Hình 1. Các lớp của ngăn xếp cảm biến Android và chủ sở hữu tương ứng của chúng
SDK
Các ứng dụng truy cập cảm biến thông qua API SDK cảm biến (Bộ phát triển phần mềm) . SDK chứa các chức năng liệt kê các cảm biến có sẵn và đăng ký cảm biến.
Khi đăng ký một cảm biến, ứng dụng sẽ chỉ định tần suất lấy mẫu ưa thích và các yêu cầu về độ trễ của nó.
- Ví dụ: một ứng dụng có thể đăng ký gia tốc kế mặc định, yêu cầu các sự kiện ở tần số 100Hz và cho phép các sự kiện được báo cáo với độ trễ 1 giây.
- Ứng dụng sẽ nhận các sự kiện từ gia tốc kế ở tốc độ ít nhất là 100Hz và có thể bị trễ tới 1 giây.
Xem tài liệu dành cho nhà phát triển để biết thêm thông tin về SDK.
Khung
Khung này chịu trách nhiệm liên kết một số ứng dụng với HAL . Bản thân HAL là một khách hàng. Nếu việc ghép kênh này không diễn ra ở cấp khung, thì chỉ một ứng dụng duy nhất có thể truy cập vào từng cảm biến tại bất kỳ thời điểm nào.
- Khi ứng dụng đầu tiên đăng ký cảm biến, khung sẽ gửi yêu cầu tới HAL để kích hoạt cảm biến.
- Khi các ứng dụng bổ sung đăng ký vào cùng một cảm biến, khung sẽ tính đến các yêu cầu từ mỗi ứng dụng và gửi các tham số được yêu cầu cập nhật tới HAL.
- Tần suất lấy mẫu sẽ là tần số lấy mẫu tối đa được yêu cầu, nghĩa là một số ứng dụng sẽ nhận được các sự kiện ở tần suất cao hơn tần suất mà chúng yêu cầu.
- Độ trễ báo cáo tối đa sẽ là độ trễ tối thiểu trong số những độ trễ được yêu cầu. Nếu một ứng dụng yêu cầu một cảm biến có độ trễ báo cáo tối đa bằng 0 thì tất cả các ứng dụng sẽ nhận được sự kiện từ cảm biến này ở chế độ liên tục ngay cả khi một số ứng dụng yêu cầu cảm biến có độ trễ báo cáo tối đa khác 0. Xem Lô để biết thêm chi tiết.
- Khi ứng dụng cuối cùng được đăng ký với một cảm biến hủy đăng ký khỏi nó, các khung sẽ gửi yêu cầu đến HAL để tắt cảm biến để năng lượng không bị tiêu thụ một cách không cần thiết.
Tác động của ghép kênh
Nhu cầu về lớp ghép kênh trong khung này giải thích một số quyết định thiết kế.
- Khi ứng dụng yêu cầu tần suất lấy mẫu cụ thể, không có gì đảm bảo rằng các sự kiện sẽ không đến với tốc độ nhanh hơn. Nếu một ứng dụng khác yêu cầu cùng một cảm biến với tốc độ nhanh hơn thì ứng dụng đầu tiên cũng sẽ nhận được chúng với tốc độ nhanh hơn.
- Sự thiếu đảm bảo tương tự cũng áp dụng cho độ trễ báo cáo tối đa được yêu cầu: ứng dụng có thể nhận được các sự kiện có độ trễ thấp hơn nhiều so với yêu cầu.
- Ngoài tần suất lấy mẫu và độ trễ báo cáo tối đa, các ứng dụng không thể định cấu hình các tham số cảm biến.
- Ví dụ: hãy tưởng tượng một cảm biến vật lý có thể hoạt động ở cả chế độ “độ chính xác cao” và “năng lượng thấp”.
- Chỉ một trong hai chế độ đó có thể được sử dụng trên thiết bị Android, vì nếu không, ứng dụng có thể yêu cầu chế độ có độ chính xác cao và một chế độ khác là chế độ năng lượng thấp; sẽ không có cách nào để khung này đáp ứng được cả hai ứng dụng. Khung này phải luôn có khả năng làm hài lòng tất cả khách hàng của mình, vì vậy đây không phải là một lựa chọn.
- Không có cơ chế gửi dữ liệu từ ứng dụng xuống cảm biến hoặc trình điều khiển của chúng. Điều này đảm bảo một ứng dụng không thể sửa đổi hoạt động của cảm biến, làm hỏng các ứng dụng khác.
Cảm biến nhiệt hạch
Khung Android cung cấp cách triển khai mặc định cho một số cảm biến tổng hợp. Khi có con quay hồi chuyển , gia tốc kế và từ kế trên thiết bị nhưng không có vectơ quay , cảm biến trọng lực và gia tốc tuyến tính , khung sẽ triển khai các cảm biến đó để các ứng dụng vẫn có thể sử dụng chúng.
Triển khai mặc định không có quyền truy cập vào tất cả dữ liệu mà các triển khai khác có quyền truy cập và nó phải chạy trên SoC, do đó, nó không chính xác cũng như không tiết kiệm điện như các triển khai khác. Càng nhiều càng tốt, các nhà sản xuất thiết bị nên xác định các cảm biến hợp nhất của riêng họ (vectơ quay, trọng lực và gia tốc tuyến tính, cũng như các cảm biến tổng hợp mới hơn như vectơ xoay trò chơi ) thay vì dựa vào cách triển khai mặc định này. Các nhà sản xuất thiết bị cũng có thể yêu cầu các nhà cung cấp chip cảm biến cung cấp cho họ bản triển khai.
Việc triển khai kết hợp cảm biến mặc định không được duy trì và có thể khiến các thiết bị dựa vào nó không hoạt động CTS.
Dưới mui xe
Phần này được cung cấp dưới dạng thông tin cơ bản cho những người duy trì mã khung Dự án nguồn mở Android (AOSP). Nó không liên quan đến các nhà sản xuất phần cứng.
JNI
Khung này sử dụng Giao diện gốc Java (JNI) được liên kết với android.hardware và nằm trong thư mục frameworks/base/core/jni/
. Mã này gọi mã gốc cấp thấp hơn để có quyền truy cập vào phần cứng cảm biến.
Khung gốc
Khung gốc được xác định trong frameworks/native/
và cung cấp một khung gốc tương đương với gói android.hardware . Khung gốc gọi proxy Binder IPC để có quyền truy cập vào các dịch vụ dành riêng cho cảm biến.
Chất kết dính IPC
Proxy Binder IPC tạo điều kiện giao tiếp vượt qua ranh giới quy trình.
HAL
API Lớp trừu tượng phần cứng cảm biến (HAL) là giao diện giữa trình điều khiển phần cứng và khung Android. Nó bao gồm một cảm biến giao diện HAL.h và một triển khai HAL mà chúng tôi gọi là cảm biến.cpp.
Giao diện được xác định bởi những người đóng góp Android và AOSP và việc triển khai được cung cấp bởi nhà sản xuất thiết bị.
Giao diện HAL của cảm biến nằm ở hardware/libhardware/include/hardware
. Xem cảm biến.h để biết thêm chi tiết.
Chu kỳ phát hành
Việc triển khai HAL chỉ định phiên bản nào của giao diện HAL mà nó triển khai bằng cách đặt your_poll_device.common.version
. Các phiên bản giao diện HAL hiện có được xác định trong cảm biến.h và chức năng được gắn với các phiên bản đó.
Khung Android hiện hỗ trợ các phiên bản 1.0 và 1.3, nhưng 1.0 sẽ sớm không được hỗ trợ nữa. Tài liệu này mô tả hoạt động của phiên bản 1.3 mà tất cả các thiết bị nên nâng cấp lên. Để biết chi tiết về cách nâng cấp lên 1.3, hãy xem phần ngừng sử dụng phiên bản HAL .
Trình điều khiển hạt nhân
Trình điều khiển cảm biến tương tác với các thiết bị vật lý. Trong một số trường hợp, việc triển khai HAL và trình điều khiển là cùng một thực thể phần mềm. Trong các trường hợp khác, nhà tích hợp phần cứng yêu cầu các nhà sản xuất chip cảm biến cung cấp trình điều khiển, nhưng họ lại là những người viết triển khai HAL.
Trong mọi trường hợp, việc triển khai HAL và trình điều khiển hạt nhân là trách nhiệm của nhà sản xuất phần cứng và Android không cung cấp các phương pháp ưu tiên để viết chúng.
Trung tâm cảm biến
Ngăn xếp cảm biến của thiết bị có thể tùy chọn bao gồm một trung tâm cảm biến, hữu ích để thực hiện một số tính toán cấp thấp ở mức điện năng thấp trong khi SoC có thể ở chế độ tạm dừng. Ví dụ: việc đếm bước hoặc phản ứng tổng hợp cảm biến có thể được thực hiện trên các chip đó. Đây cũng là nơi tốt để triển khai việc phân nhóm cảm biến, thêm FIFO phần cứng cho các sự kiện cảm biến. Xem Lô để biết thêm thông tin.
Lưu ý: Để phát triển các tính năng ContextHub mới sử dụng cảm biến hoặc đèn LED mới, bạn cũng có thể sử dụng Neonkey SensorHub được kết nối với bảng phát triển Hikey hoặc Hikey960.
Cách thức hiện thực hóa trung tâm cảm biến phụ thuộc vào kiến trúc. Nó đôi khi là một con chip riêng biệt và đôi khi được bao gồm trên cùng một con chip với SoC. Đặc điểm quan trọng của trung tâm cảm biến là nó phải chứa đủ bộ nhớ để phân khối và tiêu thụ rất ít năng lượng để có thể triển khai các cảm biến Android tiêu thụ điện năng thấp. Một số trung tâm cảm biến chứa một bộ vi điều khiển để tính toán chung và các bộ tăng tốc phần cứng để cho phép tính toán mức năng lượng rất thấp cho các cảm biến năng lượng thấp.
Cách kiến trúc của trung tâm cảm biến cũng như cách nó giao tiếp với các cảm biến và SoC (bus I2C, bus SPI, ...) không được Android chỉ định nhưng nó sẽ nhằm mục đích giảm thiểu mức sử dụng năng lượng tổng thể.
Một tùy chọn dường như có tác động đáng kể đến tính đơn giản khi triển khai là có hai đường ngắt đi từ trung tâm cảm biến đến SoC: một cho các ngắt đánh thức (dành cho cảm biến đánh thức) và một cho các ngắt không đánh thức (đối với cảm biến không đánh thức).
Cảm biến
Đó là những con chip MEM vật lý thực hiện các phép đo. Trong nhiều trường hợp, có nhiều cảm biến vật lý trên cùng một con chip. Ví dụ: một số chip bao gồm gia tốc kế, con quay hồi chuyển và từ kế. (Những con chip như vậy thường được gọi là chip 9 trục, vì mỗi cảm biến cung cấp dữ liệu trên 3 trục.)
Một số chip đó còn chứa một số logic để thực hiện các tính toán thông thường như phát hiện chuyển động, phát hiện bước đi và phản ứng tổng hợp cảm biến 9 trục.
Mặc dù các yêu cầu cũng như đề xuất về sức mạnh và độ chính xác của CDD nhắm vào cảm biến Android chứ không phải cảm biến vật lý, nhưng những yêu cầu đó sẽ tác động đến việc lựa chọn cảm biến vật lý. Ví dụ: yêu cầu về độ chính xác trên vectơ xoay trò chơi có liên quan đến độ chính xác cần thiết cho con quay hồi chuyển vật lý. Tùy thuộc vào nhà sản xuất thiết bị để đưa ra các yêu cầu đối với cảm biến vật lý.