上一篇我們得到了通過打印驅動生成的十六進制文件TestDriver如圖4.1,接下來我就來過跟各位看官具體分析一下這些十六進制數的含義。要了解這些十六進制數據,有一個東東是必備的,就是ESC/POS指令集,網上有下載的。現在國內絕大部分的熱敏打印都是用的ESC/POS指令,我們前面裝的驅動就是按照ESC/POS指令做的,用的打也是按照ESC/POS指令做的。打印機要和計算機要能進行對話,就得使用共同的語言,這種語言就是ESC/POS。驅動就是將計算機要表達的內容,“翻譯”成ESC/POS指令,再告訴打印機,打印機就開始打印了。
圖4.1
我們可以看到,第一行的數據1B40,這個是十六進制數,也就是0x1B,0x40,我們再打開ESC/POS指令集,查找到1B40這條指令如圖4.2, 圖4.2
可以看到這條指令十六進為制1B 40,十進制為 27 64,十六進制的0x1B也就是十進制的27,十六進制的40也就是十進制的64.這條指令作用為初始化打印機。指令下面描述了指令的具體解釋,主要是清除打印緩沖區數據和NV位圖數據。
再看下一條,1B4A30,打開ESC/POS指令集,如圖4.3
如圖4.3
可以看到這條命令的作用是打印並走紙,這條命令還帶有一個參數n,現在命令為1B4A30,n就為十六進制0x30也就是十進制48,所以按照指令描述,走紙的距離為 n x 縱向或橫向移動單位,這個縱向或橫向移動單位,是可以設置的,一般打印機默認為1個點也就是0.125mm,所以走紙距離為48 x 0.125mm = 6mm。
接下來一條為1D76300030018....這條指令比較復雜,查看指令如圖4.4
可以看到這條指令是用來打印光柵位圖的,參數比較多,我們一一來對應,對照我們的數據1D763000300018...后,得到m=00,xL=0x30,xH=0x00,yL=0x18,yH=0x00,k=1152,這個指令就是驅動翻譯的主要部分,是將圖像和文字按照這個指令規定的方式,轉換為點陣,傳給打印機,打印機接收到這些點陣后,將圖形和文字打印出來。
從上面的分析可以看出驅動其實沒干什么神奇的事,只是將要打印的內容,轉換為數據點陣,再發給打印機,再打印出來,這些數據點陣的格式都是按照ESC/POS指令,所以說打印機開發中最重要的就是了解ESC/POS指令集,后面我會逐步介紹ESC/POS指令。