https://github.com/sarahroselives/pocket25
Pocket25 - The Mobile P25 Radio Decoder
https://github.com/sarahroselives/pocket25
android dmr dsd p25
Last synced: 27 days ago
JSON representation
Pocket25 - The Mobile P25 Radio Decoder
- Host: GitHub
- URL: https://github.com/sarahroselives/pocket25
- Owner: SarahRoseLives
- License: gpl-3.0
- Created: 2026-01-10T12:58:18.000Z (5 months ago)
- Default Branch: master
- Last Pushed: 2026-04-23T05:06:52.000Z (about 1 month ago)
- Last Synced: 2026-04-23T07:02:52.101Z (about 1 month ago)
- Topics: android, dmr, dsd, p25
- Language: C
- Homepage: https://pocket25.com
- Size: 4.77 MB
- Stars: 107
- Watchers: 15
- Forks: 8
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- Funding: FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# 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](https://github.com/arancormonk/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](https://github.com/SarahRoseLives/rtl_tcp_echo)** to capture IQ samples:
```bash
# 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
1. Download the latest APK from https://sarahsforge.dev/products/Pocket25
2. Enable "Install from Unknown Sources" on your Android device
3. Install the APK
4. Grant USB permissions when prompted (for native USB mode)
## 📖 Usage
### Quick Start (P25 Trunked System):
1. **Import from RadioReference:**
- Tap "Import from RadioReference"
- Search for your system
- Select and import
2. **Connect RTL-SDR:**
- Native USB: Connect dongle, grant permission
- Remote: Configure host/port in Manual Configuration
3. **Start Scanning:**
- Tap "Start" to begin monitoring
- Application will automatically follow voice traffic
### Manual Configuration (Conventional):
1. Navigate to "Manual Configuration"
2. Enter frequency in MHz (e.g., 771.18125)
3. Configure gain and PPM correction
4. Tap "Apply & Connect"
5. 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:
```bash
# 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:
1. **Sample Recordings** - See "Need Help" section above
2. **Protocol UI Implementation** - DMR, NXDN, D-STAR display logic
3. **Feature Development** - Conventional scanner, squelch, recording
4. **Testing** - Bug reports and feature requests
5. **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](https://github.com/arancormonk/dsd-fme)
- **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](../../issues)
- **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.