package com.hdx.lib.printer; import java.io.IOException; import java.io.UnsupportedEncodingException; import android.graphics.Bitmap; import android.graphics.Color; import android.os.Handler; import com.ectrip.cyt.callback.CloseCallback; import com.hdx.lib.serial.SerialParam; import com.hdx.lib.serial.SerialPortOperaion; public class SerialPrinter { private boolean mOpened = false; private Handler mExternHandler; private static SerialPrinter mSerialPrinter = null; private SerialPortOperaion mSerialPortOperaion = null; private CloseCallback closeCallback; public static SerialPrinter GetSerialPrinter() { if (mSerialPrinter == null) mSerialPrinter = new SerialPrinter(); return mSerialPrinter; } private boolean isclick = true; public void OpenPrinter(SerialParam param, Handler handle, CloseCallback closeCallback) throws Exception { synchronized (GetSerialPrinter()) { if (closeCallback != null) { this.closeCallback = closeCallback; } if (isclick) { try { if (this.mOpened) throw new Exception("PRINTER OPENED"); this.mExternHandler = handle; try { this.mSerialPortOperaion = new SerialPortOperaion( this.mExternHandler, param); this.mSerialPortOperaion.StartSerial(); this.mOpened = true; } catch (IOException e) { throw e; } catch (Exception e) { e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); if (closeCallback != null) { closeCallback.closeback(); } } } } } public void ClosePrinter() { synchronized (GetSerialPrinter()) { this.mExternHandler = null; this.mSerialPortOperaion.StopSerial(); this.mOpened = false; } } public void printString(String text, int num) { synchronized (GetSerialPrinter()) { if ("printClose".equals(text)) { if (closeCallback != null) { closeCallback.closeback(); } } else { String gbk = UnicodeToGBK(text); int[] data = new int[gbk.length()]; for (int i = 0; i < gbk.length(); i++) { data[i] = gbk.charAt(i); } this.mSerialPortOperaion.WriteData(data); sleep(80); } } } public void sleep(int ms) { try { java.lang.Thread.sleep(ms); } catch (Exception e) { e.printStackTrace(); } } public void enlargeFontSize(int x, int y) throws Exception { synchronized (GetSerialPrinter()) { if ((x < 0) || (x > 4) || (y < 0) || (y > 4)) throw new Exception("Invalid Parameter"); byte[] cmd = new byte[4]; cmd[0] = 10; cmd[1] = 27; cmd[2] = 86; cmd[3] = ((byte) x); this.mSerialPortOperaion.WriteData(cmd); cmd[1] = 27; cmd[2] = 85; cmd[3] = ((byte) y); this.mSerialPortOperaion.WriteData(cmd); } } public void walkPaper(int dot) throws Exception { synchronized (GetSerialPrinter()) { if ((dot < 0) || (dot > 255)) throw new Exception("Invalid Parameter"); byte[] cmd = new byte[4]; cmd[0] = 10; cmd[1] = 27; cmd[2] = 74; cmd[3] = ((byte) dot); this.mSerialPortOperaion.WriteData(cmd); } } public void setLineSpace(int space) throws Exception { synchronized (GetSerialPrinter()) { if ((space < 0) || (space > 255)) throw new Exception("Invalid Parameter"); byte[] cmd = new byte[4]; cmd[0] = 10; cmd[1] = 27; cmd[2] = 74; cmd[3] = ((byte) space); this.mSerialPortOperaion.WriteData(cmd); } } public void setHighlight(boolean reverse) { synchronized (GetSerialPrinter()) { byte[] cmd = new byte[4]; cmd[0] = 10; cmd[1] = 27; cmd[2] = 105; cmd[3] = ((byte) (reverse ? 1 : 0)); this.mSerialPortOperaion.WriteData(cmd); } } public void setGray(int gray) throws Exception { synchronized (GetSerialPrinter()) { if ((gray < 0) || (gray > 25)) throw new Exception("Invalid Parameter"); byte[] cmd = new byte[4]; cmd[0] = 10; cmd[1] = 29; cmd[2] = 77; cmd[3] = ((byte) gray); this.mSerialPortOperaion.WriteData(cmd); } } public void setAlgin(int paramInt) throws Exception { throw new Exception("unsupported"); } public void setBarHeight(int height) throws Exception { synchronized (GetSerialPrinter()) { if ((height < 0) || (height > 255)) throw new Exception("Invalid Parameter"); byte[] cmd = new byte[4]; cmd[0] = 10; cmd[1] = 29; cmd[2] = 104; cmd[3] = ((byte) height); this.mSerialPortOperaion.WriteData(cmd); } } public void printBarCode(int type, byte[] code) throws Exception { if ((type < 0) || (type > 4)) throw new Exception("Invalid Parameter"); byte[] cmd = new byte[4]; cmd[0] = 10; cmd[1] = 29; cmd[2] = 107; cmd[3] = ((byte) type); this.mSerialPortOperaion.WriteData(cmd); this.mSerialPortOperaion.WriteData(code); } public void sendLineFeed() { this.mSerialPortOperaion.WriteData(new int[] { 10 }); } public void PrintBmp(int startx, Bitmap bitmap) { synchronized (GetSerialPrinter()) { byte[] start1 = { 13, 10 }; int[] start2 = { 27, 75, 27, 51 }; int width = bitmap.getWidth() + startx; int height = bitmap.getHeight(); int adjustedHeight = (height + 7) / 8 * 8; if (width > 384) { width = 384; } for (int i = 0; i < adjustedHeight / 8; i++) { byte[] data = new byte[width]; byte xL = (byte) (width % 256); byte xH = (byte) (width / 256); start2[2] = xL; start2[3] = xH; this.mSerialPortOperaion.WriteData(start2); for (int x = 0; x < width; x++) data[x] = 0; for (int k = 0; k < 8; k++) { for (int x = startx; x < width; x++) { int y = i * 8 + k; if (y < height) { int pixel = bitmap.getPixel(x - startx, y); if ((Color.red(pixel) == 0) || (Color.green(pixel) == 0) || (Color.blue(pixel) == 0)) { int tmp221_219 = x; byte[] tmp221_217 = data; tmp221_217[tmp221_219] = ((byte) (tmp221_217[tmp221_219] + (byte) (128 >> y % 8))); } } } } this.mSerialPortOperaion.WriteData(data); try { Thread.sleep(100L); } catch (InterruptedException localInterruptedException) { } } this.mSerialPortOperaion.WriteData(start1); this.mSerialPortOperaion.WriteData(start1); } } public static String UnicodeToGBK(String s) { try { String newstring = null; return new String(s.getBytes("GBK"), "ISO-8859-1"); } catch (UnsupportedEncodingException e) { } return s; } }