Pages

2012-10-29

透過RJ-11埠開啟電子錢箱

POS主機通常會有一個RJ-11埠連接電子錢箱(DC 12V),要以GPIO讀寫來控制它,就得知道它的GPIO暫存器位址。通常主機廠商能提供規格文件,例如以下的畫面(這算是寫得很人性的文件,有些寫得十分不直覺):
CashDrawer Register Spec 
上圖是說只要寫IO位址0A22h,將該Byte的Bit4設為1即可開錢箱。我們可以透過RW工具開啟IO Space位址圖,並寫值測試是否可開?你可以使用LPT1的位址區段(0378h)作此工具實驗,這些區段通常允許你寫入值。
LPT1 IO Range

RJ-11埠固定連著錢箱,所以你不用特別讀出原值作OR Bit4運算,直接測一下ON,OFF值即可。各式電子錢箱開啟位址及流程不一致,有些下「關->開」指令即可,有些得「關->開->關」才能把錢箱推回去。因應各種錢箱,我寫了一個C#類別來處理它,讀入不等長的Hex指令字串依實機狀況來設定,雖短短幾行,裏頭卻包含著一些與硬體打交道的程式兼容寫作經驗。
Sample Code

Post a Comment