Skip to content

Commit

Permalink
reliable unicast 1 hop works!
Browse files Browse the repository at this point in the history
  • Loading branch information
geeksville committed May 19, 2020
1 parent c65b518 commit 71041e8
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 13 deletions.
5 changes: 3 additions & 2 deletions docs/software/mesh-alg.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,16 @@ reliable messaging tasks (stage one for DSR):
- DONE delay some random time for each retry (large enough to allow for acks to come in)
- DONE once an ack comes in, remove the packet from the retry list and deliver the ack to the original sender
- DONE after three retries, deliver a no-ack packet to the original sender (i.e. the phone app or mesh router service)
- test one hop ack/nak with the python framework
- DONE test one hop ack/nak with the python framework
- Do stress test with acks

dsr tasks

- do "hop by hop" routing
- when sending, if destnodeinfo.next_hop is zero (and no message is already waiting for an arp for that node), startRouteDiscovery() for that node. Queue the message in the 'waiting for arp queue' so we can send it later when then the arp completes.
- otherwise, use next_hop and start sending a message (with ack request) towards that node.
- Don't use broadcasts for the network pings (close open github issue)
- add ignoreSenders to myNodeInfo to allow testing different mesh topologies by refusing to see certain senders
- add ignoreSenders to radioconfig to allow testing different mesh topologies by refusing to see certain senders
- test multihop delivery with the python framework

optimizations / low priority:
Expand Down
19 changes: 11 additions & 8 deletions src/mesh/PacketHistory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ PacketHistory::PacketHistory()
/**
* Update recentBroadcasts and return true if we have already seen this packet
*/
bool PacketHistory::wasSeenRecently(const MeshPacket *p)
bool PacketHistory::wasSeenRecently(const MeshPacket *p, bool withUpdate)
{
if (p->id == 0) {
DEBUG_MSG("Ignoring message with zero id\n");
Expand All @@ -32,7 +32,8 @@ bool PacketHistory::wasSeenRecently(const MeshPacket *p)
DEBUG_MSG("Found existing broadcast record for fr=0x%x,to=0x%x,id=%d\n", p->from, p->to, p->id);

// Update the time on this record to now
r.rxTimeMsec = now;
if (withUpdate)
r.rxTimeMsec = now;
return true;
}

Expand All @@ -41,12 +42,14 @@ bool PacketHistory::wasSeenRecently(const MeshPacket *p)
}

// Didn't find an existing record, make one
PacketRecord r;
r.id = p->id;
r.sender = p->from;
r.rxTimeMsec = now;
recentPackets.push_back(r);
DEBUG_MSG("Adding broadcast record for fr=0x%x,to=0x%x,id=%d\n", p->from, p->to, p->id);
if (withUpdate) {
PacketRecord r;
r.id = p->id;
r.sender = p->from;
r.rxTimeMsec = now;
recentPackets.push_back(r);
DEBUG_MSG("Adding broadcast record for fr=0x%x,to=0x%x,id=%d\n", p->from, p->to, p->id);
}

return false;
}
4 changes: 3 additions & 1 deletion src/mesh/PacketHistory.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ class PacketHistory

/**
* Update recentBroadcasts and return true if we have already seen this packet
*
* @param withUpdate if true and not found we add an entry to recentPackets
*/
bool wasSeenRecently(const MeshPacket *p);
bool wasSeenRecently(const MeshPacket *p, bool withUpdate = true);
};
2 changes: 1 addition & 1 deletion src/mesh/RadioLibInterface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ void RadioLibInterface::handleReceiveInterrupt()
/** start an immediate transmit */
void RadioLibInterface::startSend(MeshPacket *txp)
{
DEBUG_MSG("Starting low level send from=0x%x, id=%u!\n", txp->from, txp->id);
DEBUG_MSG("Starting low level send from=0x%x, id=%u, want_ack=%d\n", txp->from, txp->id, txp->want_ack);
setStandby(); // Cancel any already in process receives

size_t numbytes = beginSending(txp);
Expand Down
2 changes: 1 addition & 1 deletion src/mesh/ReliableRouter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ void ReliableRouter::handleReceived(MeshPacket *p)

// we are careful to only read/update wasSeenRecently _after_ confirming this is an ack (to not mess
// up broadcasts)
if ((ackId || nakId) && !wasSeenRecently(p)) {
if ((ackId || nakId) && !wasSeenRecently(p, false)) {
if (ackId) {
DEBUG_MSG("Received a ack=%d, stopping retransmissions\n", ackId);
stopRetransmission(p->to, ackId);
Expand Down

0 comments on commit 71041e8

Please sign in to comment.