Skip to content

Camera Wi-Fi

After app-level pairing, the camera exposes its own access point. The phone joins that SoftAP; DUML and HTTP then use the camera LAN.

Ask the camera for its own AP:

  1. GetWifiSsid (0x07/0x07)
  2. GetWifiPassword (0x07/0x0e)

Replies are [status:1][packString value]. Do not synthesize the passphrase — read it.

Phone joins the camera’s SoftAP (WPA2).

Camera / gateway 192.168.2.1
Phone 192.168.2.x/24

On iOS this is NEHotspotConfiguration (Hotspot Configuration entitlement). See iOS notes. On Android this is WifiNetworkSpecifier plus ConnectivityManager.bindProcessToNetwork. SoftAP helpers live in Sources/OpenPocketViewCore/CameraSoftAP.swift — both shells must use that predicate, not a platform copy.

The UDP 9004 socket is connected to 192.168.2.1:9004. iOS sets NWParameters.requiredLocalEndpoint to the phone’s camera DHCP IPv4 (192.168.2.2…254) with an ephemeral local port because Network.framework .wifi is home en0. Android pins the process with bindProcessToNetwork, then Network.bindSocket on an unbound datagram and binds 0.0.0.0:0. Camera 9004 is the remote — a local :9004 bind accepted handshake + telemetry and dropped HEVC. Hopping onto home Wi-Fi after SoftAP onLost is the process unbind, not the wildcard bind.

Once associated, open the UDP DUML datalink.