SerialPrinter.java 6.25 KB
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;
	}
}