Copying outgoingState on serial IRQ

This commit is contained in:
Rodrigo Alfonso 2023-02-10 19:33:29 -03:00
parent 510871854b
commit b1196edfa6
2 changed files with 13 additions and 3 deletions

View File

@ -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) {

View File

@ -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();