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
- Confirm the projector's actual IP in its network settings menu and re-run FindAsync with that seed
- Ensure the machine running discovery is on the same subnet/VLAN as the projector
- Disable AP/client isolation on the router
- 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
- Seed the scan with a recently verified device IP
- Ensure the projector is powered (not deep standby) during scans
- Run discovery on the interface in the projector's subnet
- Disable AP/client isolation on the router
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
- No VIDAA descriptor answered at
- Enter a valid projector IPv4 address.
- A Wi-Fi MAC address is required for VIDAA authentication.
- The network device does not advertise VIDAA remote control.
- Invalid VIDAA remote key.
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)