ซ่อมอุปกรณ์จับภาพ HDMI Elgato HD60 S ด้วย Ghidra
(downtowndougbrown.com)- 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
- ชิป 2 ตัวที่ระบุว่า
- ชิปทั้งสามรับอินพุต 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
- dump หนึ่งมีพื้นที่ 0x300000 เกือบทั้งหมดเต็มด้วย
- ใน SPI flash ของ HD60 S เครื่องที่สามซึ่งทำงานปกติ มี header และข้อมูล LED ที่ถูกต้องที่ 0x300000
- word 16 บิตแรกคือ
0xAA55ที่เฟิร์มแวร์มองหา - header มีข้อมูลเกี่ยวกับ แอนิเมชัน LED 26 รายการ
- ข้อมูล dot correction ที่โหลดเข้า IT1504 อยู่ที่ 0x3007F8 และ
0x521114A7ที่ตามมาคือ CRC-32 ของ 16 ไบต์ก่อนหน้า
- word 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 ที่ปกติ
- path บน Windows คือ
ข้อจำกัดของเครื่องมืออัปเดตและขั้นตอนกู้คืน
- การอัปเดตเฟิร์มแวร์บน 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 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เข้าใจจุดประสงค์ท่ามกลางโครงสร้างทั้งหมดได้ยาก และบางครั้งก็ถูกฝังลึกอยู่ในหลายชั้นของการเรียกฟังก์ชัน
เวลาดูซอร์สโค้ดโดยตรงก็เจอแบบนี้บ่อย ซอฟต์แวร์ส่วนใหญ่ถูก ทำให้เป็นนามธรรมมากเกินไป และ MCU ก็ทั้งใหญ่ขึ้นและถูกลงมาก จนเริ่มเห็นกรณีอย่างอุปกรณ์จับภาพ HDMI ที่มีคอร์ ARM สองตัวอยู่ข้างใน แม้แต่ในงานฝังตัว ผมไม่คิดว่าอุปกรณ์นี้จำเป็นต้องมี MCU มากกว่าหนึ่งตัว
ตอนโตในอินเดียราว 20 ปีก่อน กำลังซื้อยังต่ำและของก็แพง จึงซ่อมหรือปรับปรุงแทบทุกอย่างมาใช้ต่อ
เราใช้วิธีแก้ขัดสารพัดแบบที่เรียกว่า jugaad เพื่อทำให้ของใช้งานได้ และเสื้อผ้าก็นำกลับมาใช้ซ้ำ โดยช่างตัดเสื้อจะปะซ่อมแบบ rafu เพื่อยืดอายุการใช้งาน เรื่องนี้พบได้ทั่วไปมาก โดยเฉพาะในครอบครัวชนชั้นกลางอย่างบ้านผม
พ่อผมที่ทำงานในบริษัทส่งออกเสื้อผ้ามักพูดบ่อย ๆ ว่าคนตะวันตกชอบของใช้แล้วทิ้งและของใหม่ ไม่ว่าจะเป็นรถยนต์ อุปกรณ์อิเล็กทรอนิกส์ หรือเสื้อผ้า ตอนนั้นผมไม่เข้าใจวิธีคิดแบบนั้น แต่ตอนนี้เมื่อกำลังซื้อสูงขึ้นและราคาลดลงเพราะจีน พวกเราก็เริ่มเอนเอียงไปทางทิ้งแล้วซื้อใหม่เหมือนกัน
ผมเคารพคนที่ไม่ยอมแพ้กลางทาง และไม่คิดแค่ว่าซื้อใหม่ง่ายกว่าอย่างลึกซึ้ง ความมุ่งมั่นและความสามารถในการใช้ทรัพยากรอย่างมีไหวพริบ แบบนี้น่าชื่นชมจริง ๆ
ถ้าซ่อมเองได้และหาอะไหล่ที่ต้องใช้ได้ก็ยังโอเค แต่ถ้าต้องจ่ายเงินให้ประสบการณ์และความรู้ของใครสักคน อย่างน้อยในพื้นที่ที่ผมอยู่ก็ถือว่าแพงพอสมควร และยังหาคนมาซ่อมได้ยากด้วย เห็นแต่ป้ายซ่อมทีวีเต็มไปหมดหน้าร้านว่าง ๆ
โชคดีที่ผมกึ่งเกษียณแล้วและรับค่าจ้างแบบรายชั่วโมง เวลาส่วนเกินของผมจึงไม่มีต้นทุนเป็นเงิน ผมเลยใช้เวลาหนึ่งวันลองซ่อมเครื่องล้างจานได้ และถ้าหลังจากนั้นไม่กี่วันมันเสียอีก ก็ใช้เวลาอีกวันติดตั้งเครื่องใหม่ได้ ช่างติดตั้งมืออาชีพคงติดตั้งของใหม่ได้ภายในหนึ่งชั่วโมง แต่อย่างน้อยผมก็ไม่ต้องรอจนกว่าจะนัดคิวได้
เพิ่งในช่วงประมาณ 50 ปีที่ผ่านมานี่เองที่ บริโภคนิยม ขยายตัว และคุณภาพกับราคาของสิ่งของอย่างเสื้อผ้าลดลง
ช่วงนี้ผมซ่อมบำรุงมอเตอร์ไซค์เอง ตอนแรกต้องลงทุนซื้อเครื่องมือเล็กน้อย เช่น เครื่องมือคลายไส้กรองน้ำมัน และต้องหาอะไหล่กับวัสดุสิ้นเปลืองด้วย เช่น น้ำมันต่าง ๆ แหวนรองทองแดง และสกรูสำหรับแทนสกรูเก่าของกระปุกน้ำมันเบรก แต่สุดท้ายก็จบที่ราว €100~€150 แทนที่จะเป็น €1000 ตามที่อู่เสนอ
แม่จะพับขากางเกงให้สั้นลงตอนเรายังเด็ก แล้วค่อยปล่อยยาวออกเมื่อเราโตขึ้น และถ้าหัวเข่าหรือข้อศอกสึกก็ปะให้
สภาพแวดล้อมแบบนี้ปลูกฝังทั้งนิสัยที่ดีและนิสัยที่ไม่ดี ผมซ่อมบ้านแทบทั้งหมดเอง แต่ทำงานมากเกินไปจนไม่ได้มีเวลาและพลังงานพอเสมอ ทั้งที่จ่ายเงินให้คนอื่นทำได้สบาย ๆ ก็ยังยากที่จะยอมจ่าย จนทำให้ปล่อยของที่เสียไว้นานเกินจำเป็น
ถ้าเอาเวลานั้นไปทำไซด์โปรเจกต์แทนการบำรุงรักษาและซ่อมแซม ผมอาจมีเงินมากกว่านี้ก็ได้
คนเหล่านั้นจะสอนคนอื่น ๆ ให้ถึงระดับพื้นฐาน และช่วยเหลือเมื่อเกิดปัญหาที่ไม่คาดคิด เรียกได้ว่าความรู้และการฝึกแบบลูกมือขั้นพื้นฐานฝังอยู่ในชุมชนทั้งชุมชน
ทุกวันนี้การซ่อมกลายเป็นงานที่ทำคนเดียว สิ่งอย่าง YouTube ช่วยได้มาก แต่แง่มุมของความเป็นชุมชนหายไปแล้ว
ผลข้างเคียงที่น่าเสียดายคือ เมื่อการซ่อมและการนำกลับมาใช้ซ้ำถูกมองว่าน่าดึงดูดน้อยลง ความสามารถในการซ่อมได้และอายุการใช้งานยาวนานก็ถูกมองว่าสำคัญน้อยลงในฐานะคุณสมบัติของสินค้าไปด้วย ตอนนี้เมื่อการเติบโตทางเศรษฐกิจของสหรัฐฯ โดยเฉพาะสำหรับ 99% หยุดนิ่ง เราจึงเริ่มเห็นสิ่งที่สูญเสียไป ไม่มีของที่ถูกสร้างมาให้ทนทาน และบริษัทต่าง ๆ ก็ไม่เสนอ หรือไม่สามารถเสนอ ผลิตภัณฑ์ที่ซ่อมได้และใช้งานได้นาน ดังนั้นแม้แต่คนที่ตั้งใจพยายามซ่อมของตัวเองก็ยังเจออุปสรรคมากมาย
ส่วนที่เขาตระหนักว่าก้อนข้อมูลในชิปแฟลชเป็นรูปภาพนั้นน่าสนใจมาก ไม่ใช่รูปภาพในความหมายทั่วไป แต่เป็นข้อมูลที่อธิบาย แอนิเมชัน LED หลายชุด
ผมเคยสร้างรูปแบบคล้าย ๆ กันเองสำหรับแอนิเมชันของหลอด Hue เพียงแต่เป็นข้อความ ไม่ใช่ไบนารี
bulb1 bulb2dly R G B WW CW R G B WW CW100 10 25 20 0 0 25 10 20 0 0200 10 50 20 0 0 50 10 20 0 0ค่าแรกคือจำนวนมิลลิวินาทีที่ต้องหน่วงก่อนข้ามไปบรรทัดถัดไป และค่าหลังจากนั้นคือความสว่างของแต่ละช่อง LED โดยอิงจาก 100 บรรทัดที่ขึ้นต้นด้วยสิ่งที่ไม่ใช่ตัวเลขถือเป็นคอมเมนต์ และระหว่างช่องจะมีช่องว่างหนึ่งช่องหรือมากกว่านั้นเท่าไรก็ได้
ดีใจที่ได้เห็น รูปแบบไบนารี คล้าย ๆ กันในผลิตภัณฑ์เชิงพาณิชย์ จริง ๆ แล้วเป็นวิธีที่ค่อนข้างตรงไปตรงมา แต่พอได้เห็นด้วยตาตัวเองก็ยังน่าสนใจ
https://en.wikipedia.org/wiki/Piano_roll
เป็นบทความที่ทำให้ถ่อมตัวลง นี่แหละคือ วิศวกรรมฟูลสแต็ก ของจริง
อยากเห็นว่า Elgato จะตอบสนองต่อบทความนี้อย่างไร
จากประสบการณ์ของผม ผลิตภัณฑ์ Elgato ราคาถูก แต่ไม่เสถียรอย่างเลวร้าย บทความนี้แสดงให้เห็นเหตุผลได้ละเอียดมาก
ซอฟต์แวร์ก็มีฟังก์ชันที่ต้องการครบ ทำปลั๊กอินเองได้ และกระบวนการทำปลั๊กอินก็มีเอกสารประกอบ ทั้งหมดนี้ดีมากจริง ๆ
แต่ในทางปฏิบัติ ผมต้องคอยปิดเปิด Key Light อยู่เรื่อย ๆ และต้องรีสตาร์ตแอป Stream Deck บน Windows อยู่ตลอด
สงสัยว่าคนทำโปรเจกต์แบบนี้รักษาแรงจูงใจไว้ได้อย่างไร ต้องสั่งชิ้นส่วนซ้ำ ๆ แล้วรอให้มาถึง โดยเฉพาะชิ้นส่วนจากจีน พอรอนาน ๆ ก็ทำให้ผมทิ้งโปรเจกต์ไปไม่น้อย
ถ้านับไม่ผิด ผู้เขียนสั่งอย่างน้อยสามครั้ง ถึงอย่างนั้นก็ยังน่าสนใจมากจริง ๆ
ถ้าไม่มีกล้องถ่ายภาพความร้อน ก็ทา แอลกอฮอล์ล้างแผล บนบอร์ดแล้วดูว่าตรงไหนระเหยเร็วที่สุดได้
แน่นอนว่าวิธีนี้ใช้ได้เฉพาะกับอุปกรณ์แรงดันต่ำเท่านั้น
ความสามารถในการแสวงหาความจริงและไล่ตามมันจนถึงที่สุดทำให้เรามีความศักดิ์สิทธิ์ และเป็นด้านของมนุษย์ที่สร้างและพัฒนาสิ่งต่าง ๆ คนคนนี้ได้เดินบน เส้นทางทางจิตวิญญาณ ที่ลึกซึ้งมากผ่านการสำรวจวัตถุธรรมดาชิ้นหนึ่ง
ความจริงที่ว่าอุปกรณ์ต่าง ๆ ต่อต้านเรานั้นช่างเศร้า น่าหงุดหงิด และเหมือนนรกอย่างยิ่ง คอมพิวเตอร์และอุปกรณ์ควรขยายและเปล่งประกายความจริงที่ประกอบเป็นตัวมัน แต่เผ่าพันธุ์มนุษย์กลับติดอยู่ในเปลือกที่ตนเองสร้างขึ้น และอยู่ในบริโภคนิยมแบบบนลงล่างที่ปฏิเสธการมีส่วนร่วมและความเป็นไปได้ในการเรียนรู้ โดยเฉพาะคอมพิวเตอร์มักกลายเป็น เครื่องมือทำให้ทึบ ชั้นดีที่บดบังความจริงและความเข้าใจ ศักยภาพมหาศาลถูกสูญเปล่าไปอย่างยิ่ง
หวังว่าจะได้เห็นกระแสการทะลุผ่านที่ทำให้เครื่องจักรเปิดกว้างปรากฏขึ้นในช่วงชีวิตนี้ ขอปรบมือให้ Doug