From 33aed1920274d155588299390479b25bc8ee051d Mon Sep 17 00:00:00 2001 From: jason Date: Mon, 11 May 2026 08:34:37 -0500 Subject: [PATCH] chore: import from github.com/twx284558/ledcontrol --- .../android/serialport/utils/ByteUtil.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 serialport/src/main/java/android/serialport/utils/ByteUtil.java diff --git a/serialport/src/main/java/android/serialport/utils/ByteUtil.java b/serialport/src/main/java/android/serialport/utils/ByteUtil.java new file mode 100644 index 0000000..67d6958 --- /dev/null +++ b/serialport/src/main/java/android/serialport/utils/ByteUtil.java @@ -0,0 +1,54 @@ +cGFja2FnZSBhbmRyb2lkLnNlcmlhbHBvcnQudXRpbHM7CgppbXBvcnQgYW5kcm9pZC5vcy5IYW5k +bGVyOwppbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwppbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsK +CmltcG9ydCBhbmRyb2lkeC5hbm5vdGF0aW9uLk5vbk51bGw7CgppbXBvcnQgamF2YS5pby5GaWxl +OwppbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CmltcG9ydCBqYXZhLmlvLkZpbGVPdXRw +dXRTdHJlYW07CmltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CmltcG9ydCBqYXZhLmlvLklPRXhj +ZXB0aW9uOwppbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKaW1wb3J0IGphdmEudXRpbC5jb25j +dXJyZW50LkxpbmtlZEJsb2NraW5nUXVldWU7CgpwdWJsaWMgY2xhc3MgQnl0ZVV0aWwgewogICAg +cHJpdmF0ZSBzdGF0aWMgY2hhcltdIGhleEFycmF5ID0gIjAxMjM0NTY3ODlBQkNERUYiLnRvQ2hh +ckFycmF5KCk7CiAgICAvL0RlZmF1bHQgYnl0ZQogICAgLyoqCiAgICAgKiDlrZfnrKbkuLLovazl +rZfoioLmlbDnu4QKICAgICAqCiAgICAgKiBAcGFyYW0gcyDlrZfnrKbkuLIKICAgICAqIEByZXR1 +cm4g5pWw57uECiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIGhleFN0cmluZ1RvQnl0 +ZUFycmF5KFN0cmluZyBzKSB7CiAgICAgICAgaWYgKHMubGVuZ3RoKCkgPCAyKSB7CiAgICAgICAg +ICAgIHMgPSAiMCIgKyBzOwogICAgICAgIH0KICAgICAgICBpbnQgbGVuID0gcy5sZW5ndGgoKTsK +ICAgICAgICBieXRlW10gZGF0YSA9IG5ldyBieXRlW2xlbiAvIDJdOwogICAgICAgIGZvciAoaW50 +IGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHsKICAgICAgICAgICAgZGF0YVtpIC8gMl0gPSAoYnl0 +ZSkgKChDaGFyYWN0ZXIuZGlnaXQocy5jaGFyQXQoaSksIDE2KSA8PCA0KSArIENoYXJhY3Rlci5k +aWdpdChzLmNoYXJBdChpICsgMSksIDE2KSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkYXRh +OwogICAgfQoKICAgIC8qKgogICAgICog5a2X6IqC5pWw57uE6L2s5a2X56ym5LiyCiAgICAgKgog +ICAgICogQHBhcmFtIGhleEJ5dGVzIOaVsOe7hAogICAgICogQHJldHVybiDlrZfnrKbkuLIKICAg +ICAqLwogICAgcHVibGljIHN0YXRpYyBTdHJpbmcgaGV4Qnl0ZXNUb1N0cmluZyhieXRlW10gaGV4 +Qnl0ZXMpIHsKICAgICAgICBjaGFyW10gaGV4Q2hhcnMgPSBuZXcgY2hhcltoZXhCeXRlcy5sZW5n +dGggKiAyXTsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGhleEJ5dGVzLmxlbmd0aDsgaisr +KSB7CiAgICAgICAgICAgIGludCB2ID0gaGV4Qnl0ZXNbal0gJiAweEZGOwogICAgICAgICAgICBo +ZXhDaGFyc1tqICogMl0gPSBoZXhBcnJheVt2ID4+PiA0XTsKICAgICAgICAgICAgaGV4Q2hhcnNb +aiAqIDIgKyAxXSA9IGhleEFycmF5W3YgJiAweDBGXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJu +IG5ldyBTdHJpbmcoaGV4Q2hhcnMpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgaW50IGhleFN0 +cmluZ1RvSW50KFN0cmluZyBoZXhTdHJpbmcpIHsKICAgICAgICByZXR1cm4gSW50ZWdlci5wYXJz +ZUludChoZXhTdHJpbmcsIDE2KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGJ5dGVbXSBoZXhT +dHJpbmdUb0J5dGVzKFN0cmluZyBoZXhTdHJpbmcpIHsKICAgICAgICBpZiAoaGV4U3RyaW5nID09 +IG51bGwgfHwgaGV4U3RyaW5nLmVxdWFscygiIikpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7 +CiAgICAgICAgfQogICAgICAgIGhleFN0cmluZyA9IGhleFN0cmluZy50b1VwcGVyQ2FzZSgpOwog +ICAgICAgIGludCBsZW5ndGggPSBoZXhTdHJpbmcubGVuZ3RoKCkgLyAyOwogICAgICAgIGNoYXJb +XSBoZXhDaGFycyA9IGhleFN0cmluZy50b0NoYXJBcnJheSgpOwogICAgICAgIGJ5dGVbXSBkID0g +bmV3IGJ5dGVbbGVuZ3RoXTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr +KSB7CiAgICAgICAgICAgIGludCBwb3MgPSBpICogMjsKICAgICAgICAgICAgZFtpXSA9IChieXRl +KSAoY2hhclRvQnl0ZShoZXhDaGFyc1twb3NdKSA8PCA0IHwgY2hhclRvQnl0ZShoZXhDaGFyc1tw +b3MgKyAxXSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZDsKICAgIH0KCiAgICBwdWJsaWMg +c3RhdGljIGJ5dGUgY2hhclRvQnl0ZShjaGFyIGMpIHsKICAgICAgICByZXR1cm4gKGJ5dGUpICIw +MTIzNDU2Nzg5QUJDREVGIi5pbmRleE9mKGMpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgYnl0 +ZVtdIGludFRvQnl0ZUFycmF5KGludCBhKSB7CiAgICAgICAgYnl0ZVtdIHJldCA9IG5ldyBieXRl +WzRdOwogICAgICAgIHJldFszXSA9IChieXRlKSAoYSAmIDB4RkYpOwogICAgICAgIHJldFsyXSA9 +IChieXRlKSAoKGEgPj4gOCkgJiAweEZGKTsKICAgICAgICByZXRbMV0gPSAoYnl0ZSkgKChhID4+ +IDE2KSAmIDB4RkYpOwogICAgICAgIHJldFswXSA9IChieXRlKSAoKGEgPj4gMjQpICYgMHhGRik7 +CiAgICAgICAgcmV0dXJuIHJldDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b0hl +eChieXRlW10gYnl0ZXMsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHsKICAgICAgICBjaGFyW10g +aGV4Q2hhcnMgPSBuZXcgY2hhcltsZW5ndGggKiAyXTsKICAgICAgICBTdHJpbmdCdWlsZGVyIHN0 +cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgICAgIGZvciAoaW50IGogPSBv +ZmZzZXQ7IGogPCBsZW5ndGggKyBvZmZzZXQ7IGorKykgewogICAgICAgICAgICBpbnQgdiA9IGJ5 +dGVzW2pdICYgMHhGRjsKICAgICAgICAgICAgaGV4Q2hhcnNbKGogLSBvZmZzZXQpICogMl0gPSBo +ZXhBcnJheVt2ID4+PiA0XTsKICAgICAgICAgICAgaGV4Q2hhcnNbKGogLSBvZmZzZXQpICogMiAr +IDFdID0gaGV4QXJyYXlbdiAmIDB4MEZdOwogICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu +ZChoZXhBcnJheVt2ID4+PiA0XSk7CiAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGhl +eEFycmF5W3YgJiAweDBGXSk7CiAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcdCIp +OwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhoZXhDaGFycyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9IZXgoYnl0ZVtdIGJ5dGVzKSB7CiAgICAgICAgcmV0dXJuIHRvSGV4KGJ5dGVzLCAwLCBieXRlcy5sZW5ndGgpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvSGV4KGludCBhQnl0ZSkgewogICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KCIweCUwMlgiLCBhQnl0ZSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnl0ZXNUb0hleFdpdGhTcGFjZShieXRlW10gYnl0ZXMpIHsKICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKICAgICAgICBmb3IgKGJ5dGUgYiA6IGJ5dGVzKSB7IHNiLmFwcGVuZChTdHJpbmcuZm9ybWF0KCIlMDJYIiwgYikpOyB9CiAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBTdHJpbmcgYnl0ZXNUb0hleFdpdGhTcGFjZShieXRlIGIpIHsKICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgiJTAyWCAiLCBiKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBieXRlc1RvSGV4V2l0aE5ld0xpbmUoYnl0ZVtdIGJ5dGVzKSB7CiAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAgICAgICAgZm9yIChieXRlIGIgOiBieXRlcykgeyBzYi5hcHBlbmQoU3RyaW5nLmZvcm1hdCgiJTAyWCIsIGIpKS5hcHBlbmQoIlxuIik7IH0KICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGJ5dGUgdG9CeXRlKEludGVnZXIgYnl0ZUludGVnZXIsIGludCBkZWZhdWx0Qnl0ZSkgewogICAgICAgIHJldHVybiBieXRlSW50ZWdlciA9PSBudWxsID8gKGJ5dGUpIGRlZmF1bHRCeXRlIDogYnl0ZUludGVnZXIuYnl0ZVZhbHVlKCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBieXRlIHRvQnl0ZShTdHJpbmcgZmlsZU5hbWUsIGludCBkZWZhdWx0Qnl0ZSkgewogICAgICAgIGlmIChmaWxlTmFtZS5pc0VtcHR5KCkpIHsgcmV0dXJuIChieXRlKSBkZWZhdWx0Qnl0ZTsgfQogICAgICAgIHJldHVybiBCeXRlLnBhcnNlQnl0ZShmaWxlTmFtZSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBBcnJheUxpc3Q8QXJyYXlMaXN0PFN0cmluZz4+IGNhY2hlUmVzdWx0ID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICBwdWJsaWMgc3RhdGljIFN0cmluZ0J1ZmZlciByZWFkUiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHB1YmxpYyBzdGF0aWMgTGlua2VkQmxvY2tpbmdRdWV1ZTxBcnJheUxpc3Q8U3RyaW5nPj4gdW5ib3VuZGVkUXVldWUgPSBuZXcgTGlua2VkQmxvY2tpbmdRdWV1ZTw+KCk7CgogICAgcHVibGljIHN0YXRpYyB2b2lkIHJlYWRCaW5hcnlGaWxlKFN0cmluZyBmaWxlUGF0aCkgewogICAgICAgIHJlYWRSID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgIGNhY2hlUmVzdWx0LmNsZWFyKCk7CiAgICAgICAgdW5ib3VuZGVkUXVldWUuY2xlYXIoKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlUGF0aCk7CiAgICAgICAgICAgIEZpbGVJbnB1dFN0cmVhbSBmaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwogICAgICAgICAgICBsb25nIGxlbmd0aCA9IGZpbGUubGVuZ3RoKCk7CiAgICAgICAgICAgIGJ5dGVbXSBieXRlcyA9IG5ldyBieXRlWyhpbnQpIGxlbmd0aF07CiAgICAgICAgICAgIGZpcy5yZWFkKGJ5dGVzKTsKICAgICAgICAgICAgZmlzLmNsb3NlKCk7CiAgICAgICAgICAgIGludCBwYXJ0U2l6ZSA9IGJ5dGVzLmxlbmd0aCAvIDEwMjQgLSAxOwogICAgICAgICAgICBpbnQgdG90YWxTaXplID0gMDsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0U2l6ZTsgaSsrKSB7CiAgICAgICAgICAgICAgICBieXRlW10gbmV3QXJyYXkgPSBuZXcgYnl0ZVsxMDI0XTsKICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoYnl0ZXMsIGkgKiAxMDI0LCBuZXdBcnJheSwgMCwgMTAyNCk7CiAgICAgICAgICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiB0ZW0gPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICAgICAgICAgIGZvciAoYnl0ZSBiIDogbmV3QXJyYXkpIHsgdGVtLmFkZChTdHJpbmcuZm9ybWF0KCIlMDJYIiwgYikpOyB9CiAgICAgICAgICAgICAgICBjYWNoZVJlc3VsdC5hZGQodGVtKTsKICAgICAgICAgICAgICAgIHVuYm91bmRlZFF1ZXVlLmFkZCh0ZW0pOwogICAgICAgICAgICAgICAgdG90YWxTaXplICs9IG5ld0FycmF5Lmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgICAgICBieXRlW10gbGFzdEFycmF5ID0gbmV3IGJ5dGVbMTAyNF07CiAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoYnl0ZXMsIHBhcnRTaXplICogMTAyNCwgbGFzdEFycmF5LCAwLCBieXRlcy5sZW5ndGggLSBwYXJ0U2l6ZSAqIDEwMjQpOwogICAgICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiB0ZW0gPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICAgICAgZm9yIChieXRlIGIgOiBsYXN0QXJyYXkpIHsgdGVtLmFkZChTdHJpbmcuZm9ybWF0KCIlMDJYIiwgYikpOyB9CiAgICAgICAgICAgIGNhY2hlUmVzdWx0LmFkZCh0ZW0pOwogICAgICAgICAgICB1bmJvdW5kZWRRdWV1ZS5hZGQodGVtKTsKICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZVN0cmluZ1RvRmlsZShieXRlW10gY29udGVudCwgU3RyaW5nIGZpbGVQYXRoKSB7CiAgICAgICAgdHJ5IChGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGVQYXRoKSkgewogICAgICAgICAgICBmb3Mud3JpdGUoY29udGVudCk7CiAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewogICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgIH0KICAgIH0KfQo= \ No newline at end of file