Control the WiFi monitor mode on rooted Android devices with Qualcomm Snapdragon chipsets.
AmWF is an Android application that enables and disables WiFi monitor mode using Qualcomm's con_mode driver parameter. Monitor mode is required for wireless network analysis, packet capture, and WPA/WPA2 handshake capture.
The app automatically detects your device's chipset, root method, WiFi driver, and tests injection/capture capabilities before enabling monitor mode.
AmWF identifies Snapdragon chipsets by codename and CPU part number. The following are explicitly recognized:
| Generation | Chipset | Codename |
|---|---|---|
| Flagship | Snapdragon 8 Gen 3 | kalama |
| Flagship | Snapdragon 8 Gen 2 | cape |
| Flagship | Snapdragon 8+ Gen 2 | - |
| Flagship | Snapdragon 8 Gen 1 | taro |
| Flagship | Snapdragon 8+ Gen 1 | - |
| Flagship | Snapdragon 888 / 888+ | lahaina, haydn |
| Flagship | Snapdragon 870 | kona, alioth, cpu7pro |
| Flagship | Snapdragon 865 | kona, msmnile |
| Flagship | Snapdragon 860 | vayu |
| Flagship | Snapdragon 855 / 855+ | msmnile |
| High-end | Snapdragon 8s Gen 3 | crown |
| High-end | Snapdragon 780G | waipio |
| High-end | Snapdragon 778G / 778G+ | waipio |
| High-end | Snapdragon 768G | lito |
| High-end | Snapdragon 750G | atoll, sm7225 |
| Mid-range | Snapdragon 7 Gen 2 | pineapple |
| Mid-range | Snapdragon 7 Gen 1 | pineapple, yupik |
| Mid-range | Snapdragon 730G | holi |
| Mid-range | Snapdragon 720G | corona |
| Mid-range | Snapdragon 695 | sm6350 |
| Mid-range | Snapdragon 6 Gen 1/2 | qsm |
| Entry | Snapdragon 680 | bengal |
| Entry | Snapdragon 665/670/675 | trinket |
| Entry | Snapdragon 662 | bengal |
| Laptop | Snapdragon 7c Gen 2 | saipan |
Other Snapdragon chipsets may work if they expose con_mode through the Qualcomm WiFi driver (QCACLD). The app checks for con_mode at runtime and reports compatibility automatically.
| Method | Supported |
|---|---|
| Magisk | Yes |
| KernelSU | Yes |
| APatch | Yes |
| phh-su | Yes |
| SuperSU | Yes |
| Generic su | Yes |
The app searches for con_mode across multiple Qualcomm driver modules. The search runs with root (su), because modern SELinux policies block the app UID from reading /sys/module; su runs in the su domain and can read sysfs. Out-of-tree driver variants such as qca_cld3_* are also matched:
| Module Path | Typical Hardware |
|---|---|
/sys/module/wlan/parameters/con_mode |
Many Snapdragon (e.g. 855, 860, 732G) |
/sys/module/hdd/parameters/con_mode |
Snapdragon 888, 8 Gen series |
/sys/module/kiwi_v2/parameters/con_mode |
Snapdragon 8 Gen 2+ |
/sys/module/qca_cld3_kiwi_v2/parameters/con_mode |
Snapdragon 8 Elite (e.g. Galaxy Z Fold7) |
/sys/module/kiwi/parameters/con_mode |
Snapdragon 6/7 series |
/sys/module/wcn/parameters/con_mode |
Qualcomm WCN6xxx |
| Requirement | Minimum |
|---|---|
| Android version | 7.0 (API 24) |
| Root access | Required |
| Architecture | ARM64 (aarch64) |
1. App launches
└─> Detects root, chipset, WiFi driver, con_mode path
└─> Tests write access to con_mode
└─> Tests injection and capture capabilities
2. User taps "ACTIVAR MONITOR"
└─> Disables WiFi service (svc wifi disable)
└─> Writes con_mode = 4 (monitor mode)
└─> Brings wlan0 DOWN
└─> Sets interface to monitor mode (iw dev wlan0 set monitor)
└─> Brings wlan0 UP
└─> Re-enables WiFi service (svc wifi enable)
3. User taps "VOLVER A NORMAL"
└─> Disables WiFi service
└─> Writes con_mode = 0 (managed mode)
└─> Brings wlan0 DOWN
└─> Sets interface to managed mode (iw dev wlan0 set type managed)
└─> Brings wlan0 UP
└─> Re-enables WiFi service
| Value | Mode | Description |
|---|---|---|
| 0 | STA | Managed / Normal mode |
| 4 | Monitor | Monitor mode (used by AmWF) |
The app tests your device's actual capabilities before enabling monitor mode:
| Capability | What It Means |
|---|---|
| Injection | Device can transmit custom packets |
| Capture | Device can capture all WiFi traffic |
| Passive only | Device can only listen to traffic passively |
Results vary by device and driver. The app reports these capabilities in the compatibility section at startup.
- Download the latest release from Releases
- Install the APK on your rooted Android device
- Grant root access when prompted
The app has two sections:
Device Compatibility - Shows your device's chipset, WiFi driver, root status, con_mode path, and tested capabilities.
WiFi Mode - Shows the current mode (Normal / Monitor) with interface details (name, MAC address, frequency).
- ACTIVAR MONITOR - Switches the WiFi interface to monitor mode
- VOLVER A NORMAL - Returns to managed mode
- Language button (ES/EN) - Toggles between Spanish and English
- Compartir diagnóstico / Share diagnostics - Generates a report and opens the share sheet
When something doesn't work, tap Compartir diagnóstico: AmWF gathers passive device and WiFi state (build properties, root/SELinux, chipset, con_mode path and value, iw info, driver modules, the last 80 wifi-related dmesg lines, available tools, the last compatibility result and an in-app log buffer) and lets you share it as a .txt file. It does not run the capability test, so WiFi is not interrupted.
MAC addresses are redacted by default (only the OUI prefix is kept) and WiFi SSIDs are replaced with <redacted>. Attach this file when opening an issue -- it is the fastest way to diagnose problems on hardware the maintainers don't own.
On first launch, the app automatically runs a compatibility check. This involves temporarily switching to monitor mode to test capabilities, then restoring normal mode. WiFi may briefly disconnect during this process -- this is expected behavior.
app/src/main/java/com/hitomatito/amwf/
├── MainActivity.kt # UI and activity lifecycle
├── MonitorModeManager.kt # Monitor mode enable/disable logic
├── DeviceCompatibilityChecker.kt # Chipset, root, driver detection
├── ShellExecutor.kt # Root shell execution
├── LocaleHelper.kt # Language switching
└── diagnostics/
├── AppLogger.kt # In-memory log ring buffer
├── DiagnosticsCollector.kt # Passive device/WiFi state gathering
├── DiagnosticsExporter.kt # Writes and shares the report
└── DiagnosticsFormat.kt # MAC redaction / formatting
| Technology | Purpose |
|---|---|
| Kotlin | Primary language |
| Material Design 3 | UI components |
| Coroutines | Async shell commands |
| View Binding | Type-safe view access |
- Qualcomm only -- Does not work on MediaTek, Exynos, or other chipsets
- Root required -- Cannot modify WiFi driver parameters without root
- Driver dependent -- Newer Qualcomm drivers (cnss_pci/WCN) may not expose
con_mode - SELinux -- Strict SELinux policies may block access to
con_mode - Injection not guaranteed -- Most devices support passive capture only; packet injection depends on the specific driver and chipset
AmWF is licensed under the GNU General Public License v3.0 (or later). See LICENSE for the full text.
Third-party components bundled or planned for the app are governed by their own licenses -- see THIRD-PARTY-NOTICES.md.
- Fork the repository
- Create a feature branch (
git checkout -b feature/my-feature) - Commit your changes
- Push to the branch (
git push origin feature/my-feature) - Open a Pull Request
- Bug reports: Issues
- Feature requests: Discussions
AmWF © 2026 Hitomatito — released under the GPL-3.0 license
