2 คะแนน โดย GN⁺ 2024-09-18 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Elgato Game Capture HD60 S ที่ไม่ถูกตรวจพบผ่าน USB กลับมาจับภาพ HDMI และทำ passthrough ได้ตามปกติหลังเปลี่ยนชิป IC ภาคจ่ายไฟ 3 ตัวที่ดึงรางไฟลง
  • ใช้กล้องถ่ายภาพความร้อน การวัดแรงดัน และการค้นหา SMD marking เพื่อระบุเรกูเลเตอร์ Fitipower FP6373A 2 ตัว และอินเวอร์เตอร์แรงดัน TI TPS60403DBV โดยราคาชิ้นส่วนตาม LCSC ต่ำกว่า 1 ดอลลาร์
  • ฟังก์ชันจับภาพกลับมาใช้งานได้แล้ว แต่ ไฟ LED สถานะ สีขาว 7 ดวงและสีแดง 7 ดวงยังดับอยู่ และยืนยันด้วยการควบคุมตรงจาก Raspberry Pi Pico ว่า LED driver และอาร์เรย์ LED เองยังปกติ
  • เมื่อตามรอยเฟิร์มแวร์ของ Nuvoton M031LD2AE และ SPI flash สำหรับ Cypress/Infineon CYUSB3014 ด้วย Ghidra พบว่าข้อมูลแอนิเมชัน LED ที่ควรอยู่ตั้งแต่ 0x300000 ว่างเปล่าหรือเสียหาย
  • เมื่อนำเฉพาะพื้นที่ข้อมูล LED จาก HD60 S เครื่องปกติมาผสานใส่ SPI flash ของเครื่องที่มีปัญหา ไฟ LED สถานะก็กลับมาใช้งานได้ และปัญหาที่เหลือจึงไม่ใช่ฮาร์ดแวร์ แต่เป็นปัญหาด้านซอฟต์แวร์ การโปรแกรม หรือเส้นทางอัปเดต

ซ่อมภาคจ่ายไฟของ HD60 S ที่ไม่ถูกตรวจพบผ่าน USB

  • Elgato Game Capture HD60 S USB 3.0 เสียที่ซื้อจาก eBay เมื่อต่อแล้วคอมพิวเตอร์ไม่แสดงอะไรขึ้นมาเลย
  • เมื่อเปิดบอร์ดแล้ววัดแรงดัน พบว่ารางไฟถูกดึงลงต่ำ และใช้กล้องถ่ายภาพความร้อนหาชิปที่ร้อนขึ้น
  • ชิ้นส่วนที่เป็นปัญหาคือ IC ภาคจ่ายไฟที่มีเพียง marking ขนาดเล็ก
    • ชิป 2 ตัวที่ระบุว่า fiVJVE อยู่ใกล้อินดักเตอร์ 2.2µH จึงสันนิษฐานว่าเป็น switching regulator
    • จากการค้นหา SMD marking และตรวจเอกสารของ Fitipower จึงตีวงแคบลงได้ว่าเป็น FP6373A
    • ชิปที่ระบุว่า PFNI ได้รับการยืนยันจากการค้นหา Google ว่าเป็นอินเวอร์เตอร์แรงดัน TI TPS60403DBV
  • ชิปทั้งสามรับอินพุต 5V ทั้งหมด และมีความต้านทานฝั่งเอาต์พุตต่ำ เมื่อฉีดแรงดัน 2.7V เข้าไปที่รางเอาต์พุตของ FP6373A ตัวหนึ่งโดยตรง เรกูเลเตอร์ตัวนั้นก็เกิดความร้อน
  • FP6373A ซื้อได้จาก LCSC ในราคาตัวละ $0.17 ส่วนชิป TI ราคา $0.58 และค่าจัดส่งแพงกว่าราคาชิ้นส่วนมาก

ปัญหาไฟ LED สถานะที่ยังเหลือหลังเปลี่ยนชิ้นส่วน

  • หลังเปลี่ยน IC ภาคจ่ายไฟทั้งสามตัว HD60 S ถูกตรวจพบเป็นอุปกรณ์ USB และการจับภาพ HDMI กับ passthrough ทำงานตามปกติ
  • อย่างไรก็ตาม ไฟแสดงสถานะ ของอุปกรณ์ยังไม่ติด
    • มี LED สีขาว 7 ดวงและ LED สีแดง 7 ดวง
    • LED สีขาวควรกะพริบสองครั้งทันทีหลังเชื่อมต่อ
  • ชิปที่เกี่ยวข้องกับ LED คือ IT1504 ของ Innochip และตาม datasheet เป็น LED driver 16 ช่องสัญญาณ
  • เมื่อตรวจขาอินพุตของ IT1504 ด้วยออสซิลโลสโคป พบว่ามีทราฟฟิกแบบอนุกรมคล้าย SPI เข้ามา
  • จากการไล่วงจรบน PCB พบว่า IT1504 ถูกควบคุมโดยไมโครคอนโทรลเลอร์ ARM Cortex-M0 Nuvoton M031LD2AE

ค้นหาชิ้นส่วนแทน IT1504 และตรวจสอบวงจร

  • IT1504 หาได้ยากในช่องทางจัดจำหน่ายทั่วไป และ Innochip มีสต็อกเฉพาะแบบเต็มรีล จึงไม่สามารถส่งตัวอย่างให้ได้
  • ระหว่างค้นหาชิ้นส่วนแทน พบ MBI5040 ของ Macroblock
    • datasheet ของ MBI5040 มีโครงสร้างและ block diagram แทบเหมือน datasheet ของ IT1504
    • สเปกกระแสเอาต์พุตต่างกันเล็กน้อย แต่ฟังก์ชันและชุดคำสั่งคล้ายกันมาก
    • ข้อมูลคำสั่งใน datasheet ของ MBI5040 ช่วยให้เข้าใจวิธีควบคุม LED
  • ซื้อ MBI5040GF มาติดตั้งแทน IT1504 แต่ LED ก็ยังไม่ติด
  • เมื่อใช้ bench power supply และตัวต้านทานเปิด LED ทีละดวง พบว่า ตัว LED เองปกติ
  • เมื่อต่อ Raspberry Pi Pico เข้ากับอินพุตของ MBI5040 โดยตรงแล้วส่งคำสั่ง ก็สามารถควบคุม LED ได้ครบถ้วน
    • จึงสรุปว่าวงจร LED driver และอาร์เรย์ LED ไม่มีปัญหาทางกายภาพ
    • เมื่อติดตั้ง IT1504 ตัวเดิมกลับเข้าไป การควบคุมด้วย Pico ก็ยังทำงานปกติ แสดงว่า LED driver เดิมไม่ได้เสีย

วิเคราะห์เฟิร์มแวร์ของ MCU Nuvoton ด้วย Ghidra

  • สอบถามฝ่ายสนับสนุนของ Elgato เกี่ยวกับปัญหาที่ทราบหรือการตั้งค่าเกี่ยวกับ LED สถานะ แต่ไม่ได้วิธีแก้ที่ใช้ได้จริง
  • เพื่อตรวจสอบเฟิร์มแวร์ของ MCU Nuvoton จึงไล่รอยคอนเนกเตอร์ JST 4 ขาบนบอร์ด และยืนยันว่าเป็นคอนเนกเตอร์สำหรับโปรแกรม MCU
  • พยายามอ่านด้วย Nu-Link2-Me และ NuMicro ICP Programming Tool แต่เนื้อหาในชิปถูกป้องกันไว้
  • แทนที่จะอ่านจากชิปโดยตรง พบไฟล์ FW_HD60_S_MCU.bin ที่รวมอยู่ใน 4K Capture Utility ของ Elgato
    • ตาม ElgatoDeviceCapabilities.json เฟิร์มแวร์นี้ใช้กับอุปกรณ์ที่มี USB product ID 0x0076
    • Elgato เรียกมันว่า “Game Capture HD60 S Rev.4”
  • ไบนารีดูเหมือนเฟิร์มแวร์ Cortex-M0 โดย word แรก 0x20000E70 ดูเหมือน stack pointer ที่ถูกต้อง และ word ถัด ๆ ไปดูเหมือน vector table ในรูปแบบที่อยู่แฟลช
  • โหลดเฟิร์มแวร์เข้า Ghidra แล้วใช้ SVD-Loader เพื่อพยายามแมปรีจิสเตอร์
    • แก้ไข M031AE_v1.svd จาก NuMicro_DFP เพื่อให้ปลั๊กอินโหลดได้
    • M031BSP ของ Nuvoton ช่วยในการระบุฟังก์ชัน

เปลี่ยน MCU และปลดล็อกเพื่อดีบัก

  • เมื่อติดตั้งชิปใหม่ที่ว่างเปล่าแทน M031LD2AE เดิมแล้วแฟลชเฟิร์มแวร์ของ Elgato อุปกรณ์ทำงานได้ แต่ชิปกลับเข้าสู่สถานะป้องกันอีก ทำให้ดีบักไม่ได้
  • ใน Ghidra พบฟังก์ชันที่อัปเดตการตั้งค่าการป้องกัน จึงแพตช์ให้ ไม่ล็อกชิป
  • เมื่อใส่เฟิร์มแวร์ที่แพตช์แล้ว ก็สามารถดีบักโค้ดเริ่มต้นด้วย OpenOCD และ GDB ได้
  • เส้นทางโค้ดควบคุม LED มีอยู่ในเฟิร์มแวร์ แต่ใน flow การทำงานปกติกลับถูกข้าม
  • เมื่อใช้ GDB บังคับเติมค่ารีจิสเตอร์และ RAM เพื่อให้โค้ดควบคุม LED ทำงาน ก็สามารถเปิดไฟได้
    • เฟิร์มแวร์มีโค้ดควบคุม LED อยู่
    • ปัญหาคือโค้ดนั้นไม่ถูกเรียกใช้ภายใต้เงื่อนไขปกติ

บูตโหลดเดอร์และการสำรองเฟิร์มแวร์ทั้งหมด

  • ทดลองติดตั้งเฟิร์มแวร์ที่ปลดบิตป้องกันผ่านเส้นทางอัปเดตของ Elgato ลงใน HD60 S อีกเครื่อง เพื่ออ่านเนื้อหาทั้งหมดที่เดิมถูกป้องกันไว้
  • หลังอัปเดต อุปกรณ์ดูเหมือนไม่ทำงานเป็น capture card แต่ชิปถูกปลดล็อกตามที่ตั้งใจไว้
  • ผลคือสามารถอ่านพื้นที่ต่อไปนี้ได้
    • LDROM: บูตโหลดเดอร์ขั้นแรกของ Elgato
    • data flash
    • ค่ารีจิสเตอร์ตั้งค่าเดิม
    • เฟิร์มแวร์แอปพลิเคชัน APROM
  • บูตโหลดเดอร์ LDROM สามารถรับคำสั่งและข้อมูลผ่าน I2C เพื่อแฟลช APROM ใหม่ได้
  • หากชิปอยู่ในสถานะปลดการป้องกัน บูตโหลดเดอร์จะไม่ส่งต่อไปยังเฟิร์มแวร์แอปพลิเคชัน แต่จะรอคำสั่งอัปเดต
    • Elgato ใช้บิตล็อก/ปลดล็อกเหมือนสัญญาณบอกว่าควรรอบูตโหลดเดอร์หรือไม่
    • พฤติกรรมนี้อธิบายได้ว่าทำไมอุปกรณ์จึงค้างหลังติดตั้งเฟิร์มแวร์ที่ปลดล็อก

ทำความเข้าใจโครงสร้างภายในของ HD60 S

  • ภายในอุปกรณ์มีโปรเซสเซอร์ตระกูล ARM สองตัวทำงานร่วมกัน
    • ชิปอุปกรณ์ต่อพ่วง USB 3.0 Cypress/Infineon CYUSB3014 เป็น ARM926EJ-S และสื่อสารกับพีซีผ่าน USB 3.0
    • MCU Cortex-M0 Nuvoton M031LD2AE ควบคุมชิปวิดีโอ ITE และ LED
  • MCU Nuvoton ตั้งค่าและเฝ้าตรวจชิป ITE ผ่านบัส I2C แยกต่างหาก
    • ITE IT6802E ดูเหมือนเป็นตัวรับ HDMI
    • ITE IT66121FN ดูเหมือนมีหน้าที่ส่งสตรีมข้อมูลแบบขนานออกเป็น HDMI
  • CYUSB3014 ส่งคำสั่งให้ MCU Nuvoton ผ่าน I2C และ Nuvoton ส่งข้อมูลสถานะกลับไปยัง CYUSB3014
  • CYUSB3014 รับสตรีมข้อมูลวิดีโอจาก IT6802E แล้วส่งต่อไปยังคอมพิวเตอร์ผ่าน USB
  • บนบอร์ดยังมี Altera MAX II CPLD ซึ่งดูเหมือนมีบทบาททำให้ข้อมูลวิดีโอเข้ามาในรูปแบบที่ CYUSB3014 รับได้

พบ SPI flash และข้อมูลแอนิเมชัน LED

  • เฟิร์มแวร์ CYUSB3014 ถูกเก็บไว้ใน SPI flash 4MB Winbond W25Q32JVSSIQ โดยไม่มีการป้องกัน
  • เมื่อตรวจ dump ของ SPI flash พบก้อนข้อมูลที่ดูเหมือนรูปภาพขนาดเล็กตั้งแต่ offset 0x300000
  • เมื่อตามรอย GPIO 5 ขาที่ไม่ทราบหน้าที่ในเฟิร์มแวร์ Nuvoton พบว่าขาเหล่านี้เชื่อมไปยัง bus switch quad 2:1 mux/demux PI5C3257 ของ Diodes Incorporated
  • bus switch นี้เลือกว่าฝั่งใดจะเชื่อมต่อกับ SPI flash ระหว่าง CYUSB3014 และ MCU Nuvoton
    • ตอนแรกคิดว่า SPI flash ใช้เฉพาะกับ CYUSB3014
    • แต่จริง ๆ หลัง CYUSB3014 บูตแล้ว MCU Nuvoton จะเข้าควบคุม SPI flash
  • ฟังก์ชันที่ระบุใหม่ใน Ghidra เป็นโค้ดเกี่ยวกับธุรกรรม SPI แบบ bit-banging และการลบ อ่าน เขียน SPI flash

สาเหตุจริงของปัญหา LED

  • ข้อมูลหลัง 0x300000 ใน SPI flash ไม่ใช่รูปภาพทั่วไป แต่เป็น เฟรมแอนิเมชัน LED
    • ข้อมูลแต่ละชุด 16 ไบต์คือเฟรมแอนิเมชันสำหรับ LED 14 ดวง
    • 2 ไบต์สุดท้ายของแต่ละแถวคือเวลาหน่วงก่อนข้ามไปเฟรมถัดไป
  • เฟิร์มแวร์ Nuvoton ตรวจสอบว่า 2 ไบต์แรกที่ตำแหน่งเริ่มต้น 0x300000 เป็นค่า 16 บิต 0xAA55 หรือไม่
  • ใน dump ของ SPI flash จากอุปกรณ์สองเครื่องที่ LED ไม่ทำงาน พื้นที่นี้ว่างเปล่าหรือเสียหาย
    • dump หนึ่งมีพื้นที่ 0x300000 เกือบทั้งหมดเต็มด้วย 0x00
    • แอนิเมชันบางส่วนเริ่มด้วย header แปลก ๆ เช่น AB 03 12 39
  • ใน SPI flash ของ HD60 S เครื่องที่สามซึ่งทำงานปกติ มี header และข้อมูล LED ที่ถูกต้องที่ 0x300000
    • word 16 บิตแรกคือ 0xAA55 ที่เฟิร์มแวร์มองหา
    • header มีข้อมูลเกี่ยวกับ แอนิเมชัน LED 26 รายการ
    • ข้อมูล dot correction ที่โหลดเข้า IT1504 อยู่ที่ 0x3007F8 และ 0x521114A7 ที่ตามมาคือ CRC-32 ของ 16 ไบต์ก่อนหน้า

กู้ LED ด้วยการแพตช์ SPI flash

  • ใน SPI flash ของอุปกรณ์ที่มีปัญหา รักษาข้อมูลเฉพาะเครื่องตั้งแต่ 0x000000 ถึง 0x2FFFFF ไว้
    • เพราะหมายเลขซีเรียล USB อยู่ที่ใดที่หนึ่งในพื้นที่นี้
  • สร้าง อิมเมจแบบไฮบริด โดยแทนที่เฉพาะพื้นที่ข้อมูล LED ตั้งแต่ 0x300000 ด้วยข้อมูลจาก dump ของอุปกรณ์ปกติ
  • เมื่อแฟลชอิมเมจนี้ลงในอุปกรณ์ที่ LED เสีย LED สีขาวกะพริบสองครั้ง และ LED สีแดงติดสั้น ๆ หนึ่งครั้ง
  • แม้เครื่องปกติจะเป็น revision เก่ากว่าและรุ่น MCU Nuvoton ก็ต่างกัน แต่ข้อมูล LED ก็ตรงกับรูปแบบที่เฟิร์มแวร์ใหม่คาดหวัง
  • ภายในแอป Game Capture เดิมของ Windows และ Mac ก็มีข้อมูลดิบของแอนิเมชันอยู่เช่นกัน
    • path บน Windows คือ C:\Program Files\Elgato\GameCapture\Animations
    • path บน Mac คือ /Applications/Game Capture HD.app/Contents/Resources/Animations
    • เมื่อนำข้อมูลในไฟล์เช่น 01.ani, 02.ani มาจัดเรียงใหม่ตามลำดับ LED จะตรงกับข้อมูลแอนิเมชันใน dump flash ที่ปกติ

ข้อจำกัดของเครื่องมืออัปเดตและขั้นตอนกู้คืน

  • การอัปเดตเฟิร์มแวร์บน Windows ของ 4K Capture Utility ของ Elgato มีปัญหารอนานไม่พอ
    • แสดงว่าล้มเหลวทั้งที่การอัปเดตยังดำเนินอยู่
    • หากรอต่อไป LED ของอุปกรณ์จะกะพริบและรีบูตเข้าสู่เฟิร์มแวร์ใหม่ตามปกติ
    • หากถอดอุปกรณ์ทันทีหลังข้อความล้มเหลว อาจเหลือแฟลชที่ไม่สมบูรณ์
  • เมื่อเพิ่มค่า updateDurationSec ใน ElgatoDeviceCapabilities.json จาก 40 เป็น 80 ปัญหานี้ก็หายไป
  • Elgato แนะนำว่าไม่ควรอัปเดตเฟิร์มแวร์ HD60 S เว้นแต่ฝ่ายสนับสนุนทางเทคนิคสั่งให้ทำ และยังซ่อนฟังก์ชันไว้หลังคีย์ลัดพิเศษในหน้าการตั้งค่า
  • ขั้นตอนกู้ LED ซับซ้อน
    • แก้ไข ElgatoDeviceCapabilities.json เพื่ออนุญาตให้อัปเดตเฟิร์มแวร์
    • ถอดอุปกรณ์ทันทีหลังเริ่มอัปเดต เพื่อชักนำให้ชิป Cypress ควบคุม SPI flash
    • ถอด jumper บน PCB เพื่อให้ CYUSB3014 บูตจาก USB
    • ใช้ download_fx3 จาก Cypress SDK โหลด cyfxflashprog.img เข้า RAM
    • ใช้ fx3_spitest ที่แก้ไขแล้ว dump SPI flash ทั้งหมดและแพตช์พื้นที่ LED
    • ใส่ jumper กลับ แล้วทำการอัปเดตเฟิร์มแวร์ตามปกติใน 4K Capture Utility เพื่อกู้คืนเฟิร์มแวร์ Nuvoton
  • สุดท้าย การซ่อมเดิมจบด้วยการเปลี่ยนชิป 3 ตัวที่ราคารวมต่ำกว่า 1 ดอลลาร์ ส่วนปัญหา LED ถูกระบุว่าเป็นข้อบกพร่องด้านซอฟต์แวร์ การโปรแกรม หรือการอัปเดตที่เกิดขึ้นใน HD60 S บางเครื่อง

1 ความคิดเห็น

 
GN⁺ 2024-09-18
ความคิดเห็นจาก Hacker News
  • เข้าใจจุดประสงค์ท่ามกลางโครงสร้างทั้งหมดได้ยาก และบางครั้งก็ถูกฝังลึกอยู่ในหลายชั้นของการเรียกฟังก์ชัน
    เวลาดูซอร์สโค้ดโดยตรงก็เจอแบบนี้บ่อย ซอฟต์แวร์ส่วนใหญ่ถูก ทำให้เป็นนามธรรมมากเกินไป และ MCU ก็ทั้งใหญ่ขึ้นและถูกลงมาก จนเริ่มเห็นกรณีอย่างอุปกรณ์จับภาพ HDMI ที่มีคอร์ ARM สองตัวอยู่ข้างใน แม้แต่ในงานฝังตัว ผมไม่คิดว่าอุปกรณ์นี้จำเป็นต้องมี MCU มากกว่าหนึ่งตัว

  • ตอนโตในอินเดียราว 20 ปีก่อน กำลังซื้อยังต่ำและของก็แพง จึงซ่อมหรือปรับปรุงแทบทุกอย่างมาใช้ต่อ
    เราใช้วิธีแก้ขัดสารพัดแบบที่เรียกว่า jugaad เพื่อทำให้ของใช้งานได้ และเสื้อผ้าก็นำกลับมาใช้ซ้ำ โดยช่างตัดเสื้อจะปะซ่อมแบบ rafu เพื่อยืดอายุการใช้งาน เรื่องนี้พบได้ทั่วไปมาก โดยเฉพาะในครอบครัวชนชั้นกลางอย่างบ้านผม
    พ่อผมที่ทำงานในบริษัทส่งออกเสื้อผ้ามักพูดบ่อย ๆ ว่าคนตะวันตกชอบของใช้แล้วทิ้งและของใหม่ ไม่ว่าจะเป็นรถยนต์ อุปกรณ์อิเล็กทรอนิกส์ หรือเสื้อผ้า ตอนนั้นผมไม่เข้าใจวิธีคิดแบบนั้น แต่ตอนนี้เมื่อกำลังซื้อสูงขึ้นและราคาลดลงเพราะจีน พวกเราก็เริ่มเอนเอียงไปทางทิ้งแล้วซื้อใหม่เหมือนกัน
    ผมเคารพคนที่ไม่ยอมแพ้กลางทาง และไม่คิดแค่ว่าซื้อใหม่ง่ายกว่าอย่างลึกซึ้ง ความมุ่งมั่นและความสามารถในการใช้ทรัพยากรอย่างมีไหวพริบ แบบนี้น่าชื่นชมจริง ๆ

    • ราคาสินค้าใหม่ลดลง แต่ ค่าซ่อม กลับสูงขึ้น
      ถ้าซ่อมเองได้และหาอะไหล่ที่ต้องใช้ได้ก็ยังโอเค แต่ถ้าต้องจ่ายเงินให้ประสบการณ์และความรู้ของใครสักคน อย่างน้อยในพื้นที่ที่ผมอยู่ก็ถือว่าแพงพอสมควร และยังหาคนมาซ่อมได้ยากด้วย เห็นแต่ป้ายซ่อมทีวีเต็มไปหมดหน้าร้านว่าง ๆ
      โชคดีที่ผมกึ่งเกษียณแล้วและรับค่าจ้างแบบรายชั่วโมง เวลาส่วนเกินของผมจึงไม่มีต้นทุนเป็นเงิน ผมเลยใช้เวลาหนึ่งวันลองซ่อมเครื่องล้างจานได้ และถ้าหลังจากนั้นไม่กี่วันมันเสียอีก ก็ใช้เวลาอีกวันติดตั้งเครื่องใหม่ได้ ช่างติดตั้งมืออาชีพคงติดตั้งของใหม่ได้ภายในหนึ่งชั่วโมง แต่อย่างน้อยผมก็ไม่ต้องรอจนกว่าจะนัดคิวได้
    • ในยุโรปตะวันตกก็เคยเป็นแบบเดียวกันมานาน รุ่นพ่อแม่ของผมโตมากับการปะเสื้อผ้าและซ่อมของมากมาย
      เพิ่งในช่วงประมาณ 50 ปีที่ผ่านมานี่เองที่ บริโภคนิยม ขยายตัว และคุณภาพกับราคาของสิ่งของอย่างเสื้อผ้าลดลง
      ช่วงนี้ผมซ่อมบำรุงมอเตอร์ไซค์เอง ตอนแรกต้องลงทุนซื้อเครื่องมือเล็กน้อย เช่น เครื่องมือคลายไส้กรองน้ำมัน และต้องหาอะไหล่กับวัสดุสิ้นเปลืองด้วย เช่น น้ำมันต่าง ๆ แหวนรองทองแดง และสกรูสำหรับแทนสกรูเก่าของกระปุกน้ำมันเบรก แต่สุดท้ายก็จบที่ราว €100~€150 แทนที่จะเป็น €1000 ตามที่อู่เสนอ
    • ตอนโตในครอบครัวชนชั้นแรงงานทางตะวันออกเฉียงเหนือของสหรัฐฯ ในยุค 80 ก็เป็นแบบนั้นเหมือนกัน พ่อผมซ่อมของในบ้านและรถทั้งหมด ส่วนผมใส่เสื้อผ้าต่อจากพี่ ๆ น้อง ๆ และน้อง ๆ ก็ใส่ต่อจากผม
      แม่จะพับขากางเกงให้สั้นลงตอนเรายังเด็ก แล้วค่อยปล่อยยาวออกเมื่อเราโตขึ้น และถ้าหัวเข่าหรือข้อศอกสึกก็ปะให้
      สภาพแวดล้อมแบบนี้ปลูกฝังทั้งนิสัยที่ดีและนิสัยที่ไม่ดี ผมซ่อมบ้านแทบทั้งหมดเอง แต่ทำงานมากเกินไปจนไม่ได้มีเวลาและพลังงานพอเสมอ ทั้งที่จ่ายเงินให้คนอื่นทำได้สบาย ๆ ก็ยังยากที่จะยอมจ่าย จนทำให้ปล่อยของที่เสียไว้นานเกินจำเป็น
      ถ้าเอาเวลานั้นไปทำไซด์โปรเจกต์แทนการบำรุงรักษาและซ่อมแซม ผมอาจมีเงินมากกว่านี้ก็ได้
    • ในอดีต การซ่อมแซมใกล้เคียงกับ ความรู้ของชุมชน มากกว่า ในละแวกบ้านจะมีคนที่รู้เรื่องเชื่อม อีกคนรู้เรื่องไฟฟ้า งานฉาบปูน การซ่อมเสื้อผ้า ฯลฯ
      คนเหล่านั้นจะสอนคนอื่น ๆ ให้ถึงระดับพื้นฐาน และช่วยเหลือเมื่อเกิดปัญหาที่ไม่คาดคิด เรียกได้ว่าความรู้และการฝึกแบบลูกมือขั้นพื้นฐานฝังอยู่ในชุมชนทั้งชุมชน
      ทุกวันนี้การซ่อมกลายเป็นงานที่ทำคนเดียว สิ่งอย่าง YouTube ช่วยได้มาก แต่แง่มุมของความเป็นชุมชนหายไปแล้ว
    • วิธีคิดแบบ บริโภคนิยม ใกล้เคียงกับความฟุ่มเฟือยที่เกิดจากเศรษฐกิจแข็งแกร่งและการเลื่อนชั้นทางสังคมที่สูง
      ผลข้างเคียงที่น่าเสียดายคือ เมื่อการซ่อมและการนำกลับมาใช้ซ้ำถูกมองว่าน่าดึงดูดน้อยลง ความสามารถในการซ่อมได้และอายุการใช้งานยาวนานก็ถูกมองว่าสำคัญน้อยลงในฐานะคุณสมบัติของสินค้าไปด้วย ตอนนี้เมื่อการเติบโตทางเศรษฐกิจของสหรัฐฯ โดยเฉพาะสำหรับ 99% หยุดนิ่ง เราจึงเริ่มเห็นสิ่งที่สูญเสียไป ไม่มีของที่ถูกสร้างมาให้ทนทาน และบริษัทต่าง ๆ ก็ไม่เสนอ หรือไม่สามารถเสนอ ผลิตภัณฑ์ที่ซ่อมได้และใช้งานได้นาน ดังนั้นแม้แต่คนที่ตั้งใจพยายามซ่อมของตัวเองก็ยังเจออุปสรรคมากมาย
  • ส่วนที่เขาตระหนักว่าก้อนข้อมูลในชิปแฟลชเป็นรูปภาพนั้นน่าสนใจมาก ไม่ใช่รูปภาพในความหมายทั่วไป แต่เป็นข้อมูลที่อธิบาย แอนิเมชัน LED หลายชุด
    ผมเคยสร้างรูปแบบคล้าย ๆ กันเองสำหรับแอนิเมชันของหลอด Hue เพียงแต่เป็นข้อความ ไม่ใช่ไบนารี
    bulb1 bulb2
    dly R G B WW CW R G B WW CW
    100 10 25 20 0 0 25 10 20 0 0
    200 10 50 20 0 0 50 10 20 0 0
    ค่าแรกคือจำนวนมิลลิวินาทีที่ต้องหน่วงก่อนข้ามไปบรรทัดถัดไป และค่าหลังจากนั้นคือความสว่างของแต่ละช่อง LED โดยอิงจาก 100 บรรทัดที่ขึ้นต้นด้วยสิ่งที่ไม่ใช่ตัวเลขถือเป็นคอมเมนต์ และระหว่างช่องจะมีช่องว่างหนึ่งช่องหรือมากกว่านั้นเท่าไรก็ได้
    ดีใจที่ได้เห็น รูปแบบไบนารี คล้าย ๆ กันในผลิตภัณฑ์เชิงพาณิชย์ จริง ๆ แล้วเป็นวิธีที่ค่อนข้างตรงไปตรงมา แต่พอได้เห็นด้วยตาตัวเองก็ยังน่าสนใจ

    • นี่เหมือน ซอฟต์แวร์แทร็กเกอร์ สำหรับแอนิเมชัน LED หรือม้วนกระดาษเปียโนอัตโนมัติ
      https://en.wikipedia.org/wiki/Piano_roll
  • เป็นบทความที่ทำให้ถ่อมตัวลง นี่แหละคือ วิศวกรรมฟูลสแต็ก ของจริง

    • ทำให้ถ่อมตัวจริง ๆ แม้จะใช้บทความนี้เป็นจุดเริ่มต้น ผมว่าผมคงต้องใช้เวลาหลายสัปดาห์กว่าจะทำได้
  • อยากเห็นว่า Elgato จะตอบสนองต่อบทความนี้อย่างไร

    • ผมก็เหมือนกัน นึกภาพได้ง่ายเลยว่าวิศวกรที่อ่านบทความน่าสนใจนี้จะตาเป็นประกายด้วยความตื่นเต้น ส่วนผู้จัดการจะโมโหและเรียกร้องหาวิธีปกป้อง ทรัพย์สินทางปัญญา ของบริษัทให้ดีกว่านี้
    • ตอนนี้ Corsair ซึ่งเป็นเจ้าของ Elgato ควรเป็นฝ่ายตอบสนองแล้ว ส่วนตัวผมมองว่าเป็นบริษัทดั้งเดิมที่จดทะเบียนในตลาดหลักทรัพย์มากกว่า ถ้ามีการตอบสนองออกมาก็คงเป็นเรื่องที่น่าประหลาดใจในทางที่ดี
    • ตอนนี้ผมชักสงสัยแล้วว่าพวกเขารู้สาเหตุของปัญหา LED หรือสาเหตุของ ความเสียหายของหน่วยความจำ ที่อยู่เบื้องหลังหรือไม่
  • จากประสบการณ์ของผม ผลิตภัณฑ์ Elgato ราคาถูก แต่ไม่เสถียรอย่างเลวร้าย บทความนี้แสดงให้เห็นเหตุผลได้ละเอียดมาก

    • ปัญหาการกะพริบและความเสียหายชี้ไปที่ วัฒนธรรมวิศวกรรมซอฟต์แวร์ ที่แย่มาก
    • สิ่งที่น่าเสียดายคือ ตัวผลิตภัณฑ์อย่าง Key Light หรือ Stream Deck เองนั้นเจ๋งและมีประโยชน์จริง ๆ
      ซอฟต์แวร์ก็มีฟังก์ชันที่ต้องการครบ ทำปลั๊กอินเองได้ และกระบวนการทำปลั๊กอินก็มีเอกสารประกอบ ทั้งหมดนี้ดีมากจริง ๆ
      แต่ในทางปฏิบัติ ผมต้องคอยปิดเปิด Key Light อยู่เรื่อย ๆ และต้องรีสตาร์ตแอป Stream Deck บน Windows อยู่ตลอด
  • สงสัยว่าคนทำโปรเจกต์แบบนี้รักษาแรงจูงใจไว้ได้อย่างไร ต้องสั่งชิ้นส่วนซ้ำ ๆ แล้วรอให้มาถึง โดยเฉพาะชิ้นส่วนจากจีน พอรอนาน ๆ ก็ทำให้ผมทิ้งโปรเจกต์ไปไม่น้อย

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

  • ความสามารถในการแสวงหาความจริงและไล่ตามมันจนถึงที่สุดทำให้เรามีความศักดิ์สิทธิ์ และเป็นด้านของมนุษย์ที่สร้างและพัฒนาสิ่งต่าง ๆ คนคนนี้ได้เดินบน เส้นทางทางจิตวิญญาณ ที่ลึกซึ้งมากผ่านการสำรวจวัตถุธรรมดาชิ้นหนึ่ง
    ความจริงที่ว่าอุปกรณ์ต่าง ๆ ต่อต้านเรานั้นช่างเศร้า น่าหงุดหงิด และเหมือนนรกอย่างยิ่ง คอมพิวเตอร์และอุปกรณ์ควรขยายและเปล่งประกายความจริงที่ประกอบเป็นตัวมัน แต่เผ่าพันธุ์มนุษย์กลับติดอยู่ในเปลือกที่ตนเองสร้างขึ้น และอยู่ในบริโภคนิยมแบบบนลงล่างที่ปฏิเสธการมีส่วนร่วมและความเป็นไปได้ในการเรียนรู้ โดยเฉพาะคอมพิวเตอร์มักกลายเป็น เครื่องมือทำให้ทึบ ชั้นดีที่บดบังความจริงและความเข้าใจ ศักยภาพมหาศาลถูกสูญเปล่าไปอย่างยิ่ง
    หวังว่าจะได้เห็นกระแสการทะลุผ่านที่ทำให้เครื่องจักรเปิดกว้างปรากฏขึ้นในช่วงชีวิตนี้ ขอปรบมือให้ Doug