mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-25 07:10:00 -06:00
salvage socket init code
This commit is contained in:
@ -387,7 +387,7 @@ void GPU2D::DrawScanline(u32 line)
|
|||||||
if (line > 192)
|
if (line > 192)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 256; i++)
|
for (int i = 0; i < 256; i++)
|
||||||
dst[i] = 0xFF3F3F3F;
|
dst[i] = 0xFFFFFFFF;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -130,6 +130,7 @@ bool Init()
|
|||||||
if (!SPU::Init()) return false;
|
if (!SPU::Init()) return false;
|
||||||
if (!SPI::Init()) return false;
|
if (!SPI::Init()) return false;
|
||||||
if (!RTC::Init()) return false;
|
if (!RTC::Init()) return false;
|
||||||
|
if (!Wifi::Init()) return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -150,6 +151,7 @@ void DeInit()
|
|||||||
SPU::DeInit();
|
SPU::DeInit();
|
||||||
SPI::DeInit();
|
SPI::DeInit();
|
||||||
RTC::DeInit();
|
RTC::DeInit();
|
||||||
|
Wifi::DeInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -19,10 +19,13 @@
|
|||||||
#ifndef PLATFORM_H
|
#ifndef PLATFORM_H
|
||||||
#define PLATFORM_H
|
#define PLATFORM_H
|
||||||
|
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
namespace Platform
|
namespace Platform
|
||||||
{
|
{
|
||||||
|
|
||||||
//
|
bool MP_Init();
|
||||||
|
void MP_DeInit();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
25
src/Wifi.cpp
25
src/Wifi.cpp
@ -21,6 +21,7 @@
|
|||||||
#include "NDS.h"
|
#include "NDS.h"
|
||||||
#include "SPI.h"
|
#include "SPI.h"
|
||||||
#include "Wifi.h"
|
#include "Wifi.h"
|
||||||
|
#include "Platform.h"
|
||||||
|
|
||||||
|
|
||||||
namespace Wifi
|
namespace Wifi
|
||||||
@ -47,6 +48,8 @@ u16 RFData1;
|
|||||||
u16 RFData2;
|
u16 RFData2;
|
||||||
u32 RFRegs[0x40];
|
u32 RFRegs[0x40];
|
||||||
|
|
||||||
|
bool MPInited;
|
||||||
|
|
||||||
|
|
||||||
// multiplayer host TX sequence:
|
// multiplayer host TX sequence:
|
||||||
// 1. preamble
|
// 1. preamble
|
||||||
@ -74,6 +77,19 @@ u32 RFRegs[0x40];
|
|||||||
// * work out how power saving works, there are oddities
|
// * work out how power saving works, there are oddities
|
||||||
|
|
||||||
|
|
||||||
|
bool Init()
|
||||||
|
{
|
||||||
|
MPInited = false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DeInit()
|
||||||
|
{
|
||||||
|
if (MPInited)
|
||||||
|
Platform::MP_DeInit();
|
||||||
|
}
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
memset(RAM, 0, 0x2000);
|
memset(RAM, 0, 0x2000);
|
||||||
@ -448,9 +464,18 @@ void Write(u32 addr, u16 val)
|
|||||||
// schedule timer event when the clock is enabled
|
// schedule timer event when the clock is enabled
|
||||||
// TODO: check whether this resets USCOUNT (and also which other events can reset it)
|
// TODO: check whether this resets USCOUNT (and also which other events can reset it)
|
||||||
if ((IOPORT(W_PowerUS) & 0x0001) && !(val & 0x0001))
|
if ((IOPORT(W_PowerUS) & 0x0001) && !(val & 0x0001))
|
||||||
|
{
|
||||||
NDS::ScheduleEvent(NDS::Event_Wifi, true, 33, USTimer, 0);
|
NDS::ScheduleEvent(NDS::Event_Wifi, true, 33, USTimer, 0);
|
||||||
|
if (!MPInited)
|
||||||
|
{
|
||||||
|
Platform::MP_Init();
|
||||||
|
MPInited = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (!(IOPORT(W_PowerUS) & 0x0001) && (val & 0x0001))
|
else if (!(IOPORT(W_PowerUS) & 0x0001) && (val & 0x0001))
|
||||||
|
{
|
||||||
NDS::CancelEvent(NDS::Event_Wifi);
|
NDS::CancelEvent(NDS::Event_Wifi);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case W_USCountCnt: val &= 0x0001; break;
|
case W_USCountCnt: val &= 0x0001; break;
|
||||||
|
@ -140,6 +140,8 @@ enum
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
bool Init();
|
||||||
|
void DeInit();
|
||||||
void Reset();
|
void Reset();
|
||||||
|
|
||||||
void USTimer(u32 param);
|
void USTimer(u32 param);
|
||||||
|
@ -17,14 +17,90 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
#include "../Platform.h"
|
#include "../Platform.h"
|
||||||
|
|
||||||
|
#ifdef __WXMSW__
|
||||||
|
#include <winsock2.h>
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#define socket_t SOCKET
|
||||||
|
#define sockaddr_t SOCKADDR
|
||||||
|
#define pcap_dev_name description
|
||||||
|
#else
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#define socket_t int
|
||||||
|
#define sockaddr_t struct sockaddr
|
||||||
|
#define closesocket close
|
||||||
|
#define pcap_dev_name name
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef INVALID_SOCKET
|
||||||
|
#define INVALID_SOCKET (socket_t)-1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
namespace Platform
|
namespace Platform
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
//
|
socket_t MPSocket;
|
||||||
|
sockaddr_t MPSendAddr;
|
||||||
|
|
||||||
|
|
||||||
|
bool MP_Init()
|
||||||
|
{
|
||||||
|
BOOL opt_true = TRUE;
|
||||||
|
int res;
|
||||||
|
|
||||||
|
MPSocket = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
|
if (MPSocket < 0)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
res = setsockopt(MPSocket, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt_true, sizeof(BOOL));
|
||||||
|
if (res < 0)
|
||||||
|
{
|
||||||
|
closesocket(MPSocket);
|
||||||
|
MPSocket = INVALID_SOCKET;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
sockaddr_t saddr;
|
||||||
|
saddr.sa_family = AF_INET;
|
||||||
|
*(u32*)&saddr.sa_data[2] = htonl(INADDR_ANY);
|
||||||
|
*(u16*)&saddr.sa_data[0] = htons(7064);
|
||||||
|
res = bind(MPSocket, &saddr, sizeof(sockaddr_t));
|
||||||
|
if (res < 0)
|
||||||
|
{
|
||||||
|
closesocket(MPSocket);
|
||||||
|
MPSocket = INVALID_SOCKET;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
res = setsockopt(MPSocket, SOL_SOCKET, SO_BROADCAST, (const char*)&opt_true, sizeof(BOOL));
|
||||||
|
if (res < 0)
|
||||||
|
{
|
||||||
|
closesocket(MPSocket);
|
||||||
|
MPSocket = INVALID_SOCKET;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
MPSendAddr.sa_family = AF_INET;
|
||||||
|
*(u32*)&MPSendAddr.sa_data[2] = htonl(INADDR_BROADCAST);
|
||||||
|
*(u16*)&MPSendAddr.sa_data[0] = htons(7064);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MP_DeInit()
|
||||||
|
{
|
||||||
|
if (MPSocket >= 0)
|
||||||
|
closesocket(MPSocket);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user