2 คะแนน โดย GN⁺ 2024-08-05 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • สร้างเดโม จอภาพ 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 ความคิดเห็น

 
GN⁺ 2024-08-05
ความคิดเห็นจาก Hacker News
  • ถ้าแชร์วิธีทำ และโพสต์ไว้ในที่ที่ไม่ใช่ แพลตฟอร์มสำหรับข้อความสั้น น่าจะน่าสนใจกว่านี้มาก

    • ตอนนี้กำลังรีบเขียน GitHub gist อยู่ และจะเอาลิงก์มาแปะที่นี่ภายในไม่กี่นาที
      แก้ไข: https://gist.github.com/adtac/eb639d3c707b55a28f0ee9a420aa7e...
    • ถ้าเป็นผมคงพูดแรงกว่านี้ แต่เขาพูดได้ค่อนข้างสร้างสรรค์ทีเดียว ผมเกลียดการโพสต์ บทความยาวบน X/Twitter จริง ๆ
      เผื่อคนที่ยังไม่รู้ ถ้าตอบกลับทวีตด้วย @threadreaderapp unroll คุณจะได้เอกสารที่ถูกจัดเรียงใหม่ บอตจะตอบกลับโดยตรงเฉพาะกับคุณหลังจากคลี่เธรดเสร็จ
    • น่าสนใจที่มอง HN เป็น แพลตฟอร์มสำหรับข้อความสั้น
  • ผมเคยทำ อินพุต 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

  • จออีอิงก์ จะมีโอกาสถูกลงสักวันไหม? ดูเหมือนสิทธิบัตรพื้นฐาน ๆ น่าจะถึงเวลาหมดอายุแล้ว

    • ผลิตภัณฑ์คู่แข่งก็ยังค่อนข้างแพงอยู่ดี จอกระดาษอิเล็กทรอนิกส์ที่ผมใช้กับปฏิทินดิจิทัล เท่าที่รู้ไม่ใช่ของ E Ink แต่ถ้าซื้อแยกชิ้นก็ประมาณ 50 ยูโร: https://www.waveshare.com/7.5inch-e-paper-hat.htm
      มันเป็นปัจจัยต้นทุนที่ใหญ่ที่สุดในปฏิทินของผม และแทบจะเป็นตัวบังคับระดับราคาไปเลย: https://shop.invisible-computers.com/products/invisible-cale...
    • https://news.ycombinator.com/item?id=26143779
    • สิทธิบัตรแทบไม่เกี่ยว เหตุผลที่ E Ink แพงคือมันเป็น สินค้านิชที่มีสเกลเล็ก หน้าจอ LCD ผลิตกันเป็นพัน ๆ ล้านชิ้นต่อไตรมาส และเป็นไปได้สูงว่าแต่ละคนมีอุปกรณ์ที่มี LCD อยู่หลายเครื่อง
      งานส่วนใหญ่ที่ E Ink ทำสามารถแทนด้วย LCD ได้ และเมื่อมันแพงกว่า LCD จึงมีที่ที่อยากใช้ไม่มาก
      เรื่อง “สิทธิบัตร” ใกล้เคียงทฤษฎีสมคบคิดที่ไม่มีหลักฐานชัดเจนมากกว่า E Ink มีผลิตภัณฑ์คู่แข่ง อยู่ด้วย เช่น จอ DES/Display Electronic Slurry ถ้า E Ink corp ขูดรีดราคาอยู่จริง GoodDisplay ก็คงยึดตลาดไปแล้ว
      พูดให้แม่นคือ การที่มีสิทธิบัตร E Ink อยู่ไม่ใช่ทฤษฎีสมคบคิด บางฉบับหมดอายุแล้ว และ E Ink corp ก็ยังจดสิทธิบัตรใหม่ ๆ ต่อเนื่องตามการสร้างนวัตกรรม สิทธิบัตร LCD ก็มีมหาศาลเช่นกัน ส่วนที่เป็นทฤษฎีสมคบคิดคือข้ออ้างว่าสิทธิบัตรทำให้เกิดการขึ้นราคาและราคาสูง จึงขัดขวางการแพร่หลายของเทคโนโลยี
  • ทำไมต้องเจลเบรกด้วย? ใช้เบราว์เซอร์ใน Kindle สตรีมภาพหน้าจอ จากเดสก์ท็อปก็ได้ไม่ใช่หรือ

    • แบบนั้นง่ายกว่ามากจริง ๆ แต่ทุกเฟรมต้องผ่านเครือข่าย → DOM → หน่วยความจำของแอปเบราว์เซอร์ → framebuffer เลยสงสัยว่าเบราว์เซอร์จะแรงพอรับเฟรมเรตที่ใช้งานได้หรือไม่
      เบราว์เซอร์ Kindle แค่ตาม Kindle store หรือ Goodreads ให้ทันก็แทบแย่แล้ว แต่ถ้าพิสูจน์ได้ว่าตรงกันข้ามก็คงดี เพราะจะทำให้ทำบน Kindle รุ่นใหม่ ๆ แบบเดิม ๆ ได้ง่ายกว่ามาก
  • เนื้อหาบน GitHub ระบุว่า “น่าเสียดายที่ ซอร์สโค้ด Go หายไปแล้ว”

    • ต่อด้วยว่า “แต่ก็เรียบง่ายพอสมควร และ น้อยกว่า 30 บรรทัด
      ถ้ามันเรียบง่ายขนาดนั้น กลับแปลกกว่าที่ไม่ได้เขียนใหม่ทันทีแล้วเพิ่มลง GitHub
  • ถ้าอยากทำแบบนี้ให้ง่าย ใช้แอป Superdisplay บน Boox reader ก็พอ

  • ยังไม่ได้ตอบคำถามสำคัญที่สุด: คุ้มค่าที่จะลองทำไหม?

    • ตอนนี้ยังเร็วเกินไปที่จะตัดสิน มันไม่เหมาะเป็นจอหลัก แต่ยอดเยี่ยมในฐานะจอเสริม
      ในรูปแบบปัจจุบัน เฟรมเรตดี แต่ latency แย่มาก ดังนั้นประสบการณ์การพิมพ์จึงไม่ดี แต่ก็มีการใช้งานอีกมากที่ไม่ต้องพิมพ์
      แม้ในกรณีที่ feedback การพิมพ์ latency ต่ำมีความสำคัญ เช่น หน้าต่างแชต ก็สามารถวางกล่องข้อความสำหรับพิมพ์ไว้บนจอ LCD แล้วแสดงเฉพาะประวัติแชตที่ส่วนใหญ่เป็นแบบนิ่งบน Kindle ได้ ยังต้องทำงานเพิ่มเพื่อไปให้ถึงจุดนั้น แต่ตอนนี้ถือเป็นจุดเริ่มต้นที่ดี