ATAK plugin for SDR spectrum visualization, radio-frequency monitoring and direction finding experiments.
- ✨ About
- ✅ Current Features
- 🧭 How It Works
⚠️ Project Status- 📦 Requirements
- 🔌 SDR Driver and TCP/IP Setup
▶️ Build and Installation- 🎛️ Main Controls
- 📡 Spectrum and Waterfall
- 🧭 Direction Finding
- 🎯 Cursor on Target
- 📂 Project Structure
- 🛠️ Troubleshooting
- 🗺️ Roadmap
- 🤝 Contributing
- ❓ FAQ
- ⚖️ Disclaimer
- 📄 License
DF_ESCTEL is an experimental ATAK plugin focused on software-defined radio integration and direction-finding workflows inside the TAK environment.
The system is designed around one or more directional antennas connected to an SDR receiver. The SDR is physically connected to an Android phone, where the SDR Driver application receives the SDR data and exposes the sample stream over TCP/IP. DF_ESCTEL, running inside ATAK on the same Android device, connects to that TCP/IP stream and uses it as its RF input.
The plugin displays a live RF spectrum and waterfall, provides tuning and receiver controls, and supports the creation of direction-of-arrival information directly on the ATAK map.
The project is intended for experimentation, development, education and laboratory use.
📡 Directional antenna
↓
🎛️ SDR receiver
↓
📱 Android phone
↓
🔌 SDR Driver
↓
🌐 TCP/IP stream
↓
🗺️ ATAK + DF_ESCTEL
↓
📊 Spectrum / Waterfall
↓
🧭 DOA
↓
🎯 Cursor on Target
Note
This is an independent experimental project.
ATAK, TAK and related names belong to their respective owners. This repository is not an official TAK Product Center project unless explicitly stated otherwise.
- 📡 RTL-SDR compatible receiver integration
- 🔌 Android SDR Driver as the SDR hardware interface
- 🌐 SDR sample stream delivered to DF_ESCTEL over TCP/IP
- 📊 Live RF spectrum visualization
- 🌊 Waterfall display
- 🎚️ Frequency tuning
- 🎛️ Receiver gain control
- 📶 Configurable visible bandwidth
- 🔍 Spectrum zoom
- ✨ Waterfall brightness control
- 📈 Peak detection
- 📐 Direction-of-arrival capture
- 🧭 DOA Snapshot mode
- 🔴 DOA LIVE mode
- 🗺️ Direction lines / sensor representation on the ATAK map
- 📏 Configurable DOA distance
- 📐 Configurable field of view
- 🎯 Cursor on Target integration
- 📱 Native ATAK plugin interface
- 🧩 Java-based Android architecture
flowchart LR
A[📡 Directional Antenna] --> B[🎛️ SDR Receiver]
B --> C[📱 Android Phone]
C --> D[🔌 SDR Driver]
D -->|TCP/IP sample stream| E[🗺️ ATAK + DF_ESCTEL]
E --> F[📊 FFT / Spectrum]
E --> G[🌊 Waterfall]
F --> H[📈 Peak Detection]
H --> I[🧭 DOA]
I --> J[🎯 Cursor on Target]
J --> K[🗺️ ATAK Map]
A directional antenna is connected to the SDR receiver. The SDR is physically connected to the Android phone. On Android, SDR Driver interfaces with the SDR hardware and publishes the received SDR sample stream through a TCP/IP connection.
DF_ESCTEL does not access the SDR USB hardware directly. Instead, it connects to the TCP/IP stream provided by SDR Driver. DF_ESCTEL then processes that data to generate the spectrum and waterfall views and combines the selected RF signal with the phone orientation and antenna pointing direction to support direction-of-arrival work.
In the intended configuration, SDR Driver and DF_ESCTEL run on the same Android phone, so the TCP/IP link can remain local to the device, depending on the SDR Driver network configuration.
Direction-finding information can then be represented on the ATAK map as a snapshot or as a continuously updated live indication.
This project is experimental and under active development.
It is intended primarily for:
- Software-defined radio experimentation
- TAK plugin development
- RF visualization
- Direction-finding demonstrations
- Laboratory and educational use
Warning
Do not assume the plugin provides calibrated or operationally validated direction-finding accuracy.
Hardware, antenna geometry, propagation, receiver characteristics, local interference and user configuration can all affect the displayed result.
Typical development environment:
| Component | Requirement |
|---|---|
| ATAK | Compatible ATAK build / SDK |
| Android Studio | Recent compatible version |
| Java / Android toolchain | As required by the selected ATAK SDK |
| Antenna | Directional antenna suitable for the frequency of interest |
| SDR hardware | RTL-SDR compatible receiver |
| Android device | Phone running ATAK, DF_ESCTEL and SDR Driver |
| Physical SDR connection | SDR connected to the Android phone, typically through USB/OTG as supported by the device |
| SDR interface application | SDR Driver for Android |
| Stream transport | TCP/IP from SDR Driver to DF_ESCTEL |
| Network path | Normally local to the Android device; may depend on the SDR Driver TCP/IP configuration |
The exact ATAK SDK/API version should match the build configuration used by the plugin.
The intended physical and software arrangement is:
RF signal
↓
┌───────────────────────┐
│ Directional antenna │
└───────────┬───────────┘
│ RF
↓
┌───────────────────────┐
│ SDR receiver │
└───────────┬───────────┘
│ USB / OTG
↓
┌───────────────────────┐
│ Android phone │
│ │
│ ┌─────────────────┐ │
│ │ SDR Driver │ │
│ └────────┬────────┘ │
│ │ TCP/IP │
│ ↓ │
│ ┌─────────────────┐ │
│ │ ATAK │ │
│ │ + DF_ESCTEL │ │
│ └─────────────────┘ │
└───────────────────────┘
The operator physically points the directional antenna toward the signal of interest. The antenna feeds the SDR receiver, and the SDR is connected to the Android phone. SDR Driver manages the SDR hardware and sends the received sample stream through TCP/IP to DF_ESCTEL.
DF_ESCTEL then provides the spectrum, waterfall, tuning interface and direction-finding representation inside ATAK. The Android phone also provides the map environment and orientation information used by the DF workflow.
DF_ESCTEL uses SDR Driver on Android as the interface between the physical SDR receiver and the plugin.
The intended flow is:
Directional antenna
↓
SDR receiver
↓
Android USB / OTG
↓
SDR Driver
↓
TCP/IP SDR stream
↓
DF_ESCTEL
↓
ATAK
Connect the SDR receiver to the Android device using the appropriate USB/OTG connection supported by the phone and SDR.
The directional antenna must be connected to the SDR RF input.
Open SDR Driver on the Android phone and grant USB access to the SDR when Android requests permission.
SDR Driver is responsible for:
- Accessing the SDR hardware
- Receiving the SDR sample stream
- Exposing that stream through TCP/IP
- Allowing DF_ESCTEL to consume the SDR data without directly controlling the USB device
Configure or start the TCP/IP server provided by SDR Driver.
DF_ESCTEL must be configured to connect to the same IP address and TCP port exposed by SDR Driver.
When both applications run on the same Android phone, this is normally a local TCP/IP connection. The exact host address and port depend on the SDR Driver configuration used on the device.
Once SDR Driver is running and the TCP/IP SDR stream is available:
ATAK
→ Plugins
→ DF_ESCTEL
→ LOAD
Then connect DF_ESCTEL to the SDR Driver TCP/IP endpoint.
Important
Start SDR Driver before attempting to receive SDR data in DF_ESCTEL.
DF_ESCTEL expects the SDR sample stream to be available through TCP/IP; it does not directly claim the SDR USB device.
Tip
If DF_ESCTEL cannot receive samples, first verify that Android granted SDR Driver permission to access the USB SDR and that the TCP/IP server is active.
git clone https://github.com/YOUR_USERNAME/DF_ESCTEL.git
cd DF_ESCTELReplace YOUR_USERNAME with your GitHub username.
Open the repository root as an Android Studio project and allow Gradle to synchronize.
Use the ATAK SDK and build configuration expected by the project.
Do not commit local SDK paths, signing secrets or machine-specific files.
For example, local.properties should remain local to the development machine.
From Android Studio:
Build → Rebuild Project
Or use the Gradle task corresponding to the configured ATAK CIV build variant.
Example:
./gradlew clean
./gradlew assembleCivDebugThe exact task name may differ depending on the ATAK SDK/plugin template version.
Install the generated APK on the device running ATAK.
Then open:
ATAK
→ Plugins
→ DF_ESCTEL
→ LOAD
If the plugin is detected but does not load, review plugin.xml, the application package, the plugin implementation class and adb logcat.
DF_ESCTEL provides controls for the SDR receiver and visualization.
Typical controls include:
| Control | Function |
|---|---|
| Frequency | Sets the center frequency |
| RX Gain | Adjusts the SDR receiver gain through the configured SDR Driver/TCP interface |
| Bandwidth | Changes the visible RF span |
| Zoom | Magnifies the spectrum view |
| Brightness | Adjusts waterfall visibility |
| FOV | Sets the displayed DOA field of view |
| Distance | Sets the projected DOA distance |
| DOA Snapshot | Places a single direction indication |
| DOA LIVE | Continuously updates the direction indication |
The available values and defaults may evolve as development continues.
The plugin includes a custom spectrum/waterfall view for displaying received RF energy.
Frequency domain
─────────────────────────────────────────────
/\ /\
/ \ /\ / \
───────────/────\──/──\/────\───────────────
Peak
Waterfall
█████████████████████████████████████████████
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
The display can be used to:
- Locate active signals
- Tune the receiver
- Observe relative RF activity
- Select frequencies of interest
- Support direction-finding experiments
Important
Spectrum levels shown by an uncalibrated RTL-SDR should not automatically be interpreted as calibrated RF power measurements.
DF_ESCTEL currently provides two main DOA workflows.
The direction-finding concept assumes the use of a directional antenna connected to the SDR. The antenna pointing direction, together with the Android phone orientation and the selected RF signal, is used to represent a line or sector of bearing on the ATAK map.
Creates a single direction-of-arrival indication using the current orientation and configured distance.
A snapshot can include information such as:
LOB-DOA | azimuth | distance
The resulting map item can also contain useful metadata such as timestamp and detected RF peak information.
Continuously updates a direction indication on the ATAK map.
This mode is intended for dynamic experimentation where the device orientation or estimated bearing changes over time.
Conceptually:
Directional antenna pointing direction
+
SDR received signal
+
Android phone orientation
+
Configured FOV / distance
↓
Live map direction
DF_ESCTEL uses TAK-compatible map objects / Cursor on Target mechanisms to represent direction information inside ATAK.
This allows RF-derived information to coexist with other TAK map data.
Depending on the active ATAK network configuration, map information may also be shared through TAK-compatible networking.
Note
CoT representation does not by itself guarantee measurement accuracy. It is the transport and representation layer for the generated information.
A simplified project layout is:
DF_ESCTEL/
├── app/
│ ├── src/
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ ├── assets/
│ │ │ └── plugin.xml
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── atakmap/
│ │ │ └── android/
│ │ │ └── df_esctel/
│ │ │ └── plugin/
│ │ │ ├── df_esctel.java
│ │ │ ├── PluginNativeLoader.java
│ │ │ └── SpectrumWaterfallView.java
│ │ └── res/
│ │ ├── drawable/
│ │ ├── layout/
│ │ ├── values/
│ │ └── xml/
│ │
│ └── build.gradle
│
├── docs/
│ └── images/
│ └── df_esctel_logo.png
│
├── build.gradle
├── settings.gradle
├── gradle.properties
├── LICENSE
└── README.md
The exact structure may change as the project evolves.
Check:
app/src/main/assets/plugin.xml- Plugin implementation class
- Java package name
- Gradle
namespace - Gradle
applicationId AndroidManifest.xml- ATAK SDK/API compatibility
Useful command:
adb logcat -cAttempt to load the plugin, then:
adb logcat -d | grep -iE "plugin|df_esctel|ClassNotFound|Exception|IPlugin"Verify that the Java package declared at the top of the file matches the plugin package.
Example:
package com.atakmap.android.df_esctel.plugin;All related classes should use the correct package or import each other explicitly.
Check:
- The SDR is physically connected to the Android phone.
- The USB/OTG adapter is working.
- Android detected the USB device.
- SDR Driver has permission to access the SDR.
- No other Android application currently owns the SDR USB device.
- The antenna is connected to the correct SDR RF input.
Try disconnecting and reconnecting the SDR, then reopen SDR Driver and grant USB permission again.
Check:
- SDR Driver is running.
- SDR Driver successfully opened the SDR hardware.
- The TCP/IP server/stream is active in SDR Driver.
- DF_ESCTEL is configured with the correct IP address.
- DF_ESCTEL is configured with the correct TCP port.
- Both applications are using the expected local/network interface.
- No firewall or Android network restriction is blocking the connection.
The expected chain is:
SDR → SDR Driver → TCP/IP → DF_ESCTEL
If SDR Driver is not producing the TCP/IP stream, DF_ESCTEL will not receive SDR samples.
- Improve SDR connection management
- Improve reconnect and error recovery
- Expand spectrum configuration
- Improve waterfall rendering
- Add additional SDR hardware support
- Improve signal selection and peak tracking
- Refine DOA visualization
- Add configurable DOA calibration
- Improve logging and diagnostics
- Add automated tests
- Expand documentation
Issues, ideas and Pull Requests are welcome.
Useful contributions include:
- ATAK compatibility testing
- SDR hardware testing
- Spectrum / FFT improvements
- Waterfall rendering improvements
- SDR Driver / TCP transport improvements
- Direction-finding visualization
- Android UI improvements
- Bug reports
- Documentation fixes
When reporting a bug, include whenever possible:
ATAK version
Android version
Plugin build
SDR model
SDR Driver version / configuration
Relevant adb logcat output
Steps to reproduce
No. DF_ESCTEL is an independent experimental project unless a repository release explicitly states otherwise.
The plugin provides tools to represent and work with direction-of-arrival information, but the accuracy and method depend on the connected hardware, orientation data, RF environment and workflow being used.
The current implementation is designed around an RTL-SDR compatible receiver connected to a directional antenna.
The SDR is physically connected to the Android phone. SDR Driver accesses the SDR hardware and sends the SDR sample stream over TCP/IP to DF_ESCTEL. DF_ESCTEL therefore consumes the SDR stream through TCP/IP instead of directly accessing the USB SDR hardware.
Additional SDR hardware or transport methods may be supported in the future.
Not necessarily. The plugin runs inside ATAK. TAK Server requirements depend on whether the user wants to exchange generated TAK data with other clients or networks.
Not necessarily. Treat spectrum amplitude as a relative indication unless the complete receiver chain has been appropriately calibrated.
Warning
This software is provided for experimentation, education, development and laboratory use.
It is distributed without warranties or guarantees of accuracy, availability, fitness for a particular purpose or operational suitability.
Do not rely on it as the sole source of information for safety-critical, emergency, security-critical or operational decisions.
Users are responsible for complying with applicable:
- Radio regulations
- Spectrum and frequency-allocation rules
- Privacy requirements
- Network security policies
- Software and device licensing requirements
- Organizational policies governing TAK and radio systems
This project is released under the MIT License.
See:
LICENSE
If this project is useful or interesting:
- ⭐ Star the repository
- 🐞 Open an issue
- 💡 Share an idea
- 🔀 Submit a Pull Request
- 📡 Test another SDR configuration
Made for experimentation with 📡 SDR, 🧭 direction finding and 🗺️ TAK.
DF_ESCTEL


