mgth/LittleBigMouse · error · HttpRequestException

No Hisense VIDAA device answered on

Error message

No Hisense VIDAA device answered on {octets[0]}.{octets[1]}.{octets[2]}.0/24.

What it means

After probing all candidates in the /24 subnet derived from the seed IP without finding a VIDAA device (and no cancellation), FindAsync throws HttpRequestException summarizing the scanned subnet. This is the 'scan finished, nothing found' terminal condition of the discovery flow.

Solutions

  1. Confirm the projector's actual IP in its network settings menu and re-run FindAsync with that seed
  2. Ensure the machine running discovery is on the same subnet/VLAN as the projector
  3. Disable AP/client isolation on the router
  4. Check the projector is powered on (not standby) during the scan

Example fix

// before
var device = await discovery.FindAsync("192.168.1.50", token);
// after
try
{
    var device = await discovery.FindAsync("192.168.1.50", token);
}
catch (HttpRequestException)
{
    // scan of 192.168.1.0/24 found nothing: verify projector IP and network
}
Defensive patterns

Strategy: try-catch

Validate before calling

var seed = Ipv4Address.Parse(seedIp);
// ensure seed is on an interface of this machine
bool sameSubnet = NetworkInterface.GetAllNetworkInterfaces()
    .Any(n => n.GetIPProperties().UnicastAddresses.Any(u => u.Address.GetSubnet().Contains(seed)));

Try / catch

try { return await discovery.FindAsync(seedIp, token); }
catch (HttpRequestException) { ui.Show("No VIDAA device found on subnet; check projector power/network"); return null; }

Prevention

When it happens

Trigger: Calling FindAsync with a valid IPv4 seed whose /24 contains no device answering the VIDAA descriptor request on any candidate address, and the scan completes without cancellation.

Common situations: Seed IP points to a host on a network where the projector is absent; projector offline during the scan; AP isolation prevents peer-to-peer probes; wrong network interface (e.g. scanning wired LAN while projector is on Wi-Fi).

Understand the failure class

Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.

Related errors


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

Appendix: source

Thrown at LittleBigMouse.Plugins/LittleBigMouse.Plugin.Vcp.Avalonia/HisenseVidaa/HisenseVidaaDiscovery.cs:83

        var octets = seed.GetAddressBytes();
        using var deadline = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
        deadline.CancelAfter(TimeSpan.FromSeconds(8));
        using var concurrency = new SemaphoreSlim(48, 48);
        var probes = Enumerable.Range(1, 254)
            .Select(host => ProbeSubnetCandidateAsync(
                $"{octets[0]}.{octets[1]}.{octets[2]}.{host}", concurrency, deadline.Token))
            .ToArray();

        try
        {
            var devices = await Task.WhenAll(probes).ConfigureAwait(false);
            if (devices.FirstOrDefault(device => device is not null) is { } found) return found;
        }
        catch (OperationCanceledException) when (!cancellationToken.IsCancellationRequested)
        {
        }

        throw new HttpRequestException(
            $"No Hisense VIDAA device answered on {octets[0]}.{octets[1]}.{octets[2]}.0/24.");
    }

    async Task<HisenseVidaaDevice?> ProbeSubnetCandidateAsync(
        string address,
        SemaphoreSlim concurrency,
        CancellationToken cancellationToken)
    {
        await concurrency.WaitAsync(cancellationToken).ConfigureAwait(false);
        try
        {
            foreach (var port in HisenseVidaaProtocol.DescriptorPorts)
            {
                using var tcp = new TcpClient(AddressFamily.InterNetwork);
                using var attempt = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
                attempt.CancelAfter(TimeSpan.FromMilliseconds(450));
                try
                {

View on GitHub (pinned to 7a42f01d47)