From 2a0971ee0ae23bec91c5912e34f32bb5deb2325e Mon Sep 17 00:00:00 2001 From: morph166955 <53797132+morph166955@users.noreply.github.com> Date: Sun, 10 Sep 2023 01:55:19 -0500 Subject: [PATCH] [androidtv] Fixes GoogleTV Login Error (#15453) * Updates protocol examples * Adjusts flag based on received data Signed-off-by: Ben Rosenblum --- .../googletv/GoogleTVMessageParser.java | 34 ++++++++++++++----- .../protocol/googletv/GoogleTVRequest.java | 28 ++++++++++----- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/bundles/org.openhab.binding.androidtv/src/main/java/org/openhab/binding/androidtv/internal/protocol/googletv/GoogleTVMessageParser.java b/bundles/org.openhab.binding.androidtv/src/main/java/org/openhab/binding/androidtv/internal/protocol/googletv/GoogleTVMessageParser.java index b63032c6e3c..0ed8b308ffb 100644 --- a/bundles/org.openhab.binding.androidtv/src/main/java/org/openhab/binding/androidtv/internal/protocol/googletv/GoogleTVMessageParser.java +++ b/bundles/org.openhab.binding.androidtv/src/main/java/org/openhab/binding/androidtv/internal/protocol/googletv/GoogleTVMessageParser.java @@ -60,33 +60,49 @@ public class GoogleTVMessageParser { } else if (msg.startsWith(DELIMITER_0A)) { // First message on connection from GTV // - // 0a 5b08 ff 041256 0a 11 534849454c4420416e64726f6964205456 12 06 4e5649444941 18 01 22 02 3131 2a - // ---------------------LEN-SHIELD Android TV--------------------LEN-NVIDIA---------LEN---LEN-Android + // 0a 5b 08 ff 04 12 56 0a 11 534849454c4420416e64726f6964205456 12 06 4e5649444941 18 01 22 02 3131 2a + // ---LEN------------LEN---LEN-SHIELD Android TV--------------------LEN-NVIDIA---------LEN---LEN-Android // 24 636f6d2e676f6f676c652e616e64726f69642e74762e72656d6f74652e73657276696365 32 // LEN-com.google.android.tv.remote.service // 0d 352e322e343733323534313333 // LEN-5.2.473254133 // - // 0a 5308 ff 04124e 0a 0c 42524156494120344b204742 12 04 536f6e79 18 01 22 01 39 2a - // ---------------------LEN-BRAVIA 4K GB---------------LEN-Sony-------LEN---LEN-Android Version + // 0a 53 08 ff 04 12 4e 0a 0c 42524156494120344b204742 12 04 536f6e79 18 01 22 01 39 2a + // ---LEN------------LEN---LEN-BRAVIA 4K GB---------------LEN-Sony-------LEN---LEN-Android Version // 24 636f6d2e676f6f676c652e616e64726f69642e74762e72656d6f74652e73657276696365 32 // 0d 352e322e343733323534313333 // - // 0a 5408 ff 04124f 0a 0a 4368726f6d6563617374 12 06 476f6f676c65 18 01 22 02 3132 2a - // ---------------------LEN-Chromecast-------------LEN-Google---------LEN---LEN-Android Version + // 0a 54 08 ff 04 12 4f 0a 0a 4368726f6d6563617374 12 06 476f6f676c65 18 01 22 02 3132 2a + // ---LEN------------LEN---LEN-Chromecast-------------LEN-Google---------LEN---LEN-Android Version // 24 636f6d2e676f6f676c652e616e64726f69642e74762e72656d6f74652e73657276696365 32 // 0d 352e322e343733323534313333 // - // 0a 5708 ff 041252 0a 0d 4368726f6d6563617374204844 12 06 476f6f676c65 18 01 22 02 3132 2a - // ---------------------LEN-Chromecast HD----------------LEN-Google---------LEN---LEN-Android Version + // 0a 57 08 ff 04 12 52 0a 0d 4368726f6d6563617374204844 12 06 476f6f676c65 18 01 22 02 3132 2a + // ---LEN------------LEN---LEN-Chromecast HD----------------LEN-Google---------LEN---LEN-Android Version // 24 636f6d2e676f6f676c652e616e64726f69642e74762e72656d6f74652e73657276696365 32 // 0d352e322e343733323534313333 + // + // 0a 55 08 ef 04 12 50 0a 09 535754562d32304145 12 08 736b79776f727468 18 01 22 02 3130 2a + // ---LEN------------LEN---LEN-SWTV-20AE------------LEN-skyworth-----------LEN---LEN-Android + // 24 636f6d2e676f6f676c652e616e64726f69642e74762e72656d6f74652e73657276696365 32 + // LEN-com.google.android.tv.remote.service + // 0d 352e322e343733323534313333 + // LEN-5.2.473254133 + // + // 0a 5b 08 fd 04 12 56 0a 11 534849454c4420416e64726f6964205456 12 06 4e5649444941 18 01 22 02 3131 2a + // ---LEN------------LEN---LEN-SHIELD Android TV--------------------LEN-NVIDIA---------LEN---LEN-Android + // 24 636f6d2e676f6f676c652e616e64726f69642e74762e72656d6f74652e73657276696365 32 + // LEN-com.google.android.tv.remote.service + // 0d 352e322e343733323534313333 + // LEN-5.2.473254133 if (callback.getLoggedIn()) { logger.warn("{} - Unexpected Login Message: {}", thingId, msg); } else { + String flag = "" + charArray[6] + charArray[7]; + logger.trace("{} - Encoding Flag Data: {}", thingId, flag); callback.sendCommand( - new GoogleTVCommand(GoogleTVRequest.encodeMessage(GoogleTVRequest.loginRequest(4)))); + new GoogleTVCommand(GoogleTVRequest.encodeMessage(GoogleTVRequest.loginRequest(4, flag)))); } String st = ""; diff --git a/bundles/org.openhab.binding.androidtv/src/main/java/org/openhab/binding/androidtv/internal/protocol/googletv/GoogleTVRequest.java b/bundles/org.openhab.binding.androidtv/src/main/java/org/openhab/binding/androidtv/internal/protocol/googletv/GoogleTVRequest.java index 9bc46ae30ec..dd66b0a5e43 100644 --- a/bundles/org.openhab.binding.androidtv/src/main/java/org/openhab/binding/androidtv/internal/protocol/googletv/GoogleTVRequest.java +++ b/bundles/org.openhab.binding.androidtv/src/main/java/org/openhab/binding/androidtv/internal/protocol/googletv/GoogleTVRequest.java @@ -66,6 +66,10 @@ public class GoogleTVRequest { } public static String loginRequest(int messageId) { + return loginRequest(messageId, ""); + } + + public static String loginRequest(int messageId, String data) { String message = ""; if (messageId == 1) { // Send app and device name @@ -85,8 +89,8 @@ public class GoogleTVRequest { // 080210c801f201 08 0a 04 08031006 1001 message = "080210c801f201080a04080310061001"; } else if (messageId == 4) { - // 0a41087e123d0a 08 534d2d4739393855 12 07 73616d73756e67 18 01 22 02 3133 2a - // ---------------LEN--SM-G998U----------LEN--samsung--------- + // 0a 41 08 7e 12 3d 0a 08 534d2d4739393855 12 07 73616d73756e67 18 01 22 02 3133 2a + // ---LEN---------LEN---LEN--SM-G998U----------LEN--samsung--------- // 19 636f6d2e676f6f676c652e616e64726f69642e766964656f73 32 // LEN-com.google.android.videos---------------------------- // 07 342e33382e3138 @@ -94,8 +98,8 @@ public class GoogleTVRequest { // message = // "0a41087e123d0a08534d2d4739393855120773616d73756e671801220231332a19636f6d2e676f6f676c652e616e64726f69642e766964656f733207342e33382e3138"; - // 0a5708fe0412520a 08 534d2d4739393855 12 07 73616d73756e67 18 01 22 02 3133 2a - // -----------------LEN--SM-G998U----------LEN--samsung--------- + // 0a 57 08 fe 04 12 52 0a 08 534d2d4739393855 12 07 73616d73756e67 18 01 22 02 3133 2a + // ---LEN------------LEN---LEN--SM-G998U----------LEN--samsung--------- // 19 636f6d2e676f6f676c652e616e64726f69642e766964656f73 32 // LEN-com.google.android.videos--------------------------- // 1c 342e33392e3538342e3532393538383538332e372d72656c65617365 @@ -103,13 +107,21 @@ public class GoogleTVRequest { // message = // "0a5708fe0412520a08534d2d4739393855120773616d73756e671801220231332a19636f6d2e676f6f676c652e616e64726f69642e766964656f73321c342e33392e3538342e3532393538383538332e372d72656c65617365"; - // 0a5708fe0412520a 08 534d2d4739393855 12 07 73616d73756e67 18 01 22 02 3133 2a - // -----------------LEN--SM-G998U----------LEN--samsung--------- - // 19 636f6d2e676f6f676c652e616e64726f69642e766964656f73 32 + // 0a 3b 08 ee 04 12 36 0a 06 6950686f6e65 12 05 4170706c65 18 02 22 04 31362e36 2a + // ---LEN------------LEN---LEN-iPhone---------LEN-Apple--------------LEN-16.6 + // 11 636f6d2e676f6f676c652e4d6f76696573 32 0a 332e31332e3030303033 + // LEN-com.google.Movies--------------------LEN-3.13.00003 + + // 0a 57 08 fe 04 12 52 0a 08 534d2d4739393855 12 07 73616d73756e67 18 01 22 02 3133 2a + // ---LEN------------LEN---LEN--SM-G998U----------LEN--samsung--------- + // 19 636f6d2e676f-6f676c652e616e64726f69642e766964656f73 32 // LEN-com.google.android.videos--------------------------- // 1c 342e33392e3634342e3533343836353739392e332d72656c65617365 // LEN-4.39.644.534865799.3-release - message = "0a5708fe0412520a08534d2d4739393855120773616d73756e671801220231332a19636f6d2e676f6f676c652e616e64726f69642e766964656f73321c342e33392e3634342e3533343836353739392e332d72656c65617365"; + int dataInt = Integer.parseInt(data, 16) - 1; + String updatedData = Integer.toHexString(dataInt); + message = "0a5708" + updatedData + + "0412520a08534d2d4739393855120773616d73756e671801220231332a19636f6d2e676f6f676c652e616e64726f69642e766964656f73321c342e33392e3634342e3533343836353739392e332d72656c65617365"; } else if (messageId == 5) { // Unknown. Sent after "1200" received message = "1202087e";