Pocket25
Pocket25 - The Mobile P25 Radio Decoder
Install / Use
/learn @SarahRoseLives/Pocket25README
Pocket25 - Mobile P25 Digital Radio Decoder
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
🎯 Primary Focus: P25 Systems
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, see
P25_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
🔧 Based on DSD-Neo Engine
Under the hood, Pocket25 uses the full DSD-Neo decoder, which means it technically supports many more digital voice protocols:
Protocols Supported by DSD-Neo:
- ✅ P25 Phase 1 (Full UI support, audio working perfectly)
- ⚠️ P25 Phase 2 (Full UI support, audio choppy - see
P25_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.
📡 RTL-SDR Support
Pocket25 supports two methods for RTL-SDR:
1. Native USB (Recommended)
- Direct connection via USB OTG
- No root required
- Lower latency
- Better performance
2. Remote RTL_TCP
- Connect to RTL-SDR over network
- Useful for remote monitoring
- Works with existing rtl_tcp servers
🎬 Need Help: Sample Recordings Wanted!
I need your help to improve multi-protocol support!
To properly implement UI support for DMR, NXDN, D-STAR, YSF, dPMR, and other protocols, I need sample recordings of these systems in action.
How You Can Help:
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 1235
What 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!
🚀 Features
Current Features (P25):
- ✅ 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
Planned Features:
- 🔄 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)
📋 Requirements
- 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
Supported RTL-SDR Dongles:
- NooElec NESDR series
- RTL-SDR Blog V3/V4
- Generic RTL2832U dongles
- Any rtl_tcp compatible source
🔧 Installation
- 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)
📖 Usage
Quick Start (P25 Trunked System):
-
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
Manual Configuration (Conventional):
- Navigate to "Manual Configuration"
- Enter frequency in MHz (e.g., 771.18125)
- Configure gain and PPM correction
- Tap "Apply & Connect"
- Tap "Start"
Talkgroup Filtering:
- Long-press any talkgroup in the call history
- Choose "Mute" to blacklist (ignore)
- Use Settings to manage whitelist mode
🛠️ Building from Source
Prerequisites:
- Flutter 3.10+
- Android NDK r26+
- CMake 3.22+
Build Steps:
# 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 --release
🤝 Contributing
Contributions 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
📄 License
This project includes:
- Pocket25 App Code: GPL-3.0
- DSD-Neo: GPL-3.0
- mbelib-neo: GPL-3.0
- librtlsdr-android: GPL-2.0
🙏 Credits
- 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
📞 Contact
- GitHub Issues: Report bugs or request features
- Sample Submissions: Open an issue with recording details
⚠️ Disclaimer
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.
