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