Skip to content

Repository files navigation

📡 DF_ESCTEL

ATAK plugin for SDR spectrum visualization, radio-frequency monitoring and direction finding experiments.

ATAK Java RTL-SDR SDR Driver TCP/IP CoT Experimental MIT License

DF_ESCTEL DF_ESCTEL

🎥 Demo

DF_ESCTEL demo


📚 Table of Contents


✨ About

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.


✅ Current Features

  • 📡 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

🧭 How It Works

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]
Loading

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.


⚠️ Project Status

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.


📦 Requirements

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.

Hardware architecture

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.


🔌 SDR Driver and TCP/IP Setup

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

1. Connect the SDR to the Android phone

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.

2. Start SDR Driver

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

3. Configure the TCP/IP stream

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.

4. Start DF_ESCTEL

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.


▶️ Build and Installation

1. Clone the repository

git clone https://github.com/YOUR_USERNAME/DF_ESCTEL.git
cd DF_ESCTEL

Replace YOUR_USERNAME with your GitHub username.


2. Open in Android Studio

Open the repository root as an Android Studio project and allow Gradle to synchronize.


3. Configure the ATAK SDK

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.


4. Build

From Android Studio:

Build → Rebuild Project

Or use the Gradle task corresponding to the configured ATAK CIV build variant.

Example:

./gradlew clean
./gradlew assembleCivDebug

The exact task name may differ depending on the ATAK SDK/plugin template version.


5. Install

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.


🎛️ Main Controls

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.


📡 Spectrum and Waterfall

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.


🧭 Direction Finding

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.

DOA Snapshot

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.


DOA LIVE

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

🎯 Cursor on Target

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.


📂 Project Structure

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.


🛠️ Troubleshooting

Plugin appears in ATAK but does not LOAD

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 -c

Attempt to load the plugin, then:

adb logcat -d | grep -iE "plugin|df_esctel|ClassNotFound|Exception|IPlugin"

SpectrumWaterfallView cannot be found

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.


SDR Driver cannot access the SDR

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.


DF_ESCTEL cannot receive the SDR stream

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.


🗺️ Roadmap

  • 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

🤝 Contributing

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

❓ FAQ

Is this an official ATAK plugin?

No. DF_ESCTEL is an independent experimental project unless a repository release explicitly states otherwise.


Does DF_ESCTEL perform direction finding automatically?

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.


Is RTL-SDR required?

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.


Does it require a TAK Server?

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.


Is the displayed signal level calibrated?

Not necessarily. Treat spectrum amplitude as a relative indication unless the complete receiver chain has been appropriately calibrated.


⚖️ Disclaimer

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

📄 License

This project is released under the MIT License.

See:

LICENSE

⭐ Support the Project

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

About

Experimental ATAK plugin for SDR spectrum visualization, RF monitoring and direction finding (DOA) using RTL-SDR over TCP/IP.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages