Aktionen
Retransmits » Historie » Revision 5
« Zurück |
Revision 5/20
(diff)
| Weiter »
Maximilian Seesslen, 02.04.2025 18:38
Modes¶
Unrelated¶
- Send CAN messages as Broadcast messages; fire and forget
- Good enough for sensor values
- Robust code, not much that can fail
- Not good enough for e.g. Flashing firmware on remote device or even scanning nodes.
Related¶
- Each package need an acknowledge
- Retransmitts are send if acknowledge is missing
- Heavy traffic if nodes are blocking each other.
- Complex code, but ok
- Order may not be guearanteed / optional
Related¶
Retransmits¶
- In starting phase there is an auto-tune which requires traffic
- There are at least some CRC errors
Send package¶
- ringTransmitted.canPush()?
- store essage there
- Send it via RFM69
Receive package¶
- If type is "Acknowledge"
- find corresponding message
- mark slot as acked/nacked
- If regular message/resend
- If resend: is the package older than the last?, drop it
- is it not last+1? send NACK via RFM69
- fill it in the receive buffer
- directly send acknowledge via RFM69
Loop¶
- iterate Slots
- If WAITing: is message is older than ??ms, perform an resend
- If ACKed, pop it from the ring. Not the first non-ACKed? Error
- If NACKed, resend it, if there is no WAITing before
Open points¶
- Acknowledge gets lost; retransmit started
- last-id for every net. Drop message if it matches
- RFM-Class receives messages in ISR as fast as possible. Sending acknowledge is done in the loop.
- Order should be preserved.
- Makes things super slow
State machine¶
Sender event loop¶
- Each node sends a heartbeat every 5 seconds with the current message counter.
- A node has a list of (expected) package counter of other devices
- When a node received a message via can, it sends it as broadcast and sets the open-ack-mask to the node-mask
- If there was no ACK after 10ms, send retransmit to each Ack-missing node.
- If there was no ACK after 10 Seconds, remove remaing nodes from Node-List.
- If there is no Heartbeat from a Node for 1 Minute, remove node from
Receiver Event loop¶
- When receiving a message via radio with correct order, an acknowledge is send immediately. Process and drop the message.
- When receiving a message via radio with to low order, send an acknowledge again and drop the message.
- When receiving a message via radio with too high order, act like in (1), but warn becuase of lost message.
Von Maximilian Seesslen vor 10 Tagen aktualisiert · 5 Revisionen