fix: decode base64-encoded file content

This commit is contained in:
2026-05-27 12:21:08 -05:00
parent 32a4163bec
commit 00d75e39f5
@@ -1,206 +1,310 @@
cGFja2FnZSBhbmRyb2lkLnNlcmlhbHBvcnQubWFuYWdlcjsKCmltcG9ydCBhbmRyb2lkLmNvbnRl package android.serialport.manager;
bnQuQ29udGV4dDsKaW1wb3J0IGFuZHJvaWQuc2VyaWFscG9ydC5tb2RlbC5QcmludGVyUmVzcG9u
c2VNb2RlbDsKaW1wb3J0IGFuZHJvaWQuc2VyaWFscG9ydC51dGlscy5CeXRlVXRpbDsKaW1wb3J0 import android.content.Context;
IGFuZHJvaWQuc2VyaWFscG9ydC51dGlscy5Mb2dnZXI7CgpwdWJsaWMgY2xhc3MgRmFjdG9yeU1v import android.serialport.model.PrinterResponseModel;
ZGVQcm9jZXNzTWFuYWdlciB7CiAgICBwcml2YXRlIENvbnRleHQgbUNvbnRleHQ7CiAgICBwcml2 import android.serialport.utils.ByteUtil;
YXRlIHN0YXRpYyBGYWN0b3J5TW9kZVByb2Nlc3NNYW5hZ2VyIG1Qcm90b2NvbE1hbmFnZXI7CiAg import android.serialport.utils.Logger;
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVE9UQUxfQllURVMgPSA2NDsKICAgIC8vUHJpbnQg
UmVxdWVzdCBBbnN3ZXIKICAgIC8vRmlsZSBBdmFpbGFibGUKICAgIHByaXZhdGUgZmluYWwgaW50 public class FactoryModeProcessManager {
IEZNX1JFUVVFU1RfQUxMT1cgPSAweDAxOwogICAgcHJpdmF0ZSBmaW5hbCBpbnQgRk1fUkVRVUVT private Context mContext;
VF9SRUpFQ1QgPSAweEZGOwoKICAgIHByaXZhdGUgZmluYWwgaW50IE5PTkVfRVJST1IgPSAweDAw private static FactoryModeProcessManager mProtocolManager;
OwogICAgcHJpdmF0ZSBmaW5hbCBpbnQgU1lTVEVNX09WRVJfSEVBVCA9IDB4MDU7CiAgICBwcml2 private static final int TOTAL_BYTES = 64;
YXRlIGZpbmFsIGludCBTWVNURU1fT1ZFUl9DT0xEID0gMHgwNjsKICAgIHByaXZhdGUgZmluYWwg //Print Request Answer
aW50IERVUklOR19VUEdSQURJTkcgPSAweDBFOwogICAgcHJpdmF0ZSBmaW5hbCBpbnQgRFVSSU5H //File Available
X1BSSU5USU5HID0gMHgxMDsKCgogICAgLy9FbmQgb2YgcHJpbnRlcgogICAgcHJpdmF0ZSBmaW5h private final int FM_REQUEST_ALLOW = 0x01;
bCBpbnQgRU5EX09GX1BSSU5UX1NVQ0NFU1MgPSAweDU1OwogICAgcHJpdmF0ZSBmaW5hbCBpbnQg private final int FM_REQUEST_REJECT = 0xFF;
RU5EX09GX1BSSU5UX0VSUk9SID0gMHhBMDsKCiAgICAvL0ZXIFZhcmlhYmxlCiAgICAvL1VwZ3Jh
ZGUgRXJyb3IgTWVzc2FnZSAoZm9yIFVwZ3JhZGVFcnJNZXNzYWdlKQogICAgcHJpdmF0ZSBmaW5h private final int NONE_ERROR = 0x00;
bCBpbnQgRklMRV9FUlJPUiA9IDB4MDE7CgogICAgLy9QYXBlciBUcmF5CiAgICBwcml2YXRlIGZp private final int SYSTEM_OVER_HEAT = 0x05;
bmFsIGludCBQQVBFUl9UUkFZX0VNUFRZID0gMHgwMTsKCiAgICBwcml2YXRlIEZhY3RvcnlNb2Rl private final int SYSTEM_OVER_COLD = 0x06;
UHJvY2Vzc01hbmFnZXIoQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgbUNvbnRleHQgPSBjb250 private final int DURING_UPGRADING = 0x0E;
ZXh0OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgRmFjdG9yeU1vZGVQcm9jZXNzTWFuYWdlciBn private final int DURING_PRINTING = 0x10;
ZXRJbnN0YW5jZShDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICBpZiAobVByb3RvY29sTWFuYWdl
ciA9PSBudWxsKSB7CiAgICAgICAgICAgIG1Qcm90b2NvbE1hbmFnZXIgPSBuZXcgRmFjdG9yeU1v
ZGVQcm9jZXNzTWFuYWdlcihjb250ZXh0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1Qcm90 //End of printer
b2NvbE1hbmFnZXI7CiAgICB9CiAgICAvKioKICAgICAqIHBhcnNlIGZhY3RvcnkgbW9kZSByZXF1 private final int END_OF_PRINT_SUCCESS = 0x55;
ZXN0IGJ5dGUgcmVzcG9uc2UKICAgICAqCiAgICAgKiBAcGFyYW0gcGF5bG9hZCAtIFByaW50ZXIg private final int END_OF_PRINT_ERROR = 0xA0;
cGF5bG9hZAogICAgICogQHJldHVybiAtIFByaW50ZXJSZXNwb25zZSBNb2RlbChJc1N1Y2Nlc3Ms
IE1lc3NhZ2UsIEVycm9yQ29kZSkKICAgICAqLwogICAgcHVibGljIFByaW50ZXJSZXNwb25zZU1v //FW Variable
ZGVsIHBhcnNlRk1SZXF1ZXN0QUNLUHJvY2VzcyhieXRlW10gcGF5bG9hZCkgewogICAgICAgIC8v //Upgrade Error Message (for UpgradeErrMessage)
MHgxQgkweDJBCTB4NDMJMHg0MQkweDAxCTB4MDEJMHhGMAkweDAwCUFsbG93OiAweDAxIFJlamVj private final int FILE_ERROR = 0x01;
dDoweEZGCiAgICAgICAgUHJpbnRlclJlc3BvbnNlTW9kZWwgcmVzcG9uc2UgPSBudWxsOwogICAg
ICAgIGlmIChwYXlsb2FkICE9IG51bGwgJiYgcGF5bG9hZC5sZW5ndGggPT0gVE9UQUxfQllURVMp //Paper Tray
IHsKICAgICAgICAgICAgZmluYWwgYnl0ZSByZXF1ZXN0QW5zd2VyID0gcGF5bG9hZFs4XTsKICAg private final int PAPER_TRAY_EMPTY = 0x01;
ICAgICAgICAgcmVzcG9uc2UgPSBuZXcgUHJpbnRlclJlc3BvbnNlTW9kZWwoKTsKICAgICAgICAg
ICAgTG9nZ2VyLmQoIkZNICByZXF1ZXN0QW5zd2VyOiAiK0J5dGVVdGlsLmJ5dGVzVG9IZXhXaXRo private FactoryModeProcessManager(Context context) {
U3BhY2UocmVxdWVzdEFuc3dlcikpOwogICAgICAgICAgICBpZiAocmVxdWVzdEFuc3dlciA9PSAo mContext = context;
Ynl0ZSkgRk1fUkVRVUVTVF9SRUpFQ1QpIHsKICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldFN1 }
Y2Nlc3MoZmFsc2UpOwogICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0TWVzc2FnZSgiRmFjdG9y
eSBNb2RlIFJlamVjdGVkIik7CiAgICAgICAgICAgIH1lbHNlIGlmIChyZXF1ZXN0QW5zd2VyID09 public static FactoryModeProcessManager getInstance(Context context) {
IEZNX1JFUVVFU1RfQUxMT1cpIHsKICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldFN1Y2Nlc3Mo if (mProtocolManager == null) {
dHJ1ZSk7CiAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRTdWNjZXNzQ29kZShGTV9SRVFVRVNU mProtocolManager = new FactoryModeProcessManager(context);
X0FMTE9XKTsKICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldE1lc3NhZ2UoIkZhY3RvcnkgTW9k }
ZSBBbGxvd2VkIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXNwb25z return mProtocolManager;
ZS5zZXRTdWNjZXNzKHRydWUpOwogICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0U3VjY2Vzc0Nv }
ZGUoRk1fUkVRVUVTVF9BTExPVyk7CiAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRNZXNzYWdl /**
KCJGYWN0b3J5IE1vZGUgQWxsb3dlZCIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAg * parse factory mode request byte response
IHJldHVybiByZXNwb25zZTsKICAgIH0KCiAgICAvKioKICAgICAqIHBhcnNlIGZhY3RvcnkgbW9k *
ZSBidXJuLWluIGJ5dGUgcmVzcG9uc2UKICAgICAqCiAgICAgKiBAcGFyYW0gcGF5bG9hZCAtIFBy * @param payload - Printer payload
aW50ZXIgcGF5bG9hZAogICAgICogQHJldHVybiAtIFByaW50ZXJSZXNwb25zZSBNb2RlbChJc1N1 * @return - PrinterResponse Model(IsSuccess, Message, ErrorCode)
Y2Nlc3MsIE1lc3NhZ2UsIEVycm9yQ29kZSkKICAgICAqLwogICAgcHVibGljIFByaW50ZXJSZXNw */
b25zZU1vZGVsIHBhcnNlQnVybkluQWNrUHJvY2VzcyhieXRlW10gcGF5bG9hZCkgewogICAgICAg public PrinterResponseModel parseFMRequestACKProcess(byte[] payload) {
IC8vMHgxQgkweDJBCTB4NDMJMHg0MQkweDAxCTB4MDEJMHhGMAkweDAxCiAgICAgICAgYnl0ZSBv //0x1B 0x2A 0x43 0x41 0x01 0x01 0xF0 0x00 Allow: 0x01 Reject:0xFF
bmVDaGFyICAgPSAweDFCOwogICAgICAgIGJ5dGUgdHdvQ2hhciAgID0gMHgyQTsKICAgICAgICBi PrinterResponseModel response = null;
eXRlIHRocmVlQ2hhciA9IDB4NDM7CiAgICAgICAgYnl0ZSBmb3VyQ2hhciAgPSAweDQxOwogICAg if (payload != null && payload.length == TOTAL_BYTES) {
ICAgIGJ5dGUgZml2ZUNoYXIgID0gMHgwMTsKICAgICAgICBieXRlIHNpeENoYXIgICA9IDB4MDE7 final byte requestAnswer = payload[8];
CiAgICAgICAgYnl0ZSBzZXZlbkNoYXIgPSAoYnl0ZSkweEYwOwogICAgICAgIGJ5dGUgZWlnaHRD response = new PrinterResponseModel();
aGFyID0gMHgwMTsKICAgICAgICBQcmludGVyUmVzcG9uc2VNb2RlbCByZXNwb25zZSA9IG51bGw7 Logger.d("FM requestAnswer: "+ByteUtil.bytesToHexWithSpace(requestAnswer));
CiAgICAgICAgaWYgKHBheWxvYWQgIT0gbnVsbCAmJiBwYXlsb2FkLmxlbmd0aCA9PSBUT1RBTF9C if (requestAnswer == (byte) FM_REQUEST_REJECT) {
WVRFUykgewogICAgICAgICAgICByZXNwb25zZSA9IG5ldyBQcmludGVyUmVzcG9uc2VNb2RlbCgp response.setSuccess(false);
OwogICAgICAgICAgICBpZiAob25lQ2hhciA9PSBwYXlsb2FkWzBdCiAgICAgICAgICAgICAgICAg response.setMessage("Factory Mode Rejected");
ICAgJiYgdHdvQ2hhciA9PSBwYXlsb2FkWzFdCiAgICAgICAgICAgICAgICAgICAgJiYgdGhyZWVD }else if (requestAnswer == FM_REQUEST_ALLOW) {
aGFyID09IHBheWxvYWRbMl0KICAgICAgICAgICAgICAgICAgICAmJiBmb3VyQ2hhciA9PSBwYXls response.setSuccess(true);
b2FkWzNdCiAgICAgICAgICAgICAgICAgICAgJiYgZml2ZUNoYXIgPT0gcGF5bG9hZFs0XQogICAg response.setSuccessCode(FM_REQUEST_ALLOW);
ICAgICAgICAgICAgICAgICYmIHNpeENoYXIgPT0gcGF5bG9hZFs1XQogICAgICAgICAgICAgICAg response.setMessage("Factory Mode Allowed");
ICAgICYmIHNldmVuQ2hhciA9PSBwYXlsb2FkWzZdCiAgICAgICAgICAgICAgICAgICAgJiYgZWln } else {
aHRDaGFyID09IHBheWxvYWRbN10pIHsKICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldFN1Y2Nl response.setSuccess(true);
c3ModHJ1ZSk7CiAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRTdWNjZXNzQ29kZShGTV9SRVFV response.setSuccessCode(FM_REQUEST_ALLOW);
RVNUX0FMTE9XKTsKICAgICAgICAgICAgICAgIExvZ2dlci5kKCAiQnVybkluQSBTdWNjZXNzIik7 response.setMessage("Factory Mode Allowed");
CiAgICAgICAgICAgIH0gZWxzZSAgewogICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0U3VjY2Vz }
cyhmYWxzZSk7CiAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRFcnJvckNvZGUoRk1fUkVRVUVT }
VF9SRUpFQ1QpOwogICAgICAgICAgICAgICAgTG9nZ2VyLmQoICJCdXJuSW5BIFJlamVjdCIpOwog return response;
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXNwb25zZTsKICAgIH0KICAgIC8q }
KgogICAgICogcGFyc2UgZmFjdG9yeSBtb2RlIGNhbWVyYSBieXRlIHJlc3BvbnNlCiAgICAgKgog
ICAgICogQHBhcmFtIHBheWxvYWQgLSBQcmludGVyIHBheWxvYWQKICAgICAqIEByZXR1cm4gLSBQ /**
cmludGVyUmVzcG9uc2UgTW9kZWwoSXNTdWNjZXNzLCBNZXNzYWdlLCBFcnJvckNvZGUpCiAgICAg * parse factory mode burn-in byte response
Ki8KICAgIHB1YmxpYyBQcmludGVyUmVzcG9uc2VNb2RlbCBwYXJzZUNhbWVyYUFja1Byb2Nlc3Mo *
Ynl0ZVtdIHBheWxvYWQpIHsKICAgICAgICAvLzB4MUIJMHgyQQkweDQzCTB4NDEJMHgwMQkweDAx * @param payload - Printer payload
CTB4RjAJMHgwMgogICAgICAgIGJ5dGUgb25lQ2hhciAgID0gMHgxQjsKICAgICAgICBieXRlIHR3 * @return - PrinterResponse Model(IsSuccess, Message, ErrorCode)
b0NoYXIgICA9IDB4MkE7CiAgICAgICAgYnl0ZSB0aHJlZUNoYXIgPSAweDQzOwogICAgICAgIGJ5 */
dGUgZm91ckNoYXIgID0gMHg0MTsKICAgICAgICBieXRlIGZpdmVDaGFyICA9IDB4MDE7CiAgICAg public PrinterResponseModel parseBurnInAckProcess(byte[] payload) {
ICAgYnl0ZSBzaXhDaGFyICAgPSAweDAxOwogICAgICAgIGJ5dGUgc2V2ZW5DaGFyID0gKGJ5dGUp //0x1B 0x2A 0x43 0x41 0x01 0x01 0xF0 0x01
MHhGMDsKICAgICAgICBieXRlIGVpZ2h0Q2hhciA9IDB4MDI7CiAgICAgICAgUHJpbnRlclJlc3Bv byte oneChar = 0x1B;
bnNlTW9kZWwgcmVzcG9uc2UgPSBudWxsOwogICAgICAgIGlmIChwYXlsb2FkICE9IG51bGwgJiYg byte twoChar = 0x2A;
cGF5bG9hZC5sZW5ndGggPT0gVE9UQUxfQllURVMpIHsKICAgICAgICAgICAgcmVzcG9uc2UgPSBu byte threeChar = 0x43;
ZXcgUHJpbnRlclJlc3BvbnNlTW9kZWwoKTsKICAgICAgICAgICAgaWYgKG9uZUNoYXIgPT0gcGF5 byte fourChar = 0x41;
bG9hZFswXQogICAgICAgICAgICAgICAgICAgICYmIHR3b0NoYXIgPT0gcGF5bG9hZFsxXQogICAg byte fiveChar = 0x01;
ICAgICAgICAgICAgICAgICYmIHRocmVlQ2hhciA9PSBwYXlsb2FkWzJdCiAgICAgICAgICAgICAg byte sixChar = 0x01;
ICAgICAgJiYgZm91ckNoYXIgPT0gcGF5bG9hZFszXQogICAgICAgICAgICAgICAgICAgICYmIGZp byte sevenChar = (byte)0xF0;
dmVDaGFyID09IHBheWxvYWRbNF0KICAgICAgICAgICAgICAgICAgICAmJiBzaXhDaGFyID09IHBh byte eightChar = 0x01;
eWxvYWRbNV0KICAgICAgICAgICAgICAgICAgICAmJiBzZXZlbkNoYXIgPT0gcGF5bG9hZFs2XQog PrinterResponseModel response = null;
ICAgICAgICAgICAgICAgICAgICYmIGVpZ2h0Q2hhciA9PSBwYXlsb2FkWzddKSB7CiAgICAgICAg if (payload != null && payload.length == TOTAL_BYTES) {
ICAgICAgICByZXNwb25zZS5zZXRTdWNjZXNzKHRydWUpOwogICAgICAgICAgICAgICAgcmVzcG9u response = new PrinterResponseModel();
c2Uuc2V0U3VjY2Vzc0NvZGUoRk1fUkVRVUVTVF9BTExPVyk7CiAgICAgICAgICAgICAgICBMb2dn if (oneChar == payload[0]
ZXIuZCggIkZNIENhbWVyYSBTdWNjZXNzIik7CiAgICAgICAgICAgIH0gZWxzZSAgewogICAgICAg && twoChar == payload[1]
ICAgICAgICAgcmVzcG9uc2Uuc2V0U3VjY2VzcyhmYWxzZSk7CiAgICAgICAgICAgICAgICByZXNw && threeChar == payload[2]
b25zZS5zZXRFcnJvckNvZGUoRk1fUkVRVUVTVF9SRUpFQ1QpOwogICAgICAgICAgICAgICAgTG9n && fourChar == payload[3]
Z2VyLmQoICJGTSBDYW1lcmEgUmVqZWN0Iik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg && fiveChar == payload[4]
ICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfQogICAgLyoqCiAgICAgKiBwYXJzZSBmYWN0b3J5IG1v && sixChar == payload[5]
ZGUgRlFDIGJ5dGUgcmVzcG9uc2UKICAgICAqCiAgICAgKiBAcGFyYW0gcGF5bG9hZCAtIFByaW50 && sevenChar == payload[6]
ZXIgcGF5bG9hZAogICAgICogQHJldHVybiAtIFByaW50ZXJSZXNwb25zZSBNb2RlbChJc1N1Y2Nl && eightChar == payload[7]) {
c3MsIE1lc3NhZ2UsIEVycm9yQ29kZSkKICAgICAqLwogICAgcHVibGljIFByaW50ZXJSZXNwb25z response.setSuccess(true);
ZU1vZGVsIHBhcnNlRlFDQWNrUHJvY2VzcyhieXRlW10gcGF5bG9hZCkgewogICAgICAgIC8vMHgx response.setSuccessCode(FM_REQUEST_ALLOW);
QgkweDJBCTB4NDMJMHg0MQkweDAxCTB4MDEJMHhGMAkweDAzCiAgICAgICAgYnl0ZSBvbmVDaGFy Logger.d( "BurnInA Success");
ICAgPSAweDFCOwogICAgICAgIGJ5dGUgdHdvQ2hhciAgID0gMHgyQTsKICAgICAgICBieXRlIHRo } else {
cmVlQ2hhciA9IDB4NDM7CiAgICAgICAgYnl0ZSBmb3VyQ2hhciAgPSAweDQxOwogICAgICAgIGJ5 response.setSuccess(false);
dGUgZml2ZUNoYXIgID0gMHgwMTsKICAgICAgICBieXRlIHNpeENoYXIgICA9IDB4MDE7CiAgICAg response.setErrorCode(FM_REQUEST_REJECT);
ICAgYnl0ZSBzZXZlbkNoYXIgPSAoYnl0ZSkweEYwOwogICAgICAgIGJ5dGUgZWlnaHRDaGFyID0g Logger.d( "BurnInA Reject");
MHgwMzsKICAgICAgICBQcmludGVyUmVzcG9uc2VNb2RlbCByZXNwb25zZSA9IG51bGw7CiAgICAg }
ICAgaWYgKHBheWxvYWQgIT0gbnVsbCAmJiBwYXlsb2FkLmxlbmd0aCA9PSBUT1RBTF9CWVRFU }
ikgewogICAgICAgICAgICByZXNwb25zZSA9IG5ldyBQcmludGVyUmVzcG9uc2VNb2RlbCgpOwog return response;
ICAgICAgICAgICBpZiAob25lQ2hhciA9PSBwYXlsb2FkWzBdCiAgICAgICAgICAgICAgICAgICAg }
JiYgdHdvQ2hhciA9PSBwYXlsb2FkWzFdCiAgICAgICAgICAgICAgICAgICAgJiYgdGhyZWVDaGFy /**
ID09IHBheWxvYWRbMl0KICAgICAgICAgICAgICAgICAgICAmJiBmb3VyQ2hhciA9PSBwYXlsb2Fk * parse factory mode camera byte response
WzNdCiAgICAgICAgICAgICAgICAgICAgJiYgZml2ZUNoYXIgPT0gcGF5bG9hZFs0XQogICAgICAg *
ICAgICAgICAgICAgICYmIHNpeENoYXIgPT0gcGF5bG9hZFs1XQogICAgICAgICAgICAgICAgICAg * @param payload - Printer payload
ICYmIHNldmVuQ2hhciA9PSBwYXlsb2FkWzZdCiAgICAgICAgICAgICAgICAgICAgJiYgZWlnaHRD * @return - PrinterResponse Model(IsSuccess, Message, ErrorCode)
aGFyID09IHBheWxvYWRbN10pIHsKICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldFN1Y2Nlc3Mo */
dHJ1ZSk7CiAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRTdWNjZXNzQ29kZShGTV9SRVFVRVNU public PrinterResponseModel parseCameraAckProcess(byte[] payload) {
X0FMTE9XKTsKICAgICAgICAgICAgICAgIExvZ2dlci5kKCAiRk0gRlFDIFN1Y2Nlc3MiKTsKICAg //0x1B 0x2A 0x43 0x41 0x01 0x01 0xF0 0x02
ICAgICAgICAgfSBlbHNlICB7CiAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRTdWNjZXNzKGZh byte oneChar = 0x1B;
bHNlKTsKICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldEVycm9yQ29kZShGTV9SRVFVRVNUX1JF byte twoChar = 0x2A;
SkVDVCk7CiAgICAgICAgICAgICAgICBMb2dnZXIuZCggIkZNIEZRQyBSZWplY3QiKTsKICAgICAg byte threeChar = 0x43;
ICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICB9CiAgICAvKioK byte fourChar = 0x41;
ICAgICAqIHBhcnNlIGZhY3RvcnkgbW9kZSBzaGlwcGluZyBieXRlIHJlc3BvbnNlCiAgICAgKgog byte fiveChar = 0x01;
ICAgICogQHBhcmFtIHBheWxvYWQgLSBQcmludGVyIHBheWxvYWQKICAgICAqIEByZXR1cm4gLSBQ byte sixChar = 0x01;
cmludGVyUmVzcG9uc2UgTW9kZWwoSXNTdWNjZXNzLCBNZXNzYWdlLCBFcnJvckNvZGUpCiAgICAg byte sevenChar = (byte)0xF0;
Ki8KICAgIHB1YmxpYyBQcmludGVyUmVzcG9uc2VNb2RlbCBwYXJzZVNoaXBwaW5nQWNrUHJvY2Vz byte eightChar = 0x02;
cyhieXRlW10gcGF5bG9hZCkgewogICAgICAgIC8vMHgxQgkweDJBCTB4NDMJMHg0MQkweDAxCTB4 PrinterResponseModel response = null;
MDEJMHhGMAkweDA0CiAgICAgICAgYnl0ZSBvbmVDaGFyICAgPSAweDFCOwogICAgICAgIGJ5dGUg if (payload != null && payload.length == TOTAL_BYTES) {
dHdvQ2hhciAgID0gMHgyQTsKICAgICAgICBieXRlIHRocmVlQ2hhciA9IDB4NDM7CiAgICAgICAg response = new PrinterResponseModel();
Ynl0ZSBmb3VyQ2hhciAgPSAweDQxOwogICAgICAgIGJ5dGUgZml2ZUNoYXIgID0gMHgwMTsKICAg if (oneChar == payload[0]
ICAgICBieXRlIHNpeENoYXIgICA9IDB4MDE7CiAgICAgICAgYnl0ZSBzZXZlbkNoYXIgPSAoYnl0 && twoChar == payload[1]
ZSkweEYwOwogICAgICAgIGJ5dGUgZWlnaHRDaGFyID0gMHgwNDsKICAgICAgICBQcmludGVyUmVz && threeChar == payload[2]
cG9uc2VNb2RlbCByZXNwb25zZSA9IG51bGw7CiAgICAgICAgaWYgKHBheWxvYWQgIT0gbnVsbCAm && fourChar == payload[3]
JiBwYXlsb2FkLmxlbmd0aCA9PSBUT1RBTF9CWVRFUykgewogICAgICAgICAgICByZXNwb25zZSA9 && fiveChar == payload[4]
IG5ldyBQcmludGVyUmVzcG9uc2VNb2RlbCgpOwogICAgICAgICAgICBpZiAob25lQ2hhciA9PSBw && sixChar == payload[5]
YXlsb2FkWzBdCiAgICAgICAgICAgICAgICAgICAgJiYgdHdvQ2hhciA9PSBwYXlsb2FkWzFdCiAg && sevenChar == payload[6]
ICAgICAgICAgICAgICAgICAgJiYgdGhyZWVDaGFyID09IHBheWxvYWRbMl0KICAgICAgICAgICAg && eightChar == payload[7]) {
ICAgICAgICAmJiBmb3VyQ2hhciA9PSBwYXlsb2FkWzNdCiAgICAgICAgICAgICAgICAgICAgJiYg response.setSuccess(true);
Zml2ZUNoYXIgPT0gcGF5bG9hZFs0XQogICAgICAgICAgICAgICAgICAgICYmIHNpeENoYXIgPT0g response.setSuccessCode(FM_REQUEST_ALLOW);
cGF5bG9hZFs1XQogICAgICAgICAgICAgICAgICAgICYmIHNldmVuQ2hhciA9PSBwYXlsb2FkWzZd Logger.d( "FM Camera Success");
CiAgICAgICAgICAgICAgICAgICAgJiYgZWlnaHRDaGFyID09IHBheWxvYWRbN10pIHsKICAgICAg } else {
ICAgICAgICAgIHJlc3BvbnNlLnNldFN1Y2Nlc3ModHJ1ZSk7CiAgICAgICAgICAgICAgICByZXNw response.setSuccess(false);
b25zZS5zZXRTdWNjZXNzQ29kZShGTV9SRVFVRVNUX0FMTE9XKTsKICAgICAgICAgICAgICAgIExv response.setErrorCode(FM_REQUEST_REJECT);
Z2dlci5kKCAiRk0gU2hpcHBpbmcgU3VjY2VzcyIpOwogICAgICAgICAgICB9IGVsc2UgIHsKICAg Logger.d( "FM Camera Reject");
ICAgICAgICAgICAgIHJlc3BvbnNlLnNldFN1Y2Nlc3MoZmFsc2UpOwogICAgICAgICAgICAgICAg }
cmVzcG9uc2Uuc2V0RXJyb3JDb2RlKEZNX1JFUVVFU1RfUkVKRUNUKTsKICAgICAgICAgICAgICAg }
IExvZ2dlci5kKCAiRk0gU2hpcHBpbmcgUmVqZWN0Iik7CiAgICAgICAgICAgIH0KICAgICAgICB9 return response;
CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfQoKICAgIC8qKgogICAgICogcGFyc2UgZmFj }
dG9yeSBtb2RlIHZlcnNpb24gYXNrIGJ5dGUgcmVzcG9uc2UKICAgICAqCiAgICAgKiBAcGFyYW0g /**
cGF5bG9hZCAtIFByaW50ZXIgcGF5bG9hZAogICAgICogQHJldHVybiAtIFByaW50ZXJSZXNwb25z * parse factory mode FQC byte response
ZSBNb2RlbChJc1N1Y2Nlc3MsIE1lc3NhZ2UsIEVycm9yQ29kZSkKICAgICAqLwogICAgcHVibGlj *
IFByaW50ZXJSZXNwb25zZU1vZGVsIHBhcnNlVmVyc2lvbkFza0Fja1Byb2Nlc3MoYnl0ZVtdIHBh * @param payload - Printer payload
eWxvYWQpIHsKCiAgICAgICAgLy8weDFCCTB4MkEJMHg0MwkweDQxCTB4MDEJMHgwMQkweDAzCTB4 * @return - PrinterResponse Model(IsSuccess, Message, ErrorCode)
RkYKICAgICAgICAvLyAweDAwIC0gRHNwRndWZXJfSAogICAgICAgIC8vIDB4MDAgLSBEc3BGd1Zlcl9N */
CiAgICAgICAgLy8gMHgwMCAtIERzcEZ3VmVyX0wKICAgICAgICAvLyAweDAwIC0gSFdJRAogICAg public PrinterResponseModel parseFQCAckProcess(byte[] payload) {
ICAgIC8vIDB4MDAgLSBUTUQKICAgICAgICBQcmludGVyUmVzcG9uc2VNb2RlbCByZXNwb25zZSA9 //0x1B 0x2A 0x43 0x41 0x01 0x01 0xF0 0x03
IG51bGw7CiAgICAgICAgaWYgKHBheWxvYWQgIT0gbnVsbCAmJiBwYXlsb2FkLmxlbmd0aCA9PSBU byte oneChar = 0x1B;
T1RBTF9CWVRFUykgewoKICAgICAgICAgICAgYnl0ZSBkc3BIID0gcGF5bG9hZFs4XTsKICAgICAg byte twoChar = 0x2A;
ICAgICAgYnl0ZSBkc3BNID0gcGF5bG9hZFs5XTsKICAgICAgICAgICAgYnl0ZSBkc3BMID0gcGF5 byte threeChar = 0x43;
bG9hZFsxMF07CiAgICAgICAgICAgIGJ5dGUgSFdJRCA9IHBheWxvYWRbMTFdOwogICAgICAgICAg byte fourChar = 0x41;
ICBieXRlIFRNRCA9IHBheWxvYWRbMTJdOwogICAgICAgICAgICBieXRlIGlzUGFwZXJUcmF5RW1w byte fiveChar = 0x01;
dHkgPSBwYXlsb2FkWzE0XTsKCiAgICAgICAgICAgIExvZ2dlci5kKCJGTSBkc3BIOiAiICsgQnl0 byte sixChar = 0x01;
ZVV0aWwuYnl0ZXNUb0hleFdpdGhTcGFjZShkc3BIKSk7CiAgICAgICAgICAgIExvZ2dlci5kKCJG byte sevenChar = (byte)0xF0;
TSBkc3BNOiAiICsgQnl0ZVV0aWwuYnl0ZXNUb0hleFdpdGhTcGFjZShkc3BNKSk7CiAgICAgICAg byte eightChar = 0x03;
ICAgIExvZ2dlci5kKCJGTSBkc3BMOiAiICsgQnl0ZVV0aWwuYnl0ZXNUb0hleFdpdGhTcGFjZShk PrinterResponseModel response = null;
c3BMKSk7CiAgICAgICAgICAgIExvZ2dlci5kKCJGTSBIV0lEOiAiICsgQnl0ZVV0aWwuYnl0ZXNU if (payload != null && payload.length == TOTAL_BYTER) {
b0hleFdpdGhTcGFjZShIV0lEKSk7CiAgICAgICAgICAgIExvZ2dlci5kKCJGTSBUTUQ6ICIgKyBC response = new PrinterResponseModel();
eXRlVXRpbC5ieXRlc1RvSGV4V2l0aFNwYWNlKFRNRCkpOwogICAgICAgICAgICBMb2dnZXIuZCgi if (oneChar == payload[0]
aXNQYXBlclRyYXlFbXB0eTogIiArIEJ5dGVVdGlsLmJ5dGVzVG9IZXhXaXRoU3BhY2UoaXNQYXBl && twoChar == payload[1]
clRyYXlFbXB0eSkpOwogICAgICAgICAgICByZXNwb25zZSA9IG5ldyBQcmludGVyUmVzcG9uc2VN && threeChar == payload[2]
b2RlbCgpOwogICAgICAgICAgICByZXNwb25zZS5zZXRTdWNjZXNzKHRydWUpOwogICAgICAgICAg && fourChar == payload[3]
ICByZXNwb25zZS5zZXRNZXNzYWdlKCJGTSAgVmVyc2lvbiBQcm9jZXNzIik7CiAgICAgICAgICAg && fiveChar == payload[4]
IHJlc3BvbnNlLnNldFN1Y2Nlc3NDb2RlKEZNX1JFUVVFU1RfQUxMT1cpOwogICAgICAgICAgICBy && sixChar == payload[5]
ZXNwb25zZS5zZXREc3BIKGRzcEgpOwogICAgICAgICAgICByZXNwb25zZS5zZXREc3BNKGR && sevenChar == payload[6]
zcE0pOwogICAgICAgICAgICByZXNwb25zZS5zZXREc3BMKGR && eightChar == payload[7]) {
zcEwpOwogICAgICAgICAgICByZXNwb25zZS5zZXRIV0lEKEhXSUQpOwogICAgICAgICAgICByZXNw response.setSuccess(true);
b25zZS5zZXRUTUQoVE1EKTsKICAgICAgICAgICAgcmVzcG9uc2Uuc2V0UGFwZXJUcmF5RW1wdHko response.setSuccessCode(FM_REQUEST_ALLOW);
aXNQYXBlclRyYXlFbXB0eSA9PSBQQVBFUl9UUkFZX0VNUFRZKTsKCiAgICAgICAgfQogICAgICAg Logger.d( "FM FQC Success");
IHJldHVybiByZXNwb25zZTsKICAgIH0KCiAgICAvKioKICAgICAqIHBhcnNlIGZhY3RvcnkgbW9k } else {
ZSByZXNldCBieXRlIHJlc3BvbnNlCiAgICAgKgogICAgICogQHBhcmFtIHBheWxvYWQgLSBQcmlu response.setSuccess(false);
dGVyIHBheWxvYWQKICAgICAqIEByZXR1cm4gLSBQcmludGVyUmVzcG9uc2UgTW9kZWwoSXNTdWNj response.setErrorCode(FM_REQUEST_REJECT);
ZXNzLCBNZXNzYWdlLCBFcnJvckNvZGUpCiAgICAgKi8KICAgIHB1YmxpYyBQcmludGVyUmVzcG9u Logger.d( "FM FQC Reject");
c2VNb2RlbCBwYXJzZVJlc2V0QWNrUHJvY2VzcyhieXRlW10gcGF5bG9hZCkgewogICAgICAgIC8v }
MHgxQgkweDJBCTB4NDMJMHg0MQkweDAxCTB4MDEJMHhGMAkweEZGCiAgICAgICAgYnl0ZSBvbmVD }
aGFyICAgPSAweDFCOwogICAgICAgIGJ5dGUgdHdvQ2hhciAgID0gMHgyQTsKICAgICAgICBieXRl return response;
IHRocmVlQ2hhciA9IDB4NDM7CiAgICAgICAgYnl0ZSBmb3VyQ2hhciAgPSAweDQxOwogICAgICAg }
IGJ5dGUgZml2ZUNoYXIgID0gMHgwMTsKICAgICAgICBieXRlIHNpeENoYXIgICA9IDB4MDE7CiAg /**
ICAgICAgYnl0ZSBzZXZlbkNoYXIgPSAoYnl0ZSkweEYwOwogICAgICAgIGJ5dGUgZWlnaHRDaGFy * parse factory mode shipping byte response
ID0gKGJ5dGUpMHhGRjsKICAgICAgICBQcmludGVyUmVzcG9uc2VNb2RlbCByZXNwb25zZSA9IG51 *
bGw7CiAgICAgICAgaWYgKHBheWxvYWQgIT0gbnVsbCAmJiBwYXlsb2FkLmxlbmd0aCA9PSBUT1RB * @param payload - Printer payload
TF9CWVRFUykgewogICAgICAgICAgICByZXNwb25zZSA9IG5ldyBQcmludGVyUmVzcG9uc2VNb2Rl * @return - PrinterResponse Model(IsSuccess, Message, ErrorCode)
bCgpOwogICAgICAgICAgICBpZiAob25lQ2hhciA9PSBwYXlsb2FkWzBdCiAgICAgICAgICAgICAg */
ICAgICAgJiYgdHdvQ2hhciA9PSBwYXlsb2FkWzFdCiAgICAgICAgICAgICAgICAgICAgJiYgdGhy public PrinterResponseModel parseShippingAckProcess(byte[] payload) {
ZWVDaGFyID09IHBheWxvYWRbMl0KICAgICAgICAgICAgICAgICAgICAmJiBmb3VyQ2hhciA9PSBw //0x1B 0x2A 0x43 0x41 0x01 0x01 0xF0 0x04
YXlsb2FkWzNdCiAgICAgICAgICAgICAgICAgICAgJiYgZml2ZUNoYXIgPT0gcGF5bG9hZFs0XQog byte oneChar = 0x1B;
ICAgICAgICAgICAgICAgICAgICYmIHNpeENoYXIgPT0gcGF5bG9hZFs1XQogICAgICAgICAgICAg byte twoChar = 0x2A;
ICAgICAgICYmIHNldmVuQ2hhciA9PSBwYXlsb2FkWzZdCiAgICAgICAgICAgICAgICAgICAgJiYg byte threeChar = 0x43;
ZWlnaHRDaGFyID09IHBheWxvYWRbN10pIHsKICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldFN1 byte fourChar = 0x41;
Y2Nlc3ModHJ1ZSk7CiAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRTdWNjZXNzQ29kZShGTV9S byte fiveChar = 0x01;
RVFVRVNUX0FMTE9XKTsKICAgICAgICAgICAgICAgIExvZ2dlci5kKCAiRk0gUmVzZXQgU3VjY2Vz byte sixChar = 0x01;
cyIpOwogICAgICAgICAgICB9IGVsc2UgIHsKICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldFN1 byte sevenChar = (byte)0xF0;
Y2Nlc3MoZmFsc2UpOwogICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0RXJyb3JDb2RlKEZNX1JF byte eightChar = 0x04;
UVVFU1RfUkVKRUNUKTsKICAgICAgICAgICAgICAgIExvZ2dlci5kKCAiRk0gUmVzZXQgUmVqZWN0 PrinterResponseModel response = null;
Iik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAg if (payload != null && payload.length == TOTAL_BYTES) {
fQp9Cg== response = new PrinterResponseModel();
if (oneChar == payload[0]
&& twoChar == payload[1]
&& threeChar == payload[2]
&& fourChar == payload[3]
&& fiveChar == payload[4]
&& sixChar == payload[5]
&& sevenChar == payload[6]
&& eightChar == payload[7]) {
response.setSuccess(true);
response.setSuccessCode(FM_REQUEST_ALLOW);
Logger.d( "FM Shipping Success");
} else {
response.setSuccess(false);
response.setErrorCode(FM_REQUEST_REJECT);
Logger.d( "FM Shipping Reject");
}
}
return response;
}
/**
* parse factory mode version ask byte response
*
* @param payload - Printer payload
* @return - PrinterResponse Model(IsSuccess, Message, ErrorCode)
*/
public PrinterResponseModel parseVersionAskAckProcess(byte[] payload) {
//0x1B 0x2A 0x43 0x41 0x01 0x01 0x03 0xFF
// 0x00 - DspFwVer_H
// 0x00 - DspFwVer_M
// 0x00 - DspFwVer_L
// 0x00 - HWID
// 0x00 - TMD
PrinterResponseModel response = null;
if (payload != null && payload.length == TOTAL_BYTES) {
byte dspH = payload[8];
byte dspM = payload[9];
byte dspL = payload[10];
byte HWID = payload[11];
byte TMD = payload[12];
byte isPaperTrayEmpty = payload[14];
Logger.d("FM dspH: " + ByteUtil.bytesToHexWithSpace(dspH));
Logger.d("FM dspM: " + ByteUtil.bytesToHexWithSpace(dspM));
Logger.d("FM dspL: " + ByteUtil.bytesToHexWithSpace(dspL));
Logger.d("FM HWID: " + ByteUtil.bytesToHexWithSpace(HWID));
Logger.d("FM TMD: " + ByteUtil.bytesToHexWithSpace(TMD));
Logger.d("isPaperTrayEmpty: " + ByteUtil.bytesToHexWithSpace(isPaperTrayEmpty));
response = new PrinterResponseModel();
response.setSuccess(true);
response.setMessage("FM Version Process");
response.setSuccessCode(FM_REQUEST_ALLOW);
response.setDspH(dspH);
response.setDspM(dspM);
response.setDspL(dspL);
response.setHWID(HWID);
response.setTMD(TMD);
response.setPaperTrayEmpty(isPaperTrayEmpty == PAPER_TRAY_EMPTY);
}
return response;
}
/**
* parse factory mode reset byte response
*
* @param payload - Printer payload
* @return - PrinterResponse Model(IsSuccess, Message, ErrorCode)
*/
public PrinterResponseModel parseResetAckProcess(byte[] payload) {
//0x1B 0x2A 0x43 0x41 0x01 0x01 0xF0 0xFF
byte oneChar = 0x1B;
byte twoChar = 0x2A;
byte threeChar = 0x43;
byte fourChar = 0x41;
byte fiveChar = 0x01;
byte sixChar = 0x01;
byte sevenChar = (byte)0xF0;
byte eightChar = (byte)0xFF;
PrinterResponseModel response = null;
if (payload != null && payload.length == TOTAL_BYTES) {
response = new PrinterResponseModel();
if (oneChar == payload[0]
&& twoChar == payload[1]
&& threeChar == payload[2]
&& fourChar == payload[3]
&& fiveChar == payload[4]
&& sixChar == payload[5]
&& sevenChar == payload[6]
&& eightChar == payload[7]) {
response.setSuccess(true);
response.setSuccessCode(FM_REQUEST_ALLOW);
Logger.d( "FM Reset Success");
} else {
response.setSuccess(false);
response.setErrorCode(FM_REQUEST_REJECT);
Logger.d( "FM Reset Reject");
}
}
return response;
}
}