- สร้างเดโม จอภาพ e-ink 3.5fps บน Kindle Paperwhite 3 ด้วยวิธีจับภาพหน้าจอ macOS แล้วส่งไปแสดงผล
- บน Kindle มี เซิร์ฟเวอร์ listener ที่เขียนด้วย Go คอยรับภาพที่พอร์ต 8000 และใช้ยูทิลิตีในตัว
eips วาด JPG ที่ได้รับลงบนหน้าจอ
- บน macOS ใช้
screencapture, ImageMagick และ netcat ร่วมกันเพื่อจัดการการจับภาพหน้าจอ แปลงภาพ และส่งผ่าน usbnet
- โครงสร้างนี้ส่ง JPG ทั้งภาพทุกเฟรม จึงมี การส่งข้อมูลที่สิ้นเปลือง มากบนหน้าจอที่เปลี่ยนแปลงน้อย เช่น โปรแกรมแก้ไขข้อความ และยังมีช่องให้ปรับปรุงอีกมาก
- แสดงให้เห็นว่าสามารถทดลองทำจอเสริม e-ink ได้อย่างรวดเร็วด้วยการผสมผสานเครื่องมือที่มีอยู่ โดยไม่ต้องมี codec แยกต่างหากหรือทำ VNC เอง
การเจลเบรกและการได้ root shell
- ขั้นตอนแรกคือเจลเบรก Kindle เพื่อเข้าถึง root shell ให้ได้ไม่ว่าจะด้วยวิธีใด
- สามารถหาข้อมูลที่เกี่ยวข้องได้จาก mobileread.com และอ้างอิงคำแนะนำใน LanguageBreak thread ได้
- ผู้ทำไม่ได้ทำตามคำแนะนำของ LanguageBreak ตรงตัว แต่ใช้ GitHub repository ของ LanguageBreak ให้เป็นประโยชน์ในการดีบัก
- เงื่อนไขที่สำคัญกว่าวิธีเจลเบรกเองคือการได้ root shell บน Kindle
เซิร์ฟเวอร์ listener บน Kindle และการแสดงผลด้วย eips
- ฝั่ง Kindle เขียนโปรแกรม Go เพื่อรับไฟล์ที่พอร์ต 8000
- listener จะบันทึก JPG ที่ได้รับ แล้วเรียกใช้
eips ซึ่งเป็นยูทิลิตีแสดงผลหน้าจอในตัวของ Kindle
- ตัวอย่างลำดับการทำงาน:
- โปรแกรม Go รับไฟล์ JPG
- บันทึกไว้ที่
/tmp/img.jpg
- วาดบนหน้าจอด้วยคำสั่งต่อไปนี้
eips -g /tmp/img.jpg -w gc16 -x 128 -y 0
- คำสั่งนี้แสดงภาพแบบ partial update
- full update ให้ผลลัพธ์ไม่ดี และสามารถตรวจความหมายของแฟล็ก
eips ได้จาก eips wiki
- ก่อนเฟรมแรก สามารถล้างหน้าจอด้วย
eips -c ได้
- ซอร์สโค้ด Go สูญหายไปแล้ว แต่เป็นโค้ดเรียบง่ายไม่ถึง 30 บรรทัด
การจับภาพหน้าจอ macOS และการแปลงภาพ
- บน macOS ใช้
screencapture จับภาพหน้าจอซ้ำ ๆ แล้วบันทึกเป็นไฟล์ PNG
- ภาพที่จับได้ถูกนำไป หมุน ปรับขนาด และแปลงเป็น grayscale ด้วย ImageMagick ให้เหมาะกับหน้าจอ Kindle
- JPG ที่แปลงแล้วถูกส่งไปยังเซิร์ฟเวอร์ listener บน Kindle ผ่าน usbnet ด้วย
netcat
/usr/sbin/screencapture -C -x /tmp/orig.png
convert /tmp/orig.png -rotate 270 -resize '810x1448!' -type GrayScale -depth 8 -colors 256 /tmp/gray.jpg
cat /tmp/gray.jpg | nc -w 0 192.168.15.244 8000
screencapture -C -x จับภาพหน้าจอเป็น /tmp/orig.png
convert หมุนภาพ 270 องศา แล้วปรับขนาดเป็น 810x1448 จากนั้นแปลงเป็น JPG แบบ grayscale 8 บิต 256 สี
nc ส่ง /tmp/gray.jpg ที่แปลงแล้วไปยัง 192.168.15.244:8000
- ต้องปรับความละเอียดให้ตรงกับอุปกรณ์ Kindle ที่ใช้ และพอร์ตต้องตรงกับการตั้งค่าเซิร์ฟเวอร์ listener บน Kindle
ข้อจำกัดด้านประสิทธิภาพและการใช้งาน
- การทำงานนี้เป็นการแฮ็กที่ทำขึ้นอย่างรวดเร็วเพื่อความสนุกเมื่อคืนก่อน และทั้ง ประสิทธิภาพกับการใช้งาน ยังมีพื้นที่ให้ปรับปรุงมาก
- วิธีที่ส่งไฟล์ JPG ทั้งภาพในทุกเฟรมสิ้นเปลืองมาก
- ปริมาณความเปลี่ยนแปลงระหว่างเฟรมต่อเนื่องส่วนใหญ่น่าจะมีน้อยและบีบอัดได้ง่าย
- โดยเฉพาะในการใช้งานที่เปลี่ยนเพียงบางส่วนของหน้าจอ เช่น โปรแกรมแก้ไขข้อความ คุณสมบัตินี้ยิ่งเห็นชัดขึ้นได้
- มองว่าน่าจะปรับปรุงได้อย่างรวดเร็วด้วยเครื่องมือที่มีอยู่แล้ว โดยไม่ต้องสร้าง codec อย่าง h.264 หรือโปรโตคอลอย่าง VNC ขึ้นมาใหม่
แหล่งอ้างอิง
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ถ้าแชร์วิธีทำ และโพสต์ไว้ในที่ที่ไม่ใช่ แพลตฟอร์มสำหรับข้อความสั้น น่าจะน่าสนใจกว่านี้มาก
แก้ไข: https://gist.github.com/adtac/eb639d3c707b55a28f0ee9a420aa7e...
เผื่อคนที่ยังไม่รู้ ถ้าตอบกลับทวีตด้วย
@threadreaderapp unrollคุณจะได้เอกสารที่ถูกจัดเรียงใหม่ บอตจะตอบกลับโดยตรงเฉพาะกับคุณหลังจากคลี่เธรดเสร็จผมเคยทำ อินพุต HDMI ในโปรเจกต์คล้าย ๆ กัน
https://hackaday.com/2021/01/08/old-kindle-shows-hdmi-video-...
เลยทำ OK Monitor ขึ้นมา: https://barwap.com/projects/okmonitor/
ผมไม่คิดว่ามันจะคุ้มเชิงธุรกิจ ยอดขายน่าจะอยู่ระดับหลายพันถึงหลายหมื่นดอลลาร์ ไม่ว่าจะตั้งอัตรากำไรอย่างไรก็คงยากที่จะคืนเวลาและต้นทุนที่ลงไปได้ แต่ในโปรเจกต์งานอดิเรก ผมเคยเห็นบางครั้งมีคนทำแบบนั้นเพื่อสร้างผลกระทบ
ผมอยากได้จออีอิงก์ไร้สายสำหรับคอมพิวเตอร์ และถ้าเป็นไปได้อุดมคติคือมาในรูป ดองเกิล USB-C ที่รับทั้งภาพและไฟในตัวเดียว HDMI + ไฟผ่าน USB ก็โอเค
ช่วงไม่กี่วันที่ผ่านมา ผมทดสอบ Android + Kaleido3 เป็นอุปกรณ์ใช้งานทั่วไป และลองใช้ Termux-X11 ด้วย
Kaleido3 ใช้ได้ค่อนข้างดี ด้วย waveform รุ่นใหม่และอัลกอริทึม dithering ที่ถูกต้อง ทำให้ดูวิดีโอได้โดยต้องยอมแลกแค่บางส่วน และเฟรมเรตก็สูง การเขียนโค้ดก็ทำได้สบาย โดยคอมไพเลอร์และอินเทอร์พรีเตอร์มาจาก Termux
เมื่อใช้ Termux-X11 คุณสามารถรันเดสก์ท็อป Linux แบบเนทีฟบนอุปกรณ์ Android ได้ ดังนั้นแทนที่จะต้องใช้อีอิงก์เป็นส่วนหนึ่งของอุปกรณ์มอนิเตอร์ ก็ใช้มันเป็นหน้าจอคอมพิวเตอร์แบบแอ็กทีฟที่ฝังอยู่ในแท็บเล็ตได้โดยตรง
ถ้าจะ เจลเบรก Kindle ควรเริ่มจากฟอรัม
mobilereadจออีอิงก์ จะมีโอกาสถูกลงสักวันไหม? ดูเหมือนสิทธิบัตรพื้นฐาน ๆ น่าจะถึงเวลาหมดอายุแล้ว
มันเป็นปัจจัยต้นทุนที่ใหญ่ที่สุดในปฏิทินของผม และแทบจะเป็นตัวบังคับระดับราคาไปเลย: https://shop.invisible-computers.com/products/invisible-cale...
งานส่วนใหญ่ที่ E Ink ทำสามารถแทนด้วย LCD ได้ และเมื่อมันแพงกว่า LCD จึงมีที่ที่อยากใช้ไม่มาก
เรื่อง “สิทธิบัตร” ใกล้เคียงทฤษฎีสมคบคิดที่ไม่มีหลักฐานชัดเจนมากกว่า E Ink มีผลิตภัณฑ์คู่แข่ง อยู่ด้วย เช่น จอ DES/Display Electronic Slurry ถ้า E Ink corp ขูดรีดราคาอยู่จริง GoodDisplay ก็คงยึดตลาดไปแล้ว
พูดให้แม่นคือ การที่มีสิทธิบัตร E Ink อยู่ไม่ใช่ทฤษฎีสมคบคิด บางฉบับหมดอายุแล้ว และ E Ink corp ก็ยังจดสิทธิบัตรใหม่ ๆ ต่อเนื่องตามการสร้างนวัตกรรม สิทธิบัตร LCD ก็มีมหาศาลเช่นกัน ส่วนที่เป็นทฤษฎีสมคบคิดคือข้ออ้างว่าสิทธิบัตรทำให้เกิดการขึ้นราคาและราคาสูง จึงขัดขวางการแพร่หลายของเทคโนโลยี
ทำไมต้องเจลเบรกด้วย? ใช้เบราว์เซอร์ใน Kindle สตรีมภาพหน้าจอ จากเดสก์ท็อปก็ได้ไม่ใช่หรือ
เบราว์เซอร์ Kindle แค่ตาม Kindle store หรือ Goodreads ให้ทันก็แทบแย่แล้ว แต่ถ้าพิสูจน์ได้ว่าตรงกันข้ามก็คงดี เพราะจะทำให้ทำบน Kindle รุ่นใหม่ ๆ แบบเดิม ๆ ได้ง่ายกว่ามาก
เนื้อหาบน GitHub ระบุว่า “น่าเสียดายที่ ซอร์สโค้ด Go หายไปแล้ว”
ถ้ามันเรียบง่ายขนาดนั้น กลับแปลกกว่าที่ไม่ได้เขียนใหม่ทันทีแล้วเพิ่มลง GitHub
ถ้าอยากทำแบบนี้ให้ง่าย ใช้แอป Superdisplay บน Boox reader ก็พอ
ยังไม่ได้ตอบคำถามสำคัญที่สุด: คุ้มค่าที่จะลองทำไหม?
ในรูปแบบปัจจุบัน เฟรมเรตดี แต่ latency แย่มาก ดังนั้นประสบการณ์การพิมพ์จึงไม่ดี แต่ก็มีการใช้งานอีกมากที่ไม่ต้องพิมพ์
แม้ในกรณีที่ feedback การพิมพ์ latency ต่ำมีความสำคัญ เช่น หน้าต่างแชต ก็สามารถวางกล่องข้อความสำหรับพิมพ์ไว้บนจอ LCD แล้วแสดงเฉพาะประวัติแชตที่ส่วนใหญ่เป็นแบบนิ่งบน Kindle ได้ ยังต้องทำงานเพิ่มเพื่อไปให้ถึงจุดนั้น แต่ตอนนี้ถือเป็นจุดเริ่มต้นที่ดี