From b1196edfa6ff0c4df2faeeaafb7ee08da231dbfd Mon Sep 17 00:00:00 2001 From: Rodrigo Alfonso Date: Fri, 10 Feb 2023 19:33:29 -0300 Subject: [PATCH] Copying outgoingState on serial IRQ --- examples/LinkWireless_demo/src/main.cpp | 8 +++++--- lib/LinkWireless.h | 8 ++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/examples/LinkWireless_demo/src/main.cpp b/examples/LinkWireless_demo/src/main.cpp index 282c7f1..95de266 100644 --- a/examples/LinkWireless_demo/src/main.cpp +++ b/examples/LinkWireless_demo/src/main.cpp @@ -27,6 +27,7 @@ void hang(); LinkWireless::Error lastError; LinkWireless* linkWireless = NULL; bool forwarding, retransmission; +u32 maxPlayers; void init() { REG_DISPCNT = DCNT_MODE0 | DCNT_BG0; @@ -47,7 +48,7 @@ start: u16 initialKeys = ~REG_KEYS & KEY_ANY; forwarding = !(initialKeys & KEY_LEFT); retransmission = !(initialKeys & KEY_UP); - u32 maxPlayers = (initialKeys & KEY_B) ? 2 : LINK_WIRELESS_MAX_PLAYERS; + maxPlayers = (initialKeys & KEY_B) ? 2 : LINK_WIRELESS_MAX_PLAYERS; // (1) Create a LinkWireless instance linkWireless = new LinkWireless(forwarding, retransmission, maxPlayers); @@ -78,8 +79,9 @@ start: log(std::string("") + "L = Serve\nR = Connect\n\n (DOWN = ok)\n " "(SELECT = cancel)\n (START = activate)\n\n-> forwarding: " + - (forwarding ? "ON" : "OFF") + "\n" + - "-> retransmission: " + (retransmission ? "ON" : "OFF")); + (forwarding ? "ON" : "OFF") + + "\n-> retransmission: " + (retransmission ? "ON" : "OFF") + + "\n-> max players: " + std::to_string(maxPlayers)); // SELECT = back if (keys & KEY_SELECT) { diff --git a/lib/LinkWireless.h b/lib/LinkWireless.h index 388e344..b0469a5 100644 --- a/lib/LinkWireless.h +++ b/lib/LinkWireless.h @@ -480,6 +480,7 @@ class LinkWireless { return; linkSPI->_onSerial(true); + copyOutgoingState(); bool hasNewData = linkSPI->getAsyncState() == LinkSPI::AsyncState::READY; if (hasNewData) @@ -1107,6 +1108,11 @@ class LinkWireless { } void copyState() { // (irq only) + copyOutgoingState(); + copyIncomingState(); + } + + void copyOutgoingState() { // (irq only) if (!isAddingMessage) { while (!sessionState.tmpMessagesToSend.isEmpty()) { if (isSessionActive() && !canSend()) @@ -1125,7 +1131,9 @@ class LinkWireless { isPendingClearActive = false; } } + } + void copyIncomingState() { // (irq only) if (!isReadingMessages) { while (!sessionState.tmpMessagesToReceive.isEmpty()) { auto message = sessionState.tmpMessagesToReceive.pop();