mgth/LittleBigMouse · error · InvalidDataException

The network device does not advertise VIDAA remote control.

Error message

The network device does not advertise VIDAA remote control.

What it means

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.

Solutions

  1. Point discovery at the correct projector IP, not another Hisense device
  2. Update the device firmware if VIDAA remote support is expected
  3. Verify the descriptor contents (vidaa_support key) to confirm device capability
  4. Filter subnet-scan candidates by model type before authenticating

Example fix

// before
var descriptor = HisenseVidaaProtocol.ParseDescriptor(xml);
// after
try
{
    var descriptor = HisenseVidaaProtocol.ParseDescriptor(xml);
}
catch (InvalidDataException)
{
    // device answered but vidaa_support=0: not remote-controllable, skip it
}
Defensive patterns

Strategy: try-catch

Validate before calling

// check capability before parsing/pairing
var support = ParseDescription(modelDescription).TryGetValue("vidaa_support", out var v) ? v : null;
if (support == "0") return skip;

Try / catch

try { desc = ParseDescriptor(xml); }
catch (InvalidDataException) { /* not VIDAA-capable; exclude candidate */ }

Prevention

When it happens

Trigger: 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.

Common situations: Subnet scan sweeping up non-projector Hisense TVs or appliances; older firmware without VIDAA remote; wrong device IP stored (another Hisense device).

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of mgth/LittleBigMouse@7a42f01d47 (2026-09-16). Data as JSON: /api/errors/40cee6231ab9feb6. Report an issue: GitHub.

Appendix: source

Thrown at LittleBigMouse.Plugins/LittleBigMouse.Plugin.Vcp.Avalonia/HisenseVidaa/HisenseVidaaProtocol.cs:93

            .Sum(c => c - '0') % 10;
        var suffix = authMethod == VidaaAuthMethod.Modern ? ModernSuffix : LegacySuffix;
        var valueHash = Md5($"{brand}{remainder}{suffix}")[..6];
        var password = Md5($"{timestamp}${valueHash}");
        return new VidaaMqttCredentials(clientId, username, password);
    }

    public static HisenseVidaaDevice ParseDescriptor(string ipAddress, string xml)
    {
        ipAddress = Ipv4Address.Require(ipAddress, nameof(ipAddress));

        var document = XDocument.Parse(xml);
        string Element(string name) => document.Descendants()
            .FirstOrDefault(e => e.Name.LocalName.Equals(name, StringComparison.OrdinalIgnoreCase))
            ?.Value.Trim() ?? "";

        var raw = ParseDescription(Element("modelDescription"));
        if (raw.TryGetValue("vidaa_support", out var support) && support == "0")
            throw new InvalidDataException("The network device does not advertise VIDAA remote control.");

        var mac = First(raw, "mac", "macWifi", "macEthernet");
        var protocol = int.TryParse(First(raw, "transport_protocol"), out var version) ? (int?)version : null;
        var model = Element("modelName");
        if (model.Equals("Renderer", StringComparison.OrdinalIgnoreCase)) model = "";
        var name = Element("friendlyName");
        return new HisenseVidaaDevice(
            ipAddress,
            string.IsNullOrWhiteSpace(name) ? "Hisense VIDAA" : name,
            model,
            NormalizeMac(mac),
            protocol,
            First(raw, "brand") is { Length: > 0 } brand ? brand : "his");
    }

    public static string TranslateKey(string key) => key.Trim().ToUpperInvariant() switch
    {
        "KEY_ENTER" => "KEY_OK",

View on GitHub (pinned to 7a42f01d47)