Wifi: add socket init/deinit code.
Remove ad-hoc client/server stuff from wifi settings dialog as they're going to be useless.
This commit is contained in:
parent
a8ff7220cc
commit
adeec7e38f
|
@ -432,8 +432,6 @@ extern struct TCommonSettings {
|
||||||
strcpy(Firmware, "firmware.bin");
|
strcpy(Firmware, "firmware.bin");
|
||||||
|
|
||||||
wifi.mode = 0;
|
wifi.mode = 0;
|
||||||
wifi.adhocMode = 0;
|
|
||||||
strcpy(wifi.adhocServerName, "");
|
|
||||||
wifi.infraBridgeAdapter = 0;
|
wifi.infraBridgeAdapter = 0;
|
||||||
|
|
||||||
for(int i=0;i<16;i++)
|
for(int i=0;i<16;i++)
|
||||||
|
@ -456,10 +454,6 @@ extern struct TCommonSettings {
|
||||||
|
|
||||||
struct _Wifi {
|
struct _Wifi {
|
||||||
int mode;
|
int mode;
|
||||||
|
|
||||||
int adhocMode;
|
|
||||||
char adhocServerName[64];
|
|
||||||
|
|
||||||
int infraBridgeAdapter;
|
int infraBridgeAdapter;
|
||||||
} wifi;
|
} wifi;
|
||||||
|
|
||||||
|
|
|
@ -27,12 +27,31 @@
|
||||||
#ifdef EXPERIMENTAL_WIFI
|
#ifdef EXPERIMENTAL_WIFI
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include "windriver.h"
|
#include <winsock2.h>
|
||||||
|
#define socket_t SOCKET
|
||||||
|
#define sockaddr_t SOCKADDR
|
||||||
|
#include "windriver.h"
|
||||||
#else
|
#else
|
||||||
#include "pcap/pcap.h"
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#define socket_t int
|
||||||
|
#define sockaddr_t struct sockaddr
|
||||||
|
#define closesocket close
|
||||||
|
#include "pcap/pcap.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef INVALID_SOCKET
|
||||||
|
#define INVALID_SOCKET (socket_t)-1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BASEPORT 7000
|
||||||
|
|
||||||
bool wifi_netEnabled = false;
|
bool wifi_netEnabled = false;
|
||||||
|
socket_t wifi_socket = INVALID_SOCKET;
|
||||||
|
sockaddr_t sendAddr;
|
||||||
pcap_t *wifi_bridge = NULL;
|
pcap_t *wifi_bridge = NULL;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -257,7 +276,7 @@ WifiComInterface* wifiCom;
|
||||||
// 3: medium logging, for debugging, shows lots of stuff
|
// 3: medium logging, for debugging, shows lots of stuff
|
||||||
// 4: high logging, for debugging, shows almost everything, may slow down
|
// 4: high logging, for debugging, shows almost everything, may slow down
|
||||||
// 5: highest logging, for debugging, shows everything, may slow down a lot
|
// 5: highest logging, for debugging, shows everything, may slow down a lot
|
||||||
#define WIFI_LOGGING_LEVEL 0
|
#define WIFI_LOGGING_LEVEL 3
|
||||||
|
|
||||||
#define WIFI_LOG_USE_LOGC 0
|
#define WIFI_LOG_USE_LOGC 0
|
||||||
|
|
||||||
|
@ -359,7 +378,7 @@ static u32 reflect(u32 ref, char ch)
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u32 WIFI_getCRC32(u8 *data, int len)
|
static u32 WIFI_calcCRC32(u8 *data, int len)
|
||||||
{
|
{
|
||||||
u32 crc = 0xFFFFFFFF;
|
u32 crc = 0xFFFFFFFF;
|
||||||
|
|
||||||
|
@ -1268,13 +1287,68 @@ void WIFI_usTrigger()
|
||||||
|
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#define ADHOC_MAGIC "NDSWIFI\0"
|
||||||
|
#define ADHOC_PROTOCOL_VERSION 0x0100 // v1.0
|
||||||
|
|
||||||
|
typedef struct _Adhoc_PacketHeader
|
||||||
|
{
|
||||||
|
char magic[8]; // "NDSWIFI\0" (null terminated string)
|
||||||
|
u16 version; // Ad-hoc protocol version (for example 0x0502 = v5.2)
|
||||||
|
u16 packetLen; // Length of the packet
|
||||||
|
|
||||||
|
} Adhoc_PacketHeader;
|
||||||
|
|
||||||
|
|
||||||
bool Adhoc_Init()
|
bool Adhoc_Init()
|
||||||
{
|
{
|
||||||
|
int res;
|
||||||
|
|
||||||
|
// Create an UDP socket
|
||||||
|
wifi_socket = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
|
if (wifi_socket < 0)
|
||||||
|
{
|
||||||
|
WIFI_LOG(1, "Ad-hoc: Failed to create socket.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bind the socket to any address on port 7000
|
||||||
|
sockaddr_t saddr;
|
||||||
|
saddr.sa_family = AF_INET;
|
||||||
|
*(u32*)&saddr.sa_data[2] = htonl(INADDR_ANY);
|
||||||
|
*(u16*)&saddr.sa_data[0] = htons(BASEPORT);
|
||||||
|
res = bind(wifi_socket, &saddr, sizeof(sockaddr_t));
|
||||||
|
if (res < 0)
|
||||||
|
{
|
||||||
|
WIFI_LOG(1, "Ad-hoc: failed to bind the socket.\n");
|
||||||
|
closesocket(wifi_socket); wifi_socket = INVALID_SOCKET;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enable broadcast mode
|
||||||
|
// Not doing so results in failure when sendto'ing to broadcast address
|
||||||
|
BOOL opt = TRUE;
|
||||||
|
res = setsockopt(wifi_socket, SOL_SOCKET, SO_BROADCAST, (const char*)&opt, sizeof(BOOL));
|
||||||
|
if (res < 0)
|
||||||
|
{
|
||||||
|
WIFI_LOG(1, "Ad-hoc: failed to enable broadcast mode.\n");
|
||||||
|
closesocket(wifi_socket); wifi_socket = INVALID_SOCKET;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prepare an address structure for sending packets
|
||||||
|
sendAddr.sa_family = AF_INET;
|
||||||
|
*(u32*)&saddr.sa_data[2] = htonl(INADDR_BROADCAST);
|
||||||
|
*(u16*)&saddr.sa_data[0] = htons(BASEPORT);
|
||||||
|
|
||||||
|
WIFI_LOG(1, "Ad-hoc: initialization successful.\n");
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Adhoc_DeInit()
|
void Adhoc_DeInit()
|
||||||
{
|
{
|
||||||
|
if (wifi_socket >= 0)
|
||||||
|
closesocket(wifi_socket);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Adhoc_Reset()
|
void Adhoc_Reset()
|
||||||
|
@ -1295,9 +1369,9 @@ void Adhoc_usTrigger()
|
||||||
|
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
u8 SoftAP_MACAddr[6] = {0x00, 0xF0, 0x1A, 0x2B, 0x3C, 0x4D};
|
const u8 SoftAP_MACAddr[6] = {0x00, 0xF0, 0x1A, 0x2B, 0x3C, 0x4D};
|
||||||
|
|
||||||
u8 SoftAP_Beacon[] = {
|
const u8 SoftAP_Beacon[] = {
|
||||||
/* 802.11 header */
|
/* 802.11 header */
|
||||||
0x80, 0x00, // Frame control
|
0x80, 0x00, // Frame control
|
||||||
0x00, 0x00, // Duration ID
|
0x00, 0x00, // Duration ID
|
||||||
|
@ -1318,7 +1392,7 @@ u8 SoftAP_Beacon[] = {
|
||||||
0x00, 0x00, 0x00, 0x00
|
0x00, 0x00, 0x00, 0x00
|
||||||
};
|
};
|
||||||
|
|
||||||
u8 SoftAP_ProbeResponse[] = {
|
const u8 SoftAP_ProbeResponse[] = {
|
||||||
/* 802.11 header */
|
/* 802.11 header */
|
||||||
0x50, 0x00, // Frame control
|
0x50, 0x00, // Frame control
|
||||||
0x00, 0x00, // Duration ID
|
0x00, 0x00, // Duration ID
|
||||||
|
@ -1338,7 +1412,7 @@ u8 SoftAP_ProbeResponse[] = {
|
||||||
0x00, 0x00, 0x00, 0x00
|
0x00, 0x00, 0x00, 0x00
|
||||||
};
|
};
|
||||||
|
|
||||||
u8 SoftAP_AuthFrame[] = {
|
const u8 SoftAP_AuthFrame[] = {
|
||||||
/* 802.11 header */
|
/* 802.11 header */
|
||||||
0xB0, 0x00, // Frame control
|
0xB0, 0x00, // Frame control
|
||||||
0x00, 0x00, // Duration ID
|
0x00, 0x00, // Duration ID
|
||||||
|
@ -1356,7 +1430,7 @@ u8 SoftAP_AuthFrame[] = {
|
||||||
0x00, 0x00, 0x00, 0x00
|
0x00, 0x00, 0x00, 0x00
|
||||||
};
|
};
|
||||||
|
|
||||||
u8 SoftAP_AssocResponse[] = {
|
const u8 SoftAP_AssocResponse[] = {
|
||||||
/* 802.11 header */
|
/* 802.11 header */
|
||||||
0x10, 0x00, // Frame control
|
0x10, 0x00, // Frame control
|
||||||
0x00, 0x00, // Duration ID
|
0x00, 0x00, // Duration ID
|
||||||
|
@ -1496,7 +1570,7 @@ void SoftAP_SendPacket(u8 *packet, u32 len)
|
||||||
*(u64*)&wifiMac.SoftAP.curPacket[12 + 24] = timestamp;
|
*(u64*)&wifiMac.SoftAP.curPacket[12 + 24] = timestamp;
|
||||||
|
|
||||||
// And the CRC32 (FCS)
|
// And the CRC32 (FCS)
|
||||||
u32 crc32 = WIFI_getCRC32(&wifiMac.SoftAP.curPacket[12], (packetLen - 4));
|
u32 crc32 = WIFI_calcCRC32(&wifiMac.SoftAP.curPacket[12], (packetLen - 4));
|
||||||
*(u32*)&wifiMac.SoftAP.curPacket[12 + packetLen - 4] = crc32;
|
*(u32*)&wifiMac.SoftAP.curPacket[12 + packetLen - 4] = crc32;
|
||||||
|
|
||||||
// Let's prepare to send
|
// Let's prepare to send
|
||||||
|
@ -1521,7 +1595,7 @@ void SoftAP_SendPacket(u8 *packet, u32 len)
|
||||||
memcpy(&wifiMac.SoftAP.curPacket[12 + 4], FW_Mac, 6);
|
memcpy(&wifiMac.SoftAP.curPacket[12 + 4], FW_Mac, 6);
|
||||||
|
|
||||||
// And the CRC32 (FCS)
|
// And the CRC32 (FCS)
|
||||||
u32 crc32 = WIFI_getCRC32(&wifiMac.SoftAP.curPacket[12], (packetLen - 4));
|
u32 crc32 = WIFI_calcCRC32(&wifiMac.SoftAP.curPacket[12], (packetLen - 4));
|
||||||
*(u32*)&wifiMac.SoftAP.curPacket[12 + packetLen - 4] = crc32;
|
*(u32*)&wifiMac.SoftAP.curPacket[12 + packetLen - 4] = crc32;
|
||||||
|
|
||||||
// Let's prepare to send
|
// Let's prepare to send
|
||||||
|
@ -1546,7 +1620,7 @@ void SoftAP_SendPacket(u8 *packet, u32 len)
|
||||||
memcpy(&wifiMac.SoftAP.curPacket[12 + 4], FW_Mac, 6);
|
memcpy(&wifiMac.SoftAP.curPacket[12 + 4], FW_Mac, 6);
|
||||||
|
|
||||||
// And the CRC32 (FCS)
|
// And the CRC32 (FCS)
|
||||||
u32 crc32 = WIFI_getCRC32(&wifiMac.SoftAP.curPacket[12], (packetLen - 4));
|
u32 crc32 = WIFI_calcCRC32(&wifiMac.SoftAP.curPacket[12], (packetLen - 4));
|
||||||
*(u32*)&wifiMac.SoftAP.curPacket[12 + packetLen - 4] = crc32;
|
*(u32*)&wifiMac.SoftAP.curPacket[12 + packetLen - 4] = crc32;
|
||||||
|
|
||||||
// Let's prepare to send
|
// Let's prepare to send
|
||||||
|
@ -1617,7 +1691,7 @@ INLINE void SoftAP_SendBeacon()
|
||||||
*(u64*)&wifiMac.SoftAP.curPacket[12 + 24] = timestamp;
|
*(u64*)&wifiMac.SoftAP.curPacket[12 + 24] = timestamp;
|
||||||
|
|
||||||
// And the CRC32 (FCS)
|
// And the CRC32 (FCS)
|
||||||
u32 crc32 = WIFI_getCRC32(&wifiMac.SoftAP.curPacket[12], (packetLen - 4));
|
u32 crc32 = WIFI_calcCRC32(&wifiMac.SoftAP.curPacket[12], (packetLen - 4));
|
||||||
*(u32*)&wifiMac.SoftAP.curPacket[12 + packetLen - 4] = crc32;
|
*(u32*)&wifiMac.SoftAP.curPacket[12 + packetLen - 4] = crc32;
|
||||||
|
|
||||||
// Let's prepare to send
|
// Let's prepare to send
|
||||||
|
|
|
@ -1869,8 +1869,6 @@ int _main()
|
||||||
CommonSettings.BootFromFirmware = GetPrivateProfileBool("Firmware", "BootFromFirmware", FALSE, IniName);
|
CommonSettings.BootFromFirmware = GetPrivateProfileBool("Firmware", "BootFromFirmware", FALSE, IniName);
|
||||||
|
|
||||||
CommonSettings.wifi.mode = GetPrivateProfileInt("Wifi", "Mode", 0, IniName);
|
CommonSettings.wifi.mode = GetPrivateProfileInt("Wifi", "Mode", 0, IniName);
|
||||||
CommonSettings.wifi.adhocMode = GetPrivateProfileInt("Wifi", "AdhocMode", 0, IniName);
|
|
||||||
GetPrivateProfileString("Wifi", "AdhocServerName", "", CommonSettings.wifi.adhocServerName, 64, IniName);
|
|
||||||
CommonSettings.wifi.infraBridgeAdapter = GetPrivateProfileInt("Wifi", "BridgeAdapter", 0, IniName);
|
CommonSettings.wifi.infraBridgeAdapter = GetPrivateProfileInt("Wifi", "BridgeAdapter", 0, IniName);
|
||||||
|
|
||||||
video.currentfilter = GetPrivateProfileInt("Video", "Filter", video.NONE, IniName);
|
video.currentfilter = GetPrivateProfileInt("Video", "Filter", video.NONE, IniName);
|
||||||
|
@ -4296,12 +4294,6 @@ LRESULT CALLBACK WifiSettingsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM
|
||||||
HWND cur;
|
HWND cur;
|
||||||
|
|
||||||
CheckRadioButton(hDlg, IDC_WIFIMODE0, IDC_WIFIMODE1, IDC_WIFIMODE0 + CommonSettings.wifi.mode);
|
CheckRadioButton(hDlg, IDC_WIFIMODE0, IDC_WIFIMODE1, IDC_WIFIMODE0 + CommonSettings.wifi.mode);
|
||||||
CheckRadioButton(hDlg, IDC_ADHOC_SERVER, IDC_ADHOC_CLIENT, CommonSettings.wifi.adhocMode ? IDC_ADHOC_CLIENT:IDC_ADHOC_SERVER);
|
|
||||||
|
|
||||||
cur = GetDlgItem(hDlg, IDC_ADHOC_SERVERNAME);
|
|
||||||
SetWindowText(cur, CommonSettings.wifi.adhocServerName);
|
|
||||||
EnableWindow(cur, (CommonSettings.wifi.adhocMode == 1) ? TRUE:FALSE);
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if(PCAP::pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
|
if(PCAP::pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
|
||||||
{
|
{
|
||||||
|
@ -4323,14 +4315,6 @@ LRESULT CALLBACK WifiSettingsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM
|
||||||
{
|
{
|
||||||
switch(LOWORD(wParam))
|
switch(LOWORD(wParam))
|
||||||
{
|
{
|
||||||
case IDC_ADHOC_SERVER:
|
|
||||||
case IDC_ADHOC_CLIENT:
|
|
||||||
{
|
|
||||||
HWND cur = GetDlgItem(hDlg, IDC_ADHOC_SERVERNAME);
|
|
||||||
EnableWindow(cur, (LOWORD(wParam) == IDC_ADHOC_CLIENT) ? TRUE:FALSE);
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
case IDOK:
|
case IDOK:
|
||||||
{
|
{
|
||||||
int val = 0;
|
int val = 0;
|
||||||
|
@ -4355,16 +4339,6 @@ LRESULT CALLBACK WifiSettingsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM
|
||||||
WritePrivateProfileInt("Wifi", "Mode", CommonSettings.wifi.mode, IniName);
|
WritePrivateProfileInt("Wifi", "Mode", CommonSettings.wifi.mode, IniName);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (IsDlgButtonChecked(hDlg, IDC_ADHOC_SERVER))
|
|
||||||
CommonSettings.wifi.adhocMode = 0;
|
|
||||||
else
|
|
||||||
CommonSettings.wifi.adhocMode = 1;
|
|
||||||
WritePrivateProfileInt("Wifi", "AdhocMode", CommonSettings.wifi.adhocMode, IniName);
|
|
||||||
|
|
||||||
cur = GetDlgItem(hDlg, IDC_ADHOC_SERVERNAME);
|
|
||||||
GetWindowText(cur, CommonSettings.wifi.adhocServerName, 64);
|
|
||||||
WritePrivateProfileString("Wifi", "AdhocServerName", CommonSettings.wifi.adhocServerName, IniName);
|
|
||||||
|
|
||||||
if(val == IDYES)
|
if(val == IDYES)
|
||||||
{
|
{
|
||||||
NDS_Reset();
|
NDS_Reset();
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue