{"record":{"id":"40cee6231ab9feb6","repo":"mgth/LittleBigMouse","slug":"the-network-device-does-not-advertise-vidaa-remote-control","errorCode":null,"errorMessage":"The network device does not advertise VIDAA remote control.","messagePattern":"The network device does not advertise VIDAA remote control\\.","errorType":"exception","errorClass":"InvalidDataException","httpStatus":null,"severity":"error","filePath":"LittleBigMouse.Plugins/LittleBigMouse.Plugin.Vcp.Avalonia/HisenseVidaa/HisenseVidaaProtocol.cs","lineNumber":93,"sourceCode":"            .Sum(c => c - '0') % 10;\n        var suffix = authMethod == VidaaAuthMethod.Modern ? ModernSuffix : LegacySuffix;\n        var valueHash = Md5($\"{brand}{remainder}{suffix}\")[..6];\n        var password = Md5($\"{timestamp}${valueHash}\");\n        return new VidaaMqttCredentials(clientId, username, password);\n    }\n\n    public static HisenseVidaaDevice ParseDescriptor(string ipAddress, string xml)\n    {\n        ipAddress = Ipv4Address.Require(ipAddress, nameof(ipAddress));\n\n        var document = XDocument.Parse(xml);\n        string Element(string name) => document.Descendants()\n            .FirstOrDefault(e => e.Name.LocalName.Equals(name, StringComparison.OrdinalIgnoreCase))\n            ?.Value.Trim() ?? \"\";\n\n        var raw = ParseDescription(Element(\"modelDescription\"));\n        if (raw.TryGetValue(\"vidaa_support\", out var support) && support == \"0\")\n            throw new InvalidDataException(\"The network device does not advertise VIDAA remote control.\");\n\n        var mac = First(raw, \"mac\", \"macWifi\", \"macEthernet\");\n        var protocol = int.TryParse(First(raw, \"transport_protocol\"), out var version) ? (int?)version : null;\n        var model = Element(\"modelName\");\n        if (model.Equals(\"Renderer\", StringComparison.OrdinalIgnoreCase)) model = \"\";\n        var name = Element(\"friendlyName\");\n        return new HisenseVidaaDevice(\n            ipAddress,\n            string.IsNullOrWhiteSpace(name) ? \"Hisense VIDAA\" : name,\n            model,\n            NormalizeMac(mac),\n            protocol,\n            First(raw, \"brand\") is { Length: > 0 } brand ? brand : \"his\");\n    }\n\n    public static string TranslateKey(string key) => key.Trim().ToUpperInvariant() switch\n    {\n        \"KEY_ENTER\" => \"KEY_OK\",","sourceCodeStart":75,"sourceCodeEnd":111,"githubUrl":"https://github.com/mgth/LittleBigMouse/blob/7a42f01d47d99d223b8ee33ba4019af82adf1c48/LittleBigMouse.Plugins/LittleBigMouse.Plugin.Vcp.Avalonia/HisenseVidaa/HisenseVidaaProtocol.cs#L75-L111","documentation":"ParseDescriptor inspects the device descriptor XML's modelDescription key/value data. If it contains vidaa_support=0 (or the value is present and explicitly disables VIDAA), the code throws InvalidDataException: the device answered but is not a VIDAA remote-controllable endpoint. This prevents sending remote commands to an incompatible device.","triggerScenarios":"Calling ParseDescriptor on descriptor XML whose modelDescription contains vidaa_support=\"0\"; typically from ProbeAsync hitting a Hisense device (e.g. a TV or other appliance) that lacks VIDAA remote support.","commonSituations":"Subnet scan sweeping up non-projector Hisense TVs or appliances; older firmware without VIDAA remote; wrong device IP stored (another Hisense device).","solutions":["Point discovery at the correct projector IP, not another Hisense device","Update the device firmware if VIDAA remote support is expected","Verify the descriptor contents (vidaa_support key) to confirm device capability","Filter subnet-scan candidates by model type before authenticating"],"exampleFix":"// before\nvar descriptor = HisenseVidaaProtocol.ParseDescriptor(xml);\n// after\ntry\n{\n    var descriptor = HisenseVidaaProtocol.ParseDescriptor(xml);\n}\ncatch (InvalidDataException)\n{\n    // device answered but vidaa_support=0: not remote-controllable, skip it\n}","handlingStrategy":"try-catch","validationCode":"// check capability before parsing/pairing\nvar support = ParseDescription(modelDescription).TryGetValue(\"vidaa_support\", out var v) ? v : null;\nif (support == \"0\") return skip;","typeGuard":null,"tryCatchPattern":"try { desc = ParseDescriptor(xml); }\ncatch (InvalidDataException) { /* not VIDAA-capable; exclude candidate */ }","preventionTips":["Filter subnet candidates on vidaa_support before auth","Verify the target device model supports VIDAA remote","Keep firmware updated when support is expected","Never treat any answering HTTP device as VIDAA-capable"],"tags":["validation","descriptor","hisense-vidaa","unsupported-device"],"backgroundTag":"unsupported-operation","analyzedSha":"7a42f01d47d99d223b8ee33ba4019af82adf1c48","analyzedAt":"2026-09-16T00:35:00.514Z","contentChangedAt":"2026-09-16T00:35:00.514Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}