From fc5eedc7169b38e9131ed125aa3e7db630b87804 Mon Sep 17 00:00:00 2001 From: Arisotura Date: Mon, 15 Jun 2020 13:39:33 +0200 Subject: * take nwifi forward some * shut up CP15 printf's for Fx0 * fix bugs --- src/Wifi.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/Wifi.cpp') diff --git a/src/Wifi.cpp b/src/Wifi.cpp index ab82724..54fbceb 100644 --- a/src/Wifi.cpp +++ b/src/Wifi.cpp @@ -966,7 +966,8 @@ void MSTimer() void USTimer(u32 param) { - WifiAP::USTimer(); + // FIXME!!! + //WifiAP::USTimer(); if (IOPORT(W_USCountCnt)) { -- cgit v1.2.3 From c6dc5dfc4b55f56abd8ee0d146728cccf1c45388 Mon Sep 17 00:00:00 2001 From: Arisotura Date: Mon, 15 Jun 2020 14:35:02 +0200 Subject: get it to atleast finish a scan without shitting itself --- src/DSi_NWifi.cpp | 77 +++++++++++++++++++++++++++++++++++++++++++++++-------- src/DSi_NWifi.h | 3 ++- src/Wifi.cpp | 3 +-- 3 files changed, 69 insertions(+), 14 deletions(-) (limited to 'src/Wifi.cpp') diff --git a/src/DSi_NWifi.cpp b/src/DSi_NWifi.cpp index 4843cfb..a0778bb 100644 --- a/src/DSi_NWifi.cpp +++ b/src/DSi_NWifi.cpp @@ -21,7 +21,6 @@ #include "DSi.h" #include "DSi_NWifi.h" #include "SPI.h" -#include "WifiAP.h" const u8 CIS0[256] = @@ -178,6 +177,7 @@ void DSi_NWifi::Reset() BootPhase = 0; ErrorMask = 0; + ScanTimer = 0; NDS::CancelEvent(NDS::Event_DSi_NWifi); } @@ -826,6 +826,29 @@ void DSi_NWifi::WMI_Command() } break; + case 0x0007: // start scan + { + u32 forcefg = MB_Read32(0); + u32 legacy = MB_Read32(0); + u32 scantime = MB_Read32(0); + u32 forceinterval = MB_Read32(0); + u8 scantype = Mailbox[0]->Read(); + u8 nchannels = Mailbox[0]->Read(); + + printf("WMI: start scan, forceFG=%d, legacy=%d, scanTime=%d, interval=%d, scanType=%d, chan=%d\n", + forcefg, legacy, scantime, forceinterval, scantype, nchannels); + + if (ScanTimer > 0) + { + printf("!! CHECKME: START SCAN BUT WAS ALREADY SCANNING (%d)\n", ScanTimer); + } + + ScanTimer = scantime; + + SendWMIAck(); + } + break; + case 0x0008: // set scan params { // TODO: do something with the params!! @@ -913,6 +936,33 @@ void DSi_NWifi::WMI_Command() } break; + case 0x002E: // extension shit + { + u16 extcmd = MB_Read16(0); + switch (extcmd) + { + case 0x2008: // 'heartbeat'?? + { + u32 cookie = MB_Read32(0); + u32 source = MB_Read32(0); + + u8 reply[10]; + *(u16*)&reply[0] = 0x3007; + *(u32*)&reply[2] = cookie; + *(u32*)&reply[6] = source; + SendWMIEvent(1, 0x1010, reply, 10); + } + break; + + default: + printf("WMI: unknown ext cmd 002E:%04X\n", extcmd); + break; + } + + SendWMIAck(); + } + break; + case 0x0047: // cmd47 -- timer shenanigans?? { // @@ -1053,12 +1103,20 @@ void DSi_NWifi::WindowWrite(u32 addr, u32 val) } -void DSi_NWifi::CheckRX() -{return; - u16 framelen; - u16 framectl; +void DSi_NWifi::_MSTimer() +{ + if (ScanTimer > 0) + { + ScanTimer--; + + if (ScanTimer == 0) + { + u32 status = 0; + SendWMIEvent(1, 0x100A, (u8*)&status, 4); + } + } - for (;;) + /*for (;;) { int rxlen = WifiAP::RecvPacket(RXBuffer); if (rxlen == 0) return; @@ -1092,14 +1150,11 @@ void DSi_NWifi::CheckRX() memcpy(&beacon_evt[16], &RXBuffer[12+24], bodylen); // frame body //SendWMIFrame(beacon_evt, 16+bodylen, 1, 0, 0); } - } + }*/ } void DSi_NWifi::MSTimer(u32 param) { - WifiAP::MSTimer(); - - Ctx->CheckRX(); - + Ctx->_MSTimer(); NDS::ScheduleEvent(NDS::Event_DSi_NWifi, true, 33611, MSTimer, 0); } diff --git a/src/DSi_NWifi.h b/src/DSi_NWifi.h index 8693b18..68c3795 100644 --- a/src/DSi_NWifi.h +++ b/src/DSi_NWifi.h @@ -37,7 +37,7 @@ public: void SetIRQ_F1_Counter(u32 n); - void CheckRX(); + void _MSTimer(); static void MSTimer(u32 param); @@ -125,6 +125,7 @@ private: u32 BootPhase; u32 ErrorMask; + u32 ScanTimer; u8 RXBuffer[2048]; }; diff --git a/src/Wifi.cpp b/src/Wifi.cpp index 54fbceb..ab82724 100644 --- a/src/Wifi.cpp +++ b/src/Wifi.cpp @@ -966,8 +966,7 @@ void MSTimer() void USTimer(u32 param) { - // FIXME!!! - //WifiAP::USTimer(); + WifiAP::USTimer(); if (IOPORT(W_USCountCnt)) { -- cgit v1.2.3 From e43a216ab55f72a6ba1a98046abc3770a4217eb4 Mon Sep 17 00:00:00 2001 From: Arisotura Date: Sun, 21 Jun 2020 11:02:42 +0200 Subject: take care of some minor details --- src/SPI.cpp | 34 +++++++++++++++++++--------------- src/Wifi.cpp | 2 ++ 2 files changed, 21 insertions(+), 15 deletions(-) (limited to 'src/Wifi.cpp') diff --git a/src/SPI.cpp b/src/SPI.cpp index ac40707..eff0a05 100644 --- a/src/SPI.cpp +++ b/src/SPI.cpp @@ -162,22 +162,26 @@ void Reset() UserSettings = userdata; - // fix touchscreen coords - #if 0 - *(u16*)&Firmware[userdata+0x58] = 0; - *(u16*)&Firmware[userdata+0x5A] = 0; - Firmware[userdata+0x5C] = 0; - Firmware[userdata+0x5D] = 0; - *(u16*)&Firmware[userdata+0x5E] = 255<<4; - *(u16*)&Firmware[userdata+0x60] = 191<<4; - Firmware[userdata+0x62] = 255; - Firmware[userdata+0x63] = 191; - - // disable autoboot - //Firmware[userdata+0x64] &= 0xBF; - - *(u16*)&Firmware[userdata+0x72] = CRC16(&Firmware[userdata], 0x70, 0xFFFF); + // TODO evetually: do this in DSi mode + if (NDS::ConsoleType == 0) + { + // fix touchscreen coords + *(u16*)&Firmware[userdata+0x58] = 0; + *(u16*)&Firmware[userdata+0x5A] = 0; + Firmware[userdata+0x5C] = 0; + Firmware[userdata+0x5D] = 0; + *(u16*)&Firmware[userdata+0x5E] = 255<<4; + *(u16*)&Firmware[userdata+0x60] = 191<<4; + Firmware[userdata+0x62] = 255; + Firmware[userdata+0x63] = 191; + + // disable autoboot + //Firmware[userdata+0x64] &= 0xBF; + + *(u16*)&Firmware[userdata+0x72] = CRC16(&Firmware[userdata], 0x70, 0xFFFF); + } +#if 0 // replace MAC address with random address // TODO: make optional? Firmware[0x36] = 0x00; diff --git a/src/Wifi.cpp b/src/Wifi.cpp index ab82724..8188151 100644 --- a/src/Wifi.cpp +++ b/src/Wifi.cpp @@ -188,6 +188,8 @@ void Reset() IOPORT(0x000) = 0x1440; else if (console == 0x20) IOPORT(0x000) = 0xC340; + else if (NDS::ConsoleType == 1 && console == 0x57) + IOPORT(0x000) = 0xC340; // DSi has the modern DS-wifi variant else { printf("wifi: unknown console type %02X\n", console); -- cgit v1.2.3