Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.
Trang này được dịch bởi Cloud Translation API.
Switch to English

Đầu vào

Biểu tượng HAL đầu vào Android

Về danh nghĩa, hệ thống con đầu vào của Android bao gồm một đường dẫn sự kiện đi qua nhiều lớp của hệ thống.

Đường ống đầu vào

Ở lớp thấp nhất, thiết bị đầu vào vật lý tạo ra các tín hiệu mô tả sự thay đổi trạng thái như phím bấm và các điểm tiếp xúc chạm. Phần mềm cơ sở của thiết bị mã hóa và truyền các tín hiệu này theo một số cách, chẳng hạn như bằng cách gửi báo cáo USB HID đến hệ thống hoặc bằng cách tạo ra các ngắt trên một bus I2C.

Các tín hiệu sau đó được giải mã bởi trình điều khiển thiết bị trong nhân Linux. Nhân Linux cung cấp trình điều khiển cho nhiều thiết bị ngoại vi tiêu chuẩn, đặc biệt là những thiết bị tuân theo giao thức HID. Tuy nhiên, OEM thường phải cung cấp trình điều khiển tùy chỉnh cho các thiết bị nhúng được tích hợp chặt chẽ vào hệ thống ở mức thấp, chẳng hạn như màn hình cảm ứng.

Trình điều khiển thiết bị đầu vào chịu trách nhiệm dịch các tín hiệu dành riêng cho thiết bị sang định dạng sự kiện đầu vào tiêu chuẩn, bằng giao thức đầu vào Linux. Giao thức đầu vào Linux xác định một tập hợp chuẩn các loại sự kiện và mã trong tệp tiêu đề hạt nhân linux/input.h . Bằng cách này, các thành phần bên ngoài hạt nhân không cần quan tâm đến các chi tiết như mã quét vật lý, cách sử dụng HID, thông báo I2C, chân GPIO và những thứ tương tự.

Tiếp theo, thành phần Android EventHub đọc các sự kiện đầu vào từ hạt nhân bằng cách mở trình điều khiển evdev liên kết với mỗi thiết bị đầu vào. Sau đó, thành phần Android InputReader giải mã các sự kiện đầu vào theo lớp thiết bị và tạo ra một luồng các sự kiện đầu vào Android. Là một phần của quá trình này, mã sự kiện của giao thức đầu vào Linux được dịch sang mã sự kiện Android theo cấu hình thiết bị đầu vào, tệp bố cục bàn phím và các bảng ánh xạ khác nhau.

Cuối cùng, InputReader gửi các sự kiện đầu vào đến InputDispatcher để chuyển tiếp chúng đến cửa sổ thích hợp.

Điểm kiểm soát

Có một số giai đoạn trong đường ống đầu vào có tác dụng kiểm soát hành vi của thiết bị đầu vào.

Cấu hình trình điều khiển và chương trình cơ sở

Trình điều khiển thiết bị đầu vào thường xuyên định cấu hình hoạt động của thiết bị đầu vào bằng cách thiết lập các thông số trong thanh ghi hoặc thậm chí tải lên chính chương trình cơ sở. Điều này đặc biệt xảy ra đối với các thiết bị nhúng như màn hình cảm ứng, nơi một phần lớn của quá trình hiệu chuẩn liên quan đến việc điều chỉnh các thông số này hoặc sửa phần sụn để cung cấp độ chính xác và khả năng phản hồi mong muốn cũng như loại bỏ tiếng ồn.

Các tùy chọn cấu hình trình điều khiển thường được chỉ định dưới dạng tham số mô-đun trong gói hỗ trợ bo mạch nhân (BSP) để cùng một trình điều khiển có thể hỗ trợ nhiều triển khai phần cứng khác nhau.

Tài liệu này cố gắng mô tả cấu hình trình điều khiển hoặc phần sụn, nhưng nó cung cấp hướng dẫn về hiệu chuẩn thiết bị nói chung.

Thuộc tính cấu hình bảng

Gói hỗ trợ bo mạch nhân (BSP) có thể xuất các thuộc tính cấu hình bo mạch thông qua SysFS được sử dụng bởi thành phần Android InputReader, chẳng hạn như vị trí của các phím ảo trên màn hình cảm ứng.

Tham khảo phần lớp thiết bị để biết chi tiết về cách các thiết bị khác nhau sử dụng thuộc tính cấu hình bo mạch.

Lớp phủ tài nguyên

Một số hành vi đầu vào được định cấu hình theo cách lớp phủ tài nguyên trong config.xml chẳng hạn như hoạt động của công tắc nắp.

Đây là vài ví dụ:

  • config_lidKeyboardAccessibility : Chỉ định tác dụng của công tắc nắp đối với việc bàn phím phần cứng có thể truy cập được hay bị ẩn.

  • config_lidNavigationAccessibility : Chỉ định tác động của công tắc nắp đối với việc trackpad có thể truy cập được hay bị ẩn.

  • config_longPressOnPowerBehavior : Chỉ định điều gì sẽ xảy ra khi người dùng nhấn giữ nút nguồn.

  • config_lidOpenRotation : Chỉ định tác động của công tắc nắp lên hướng màn hình.

Tham khảo tài liệu trong frameworks/base/core/res/res/values/config.xml để biết chi tiết về từng tùy chọn cấu hình.

Bản đồ chính

Bản đồ chính được sử dụng bởi các thành phần Android EventHubInputReader để định cấu hình ánh xạ từ mã sự kiện Linux sang mã sự kiện Android cho các phím, nút cần điều khiển và trục cần điều khiển. Ánh xạ có thể phụ thuộc vào thiết bị hoặc ngôn ngữ.

Tham khảo phần lớp thiết bị để biết chi tiết về cách các thiết bị khác nhau sử dụng bản đồ chính.

Tệp cấu hình thiết bị đầu vào

Tệp cấu hình thiết bị đầu vào được các thành phần Android EventHubInputReader sử dụng để định cấu hình các đặc điểm đặc biệt của thiết bị, chẳng hạn như cách báo cáo thông tin về kích thước cảm ứng.

Tham khảo phần lớp thiết bị để biết chi tiết về cách các thiết bị khác nhau sử dụng bản đồ cấu hình thiết bị đầu vào.

Hiểu các sử dụng HID và mã sự kiện

Thường có một số số nhận dạng khác nhau được sử dụng để chỉ bất kỳ phím nhất định nào trên bàn phím, nút trên bộ điều khiển trò chơi, trục cần điều khiển hoặc điều khiển khác. Mối quan hệ giữa các số nhận dạng này không phải lúc nào cũng giống nhau: chúng phụ thuộc vào một tập hợp các bảng ánh xạ, một số là cố định và một số khác nhau dựa trên đặc điểm của thiết bị, trình điều khiển thiết bị, ngôn ngữ hiện tại, cấu hình hệ thống, sở thích của người dùng và các yếu tố khác.

Mã quét vật lý

Mã quét vật lý là số nhận dạng dành riêng cho thiết bị được liên kết với mỗi phím, nút hoặc điều khiển khác. Vì mã quét vật lý thường thay đổi từ thiết bị này sang thiết bị khác, phần sụn hoặc trình điều khiển thiết bị có trách nhiệm ánh xạ chúng tới các mã nhận dạng tiêu chuẩn như HID Usages hoặc mã khóa Linux.

Mã quét chủ yếu được quan tâm cho bàn phím. Các thiết bị khác thường giao tiếp ở mức thấp bằng cách sử dụng chân GPIO, thông báo I2C hoặc các phương tiện khác. Do đó, các lớp trên của ngăn xếp phần mềm dựa vào trình điều khiển thiết bị để hiểu những gì đang diễn ra.

Sử dụng HID

Việc sử dụng HID là số nhận dạng tiêu chuẩn được sử dụng để báo cáo trạng thái của điều khiển như phím bàn phím, trục cần điều khiển, nút chuột hoặc điểm tiếp xúc chạm. Hầu hết các thiết bị đầu vào USB và Bluetooth đều tuân theo đặc điểm kỹ thuật HID, cho phép hệ thống giao tiếp với chúng một cách thống nhất.

Android Framework dựa vào trình điều khiển HID của nhân Linux để dịch mã sử dụng HID thành mã khóa Linux và các số nhận dạng khác. Do đó cách sử dụng HID chủ yếu được các nhà sản xuất thiết bị ngoại vi quan tâm.

Mã khóa Linux

Mã khóa Linux là mã định danh chuẩn cho một khóa hoặc nút. Mã khóa Linux được xác định trong tệp tiêu đề linux/input.h bằng các hằng số bắt đầu bằng tiền tố KEY_ hoặc BTN_ . Trình điều khiển đầu vào hạt nhân Linux chịu trách nhiệm dịch mã quét vật lý, tập quán HID và các tín hiệu dành riêng cho thiết bị khác thành mã khóa Linux và cung cấp thông tin về chúng như một phần của sự kiện EV_KEY .

API Android đôi khi đề cập đến mã khóa Linux được liên kết với một khóa làm "mã quét" của nó. Điều này không chính xác về mặt kỹ thuật nhưng nó giúp phân biệt mã khóa Linux với mã khóa Android trong API.

Mã trục tương đối hoặc tuyệt đối của Linux

Mã trục tương đối hoặc trục tuyệt đối trong Linux là mã định danh tiêu chuẩn để báo cáo chuyển động tương đối hoặc vị trí tuyệt đối dọc theo trục, chẳng hạn như chuyển động tương đối của chuột dọc theo trục X của nó hoặc vị trí tuyệt đối của cần điều khiển dọc theo trục X của nó. Mã trục Linux được định nghĩa trong tệp tiêu đề linux/input.h bằng các hằng số bắt đầu bằng tiền tố REL_ hoặc ABS_ . Linux kernel driver đầu vào chịu trách nhiệm dịch Usages HID và các tín hiệu điện thoại cụ thể khác vào Linux trục mã và cung cấp các thông tin về họ như một phần của EV_RELEV_ABS sự kiện.

Mã chuyển mạch Linux

Mã công tắc Linux là mã định danh tiêu chuẩn để báo cáo trạng thái của công tắc trên thiết bị, chẳng hạn như công tắc nắp. Mã chuyển mạch Linux được xác định trong tệp tiêu đề linux/input.h bằng cách sử dụng các hằng số bắt đầu bằng tiền tố SW_ . Trình điều khiển đầu vào hạt nhân Linux báo cáo trạng thái chuyển đổi thay đổi dưới dạng sự kiện EV_SW .

Các ứng dụng Android thường không nhận các sự kiện từ công tắc, nhưng hệ thống có thể sử dụng chúng trong nội bộ để kiểm soát các chức năng cụ thể của thiết bị.

Mã khóa Android

Mã khóa Android là mã nhận dạng tiêu chuẩn được xác định trong API Android để chỉ ra một khóa cụ thể, chẳng hạn như 'HOME'. Mã khóa Android được định nghĩa bởi lớp android.view.KeyEvent là các hằng số bắt đầu bằng tiền tố KEYCODE_ .

Bố cục khóa chỉ định cách mã khóa Linux được ánh xạ tới mã khóa Android. Các bố cục phím khác nhau có thể được sử dụng tùy thuộc vào kiểu bàn phím, ngôn ngữ, quốc gia, bố cục hoặc các chức năng đặc biệt.

Các tổ hợp mã khóa Android được chuyển đổi thành mã ký tự bằng cách sử dụng bản đồ ký tự khóa cụ thể của vùng miền và thiết bị. Ví dụ: khi các phím được xác định là KEYCODE_SHIFTKEYCODE_A được nhấn cùng nhau, hệ thống sẽ tìm kiếm sự kết hợp trong bản đồ ký tự phím và tìm ký tự viết hoa 'A', sau đó được chèn vào tiện ích văn bản hiện được tiêu điểm.

Mã trục Android

Mã trục Android là mã nhận dạng tiêu chuẩn được xác định trong API Android để chỉ ra trục thiết bị cụ thể. Mã trục Android được định nghĩa bởi lớp android.view.MotionEvent là các hằng số bắt đầu bằng tiền tố AXIS_ .

Bố cục khóa chỉ định cách Mã trục Linux được ánh xạ tới mã trục Android. Các bố cục phím khác nhau có thể được sử dụng tùy thuộc vào kiểu thiết bị, ngôn ngữ, quốc gia, bố cục hoặc các chức năng đặc biệt.

Trạng thái Meta Android

Trạng thái meta Android là số nhận dạng tiêu chuẩn được xác định trong API Android để cho biết phím bổ trợ nào được nhấn. Các trạng thái meta của Android được định nghĩa bởi lớp android.view.KeyEvent là các hằng số bắt đầu bằng tiền tố META_ .

Trạng thái meta hiện tại được xác định bởi thành phần Android InputReader sẽ giám sát khi các phím bổ trợ như KEYCODE_SHIFT_LEFT được nhấn / nhả và đặt / đặt lại cờ trạng thái meta thích hợp.

Mối quan hệ giữa các khóa bổ trợ và trạng thái meta được mã hóa cứng nhưng bố cục khóa có thể thay đổi cách ánh xạ của chính các khóa bổ trợ, từ đó ảnh hưởng đến các trạng thái meta.

Trạng thái nút Android

Trạng thái nút Android là số nhận dạng tiêu chuẩn được xác định trong API Android để cho biết nút nào (trên chuột hoặc bút cảm ứng) được nhấn. Trạng thái nút Android được định nghĩa bởi lớp android.view.MotionEvent là các hằng số bắt đầu bằng tiền tố BUTTON_ .

Trạng thái nút hiện tại được xác định bởi thành phần Android InputReader sẽ giám sát khi các nút (trên chuột hoặc bút cảm ứng) được nhấn / nhả và đặt / đặt lại cờ trạng thái nút thích hợp.

Mối quan hệ giữa các nút và trạng thái nút được mã hóa cứng.

Đọc thêm

  1. Mã sự kiện đầu vào Linux
  2. Giao thức cảm ứng đa điểm Linux
  3. Trình điều khiển đầu vào Linux
  4. Phản hồi lực lượng Linux
  5. Thông tin HID, bao gồm cả bảng sử dụng HID