public class Globals {
// TODO IMPORTANT CONFIG CHANGES
// ** IMPORTANT CONFIGURATION
private static String serverRealUrl = "http://www.myserver.com/api"; //Real Server configuration
private static String serverLocalUrl = "http://localhost:80/api"; //local configuration
/**
* Substitute you own sender ID here. This is the project number you got
* from the API Console, as described in "Getting Started."
*/
public static String SENDER_ID = "000000";
public static String base64EncodedPublicKey = "xxxxx";
//DEBUG MODO
public static boolean debugModeBoolean = true; //USE in DEBUG MODE
//public static boolean debugModeBoolean = false; //USE in REAL MODE
//PRINT FROM WEB ENABLES
//public static boolean printFronWebEnabled = true; //USE to activate print fron web
public static boolean printFronWebEnabled = false; //USE to deactivate print fron web
//GCM Register
//public static boolean gcmRegisterEnabled = true; //USE to register device in GCM
public static boolean gcmRegisterEnabled = false; // not use gcm services
//IN APP BILLING
//public static boolean inAppBillingModeON = true; //USE in pay app modo on
public static boolean inAppBillingModeON = false; //USE in pay app modo off
private static String internalClassName = "Globals"; // * Tag used on log messages.
public static int deviceType = 0; // * Device type
//0 Pending config (Default as start)
//1 NET Print
//2 RS232 ->Pending
//3 USB
//4 BT
//Google subscriptions
public static boolean mSubscribedToYearlyUsed = false;
// Bluetooth variable Config
public static BluetoothAdapter mBluetoothAdapter;
public static BluetoothSocket mmSocket;
public static BluetoothDevice mmDevice;
public static String logoProcesed = "";
public static OutputStream mmOutputStream;
public static InputStream mmInputStream;
// NET Printer Config
public static String deviceIP = "";
public static int devicePort = 0;
public static int usbDeviceID = 0;
public static int usbVendorID = 0;
public static int usbProductID = 0;
public static String blueToothDeviceAdress = "";
public static int blueToothSpinnerSelected = -1;
public static String tmpDeviceIP = "";
public static int tmpDevicePort = 0;
public static int tmpUsbDeviceID = 0;
public static int tmpUsbVendorID = 0;
public static int tmpUsbProductID = 0;
public static String link_code = "";
public static String tmpBlueToothDeviceAdress = "";
public static String getServerUrl() {
String actualServer = "";
if (debugModeBoolean) {
actualServer = serverLocalUrl;
} else {
actualServer = serverRealUrl;
}
return actualServer;
}
public static String server_registerPrinter = "registerPrinter";
public static String server_getData = "getData";
public static String regid = "";
public static String picturePath = "";
public static void savePreferences(SharedPreferences sharedPrefs) {
Log.i(internalClassName, "savePreferences");
SharedPreferences.Editor editor = sharedPrefs.edit();
editor.putString("usbDeviceID", String.valueOf(usbDeviceID));
editor.putString("usbVendorID", String.valueOf(usbVendorID));
editor.putString("usbProductID", String.valueOf(usbProductID));
editor.putString("blueToothDeviceAdress", String.valueOf(blueToothDeviceAdress));
editor.putString("deviceType", String.valueOf(deviceType));
//Ethernet
editor.putString("deviceIP", String.valueOf(deviceIP));
editor.putString("devicePort", String.valueOf(devicePort));
editor.putString("link_code", String.valueOf(link_code));
editor.putString("picturePath", String.valueOf(picturePath));
editor.putString("logoProcesed", logoProcesed);
Log.i(internalClassName, " deviceType=" + String.valueOf(deviceType));
Log.i(internalClassName, " deviceIP=" + String.valueOf(deviceIP));
Log.i(internalClassName, " devicePort=" + String.valueOf(devicePort));
Log.i(internalClassName, " usbDeviceID=" + String.valueOf(usbDeviceID));
Log.i(internalClassName, " blueToothDeviceAdress=" + String.valueOf(blueToothDeviceAdress));
editor.commit();
}
public static void savePreferenceskitchen(SharedPreferences sharedPrefs) {
Log.i(internalClassName, "savePreferences");
SharedPreferences.Editor editor = sharedPrefs.edit();
editor.putString("usbDeviceID", String.valueOf(usbDeviceID));
editor.putString("usbVendorID", String.valueOf(usbVendorID));
editor.putString("usbProductID", String.valueOf(usbProductID));
editor.putString("blueToothDeviceAdress", String.valueOf(blueToothDeviceAdress));
editor.putString("deviceType", String.valueOf(deviceType));
//Ethernet
editor.putString("deviceIP", String.valueOf(deviceIP));
editor.putString("devicePort", String.valueOf(devicePort));
editor.putString("link_code", String.valueOf(link_code));
editor.putString("picturePath", String.valueOf(picturePath));
editor.putString("logoProcesed", logoProcesed);
Log.i(internalClassName, " deviceType=" + String.valueOf(deviceType));
Log.i(internalClassName, " deviceIP=" + String.valueOf(deviceIP));
Log.i(internalClassName, " devicePort=" + String.valueOf(devicePort));
Log.i(internalClassName, " usbDeviceID=" + String.valueOf(usbDeviceID));
Log.i(internalClassName, " blueToothDeviceAdress=" + String.valueOf(blueToothDeviceAdress));
editor.commit();
}
public static void loadPreferences(SharedPreferences sharedPrefs) {
Log.i(internalClassName, "loadPreferences");
usbDeviceID = mathIntegerFromString(sharedPrefs.getString("usbDeviceID", "0"), 0);
usbVendorID = mathIntegerFromString(sharedPrefs.getString("usbVendorID", "0"), 0);
usbProductID = mathIntegerFromString(sharedPrefs.getString("usbProductID", "0"), 0);
link_code = sharedPrefs.getString("link_code", "");
picturePath = sharedPrefs.getString("picturePath", "");
blueToothDeviceAdress = sharedPrefs.getString("blueToothDeviceAdress", "x:x:x:x");
deviceType = mathIntegerFromString(sharedPrefs.getString("deviceType", "0"), 0);
//Ethernet
deviceIP = sharedPrefs.getString("deviceIP", "192.168.0.98");
devicePort = mathIntegerFromString(sharedPrefs.getString("devicePort", "9100"), 9100);
logoProcesed = sharedPrefs.getString("logoProcesed", "");
Log.i(internalClassName, " deviceType=" + String.valueOf(deviceType));
Log.i(internalClassName, " deviceIP=" + String.valueOf(deviceIP));
Log.i(internalClassName, " devicePort=" + String.valueOf(devicePort));
Log.i(internalClassName, " usbDeviceID=" + String.valueOf(usbDeviceID));
Log.i(internalClassName, " blueToothDeviceAdress=" + String.valueOf(blueToothDeviceAdress));
}
public static void loadPreferenceskitchen(SharedPreferences sharedPrefs) {
Log.i(internalClassName, "loadPreferences");
usbDeviceID = mathIntegerFromString(sharedPrefs.getString("usbDeviceID", "0"), 0);
usbVendorID = mathIntegerFromString(sharedPrefs.getString("usbVendorID", "0"), 0);
usbProductID = mathIntegerFromString(sharedPrefs.getString("usbProductID", "0"), 0);
link_code = sharedPrefs.getString("link_code", "");
picturePath = sharedPrefs.getString("picturePath", "");
blueToothDeviceAdress = sharedPrefs.getString("blueToothDeviceAdress", "x:x:x:x");
deviceType = mathIntegerFromString(sharedPrefs.getString("deviceType", "0"), 0);
//Ethernet
deviceIP = sharedPrefs.getString("deviceIP", "192.168.0.98");
devicePort = mathIntegerFromString(sharedPrefs.getString("devicePort", "9100"), 9100);
logoProcesed = sharedPrefs.getString("logoProcesed", "");
Log.i(internalClassName, " deviceType=" + String.valueOf(deviceType));
Log.i(internalClassName, " deviceIP=" + String.valueOf(deviceIP));
Log.i(internalClassName, " devicePort=" + String.valueOf(devicePort));
Log.i(internalClassName, " usbDeviceID=" + String.valueOf(usbDeviceID));
Log.i(internalClassName, " blueToothDeviceAdress=" + String.valueOf(blueToothDeviceAdress));
}
public static Integer mathIntegerFromString(String inti, Integer defi) {
//used for preferences
Integer returi = defi;
if (!inti.equals("")) {
try {
returi = Integer.valueOf(inti);
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
return returi;
}
public static String prepareDataToPrint(String data) {
//ESC POS Comamnds convertions
data = data.replace("$bold$", "·27·E·1·");
data = data.replace("$unbold$", "·27·E·0·");
data = data.replace("$intro$", "·13··10·");
data = data.replace("$cut$", "·27·m");
data = data.replace("$cutt$", "·27·i");
data = data.replace("$al_left$", "·27·a·0·");
data = data.replace("$al_center$", "·27·a·1·");
data = data.replace("$al_right$", "·27·a·2·");
data = data.replace("$small$", "·27·!·1·");
data = data.replace("$smallh$", "·27·!·17·");
data = data.replace("$smallw$", "·27·!·33·");
data = data.replace("$smallhw$", "·27·!·49·");
data = data.replace("$smallu$", "·27·!·129·");
data = data.replace("$smalluh$", "·27·!·145·");
data = data.replace("$smalluw$", "·27·!·161·");
data = data.replace("$smalluhw$", "·27·!·177·");
data = data.replace("$big$", "·27·!·0·");
data = data.replace("$bigh$", "·27·!·16·");
data = data.replace("$bigw$", "·27·!·32·");
data = data.replace("$bighw$", "·27·!·48·");
data = data.replace("$bigu$", "·27·!·128·");
data = data.replace("$biguh$", "·27·!·144·");
data = data.replace("$biguw$", "·27·!·160·");
data = data.replace("$biguhw$", "·27·!·176·");
data = data.replace("$drawer$", "·27··112··48··200··100·");
data = data.replace("$drawer2$", "·27··112··49··200··100·");
data = data.replace("$enter$", "·13··10·");
data = data.replace("$letrap$", "·27·!·1·");
data = data.replace("$letraph$", "·27·!·17·");
data = data.replace("$letrapw$", "·27·!·33·");
data = data.replace("$letraphw$", "·27·!·49·");
data = data.replace("$letrapu$", "·27·!·129·");
data = data.replace("$letrapuh$", "·27·!·145·");
data = data.replace("$letrapuw$", "·27·!·161·");
data = data.replace("$letrapuhw$", "·27·!·177·");
data = data.replace("$letrag$", "·27·!·0·");
data = data.replace("$letragh$", "·27·!·16·");
data = data.replace("$letragw$", "·27·!·32·");
data = data.replace("$letraghw$", "·27·!·48·");
data = data.replace("$letragu$", "·27·!·128·");
data = data.replace("$letraguh$", "·27·!·144·");
data = data.replace("$letraguw$", "·27·!·160·");
data = data.replace("$letraguhw$", "·27·!·176·");
data = data.replace("$letracorte$", "·27·m");
data = data.replace("$LETRACORTE$", "·27·m");
data = data.replace("$ENTER$", "·13··10·");
data = data.replace("$LETRAP$", "·27·!·1·");
data = data.replace("$LETRAPH$", "·27·!·17·");
data = data.replace("$LETRAPW$", "·27·!·33·");
data = data.replace("$LETRAPHW$", "·27·!·49·");
data = data.replace("$LETRAPU$", "·27·!·129·");
data = data.replace("$LETRAPUH$", "·27·!·145·");
data = data.replace("$LETRAPUW$", "·27·!·161·");
data = data.replace("$LETRAPUHW$", "·27·!·177·");
data = data.replace("$LETRAG$", "·27·!·0·");
data = data.replace("$LETRAGH$", "·27·!·16·");
data = data.replace("$LETRAGW$", "·27·!·32·");
data = data.replace("$LETRAGHW$", "·27·!·48·");
data = data.replace("$LETRAGU$", "·27·!·128·");
data = data.replace("$LETRAGUH$", "·27·!·144·");
data = data.replace("$LETRAGUW$", "·27·!·160·");
data = data.replace("$LETRAGUHW$", "·27·!·176·");
data = data.replace("á", "·160·");
data = data.replace("à", "·133·");
data = data.replace("â", "·131·");
data = data.replace("ä", "·132·");
data = data.replace("å", "·134·");
data = data.replace("Á", "·193·");
data = data.replace("À", "·192·");
data = data.replace("Â", "·194·");
data = data.replace("Ä", "·142·");
data = data.replace("Å", "·143·");
data = data.replace("é", "·130·");
data = data.replace("è", "·138·");
data = data.replace("ê", "·136·");
data = data.replace("ë", "·137·");
//data = data.replace("","··");
data = data.replace("É", "·144·");
data = data.replace("È", "··");
data = data.replace("Ê", "··");
data = data.replace("Ë", "··");
data = data.replace("ñ", "·164·");
data = data.replace("Ñ", "·165·");
//data = data.replace("","··");
data = data.replace("í", "··");
data = data.replace("ì", "·141·");
data = data.replace("î", "·140·");
data = data.replace("ï", "·139·");
//data = data.replace("","··");
data = data.replace("ó", "·149·");
data = data.replace("ò", "··");
data = data.replace("ô", "·147·");
data = data.replace("ö", "·148·");
//data = data.replace("","··");
data = data.replace("Ó", "··");
data = data.replace("Ò", "··");
data = data.replace("Ô", "··");
data = data.replace("Ö", "·153·");
//data = data.replace("","··");
data = data.replace("ú", "··");
data = data.replace("ù", "·151·");
data = data.replace("û", "··");
data = data.replace("ü", "·129·");
//data = data.replace("","··");
data = data.replace("ú", "··");
data = data.replace("ù", "·151·");
data = data.replace("û", "··");
data = data.replace("ü", "·129·");
//data = data.replace("..", "");
for (int l = 0; l <= 255; l++) {
data = data.replace("·" + String.valueOf(l) + "·", String.valueOf(((char) l)));
data = data.replace("$codepage" + String.valueOf(l) + "$", String.valueOf(((char) 27)) + "t" + String.valueOf(((char) l)));
}
Log.d("here----", ""+data);
return data;
}
//Convert string in Byte asccii to print
// public static byte[] stringToBytesASCII(String str) {
// byte[] b = new byte[str.length()];
// for (int i = 0; i < b.length; i++) {
// b[i] = (byte) str.charAt(i);
// }
// Log.d("bytes=-===", ""+b.toString());
// return b;
// }
public static byte[] stringToBytesASCII(String input) {
// int length = input.length();
// byte[] retVal = new byte[length];
//
// for(int i=0; i<length; i++)
// {
// char c = input.charAt(i);
//
// if (c < 127)
// {
// retVal[i] = (byte)c;
// }
// else
// {
// retVal[i] = (byte)(c - 256);
// }
// }
//
// return retVal;
return stringToBytesASCIIOK(input);
// return createImageFromText(100, 500,18 ,input, "Center");
}
// generate demo text
public static String getDemoText(Resources resources, Context context) {
String dataToPrint = "";
StringBuilder textData = new StringBuilder();
textData.append("$codepage32$");
textData.append("$al_center$$al_center$");
textData.append("$big$"+M.getBrandName(context)+"$intro$");
textData.append(M.getRestAddress(context)+"$intro$");
textData.append("Phone: "+ M.getRestPhoneNumber(context)+"$intro$");
textData.append("GST# "+ M.getGST(context)+"$intro$");
textData.append("--------------------------------------$intro$");
textData.append("Order By : "+ M.getWaitername(context)+"\t $intro$");
textData.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"\n");
textData.append("ORDER # RES11-121"+"\n");
textData.append("--------------------------------------\n");
textData.append("TOKEN # "+21+"\t"+ "dine in" +"\n");
textData.append("--------------------------------------\n");
textData.append("Order comment \t");
textData.append("need spicy" + "\n");
textData.append("--------------------------------------\n");
String qty = "1";
textData.append(padLine(qty + " Cheese Mayo Fries", 120 + "", 40, " ") + "\n");
textData.append(padLine(qty + " Chocolate Milkshake", 130 + "", 40, " ") + "\n");
textData.append(padLine(qty + " Veg Sandwich", 100 + "", 40, " ") + "\n");
textData.append(padLine(qty + " بيتزا ", 120 + "", 40, " ") + "\n");
textData.append(padLine(qty + " بيتزا ", 130 + "", 40, " ") + "\n");
textData.append(padLine(qty + " بيتزا ", 100 + "", 40, " ") + "\n");
textData.append("--------------------------------------\n");
textData.append("--------------------------------------\n");
textData.append("SUBTOTAL "+350+"\n");
textData.append("CGST @"+6+"% "+21+"\n");
textData.append("SGST @"+6+"% "+21+"\n");
textData.append("TOTAL 392"+"\n");
textData.append("CASH 400"+"\n");
textData.append("CHANGE "+8+"\n");
textData.append("--------------------------------------\n");
textData.append("Thank you "+"Visit Again\n");
// dataToPrint = dataToPrint + "$codepage0$$intro$";
// dataToPrint = dataToPrint + Globals.getImageDataPosPrinterLogo(resources);
//
// dataToPrint = dataToPrint + "$bighw$PosPrinterDriver.com$intro$$intro$";
// dataToPrint = dataToPrint + "$big$ ESC/POS Types:$intro$ ";
// dataToPrint = dataToPrint + "$small$ ·36·small·36· ->Small type letter$intro$";
// dataToPrint = dataToPrint + "$big$ ·36·big·36· ->Big type letter$intro$";
//
//
// dataToPrint = dataToPrint + "$big$ ESC/POS functions:$intro$ ";
// dataToPrint = dataToPrint + "$big$ ·36·cut·36·: Cutt paper$intro$ ";
// dataToPrint = dataToPrint + "$big$ ·36·cutt·36·: Cutt total paper$intro$ ";
// dataToPrint = dataToPrint + "$big$ ·36·drawer·36·: Open drawer 1 $intro$ ";
// dataToPrint = dataToPrint + "$big$ ·36·drawer2·36·: Open drawer 2 $intro$ ";
//
// dataToPrint = dataToPrint + "Specials characters capabilities $intro$";
//test to find page codes
//for (int l = 50; l <= 255; l++) {
// datos=datos+ "valor "+ String.valueOf(l) + "= ·" + String.valueOf(l) + "·";
//}
/* String defTextToPrint="ABCDEFGHIJKLMNOPQRSTUVWXYZ $intro$aáàâäå AÁÀÂÄÅ $intro$eéèêë " +
"EÉÈÊË$intro$iíìîï IÍÌÎÏ $intro$oóòôö OÓÒÔÖ $intro$uúùûü UÚÙÛÜ $intro$ñ Ñ € $intro$";
dataToPrint = dataToPrint + "$codepage0$$intro$";
dataToPrint = dataToPrint + "Select code page 0 PC437 [U.S.A., Standard Europe]$intro$";
dataToPrint = dataToPrint + defTextToPrint;
dataToPrint = dataToPrint + "$codepage1$$intro$";
dataToPrint = dataToPrint + "Select code page 1 [Katakana]$intro$";
dataToPrint = dataToPrint + defTextToPrint;
dataToPrint = dataToPrint + "$codepage2$$intro$";
dataToPrint = dataToPrint + "Select code page 2 PC850 [Multilingual]$intro$";
dataToPrint = dataToPrint + defTextToPrint;
dataToPrint = dataToPrint + "$codepage3$$intro$";
dataToPrint = dataToPrint + "Select code page 3 PC860 [Portuguese]$intro$";
dataToPrint = dataToPrint + defTextToPrint;
dataToPrint = dataToPrint + "$codepage4$$intro$";
dataToPrint = dataToPrint + "Select code page 4 PC863 [Canadian-French]$intro$";
dataToPrint = dataToPrint + defTextToPrint;
dataToPrint = dataToPrint + "$codepage5$$intro$";
dataToPrint = dataToPrint + "Select code page 5 PC865 [Nordic]$intro$";
dataToPrint = dataToPrint + defTextToPrint;
dataToPrint = dataToPrint + "$codepage17$$intro$";
dataToPrint = dataToPrint + "Select code page 17 PC866 [Cyrillic]$intro$";
dataToPrint = dataToPrint + defTextToPrint;
//0 PC437 [U.S.A., Standard Europe]
//1 Katakana
// 2 PC850 [Multilingual]
// 3 PC860 [Portuguese]
// 4 PC863 [Canadian-French]
// 5 PC865 [Nordic]
// 17 PC866 [Cyrillic #2]
dataToPrint = dataToPrint + "$codepage31$$intro$";
dataToPrint = dataToPrint + "Select code page 31 HEBREW $intro$";
dataToPrint = dataToPrint + defTextToPrint;
//
if (Globals.picturePath != "") {
dataToPrint = dataToPrint + Globals.getImageData();
}
Log.e(internalClassName, "dataToPrint" + dataToPrint);*/
// dataToPrint = dataToPrint +"$intro$$intro$$intro$$intro$$cutt$$intro$";
textData.append("$intro$$intro$$intro$$intro$$cutt$$intro$");
dataToPrint = textData.toString();
return dataToPrint;
}
protected static String padLine(@Nullable String partOne, @Nullable String partTwo, int columnsPerLine, String str){
if(partOne == null) {partOne = "";}
if(partTwo == null) {partTwo = "";}
if(str == null) {str = " ";}
String concat;
if((partOne.length() + partTwo.length()) > columnsPerLine) {
concat = partOne + str + partTwo;
} else {
int padding = columnsPerLine - (partOne.length() + partTwo.length());
concat = partOne + repeat(str, padding) + partTwo;
}
return concat;
}
protected static String repeat(String str, int i){
return new String(new char[i]).replace("\0", str);
}
public static final byte GS = 0x1D;// Group separator
//get actual logo data
public static byte[] getImageData(Bitmap bitmap) {
// if (Globals.picturePath!=null && Globals.picturePath != "") {
// if (Globals.logoProcesed.length() > 0) {
// //response with calculated logo data text
// return Globals.logoProcesed;
// } else {
// byte[] bytes1 = new byte[4];
// bytes1[0] = GS;
// bytes1[1] = 0x76;
// bytes1[2] = 0x30;
// bytes1[3] = 0x00;
//
// byte[] bytes2 = BytesUtil.getBytesFromBitMap(bitmap);
return getBytesFromBitMap(bitmap, 32);
// }
// } else {
// return "";
// }
}
public static byte[] stringToBytesASCIIOK(String str) {
String TAG = "posprinterdriver_AsyncNetPrint";
byte[] b = new byte[0];
try {
b = str.getBytes("US-ASCII");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// byte[] b = new byte[str.length()];
// if (str.length() > 0) {
// Log.i(TAG, " Caracter de 2 partes=" + str + " ->parte1=" + str.charAt(0) + "->" + str.charAt(1));
//
// }
// for (int i = 0; i < b.length; i++) {
//
// b[i] = (byte) str.charAt(i);
//
//
// }
for (int i = 0; i < b.length; i++) {
b[i] = (byte) str.charAt(i);
Log.i("", " CAdena encontrada=" + i + " ->parte1=" + str.charAt(i) + " ->parte1=" + (int) str.charAt(i));
}
return b;
}
私はAndroidアプリを持っています。これは、サーマルプリンターからの英語の印刷で非常にうまく機能しています。コードは完璧です。しかし、問題は、アラビア文字やその他のUnicodeを渡すと正しく印刷されないことです。 。
問題はコードページにあります。文字列をバイトに変換するときに、アラビア語とUnicodeをサポートする別のコードページを試しました。アラビア語のログにも適切な文字列が表示されますが、印刷すると機能しません。
注:私のプリンターはアラビア語をサポートしており、コードページは32です。ユニバーサルプリンターソリューションが必要です。 EpsonSDKを使用していません。 ESC/POSコマンドを使用しています。
最も簡単なのは、EpsonSDKを使用することです。それがEpsonプリンターであるかどうかは関係ないため、USBデバイスのデバイスフィルターのベンダーIDのみがベンダー間で異なります。しかし、Star Micronicsやその他の100%互換機は問題なく動作します。独自のドライバーを作成したい場合、これは文字通り車輪の再発明を意味します。 ESC/POS 付録C、73ページをご覧ください。
アラビア語の場合、IBMコードページ CP864 である13
コマンドを使用して文字テーブルESC t
を選択する必要があります。シーケンスは次のようになります:\x1B \x74 \xD
。また、出力はCP864
としてエンコードし、UTF-16
から変換して、プリンターが予期するコードページと一致するようにする必要があります。