Hình dưới đây thể hiện ngăn xếp cảm biến Android. Mỗi thành phần chỉ giao tiếp với các thành phần ngay trên và dưới nó, mặc dù một số các cảm biến có thể bỏ qua trung tâm cảm biến khi có. Luồng điều khiển từ chuyển ứng dụng xuống cảm biến và dữ liệu chuyển từ cảm biến đến .
SDK
Ứng dụng truy cập vào cảm biến thông qua API SDK (Bộ phát triển phần mềm). SDK này chứa các hàm để liệt kê các cảm biến có sẵn và để đăng ký một cảm biến.
Khi đăng ký một cảm biến, ứng dụng sẽ chỉ định mẫu ưu tiên của nó và các yêu cầu về độ trễ của tần suất đó.
- Ví dụ: một ứng dụng có thể đăng ký gia tốc kế mặc định, yêu cầu sự kiện ở tốc độ 100 Hz và cho phép báo cáo sự kiện chỉ trong 1 giây độ trễ.
- Ứng dụng sẽ nhận được sự kiện từ gia tốc kế với tốc độ là 100 Hz và có thể bị trễ đến 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 ứng dụng. Khi việc ghép kênh này không diễn ra ở khung, 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 gian nhất định.
- Khi ứng dụng đầu tiên đăng ký một cảm biến, khung sẽ gửi một yêu cầu vào HAL để kích hoạt cảm biến.
- Khi các ứng dụng khác đăng ký cùng một cảm biến, khung sẽ lấy
xem xét các yêu cầu của mỗi ứng dụng và gửi
cho HAL.
- Tần suất lấy mẫu sẽ là tối đa tần suất lấy mẫu được yêu cầu, nghĩa là một số các ứng dụng sẽ nhận được các sự kiện với 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ố các độ trễ được yêu cầu. Nếu một ứng dụng yêu cầu cảm biến có độ trễ báo cáo tối đa là 0, tất cả ứng dụng sẽ nhận được các sự kiện từ cảm biến này ở chế độ liên tục ngay cả khi một số sự kiện yêu cầu cảm biến có độ trễ báo cáo tối đa khác 0. Hãy xem phần Tạo lô để biết thêm chi tiết.
- Khi ứng dụng cuối cùng đăng ký với một cảm biến huỷ đăng ký khỏi cảm biến đó, khung sẽ gửi yêu cầu đến HAL để tắt cảm biến nhằm tắt nguồn tiêu thụ không cần thiết.
Tác động của tính năng ghép kênh
Nhu cầu về một lớp ghép kênh trong khung này giải thích một số thiết kế ra quyết định.
- Khi một ứng dụng yêu cầu một tần suất lấy mẫu cụ thể, thì sẽ không có đảm bảo rằng các sự kiện sẽ không diễn ra 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, ứng dụng đầu tiên cũng sẽ nhận được chúng với tốc độ nhanh.
- Việc thiếu sự đảm bảo tương tự cũng áp dụng cho độ trễ tối đa của báo cáo được yêu cầu: ứng dụng có thể nhận được các sự kiện có độ trễ ít 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 thông 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ế độ "cao độ chính xác" và chế độ " tiết kiệm pin".
- Chỉ có thể sử dụng một trong hai chế độ đó trên thiết bị Android, vì nếu không, ứng dụng có thể yêu cầu chế độ độ chính xác cao và một ứng dụng khác chế độ tiết kiệm pin; khung sẽ không có cách nào để đáp ứng cả hai . Khung này phải luôn có thể làm hài lòng tất cả khách hàng, để đây không phải là một lựa chọn.
- Không có cơ chế nào để 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 họ. Điều này đảm bảo rằng một ứng dụng không thể sửa đổi hành vi của cảm biến, phá vỡ các ứng dụng khác.
Hợp nhất cảm biến
Khung Android cung cấp phương thức triển khai mặc định cho một số công cụ tổng hợp các cảm biến. Khi con quay hồi chuyển có một gia tốc kế và từ kế trên thiết bị nhưng không có vectơ xoay, trọng lực và gia tốc tuyến tính, khung này sẽ triển khai các cảm biến đó để các ứng dụng vẫn có thể sử dụng chúng.
Phương thức 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 hoạt động triển khai có quyền truy cập và phải chạy trên SoC, nên tính năng này không giống như chính xác cũng như tiết kiệm điện năng như những cách triển khai khác. Tối đa có thể, nhà sản xuất thiết bị sẽ xác định cảm biến kết hợp của riêng họ (xoay vectơ, trọng lực và gia tốc tuyến tính cũng như các cảm biến kết 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. Nhà sản xuất thiết bị có thể cũng như yêu cầu nhà cung cấp chip cảm biến cung cấp cho họ cách triển khai.
Phương thức triển khai hợp nhất 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 mô-đun này không đạt CTS.
Tìm hiểu sâu
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). Kết quả này không phù hợp với 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 hàm
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 mã gốc
tương đương với gói android.hardware. Khung gốc gọi các proxy Binder IPC để lấy quyền truy cập vào
các dịch vụ dành riêng cho cảm biến.
IPC Binder
Các proxy Binder IPC hỗ trợ hoạt động giao tiếp vượt qua ranh giới của 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 giao diện HAL CẢM BIẾN.h và một phương thức triển khai HAL (Lớp trừu tượng phần cứng) mà chúng tôi gọi là cảm biến.cpp.
Giao diện do những người đóng góp cho Android và AOSP xác định, đồng thời Quy trình triển khai này do nhà sản xuất thiết bị cung cấp.
Giao diện HAL của cảm biến nằm trong hardware/libhardware/include/hardware
.
Xem sensors.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 của giao diện HAL
triển khai bằng cách đặt your_poll_device.common.version
. HAL (Lớp trừu tượng phần cứng) hiện có
các phiên bản giao diện được xác định trong values.h và chức năng được gắn với các phiên bản đó
của Google.
Khung Android hiện hỗ trợ các phiên bản 1.0 và 1.3, nhưng 1.0 sẽ chúng tôi sẽ sớm không hỗ trợ nữa. Tài liệu này mô tả hành vi của phiên bản 1.3. Mọi thiết bị sẽ được 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 kernel
Trình điều khiển cảm biến tương tác với các thiết bị thực. Trong một số trường hợp, HAL và trình điều khiển đều 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 nhà sản xuất chip cảm biến cung cấp trình điều khiển, nhưng họ là người viết phương thức triển khai HAL (Lớp trừu tượng phần cứng).
Trong mọi trường hợp, việc triển khai HAL và trình điều khiển nhân đều chịu trách nhiệm các nhà sản xuất phần cứng và Android không cung cấp 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 một thiết bị có thể tuỳ ý bao gồm một trung tâm cảm biến, nhằm giúp thực hiện một số phép tính cấp thấp ở mức công suất thấp trong khi SoC có thể ở trong chế độ tạm ngưng. Ví dụ: có thể thực hiện thao tác đếm số bước hoặc hợp nhất cảm biến trên những khối đó. Đây cũng là nơi thích hợp để triển khai việc phân lô cho cảm biến, thêm FIFO phần cứng cho các sự kiện cảm biến. Vui lòng xem phần Gộp nhóm các mẫu chuyển động để biết thêm thông tin.
Lưu ý: Để phát triển các tính năng mới của ContextHub hãy dùng các 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 một Bảng phát triển Hikey hoặc Hikey960.
Cách trung tâm cảm biến được cụ thể hoá phụ thuộc vào cấu trúc. Đôi khi một chip riêng biệt và đôi khi được đưa vào cùng một chip như SoC. Lưu ý quan trọng đặc điểm của trung tâm cảm biến là trung tâm này phải có đủ bộ nhớ để phân lô và tiêu thụ rất ít điện năng nhằm cho phép triển khai nguồn cảm biến Android. Một số trung tâm cảm biến chứa bộ vi điều khiển để và các trình tăng tốc phần cứng để cho phép việc tính toán điện năng rất thấp cho cảm biến pin tiêu thụ điện năng thấp.
Kiến trúc của trung tâm cảm biến và cách trung tâm cảm biến giao tiếp với cảm biến và SoC (bus I2C, xe buýt SPI, ...) không được Android chỉ định, nhưng phải nhắm đến giảm thiểu tổng mức sử dụng điện năng.
Một lựa chọn có vẻ có tác động đáng kể đến việc triển khai đơn giản là có hai đường gián đoạn đi từ trung tâm cảm biến đến SoC: một dùng cho các thời điểm gián đoạn đánh thức (cho cảm biến đánh thức) và một cho các thời điểm không đánh thức gián đoạn (đối với cảm biến không đánh thức).
Cảm biến
Đó là những chip MEM vật lý dùng để đo lường. Trong nhiều trường hợp, có một số cảm biến vật lý trên cùng một chip. Ví dụ: một số khối 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ố khối trong số đó cũng chứa một số logic để thực hiện các phép tính thông thường như như phát hiện chuyển động, phát hiện theo bước và hợp nhất 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 đến Cảm biến Android chứ không phải cảm biến vật lý, những yêu cầu đó ảnh hưởng đến lựa chọn cảm biến vật lý. Ví dụ: yêu cầu về độ chính xác đối với trò chơi vectơ quay có ảnh hưởng đến độ chính xác cần thiết đối với giá trị vật lý con quay hồi chuyển. Nhà sản xuất thiết bị có thể chọn ra các yêu cầu đối với cảm biến vật lý.