2016-08-30 27 views
21

Tôi cần viết kịch bản để phát hiện xem màn hình cảm ứng vật lý có được kết nối với thiết bị Android của tôi khi khởi động hay không. Tôi cố gắng để liệt kê các nội dung của thư mục /dev/input qua adb và tôi có được kết quả như sau:Android: Phát hiện theo chương trình nếu thiết bị có màn hình cảm ứng phần cứng được kết nối

[email protected]:/dev/input # ls 
event0 
event1 
event2 
event3 
event4 
mice 

Nếu tôi không nhầm, event0 xác định các màn hình cảm ứng, nhưng nó có thể nhìn thấy trong cả hai trường hợp màn hình cảm ứng được kết nối hoặc không phải.
Có cách nào để phát hiện xem màn hình cảm ứng có được kết nối với thiết bị không?

Xin cảm ơn trước.

+0

Tôi không có ý tưởng về điều này, nhưng nếu tôi đoán nó sẽ là 'chuột' vì nó có liên quan hơn (hành vi khôn ngoan) để chạm, chạm, kéo, ... vv là 'chuột' luôn hiển thị? – Yazan

+1

@Yazan Thật không may, "chuột" có thể nhìn thấy có hoặc không có màn hình cảm ứng. – Stephan

Trả lời

3

Bạn có thể đọc /proc/bus/input/devices đến get details of your existing input devices.

Tùy thuộc vào tên của phần cứng của bạn, bạn có thể làm một cái gì đó như thế và kiểm tra xem có bất kỳ đầu ra:

cat /proc/bus/input/devices | grep "Name=" | grep "Touch" 

Đây là toàn bộ sản lượng /proc/bus/input/devices:

I: Bus=0011 Vendor=0002 Product=0008 Version=2222 
N: Name="AlpsPS/2 ALPS DualPoint TouchPad" 
P: Phys=isa0060/serio1/input0 
S: Sysfs=/class/input/input2 
H: Handlers=mouse1 event2 ts1 
B: EV=f 
B: KEY=420 0 70000 0 0 0 0 0 0 0 0 
B: REL=3 
B: ABS=1000003 

[...] (blank line, next device) 

B ở phía trước là viết tắt của bitmap, N, P, S, U, H chỉ đơn giản là chữ cái đầu tiên là với giá trị tên tương ứng và tôi là ID. Trong lệnh thời trang:

  • I → @ id: id của thiết bị (struct input_id)
    • Bus → id.bustype
    • Vendor → id.vendor
    • Product → id.product
    • Version → id.phiên bản
  • N → tên của thiết bị
  • P → đường dẫn vật lý cho các thiết bị trong hệ thống thứ bậc
  • S → đường sysfs
  • U → mã nhận dạng duy nhất cho các thiết bị (nếu thiết bị có nó)
  • H → danh sách xử lý nhập được liên kết với thiết bị
  • B → bitmaps
    • PROP tính → thiết bị và quirks
    • EV → loại sự kiện được hỗ trợ bởi các thiết bị
    • KEY → phím/nút thiết bị này có
    • MSC → sự kiện linh tinh được hỗ trợ bởi các thiết bị
    • LED → đèn led có trên thiết bị
    • REL → địa chỉ tương đối
    • ABS → địa chỉ tuyệt đối

Để kiểm tra xem thiết bị được thực đính kèm, bạn có thể thử mô phỏng các sự kiện và xem nếu bạn nhận được bất kỳ lỗi:

input tap [x] [y] 

Android đi kèm với công cụ dòng lệnh đầu vào có thể mô phỏng các sự kiện nhập linh tinh.

  • đầu vào → Các công cụ dòng lệnh để gửi các sự kiện
    • tap → hành động
    • [x] → X phối hợp trên màn hình
    • [y] → Y phối hợp trên màn hình
+0

Cảm ơn bạn đã trả lời, nhưng tiếc là màn hình cảm ứng có thể nhìn thấy ngay cả khi nó không được kết nối vật lý. – Stephan

+0

@Stephan Sau đó thử gửi sự kiện tới thiết bị và xem bạn có gặp lỗi không. (Chỉ cần cập nhật câu trả lời của tôi.) – Gerald

+1

'input' đưa các sự kiện trực tiếp vào hàng đợi sự kiện nhập khung của Android - vì vậy nó sẽ không hoạt động với mục đích kiểm tra sự hiện diện của màn hình cảm ứng vật lý –

2

Tìm tên trình điều khiển cho bộ điều khiển cảm ứng của thiết bị. Sau đó, kiểm tra vị trí sysfs của nó. Sẽ có ít tệp được ánh xạ tới các biến nội bộ được điền dữ liệu từ thiết bị màn hình cảm ứng vật lý trong quá trình khởi tạo. Ví dụ, hầu hết các bộ điều khiển màn hình cảm ứng đều có phần mềm cập nhật và cung cấp cách truy vấn phiên bản hiện tại của nó.

Một trong các thiết bị của tôi sử dụng atmel_mxt_ts bộ điều khiển màn hình cảm ứng và vị trí sysfs/sys/bus/i2c/drivers/atmel_mxt_ts/1-004a/. Có một tệp fw_version trong thư mục đó. Nếu màn hình cảm ứng vật lý được kết nối, tập tin đó sẽ chứa nhãn phần sụn hiện tại. Tệp trống sẽ có nghĩa là không có màn hình cảm ứng.

Các vấn đề liên quan