2012-07-11 33 views
6

Tôi đang cố chuyển đổi các sự kiện bàn phím được đọc từ/dev/input/event0 từ các giá trị được xác định trong tương đương ASCII của chúng bên trong ứng dụng được nhúng không chạy X hoặc thiết bị đầu cuối.Làm cách nào để dịch mã khóa Linux từ/dev/input/event * sang ASCII

Tôi nghĩ rằng điều này nên được thực hiện thông qua chức năng sơ đồ được định nghĩa trong Linux thay vì chỉ tạo std của riêng mình :: map <> nhưng dường như tôi không tìm được nơi tốt để bắt đầu. Hầu hết các ví dụ tôi đã tìm thấy cho đến nay giả sử tôi đang chạy với các cửa sổ X hoặc với một thiết bị đầu cuối.

+0

tìm mã nguồn của bất cứ điều gì thực hiện các thiết bị đầu cuối có thể là thú vị. Mặc dù nó có thể được chôn dưới 40 năm trừu tượng để hỗ trợ thiết bị đầu cuối di sản. –

+0

Có, được đào qua kdb-1.12.tar.gz nhưng vẫn tiếp tục mất dấu vết. –

+0

Điều này có hữu ích không? [Đăng bởi Derek @ TheDailyLinux trong Lập trình »Lấy Nguyên bản Bàn phím Đầu vào từ Thiết bị Sự kiện Nút (/dev/input/event)] (http://www.www.google.com.vn/thelinuxdaily.com/2010/05/grab-raw-keyboard-input-from -event-device-node-devinputevent /) – kbulgrien

Trả lời

1

Nhập văn bản (ngoại trừ trường hợp rất đơn giản của bàn phím truyền thống của Hoa Kỳ và chuẩn ASCII 7 bit) là một trường vô cùng phức tạp. Tôi rất khuyên bạn nên làm điều này bằng cách sử dụng một máy khách X, nơi bạn có thể tận dụng tất cả các phương thức nhập hiện có.

Nhưng nếu bạn phải, và bạn hài lòng với một loại bàn phím và một ngôn ngữ, bạn làm điều này bằng cách diễn giải các sự kiện giống như một thiết bị đầu cuối. Kiểm tra defintion trong /usr/include/linux/input.h để biết các giá trị. Theo dõi vị trí của các phím Shift và Ctrl (các phím không phải ASCII như Alt, Fn, v.v ... tùy thuộc vào bạn để diễn giải, tất nhiên) và phát ra byte tương ứng trên sự kiện quan trọng. Có thể bạn sẽ muốn triển khai một cơ sở tự động lặp lại nếu các giá trị mặc định không hoạt động cho ứng dụng của bạn.

Nhưng về cơ bản: không. Đây là một vấn đề khó khăn hơn nhiều so với bạn dường như nhận ra.