Pocket25 is an Android application designed primarily for decoding APCO Project 25 (P25) trunked and conventional radio systems. Built on the powerful DSD-Neo decoder engine, it brings professional-grade digital radio monitoring to your mobile device.
Download an APK here: https://pocket25.com
This application was built with P25 in mind and provides full UI support for:
- P25 Phase 1 (C4FM modulation) - β Audio working perfectly
- P25 Phase 2 (TDMA/QPSK modulation) -
β οΈ Audio is choppy (upstream DSD-Neo limitation, seeP25_PHASE2_AUDIO_ISSUE.md) - Trunked System Following - Automatically follows voice traffic across control channels
- Conventional Monitoring - Manual frequency configuration
- RadioReference Import - Easy system configuration from RadioReference.com
- Talkgroup Filtering - Whitelist/Blacklist support for selective monitoring
- Real-time Call Display - Talkgroup, Radio ID, NAC, encryption status, emergency flags
- Site Details - WACN, System ID, Site ID, RFSS ID tracking
- Native USB RTL-SDR Support - Direct USB dongle support (no root required)
- Remote RTL_TCP - Connect to network-based RTL-SDR servers
Under the hood, Pocket25 uses the full DSD-Neo decoder, which means it technically supports many more digital voice protocols:
- β P25 Phase 1 (Full UI support, audio working perfectly)
β οΈ P25 Phase 2 (Full UI support, audio choppy - seeP25_PHASE2_AUDIO_ISSUE.md)- β DMR (Tier I/II/III) - Untested, UI support limited
- β NXDN (NXDN48/96) - Untested, UI support limited
- β D-STAR - Untested, UI support limited
- β YSF (Yaesu System Fusion) - Untested, UI support limited
- β dPMR - Untested, UI support limited
- β X2-TDMA - Untested, UI support limited
- β ProVoice (EDACS) - Untested, UI support limited
- β M17 - Untested, UI support limited
Important Note: While DSD-Neo will decode these protocols and you'll hear audio, the UI currently displays call information in a P25-centric format. Non-P25 systems may show incomplete or incorrect metadata in the interface.
Pocket25 supports two methods for RTL-SDR:
- Direct connection via USB OTG
- No root required
- Lower latency
- Better performance
- Connect to RTL-SDR over network
- Useful for remote monitoring
- Works with existing rtl_tcp servers
To properly implement UI support for DMR, NXDN, D-STAR, YSF, dPMR, and other protocols, I need sample recordings of these systems in action.
Use rtl_tcp_echo to capture IQ samples:
# rtl_tcp_echo is a middleman application that:
# 1. Sits between DSD-Neo and RTL_TCP
# 2. Captures raw IQ samples to a .bin file
# 3. Allows perfect playback for development/testing
# Do the following:
# 1. rtl_tcp -a 0.0.0.0
# 2. rtl_tcp_echo -listen 0.0.0.0:1235 -record iq_recording.bin
# 3. Run DSD-Neo as RTL_TCP port 1235What I'm looking for:
- β DMR systems (Tier I, II, or III with trunking)
- β NXDN systems (NXDN48 or NXDN96)
- β D-STAR repeaters/conventional
- β YSF (C4FM) repeaters/conventional
- β dPMR systems
- β ProVoice/EDACS systems
- β M17 conventional
What makes a good sample:
- Contains actual voice traffic (not just idle/control)
- At least 60-90 seconds of activity
- Clear signal (minimal static/interference)
- Include system details known (frequency, system ID, etc.)
Where to send samples:
- Open an issue on GitHub with a link to your recording
- Include: Protocol type, frequency, location (general area), any known system details
With your samples, I can build proper UI support for all DSD-Neo protocols!
- β Real-time P25 Phase 1 decoding (audio working perfectly)
β οΈ P25 Phase 2 decoding (audio is choppy - upstream DSD-Neo limitation)- β Trunked system following with automatic VC tracking
- β RadioReference.com system import
- β Talkgroup whitelist/blacklist filtering
- β Manual frequency configuration
- β Call history and activity log
- β Site detail monitoring (WACN/SysID/Site/RFSS)
- β Emergency call detection
- β Encryption status indication
- β Dual timeslot support (P25 Phase 2)
- β Native USB RTL-SDR support
- β Remote RTL_TCP support
- π Full DMR UI support (talkgroups, color codes, talker alias)
- π NXDN UI support (call types, RAN, radio IDs)
- π D-STAR UI support (callsigns, routing info)
- π YSF UI support
- π Conventional scanner mode with frequency stepping
- π Encryption key loading
- π Per-call recording
- π GPS/Location decoding (LRRP)
- Android 8.0+ (API 26+)
- RTL-SDR compatible dongle (RTL2832U chipset)
- R820T/R820T2 tuner recommended
- USB OTG cable/adapter for direct connection
- Or: Access to an RTL_TCP server on your network
- NooElec NESDR series
- RTL-SDR Blog V3/V4
- Generic RTL2832U dongles
- Any rtl_tcp compatible source
- Download the latest APK from https://sarahsforge.dev/products/Pocket25
- Enable "Install from Unknown Sources" on your Android device
- Install the APK
- Grant USB permissions when prompted (for native USB mode)
-
Import from RadioReference:
- Tap "Import from RadioReference"
- Search for your system
- Select and import
-
Connect RTL-SDR:
- Native USB: Connect dongle, grant permission
- Remote: Configure host/port in Manual Configuration
-
Start Scanning:
- Tap "Start" to begin monitoring
- Application will automatically follow voice traffic
- Navigate to "Manual Configuration"
- Enter frequency in MHz (e.g., 771.18125)
- Configure gain and PPM correction
- Tap "Apply & Connect"
- Tap "Start"
- Long-press any talkgroup in the call history
- Choose "Mute" to blacklist (ignore)
- Use Settings to manage whitelist mode
- Flutter 3.10+
- Android NDK r26+
- CMake 3.22+
# Clone repository
git clone https://github.com/SarahRoseLives/Pocket25.git
cd Pocket25
# Get dependencies
flutter pub get
cd example
flutter pub get
# Build APK
flutter build apk --releaseContributions are welcome! Areas where help is needed:
- Sample Recordings - See "Need Help" section above
- Protocol UI Implementation - DMR, NXDN, D-STAR display logic
- Feature Development - Conventional scanner, squelch, recording
- Testing - Bug reports and feature requests
- Documentation - Usage guides, protocol information
This project includes:
- Pocket25 App Code: GPL-3.0
- DSD-Neo: GPL-3.0
- mbelib-neo: GPL-3.0
- librtlsdr-android: GPL-2.0
- DSD-Neo by arancormonk
- mbelib - AMBE/IMBE vocoder implementation
- librtlsdr - RTL-SDR driver library
- RadioReference.com - System database
- Copilot - Compiling DSD into an Android library and Flutter integration
- GitHub Issues: Report bugs or request features
- Sample Submissions: Open an issue with recording details
This software is intended for authorized monitoring only. Users are responsible for ensuring compliance with all applicable laws and regulations regarding radio monitoring in their jurisdiction.