A Flutter-based Android application for mapping MeshCore mesh network coverage in real-time.
Latest Release: Download from Releases Repository
- Real-time GPS tracking with foreground service
- USB and Bluetooth connectivity for MeshCore companion radios
- Auto-ping functionality with configurable intervals (50m, 200m, 0.5 miles, 1 mile)
- Manual ping testing
- Success rate based coverage visualization with color coding
- Clickable coverage squares showing detailed statistics
- Repeater discovery and tracking
- Data export to JSON
- Web map upload functionality
- Debug terminal with logging
- Light/Dark theme support
- Flutter SDK (3.10.0 or higher)
- Android Studio or VS Code with Flutter extensions
- Android SDK with API level 21+
- A MeshCore companion radio device (for testing)
- Clone this repository:
git clone https://github.com/mintylinux/Meshcore-Wardrive-Android-Source.git
cd meshcore_wardrive- Install dependencies:
flutter pub get- Generate app icons:
flutter pub run flutter_launcher_icons- Run on connected device:
flutter runflutter build apk --releaseThe APK will be located at: build/app/outputs/flutter-apk/app-release.apk
lib/
├── main.dart # App entry point
├── models/
│ └── models.dart # Data models (Sample, Coverage, Repeater)
├── screens/
│ ├── map_screen.dart # Main map interface
│ └── debug_log_screen.dart # Debug terminal
├── services/
│ ├── location_service.dart # GPS tracking & auto-ping
│ ├── lora_companion_service.dart # LoRa device communication
│ ├── database_service.dart # SQLite database
│ ├── aggregation_service.dart # Coverage calculation
│ ├── upload_service.dart # Web map upload
│ ├── meshcore_protocol.dart # Protocol implementation
│ └── debug_log_service.dart # Debug logging
└── utils/
└── geohash_utils.dart # Geohash utilities
Default ping interval can be changed in lib/services/location_service.dart:
double _pingIntervalMeters = 805.0; // 0.5 milesGrid size is set in lib/utils/geohash_utils.dart:
static String coverageKey(double lat, double lon) {
return geohash.GeoHash.encode(lat, lon, precision: 6); // ~1.2km x 610m
}Timeout for ping responses in lib/services/location_service.dart:
timeoutSeconds: 20, // 20 second timeout- LoRa Companion Guide - Device setup and connectivity
- MeshCore Auth Setup - Authentication configuration
- Quick Start - Getting started guide
Run tests with:
flutter testKey packages:
flutter_map- Map displaygeolocator- GPS trackingflutter_foreground_task- Background serviceusb_serial- USB connectivityflutter_blue_plus- Bluetooth connectivitysqflite- Local databasegeohash_plus- Geohash encodingpointycastle- Encryption
See pubspec.yaml for complete list.
- Some Android devices may require "Location Always" permission for background tracking
- USB connectivity requires OTG cable and data-capable cable
- #meshwar channel must be joined in MeshCore app before first use
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes with co-author line:
git commit -m "Add amazing feature Co-Authored-By: Your Name <[email protected]>" - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Built for the MeshCore mesh networking community.
For issues and questions:
- Open an issue on GitHub
- Check existing documentation in the repository
Current Version: 1.0.7
Minimum Android Version: Android 5.0 (API 21)