mirror of
https://github.com/apache/nuttx.git
synced 2026-10-04 12:48:09 +00:00
Orignal issue: the new wakeup process may be waked by the last Ack command from peer, and lead the data is lost because peer may have enter into the sleep mode. W = Wake, A = WakeAck, R = Relax, D = Data TX: [0]W-[1]R--------[4]W----[6]DDDDDDDDDDDD------- RX: ------------[3]A----[5]Enter Sleep------------- In this figure, Ack command [3] wakeup the wakeup process [4] because [3] may be received with a delay. Now use the ping-pong wake/ack command to fix this issue because the different wake/ack command can block the last Ack command wake the wrong wakeup process. W1 = Wake1, A1 = WakeAck1, W2 = Wake2, A2 = WakeAck2, R = Relax, D = Data TX: [0]W1-[1]R-------[4]W2----------[6]DDDDDDDDDDD-- RX: ------------[3]A1---------[5]A2----------------- With this patch, the Ack comamnd [3] can't wakeup the wakeup process [4] because [3] is Ack1 but [4] is Wake2, and local will not send data until peer response a [5]Ack2. Signed-off-by: Bowen Wang <wangbowen6@xiaomi.com> |
||
|---|---|---|
| .. | ||
| CMakeLists.txt | ||
| Kconfig | ||
| Make.defs | ||
| rpmsg.c | ||
| rpmsg.h | ||
| rpmsg_ping.c | ||
| rpmsg_ping.h | ||
| rpmsg_port.c | ||
| rpmsg_port.h | ||
| rpmsg_port_spi.c | ||
| rpmsg_port_spi_slave.c | ||
| rpmsg_port_uart.c | ||
| rpmsg_router.h | ||
| rpmsg_router_edge.c | ||
| rpmsg_router_hub.c | ||
| rpmsg_test.c | ||
| rpmsg_test.h | ||
| rpmsg_virtio.c | ||
| rpmsg_virtio_ivshmem.c | ||
| rpmsg_virtio_lite.c | ||