escanLib.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504
  1. package epson.scan.lib;
  2. import android.content.Context;
  3. import android.os.Bundle;
  4. import android.os.Handler;
  5. import android.os.Message;
  6. import android.os.Parcel;
  7. import android.os.Parcelable;
  8. import com.epson.iprint.shared.SharedParamScan;
  9. import com.epson.mobilephone.common.wifidirect.escprLib;
  10. import java.io.File;
  11. import java.util.ArrayList;
  12. import java.util.List;
  13. import epson.common.Constants;
  14. import epson.common.ExternalFileUtils;
  15. import epson.common.Utils;
  16. import epson.print.Util.EPLog;
  17. import epson.scan.activity.ScanContinueParam;
  18. public class escanLib implements Parcelable, EscanLibInterface {
  19. public static final Parcelable.Creator<escanLib> CREATOR = new Parcelable.Creator<escanLib>() {
  20. public escanLib createFromParcel(Parcel parcel) {
  21. return new escanLib();
  22. }
  23. public escanLib[] newArray(int i) {
  24. return new escanLib[i];
  25. }
  26. };
  27. private static int[] escanJobAttrib;
  28. private static int[] escanStatus;
  29. volatile boolean bInvalidId = false;
  30. private String cachePath = null;
  31. private String debugString = "";
  32. int error = 0;
  33. private int[] escanSupportOption;
  34. private int[] escanSupportResolution;
  35. private boolean isAdfRotate = false;
  36. private boolean isCanselOK = false;
  37. private boolean isJobDone = true;
  38. private boolean isScanning;
  39. private List<ScannerInfo> listFoundScanner;
  40. private List<String> listScannedFile = new ArrayList();
  41. private ArrayList<Integer> mEscIVersionList = new ArrayList<>();
  42. private boolean mIsSearch;
  43. private int offsetX;
  44. private int offsetY;
  45. private String printerList = "";
  46. private int scanAreaHeight;
  47. private int scanAreaWidth;
  48. private Handler scanHandler;
  49. private String scanner = "";
  50. volatile String scannerId;
  51. volatile String scannerIp;
  52. /* renamed from: si */
  53. ScannerInfo f414si;
  54. int[] status = new int[3];
  55. private native int escanWrapperInitDriver();
  56. public native int BMPAppendRaster(char[] cArr, char[] cArr2, int i);
  57. public native int BMPClose(char[] cArr);
  58. public native int BMPCreate(char[] cArr, int i, int i2, int i3);
  59. public int describeContents() {
  60. return 0;
  61. }
  62. public native int doScan(int i, int i2, int i3, boolean z, int i4);
  63. public native int escanProbeScanner(int i, int i2, char[] cArr, int i3);
  64. public native int escanProbeScannerById(int i, char[] cArr, char[] cArr2);
  65. public native int escanWrapperCancelFindScanner();
  66. public native int escanWrapperCancelJob();
  67. public native int escanWrapperEndJob();
  68. public native int escanWrapperEndPage(int i);
  69. public native int escanWrapperFindScanner(int i);
  70. public native int escanWrapperGetScanningImageInfo(int[] iArr);
  71. public native int escanWrapperGetStatus(int[] iArr);
  72. public native int escanWrapperGetSupportedOption(int[] iArr, int[] iArr2);
  73. public native int escanWrapperRecvScanImageBlock(int[] iArr);
  74. public native int escanWrapperReleaseDriver();
  75. public native int escanWrapperSetImageName(String str);
  76. public native int escanWrapperSetScanner(int i);
  77. public native int escanWrapperSetWaitingConfirmFlag(boolean z);
  78. public native int escanWrapperStartJob(int[] iArr);
  79. public native int escanWrapperStartPage();
  80. public void writeToParcel(Parcel parcel, int i) {
  81. }
  82. static {
  83. System.loadLibrary("escan");
  84. }
  85. public int escanWrapperInitDriver(Context context) {
  86. cachePath = new File(ExternalFileUtils.getInstance(context).getScannedImageDir(), "escan.cache").getPath();
  87. return escanWrapperInitDriver();
  88. }
  89. private void updateStatusCB(int[] iArr) {
  90. status = iArr;
  91. EPLog.i("escanLib.java", "ESCAN SCAN status = " + status[0] + PreferencesConstants.COOKIE_DELIMITER + status[1] + PreferencesConstants.COOKIE_DELIMITER + status[2]);
  92. }
  93. private void findScannerCB() {
  94. String str = scanner;
  95. if (str != null && str.length() > 0) {
  96. String name = getClass().getName();
  97. EPLog.i(name, "EXTRACT Scanner information: " + scanner);
  98. String[] split = scanner.split("\\|\\|");
  99. f414si = new ScannerInfo();
  100. f414si.setModelName(split[1]);
  101. f414si.setIp(split[2]);
  102. f414si.setFriendlyName(split[3]);
  103. f414si.setScannerId(split[4]);
  104. if (split.length > 6) {
  105. f414si.setCommonDeviceName(split[6]);
  106. } else {
  107. f414si.setCommonDeviceName((String) null);
  108. }
  109. if (this.scannerIp == null || scannerId == null || !this.scannerIp.equals(this.f414si.getIp()) || scannerId.equals(this.f414si.getScannerId())) {
  110. if (this.listFoundScanner == null) {
  111. listFoundScanner = new ArrayList();
  112. mEscIVersionList = new ArrayList<>();
  113. }
  114. if (this.listFoundScanner.size() > 0) {
  115. for (ScannerInfo next : listFoundScanner) {
  116. if (next.getScannerId() != null && f414si.getScannerId().equals(next.getScannerId())) {
  117. return;
  118. }
  119. }
  120. }
  121. if (mIsSearch && scanHandler != null) {
  122. Message obtain = Message.obtain();
  123. obtain.what = 8;
  124. Bundle bundle = new Bundle();
  125. bundle.putString("name", split[1]);
  126. bundle.putString(escprLib.PRINTER_IP, split[2]);
  127. bundle.putString("id", split[4]);
  128. if (split.length > 6) {
  129. bundle.putString("commonDeviceName", split[6]);
  130. }
  131. obtain.setData(bundle);
  132. scanHandler.sendMessage(obtain);
  133. }
  134. listFoundScanner.add(this.f414si);
  135. mEscIVersionList.add(Integer.valueOf(extractEscVersion(split[5])));
  136. } else {
  137. bInvalidId = true;
  138. String name2 = getClass().getName();
  139. EPLog.m307e(name2, "Invalid IP Printer: Expected = " + scannerId);
  140. }
  141. }
  142. scanner = "";
  143. }
  144. private int extractEscVersion(String str) {
  145. if (str == null) {
  146. return -1;
  147. }
  148. switch (str.charAt(0)) {
  149. case '1':
  150. return 1;
  151. case '2':
  152. return 2;
  153. default:
  154. return -1;
  155. }
  156. }
  157. private void recvScanImageBlockCB() {
  158. Handler handler = scanHandler;
  159. if (handler != null) {
  160. handler.sendEmptyMessage(10);
  161. }
  162. }
  163. private void endPageCB() {
  164. Handler handler = scanHandler;
  165. if (handler != null) {
  166. handler.sendEmptyMessage(11);
  167. }
  168. isCanselOK = false;
  169. }
  170. private void javaDebugCB(String str) {
  171. EPLog.i(getClass().getName(), str.toString());
  172. }
  173. private void newFileNotifyCB(String str) {
  174. listScannedFile.add(str.toString());
  175. mEscIVersionList.add(-1);
  176. String name = getClass().getName();
  177. EPLog.i(name, "newFileNotifyCB() call, Scan new file: " + str.toString() + ", totals: " + listScannedFile.size());
  178. isCanselOK = true;
  179. }
  180. public void resetEscanLib() {
  181. isJobDone = false;
  182. error = 0;
  183. status = new int[3];
  184. listFoundScanner = new ArrayList();
  185. mEscIVersionList.clear();
  186. }
  187. public int probeScannerById(String str, String str2) {
  188. resetEscanLib();
  189. resetIPAdressCheck();
  190. int escanProbeScannerById = escanProbeScannerById(120, str.toCharArray(), str2.toCharArray());
  191. EPLog.i("EPSON escanLib", "scanners.probeScannerById() error = " + String.valueOf(escanProbeScannerById));
  192. return escanProbeScannerById;
  193. }
  194. public int probeScannerByIp(String str, String str2) {
  195. resetEscanLib();
  196. resetIPAdressCheck();
  197. scannerId = str;
  198. scannerIp = str2;
  199. int escanProbeScanner = escanProbeScanner(120, 2, str2.toCharArray(), str2.toCharArray().length);
  200. if (escanProbeScanner != 0 || !this.bInvalidId) {
  201. return escanProbeScanner;
  202. }
  203. return -500001;
  204. }
  205. public void resetIPAdressCheck() {
  206. scannerId = null;
  207. scannerId = null;
  208. bInvalidId = false;
  209. }
  210. public int startScanJob(String str) {
  211. isScanning = true;
  212. isCanselOK = false;
  213. error = escanWrapperSetImageName(str);
  214. if (this.error != 0) {
  215. EPLog.i("EPSON escanLib", "scanners.escanWrapperSetImageName(scannedImageNamePath) error = " + String.valueOf(this.error));
  216. return error;
  217. }
  218. EPLog.i("EPSON escanLib", escanJobAttrib[0] + PreferencesConstants.COOKIE_DELIMITER + escanJobAttrib[1] + PreferencesConstants.COOKIE_DELIMITER + escanJobAttrib[2] + PreferencesConstants.COOKIE_DELIMITER + escanJobAttrib[3] + PreferencesConstants.COOKIE_DELIMITER + escanJobAttrib[4] + PreferencesConstants.COOKIE_DELIMITER + escanJobAttrib[5] + PreferencesConstants.COOKIE_DELIMITER + escanJobAttrib[6] + PreferencesConstants.COOKIE_DELIMITER + escanJobAttrib[7] + PreferencesConstants.COOKIE_DELIMITER + escanJobAttrib[8] + PreferencesConstants.COOKIE_DELIMITER + escanJobAttrib[9] + PreferencesConstants.COOKIE_DELIMITER + escanJobAttrib[10] + PreferencesConstants.COOKIE_DELIMITER + escanJobAttrib[11] + PreferencesConstants.COOKIE_DELIMITER + escanJobAttrib[12]);
  219. error = escanWrapperStartJob(escanJobAttrib);
  220. if (this.error != 0) {
  221. EPLog.i("EPSON escanLib", "scanners.escanWrapperStartJob(escanJobAttrib) error = " + String.valueOf(this.error));
  222. return error;
  223. }
  224. EPLog.i("**** isAdfRotate = ", String.valueOf(this.isAdfRotate));
  225. error = doScan(0, 0, 0, isAdfRotate, ScanContinueParam.getAvailableScanPageCount());
  226. escanWrapperEndJob();
  227. isScanning = false;
  228. return error;
  229. }
  230. public int cancelScanJob() {
  231. error = escanWrapperCancelJob();
  232. return error;
  233. }
  234. public int GetSupportedOption() {
  235. escanSupportOption = new int[7];
  236. escanSupportResolution = new int[64];
  237. error = escanWrapperGetSupportedOption(this.escanSupportOption, escanSupportResolution);
  238. EPLog.i("epson.print.escanLib", "getSupportedOption: " + escanSupportOption[1] + PreferencesConstants.COOKIE_DELIMITER + escanSupportOption[2] + PreferencesConstants.COOKIE_DELIMITER + escanSupportOption[3] + PreferencesConstants.COOKIE_DELIMITER + escanSupportOption[4] + PreferencesConstants.COOKIE_DELIMITER + escanSupportOption[5] + PreferencesConstants.COOKIE_DELIMITER + escanSupportOption[6]);
  239. return error;
  240. }
  241. public void makeJobAttribute(Context context, SharedParamScan sharedParamScan) {
  242. escanJobAttrib = new int[13];
  243. escanJobAttrib[0] = Utils.getPrefInt(context, Constants.SCAN_REFS_SUPPORTED_OPTIONS, Constants.SCAN_REFS_OPTIONS_VERSION);
  244. setScanArea(context, sharedParamScan);
  245. escanJobAttrib[7] = sharedParamScan.isAvailable() ? sharedParamScan.getScan_type() : Utils.getPrefInt(context, Constants.SCAN_REFS_USED_SCANNER_PATH, Constants.SCAN_REFS_SETTINGS_COLOR);
  246. if (Utils.getPrefInt(context, Constants.SCAN_REFS_USED_SCANNER_PATH, Constants.SCAN_REFS_SETTINGS_2SIDED) == 1 && Utils.getPrefInt(context, Constants.SCAN_REFS_USED_SCANNER_PATH, Constants.SCAN_REFS_SETTINGS_SOURCE) == 1) {
  247. escanJobAttrib[8] = 2;
  248. } else if (Utils.getPrefInt(context, Constants.SCAN_REFS_USED_SCANNER_PATH, Constants.SCAN_REFS_SETTINGS_2SIDED) == 0 && Utils.getPrefInt(context, Constants.SCAN_REFS_USED_SCANNER_PATH, Constants.SCAN_REFS_SETTINGS_SOURCE) == 1) {
  249. escanJobAttrib[8] = 1;
  250. } else {
  251. escanJobAttrib[8] = 0;
  252. }
  253. int[] iArr = escanJobAttrib;
  254. iArr[9] = 1;
  255. iArr[10] = Utils.getPrefInt(context, Constants.SCAN_REFS_USED_SCANNER_PATH, Constants.SCAN_REFS_SETTINGS_GAMMA);
  256. escanJobAttrib[11] = Utils.getPrefInt(context, Constants.SCAN_REFS_USED_SCANNER_PATH, Constants.SCAN_REFS_SETTINGS_DENSITY);
  257. if (escanJobAttrib[8] == 2) {
  258. isAdfRotate = Utils.getPrefBoolean(context, Constants.SCAN_REFS_USED_SCANNER_PATH, Constants.SCAN_REFS_SETTINGS_ROTATE);
  259. } else {
  260. isAdfRotate = false;
  261. }
  262. escanJobAttrib[12] = Utils.getPrefInt(context, Constants.SCAN_REFS_USED_SCANNER_PATH, Constants.SCAN_REFS_SETTINGS_ADF_PAPER_GUIDE);
  263. EPLog.i("makeJobAttribute", "**** PAPER_GUIDE = " + escanJobAttrib[12]);
  264. }
  265. public void setScanArea(Context context, SharedParamScan sharedParamScan) {
  266. int i;
  267. int[] iArr = escanJobAttrib;
  268. if (sharedParamScan.isAvailable()) {
  269. i = sharedParamScan.getRes_main();
  270. } else {
  271. i = Utils.getPrefInt(context, Constants.SCAN_REFS_USED_SCANNER_PATH, Constants.SCAN_REFS_SETTINGS_RESOLUTION);
  272. }
  273. iArr[1] = i;
  274. int[] iArr2 = escanJobAttrib;
  275. iArr2[2] = offsetX;
  276. iArr2[3] = offsetY;
  277. iArr2[4] = sharedParamScan.isAvailable() ? sharedParamScan.getPixel_main() : scanAreaWidth;
  278. escanJobAttrib[5] = sharedParamScan.isAvailable() ? sharedParamScan.getPixel_sub() : scanAreaHeight;
  279. int[] iArr3 = escanJobAttrib;
  280. int i2 = iArr3[1];
  281. if (i2 == 75) {
  282. iArr3[6] = 16;
  283. } else if (i2 != 300) {
  284. iArr3[6] = 8;
  285. } else {
  286. iArr3[6] = 4;
  287. }
  288. }
  289. public int getError() {
  290. return error;
  291. }
  292. public void setError(int i) {
  293. error = i;
  294. }
  295. public void setJobDone(boolean z) {
  296. isJobDone = z;
  297. }
  298. public boolean isJobDone() {
  299. return isJobDone;
  300. }
  301. public int[] getEscanSupportOption() {
  302. return escanSupportOption;
  303. }
  304. public void setEscanSupportOption(int[] iArr) {
  305. escanSupportOption = iArr;
  306. }
  307. public int[] getEscanSupportResolution() {
  308. return escanSupportResolution;
  309. }
  310. public void setEscanSupportResolution(int[] iArr) {
  311. escanSupportResolution = iArr;
  312. }
  313. public int getOffsetX() {
  314. return offsetX;
  315. }
  316. public void setOffsetX(int i) {
  317. offsetX = i;
  318. }
  319. public int getOffsetY() {
  320. return offsetY;
  321. }
  322. public void setOffsetY(int i) {
  323. offsetY = i;
  324. }
  325. public int getScanAreaWidth() {
  326. return scanAreaWidth;
  327. }
  328. public void setScanAreaWidth(int i) {
  329. scanAreaWidth = i;
  330. }
  331. public int getScanAreaHeight() {
  332. return scanAreaHeight;
  333. }
  334. public void setScanAreaHeight(int i) {
  335. scanAreaHeight = i;
  336. }
  337. public List<ScannerInfo> getListFoundScanner() {
  338. return listFoundScanner;
  339. }
  340. public void setListFoundScanner(List<ScannerInfo> list) {
  341. listFoundScanner = list;
  342. }
  343. public List<String> getListScannedFile() {
  344. return listScannedFile;
  345. }
  346. public void setListScannedFile(List<String> list) {
  347. listScannedFile = list;
  348. }
  349. public int getEscIVersion(int i) {
  350. if (i < 0 || i >= mEscIVersionList.size()) {
  351. return -1;
  352. }
  353. return mEscIVersionList.get(i).intValue();
  354. }
  355. public boolean isScanning() {
  356. return isScanning;
  357. }
  358. public void setScanning(boolean z) {
  359. isScanning = z;
  360. }
  361. public int[] getStatus() {
  362. return status;
  363. }
  364. public void setStatus(int[] iArr) {
  365. status = iArr;
  366. }
  367. public boolean isCanselOK() {
  368. return isCanselOK;
  369. }
  370. public Handler getScanHandler() {
  371. return scanHandler;
  372. }
  373. public void setScanHandler(Handler handler) {
  374. scanHandler = handler;
  375. }
  376. public void setSearchStt(boolean z) {
  377. mIsSearch = z;
  378. }
  379. public boolean getSearchStt() {
  380. return mIsSearch;
  381. }
  382. public ScannerInfo probeByIpAndGetScannerInfo(String str, String str2) {
  383. List<ScannerInfo> listFoundScanner2;
  384. resetEscanLib();
  385. if (str == null || str.isEmpty()) {
  386. str = null;
  387. }
  388. if (probeScannerByIp(str, str2) == 0 && (listFoundScanner2 = getListFoundScanner()) != null) {
  389. return listFoundScanner2.get(0);
  390. }
  391. return null;
  392. }
  393. @Nullable
  394. public I1ScanParams getScanParams() {
  395. int[] iArr = escanJobAttrib;
  396. if (iArr == null || iArr.length < 3) {
  397. return null;
  398. }
  399. I1ScanParams i1ScanParams = new I1ScanParams();
  400. switch (escanJobAttrib[8]) {
  401. case 0:
  402. i1ScanParams.inputDevice = 0;
  403. i1ScanParams.twoSide = 0;
  404. break;
  405. case 1:
  406. i1ScanParams.inputDevice = 1;
  407. i1ScanParams.twoSide = 0;
  408. break;
  409. case 2:
  410. i1ScanParams.inputDevice = 1;
  411. i1ScanParams.twoSide = 1;
  412. break;
  413. default:
  414. return null;
  415. }
  416. int[] iArr2 = escanJobAttrib;
  417. i1ScanParams.colorType = iArr2[7];
  418. i1ScanParams.resolution = iArr2[1];
  419. i1ScanParams.gamma = iArr2[10];
  420. i1ScanParams.brightness = 255 - iArr2[11];
  421. return i1ScanParams;
  422. }
  423. }