ระบบย่อยไดรเวอร์ / API ใดของ Linux ที่ใช้สำหรับหน้าจอ / อุปกรณ์ตรวจสอบอย่างง่าย


9

ฉันกำลังพัฒนาระบบฝังตัวด้วยหน้าจอสัมผัส หน้าจอสัมผัสทำงานเป็นทั้งอินพุตและเอาต์พุตด้วยแป้นพิมพ์ "เสมือน" ที่ซ้อนทับเอาต์พุตกราฟิก

ฉันมีโปรแกรมควบคุมอุปกรณ์การทำงานที่อ่านข้อมูลจากเซ็นเซอร์สัมผัสและแปลได้อย่างถูกต้องที่จะกดปุ่มที่สร้างขึ้นด้วยความช่วยเหลือของคู่มือนี้ kernel.org ฉันต้องการที่จะขยายไดรเวอร์นี้เพื่อจัดการกับภาพที่ส่งออกไปยังหน้าจอ

ฉันต้องการสนับสนุนทั้ง getty และ X โดยทำซ้ำได้น้อยที่สุด ฉันกำลังเรียกใช้ตัวแปรเดเบียนที่น้อยที่สุดด้วยแพ็คเกจที่คัดสรรโดยเชอร์รี่เช่น X ที่น้อยที่สุดโปรดทราบว่าฉันไม่ได้ตั้งใจที่จะนำไดรเวอร์นี้ไปยังที่เก็บข้อมูลแม้ว่าฉันอาจทิ้งมันไว้ในที่เก็บ GitHub สาธารณะ

ภาพหน้าจอที่ส่งออกจะทำในขณะนี้ผ่านการแก้ปัญหา cringy: ตัวเลือกการบูตเพื่อบังคับให้การแสดงผลกับฮาร์ดแวร์กราฟิกฝังตัวของ CPU แม้ว่าจะไม่ได้เชื่อมต่อกับจอแสดงผลและ daemon ที่ scrapes หน้าจออย่างต่อเนื่องที่บัฟเฟอร์ พิกเซลที่กำหนดไว้เพื่อสร้างภาพแป้นพิมพ์และส่งออกไปยังหน้าจอจริง

สิ่งนี้ทำงานเป็นหลักฐานของแนวคิดพิสูจน์ว่าฉันเข้าใจภาษาที่อุปกรณ์หน้าจอคาดไว้อย่างถูกต้อง แต่เห็นได้ชัดว่าเหมาะสมที่สุด

kernel.org ยังมีคำแนะนำสำหรับไดรเวอร์อุปกรณ์ "DRM" แต่ดูเหมือนจะเป็นเรื่องที่เกินความจำเป็นอย่างยิ่งสำหรับสิ่งที่ฮาร์ดแวร์ของฉันสามารถ:

เลเยอร์ DRM ของ Linux ประกอบด้วยรหัสที่มีวัตถุประสงค์เพื่อรองรับความต้องการของอุปกรณ์กราฟิกที่ซับซ้อนโดยปกติจะประกอบด้วยท่อที่ตั้งโปรแกรมได้ซึ่งเหมาะสมกับการเร่งกราฟิก 3D

ฮาร์ดแวร์ของฉันไม่มีสิ่งใดที่คล้ายกับการเร่งความเร็วแบบ 3 มิติดังนั้นฉันจึงสรุปได้ว่านี่อาจไม่ใช่สิ่งที่ฉันต้องการ

ฉันควรใช้ระบบย่อย / API ใด ฉันคิดว่าคำศัพท์ที่ขาดหายไปหนึ่งชิ้นคือสิ่งที่ระงับการค้นหาของฉันไว้ แต่ข้อมูลเพิ่มเติมใด ๆ เกี่ยวกับวิธีการทำให้สำเร็จจะได้รับการชื่นชม

รายละเอียดฮาร์ดแวร์ (อาจไม่เกี่ยวข้อง): CPU และหน้าจอสื่อสารผ่านโปรโตคอลขนาน 8080- เอสเคซึ่ง CPU ไม่สนับสนุนโดยกำเนิดดังนั้นฉันจึงจำลองด้วย GPIOs (โดยจัดการกับการลงทะเบียนผ่าน mmap)

การส่งภาพหน้าจอที่สมบูรณ์นั้นใช้เวลาประมาณ 20 มิลลิวินาที แต่การได้รับสำเนาที่สมบูรณ์จากบัฟเฟอร์กราฟิกแบบฝังจะใช้เวลาประมาณ 180 มิลลิวินาทีดังนั้นการข้ามขั้นตอนนั้นจึงเป็นวัตถุประสงค์ที่สำคัญที่สุด ฮาร์ดแวร์หน้าจอมีหน่วยความจำSGRAMเพียงพอที่จะเก็บข้อมูลทั้งหมดในเฟรมและรองรับการเขียนพื้นที่ย่อยเป็นรูปสี่เหลี่ยมผืนผ้าดังนั้นขอให้อัพเดตเฉพาะส่วนของหน้าจอที่มีการเปลี่ยนแปลงเท่านั้น

หน้าจอไม่เฉพาะเจาะจงเกี่ยวกับช่วงเวลาของข้อมูลที่เข้ามา อินพุตเซ็นเซอร์สัมผัสถูกจัดการโดย IC ที่สร้างขึ้นโดยมีวัตถุประสงค์เพื่อสื่อสารกับ CPU ผ่านI²Cซึ่ง CPU รองรับ ไดรเวอร์ปัจจุบันใช้linux/input-polldev.hอินเตอร์เฟส CPU เป็น Broadcom BCM2835หน้าจอเป็น TFT ที่มีคอนโทรลเลอร์ Himax HX8357ในตัวตัวถอดรหัสเซ็นเซอร์หน้าจอสัมผัสเป็น ST STMPE610และมีตัวปรับระดับแรงดันไฟฟ้า (Nexperia 74LVCH245A ) ระหว่างเล่นกับ HX8357 และ BCM2835 รายละเอียดเพิ่มเติมตามคำขอ


ฉันค่อนข้างมั่นใจว่าคุณเป็นกลุ่มอาการของโรค NIH และมีการคิดค้นวงล้อใหม่โดยทั่วไปแล้วหน้าจอสัมผัสใช้โปรโตคอล HID ซึ่งค่อนข้างสนับสนุนน้อยกว่า หมายเหตุ: หน้าจอสัมผัสเป็นอุปกรณ์ป้อนข้อมูลเท่านั้น
0andriy

@ 0andriy การปรับแต่งวงล้อนั้นเป็นสิ่งที่ฉันต้องการ แต่ไม่มีไดรเวอร์ (จริง) สำหรับอุปกรณ์นี้เมื่อฉันเริ่ม ฉันไม่ได้ตระหนักถึงโปรโตคอลมาตรฐานใด ๆ สำหรับอุปกรณ์อินเทอร์เฟซของมนุษย์ แต่ถ้ามีสิ่งหนึ่งที่ฉันค่อนข้างแน่ใจว่าการซ้อนทับแบบสัมผัสที่ฉันใช้ที่นี่ไม่ได้ใช้ ฉันไม่เห็นด้วยว่า "หน้าจอสัมผัสเป็นเพียงอุปกรณ์อินพุต" เนื่องจากฉันเป็นผู้สร้างภาพที่แน่นอนที่สุด
memtha

ง่าย ๆ คุณไม่รู้จักบล็อกฮาร์ดแวร์สองอันในแพ็คเกจเดียว Touchscreen ไม่สนใจชื่อเป็นอุปกรณ์อินพุตเท่านั้น เอาต์พุตหนึ่งถูกเรียกตัวอย่างเช่นพาเนลหรือจอแสดงผล TFT
0andriy

merriam-webster.com/dictionary/touchscreenใช่มีฮาร์ดแวร์สองส่วนที่แตกต่างกัน: การซ้อนทับที่ไวต่อการสัมผัสและหน้าจอ TFT ส่วนประกอบทั้งสองนี้รวมกันเป็นรูปแบบหน้าจอสัมผัส คุณไม่สามารถบอกฉันได้ว่าฉันกำลังกำหนดหน้าจอสัมผัสผิดโดยบอกให้ฉัน "ไม่สนใจชื่อ"
memtha

คำตอบ:


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.