EscprLib.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498
  1. package com.epson.mobilephone.common.escpr;
  2. import android.content.Context;
  3. import android.net.wifi.WifiManager;
  4. import android.os.Bundle;
  5. import android.os.Handler;
  6. import android.os.Message;
  7. import com.box.androidsdk.content.models.BoxUser;
  8. import com.epson.mobilephone.common.maintain.EPS_SUPPLY_INFO;
  9. import com.epson.mobilephone.common.maintain2.BatteryInfo;
  10. import com.epson.mobilephone.common.maintain2.BatteryInfoEx;
  11. import com.epson.mobilephone.common.maintain2.MaintainPrinterInfo2;
  12. import com.epson.mobilephone.common.wifidirect.escprLib;
  13. import epson.print.BuildConfig;
  14. import java.io.ByteArrayOutputStream;
  15. import java.io.PrintStream;
  16. import java.security.MessageDigest;
  17. import java.security.NoSuchAlgorithmException;
  18. import java.util.Arrays;
  19. import java.util.EnumMap;
  20. import java.util.Random;
  21. public class EscprLib {
  22. public static final int EPS_ERR_NONE = 0;
  23. public static final int EPS_ERR_PRINTER_NOT_FOUND = -1300;
  24. private static final int MACADRESS_SIZE = 6;
  25. public static final int MSG_FIND_PRINTER_CALLBACK = 0;
  26. public static final int MSG_NOTIFY_CONTINUEABLE = 1;
  27. public static final int MSG_NOTIFY_ERROR = 2;
  28. public static final int MSG_NOTIFY_PAGE = 30;
  29. private static final int RUNDOM_SIZE = 4;
  30. public static final int SECURITY_TYPE_AUTO = 255;
  31. public static final int SECURITY_TYPE_NONE = 0;
  32. private static final EscprLib instance = new EscprLib();
  33. final int EPS_CANCEL = 1;
  34. final int EPS_CONTINUE = 4;
  35. volatile boolean bInvalidId = false;
  36. private String cardprintPackageName = "com.epson.cardprint";
  37. private String debugString;
  38. private String iPrintPackageName = BuildConfig.APPLICATION_ID;
  39. private Handler mHandler;
  40. private boolean mIsSearch;
  41. volatile String printerId;
  42. volatile String printerIp;
  43. private String printerList;
  44. public enum PrinterFirmInfo {
  45. NicFlg,
  46. NetVer,
  47. MainVer,
  48. FY,
  49. MarketID,
  50. UrlVer
  51. }
  52. public enum snmpParseType {
  53. STRING,
  54. MAC_ADDRESS,
  55. INTEGER,
  56. SECURITY
  57. }
  58. private native int epsWrapperFindPrinter(int i, int i2);
  59. private native int epsWrapperGetFirmwareInfo(byte[] bArr, byte[] bArr2, byte[] bArr3, byte[] bArr4, byte[] bArr5, byte[] bArr6);
  60. private native int epsWrapperGetReadyPrintStatus(int[] iArr);
  61. private native int epsWrapperProbePrinter2(int i, int i2, char[] cArr);
  62. private native int start_job(int i, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10, int i11, int i12, int i13, int i14, int i15, int i16, int i17, int i18, int i19);
  63. private native int start_job2(int i, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10, int i11, int i12);
  64. public native int cancel_print();
  65. public native int cancel_search_printer();
  66. public native int confirm_cancel(boolean z);
  67. public native int confirm_continue(boolean z);
  68. public native int end_job();
  69. public native int end_job(int i);
  70. public native int end_page(boolean z);
  71. public native int epsWrapperCancelFindPrinter();
  72. public native int epsWrapperDoMainteCmd(int i);
  73. public native int epsWrapperGetAutoPowerOnEnable(String str, int[] iArr);
  74. public native int[] epsWrapperGetBatteryInfo();
  75. public native int epsWrapperGetEmaStatus(int[] iArr);
  76. public native String epsWrapperGetId();
  77. public native int epsWrapperGetInkInfo(int[] iArr);
  78. public native int epsWrapperGetInkInfo2(MaintainPrinterInfo2 maintainPrinterInfo2);
  79. public native String epsWrapperGetIp();
  80. public native int[] epsWrapperGetMaintenanceBoxInformation();
  81. public native int[] epsWrapperGetMediaInfo(int i, int i2);
  82. public native int[] epsWrapperGetPaperInfo();
  83. public native int epsWrapperGetStatus(int[] iArr);
  84. public native int epsWrapperGetSupplyInfo(EPS_SUPPLY_INFO eps_supply_info);
  85. public native int epsWrapperGetSupportedMedia(String str);
  86. public native int epsWrapperInitDriver(Context context, int i, byte b);
  87. public native int epsWrapperSetAutoPowerOnEnable(String str, boolean z);
  88. public native int epsWrapperSetEmaStatus(int i);
  89. public native int[] get_color(int i, int i2);
  90. public native int get_duplex(int i, int i2);
  91. public native int get_lang();
  92. public native int[] get_layout(int i, int i2);
  93. public native int[] get_paper_size();
  94. public native int[] get_paper_source(int i, int i2);
  95. public native int[] get_paper_type(int i);
  96. public native int[] get_printable_area();
  97. public native int get_printable_area_info_all(EPS_PRINT_AREA_INFO eps_print_area_info);
  98. public native int[] get_printer_status();
  99. public native int[] get_quality(int i, int i2);
  100. public native int get_start_job_resolution2();
  101. public native int get_supported_media(String str);
  102. public native int get_supported_media2();
  103. public native int init_driver(Context context, String str, byte b);
  104. public native int init_image(String str);
  105. public native boolean is64bit();
  106. public native boolean is_printer_set();
  107. public native int mibCheckMaxofSimpleAP(MIBCommand mIBCommand);
  108. public native int mibEnableSimpleAP(MIBCommand mIBCommand);
  109. public native int mibEnableWiFi(MIBCommand mIBCommand);
  110. public native int mibGetESSIDList(MIBCommand mIBCommand, byte b);
  111. public native int mibGetMacadress(MIBCommand mIBCommand);
  112. public native int mibGetSerial(MIBCommand mIBCommand);
  113. public native int mibGetSimpleAPSSID(MIBCommand mIBCommand);
  114. public native int mibGetStatusInfra(MIBCommand mIBCommand);
  115. public native int mibGetStatusSimpleAP(MIBCommand mIBCommand);
  116. public native int mibIsAdminLocked(MIBCommand mIBCommand);
  117. public native int mibParseResponseAsInt(MIBCommand mIBCommand, int[] iArr);
  118. public native String mibParseResponseAsMacaddress(MIBCommand mIBCommand);
  119. public native String mibParseResponseAsStr(MIBCommand mIBCommand);
  120. public native int mibParseSecResponse(MIBCommand mIBCommand, byte[] bArr);
  121. public native int mibRebootNWwithBLE(MIBCommand mIBCommand);
  122. public native int mibRebootNWwithSNMP(MIBCommand mIBCommand);
  123. public native int mibSecLogin(MIBCommand mIBCommand, byte[] bArr);
  124. public native int mibSecLogout(MIBCommand mIBCommand, byte[] bArr);
  125. public native int mibSecSetPassword(MIBCommand mIBCommand, byte[] bArr, String str);
  126. public native int mibSendRecieveCommand(MIBCommand mIBCommand, MIBCommand mIBCommand2, byte[] bArr);
  127. public native int mibSetSSID(MIBCommand mIBCommand, String str);
  128. public native int mibSetSecurityType(MIBCommand mIBCommand, int i);
  129. public native boolean pageS_needRotate2(int i);
  130. public native int print_jpeg(String str);
  131. public native int print_page();
  132. public native int release_driver();
  133. public native int release_image();
  134. public native int search_device(int i);
  135. public native int search_printer(String str);
  136. public native int search_printer2(String str, String str2, int i, int i2);
  137. public native int set_printer(int i);
  138. public native int start_job_roll(int i, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10, int i11, int i12, int i13, int i14, int i15, int i16);
  139. public native int start_page();
  140. static {
  141. try {
  142. System.loadLibrary("escprlib");
  143. } catch (Exception e) {
  144. e.printStackTrace();
  145. }
  146. }
  147. private EscprLib() {
  148. }
  149. public static EscprLib getInstance() {
  150. return instance;
  151. }
  152. public int init_driver(Context context, String str) {
  153. EpLog.m77i("init_driver :" + str);
  154. EpLog.m77i(is64bit() ? "Native is operating at 64 bit !!" : "Native is operating at 32 bit");
  155. return init_driver(context, str, iPrintPackageName.equals(context.getPackageName()) ? (byte) 8 : 10);
  156. }
  157. public int start_job(int i, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10, int i11, int i12, int i13, int i14, int i15, int i16, int i17, int i18, boolean z) {
  158. return start_job(i, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, z ? 2 : 0);
  159. }
  160. public int start_job2(int i, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10, int i11, boolean z) {
  161. return start_job2(i, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, z ? 2 : 0);
  162. }
  163. public void setHanlder(Handler handler) {
  164. mHandler = handler;
  165. }
  166. public void findPrinterCallback(String str) {
  167. EpLog.i("called findPrinterCallback : %s", str);
  168. if (mHandler != null) {
  169. Message obtain = Message.obtain();
  170. obtain.what = 0;
  171. obtain.obj = str.toString();
  172. mHandler.sendMessage(obtain);
  173. }
  174. }
  175. public void epsNotifyDataChange(String str) {
  176. EpLog.i(" @@@@@@@@@@ called epsNotifyDataChange : %s", str);
  177. if (mHandler != null) {
  178. Message obtain = Message.obtain();
  179. obtain.what = 0;
  180. obtain.obj = str.toString();
  181. mHandler.sendMessage(obtain);
  182. }
  183. }
  184. public void epsNotifyContinueable(int i) {
  185. EpLog.m77i("called epsNotifyContinueable :" + i);
  186. if (mHandler != null) {
  187. Message obtain = Message.obtain();
  188. obtain.what = 1;
  189. obtain.arg1 = i;
  190. mHandler.sendMessage(obtain);
  191. }
  192. }
  193. public void epsNotifyError(int i, int i2, boolean z) {
  194. EpLog.m77i("called epsNotifyError " + i + ":" + i2 + ":" + z);
  195. if (mHandler != null) {
  196. Message obtain = Message.obtain();
  197. obtain.what = 2;
  198. obtain.arg1 = i;
  199. obtain.arg2 = i2;
  200. obtain.obj = Boolean.valueOf(z);
  201. mHandler.sendMessage(obtain);
  202. }
  203. }
  204. public void epsNotifyPage(int i) {
  205. EpLog.m77i("called epsNotifyPage :" + i);
  206. if (mHandler != null) {
  207. Message obtain = Message.obtain();
  208. obtain.what = 30;
  209. obtain.arg1 = i;
  210. mHandler.sendMessage(obtain);
  211. }
  212. }
  213. public int epsGetReadyPrintStatus(EPS_REDYINKINFO eps_redyinkinfo) {
  214. int[] iArr = new int[5];
  215. Arrays.fill(iArr, 0);
  216. int epsWrapperGetReadyPrintStatus = epsWrapperGetReadyPrintStatus(iArr);
  217. eps_redyinkinfo.emaStatus = iArr[0];
  218. eps_redyinkinfo.subscriptionStatus = iArr[1];
  219. eps_redyinkinfo.subscriptionErrorCode = iArr[2];
  220. eps_redyinkinfo.subscriptionMode = iArr[3];
  221. eps_redyinkinfo.subscriptionError = iArr[4];
  222. return epsWrapperGetReadyPrintStatus;
  223. }
  224. public int doFindPrinter(int i, int i2) {
  225. EpLog.i("escprLib2", "**********Call do find printer************");
  226. return epsWrapperFindPrinter(i, i2);
  227. }
  228. public int epsWrapperInitDriver(Context context, int i) {
  229. return epsWrapperInitDriver(context, i, iPrintPackageName.equals(context.getPackageName()) ? (byte) 8 : 10);
  230. }
  231. public int epsWrapperProbePrinter2(int i, String str, String str2, int i2) {
  232. EpLog.i();
  233. if (i2 != 1) {
  234. if (i2 == 3 && str2 != null && str2.length() > 0) {
  235. printerIp = str2;
  236. printerId = str;
  237. int epsWrapperProbePrinter2 = epsWrapperProbePrinter2(i, 2, str2.toCharArray());
  238. if (epsWrapperProbePrinter2 != 0 || !this.bInvalidId) {
  239. return epsWrapperProbePrinter2;
  240. }
  241. return -500001;
  242. }
  243. } else if (str != null && str.length() > 0) {
  244. return epsWrapperProbePrinter2(i, 1, str.toCharArray());
  245. }
  246. return -1300;
  247. }
  248. public void resetIPAdressCheck() {
  249. printerId = null;
  250. printerIp = null;
  251. bInvalidId = false;
  252. }
  253. public void setSearchStt(boolean z) {
  254. mIsSearch = z;
  255. }
  256. private void findPrinterCB() {
  257. EpLog.m77i("JAVA findPrinterCB");
  258. String str = printerList;
  259. if (str != null && str.length() > 0) {
  260. String name = getClass().getName();
  261. EpLog.i(name, "EXTRACT Printer information: " + printerList);
  262. String[] split = printerList.split("\\|\\|");
  263. if (this.printerIp == null || printerId == null || !this.printerIp.equals(split[2]) || printerId.equals(split[4])) {
  264. EpLog.m77i("JAVA mIsSearch == " + mIsSearch);
  265. if (mIsSearch) {
  266. EpLog.m77i("JAVA mHandler == " + mHandler);
  267. if (mHandler != null) {
  268. Message obtain = Message.obtain();
  269. obtain.what = 0;
  270. Bundle bundle = new Bundle();
  271. bundle.putString("index", String.valueOf(Integer.parseInt(split[0]) - 1));
  272. bundle.putString("name", split[1]);
  273. bundle.putString(escprLib.PRINTER_IP, split[2]);
  274. bundle.putString("id", split[4]);
  275. if (split.length >= 6) {
  276. bundle.putString(escprLib.PRINTER_SERIAL_NO, split[5]);
  277. }
  278. if (split.length >= 7) {
  279. bundle.putString("common_devicename", split[6]);
  280. }
  281. if (split.length >= 8) {
  282. bundle.putString(BoxUser.FIELD_LANGUAGE, split[7]);
  283. }
  284. obtain.setData(bundle);
  285. EpLog.m77i("JAVA send message");
  286. mHandler.sendMessage(obtain);
  287. }
  288. }
  289. } else {
  290. bInvalidId = true;
  291. String name2 = getClass().getName();
  292. EpLog.m72e(name2, "Invalid IP Printer: Expected = " + printerId);
  293. }
  294. }
  295. printerList = "";
  296. }
  297. public int epsWrapperPrintErrorNotifyCB(int[] iArr) {
  298. System.out.println("epsWrapperPrintErrorNotifyCB() call");
  299. int i = iArr[0];
  300. int i2 = iArr[1];
  301. PrintStream printStream = System.out;
  302. printStream.println("printer error" + i + ";;;choice type: " + i2);
  303. return 1;
  304. }
  305. public int getFirmwareInfo(EnumMap<PrinterFirmInfo, String> enumMap) {
  306. byte[] bArr = new byte[1];
  307. byte[] bArr2 = new byte[6];
  308. byte[] bArr3 = new byte[7];
  309. byte[] bArr4 = new byte[5];
  310. byte[] bArr5 = new byte[3];
  311. byte[] bArr6 = new byte[3];
  312. int epsWrapperGetFirmwareInfo = epsWrapperGetFirmwareInfo(bArr, bArr2, bArr3, bArr4, bArr5, bArr6);
  313. enumMap.clear();
  314. if (epsWrapperGetFirmwareInfo == 0) {
  315. try {
  316. PrinterFirmInfo printerFirmInfo = PrinterFirmInfo.NicFlg;
  317. enumMap.put(printerFirmInfo, "" + ((char) (bArr[0] + 48)));
  318. enumMap.put(PrinterFirmInfo.NetVer, cStrToString(bArr2));
  319. enumMap.put(PrinterFirmInfo.MainVer, cStrToString(bArr3));
  320. enumMap.put(PrinterFirmInfo.FY, cStrToString(bArr4));
  321. enumMap.put(PrinterFirmInfo.MarketID, cStrToString(bArr5));
  322. enumMap.put(PrinterFirmInfo.UrlVer, cStrToString(bArr6));
  323. } catch (RuntimeException unused) {
  324. enumMap.clear();
  325. }
  326. }
  327. return epsWrapperGetFirmwareInfo;
  328. }
  329. public int getBatteryInfo(BatteryInfo batteryInfo) {
  330. int[] epsWrapperGetBatteryInfo = epsWrapperGetBatteryInfo();
  331. if (epsWrapperGetBatteryInfo[0] == 0) {
  332. batteryInfo.powerSourceType = epsWrapperGetBatteryInfo[1];
  333. batteryInfo.batteryChargeState = epsWrapperGetBatteryInfo[2];
  334. batteryInfo.batteryRemain = epsWrapperGetBatteryInfo[3];
  335. }
  336. return epsWrapperGetBatteryInfo[0];
  337. }
  338. public int getBatteryInfoEx(BatteryInfoEx batteryInfoEx) {
  339. EPS_SUPPLY_INFO eps_supply_info = new EPS_SUPPLY_INFO();
  340. int epsWrapperGetSupplyInfo = epsWrapperGetSupplyInfo(eps_supply_info);
  341. batteryInfoEx.powerSourceType = eps_supply_info.powerSourceEx.powerSource;
  342. batteryInfoEx.number = eps_supply_info.powerSourceEx.number;
  343. batteryInfoEx.batteryType = (int[]) eps_supply_info.powerSourceEx.batteryType.clone();
  344. batteryInfoEx.batteryState = (int[]) eps_supply_info.powerSourceEx.batteryState.clone();
  345. batteryInfoEx.batteryRemain = (int[]) eps_supply_info.powerSourceEx.remaining.clone();
  346. return epsWrapperGetSupplyInfo;
  347. }
  348. private String cStrToString(byte[] bArr) {
  349. String str = new String(bArr);
  350. return str.substring(0, str.indexOf(0));
  351. }
  352. public static byte[] getMd5(byte[] bArr) {
  353. byte[] bArr2 = {0};
  354. try {
  355. MessageDigest instance2 = MessageDigest.getInstance("MD5");
  356. instance2.update(bArr);
  357. return instance2.digest();
  358. } catch (NoSuchAlgorithmException e) {
  359. e.printStackTrace();
  360. return bArr2;
  361. }
  362. }
  363. public byte[] getEngineId(Context context) {
  364. ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(10);
  365. Random random = new Random();
  366. for (int i = 0; i < 4; i++) {
  367. byteArrayOutputStream.write(random.nextInt());
  368. }
  369. String macAddress = ((WifiManager) context.getApplicationContext().getSystemService(Service.WIFI_SERVICE)).getConnectionInfo().getMacAddress();
  370. if (macAddress != null) {
  371. EpLog.d("getEngineId macAdress = " + macAddress);
  372. String[] split = macAddress.split(":", 6);
  373. if (split.length == 6) {
  374. for (int i2 = 0; i2 < 6; i2++) {
  375. byteArrayOutputStream.write((byte) Integer.parseInt(split[i2], 16));
  376. }
  377. }
  378. } else {
  379. byteArrayOutputStream.write(new byte[]{0, 0, 0, 0, 0, 0}, 0, 6);
  380. }
  381. return byteArrayOutputStream.toByteArray();
  382. }
  383. }