aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/DSi_NWifi.cpp25
-rw-r--r--src/frontend/qt_sdl/LAN_Socket.cpp13
2 files changed, 33 insertions, 5 deletions
diff --git a/src/DSi_NWifi.cpp b/src/DSi_NWifi.cpp
index 99da932..d158974 100644
--- a/src/DSi_NWifi.cpp
+++ b/src/DSi_NWifi.cpp
@@ -1211,9 +1211,16 @@ void DSi_NWifi::WMI_SendPacket(u16 len)
}
u16 hdr = MB_Read16(0);
- if (hdr != 0x0000)
+ hdr = ((hdr & 0xFF00) >> 8) | ((hdr & 0x00FF) << 8);
+ if (hdr & 0x0003)
{
- printf("WMI: special frame %04X\n", hdr);
+ printf("WMI: special frame %04X len=%d\n", hdr, len);
+ for (int i = 0; i < len-2; i++)
+ {
+ printf("%02X ", Mailbox[0]->Read());
+ if ((i&0xF)==0xF) printf("\n");
+ }
+ printf("\n");
return;
}
@@ -1252,11 +1259,18 @@ void DSi_NWifi::WMI_SendPacket(u16 len)
memcpy(&LANBuffer[0], dstmac, 6); // destination MAC
memcpy(&LANBuffer[6], srcmac, 6); // source MAC
*(u16*)&LANBuffer[12] = ethertype; // type
- for (int i = 0; i < lan_len; i++)
+ for (int i = 0; i < lan_len-14; i++)
{
LANBuffer[14+i] = Mailbox[0]->Read();
}
+ for (int i = 0; i < lan_len; i++)
+ {
+ printf("%02X ", LANBuffer[i]);
+ if ((i&0xF)==0xF) printf("\n");
+ }
+ printf("\n");
+
Platform::LAN_SendPacket(LANBuffer, lan_len);
}
@@ -1373,6 +1387,7 @@ void DSi_NWifi::CheckRX()
int rxlen = Platform::LAN_RecvPacket(LANBuffer);
if (rxlen > 0)
{
+ printf("WMI packet recv %04X %04X %04X\n", *(u16*)&LANBuffer[0], *(u16*)&LANBuffer[2], *(u16*)&LANBuffer[4]);
// check destination MAC
if (*(u32*)&LANBuffer[0] != 0xFFFFFFFF || *(u16*)&LANBuffer[4] != 0xFFFF)
{
@@ -1380,6 +1395,10 @@ void DSi_NWifi::CheckRX()
return;
}
+ // check source MAC, in case we get a packet we just sent out
+ if (!memcmp(&LANBuffer[6], &EEPROM[0x00A], 6))
+ return;
+
// packet is good
printf("WMI: receive packet %04X, len=%d\n", *(u16*)&LANBuffer[12], rxlen);
diff --git a/src/frontend/qt_sdl/LAN_Socket.cpp b/src/frontend/qt_sdl/LAN_Socket.cpp
index 5477a7d..13a8eb1 100644
--- a/src/frontend/qt_sdl/LAN_Socket.cpp
+++ b/src/frontend/qt_sdl/LAN_Socket.cpp
@@ -52,7 +52,7 @@ volatile int RXNum;
u32 IPv4ID;
-Slirp* Ctx;
+Slirp* Ctx = nullptr;
const int FDListMax = 64;
struct pollfd FDList[FDListMax];
@@ -164,6 +164,7 @@ void SlirpCbUnregisterPollFD(int fd, void* opaque)
void SlirpCbNotify(void* opaque)
{
+ printf("Slirp: notify???\n");
}
SlirpCb cb =
@@ -205,7 +206,11 @@ bool Init()
void DeInit()
{
- slirp_cleanup(Ctx);
+ if (Ctx)
+ {
+ slirp_cleanup(Ctx);
+ Ctx = nullptr;
+ }
}
@@ -411,6 +416,8 @@ void HandleDNSFrame(u8* data, int len)
int SendPacket(u8* data, int len)
{
+ if (!Ctx) return 0;
+
if (len > 2048)
{
printf("LAN_SendPacket: error: packet too long (%d)\n", len);
@@ -496,6 +503,8 @@ int SlirpCbGetREvents(int idx, void* opaque)
int RecvPacket(u8* data)
{
+ if (!Ctx) return 0;
+
int ret = 0;
if (FDListSize > 0)