wifi: add hack to facilitate multiplayer connections (extend post-beacon interval when connection is being initiated)

This commit is contained in:
Arisotura 2024-08-14 16:47:08 +02:00
parent 2fff4c0b5a
commit 5b986d3111
1 changed files with 14 additions and 2 deletions

View File

@ -1645,9 +1645,21 @@ bool Wifi::CheckRX(int type) // 0=regular 1=MP replies 2=MP host frames
*(u16*)&RXBuffer[6] = txrate;
*(u16*)&RXBuffer[8] = framelen;
u16 frametype = (framectl & 0x00FF);
bool macgood = (RXBuffer[12 + 4] & 0x01) || MACEqual(&RXBuffer[12 + 4], (u8*)&IOPORT(W_MACAddr0));
if (((framectl & 0x00FF) == 0x0010) && timestamp && macgood)
// HACK: when receiving auth/assoc frames, extend the post-beacon interval
// during MP comm, the host will periodically wake up to send a beacon, and stay awake during the
// post-beacon interval to see if any clients are trying to connect
// the auth/assoc procedure would normally fit during that window, but when we are emulating wifi
// and not yet synced, these frames may lag behind, preventing a successful connection
if ((frametype == 0x00B0 || frametype == 0x0010 || frametype == 0x0000) && timestamp && macgood)
{
if (IOPORT(W_BeaconCount2))
IOPORT(W_BeaconCount2) += 10;
}
if ((frametype == 0x0010) && timestamp && macgood)
{
// if receiving an association response: get the sync value from the host
@ -1666,7 +1678,7 @@ bool Wifi::CheckRX(int type) // 0=regular 1=MP replies 2=MP host frames
RXTimestamp = 0;
StartRX();
}
else if (((framectl & 0x00FF) == 0x00C0) && timestamp && macgood && IsMPClient)
else if ((frametype == 0x00C0) && timestamp && macgood && IsMPClient)
{
IsMP = false;
IsMPClient = false;