- Rotary Phone Dial Linux Kernel Driver เป็นเคอร์เนลโมดูลที่แปลงโทรศัพท์แบบหมุนรุ่นเก่าให้กลายเป็น อุปกรณ์ป้อนข้อมูล evdev ของ Linux
- โปรเจ็กต์นี้มีทั้งไดรเวอร์ตัวอย่างแบบเรียบง่ายและสภาพแวดล้อมพัฒนาที่อิงบนเครื่องเสมือน จึงมีประโยชน์มากสำหรับ การศึกษาและการทดสอบ
- สามารถพัฒนาและทดสอบได้แม้ไม่มีฮาร์ดแวร์จริง และรองรับ การจำลอง GPIO
- รองรับการตั้งค่า key mapping ได้แทบทั้งหมด และยังรองรับ รูปแบบ pulse encoding ที่หลากหลาย ของแต่ละประเทศ
- เนื่องจากเป็นเคอร์เนลโมดูลมาตรฐาน จึงสามารถ ขยายและผสานรวม เข้ากับระบบ Linux ได้อย่างง่ายดาย
ภาพรวมของ Rotary Phone Dial Linux Kernel Driver
- โปรเจ็กต์นี้เป็น เคอร์เนลโมดูล ที่แปลง แป้นหมุนของโทรศัพท์แบบหมุนรุ่นเก่า ให้เป็นอุปกรณ์ป้อนข้อมูลมาตรฐานของระบบ Linux (เช่น แป้นตัวเลข)
- เหมาะสำหรับผู้ที่อาจสนใจใช้งานดังต่อไปนี้
- ผู้ที่ต้องการป้อนตัวเลขผ่านการหมุนหมายเลขแบบช้า ๆ
- ผู้ใช้ที่ต้องการนำ โทรศัพท์อนาล็อก รุ่นเก่ามาสู่ยุคดิจิทัล
- ผู้สอน ที่ต้องการไดรเวอร์เคอร์เนลตัวอย่างและสภาพแวดล้อมพัฒนา/ทดสอบเสมือนโดยไม่ต้องมีฮาร์ดแวร์จริง
- หรือเพื่อการทดลองสร้างสรรค์อื่น ๆ
วิธีการต่อวงจร
- แป้นหมุนโดยพื้นฐานประกอบด้วยสวิตช์ 2 ตัวคือ BUSY (สถานะเปิดวงจร) และ PULSE (สถานะปิดวงจร)
- สวิตช์ทั้งสองนี้จะถูกต่อเข้ากับ ขา GPIO ของระบบที่รัน Embedded Linux ได้ พร้อมตัวต้านทาน pull-up
- เมื่อหมุนแป้น BUSY จะเปลี่ยนเป็นสถานะปิดวงจร และระหว่างที่แป้นหมุนกลับสู่ตำแหน่งเดิม สวิตช์ PULSE จะสลับเปิด/ปิดซ้ำ ๆ
- การต่อสายและ การจัดวางขา อาจแตกต่างกันไปตามประเทศหรือผู้ผลิต จึงแนะนำให้ทดสอบการตอบสนองของสวิตช์ด้วยมัลติมิเตอร์
- duty cycle ของสัญญาณพัลส์ (เวลาเปิด/ปิด) และ วิธีการถอดรหัส ก็แตกต่างกันไปตามแต่ละประเทศและผู้ผลิต
- ตัวอย่าง: เยอรมนีมีช่วงเปิด 62ms และช่วงปิด 38ms ต่อหนึ่งพัลส์
- โดยทั่วไป 1 ถึง 9 พัลส์จะหมายถึง 1 ถึง 9 และ 10 พัลส์จะหมายถึง 0 (มีข้อยกเว้น เช่น สวีเดน)
- หากไม่แน่ใจ ควรตรวจสอบ ฉลาก บนแป้นหมุนหรือทำการทดสอบเพิ่มเติม
วิธีใช้งาน
- ไดรเวอร์นี้เป็น out-of-tree kernel module มาตรฐาน
- ขั้นตอนโดยสรุปคือ
- เพิ่มโหนด
rotary-dial ลงใน device tree และแมป pulse-gpios กับ busy-gpios ไปยังขาจริง
- หากจำเป็น ให้เปลี่ยน keycode map ด้วยพร็อพเพอร์ตี
linux,keycodes
- กำหนดพาธซอร์สเคอร์เนล (
KDIR) เป็นตัวแปรสภาพแวดล้อม จากนั้น build ติดตั้ง และโหลดโมดูล
- เมื่อโหลดเคอร์เนลโมดูลแล้ว ระบบจะสร้างอุปกรณ์ป้อนข้อมูลขึ้นมาและทำงานเป็นแป้นตัวเลข
- สามารถใช้เครื่องมือ evemu เพื่อตรวจสอบคุณสมบัติของอุปกรณ์ป้อนข้อมูลและมอนิเตอร์เหตุการณ์จากแป้นหมุนได้
เครื่องเสมือน (VM) สำหรับการพัฒนาและทดสอบ
- มีการจัดเตรียมสภาพแวดล้อมเครื่องเสมือนสำหรับการพัฒนาไดรเวอร์และ การทดสอบแบบ end-to-end
- VM นี้ใช้ gpio-sim เพื่อจำลอง GPIO ของ busy/pulse และแพตช์เข้ากับ devicetree
- สามารถควบคุม GPIO จาก user space เพื่อสร้างสถานการณ์ทดสอบได้
- สามารถ build และรัน VM ได้หลังเปิดใช้งาน Nix package manager และความสามารถของ flakes
- ภายใน VM จะล็อกอินเข้าสู่ development shell ให้ทันที
- หลัง build ไดรเวอร์แล้ว ยังรองรับการโหลด/ถอดโหลดโมดูล
- สามารถใช้เครื่องมือ
rotary_dialer เพื่อจำลองจำนวนพัลส์ที่ต้องการและทดสอบการป้อนข้อมูลจากแป้นหมุนได้
- (เช่น ในสภาพแวดล้อมการเข้ารหัสแบบสวีเดน 3 พัลส์จะถูกตีความเป็นเลข 2)
การทดสอบ
- ไดรเวอร์นี้มาพร้อมกับ ชุดทดสอบที่ครอบคลุม
- ในสภาพแวดล้อม VM สามารถรันเคสอัตโนมัติด้วย
make test
- ตรวจสอบได้หลากหลายสถานการณ์ เช่น การทำงานของอุปกรณ์ป้อนข้อมูล การปล่อย keycode ที่ถูกต้องเมื่อหมุนตัวเลข และการจัดการอินพุตที่ไม่ถูกต้อง
การเข้าสู่เมนไลน์
- ผู้พัฒนากล่าวแบบขำ ๆ ว่าตนมองอนาคตของแป้นหมุนโทรศัพท์ในแง่ บวก แต่ Linus Torvalds อาจไม่ได้เห็นด้วย
1 ความคิดเห็น
ความคิดเห็นบน Hacker News