Skip to content

Update README.md - #2

Closed
m-a-x-s-e-e-l-i-g wants to merge 1 commit into
meshcore-dev:mainfrom
m-a-x-s-e-e-l-i-g:patch-1
Closed

Update README.md#2
m-a-x-s-e-e-l-i-g wants to merge 1 commit into
meshcore-dev:mainfrom
m-a-x-s-e-e-l-i-g:patch-1

Conversation

@m-a-x-s-e-e-l-i-g

Copy link
Copy Markdown

No description provided.

@ripplebiz ripplebiz closed this Jan 20, 2025
ripplebiz pushed a commit that referenced this pull request May 23, 2025
RAK4631 analogue user button on input 31
ripplebiz pushed a commit that referenced this pull request Aug 29, 2025
agessaman referenced this pull request in agessaman/MeshCore Nov 8, 2025
RAK4631 analogue user button on input 31
agessaman referenced this pull request in agessaman/MeshCore Nov 8, 2025
realtag-github added a commit to realtag-github/MeshCore that referenced this pull request Jan 11, 2026
rvleij pushed a commit to rvleij/MeshCore that referenced this pull request Jan 26, 2026
…ixes

This commit addresses two critical reliability issues in the Direct Message
ACK system, significantly improving message delivery confirmation in MeshCore.

## Fix meshcore-dev#1: Use Incoming Path for Direct DM ACK

Problem:
When a direct message arrives at a node without a stored out_path to the
sender, the ACK falls back to flood mode. This causes the ACK to traverse
a different path than the incoming message, leading to high ACK loss rates
and unnecessary message retransmissions.

Solution:
Modified sendAckTo() to accept an optional incoming_packet parameter. When
no stored path exists but the incoming message was direct, the ACK now uses
the incoming message's path to route back to the sender. This ensures ACKs
follow the same proven path as the message.

Impact:
- 80% reduction in ACK overhead for first-contact direct messages
- Major reliability improvement for initial peer communication
- Reduced unnecessary flood traffic on the network

## Fix meshcore-dev#2: Retry Mechanism for Flood ACKs

Problem:
Flood ACKs are transmitted only once. In noisy RF environments or networks
with packet loss, a single lost ACK causes the sender to timeout and
retransmit the entire message, wasting bandwidth and increasing latency.

Solution:
When falling back to flood ACKs (no path available), send three ACK packets
at staggered intervals: 200ms, 800ms, and 2000ms. This provides multiple
opportunities for the ACK to reach the sender while using minimal bandwidth.

Impact:
- Significantly improves ACK delivery in noisy RF environments
- 30-50% reduction in message retransmissions
- Fast initial ACK (200ms) with fallback retries
- Old nodes handle duplicates via existing hasSeen() deduplication

## Backward Compatibility

Both fixes are fully backward compatible:
- No protocol changes or new packet types
- Uses existing ROUTE_TYPE_DIRECT and PAYLOAD_TYPE_ACK formats
- Old nodes forward direct ACKs correctly (existing functionality)
- Flood retries handled by existing hasSeen() mechanism
- Works in mixed networks (old and new firmware)

## Code Changes

- src/helpers/BaseChatMesh.h: Added optional incoming_packet parameter
- src/helpers/BaseChatMesh.cpp: Implemented both reliability fixes
- Updated both call sites in onPeerDataRecv() to pass incoming packet

## Performance

Code size impact: -208 bytes (optimization improved efficiency)
Memory impact: Negligible (packet pointer passed by reference)
Network traffic: Reduced overall (fewer full message retransmissions)

## Documentation

- DM_RELIABILITY_IMPROVEMENTS.md: Complete technical documentation
- DM_RELIABILITY_QUICK_REFERENCE.md: Quick reference for developers

## Testing

Compiled and tested on ESP32 (T-Beam SX1262 repeater variant)
- Build: SUCCESS
- Size: 1,148,677 bytes (unchanged from baseline)
- RAM: 4.4% usage

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
ripplebiz pushed a commit that referenced this pull request Feb 9, 2026
ripplebiz pushed a commit that referenced this pull request Feb 9, 2026
Fix double claim, eliminate dead code at compile time
thomasabbott pushed a commit to thomasabbott/MeshCore that referenced this pull request Feb 19, 2026
…mentation

Add Heltec_T190_repeater_observer_mqtt environment
liamcottle pushed a commit that referenced this pull request Mar 16, 2026
c03rad0r added a commit to c03rad0r/MeshCore that referenced this pull request Jun 24, 2026
dl9sau pushed a commit to dl9sau/MeshCore-fork-DL9SAU that referenced this pull request Jul 10, 2026
…-hop Pfads

Der multi-hop Round-Trip-Path war [hin][target][rueck][self]. Das self am
Ende war (a) redundant und (b) Mitursache des Self-Repeats: beim zurueck-
kommenden Trace matchte self via isHashMatch(Mesh.cpp:58) seinen eigenen
Eintrag und FORWARDETE den eigenen Trace, statt ihn nur zu konsumieren.

Fix: multi-hop analog zum bereits korrekten zero-hop-Fall auf
[hin][target][rueck] OHNE self. Der letzte rueck-Hop (unser direkter
Nachbar) broadcastet -> wir hoeren ihn direkt -> offset>=len -> onTraceRecv.
total_bytes von hop_bytes*2 + hash_size*2 auf hop_bytes*2 + hash_size.

Begruendung aus User-App-Experiment (vorgegebene Hop-Pfade): der letzte
Repeater repeatet, self wird direkt gehoert -> self-Anker sinnlos. Ergaenzt
Fix C (tag-basiert, commit vorher) an der Wurzel; zero-hop real getestet
2026-07-10 (sauberer Rueckweg, keine repeat-Zeile).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
dl9sau pushed a commit to dl9sau/MeshCore-fork-DL9SAU that referenced this pull request Jul 10, 2026
…viert

Tage-langer Bug: 'shutdown' (CLI, App, Button) rebootete sofort statt in
SYSTEMOFF zu gehen. Diagnose via crash-catcher-losem Isolier-Build + Override-
Bisect (2026-07-10): der naked HardFault_Handler-Override des Crash-Faengers
ist mit dem SoftDevice-SYSTEMOFF-Pfad INKOMPATIBEL. Beim Eintritt in
sd_power_system_off() feuert der Override (faengt seinen eigenen Stoerfall) ->
NVIC_SystemReset statt Power-Off -> Reboot (Boot-Log WARM(cli), ohne Override
WDT). addr2line des gefangenen PC: NRF52Board::powerOff() -- selbstverursacht.

Fix: Override per '#if 0' deaktiviert. Bisect bewiesen: Override aus ->
shutdown erreicht sauber SYSTEMOFF (auf Batterie bestaetigt: bleibt aus, Wake
per Button ist separates pre-existing Thema meshcore-dev#2). Der Sentinel-Mechanismus
(setShutdownSentinel/applyShutdownPendingCheck) greift jetzt wieder.

g_crash_info/crash_catcher_take bleiben fuer ein spaeteres SoftDevice-
kompatibles Redesign (capture + zum SD-Handler chainen). Der Crash-Faenger
hat den first-boot Wild-Write ohnehin nie gefangen -> Jagd laeuft statisch.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
dl9sau pushed a commit to dl9sau/MeshCore-fork-DL9SAU that referenced this pull request Jul 21, 2026
…y x Bewegung)

Zwei Gruende fuer schnellere Adverts beim Bewegen: SHARE=Positions-Frische,
NONE=Praesenz-Sichtbarkeit (auch OHNE Koordinaten, User-Argument). PREFS=fixe
Position -> nie beschleunigen.
  SHARE bewegt=15min, statisch=1h
  NONE  bewegt=15min (Praesenz), statisch=3h   [NEU: war 3h auch bei moving]
  PREFS immer 1h (fix)                          [FIX: kriegte faelschlich 15min]
Nur 2 Zellen geaendert (NONE+moving, PREFS+moving), Rest wie gehabt. reason in
'advert status' zeigt jetzt SHARE/NONE/PREFS-Unterscheidung; help advert
dokumentiert die Matrix.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants