# `Dala.Connectivity.Wifi`
[🔗](https://github.com/manhvu/dala/blob/main/lib/dala/connectivity/wifi.ex#L1)

WiFi network information and configuration.

Provides access to WiFi network state, connected network info,
and (where supported) the ability to scan for nearby networks.

Requires `:wifi` permission on Android (iOS does not expose WiFi scanning to apps).

## Events

WiFi events arrive as:

    handle_info({:wifi, :state_changed, %{connected: boolean, ssid: ssid, bssid: bssid, ip: ip}}, socket)
    handle_info({:wifi, :scan_result, [%{ssid: ssid, bssid: bssid, rssi: rssi, security: security}]}, socket)

iOS: `NEHotspotConfigurationManager` (limited), `CNCopyCurrentNetworkInfo` (deprecated but works).
Android: `WifiManager`, `ConnectivityManager`.

# `security_type`

```elixir
@type security_type() :: :open | :wep | :wpa | :wpa2 | :wpa3 | :unknown
```

# `connected?`

```elixir
@spec connected?() :: boolean()
```

Check if device is connected to WiFi.

# `current_network`

```elixir
@spec current_network() :: map()
```

Get currently connected WiFi network info.

Returns:
    %{
      connected: boolean,
      ssid: String.t() | nil,
      bssid: String.t() | nil,
      ip: String.t() | nil,
      rssi: integer | nil
    }

# `disable`

```elixir
@spec disable() :: :ok | {:error, term()}
```

Disable WiFi (Android only, requires special permissions).

iOS: Not supported.

# `enable`

```elixir
@spec enable() :: :ok | {:error, term()}
```

Enable WiFi (Android only, requires special permissions).

iOS: Not supported.

# `ip_address`

```elixir
@spec ip_address() :: String.t() | nil
```

Get WiFi IP address (convenience wrapper).

# `scan`

```elixir
@spec scan(Dala.Socket.t()) :: Dala.Socket.t()
```

Scan for nearby WiFi networks (Android only).

Results arrive as `:wifi, :scan_result` message.

iOS: Not supported by public APIs (will return `{:error, :not_supported}`).

---

*Consult [api-reference.md](api-reference.md) for complete listing*
