{"id":44074040,"url":"https://github.com/sarahroselives/pocket25","last_synced_at":"2026-05-08T07:02:45.085Z","repository":{"id":332534176,"uuid":"1131658703","full_name":"SarahRoseLives/Pocket25","owner":"SarahRoseLives","description":"Pocket25 - The Mobile P25 Radio Decoder","archived":false,"fork":false,"pushed_at":"2026-04-23T05:06:52.000Z","size":5006,"stargazers_count":107,"open_issues_count":12,"forks_count":8,"subscribers_count":15,"default_branch":"master","last_synced_at":"2026-04-23T07:02:52.101Z","etag":null,"topics":["android","dmr","dsd","p25"],"latest_commit_sha":null,"homepage":"https://pocket25.com","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SarahRoseLives.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":"FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"patreon":"SarahRoseLives"}},"created_at":"2026-01-10T12:58:18.000Z","updated_at":"2026-04-20T03:35:23.000Z","dependencies_parsed_at":"2026-04-23T07:02:11.041Z","dependency_job_id":null,"html_url":"https://github.com/SarahRoseLives/Pocket25","commit_stats":null,"previous_names":["sarahroselives/pocket25"],"tags_count":77,"template":false,"template_full_name":null,"purl":"pkg:github/SarahRoseLives/Pocket25","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SarahRoseLives%2FPocket25","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SarahRoseLives%2FPocket25/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SarahRoseLives%2FPocket25/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SarahRoseLives%2FPocket25/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SarahRoseLives","download_url":"https://codeload.github.com/SarahRoseLives/Pocket25/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SarahRoseLives%2FPocket25/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32288653,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T06:26:00.361Z","status":"ssl_error","status_checked_at":"2026-04-26T06:25:58.791Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","dmr","dsd","p25"],"created_at":"2026-02-08T06:13:45.076Z","updated_at":"2026-04-26T07:00:54.682Z","avatar_url":"https://github.com/SarahRoseLives.png","language":"C","funding_links":["https://patreon.com/SarahRoseLives"],"categories":[],"sub_categories":[],"readme":"# Pocket25 - Mobile P25 Digital Radio Decoder\n\n**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.\n\nDownload an APK here: https://pocket25.com\n\n## 🎯 Primary Focus: P25 Systems\n\nThis application was built with P25 in mind and provides full UI support for:\n\n- **P25 Phase 1** (C4FM modulation) - ✅ Audio working perfectly\n- **P25 Phase 2** (TDMA/QPSK modulation) - ⚠️ Audio is choppy (upstream DSD-Neo limitation, see `P25_PHASE2_AUDIO_ISSUE.md`)\n- **Trunked System Following** - Automatically follows voice traffic across control channels\n- **Conventional Monitoring** - Manual frequency configuration\n- **RadioReference Import** - Easy system configuration from RadioReference.com\n- **Talkgroup Filtering** - Whitelist/Blacklist support for selective monitoring\n- **Real-time Call Display** - Talkgroup, Radio ID, NAC, encryption status, emergency flags\n- **Site Details** - WACN, System ID, Site ID, RFSS ID tracking\n- **Native USB RTL-SDR Support** - Direct USB dongle support (no root required)\n- **Remote RTL_TCP** - Connect to network-based RTL-SDR servers\n\n## 🔧 Based on DSD-Neo Engine\n\nUnder the hood, Pocket25 uses the full DSD-Neo decoder, which means it **technically supports** many more digital voice protocols:\n\n### Protocols Supported by DSD-Neo:\n- ✅ **P25 Phase 1** (Full UI support, audio working perfectly)\n- ⚠️ **P25 Phase 2** (Full UI support, audio choppy - see `P25_PHASE2_AUDIO_ISSUE.md`)\n- ❓ **DMR** (Tier I/II/III) - Untested, UI support limited\n- ❓ **NXDN** (NXDN48/96) - Untested, UI support limited\n- ❓ **D-STAR** - Untested, UI support limited\n- ❓ **YSF (Yaesu System Fusion)** - Untested, UI support limited\n- ❓ **dPMR** - Untested, UI support limited\n- ❓ **X2-TDMA** - Untested, UI support limited\n- ❓ **ProVoice (EDACS)** - Untested, UI support limited\n- ❓ **M17** - Untested, UI support limited\n\n**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.\n\n## 📡 RTL-SDR Support\n\nPocket25 supports two methods for RTL-SDR:\n\n### 1. Native USB (Recommended)\n- Direct connection via USB OTG\n- No root required\n- Lower latency\n- Better performance\n\n### 2. Remote RTL_TCP\n- Connect to RTL-SDR over network\n- Useful for remote monitoring\n- Works with existing rtl_tcp servers\n\n## 🎬 Need Help: Sample Recordings Wanted!\n\n### I need your help to improve multi-protocol support!\n\nTo properly implement UI support for DMR, NXDN, D-STAR, YSF, dPMR, and other protocols, **I need sample recordings** of these systems in action.\n\n#### How You Can Help:\n\nUse **[rtl_tcp_echo](https://github.com/SarahRoseLives/rtl_tcp_echo)** to capture IQ samples:\n\n```bash\n# rtl_tcp_echo is a middleman application that:\n# 1. Sits between DSD-Neo and RTL_TCP\n# 2. Captures raw IQ samples to a .bin file\n# 3. Allows perfect playback for development/testing\n\n# Do the following:\n# 1. rtl_tcp -a 0.0.0.0\n# 2. rtl_tcp_echo -listen 0.0.0.0:1235 -record iq_recording.bin\n# 3. Run DSD-Neo as RTL_TCP port 1235\n```\n\n**What I'm looking for:**\n- ✅ **DMR** systems (Tier I, II, or III with trunking)\n- ✅ **NXDN** systems (NXDN48 or NXDN96)\n- ✅ **D-STAR** repeaters/conventional\n- ✅ **YSF (C4FM)** repeaters/conventional\n- ✅ **dPMR** systems\n- ✅ **ProVoice/EDACS** systems\n- ✅ **M17** conventional\n\n**What makes a good sample:**\n- Contains actual voice traffic (not just idle/control)\n- At least 60-90 seconds of activity\n- Clear signal (minimal static/interference)\n- Include system details known (frequency, system ID, etc.)\n\n**Where to send samples:**\n- Open an issue on GitHub with a link to your recording\n- Include: Protocol type, frequency, location (general area), any known system details\n\nWith your samples, I can build proper UI support for all DSD-Neo protocols!\n\n## 🚀 Features\n\n### Current Features (P25):\n- ✅ Real-time P25 Phase 1 decoding (audio working perfectly)\n- ⚠️ P25 Phase 2 decoding (audio is choppy - upstream DSD-Neo limitation)\n- ✅ Trunked system following with automatic VC tracking\n- ✅ RadioReference.com system import\n- ✅ Talkgroup whitelist/blacklist filtering\n- ✅ Manual frequency configuration\n- ✅ Call history and activity log\n- ✅ Site detail monitoring (WACN/SysID/Site/RFSS)\n- ✅ Emergency call detection\n- ✅ Encryption status indication\n- ✅ Dual timeslot support (P25 Phase 2)\n- ✅ Native USB RTL-SDR support\n- ✅ Remote RTL_TCP support\n\n### Planned Features:\n- 🔄 Full DMR UI support (talkgroups, color codes, talker alias)\n- 🔄 NXDN UI support (call types, RAN, radio IDs)\n- 🔄 D-STAR UI support (callsigns, routing info)\n- 🔄 YSF UI support\n- 🔄 Conventional scanner mode with frequency stepping\n- 🔄 Encryption key loading\n- 🔄 Per-call recording\n- 🔄 GPS/Location decoding (LRRP)\n\n## 📋 Requirements\n\n- **Android 8.0+** (API 26+)\n- **RTL-SDR compatible dongle** (RTL2832U chipset)\n  - R820T/R820T2 tuner recommended\n  - USB OTG cable/adapter for direct connection\n- **Or:** Access to an RTL_TCP server on your network\n\n### Supported RTL-SDR Dongles:\n- NooElec NESDR series\n- RTL-SDR Blog V3/V4\n- Generic RTL2832U dongles\n- Any rtl_tcp compatible source\n\n## 🔧 Installation\n\n1. Download the latest APK from https://sarahsforge.dev/products/Pocket25\n2. Enable \"Install from Unknown Sources\" on your Android device\n3. Install the APK\n4. Grant USB permissions when prompted (for native USB mode)\n\n## 📖 Usage\n\n### Quick Start (P25 Trunked System):\n\n1. **Import from RadioReference:**\n   - Tap \"Import from RadioReference\"\n   - Search for your system\n   - Select and import\n\n2. **Connect RTL-SDR:**\n   - Native USB: Connect dongle, grant permission\n   - Remote: Configure host/port in Manual Configuration\n\n3. **Start Scanning:**\n   - Tap \"Start\" to begin monitoring\n   - Application will automatically follow voice traffic\n\n### Manual Configuration (Conventional):\n\n1. Navigate to \"Manual Configuration\"\n2. Enter frequency in MHz (e.g., 771.18125)\n3. Configure gain and PPM correction\n4. Tap \"Apply \u0026 Connect\"\n5. Tap \"Start\"\n\n### Talkgroup Filtering:\n\n- Long-press any talkgroup in the call history\n- Choose \"Mute\" to blacklist (ignore)\n- Use Settings to manage whitelist mode\n\n## 🛠️ Building from Source\n\n### Prerequisites:\n- Flutter 3.10+\n- Android NDK r26+\n- CMake 3.22+\n\n### Build Steps:\n\n```bash\n# Clone repository\ngit clone https://github.com/SarahRoseLives/Pocket25.git\ncd Pocket25\n\n# Get dependencies\nflutter pub get\ncd example\nflutter pub get\n\n# Build APK\nflutter build apk --release\n```\n\n## 🤝 Contributing\n\nContributions are welcome! Areas where help is needed:\n\n1. **Sample Recordings** - See \"Need Help\" section above\n2. **Protocol UI Implementation** - DMR, NXDN, D-STAR display logic\n3. **Feature Development** - Conventional scanner, squelch, recording\n4. **Testing** - Bug reports and feature requests\n5. **Documentation** - Usage guides, protocol information\n\n## 📄 License\n\nThis project includes:\n- **Pocket25 App Code:** GPL-3.0\n- **DSD-Neo:** GPL-3.0\n- **mbelib-neo:** GPL-3.0\n- **librtlsdr-android:** GPL-2.0\n\n## 🙏 Credits\n\n- **DSD-Neo** by [arancormonk](https://github.com/arancormonk/dsd-fme)\n- **mbelib** - AMBE/IMBE vocoder implementation\n- **librtlsdr** - RTL-SDR driver library\n- **RadioReference.com** - System database\n- **Copilot** - Compiling DSD into an Android library and Flutter integration\n\n## 📞 Contact\n\n- **GitHub Issues:** [Report bugs or request features](../../issues)\n- **Sample Submissions:** Open an issue with recording details\n\n## ⚠️ Disclaimer\n\nThis 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.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsarahroselives%2Fpocket25","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsarahroselives%2Fpocket25","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsarahroselives%2Fpocket25/lists"}