Skip to content

Releases: mintylinux/Meshcore-Wardrive-Android

Meshcore-Wardrive-Android-1.0.38

28 Apr 23:08
8402795

Choose a tag to compare

Changelog

v1.0.38 - 2026-04-28

Added

  • Planned Repeater Markers: Long-press anywhere on the map to place a marker for a potential repeater location. Add an optional label, tap to view details or delete. Markers persist in the database.
  • Delete Mode: Remove bad data before uploading. Activate from Data Management menu, then tap a coverage square to delete all samples in that cell, or tap individual sample dots to remove one at a time. Red banner shows when active.
  • Planned Repeaters menu entry: Shows marker count with option to clear all markers

Fixed

  • Show Successful Pings Only toggle: Was incorrectly writing to map rotation setting instead of the filter. Now works correctly and persists across restarts.

Technical

  • Database version 9 → 10: new planned_markers table
  • DatabaseService: added marker CRUD methods, deleteSample(), deleteSamplesByGeohash()
  • SettingsService: added showSuccessfulOnly persistence + export key
  • Map long-press handler for marker placement
  • Delete mode routing in sample and coverage tap handlers

Meshcore-Wardrive-Android-1.0.37.1

10 Apr 01:12
8402795

Choose a tag to compare

Changelog

v1.0.37.1 - 2026-04-10

Fixed

  • Coverage gaps eliminated: Removed _pingInProgress guard from distance-based pings, restoring v1.0.33 behavior. Distance pings now fire immediately on every threshold trigger, allowing overlapping pings for dense coverage. Each ping uses a unique discovery tag so responses correlate correctly.
  • Rate limit fully removed: No artificial delay between pings — _pingInProgress is only used for time-based ping deduplication, not distance pings.

Meshcore-Wardrive-Android-1.0.37

09 Apr 00:03
8402795

Choose a tag to compare

Changelog

v1.0.37 - 2026-04-08

Fixed

  • Coverage gaps eliminated: Rate limit reduced from 30s to 5s — at 50m distance pings, coverage squares are now continuous with no large gaps
  • Coverage resolution setting: Changing precision now properly invalidates the aggregation cache and rebuilds the map
  • Web map wrong success rates: GPS-only samples (no ping attempted) are now filtered from uploads — previously they inflated failure counts on the live map
  • Prediction rings blocking taps: Rings now render behind coverage squares and repeater icons so they don't intercept touch events
  • Lock rotation persistence: Map rotation lock setting now persists across app restarts

Added

  • Ping time interval 5s and 10s options: Time-based ping interval dropdown now includes 5s and 10s for more aggressive coverage in "Both" mode

Improved

  • Map performance when zoomed in: Auto-follow throttled to every 2 seconds (was every GPS update ~1/sec), distance/speed updates no longer trigger full map rebuilds, and the 5-second refresh skips setState entirely when nothing changed
  • Carpeater message passthrough: Confirmed that received/sent messages work while in carpeater mode (by design — logged into the repeater)

Technical

  • Auto-follow uses _autoFollowInterval throttle to reduce _mapController.move() calls
  • Distance/speed stream listeners update values silently without setState
  • _loadSamples no-change path compares all state fields before calling setState
  • Upload service filters pingSuccess == null samples in both single and multi-endpoint paths
  • Web map samples.js also skips GPS-only samples in aggregateSamples()

Meshcore-Wardrive-Android-1.0.36

06 Apr 03:19
8402795

Choose a tag to compare

Changelog

v1.0.36 - 2026-04-06

Fixed

  • Carpeater stale neighbours: Neighbour table is now cleared before each discovery cycle. Previously the repeater returned cached neighbours from its home location even when driving far away, causing false green coverage squares.
  • Empty gray coverage boxes: Coverage cells with only GPS-only samples (no pings) are no longer rendered. Eliminates the gray boxes that appeared between ping samples, especially at short distance intervals.
  • Settings export: Now offers Save to Folder or Share options (was share-only)
  • Ping timing reverted: Discovery timeout back to 20s default, rate limit back to 30s (v1.0.33 behavior) to reduce false dead zones from aggressive timeouts

Added

  • Session restore on import: JSON exports now include session history alongside samples. Importing restores both — no more losing session records on reinstall. Backward compatible with old export files.
  • Carpeater cycle interval "None": New option for back-to-back discovery cycles with zero gap between them

Improved

  • Carpeater settings UI: renamed "Discovery Interval" to "Cycle Interval" with descriptive subtitle
  • Data import handles both new unified format ({samples, sessions}) and legacy format (plain sample array)
  • Import shows session count in result message when sessions are restored

Technical

  • WSession model: added toJson()/fromJson() for session serialization
  • DatabaseService: new exportAllData() and importAllData() methods for unified export/import
  • AggregationService: filters out coverage cells where all samples are GPS-only (pingSuccess == null)
  • CarpeaterService._runDiscoveryCycle(): calls _clearPreviousNeighbours() before each discovery

Meshcore-Wardrive-Android-1.0.35

02 Apr 02:48
8402795

Choose a tag to compare

Changelog

v1.0.35 - 2026-04-02

Added

  • Multi-Device Wardrive: Merge coverage data from multiple users into one map
    • source field on samples identifies which device/operator collected the data
    • Device Name setting in Settings for tagging your exports
    • Multi-file import with merge summary dialog (shows source, count, overlap)
    • Filter by Source in Data Management to view data from a specific contributor
  • Repeater Health Dashboard: Dedicated per-repeater analysis screen
    • List view with sortable repeater cards (reliability, response time, ping count, alerts first)
    • Degradation alerts: warning icon when 7-day success rate drops >15% vs 30-day average
    • Tap-to-drill-down detail page per repeater:
      • SNR over time line chart
      • Weekly success rate bar chart
      • Best/worst time of day breakdown
      • Last 20 ping results history
    • Alert count chip in app bar
  • Settings Export/Import: Backup and restore all app preferences as JSON
    • Export via share sheet (includes upload endpoints, carpeater config, display settings)
    • Import with confirmation dialog — wardrive data is not affected
    • Useful for reinstalls and sharing configs with MeshCore communities
  • Carpeater Mode (Beta) label with v1.14+ firmware requirement hint
  • Manual ping sound/vibration feedback — matches auto-ping behavior

Fixed

  • Device position command: CMD_SET_POSITION was using code 20 (battery request) instead of 14 (lat/lon) — pings now route correctly through the mesh
  • Auto-ping lock: _pingInProgress flag could get stuck permanently, blocking all future auto-pings (now uses finally block)
  • Carpeater toggle mid-tracking: Enabling/disabling carpeater in settings now properly starts/stops the service and resumes auto-ping
  • Session history filter: Selecting a session no longer fails to update the map (aggregation cache bypass)
  • Carpeater self-filtering: Target repeater automatically excluded from neighbour results (no need to add to ignore list)
  • USB disconnect detection: Pulling USB cable now properly disconnects and disables auto-ping (mirrors Bluetooth handler)
  • Stream controller leak: _disconnectController now closed in dispose()
  • SQLite WAL pragma: Fixed executerawQuery for Android compatibility

Improved

  • Sound: Switched from STREAM_NOTIFICATION to STREAM_MUSIC for reliable audio playback
  • Vibration: Uses USAGE_ALARM VibrationAttributes to bypass Samsung touch vibration setting
  • Sound and vibration enabled by default for new installs
  • Ping timing: Rate limit reduced from 30s to 5s, default discovery timeout from 20s to 8s
  • Both mode dedup: Time-based pings skip if a distance ping fired recently
  • Aggregation caching: Skips full recomputation when sample/repeater count unchanged
  • SQLite WAL mode for better concurrent read/write during wardriving
  • Ping rate limit enforced: Actually waits cooldown instead of just logging
  • Advertisement map cleanup: Stale entries pruned every 5 minutes
  • Upload JSON deduplicated: Extracted shared _samplesToJson() method

Technical

  • Database version 8 → 9: new source column on samples with index
  • New repeater_health_screen.dart (~670 lines)
  • SettingsService extended with exportSettings()/importSettings() and device_name
  • LoRaCompanionService: added _handleUsbDisconnection(), ignoredRepeaterPrefix getter, advert cleanup
  • MeshCoreProtocol: CMD_SET_ADVERT_LATLON = 14 (was incorrectly CMD_SET_POSITION = 20)
  • Native MainActivity.kt: STREAM_MUSIC audio, USAGE_ALARM vibration attributes, debug logging

Meshcore-Wardrive-Android-1.0.34

01 Apr 02:48
8402795

Choose a tag to compare

Changelog

v1.0.34 - 2026-04-01

Added

  • Sound Feedback: System tones on ping sent, success (good/weak signal), and failure (toggleable in Settings)
  • Vibration Feedback: Haptic patterns for ping results with Android S+ compatibility (toggleable in Settings)
  • Native Android Feedback: Platform channel for ToneGenerator-based tones and Vibrator-based haptics
  • Ping-by-Time Mode: New ping trigger options — distance, time, or both (whichever threshold hits first)
  • Faster Carpeater Mode: Reduced discovery wait from 30s to 8s for v1.14+ repeaters (Carpeater Mode is still in testing, but functions)
  • Offline Map Tile Downloads: Download tiles for current view area with zoom range picker
  • Disconnect Stream: LoRaCompanionService exposes disconnect events for USB and Bluetooth
  • Auto-Ping Auto-Disable: Auto-ping and Carpeater automatically stop on device disconnect

Improved

  • Sound and vibration feedback enabled by default
  • Carpeater service hardened: safer stop logic, _isStopped guard, improved retry counts and delays
  • Map screen performance: conditional re-aggregation only when sample/repeater counts change, repeater deduplication
  • Upload service refactored: extracted _samplesToJson helper, cleaner JSON construction

Technical

  • New SoundService with platform channel (mintylinux.wardrive/feedback) for native audio/haptic feedback
  • New TileDownloadService for offline tile management
  • Added VIBRATE permission to AndroidManifest
  • Protocol constant renamed: CMD_SET_POSITIONCMD_SET_ADVERT_LATLON
  • MainActivity.kt extended with ToneGenerator and Vibrator support

Meshcore-Wardrive-Android-1.0.33

29 Mar 21:03
8402795

Choose a tag to compare

Changelog

v1.0.33 - 2026-03-29

Added

  • Carpeater Mode ( BETA) (contributed by @OverkillFPV): "Car Repeater" wardrive mode (Repeater Firmware 1.14 or higher required)
    • Instead of pinging directly, log into a target repeater and use it to discover neighbors
    • Configure target repeater ID, admin password, and discovery interval in Settings
    • Automatic login with 3x retry, discovery cycle with neighbour table clear/fetch
    • GPS position snapshotted at moment of discovery for accurate geotagging
    • Each discovered neighbour saved as a sample with SNR data
    • Empty responses recorded as dead zones (failed samples)
    • Auto-reconnect after 3 consecutive failed cycles
    • Discovery wait respects stop signal (no 30s hang on stop)
    • Status badge in control panel showing Carpeater state
    • Password field uses obscured text input
    • Auto-ping suppressed when Carpeater mode is active
  • Fixed App Icon: Cropped to proper 1024x1024 square from banner image

Technical

  • New CarpeaterService with state machine, retry logic, and cycle tracking
  • Extended MeshCoreProtocol with Carpeater commands: login, CLI, binary request, neighbour parsing
  • Extended LoRaCompanionService with pubkey cache, Carpeater callback routing, and send methods
  • Updated push code constants to match current MeshCore firmware (with legacy aliases for compatibility)
  • LocationService integrates Carpeater alongside existing ducting monitoring
  • Carpeater settings persisted via SharedPreferences

Meshcore-Wardrive-Android-1.0.32

25 Mar 02:14
8402795

Choose a tag to compare

Changelog

v1.0.32 - 2026-03-25

⚠️ IMPORTANT: Reinstall Required

The APK signing key has changed in this release. Android will reject an in-place update with INSTALL_FAILED_UPDATE_INCOMPATIBLE. You must uninstall the previous version before installing v1.0.32.

Before updating:

  1. Open the app and go to Settings → Export Data to back up your samples
  2. Uninstall the old version (adb uninstall mintylinux.meshcore.wardrive or via Android Settings)
  3. Install v1.0.32
  4. Go to Settings → Import Data to restore your samples

Added

  • Analytics Screen: New dedicated analytics hub accessible from Settings → Data Management → Analytics
    • Time-of-Day Breakdown: Bar chart showing ping success rate by hour (0-23)
      • Color-coded bars: green (>70%), yellow (30-70%), red (<30%)
      • Best/worst hour summary and period breakdown (morning/afternoon/evening/night)
    • Coverage Goal Tracker: Set a target area and track wardriving progress
      • Pick center point (current GPS) + radius (1, 5, 10, or 25 miles)
      • Circular progress ring showing % of geohash cells covered
      • Breakdown: covered, partial (<30%), uncovered, pings in area
      • Goal persists between app restarts
    • Coverage Comparison: Compare two wardrive sessions side-by-side
      • Pick Session A (baseline) and Session B (compare)
      • Stats with delta arrows: samples, success rate, repeaters, distance
      • Coverage cell changes: new, lost, improved (>10%), degraded (>10%), unchanged
    • Repeater Reliability Scores: Per-repeater health metrics
      • Response rate, average response time, consistency score (stddev)
      • 7-day trend: improving/stable/degrading (compares last 7 days vs prior 7 days)
      • First/last seen dates, total ping count
      • Sortable by reliability, response time, or ping count
  • Atmospheric Ducting Monitor: Detect anomalous radio propagation conditions
    • Fetches pressure-level atmospheric data from Open-Meteo API (free, no key)
    • Computes radio refractivity gradient between surface and 925hPa
    • Classifies ducting risk: None (normal), Possible (super-refraction), Likely (trapping)
    • Offline-first: caches hourly data in SQLite, valid for 6 hours without network
    • Tags each sample with ducting risk level during collection
    • Color-coded badge in control panel shows live ducting status
    • Ducting risk shown in sample info popup
    • Toggle in Settings: "Atmospheric Ducting" (off by default)
  • Prediction Ring Whitelist: Coverage prediction rings now respect the "Include Only Repeaters" whitelist filter
    • When a repeater whitelist is set, only whitelisted repeaters show prediction rings
  • New App Icon: Updated launcher icon

Technical

  • Database version 7 → 8: new ducting_cache table, ducting_risk column on samples
  • New DuctingService with ITU radio refractivity formula and Open-Meteo integration
  • New AnalyticsScreen with fl_chart bar charts and geohash-based coverage goal math
  • ductingRisk field added to Sample model (included in JSON/CSV/GPX/KML exports)
  • Coverage goal settings (goal_center_lat, goal_center_lon, goal_radius_meters) in SharedPreferences
  • LocationService integrates ducting: fetch on tracking start + hourly timer, runtime toggle
  • _buildPredictionRingsLayer() now filters by _includeOnlyRepeaters whitelist

Meshcore-Wardrive-Android-1.0.31

08 Mar 04:38
8402795

Choose a tag to compare

v1.0.31 - 2026-03-08

⚠️ IMPORTANT: Reinstall Required

The APK signing key has changed in this release. Android will reject an in-place update with INSTALL_FAILED_UPDATE_INCOMPATIBLE. You must uninstall the previous version before installing v1.0.31.

Before updating:

  1. Open the app and go to Settings → Export Data to back up your samples
  2. Uninstall the old version (adb uninstall mintylinux.meshcore.wardrive or via Android Settings)
  3. Install v1.0.31
  4. Go to Settings → Import Data to restore your samples
  5. This will be the last change that requires you to re-install. I promise.

Added

  • Coverage Prediction Rings: Visualize estimated repeater coverage on the map
    • Concentric rings around each repeater based on actual ping sample distances
    • Green inner ring = strong coverage (25th percentile distance)
    • Yellow middle ring = moderate coverage (75th percentile)
    • Red outer ring = edge of coverage (max observed distance)
    • Requires at least 3 successful pings per repeater to display
    • Toggle in Settings: "Show Prediction Rings"
  • Android Home Screen Widget: 4×2 dark-themed widget for at-a-glance stats
    • Shows tracking status (Tracking/Idle) with color indicator
    • Sample count, LoRa connection type (USB/BT), success rate %, session distance
    • Updates in real-time as you drive
    • Tap widget to open the app
    • Add via long-press home screen → Widgets → MeshCore Wardrive

Technical

  • New WidgetService wrapping home_widget package for native Android widget updates
  • Native WardriveWidgetProvider.kt with SharedPreferences-based data bridge
  • Widget state pushed on tracking start/stop, sample saves, and connection changes
  • Added home_widget: ^0.7.0 dependency

Meshcore-Wardrive-Android-1.0.30

03 Mar 22:04
8402795

Choose a tag to compare

Changelog

v1.0.30 - 2026-03-03

Added

  • Route Trail: Color-coded polyline showing your driven path on the map
    • Green = successful ping, Red = failed ping, Blue = GPS-only
    • Segments break on 5-minute gaps to avoid connecting unrelated sessions
    • Toggle in Settings: "Show Route Trail"
  • Session History: Track and review individual wardrive sessions
    • Automatically records session on start/stop tracking with duration, distance, sample/ping counts
    • New "Session History" screen accessible from Settings → Data Management
    • Add notes to sessions for future reference
    • Tap a session to filter the map to only that session's data
    • Clear filter from Settings when done
  • Offline Map Tiles: Map tiles are now cached locally for offline use
    • Tiles cache passively as you view them — no manual download needed
    • Cached tiles persist across app restarts
    • "Clear Tile Cache" button in Settings → Data Management
  • Heatmap Overlay: Smooth heat gradient visualization of ping activity
    • Successful pings glow hotter (red), failed pings are warm (orange/yellow), GPS-only points are cool (green)
    • Toggle in Settings: "Show Heatmap"
    • Independent of coverage grid — both can be on simultaneously
  • Speed Display: Live speed readout in the control panel (mph or km/h based on distance unit)
  • CSV Export: Export samples as CSV files in addition to JSON
  • GPX/KML Export: Export route and ping data as GPX or KML for use in Google Earth, etc.
    • GPX includes trackpoints with timestamps and signal data
    • KML includes route LineString plus color-coded success/fail placemarks
  • Share Coverage Map: One-tap screenshot + share with coverage stats
    • Auto-captures clean map screenshot and attaches sample count, success rate, repeater count
  • Per-Repeater Coverage View: Filter map to show coverage from a specific repeater
    • Settings → Data Management → "Filter by Repeater" lists all known repeaters
    • Quick-filter "Filter by This" button added to repeater info dialog
    • Clear filter button to restore full view
  • Repeater Response Time Tracking: Measures elapsed time from ping send to first response
    • Response time (ms) stored per sample and displayed in sample info popup
    • Logged in debug output for all successful and timed-out pings
  • Coverage Gap Finder: Identifies areas with poor or no mesh coverage
    • Settings → Data Management → "Find Coverage Gaps"
    • Lists areas with <30% success rate, sorted worst-first
    • Tap any gap to navigate directly to it on the map
  • Signal Trend Chart: Interactive line charts for RSSI, SNR, and response time over time
    • Segmented metric selector (RSSI / SNR / Response)
    • Touch tooltips with exact values and timestamps
    • Min/Avg/Max/Points summary stats
    • Accessible from Settings → Debug → "Signal Trends"

Technical

  • New sessions SQLite table (DB version 5 → 6), response_time_ms column (DB version 6 → 7)
  • Added dependencies: flutter_map_cache, dio_cache_interceptor, dio_cache_interceptor_file_store, flutter_map_heatmap, fl_chart
  • New SessionHistoryScreen with session cards showing stats, notes, and map filtering
  • New SignalTrendScreen with fl_chart line charts for signal metrics
  • LocationService now creates/finalizes session records on start/stop tracking
  • PingResult and Sample models extended with responseTimeMs field
  • Export dialog reworked with format picker (JSON/CSV/GPX/KML) then save/share choice