修改並行源以使用 /dev/usb/lp0 而不是基本 I/O 地址 0x378
我有一個非常古老的 MP3 播放器,叫做 Diamond Rio。它有一個帶有 25 針並行適配器的並行介面。Debian 軟體包 rio 看起來可以與設備通信(https://packages.debian.org/sid/rio),但它被硬編碼為使用舊式基本 I/O 地址 0x278、0x378。
我沒有留下專用並行埠的電腦。我購買了一個 USB 轉並行適配器,但設備顯示為 /dev/usb/lp0。
是否有直接的方法來修改 rio 程序(我有原始碼)以與新的 /dev/tty/lp0 設備進行互動,而不是現在不存在的硬編碼寄存器地址 0x278、0x378?
最簡單的方法是在程式碼中創建一個shim。更改
OUTPORT
和INPORT
rio.cpp 的定義,使它們指向您的覆蓋函式。寫入 BASE_PORT(預設為 0x378)可以像寫入 USB 仿真設備一樣簡單。
但是讀取狀態埠(數據一次從設備接收到主機,檢查 rio.txt 以了解所有詳細資訊)可能會比較棘手,因為實際的並行埠狀態可能由 USB 適配器(重新)解釋. 而且您仍然需要找到訪問控制埠。適配器用於列印,而不是用於位碰撞。
另一種選擇可以是 PCI 並行埠卡。
或者添加另一層,比如說一個 Arduino,然後去 program->USB->Arduino->Parallel。由於 arduino 只會傳遞字節,這取決於你如何連接它,所以 Firmadata 庫就足夠了(Arduino 上沒有程式)。但即使不是,你必須為 Arduino 編寫的程序也很簡單。
曾經有用於 Arduino 的 DB25 盾牌,你可能會幸運地找到一個。但是 Arduino + DB25 分線器也可以正常工作,並允許您進行原型設計。
這將是我的建議,在 rio 的原始碼上的 shim
OUTPUT
和INPORT
,它通過 USB 與 Arduino 通信,後者又直接讀/寫並行線。