From 6bcd78639466b9991e2bdd1da032e51404a222be Mon Sep 17 00:00:00 2001 From: jason Date: Mon, 11 May 2026 08:11:19 -0500 Subject: [PATCH] chore: import from github.com/twx284558/ledcontrol --- .../manager/FWUpdateProcessManager.java | 129 ++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 serialport/src/main/java/android/serialport/manager/FWUpdateProcessManager.java diff --git a/serialport/src/main/java/android/serialport/manager/FWUpdateProcessManager.java b/serialport/src/main/java/android/serialport/manager/FWUpdateProcessManager.java new file mode 100644 index 0000000..0dda222 --- /dev/null +++ b/serialport/src/main/java/android/serialport/manager/FWUpdateProcessManager.java @@ -0,0 +1,129 @@ +cGFja2FnZSBhbmRyb2lkLnNlcmlhbHBvcnQubWFuYWdlcjsKCmltcG9ydCBhbmRyb2lkLmNvbnRl +bnQuQ29udGV4dDsKaW1wb3J0IGFuZHJvaWQuc2VyaWFscG9ydC5tb2RlbC5QcmludGVyUmVzcG9u +c2VNb2RlbDsKaW1wb3J0IGFuZHJvaWQuc2VyaWFscG9ydC51dGlscy5CeXRlVXRpbDsKaW1wb3J0 +IGFuZHJvaWQuc2VyaWFscG9ydC51dGlscy5Mb2dnZXI7CmltcG9ydCBhbmRyb2lkLnV0aWwuTG9n +OwppbXBvcnQgYW5kcm9pZC53aWRnZXQuVG9hc3Q7CgpwdWJsaWMgY2xhc3MgRldVcGRhdGVQcm9j +ZXNzTWFuYWdlciB7CiAgICBwcml2YXRlIENvbnRleHQgbUNvbnRleHQ7CiAgICBwcml2YXRlIHN0 +YXRpYyBGV1VwZGF0ZVByb2Nlc3NNYW5hZ2VyIG1Qcm90b2NvbE1hbmFnZXI7CiAgICBwcml2YXRl +IHN0YXRpYyBmaW5hbCBpbnQgVE9UQUxfQllURVMgPSA2NDsKICAgIC8vUHJpbnQgUmVxdWVzdCBB +bnN3ZXIKICAgIC8vRmlsZSBBdmFpbGFibGUKICAgIHByaXZhdGUgZmluYWwgaW50IFBSSU5UX1JF +UVVFU1RfQUxMT1cgPSAweDAxOwogICAgcHJpdmF0ZSBmaW5hbCBpbnQgUFJJTlRfUkVRVUVTVF9S +RUpFQ1QgPSAweEZGOwoKICAgIHByaXZhdGUgZmluYWwgaW50IE5PTkVfRVJST1IgPSAweDAwOwog +ICAgcHJpdmF0ZSBmaW5hbCBpbnQgU1lTVEVNX09WRVJfSEVBVCA9IDB4MDU7CiAgICBwcml2YXRl +IGZpbmFsIGludCBTWVNURU1fT1ZFUl9DT0xEID0gMHgwNjsKICAgIHByaXZhdGUgZmluYWwgaW50 +IERVUklOR19VUEdSQURJTkcgPSAweDBFOwogICAgcHJpdmF0ZSBmaW5hbCBpbnQgRFVSSU5HX1BS +SU5USU5HID0gMHgxMDsKCgogICAgLy9FbmQgb2YgcHJpbnRlcgogICAgcHJpdmF0ZSBmaW5hbCBp +bnQgRU5EX09GX1BSSU5UX1NVQ0NFU1MgPSAweDU1OwogICAgcHJpdmF0ZSBmaW5hbCBpbnQgRU5E +X09GX1BSSU5UX0VSUk9SID0gMHhBMDsKCiAgICAvL0ZXIFZhcmlhYmxlCiAgICAvL1VwZ3JhZGUg +RXJyb3IgTWVzc2FnZSAoZm9yIFVwZ3JhZGVFcnJNZXNzYWdlKQogICAgcHJpdmF0ZSBmaW5hbCBp +bnQgRklMRV9FUlJPUiA9IDB4MDE7CgogICAgcHJpdmF0ZSBGV1VwZGF0ZVByb2Nlc3NNYW5hZ2Vy +KENvbnRleHQgY29udGV4dCkgewogICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKICAgIH0KCiAg +ICBwdWJsaWMgc3RhdGljIEZXVXBkYXRlUHJvY2Vzc01hbmFnZXIgZ2V0SW5zdGFuY2UoQ29udGV4 +dCBjb250ZXh0KSB7CiAgICAgICAgaWYgKG1Qcm90b2NvbE1hbmFnZXIgPT0gbnVsbCkgewogICAg +ICAgICAgICBtUHJvdG9jb2xNYW5hZ2VyID0gbmV3IEZXVXBkYXRlUHJvY2Vzc01hbmFnZXIoY29u +dGV4dCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBtUHJvdG9jb2xNYW5hZ2VyOwogICAgfQog +ICAgLyoqCiAgICAgKiBTdGFydCBGVyB1cGdyYWRlIHJlcXVlc3QgcmVzcG9uc2UgYXMgcGVyIHBy +aW50ZXIgYWNrbm93bGVkZ21lbnQKICAgICAqCiAgICAgKiBAcGFyYW0gcGF5bG9hZCAtIFByaW50 +ZXIgcGF5bG9hZAogICAgICogQHJldHVybiAtIFByaW50ZXJSZXNwb25zZSBNb2RlbChJc1N1Y2Nl +c3MsIE1lc3NhZ2UsIEVycm9yQ29kZSkKICAgICAqLwogICAgcHVibGljIFByaW50ZXJSZXNwb25z +ZU1vZGVsIGRvRldVcGdyYWRlUmVxdWVzdEFDS1Byb2Nlc3MoYnl0ZVtdIHBheWxvYWQpIHsKICAg +ICAgICAvLzB4MUIJMHgyQQkweDQzCTB4NDEJMHgwMQkweDAxCTB4MDMJMHgwMAlhbGxvdzogMHgw +MSByZWplY3Q6IDB4RkYJUmVhc29uCiAgICAgICAgUHJpbnRlclJlc3BvbnNlTW9kZWwgcmVzcG9u +c2UgPSBudWxsOwogICAgICAgIGlmIChwYXlsb2FkICE9IG51bGwgJiYgcGF5bG9hZC5sZW5ndGgg +PT0gVE9UQUxfQllURVMpIHsKICAgICAgICAgICAgZmluYWwgYnl0ZSByZXF1ZXN0QW5zd2VyID0g +cGF5bG9hZFs4XTsKICAgICAgICAgICAgZmluYWwgYnl0ZSByZWFzb24gPSBwYXlsb2FkWzldOwog +ICAgICAgICAgICByZXNwb25zZSA9IG5ldyBQcmludGVyUmVzcG9uc2VNb2RlbCgpOwogICAgICAg +ICAgICBMb2dnZXIuZCgiRldVcGdyYWRlIHJlcXVlc3RBbnN3ZXI6ICIrQnl0ZVV0aWwuYnl0ZXNU +b0hleFdpdGhTcGFjZShyZXF1ZXN0QW5zd2VyKSk7CiAgICAgICAgICAgIExvZ2dlci5kKCJGV1Vw +Z3JhZGUgcmVhc29uOiAiK0J5dGVVdGlsLmJ5dGVzVG9IZXhXaXRoU3BhY2UocmVhc29uKSk7CiAg +ICAgICAgICAgIGlmIChyZXF1ZXN0QW5zd2VyID09IChieXRlKSBQUklOVF9SRVFVRVNUX1JFSkVD +VCkgewogICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0U3VjY2VzcyhmYWxzZSk7CiAgICAgICAg +ICAgICAgICBzd2l0Y2ggKHJlYXNvbikgewogICAgICAgICAgICAgICAgICAgIC8vMHgwNSBTeXN0 +ZW0gT3ZlckhlYXQKICAgICAgICAgICAgICAgICAgICAvLzB4MDYgU3lzdGVtIE92ZXJDb2xkCiAg +ICAgICAgICAgICAgICAgICAgLy8weDBFIER1cmluZyBVcGdyYWRpbmcKICAgICAgICAgICAgICAg +ICAgICAvLzB4MTAgRHVyaW5nIFByaW50aW5nCiAgICAgICAgICAgICAgICAgICAgY2FzZSBTWVNU +RU1fT1ZFUl9IRUFUOgogICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRFcnJvckNv +ZGUoU1lTVEVNX09WRVJfSEVBVCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNl +dE1lc3NhZ2UoIlN5c3RlbSBPdmVyIEhlYXQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJl +YWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSBTWVNURU1fT1ZFUl9DT0xEOgogICAgICAgICAg +ICAgICAgICAgICAgICByZXNwb25zZS5zZXRFcnJvckNvZGUoU1lTVEVNX09WRVJfQ09MRCk7CiAg +ICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldE1lc3NhZ2UoIlN5c3RlbSBPdmVyIENv +bGQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg +Y2FzZSBEVVJJTkdfVVBHUkFESU5HOgogICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5z +ZXRFcnJvckNvZGUoRFVSSU5HX1VQR1JBRElORyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl +c3BvbnNlLnNldE1lc3NhZ2UoIkR1cmluZyBVcGdyYWRpbmciKTsKICAgICAgICAgICAgICAgICAg +ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSBEVVJJTkdfUFJJTlRJTkc6CiAg +ICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldEVycm9yQ29kZShEVVJJTkdfUFJJTlRJ +TkcpOwogICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRNZXNzYWdlKCJEdXJpbmcg +UHJpbnRpbmciKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg +ICB9CiAgICAgICAgICAgIH1lbHNlIGlmIChyZXF1ZXN0QW5zd2VyID09IFBSSU5UX1JFUVVFU1Rf +QUxMT1cpIHsKICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldFN1Y2Nlc3ModHJ1ZSk7CiAgICAg +ICAgICAgICAgICByZXNwb25zZS5zZXRTdWNjZXNzQ29kZShQUklOVF9SRVFVRVNUX0FMTE9XKTsK +ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldFN1Y2Nlc3Mo +dHJ1ZSk7CiAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRTdWNjZXNzQ29kZShQUklOVF9SRVFV +RVNUX0FMTE9XKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzcG9u +c2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBTdGFydCBGVyBnbyB1cGdyYWRlIHJlc3BvbnNlIGFz +IHBlciBwcmludGVyIGFja25vd2xlZGdtZW50CiAgICAgKgogICAgICogQHBhcmFtIHBheWxvYWQg +LSBQcmludGVyIHBheWxvYWQKICAgICAqIEByZXR1cm4gLSBQcmludGVyUmVzcG9uc2UgTW9kZWwo +SXNTdWNjZXNzLCBNZXNzYWdlLCBFcnJvckNvZGUpCiAgICAgKi8KICAgIHB1YmxpYyBQcmludGVy +UmVzcG9uc2VNb2RlbCBkb0ZXR29VcGdyYWRlUHJvY2VzcyhieXRlW10gcGF5bG9hZCkgewogICAg +ICAgIC8vMHgxQgkweDJBCTB4NDMJMHg0MQkweDAxCTB4MDEJMHgwMwkweDAyCiAgICAgICAgLy8w +eDFCCTB4MkEJMHg0MwkweDQxCTB4MDAJMHgwMQkweDAzCTB4MDIKICAgICAgICAvLzFCIDJBIDQz +IDQxIDAxIDAxIDAzIDAyIDAwIDAwIDAwIDAgICAgICAgCiAgICAgICAgLy8xQiAyQSA0MyA0MSAwMSAw +MSAwMyAwMyBBMCAwMCAwMCAwMCAwCiAgICAgICAgYnl0ZSBvbmVDaGFyICAgPSAweDFCOwogICAg +ICAgIGJ5dGUgdHdvQ2hhciAgID0gMHgyQTsKICAgICAgICBieXRlIHRocmVlQ2hhciA9IDB4NDM7 +CiAgICAgICAgYnl0ZSBmb3VyQ2hhciAgPSAweDQxOwogICAgICAgIGJ5dGUgZml2ZUNoYXIgID0g +MHgwMTsKICAgICAgICBieXRlIHNpeENoYXIgICA9IDB4MDE7CiAgICAgICAgYnl0ZSBzZXZlbkNo +YXIgPSAweDAzOwogICAgICAgIGJ5dGUgZWlnaHRDaGFyID0gMHgwMjsKICAgICAgICBQcmludGVy +UmVzcG9uc2VNb2RlbCByZXNwb25zZSA9IG51bGw7CiAgICAgICAgaWYgKHBheWxvYWQgIT0gbnVs +bCAmJiBwYXlsb2FkLmxlbmd0aCA9PSBUT1RBTF9CWVRFUykgewogICAgICAgICAgIHJlc3BvbnNl +ID0gbmV3IFByaW50ZXJSZXNwb25zZU1vZGVsKCk7CiAgICAgICAgICAgIGlmIChvbmVDaGFyID09 +IHBheWxvYWRbMF0KICAgICAgICAgICAgICAgICAgICAmJiB0d29DaGFyID09IHBheWxvYWRbMV0K +ICAgICAgICAgICAgICAgICAgICAmJiB0aHJlZUNoYXIgPT0gcGF5bG9hZFsyXQogICAgICAgICAg +ICAgICAgICAgICYmIGZvdXJDaGFyID09IHBheWxvYWRbM10KICAgICAgICAgICAgICAgICAgICAm +JiBmaXZlQ2hhciA9PSBwYXlsb2FkWzRdCiAgICAgICAgICAgICAgICAgICAgJiYgc2l4Q2hhciA9 +PSBwYXlsb2FkWzVdCiAgICAgICAgICAgICAgICAgICAgJiYgc2V2ZW5DaGFyID09IHBheWxvYWRb +Nl0KICAgICAgICAgICAgICAgICAgICAmJiBlaWdodENoYXIgPT0gcGF5bG9hZFs3XSkgewogICAg +ICAgICAgICAgICAgcmVzcG9uc2Uuc2V0U3VjY2Vzcyh0cnVlKTsKICAgICAgICAgICAgICAgIHJl +c3BvbnNlLnNldFN1Y2Nlc3NDb2RlKFBSSU5UX1JFUVVFU1RfQUxMT1cpOwogICAgICAgICAgICAg +ICAgTG9nZ2VyLmQoICJvRldHb1VwZ3JhZGVQcm9jZXNzIFN1Y2Nlc3MiKTsKICAgICAgICAgICAg +fSBlbHNlICB7CiAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRTdWNjZXNzKGZhbHNlKTsKICAg +ICAgICAgICAgICAgIHJlc3BvbnNlLnNldEVycm9yQ29kZShQUklOVF9SRVFVRVNUX1JFSkVDVCk7 +CiAgICAgICAgICAgICAgICBMb2dnZXIuZCggIm9GV0dvVXBncmFkZVByb2Nlc3MgUmVqZWN0Iik7 +CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfQog +ICAgLyoqCiAgICAgKiBTdGFydCBFbmQgb2YgIHVwZ3JhZGUgY29tbWFuZCByZXNwb25zZSBhcyBw +ZXIgcHJpbnRlciBhY2tub3dsZWRnbWVudAogICAgICoKICAgICAqIEBwYXJhbSBwYXlsb2FkIC0g +UHJpbnRlciBwYXlsb2FkCiAgICAgKiBAcmV0dXJuIC0gUHJpbnRlclJlc3BvbnNlIE1vZGVsKElz +U3VjY2VzcywgTWVzc2FnZSwgRXJyb3JDb2RlKQogICAgICovCiAgICBwdWJsaWMgUHJpbnRlclJl +c3BvbnNlTW9kZWwgZG9GV0VuZE9mVXBncmFkZVByb2Nlc3MoYnl0ZVtdIHBheWxvYWQpIHsKICAg +ICAgICAvLzB4MUIJMHgyQQkweDQzCTB4NDEJMHgwMQkweDAxCTB4MDMJMHgwMwlTdWNjZXNzOiAw +eDU1IEVycm9yOiAweEEwCUVycm9yCiAgICAgICAgUHJpbnRlclJlc3BvbnNlTW9kZWwgcmVzcG9u +c2UgPSBudWxsOwogICAgICAgIGlmIChwYXlsb2FkICE9IG51bGwgJiYgcGF5bG9hZC5sZW5ndGgg +PT0gVE9UQUxfQllURVMpIHsKICAgICAgICAgICAgZmluYWwgYnl0ZSBwcmludFJlc3VsdCA9IHBh +eWxvYWRbOF07CiAgICAgICAgICAgIExvZ2dlci5kKCAicHJpbnRSZXN1bHQ6ICIgKyBwcmludFJl +c3VsdCk7CiAgICAgICAgICAgIHJlc3BvbnNlID0gbmV3IFByaW50ZXJSZXNwb25zZU1vZGVsKCk7 +CiAgICAgICAgICAgIGlmIChwcmludFJlc3VsdCA9PSBFTkRfT0ZfUFJJTlRfU1VDQ0VTUykgewog +ICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0U3VjY2Vzcyh0cnVlKTsKICAgICAgICAgICAgICAg +IHJlc3BvbnNlLnNldE1lc3NhZ2UoIkVuZCBvZiBQcmludCBTdWNjZXNzIik7CiAgICAgICAgICAg +ICAgICByZXNwb25zZS5zZXRTdWNjZXNzQ29kZShFTkRfT0ZfUFJJTlRfU1VDQ0VTUyk7CiAgICAg +ICAgICAgIH0gZWxzZSBpZiAocHJpbnRSZXN1bHQgPT0gKGJ5dGUpIEVORF9PRl9QUklOVF9FUlJP +UikgewogICAgICAgICAgICAgICAgZmluYWwgYnl0ZSByZWFzb24gPSBwYXlsb2FkWzldOwogICAg +ICAgICAgICAgICAgcmVzcG9uc2Uuc2V0U3VjY2VzcyhmYWxzZSk7CgogICAgICAgICAgICAgICAg +c3dpdGNoIChyZWFzb24pIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIE5PTkVfRVJST1I6CiAg +ICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldEVycm9yQ29kZShOT05FX0VSUk9SKTsK +ICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0TWVzc2FnZSgiTm9uZSBFcnJvciIp +OwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIEZJ +TEVfRVJST1I6CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldEVycm9yQ29kZShG +SUFMRV9FUlJPUik7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldE1lc3NhZ2Uo +IkZpbGUgRXJyb3IiKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg +ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwog +ICAgfQoKICAgIC8qKgogICAgICogU3RhcnQgRW5kIG9mICB1cGdyYWRlIGNvbW1hbmQgcmVzcG9u +c2UgYXMgcGVyIHByaW50ZXIgYWNrbm93bGVkZ21lbnQKICAgICAqCiAgICAgKiBAcGFyYW0gcGF5 +bG9hZCAtIFByaW50ZXIgcGF5bG9hZAogICAgICogQHJldHVybiAtIFByaW50ZXJSZXNwb25zZSBN +b2RlbChJc1N1Y2Nlc3MsIE1lc3NhZ2UsIEVycm9yQ29kZSkKICAgICAqLwogICAgcHVibGljIFBy +aW50ZXJSZXNwb25zZU1vZGVsIGRvRldFbmRPZlVwZ3JhZGVBS0NQcm9jZXNzKGJ5dGVbXSBwYXls +b2FkKSB7CiAgICAgICAgUHJpbnRlclJlc3BvbnNlTW9kZWwgIHJlc3BvbnNlID0gbmV3IFByaW50 +ZXJSZXNwb25zZU1vZGVsKCk7CiAgICAgICAgcmVzcG9uc2Uuc2V0U3VjY2Vzcyh0cnVlKTsKICAg +ICAgICByZXNwb25zZS5zZXRNZXNzYWdlKCJGVyBFbmQgb2YgVXBncmFkZSBBS0MgU3VjY2VzcyIp +OwogICAgICAgIHJlc3BvbnNlLnNldFN1Y2Nlc3NDb2RlKEVORF9PRl9QUklOVF9TVUNDRVNTKTsK +ICAgICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICB9Cn0K \ No newline at end of file