NfcTagParser.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package com.epson.mobilephone.common.wifidirect;
  2. import com.google.common.primitives.UnsignedBytes;
  3. import org.apache.commons.lang.ArrayUtils;
  4. import org.opencv.imgproc.Imgproc;
  5. import epson.print.CommonDefine;
  6. public class NfcTagParser {
  7. public static final int FLAG_DISABLE_WIFI = 16777216;
  8. public static final int FLAG_INFRASTRUCTURE = 2;
  9. public static final int FLAG_LOCKED_BY_ADMIN = 65536;
  10. public static final int FLAG_MAX_CONNECTED = 256;
  11. public static final int FLAG_POWER_STATUS = 1;
  12. public static final int FLAG_SIMPLEAP_STATUS = 4;
  13. public static final int FLAG_SIMPLEAP_STATUS_5G = 16;
  14. private static final String INVALID_IPADDRESSV4 = "0.0.0.0";
  15. private static final int LENGTH_IPADDRESSV4 = 4;
  16. private static final int LENGTH_MACADDRESS = 6;
  17. private static final int LENGTH_TAGDATA = 290;
  18. private static final int OFFSET_DISABLE_WIFI = 133;
  19. private static final int OFFSET_INFRASTRUCTURE = 130;
  20. private static final int OFFSET_IPADDRESSV4 = 146;
  21. private static final int OFFSET_IPADDRESSV4_SIMPLEAP = 258;
  22. private static final int OFFSET_LOCKED_BY_ADMIN = 132;
  23. private static final int OFFSET_MACADDRESS = 115;
  24. private static final int OFFSET_MAX_CONNECTED = 68;
  25. private static final int OFFSET_MAX_CONNECT_SSID_LENGTH = 66;
  26. private static final int OFFSET_PASSWORD = 2;
  27. private static final int OFFSET_PASSWORD_LENGTH = 0;
  28. private static final int OFFSET_POWER_STATUS = 114;
  29. private static final int OFFSET_SIMPLEAP_STATUS = 131;
  30. private static final int OFFSET_SSID = 69;
  31. protected byte[] tagData = null;
  32. public boolean parseTag(byte[] bArr) {
  33. if (bArr.length != LENGTH_TAGDATA) {
  34. return false;
  35. }
  36. tagData = bArr;
  37. return true;
  38. }
  39. public String getMacAddress() {
  40. return NfcMacAddrUtils.getMacAdressStr(ArrayUtils.subarray(tagData, 115, Imgproc.COLOR_YUV2RGBA_YVYU));
  41. }
  42. public String getSSID() {
  43. byte[] bArr = tagData;
  44. return new String(ArrayUtils.subarray(bArr, 69, (bArr[66] - 1) + 69));
  45. }
  46. public String getPassWord() {
  47. byte[] bArr = tagData;
  48. byte[] subarray = ArrayUtils.subarray(bArr, 2, bArr[0] + 2);
  49. for (int i = 0; i < subarray.length; i++) {
  50. subarray[i] = (byte) ((~subarray[i]) & 255);
  51. }
  52. return new String(subarray);
  53. }
  54. public String getIPAddressV4() {
  55. return formatIPAddressV4(ArrayUtils.subarray(tagData, OFFSET_IPADDRESSV4, 150));
  56. }
  57. public String getIPAddressV4SimpleAP() {
  58. return formatIPAddressV4(ArrayUtils.subarray(tagData, 258, 262));
  59. }
  60. private String formatIPAddressV4(byte[] bArr) {
  61. StringBuffer stringBuffer = new StringBuffer();
  62. for (int i = 0; i < bArr.length; i++) {
  63. stringBuffer.append(String.valueOf(bArr[i] & UnsignedBytes.MAX_VALUE));
  64. if (i == bArr.length - 1) {
  65. break;
  66. }
  67. stringBuffer.append(CommonDefine.DOT);
  68. }
  69. if (INVALID_IPADDRESSV4.equals(stringBuffer.toString())) {
  70. return null;
  71. }
  72. return stringBuffer.toString();
  73. }
  74. private int getPrinterStatus() {
  75. int i = tagData[114] != 0 ? 1 : 0;
  76. if (tagData[130] != 0) {
  77. i |= 2;
  78. }
  79. if ((1 & tagData[131]) != 0) {
  80. i |= 4;
  81. }
  82. if ((tagData[131] & 2) != 0) {
  83. i |= 16;
  84. }
  85. if (tagData[68] != 0) {
  86. i |= 256;
  87. }
  88. if (tagData[132] != 0) {
  89. i |= 65536;
  90. }
  91. return tagData[133] != 0 ? i | 16777216 : i;
  92. }
  93. }