Firmware: Standardize how the firmware configuration is set.
- Now, the only two methods for changing any firmware setting is by modifying CommonSettings.fwConfig or by loading an external NDS firmware binary file. - All methods for changing the firmware MAC address through the WifiHandler class have been removed. - The FirmwareConfig struct can now handle the WFC User ID. - Clients can now retrieve the current MAC address and WFC User ID using NDS_GetCurrentWFCUserID(). It is also possible to retrieve the WFC User ID from CommonSettings.fwConfig. - Setting up the firmware in NDS_Reset() should now be more consistent. However, this does change some of the loading/unpacking order previously set by NDS_FakeBoot(). This will need additional testing. - Do a whole bunch of code refactoring and cleanup.
This commit is contained in:
parent
5d85ac2e23
commit
e27cc87bdf
|
@ -923,7 +923,6 @@ void MMU_Init(void)
|
|||
|
||||
mc_init(&MMU.fw, MC_TYPE_FLASH); /* init fw device */
|
||||
mc_alloc(&MMU.fw, NDS_FW_SIZE_V1);
|
||||
MMU.fw.fp = NULL;
|
||||
MMU.fw.isFirmware = true;
|
||||
|
||||
rtcInit();
|
||||
|
@ -939,9 +938,7 @@ void MMU_Init(void)
|
|||
|
||||
void MMU_DeInit(void) {
|
||||
LOG("MMU deinit\n");
|
||||
if (MMU.fw.fp)
|
||||
fclose(MMU.fw.fp);
|
||||
mc_free(&MMU.fw);
|
||||
mc_free(&MMU.fw);
|
||||
|
||||
slot1_Shutdown();
|
||||
slot2_Shutdown();
|
||||
|
@ -5216,7 +5213,7 @@ void FASTCALL _MMU_ARM7_write08(u32 adr, u8 val)
|
|||
if (NDS_ARM7.instruct_adr > 0x3FFF) return;
|
||||
#ifdef HAVE_JIT
|
||||
// hack for firmware boot in JIT mode
|
||||
if (CommonSettings.UseExtFirmware && CommonSettings.BootFromFirmware && firmware->loaded() && val == 1)
|
||||
if (CommonSettings.UseExtFirmware && CommonSettings.BootFromFirmware && extFirmwareObj->loaded() && val == 1)
|
||||
CommonSettings.jit_max_block_size = saveBlockSizeJIT;
|
||||
#endif
|
||||
break;
|
||||
|
@ -5324,8 +5321,9 @@ void FASTCALL _MMU_ARM7_write16(u32 adr, u16 val)
|
|||
if (val != nds.VCount)
|
||||
{
|
||||
printf("VCOUNT set to %i (previous value %i)\n", val, nds.VCount);
|
||||
nds.VCount = val;
|
||||
}
|
||||
|
||||
nds.VCount = val;
|
||||
}
|
||||
else
|
||||
printf("Attempt to set VCOUNT while not within 202-212 (%i), ignored\n", nds.VCount);
|
||||
|
|
|
@ -88,7 +88,7 @@ static NDSError _lastNDSError;
|
|||
|
||||
GameInfo gameInfo;
|
||||
NDSSystem nds;
|
||||
CFIRMWARE *firmware = NULL;
|
||||
CFIRMWARE *extFirmwareObj = NULL;
|
||||
|
||||
using std::min;
|
||||
using std::max;
|
||||
|
@ -2387,10 +2387,7 @@ bool NDS_LegitBoot()
|
|||
//CRAZYMAX: is it safe to accept anything smaller than 12?
|
||||
CommonSettings.jit_max_block_size = std::min(CommonSettings.jit_max_block_size,12U);
|
||||
#endif
|
||||
|
||||
//partially clobber the loaded firmware with the user settings from DFC
|
||||
firmware->loadSettings();
|
||||
|
||||
|
||||
//since firmware only boots encrypted roms, we have to make sure it's encrypted first
|
||||
//this has not been validated on big endian systems. it almost positively doesn't work.
|
||||
if (gameInfo.header.CRC16 != 0)
|
||||
|
@ -2428,19 +2425,6 @@ bool NDS_FakeBoot()
|
|||
|
||||
//bios (or firmware) sets this default, which is generally not important for retail games but some homebrews are depending on
|
||||
_MMU_write08<ARMCPU_ARM9>(REG_WRAMCNT,3);
|
||||
|
||||
//EDIT - whats this firmware and how is it relating to the dummy firmware below
|
||||
//how do these even get used? what is the purpose of unpack and why is it not used by the firmware boot process?
|
||||
if (CommonSettings.UseExtFirmware && firmware->loaded())
|
||||
{
|
||||
firmware->unpack();
|
||||
firmware->loadSettings();
|
||||
}
|
||||
|
||||
// Create the dummy firmware
|
||||
//EDIT - whats dummy firmware and how is relating to the above?
|
||||
//it seems to be emplacing basic firmware data into MMU.fw.data
|
||||
NDS_InitFirmwareWithConfig(CommonSettings.fwConfig);
|
||||
|
||||
//firmware loads the game card arm9 and arm7 programs as specified in rom header
|
||||
{
|
||||
|
@ -2652,28 +2636,57 @@ void NDS_Reset()
|
|||
PrepareBiosARM7();
|
||||
PrepareBiosARM9();
|
||||
|
||||
if (firmware)
|
||||
if (extFirmwareObj)
|
||||
{
|
||||
delete firmware;
|
||||
firmware = NULL;
|
||||
delete extFirmwareObj;
|
||||
extFirmwareObj = NULL;
|
||||
}
|
||||
|
||||
firmware = new CFIRMWARE();
|
||||
firmware->load();
|
||||
|
||||
|
||||
bool didLoadExtFirmware = false;
|
||||
extFirmwareObj = new CFIRMWARE();
|
||||
|
||||
if (CommonSettings.UseExtFirmware)
|
||||
{
|
||||
didLoadExtFirmware = extFirmwareObj->load(CommonSettings.ExtFirmwarePath);
|
||||
}
|
||||
|
||||
if (didLoadExtFirmware)
|
||||
{
|
||||
// what is the purpose of unpack?
|
||||
extFirmwareObj->unpack();
|
||||
|
||||
std::string extFWUserSettingsString = CFIRMWARE::GetUserSettingsFilePath(CommonSettings.ExtFirmwarePath);
|
||||
strncpy(CommonSettings.ExtFirmwareUserSettingsPath, extFWUserSettingsString.c_str(), MAX_PATH);
|
||||
|
||||
//partially clobber the loaded firmware with the user settings from DFC
|
||||
if (CommonSettings.UseExtFirmwareSettings)
|
||||
{
|
||||
extFirmwareObj->loadSettings(CommonSettings.ExtFirmwareUserSettingsPath);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
NDS_InitFirmwareWithConfig(CommonSettings.fwConfig);
|
||||
}
|
||||
|
||||
//we will allow a proper firmware boot, if:
|
||||
//1. we have the ARM7 and ARM9 bioses (its doubtful that our HLE bios implement the necessary functions)
|
||||
//2. firmware is available
|
||||
//3. user has requested booting from firmware
|
||||
bool canBootFromFirmware = (NDS_ARM7.BIOS_loaded && NDS_ARM9.BIOS_loaded && CommonSettings.BootFromFirmware && firmware->loaded());
|
||||
bool canBootFromFirmware = (NDS_ARM7.BIOS_loaded && NDS_ARM9.BIOS_loaded && CommonSettings.BootFromFirmware && didLoadExtFirmware);
|
||||
bool bootResult = false;
|
||||
if(canBootFromFirmware)
|
||||
|
||||
if (canBootFromFirmware)
|
||||
{
|
||||
bootResult = NDS_LegitBoot();
|
||||
}
|
||||
else
|
||||
{
|
||||
bootResult = NDS_FakeBoot();
|
||||
|
||||
}
|
||||
|
||||
// Init calibration info
|
||||
memcpy(&TSCal, firmware->getTouchCalibrate(), sizeof(TSCalInfo));
|
||||
memcpy(&TSCal, extFirmwareObj->getTouchCalibrate(), sizeof(TSCalInfo));
|
||||
|
||||
GPU->Reset();
|
||||
|
||||
|
|
|
@ -73,7 +73,7 @@ extern BOOL click;
|
|||
#define NDS_FW_LANG_CHI 6
|
||||
#define NDS_FW_LANG_RES 7
|
||||
|
||||
extern CFIRMWARE *firmware;
|
||||
extern CFIRMWARE *extFirmwareObj;
|
||||
|
||||
#define DSGBA_LOADER_SIZE 512
|
||||
enum
|
||||
|
@ -528,13 +528,11 @@ extern struct TCommonSettings
|
|||
, backupSave(false)
|
||||
, SPU_sync_mode(1)
|
||||
, SPU_sync_method(0)
|
||||
, WifiBridgeDeviceID(0)
|
||||
{
|
||||
strcpy(ARM9BIOS, "biosnds9.bin");
|
||||
strcpy(ARM7BIOS, "biosnds7.bin");
|
||||
strcpy(Firmware, "firmware.bin");
|
||||
|
||||
wifi.mode = WifiCommInterfaceID_Infrastructure;
|
||||
wifi.infraBridgeAdapter = 0;
|
||||
strcpy(ExtFirmwarePath, "firmware.bin");
|
||||
|
||||
for(int i=0;i<16;i++)
|
||||
spu_muteChannels[i] = false;
|
||||
|
@ -567,14 +565,15 @@ extern struct TCommonSettings
|
|||
bool loadToMemory;
|
||||
|
||||
bool UseExtBIOS;
|
||||
char ARM9BIOS[256];
|
||||
char ARM7BIOS[256];
|
||||
char ARM9BIOS[MAX_PATH];
|
||||
char ARM7BIOS[MAX_PATH];
|
||||
bool SWIFromBIOS;
|
||||
bool PatchSWI3;
|
||||
|
||||
bool UseExtFirmware;
|
||||
bool UseExtFirmwareSettings;
|
||||
char Firmware[256];
|
||||
char ExtFirmwarePath[MAX_PATH];
|
||||
char ExtFirmwareUserSettingsPath[MAX_PATH];
|
||||
bool BootFromFirmware;
|
||||
FirmwareConfig fwConfig;
|
||||
|
||||
|
@ -614,10 +613,7 @@ extern struct TCommonSettings
|
|||
bool use_jit;
|
||||
u32 jit_max_block_size;
|
||||
|
||||
struct _Wifi {
|
||||
WifiCommInterfaceID mode;
|
||||
int infraBridgeAdapter;
|
||||
} wifi;
|
||||
int WifiBridgeDeviceID;
|
||||
|
||||
enum MicMode
|
||||
{
|
||||
|
|
|
@ -429,7 +429,7 @@ bool CommandLine::parse(int argc,char **argv)
|
|||
if(_bios_arm9) { CommonSettings.UseExtBIOS = true; strcpy(CommonSettings.ARM9BIOS,_bios_arm9); }
|
||||
if(_bios_arm7) { CommonSettings.UseExtBIOS = true; strcpy(CommonSettings.ARM7BIOS,_bios_arm7); }
|
||||
#ifndef HOST_WINDOWS
|
||||
if(_fw_path) { CommonSettings.UseExtFirmware = true; CommonSettings.UseExtFirmwareSettings = true; strcpy(CommonSettings.Firmware,_fw_path); }
|
||||
if(_fw_path) { CommonSettings.UseExtFirmware = true; CommonSettings.UseExtFirmwareSettings = true; strcpy(CommonSettings.ExtFirmwarePath,_fw_path); }
|
||||
#endif
|
||||
if(_fw_boot) CommonSettings.BootFromFirmware = true;
|
||||
if(_bios_swi) CommonSettings.SWIFromBIOS = true;
|
||||
|
|
|
@ -244,45 +244,38 @@ u32 CFIRMWARE::_decompress(const u8 *in, u8* &out)
|
|||
return (blockSize);
|
||||
}
|
||||
//================================================================================
|
||||
bool CFIRMWARE::load()
|
||||
bool CFIRMWARE::load(const char *firmwareFilePath)
|
||||
{
|
||||
if (!CommonSettings.UseExtFirmware)
|
||||
return false;
|
||||
if (strlen(CommonSettings.Firmware) == 0)
|
||||
return false;
|
||||
|
||||
size_t fileSize = 0;
|
||||
NDSFirmwareData newFirmwareData;
|
||||
NDSFirmwareData *newFirmwareData = new NDSFirmwareData;
|
||||
|
||||
bool isFirmwareFileRead = NDS_ReadFirmwareDataFromFile(CommonSettings.Firmware, &newFirmwareData, &fileSize, NULL, NULL);
|
||||
if (!isFirmwareFileRead)
|
||||
this->_isLoaded = NDS_ReadFirmwareDataFromFile(firmwareFilePath, newFirmwareData, &fileSize, NULL, NULL);
|
||||
if (!this->_isLoaded)
|
||||
{
|
||||
return false;
|
||||
return this->_isLoaded;
|
||||
}
|
||||
|
||||
this->_header = newFirmwareData.header;
|
||||
|
||||
this->_fwFilePath = firmwareFilePath;
|
||||
this->_header = newFirmwareData->header;
|
||||
|
||||
if (MMU.fw.size != fileSize) // reallocate
|
||||
mc_alloc(&MMU.fw, fileSize);
|
||||
|
||||
this->_userDataAddr = LE_TO_LOCAL_16(newFirmwareData.header.userSettingsOffset) * 8;
|
||||
this->_userDataAddr = LE_TO_LOCAL_16(newFirmwareData->header.userSettingsOffset) * 8;
|
||||
|
||||
// fix bad dump of firmware? (wrong DS type)
|
||||
// fix mario kart touch screen calibration
|
||||
if ( (newFirmwareData.header.key.unused != 0xFFFF) && (newFirmwareData.header.key.consoleType == NDS_CONSOLE_TYPE_IQUE_LITE) )
|
||||
if ( (newFirmwareData->header.key.unused != 0xFFFF) && (newFirmwareData->header.key.consoleType == NDS_CONSOLE_TYPE_IQUE_LITE) )
|
||||
{
|
||||
newFirmwareData.header.key.consoleType = NDS_CONSOLE_TYPE_FAT;
|
||||
newFirmwareData.header.key.unused = 0xFFFF;
|
||||
newFirmwareData->header.key.consoleType = NDS_CONSOLE_TYPE_FAT;
|
||||
newFirmwareData->header.key.unused = 0xFFFF;
|
||||
}
|
||||
|
||||
memcpy(&MMU.fw.data, &newFirmwareData, fileSize);
|
||||
memcpy(&MMU.fw.data, newFirmwareData, fileSize);
|
||||
delete newFirmwareData;
|
||||
|
||||
// Generate the path for the external firmware config file.
|
||||
std::string extFilePath = CFIRMWARE::GetExternalFilePath();
|
||||
strncpy(MMU.fw.userfile, extFilePath.c_str(), MAX_PATH);
|
||||
|
||||
this->_isLoaded = true;
|
||||
return true;
|
||||
return this->_isLoaded;
|
||||
}
|
||||
|
||||
bool CFIRMWARE::unpack()
|
||||
|
@ -299,8 +292,8 @@ bool CFIRMWARE::unpack()
|
|||
return false;
|
||||
}
|
||||
|
||||
NDSFirmwareData workingFirmwareData;
|
||||
memcpy(&workingFirmwareData, &MMU.fw.data, size);
|
||||
NDSFirmwareData *workingFirmwareData = new NDSFirmwareData;
|
||||
memcpy(workingFirmwareData, &MMU.fw.data, sizeof(NDSFirmwareData));
|
||||
|
||||
shift1 = ((this->_header.shift >> 0) & 0x07);
|
||||
shift2 = ((this->_header.shift >> 3) & 0x07);
|
||||
|
@ -325,9 +318,9 @@ bool CFIRMWARE::unpack()
|
|||
enc.applyKeycode((u32*)&data[0x18]);
|
||||
#else
|
||||
// fix touch coords
|
||||
workingFirmwareData.header.key.timestamp = 0;
|
||||
workingFirmwareData.header.key.consoleType = NDS_CONSOLE_TYPE_FAT;
|
||||
workingFirmwareData.header.key.unused = 0xFFFF;
|
||||
workingFirmwareData->header.key.timestamp = 0;
|
||||
workingFirmwareData->header.key.consoleType = NDS_CONSOLE_TYPE_FAT;
|
||||
workingFirmwareData->header.key.unused = 0xFFFF;
|
||||
#endif
|
||||
|
||||
enc.init(this->_header.identifierValue, 2, 0xC);
|
||||
|
@ -337,13 +330,13 @@ bool CFIRMWARE::unpack()
|
|||
u32 arm9Size = 0;
|
||||
u32 arm7Size = 0;
|
||||
|
||||
arm9Size = this->_decrypt((u8 *)&workingFirmwareData + part1addr, tmp_data9);
|
||||
arm9Size = this->_decrypt(&workingFirmwareData->_raw[part1addr], tmp_data9);
|
||||
if (tmp_data9 == NULL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
arm7Size = this->_decrypt((u8 *)&workingFirmwareData + part2addr, tmp_data7);
|
||||
arm7Size = this->_decrypt(&workingFirmwareData->_raw[part2addr], tmp_data7);
|
||||
if (tmp_data7 == NULL)
|
||||
{
|
||||
delete [] tmp_data9;
|
||||
|
@ -381,10 +374,10 @@ bool CFIRMWARE::unpack()
|
|||
delete [] tmp_data9;
|
||||
tmp_data9 = NULL;
|
||||
|
||||
const bool isPatched = (workingFirmwareData._raw[0x17C] != 0xFF);
|
||||
const bool isPatched = (workingFirmwareData->_raw[0x17C] != 0xFF);
|
||||
|
||||
INFO("Firmware:\n");
|
||||
INFO("- path: %s\n", CommonSettings.Firmware);
|
||||
INFO("- path: %s\n", this->_fwFilePath.c_str());
|
||||
INFO("- size: %i bytes (%i Mbit)\n", size, size/1024/8);
|
||||
INFO("- CRC : 0x%04X\n", this->_header.part12_boot_crc16);
|
||||
INFO("- header: \n");
|
||||
|
@ -404,10 +397,10 @@ bool CFIRMWARE::unpack()
|
|||
if (isPatched)
|
||||
{
|
||||
u32 patch_offset = 0x3FC80;
|
||||
if (workingFirmwareData._raw[0x17C] > 1)
|
||||
if (workingFirmwareData->_raw[0x17C] > 1)
|
||||
patch_offset = 0x3F680;
|
||||
|
||||
memcpy(&this->_header, &workingFirmwareData._raw[patch_offset], sizeof(this->_header));
|
||||
memcpy(&this->_header, &workingFirmwareData->_raw[patch_offset], sizeof(this->_header));
|
||||
|
||||
shift1 = ((this->_header.shift >> 0) & 0x07);
|
||||
shift2 = ((this->_header.shift >> 3) & 0x07);
|
||||
|
@ -423,13 +416,13 @@ bool CFIRMWARE::unpack()
|
|||
ARM9bootAddr = part1ram;
|
||||
ARM7bootAddr = part2ram;
|
||||
|
||||
arm9Size = this->_decompress(&workingFirmwareData._raw[part1addr], tmp_data9);
|
||||
arm9Size = this->_decompress(&workingFirmwareData->_raw[part1addr], tmp_data9);
|
||||
if (tmp_data9 == NULL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
arm7Size = this->_decompress(&workingFirmwareData._raw[part2addr], tmp_data7);
|
||||
arm7Size = this->_decompress(&workingFirmwareData->_raw[part2addr], tmp_data7);
|
||||
if (tmp_data7 == NULL)
|
||||
{
|
||||
delete [] tmp_data9;
|
||||
|
@ -463,18 +456,20 @@ bool CFIRMWARE::unpack()
|
|||
INFO(" * ARM7 unpacked size: 0x%08X (%i) bytes\n", arm7Size, arm7Size);
|
||||
}
|
||||
|
||||
memcpy(&MMU.fw.data, &workingFirmwareData, size);
|
||||
MMU.fw.fp = NULL;
|
||||
|
||||
memcpy(&MMU.fw.data, workingFirmwareData, size);
|
||||
delete workingFirmwareData;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CFIRMWARE::loadSettings()
|
||||
{
|
||||
if (!CommonSettings.UseExtFirmware) return false;
|
||||
if (!CommonSettings.UseExtFirmwareSettings) return false;
|
||||
|
||||
FILE *fp = fopen(MMU.fw.userfile, "rb");
|
||||
bool CFIRMWARE::loadSettings(const char *firmwareUserSettingsFilePath)
|
||||
{
|
||||
if ( (firmwareUserSettingsFilePath == NULL) || (strlen(firmwareUserSettingsFilePath) == 0) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
FILE *fp = fopen(firmwareUserSettingsFilePath, "rb");
|
||||
if (fp)
|
||||
{
|
||||
fseek(fp, 0, SEEK_END);
|
||||
|
@ -494,7 +489,7 @@ bool CFIRMWARE::loadSettings()
|
|||
memcpy(&MMU.fw.data.userSettings1, usr, sizeof(FWUserSettings));
|
||||
memcpy(&MMU.fw.data.wifiInfo, usr + sizeof(FWUserSettings), WIFI_SETTINGS_SIZE);
|
||||
memcpy(&MMU.fw.data.wifiAP1, usr + sizeof(FWUserSettings) + WIFI_SETTINGS_SIZE, sizeof(FWAccessPointSettings));
|
||||
printf("Loaded user settings from %s\n", MMU.fw.userfile);
|
||||
printf("Loaded user settings from %s\n", firmwareUserSettingsFilePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -503,7 +498,7 @@ bool CFIRMWARE::loadSettings()
|
|||
}
|
||||
}
|
||||
else
|
||||
printf("Failed loading firmware config from %s (wrong file size)\n", MMU.fw.userfile);
|
||||
printf("Failed loading firmware config from %s (wrong file size)\n", firmwareUserSettingsFilePath);
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
|
@ -511,10 +506,12 @@ bool CFIRMWARE::loadSettings()
|
|||
return false;
|
||||
}
|
||||
|
||||
bool CFIRMWARE::saveSettings()
|
||||
{
|
||||
if (!CommonSettings.UseExtFirmware) return false;
|
||||
if (!CommonSettings.UseExtFirmwareSettings) return false;
|
||||
bool CFIRMWARE::saveSettings(const char *firmwareUserSettingsFilePath)
|
||||
{
|
||||
if ( (firmwareUserSettingsFilePath == NULL) || (strlen(firmwareUserSettingsFilePath) == 0) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
FWUserSettings &userSettings0 = MMU.fw.data.userSettings0;
|
||||
FWUserSettings &userSettings1 = MMU.fw.data.userSettings1;
|
||||
|
@ -529,7 +526,7 @@ bool CFIRMWARE::saveSettings()
|
|||
}
|
||||
|
||||
printf("Firmware: saving config");
|
||||
FILE *fp = fopen(MMU.fw.userfile, "wb");
|
||||
FILE *fp = fopen(firmwareUserSettingsFilePath, "wb");
|
||||
if (fp)
|
||||
{
|
||||
u8 *usr = new u8[DFC_FILE_SIZE];
|
||||
|
@ -555,9 +552,9 @@ bool CFIRMWARE::saveSettings()
|
|||
return true;
|
||||
}
|
||||
|
||||
std::string CFIRMWARE::GetExternalFilePath()
|
||||
std::string CFIRMWARE::GetUserSettingsFilePath(const char *firmwareFilePath)
|
||||
{
|
||||
std::string fwPath = CommonSettings.Firmware;
|
||||
std::string fwPath = firmwareFilePath;
|
||||
std::string fwFileName = Path::GetFileNameFromPathWithoutExt(fwPath);
|
||||
|
||||
std::string configPath = path.getpath(path.BATTERY);
|
||||
|
@ -743,6 +740,13 @@ void NDS_GetDefaultFirmwareConfig(FirmwareConfig &outConfig)
|
|||
outConfig.MACAddress[4] = 0x34;
|
||||
outConfig.MACAddress[5] = 0x56;
|
||||
|
||||
outConfig.WFCUserID[0] = 0x00;
|
||||
outConfig.WFCUserID[1] = 0x00;
|
||||
outConfig.WFCUserID[2] = 0x00;
|
||||
outConfig.WFCUserID[3] = 0x00;
|
||||
outConfig.WFCUserID[4] = 0x00;
|
||||
outConfig.WFCUserID[5] = 0x00;
|
||||
|
||||
// default touchscreen calibration
|
||||
|
||||
//ANCIENT DESMUME VALUES
|
||||
|
@ -772,6 +776,31 @@ void NDS_GetDefaultFirmwareConfig(FirmwareConfig &outConfig)
|
|||
outConfig.subnetMask_AP3 = 24;
|
||||
}
|
||||
|
||||
void NDS_GetCurrentWFCUserID(u8 *outMAC, u8 *outUserID)
|
||||
{
|
||||
const NDSFirmwareData &fw = MMU.fw.data;
|
||||
|
||||
if (outMAC != NULL)
|
||||
{
|
||||
outMAC[0] = fw.wifiInfo.MACAddr[0];
|
||||
outMAC[1] = fw.wifiInfo.MACAddr[1];
|
||||
outMAC[2] = fw.wifiInfo.MACAddr[2];
|
||||
outMAC[3] = fw.wifiInfo.MACAddr[3];
|
||||
outMAC[4] = fw.wifiInfo.MACAddr[4];
|
||||
outMAC[5] = fw.wifiInfo.MACAddr[5];
|
||||
}
|
||||
|
||||
if (outUserID != NULL)
|
||||
{
|
||||
outUserID[0] = fw.wifiAP1.wfcUserID[0];
|
||||
outUserID[1] = fw.wifiAP1.wfcUserID[1];
|
||||
outUserID[2] = fw.wifiAP1.wfcUserID[2];
|
||||
outUserID[3] = fw.wifiAP1.wfcUserID[3];
|
||||
outUserID[4] = fw.wifiAP1.wfcUserID[4];
|
||||
outUserID[5] = fw.wifiAP1.wfcUserID[5];
|
||||
}
|
||||
}
|
||||
|
||||
void NDS_InitFirmwareWithConfig(const FirmwareConfig &inConfig)
|
||||
{
|
||||
// Create the firmware header
|
||||
|
@ -902,6 +931,14 @@ void NDS_InitFirmwareWithConfig(const FirmwareConfig &inConfig)
|
|||
// Wifi settings CRC16
|
||||
fw.wifiInfo.crc16 = calc_CRC16(0, &fw.wifiInfo.length, fw.wifiInfo.length);
|
||||
|
||||
// WFC User ID, uniquely located on the first WiFi profile and no other
|
||||
fw.wifiAP1.wfcUserID[0] = inConfig.WFCUserID[0];
|
||||
fw.wifiAP1.wfcUserID[1] = inConfig.WFCUserID[1];
|
||||
fw.wifiAP1.wfcUserID[2] = inConfig.WFCUserID[2];
|
||||
fw.wifiAP1.wfcUserID[3] = inConfig.WFCUserID[3];
|
||||
fw.wifiAP1.wfcUserID[4] = inConfig.WFCUserID[4];
|
||||
fw.wifiAP1.wfcUserID[5] = inConfig.WFCUserID[5];
|
||||
|
||||
// WiFi profiles
|
||||
if ( ((*(u32 *)inConfig.ipv4Address_AP1 != 0) && (*(u32 *)inConfig.ipv4Gateway_AP1 != 0) && (inConfig.subnetMask_AP1 != 0)) ||
|
||||
(*(u32 *)inConfig.ipv4PrimaryDNS_AP1 != 0) ||
|
||||
|
@ -1009,27 +1046,17 @@ void NDS_InitFirmwareWithConfig(const FirmwareConfig &inConfig)
|
|||
fw.wifiAP2.crc16 = (u16)calc_CRC16(0, &fw.wifiAP2, 254);
|
||||
fw.wifiAP3.crc16 = (u16)calc_CRC16(0, &fw.wifiAP3, 254);
|
||||
|
||||
memcpy(&CommonSettings.fwConfig, &inConfig, sizeof(FirmwareConfig));
|
||||
}
|
||||
|
||||
void NDS_OverrideFirmwareMAC(const u8 inMAC[6])
|
||||
{
|
||||
NDSFirmwareData &fw = MMU.fw.data;
|
||||
fw.wifiInfo.MACAddr[0] = inMAC[0];
|
||||
fw.wifiInfo.MACAddr[1] = inMAC[1];
|
||||
fw.wifiInfo.MACAddr[2] = inMAC[2];
|
||||
fw.wifiInfo.MACAddr[3] = inMAC[3];
|
||||
fw.wifiInfo.MACAddr[4] = inMAC[4];
|
||||
fw.wifiInfo.MACAddr[5] = inMAC[5];
|
||||
|
||||
fw.wifiInfo.crc16 = calc_CRC16(0, &fw.wifiInfo.length, fw.wifiInfo.length);
|
||||
if (&inConfig != &CommonSettings.fwConfig)
|
||||
{
|
||||
memcpy(&CommonSettings.fwConfig, &inConfig, sizeof(FirmwareConfig));
|
||||
}
|
||||
}
|
||||
|
||||
bool NDS_ReadFirmwareDataFromFile(const char *fileName, NDSFirmwareData *outFirmwareData, size_t *outFileSize, int *outConsoleType, u8 *outMACAddr)
|
||||
{
|
||||
bool result = false;
|
||||
|
||||
if (fileName == NULL)
|
||||
if ( (fileName == NULL) || (strlen(fileName) == 0) )
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
@ -1156,15 +1183,9 @@ void fw_reset_com(fw_memory_chip *mc)
|
|||
{
|
||||
if(mc->com == FW_CMD_PAGEWRITE)
|
||||
{
|
||||
if (mc->fp)
|
||||
if (mc->isFirmware && CommonSettings.UseExtFirmware && CommonSettings.UseExtFirmwareSettings && (extFirmwareObj != NULL))
|
||||
{
|
||||
fseek(mc->fp, 0, SEEK_SET);
|
||||
fwrite(mc->data._raw, mc->size, 1, mc->fp);
|
||||
}
|
||||
|
||||
if (mc->isFirmware && CommonSettings.UseExtFirmware && CommonSettings.UseExtFirmwareSettings && firmware)
|
||||
{
|
||||
firmware->saveSettings();
|
||||
extFirmwareObj->saveSettings(CommonSettings.ExtFirmwareUserSettingsPath);
|
||||
}
|
||||
mc->write_enable = FALSE;
|
||||
}
|
||||
|
@ -1196,6 +1217,11 @@ u8 fw_transfer(fw_memory_chip *mc, u8 data)
|
|||
case FW_CMD_PAGEWRITE:
|
||||
if(mc->addr < mc->size)
|
||||
{
|
||||
if ( (mc->addr >= offsetof(NDSFirmwareData, wifiAP1.wfcUserID[0])) && (mc->addr <= offsetof(NDSFirmwareData, wifiAP1.wfcUserID[5])) )
|
||||
{
|
||||
CommonSettings.fwConfig.WFCUserID[mc->addr - offsetof(NDSFirmwareData, wifiAP1.wfcUserID[0])] = data;
|
||||
}
|
||||
|
||||
mc->data._raw[mc->addr] = data; /* write byte */
|
||||
mc->addr++;
|
||||
}
|
||||
|
|
|
@ -61,6 +61,7 @@ struct FirmwareConfig
|
|||
u8 tscPixel_y2;
|
||||
|
||||
u8 MACAddress[6];
|
||||
u8 WFCUserID[6];
|
||||
|
||||
u8 ipv4Address_AP1[4];
|
||||
u8 ipv4Gateway_AP1[4];
|
||||
|
@ -402,8 +403,9 @@ class CFIRMWARE
|
|||
{
|
||||
private:
|
||||
FWHeader _header;
|
||||
bool _isLoaded;
|
||||
u32 _userDataAddr;
|
||||
std::string _fwFilePath;
|
||||
bool _isLoaded;
|
||||
u32 _userDataAddr;
|
||||
|
||||
u16 _getBootCodeCRC16(const u8 *arm9Data, const u32 arm9Size, const u8 *arm7Data, const u32 arm7Size);
|
||||
u32 _decrypt(const u8 *in, u8* &out);
|
||||
|
@ -412,22 +414,22 @@ private:
|
|||
public:
|
||||
CFIRMWARE(): _userDataAddr(0x3FE00), _isLoaded(false) {};
|
||||
|
||||
bool load();
|
||||
bool load(const char *firmwareFilePath);
|
||||
bool unpack();
|
||||
bool loadSettings();
|
||||
bool saveSettings();
|
||||
|
||||
static std::string GetExternalFilePath();
|
||||
bool loadSettings(const char *firmwareUserSettingsFilePath);
|
||||
bool saveSettings(const char *firmwareUserSettingsFilePath);
|
||||
|
||||
bool loaded();
|
||||
void* getTouchCalibrate();
|
||||
void* getTouchCalibrate();
|
||||
|
||||
static std::string GetUserSettingsFilePath(const char *firmwareFilePath);
|
||||
};
|
||||
|
||||
int copy_firmware_user_data( u8 *dest_buffer, const u8 *fw_data);
|
||||
|
||||
void NDS_GetDefaultFirmwareConfig(FirmwareConfig &outConfig);
|
||||
void NDS_GetCurrentWFCUserID(u8 *outMAC, u8 *outUserID);
|
||||
void NDS_InitFirmwareWithConfig(const FirmwareConfig &inConfig);
|
||||
void NDS_OverrideFirmwareMAC(const u8 inMAC[6]);
|
||||
bool NDS_ReadFirmwareDataFromFile(const char *fileName, NDSFirmwareData *outFirmwareData, size_t *outFileSize, int *outConsoleType, u8 *outMACAddr);
|
||||
|
||||
struct fw_memory_chip
|
||||
|
@ -444,12 +446,9 @@ struct fw_memory_chip
|
|||
u32 size; //memory size
|
||||
BOOL writeable_buffer; //is "data" writeable ?
|
||||
int type; //type of Memory
|
||||
char *filename;
|
||||
FILE *fp;
|
||||
|
||||
// needs only for firmware
|
||||
bool isFirmware;
|
||||
char userfile[MAX_PATH];
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -72,6 +72,9 @@ ClientExecutionControl::ClientExecutionControl()
|
|||
_settingsPending.cpuEngineID = CPUEmulationEngineID_Interpreter;
|
||||
_settingsPending.JITMaxBlockSize = 12;
|
||||
_settingsPending.slot1DeviceType = NDS_SLOT1_RETAIL_AUTO;
|
||||
|
||||
memset(&_settingsPending.fwConfig, 0, sizeof(FirmwareConfig));
|
||||
|
||||
_settingsPending.filePathARM9BIOS = std::string();
|
||||
_settingsPending.filePathARM7BIOS = std::string();
|
||||
_settingsPending.filePathFirmware = std::string();
|
||||
|
@ -352,7 +355,7 @@ void ClientExecutionControl::SetFirmwareImagePath(const char *filePath)
|
|||
}
|
||||
else
|
||||
{
|
||||
this->_settingsPending.filePathFirmware = std::string(filePath, sizeof(CommonSettings.Firmware));
|
||||
this->_settingsPending.filePathFirmware = std::string(filePath, sizeof(CommonSettings.ExtFirmwarePath));
|
||||
}
|
||||
|
||||
this->_newSettingsPendingOnReset = true;
|
||||
|
@ -493,6 +496,29 @@ void ClientExecutionControl::SetEnableBIOSPatchDelayLoop(bool enable)
|
|||
pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec);
|
||||
}
|
||||
|
||||
FirmwareConfig ClientExecutionControl::GetFirmwareConfig()
|
||||
{
|
||||
pthread_mutex_lock(&this->_mutexSettingsPendingOnReset);
|
||||
const FirmwareConfig outConfig = this->_settingsPending.fwConfig;
|
||||
pthread_mutex_unlock(&this->_mutexSettingsPendingOnReset);
|
||||
|
||||
return outConfig;
|
||||
}
|
||||
|
||||
FirmwareConfig ClientExecutionControl::GetFirmwareConfigApplied()
|
||||
{
|
||||
return this->_settingsApplied.fwConfig;
|
||||
}
|
||||
|
||||
void ClientExecutionControl::SetFirmwareConfig(const FirmwareConfig &inConfig)
|
||||
{
|
||||
pthread_mutex_lock(&this->_mutexSettingsPendingOnReset);
|
||||
this->_settingsPending.fwConfig = inConfig;
|
||||
|
||||
this->_newSettingsPendingOnReset = true;
|
||||
pthread_mutex_unlock(&this->_mutexSettingsPendingOnReset);
|
||||
}
|
||||
|
||||
bool ClientExecutionControl::GetEnableExternalFirmware()
|
||||
{
|
||||
pthread_mutex_lock(&this->_mutexSettingsPendingOnReset);
|
||||
|
@ -959,6 +985,8 @@ void ClientExecutionControl::ApplySettingsOnReset()
|
|||
this->_settingsApplied.enableExternalFirmware = this->_settingsPending.enableExternalFirmware;
|
||||
this->_settingsApplied.enableFirmwareBoot = this->_settingsPending.enableFirmwareBoot;
|
||||
|
||||
this->_settingsApplied.fwConfig = this->_settingsPending.fwConfig;
|
||||
|
||||
this->_settingsApplied.wifiEmulationMode = this->_settingsPending.wifiEmulationMode;
|
||||
this->_settingsApplied.wifiBridgeDeviceIndex = this->_settingsPending.wifiBridgeDeviceIndex;
|
||||
|
||||
|
@ -980,10 +1008,10 @@ void ClientExecutionControl::ApplySettingsOnReset()
|
|||
CommonSettings.jit_max_block_size = this->_settingsApplied.JITMaxBlockSize;
|
||||
CommonSettings.UseExtBIOS = this->_settingsApplied.enableExternalBIOS;
|
||||
CommonSettings.UseExtFirmware = this->_settingsApplied.enableExternalFirmware;
|
||||
//CommonSettings.UseExtFirmwareSettings = this->_settingsApplied.enableExternalFirmware;
|
||||
CommonSettings.UseExtFirmwareSettings = false;
|
||||
CommonSettings.UseExtFirmwareSettings = this->_settingsApplied.enableExternalFirmware;
|
||||
CommonSettings.BootFromFirmware = this->_settingsApplied.enableFirmwareBoot;
|
||||
CommonSettings.wifi.infraBridgeAdapter = this->_settingsApplied.wifiBridgeDeviceIndex;
|
||||
CommonSettings.WifiBridgeDeviceID = this->_settingsApplied.wifiBridgeDeviceIndex;
|
||||
CommonSettings.fwConfig = this->_settingsApplied.fwConfig;
|
||||
|
||||
wifiHandler->SetEmulationLevel((WifiEmulationLevel)this->_settingsApplied.wifiEmulationMode);
|
||||
wifiHandler->SetBridgeDeviceIndex(this->_settingsApplied.wifiBridgeDeviceIndex);
|
||||
|
@ -1008,11 +1036,11 @@ void ClientExecutionControl::ApplySettingsOnReset()
|
|||
|
||||
if (this->_settingsApplied.filePathFirmware.length() == 0)
|
||||
{
|
||||
memset(CommonSettings.Firmware, 0, sizeof(CommonSettings.Firmware));
|
||||
memset(CommonSettings.ExtFirmwarePath, 0, sizeof(CommonSettings.ExtFirmwarePath));
|
||||
}
|
||||
else
|
||||
{
|
||||
strlcpy(CommonSettings.Firmware, this->_settingsApplied.filePathFirmware.c_str(), sizeof(CommonSettings.Firmware));
|
||||
strlcpy(CommonSettings.ExtFirmwarePath, this->_settingsApplied.filePathFirmware.c_str(), sizeof(CommonSettings.ExtFirmwarePath));
|
||||
}
|
||||
|
||||
if (this->_settingsApplied.filePathSlot1R4.length() > 0)
|
||||
|
|
|
@ -81,6 +81,8 @@ struct ClientExecutionControlSettings
|
|||
std::string filePathFirmware;
|
||||
std::string filePathSlot1R4;
|
||||
|
||||
FirmwareConfig fwConfig;
|
||||
|
||||
std::string cpuEmulationEngineName;
|
||||
std::string slot1DeviceName;
|
||||
|
||||
|
@ -292,6 +294,10 @@ public:
|
|||
bool GetEnableBIOSPatchDelayLoop();
|
||||
void SetEnableBIOSPatchDelayLoop(bool enable);
|
||||
|
||||
FirmwareConfig GetFirmwareConfig();
|
||||
FirmwareConfig GetFirmwareConfigApplied();
|
||||
void SetFirmwareConfig(const FirmwareConfig &inConfig);
|
||||
|
||||
bool GetEnableExternalFirmware();
|
||||
void SetEnableExternalFirmware(bool enable);
|
||||
|
||||
|
|
|
@ -80,8 +80,14 @@
|
|||
<true/>
|
||||
<key>EmulationSlot1_DeviceType</key>
|
||||
<integer>1</integer>
|
||||
<key>FirmwareConfig_MACAddress</key>
|
||||
<key>FirmwareConfig_AddressSelection</key>
|
||||
<integer>0</integer>
|
||||
<key>FirmwareConfig_FirmwareMACAddress</key>
|
||||
<integer>0</integer>
|
||||
<key>FirmwareConfig_CustomMACAddress</key>
|
||||
<integer>0</integer>
|
||||
<key>FirmwareConfig_WFCUserID</key>
|
||||
<dict/>
|
||||
<key>FirmwareConfig_IPv4Address_AP1_1</key>
|
||||
<integer>0</integer>
|
||||
<key>FirmwareConfig_IPv4Address_AP1_2</key>
|
||||
|
@ -934,13 +940,9 @@
|
|||
<integer>1</integer>
|
||||
<key>Wifi_EmulationMode</key>
|
||||
<integer>0</integer>
|
||||
<key>Wifi_AddressSelection</key>
|
||||
<integer>0</integer>
|
||||
<key>Wifi_BridgeDeviceSelectionIndex</key>
|
||||
<integer>0</integer>
|
||||
<key>Wifi_BridgeDeviceSelectionName</key>
|
||||
<string></string>
|
||||
<key>Wifi_MyMACAddress</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
@ -749,7 +749,7 @@ volatile bool execute = true;
|
|||
}
|
||||
else
|
||||
{
|
||||
[self setFirmwareMACAddressSelectionString:[NSString stringWithFormat:@"Firmware %@", [[self cdsFirmware] MACAddressString]]];
|
||||
[self setFirmwareMACAddressSelectionString:[NSString stringWithFormat:@"Firmware %@", [[self cdsFirmware] firmwareMACAddressString]]];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -775,7 +775,7 @@ volatile bool execute = true;
|
|||
|
||||
- (void) generateFirmwareMACAddress
|
||||
{
|
||||
[[self cdsFirmware] generateRandomMACAddress];
|
||||
[[self cdsFirmware] generateRandomFirmwareMACAddress];
|
||||
[self updateFirmwareMACAddressString];
|
||||
}
|
||||
|
||||
|
@ -854,6 +854,12 @@ volatile bool execute = true;
|
|||
{
|
||||
[self setCoreState:ExecutionBehavior_Pause];
|
||||
|
||||
if (![self emuFlagUseExternalFirmware])
|
||||
{
|
||||
[[self cdsFirmware] writeUserDefaultWFCUserID];
|
||||
[[self cdsFirmware] updateFirmwareConfigSessionValues];
|
||||
}
|
||||
|
||||
pthread_mutex_lock(&threadParam.mutexThreadExecute);
|
||||
execControl->ApplySettingsOnReset();
|
||||
NDS_Reset();
|
||||
|
|
|
@ -19,8 +19,30 @@
|
|||
#import <Cocoa/Cocoa.h>
|
||||
#include <pthread.h>
|
||||
|
||||
class ClientExecutionControl;
|
||||
class FirmwareConfigInterface;
|
||||
struct FirmwareConfig;
|
||||
|
||||
enum FirmwareCfgAPID
|
||||
{
|
||||
FirmwareCfgAPID_AP1 = 0,
|
||||
FirmwareCfgAPID_AP2 = 1,
|
||||
FirmwareCfgAPID_AP3 = 2
|
||||
};
|
||||
|
||||
enum FirmwareCfgMACAddrSetID
|
||||
{
|
||||
FirmwareCfgMACAddrSetID_Firmware = 0,
|
||||
FirmwareCfgMACAddrSetID_Custom1 = 1,
|
||||
FirmwareCfgMACAddrSetID_Custom2 = 2,
|
||||
FirmwareCfgMACAddrSetID_Custom3 = 3,
|
||||
FirmwareCfgMACAddrSetID_Custom4 = 4,
|
||||
FirmwareCfgMACAddrSetID_Custom5 = 5,
|
||||
FirmwareCfgMACAddrSetID_Custom6 = 6,
|
||||
FirmwareCfgMACAddrSetID_Custom7 = 7,
|
||||
FirmwareCfgMACAddrSetID_Custom8 = 8
|
||||
};
|
||||
|
||||
/********************************************************************************************
|
||||
CocoaDSFirmware - OBJECTIVE-C CLASS
|
||||
|
||||
|
@ -31,89 +53,200 @@ struct FirmwareConfig;
|
|||
********************************************************************************************/
|
||||
@interface CocoaDSFirmware : NSObject
|
||||
{
|
||||
FirmwareConfig *_internalData;
|
||||
ClientExecutionControl *execControl;
|
||||
FirmwareConfigInterface *_fwConfigInterface;
|
||||
FirmwareConfig *_appliedFWConfig;
|
||||
NSUInteger _birth_year;
|
||||
|
||||
NSString *MACAddressString;
|
||||
NSString *firmwareMACAddressString;
|
||||
NSString *firmwareMACAddressPendingString;
|
||||
NSString *customMACAddress1String;
|
||||
NSString *customMACAddress2String;
|
||||
NSString *customMACAddress3String;
|
||||
NSString *customMACAddress4String;
|
||||
|
||||
NSString *subnetMaskString_AP1;
|
||||
NSString *subnetMaskString_AP2;
|
||||
NSString *subnetMaskString_AP3;
|
||||
|
||||
pthread_mutex_t mutex;
|
||||
}
|
||||
|
||||
@property (assign, nonatomic) ClientExecutionControl *execControl;
|
||||
|
||||
// WiFi Info
|
||||
@property (assign) uint32_t MACAddressValue;
|
||||
@property (retain) NSString *MACAddressString;
|
||||
@property (assign, nonatomic) NSInteger addressSelection;
|
||||
@property (assign, nonatomic) uint32_t firmwareMACAddressPendingValue;
|
||||
@property (readonly, nonatomic) uint32_t firmwareMACAddressValue;
|
||||
@property (retain) NSString *firmwareMACAddressPendingString;
|
||||
@property (retain) NSString *firmwareMACAddressString;
|
||||
@property (assign, nonatomic) uint32_t customMACAddressValue;
|
||||
@property (retain) NSString *customMACAddress1String;
|
||||
@property (retain) NSString *customMACAddress2String;
|
||||
@property (retain) NSString *customMACAddress3String;
|
||||
@property (retain) NSString *customMACAddress4String;
|
||||
|
||||
// Access Point Settings
|
||||
@property (assign) NSInteger ipv4Address_AP1_1;
|
||||
@property (assign) NSInteger ipv4Address_AP1_2;
|
||||
@property (assign) NSInteger ipv4Address_AP1_3;
|
||||
@property (assign) NSInteger ipv4Address_AP1_4;
|
||||
@property (assign) NSInteger ipv4Gateway_AP1_1;
|
||||
@property (assign) NSInteger ipv4Gateway_AP1_2;
|
||||
@property (assign) NSInteger ipv4Gateway_AP1_3;
|
||||
@property (assign) NSInteger ipv4Gateway_AP1_4;
|
||||
@property (assign) NSInteger ipv4PrimaryDNS_AP1_1;
|
||||
@property (assign) NSInteger ipv4PrimaryDNS_AP1_2;
|
||||
@property (assign) NSInteger ipv4PrimaryDNS_AP1_3;
|
||||
@property (assign) NSInteger ipv4PrimaryDNS_AP1_4;
|
||||
@property (assign) NSInteger ipv4SecondaryDNS_AP1_1;
|
||||
@property (assign) NSInteger ipv4SecondaryDNS_AP1_2;
|
||||
@property (assign) NSInteger ipv4SecondaryDNS_AP1_3;
|
||||
@property (assign) NSInteger ipv4SecondaryDNS_AP1_4;
|
||||
@property (assign) NSInteger subnetMask_AP1;
|
||||
@property (assign, nonatomic) NSInteger ipv4Address_AP1_1;
|
||||
@property (assign, nonatomic) NSInteger ipv4Address_AP1_2;
|
||||
@property (assign, nonatomic) NSInteger ipv4Address_AP1_3;
|
||||
@property (assign, nonatomic) NSInteger ipv4Address_AP1_4;
|
||||
@property (assign, nonatomic) NSInteger ipv4Gateway_AP1_1;
|
||||
@property (assign, nonatomic) NSInteger ipv4Gateway_AP1_2;
|
||||
@property (assign, nonatomic) NSInteger ipv4Gateway_AP1_3;
|
||||
@property (assign, nonatomic) NSInteger ipv4Gateway_AP1_4;
|
||||
@property (assign, nonatomic) NSInteger ipv4PrimaryDNS_AP1_1;
|
||||
@property (assign, nonatomic) NSInteger ipv4PrimaryDNS_AP1_2;
|
||||
@property (assign, nonatomic) NSInteger ipv4PrimaryDNS_AP1_3;
|
||||
@property (assign, nonatomic) NSInteger ipv4PrimaryDNS_AP1_4;
|
||||
@property (assign, nonatomic) NSInteger ipv4SecondaryDNS_AP1_1;
|
||||
@property (assign, nonatomic) NSInteger ipv4SecondaryDNS_AP1_2;
|
||||
@property (assign, nonatomic) NSInteger ipv4SecondaryDNS_AP1_3;
|
||||
@property (assign, nonatomic) NSInteger ipv4SecondaryDNS_AP1_4;
|
||||
@property (assign, nonatomic) NSInteger subnetMask_AP1;
|
||||
@property (retain) NSString *subnetMaskString_AP1;
|
||||
|
||||
@property (assign) NSInteger ipv4Address_AP2_1;
|
||||
@property (assign) NSInteger ipv4Address_AP2_2;
|
||||
@property (assign) NSInteger ipv4Address_AP2_3;
|
||||
@property (assign) NSInteger ipv4Address_AP2_4;
|
||||
@property (assign) NSInteger ipv4Gateway_AP2_1;
|
||||
@property (assign) NSInteger ipv4Gateway_AP2_2;
|
||||
@property (assign) NSInteger ipv4Gateway_AP2_3;
|
||||
@property (assign) NSInteger ipv4Gateway_AP2_4;
|
||||
@property (assign) NSInteger ipv4PrimaryDNS_AP2_1;
|
||||
@property (assign) NSInteger ipv4PrimaryDNS_AP2_2;
|
||||
@property (assign) NSInteger ipv4PrimaryDNS_AP2_3;
|
||||
@property (assign) NSInteger ipv4PrimaryDNS_AP2_4;
|
||||
@property (assign) NSInteger ipv4SecondaryDNS_AP2_1;
|
||||
@property (assign) NSInteger ipv4SecondaryDNS_AP2_2;
|
||||
@property (assign) NSInteger ipv4SecondaryDNS_AP2_3;
|
||||
@property (assign) NSInteger ipv4SecondaryDNS_AP2_4;
|
||||
@property (assign) NSInteger subnetMask_AP2;
|
||||
@property (assign, nonatomic) NSInteger ipv4Address_AP2_1;
|
||||
@property (assign, nonatomic) NSInteger ipv4Address_AP2_2;
|
||||
@property (assign, nonatomic) NSInteger ipv4Address_AP2_3;
|
||||
@property (assign, nonatomic) NSInteger ipv4Address_AP2_4;
|
||||
@property (assign, nonatomic) NSInteger ipv4Gateway_AP2_1;
|
||||
@property (assign, nonatomic) NSInteger ipv4Gateway_AP2_2;
|
||||
@property (assign, nonatomic) NSInteger ipv4Gateway_AP2_3;
|
||||
@property (assign, nonatomic) NSInteger ipv4Gateway_AP2_4;
|
||||
@property (assign, nonatomic) NSInteger ipv4PrimaryDNS_AP2_1;
|
||||
@property (assign, nonatomic) NSInteger ipv4PrimaryDNS_AP2_2;
|
||||
@property (assign, nonatomic) NSInteger ipv4PrimaryDNS_AP2_3;
|
||||
@property (assign, nonatomic) NSInteger ipv4PrimaryDNS_AP2_4;
|
||||
@property (assign, nonatomic) NSInteger ipv4SecondaryDNS_AP2_1;
|
||||
@property (assign, nonatomic) NSInteger ipv4SecondaryDNS_AP2_2;
|
||||
@property (assign, nonatomic) NSInteger ipv4SecondaryDNS_AP2_3;
|
||||
@property (assign, nonatomic) NSInteger ipv4SecondaryDNS_AP2_4;
|
||||
@property (assign, nonatomic) NSInteger subnetMask_AP2;
|
||||
@property (retain) NSString *subnetMaskString_AP2;
|
||||
|
||||
@property (assign) NSInteger ipv4Address_AP3_1;
|
||||
@property (assign) NSInteger ipv4Address_AP3_2;
|
||||
@property (assign) NSInteger ipv4Address_AP3_3;
|
||||
@property (assign) NSInteger ipv4Address_AP3_4;
|
||||
@property (assign) NSInteger ipv4Gateway_AP3_1;
|
||||
@property (assign) NSInteger ipv4Gateway_AP3_2;
|
||||
@property (assign) NSInteger ipv4Gateway_AP3_3;
|
||||
@property (assign) NSInteger ipv4Gateway_AP3_4;
|
||||
@property (assign) NSInteger ipv4PrimaryDNS_AP3_1;
|
||||
@property (assign) NSInteger ipv4PrimaryDNS_AP3_2;
|
||||
@property (assign) NSInteger ipv4PrimaryDNS_AP3_3;
|
||||
@property (assign) NSInteger ipv4PrimaryDNS_AP3_4;
|
||||
@property (assign) NSInteger ipv4SecondaryDNS_AP3_1;
|
||||
@property (assign) NSInteger ipv4SecondaryDNS_AP3_2;
|
||||
@property (assign) NSInteger ipv4SecondaryDNS_AP3_3;
|
||||
@property (assign) NSInteger ipv4SecondaryDNS_AP3_4;
|
||||
@property (assign) NSInteger subnetMask_AP3;
|
||||
@property (assign, nonatomic) NSInteger ipv4Address_AP3_1;
|
||||
@property (assign, nonatomic) NSInteger ipv4Address_AP3_2;
|
||||
@property (assign, nonatomic) NSInteger ipv4Address_AP3_3;
|
||||
@property (assign, nonatomic) NSInteger ipv4Address_AP3_4;
|
||||
@property (assign, nonatomic) NSInteger ipv4Gateway_AP3_1;
|
||||
@property (assign, nonatomic) NSInteger ipv4Gateway_AP3_2;
|
||||
@property (assign, nonatomic) NSInteger ipv4Gateway_AP3_3;
|
||||
@property (assign, nonatomic) NSInteger ipv4Gateway_AP3_4;
|
||||
@property (assign, nonatomic) NSInteger ipv4PrimaryDNS_AP3_1;
|
||||
@property (assign, nonatomic) NSInteger ipv4PrimaryDNS_AP3_2;
|
||||
@property (assign, nonatomic) NSInteger ipv4PrimaryDNS_AP3_3;
|
||||
@property (assign, nonatomic) NSInteger ipv4PrimaryDNS_AP3_4;
|
||||
@property (assign, nonatomic) NSInteger ipv4SecondaryDNS_AP3_1;
|
||||
@property (assign, nonatomic) NSInteger ipv4SecondaryDNS_AP3_2;
|
||||
@property (assign, nonatomic) NSInteger ipv4SecondaryDNS_AP3_3;
|
||||
@property (assign, nonatomic) NSInteger ipv4SecondaryDNS_AP3_4;
|
||||
@property (assign, nonatomic) NSInteger subnetMask_AP3;
|
||||
@property (retain) NSString *subnetMaskString_AP3;
|
||||
|
||||
// User Settings
|
||||
@property (assign) NSInteger consoleType;
|
||||
@property (copy) NSString *nickname;
|
||||
@property (copy) NSString *message;
|
||||
@property (assign) NSInteger favoriteColor;
|
||||
@property (assign) NSDate *birthday;
|
||||
@property (assign) NSInteger language;
|
||||
@property (assign) NSInteger backlightLevel;
|
||||
@property (assign, nonatomic) NSInteger consoleType;
|
||||
@property (copy, nonatomic) NSString *nickname;
|
||||
@property (copy, nonatomic) NSString *message;
|
||||
@property (assign, nonatomic) NSInteger favoriteColor;
|
||||
@property (assign, nonatomic) NSDate *birthday;
|
||||
@property (assign, nonatomic) NSInteger language;
|
||||
@property (assign, nonatomic) NSInteger backlightLevel;
|
||||
|
||||
- (void) update;
|
||||
- (uint32_t) generateRandomMACAddress;
|
||||
- (void) applySettings;
|
||||
- (void) updateFirmwareConfigSessionValues;
|
||||
- (uint32_t) generateRandomFirmwareMACAddress;
|
||||
- (uint32_t) generateRandomCustomMACAddress;
|
||||
- (void) writeUserDefaultWFCUserID;
|
||||
|
||||
@end
|
||||
|
||||
class FirmwareConfigInterface
|
||||
{
|
||||
protected:
|
||||
FirmwareConfig *_internalData;
|
||||
|
||||
FirmwareCfgMACAddrSetID _macAddressSelection;
|
||||
uint32_t _firmwareMACAddressValue;
|
||||
uint32_t _customMACAddressValue;
|
||||
char _macAddressString[(1 + 8) * 18];
|
||||
char _wfcUserIDString[20];
|
||||
char _subnetMaskString[3 * 16];
|
||||
|
||||
public:
|
||||
FirmwareConfigInterface();
|
||||
~FirmwareConfigInterface();
|
||||
|
||||
static void WriteMACAddressStringToBuffer(const uint8_t mac4, const uint8_t mac5, const uint8_t mac6, char *stringBuffer);
|
||||
static void WriteMACAddressStringToBuffer(const uint32_t macAddressValue, char *stringBuffer);
|
||||
static void WriteWFCUserIDStringToBuffer(const uint64_t wfcUserIDValue, char *stringBuffer);
|
||||
|
||||
const FirmwareConfig& GetFirmwareConfig();
|
||||
uint32_t GenerateRandomMACValue();
|
||||
|
||||
FirmwareCfgMACAddrSetID GetMACAddressSelection();
|
||||
void SetMACAddressSelection(FirmwareCfgMACAddrSetID addressSetID);
|
||||
|
||||
uint32_t GetMACAddressValue(FirmwareCfgMACAddrSetID addressSetID);
|
||||
const char* GetMACAddressString(FirmwareCfgMACAddrSetID addressSetID);
|
||||
uint32_t GetSelectedMACAddressValue();
|
||||
uint64_t GetSelectedWFCUserID64();
|
||||
const char* GetSelectedMACAddressString();
|
||||
|
||||
void SetFirmwareMACAddressValue(uint32_t macAddressValue);
|
||||
void SetFirmwareMACAddressValue(uint8_t mac4, uint8_t mac5, uint8_t mac6);
|
||||
void SetCustomMACAddressValue(uint32_t macAddressValue);
|
||||
void SetCustomMACAddressValue(uint8_t mac4, uint8_t mac5, uint8_t mac6);
|
||||
|
||||
uint8_t* GetWFCUserID();
|
||||
void SetWFCUserID(uint8_t *wfcUserID);
|
||||
|
||||
uint64_t GetWFCUserID64();
|
||||
void SetWFCUserID64(uint64_t wfcUserIDValue);
|
||||
|
||||
const char* GetWFCUserIDString();
|
||||
|
||||
uint8_t GetIPv4AddressPart(FirmwareCfgAPID apid, uint8_t addrPart);
|
||||
void SetIPv4AddressPart(FirmwareCfgAPID apid, uint8_t addrPart, uint8_t addrValue);
|
||||
|
||||
uint8_t GetIPv4GatewayPart(FirmwareCfgAPID apid, uint8_t addrPart);
|
||||
void SetIPv4GatewayPart(FirmwareCfgAPID apid, uint8_t addrPart, uint8_t addrValue);
|
||||
|
||||
uint8_t GetIPv4PrimaryDNSPart(FirmwareCfgAPID apid, uint8_t addrPart);
|
||||
void SetIPv4PrimaryDNSPart(FirmwareCfgAPID apid, uint8_t addrPart, uint8_t addrValue);
|
||||
|
||||
uint8_t GetIPv4SecondaryDNSPart(FirmwareCfgAPID apid, uint8_t addrPart);
|
||||
void SetIPv4SecondaryDNSPart(FirmwareCfgAPID apid, uint8_t addrPart, uint8_t addrValue);
|
||||
|
||||
uint8_t GetSubnetMask(FirmwareCfgAPID apid);
|
||||
const char* GetSubnetMaskString(FirmwareCfgAPID apid);
|
||||
void SetSubnetMask(FirmwareCfgAPID apid, uint8_t subnetMaskShift);
|
||||
|
||||
int GetConsoleType();
|
||||
void SetConsoleType(int type);
|
||||
|
||||
uint16_t* GetNicknameStringBuffer();
|
||||
void SetNicknameWithStringBuffer(uint16_t *buffer, size_t charLength);
|
||||
|
||||
size_t GetNicknameStringLength();
|
||||
void SetNicknameStringLength(size_t charLength);
|
||||
|
||||
uint16_t* GetMessageStringBuffer();
|
||||
void SetMessageWithStringBuffer(uint16_t *buffer, size_t charLength);
|
||||
|
||||
size_t GetMessageStringLength();
|
||||
void SetMessageStringLength(size_t charLength);
|
||||
|
||||
int GetFavoriteColorByID();
|
||||
void SetFavoriteColorByID(int colorID);
|
||||
|
||||
int GetBirthdayDay();
|
||||
void SetBirthdayDay(int day);
|
||||
|
||||
int GetBirthdayMonth();
|
||||
void SetBirthdayMonth(int month);
|
||||
|
||||
int GetLanguageByID();
|
||||
void SetLanguageByID(int languageID);
|
||||
|
||||
int GetBacklightLevel();
|
||||
void SetBacklightLevel(int level);
|
||||
};
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -98,7 +98,7 @@ volatile bool execute = true;
|
|||
|
||||
// Set up the DS firmware using the internal firmware
|
||||
cdsFirmware = [[[[CocoaDSFirmware alloc] init] retain] autorelease];
|
||||
[cdsFirmware update];
|
||||
[cdsFirmware applySettings];
|
||||
|
||||
// Set up the sound core
|
||||
CommonSettings.spu_advanced = true;
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -815,7 +815,8 @@
|
|||
[[(NSControl *)sender window] makeFirstResponder:nil];
|
||||
|
||||
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
|
||||
[[cdsCore cdsFirmware] update];
|
||||
[[cdsCore cdsFirmware] applySettings];
|
||||
[cdsCore updateFirmwareMACAddressString];
|
||||
}
|
||||
|
||||
- (IBAction) changeHardwareMicGain:(id)sender
|
||||
|
@ -971,6 +972,9 @@
|
|||
// Force end of editing of any text fields.
|
||||
[[(NSControl *)sender window] makeFirstResponder:nil];
|
||||
|
||||
// Saving the user defaults also applies the current firmware settings.
|
||||
[writeFirmware applySettings];
|
||||
|
||||
[[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagAdvancedBusLevelTiming] forKey:@"Emulation_AdvancedBusLevelTiming"];
|
||||
[[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagRigorousTiming] forKey:@"Emulation_RigorousTiming"];
|
||||
[[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagUseGameSpecificHacks] forKey:@"Emulation_UseGameSpecificHacks"];
|
||||
|
@ -984,7 +988,8 @@
|
|||
[[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagEmulateEnsata] forKey:@"Emulation_EmulateEnsata"];
|
||||
[[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagDebugConsole] forKey:@"Emulation_UseDebugConsole"];
|
||||
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:[writeFirmware MACAddressValue] forKey:@"FirmwareConfig_MACAddress"];
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:[writeFirmware firmwareMACAddressValue] forKey:@"FirmwareConfig_FirmwareMACAddress"];
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:[writeFirmware customMACAddressValue] forKey:@"FirmwareConfig_CustomMACAddress"];
|
||||
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:[writeFirmware ipv4Address_AP1_1] forKey:@"FirmwareConfig_IPv4Address_AP1_1"];
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:[writeFirmware ipv4Address_AP1_2] forKey:@"FirmwareConfig_IPv4Address_AP1_2"];
|
||||
|
@ -1704,6 +1709,11 @@
|
|||
[self pauseCore];
|
||||
|
||||
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
|
||||
if (![cdsCore emuFlagUseExternalFirmware])
|
||||
{
|
||||
[[cdsCore cdsFirmware] updateFirmwareConfigSessionValues];
|
||||
}
|
||||
|
||||
[cdsCore execControl]->ApplySettingsOnReset();
|
||||
[cdsCore updateSlot1DeviceStatus];
|
||||
[self writeDefaultsSlot1Settings:nil];
|
||||
|
@ -1855,7 +1865,6 @@
|
|||
[[windowController window] displayIfNeeded];
|
||||
}
|
||||
|
||||
[cdsCore execControl]->ApplySettingsOnReset();
|
||||
[cdsCore updateCurrentSessionMACAddressString:YES];
|
||||
[cdsCore setMasterExecute:YES];
|
||||
|
||||
|
@ -1905,6 +1914,11 @@
|
|||
}
|
||||
|
||||
// Unload the ROM.
|
||||
if (![cdsCore emuFlagUseExternalFirmware])
|
||||
{
|
||||
[[cdsCore cdsFirmware] writeUserDefaultWFCUserID];
|
||||
}
|
||||
|
||||
[[self currentRom] release];
|
||||
[self setCurrentRom:nil];
|
||||
|
||||
|
|
|
@ -25,15 +25,12 @@ class ClientExecutionControl;
|
|||
@interface WifiSettingsPanelDelegate : NSObject
|
||||
#endif
|
||||
{
|
||||
ClientExecutionControl *execControl;
|
||||
|
||||
uint32_t _myMACAddressValue;
|
||||
NSString *_libpcapDeviceSelectionName;
|
||||
|
||||
NSInteger addressSelection;
|
||||
|
||||
NSObjectController *firmwarePanelController;
|
||||
NSPopUpButton *bridgeDevicePopUpButton;
|
||||
|
||||
ClientExecutionControl *execControl;
|
||||
NSString *_libpcapDeviceSelectionName;
|
||||
|
||||
NSString *myMACAddress1String;
|
||||
NSString *myMACAddress2String;
|
||||
NSString *myMACAddress3String;
|
||||
|
@ -42,8 +39,10 @@ class ClientExecutionControl;
|
|||
|
||||
@property (assign) ClientExecutionControl *execControl;
|
||||
|
||||
@property (assign) IBOutlet NSObjectController *firmwarePanelController;
|
||||
@property (assign) IBOutlet NSPopUpButton *bridgeDevicePopUpButton;
|
||||
|
||||
@property (assign) NSInteger wifiEmulationMode;
|
||||
@property (assign) NSInteger addressSelection;
|
||||
@property (assign) NSInteger bridgeDeviceSelection;
|
||||
|
||||
@property (assign) NSString *myMACAddress1String;
|
||||
|
@ -51,11 +50,8 @@ class ClientExecutionControl;
|
|||
@property (assign) NSString *myMACAddress3String;
|
||||
@property (assign) NSString *myMACAddress4String;
|
||||
|
||||
@property (readonly) IBOutlet NSPopUpButton *bridgeDevicePopUpButton;
|
||||
|
||||
- (void) updateMyMACAddressStringsWithValue:(uint32_t)value;
|
||||
- (void) updateCustomMACAddressStrings;
|
||||
- (void) fillLibpcapDeviceMenu;
|
||||
- (void) generateRandomMyMACAddressSet;
|
||||
- (IBAction) generateNewAddresses:(id)sender;
|
||||
- (IBAction) writeDefaultsWifiSettings:(id)sender;
|
||||
- (void) readUserDefaults;
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include <vector>
|
||||
|
||||
#import "WifiSettingsPanel.h"
|
||||
#import "../cocoa_firmware.h"
|
||||
#include "../ClientExecutionControl.h"
|
||||
#include "../../../wifi.h"
|
||||
#undef BOOL
|
||||
|
@ -26,14 +27,14 @@
|
|||
|
||||
@implementation WifiSettingsPanelDelegate
|
||||
|
||||
@synthesize firmwarePanelController;
|
||||
@synthesize bridgeDevicePopUpButton;
|
||||
|
||||
@synthesize execControl;
|
||||
|
||||
@dynamic wifiEmulationMode;
|
||||
@dynamic addressSelection;
|
||||
@dynamic bridgeDeviceSelection;
|
||||
|
||||
@synthesize bridgeDevicePopUpButton;
|
||||
|
||||
@synthesize myMACAddress1String;
|
||||
@synthesize myMACAddress2String;
|
||||
@synthesize myMACAddress3String;
|
||||
|
@ -49,17 +50,15 @@
|
|||
|
||||
execControl = NULL;
|
||||
|
||||
_myMACAddressValue = 0x503412BF;
|
||||
const uint8_t myMAC4 = (_myMACAddressValue >> 8) & 0x000000FF;
|
||||
const uint8_t myMAC5 = (_myMACAddressValue >> 16) & 0x000000FF;
|
||||
const uint8_t myMAC6 = (_myMACAddressValue >> 24) & 0x000000F0;
|
||||
const uint8_t myMAC4 = 0x12;
|
||||
const uint8_t myMAC5 = 0x34;
|
||||
const uint8_t myMAC6 = 0x50;
|
||||
|
||||
myMACAddress1String = [NSString stringWithFormat:@"My Address #1 00:09:BF:%02X:%02X:%02X", myMAC4, myMAC5, myMAC6 + 1];
|
||||
myMACAddress2String = [NSString stringWithFormat:@"My Address #2 00:09:BF:%02X:%02X:%02X", myMAC4, myMAC5, myMAC6 + 2];
|
||||
myMACAddress3String = [NSString stringWithFormat:@"My Address #3 00:09:BF:%02X:%02X:%02X", myMAC4, myMAC5, myMAC6 + 3];
|
||||
myMACAddress4String = [NSString stringWithFormat:@"My Address #4 00:09:BF:%02X:%02X:%02X", myMAC4, myMAC5, myMAC6 + 4];
|
||||
|
||||
addressSelection = 0;
|
||||
_libpcapDeviceSelectionName = @"";
|
||||
|
||||
return self;
|
||||
|
@ -85,30 +84,6 @@
|
|||
return (NSInteger)execControl->GetWifiEmulationMode();
|
||||
}
|
||||
|
||||
- (void) setAddressSelection:(NSInteger)theSelection
|
||||
{
|
||||
if (theSelection == 0)
|
||||
{
|
||||
wifiHandler->SetFirmwareMACMode(FirmwareMACMode_ReadFromFirmware);
|
||||
}
|
||||
else if ( (theSelection >= 1) && (theSelection <= 4) )
|
||||
{
|
||||
const uint8_t myMAC4 = (_myMACAddressValue >> 8) & 0x000000FF;
|
||||
const uint8_t myMAC5 = (_myMACAddressValue >> 16) & 0x000000FF;
|
||||
const uint8_t myMAC6 = (_myMACAddressValue >> 24) & 0x000000F0;
|
||||
|
||||
wifiHandler->SetUserMACValues(myMAC4, myMAC5, myMAC6 + theSelection);
|
||||
wifiHandler->SetFirmwareMACMode(FirmwareMACMode_Manual);
|
||||
}
|
||||
|
||||
addressSelection = theSelection;
|
||||
}
|
||||
|
||||
- (NSInteger) addressSelection
|
||||
{
|
||||
return addressSelection;
|
||||
}
|
||||
|
||||
- (void) setBridgeDeviceSelection:(NSInteger)theSelection
|
||||
{
|
||||
_libpcapDeviceSelectionName = [bridgeDevicePopUpButton itemTitleAtIndex:theSelection];
|
||||
|
@ -125,16 +100,14 @@
|
|||
return execControl->GetWifiBridgeDeviceIndex();
|
||||
}
|
||||
|
||||
- (void) updateMyMACAddressStringsWithValue:(uint32_t)value
|
||||
- (void) updateCustomMACAddressStrings
|
||||
{
|
||||
const uint8_t myMAC4 = (value >> 8) & 0x000000FF;
|
||||
const uint8_t myMAC5 = (value >> 16) & 0x000000FF;
|
||||
const uint8_t myMAC6 = (value >> 24) & 0x000000F0;
|
||||
CocoaDSFirmware *cdsFirmware = (CocoaDSFirmware *)[firmwarePanelController content];
|
||||
|
||||
[self setMyMACAddress1String:[NSString stringWithFormat:@"My Address #1 00:09:BF:%02X:%02X:%02X", myMAC4, myMAC5, myMAC6 + 1]];
|
||||
[self setMyMACAddress2String:[NSString stringWithFormat:@"My Address #2 00:09:BF:%02X:%02X:%02X", myMAC4, myMAC5, myMAC6 + 2]];
|
||||
[self setMyMACAddress3String:[NSString stringWithFormat:@"My Address #3 00:09:BF:%02X:%02X:%02X", myMAC4, myMAC5, myMAC6 + 3]];
|
||||
[self setMyMACAddress4String:[NSString stringWithFormat:@"My Address #4 00:09:BF:%02X:%02X:%02X", myMAC4, myMAC5, myMAC6 + 4]];
|
||||
[self setMyMACAddress1String:[NSString stringWithFormat:@"My Address #1 %@", [cdsFirmware customMACAddress1String]]];
|
||||
[self setMyMACAddress2String:[NSString stringWithFormat:@"My Address #2 %@", [cdsFirmware customMACAddress2String]]];
|
||||
[self setMyMACAddress3String:[NSString stringWithFormat:@"My Address #3 %@", [cdsFirmware customMACAddress3String]]];
|
||||
[self setMyMACAddress4String:[NSString stringWithFormat:@"My Address #4 %@", [cdsFirmware customMACAddress4String]]];
|
||||
}
|
||||
|
||||
- (void) fillLibpcapDeviceMenu
|
||||
|
@ -157,77 +130,31 @@
|
|||
NSMenuItem *menuItem = [bridgeDevicePopUpButton itemAtIndex:i];
|
||||
[menuItem setTag:i];
|
||||
}
|
||||
|
||||
if (deviceCount > 0)
|
||||
{
|
||||
[self setAddressSelection:0];
|
||||
}
|
||||
}
|
||||
|
||||
- (void) generateRandomMyMACAddressSet
|
||||
{
|
||||
uint32_t randomMACAddressValue = 0;
|
||||
|
||||
do
|
||||
{
|
||||
randomMACAddressValue = (uint32_t)random() & 0x00FFFFFF;
|
||||
} while (randomMACAddressValue == 0);
|
||||
|
||||
_myMACAddressValue = (randomMACAddressValue << 8) | 0xBF;
|
||||
[self updateMyMACAddressStringsWithValue:_myMACAddressValue];
|
||||
|
||||
const NSInteger currentAddressSelection = [self addressSelection];
|
||||
if (currentAddressSelection != 0)
|
||||
{
|
||||
[self setAddressSelection:currentAddressSelection];
|
||||
}
|
||||
}
|
||||
|
||||
- (IBAction) generateNewAddresses:(id)sender
|
||||
{
|
||||
[self generateRandomMyMACAddressSet];
|
||||
CocoaDSFirmware *cdsFirmware = (CocoaDSFirmware *)[firmwarePanelController content];
|
||||
[cdsFirmware generateRandomCustomMACAddress];
|
||||
[self updateCustomMACAddressStrings];
|
||||
}
|
||||
|
||||
- (IBAction) writeDefaultsWifiSettings:(id)sender
|
||||
{
|
||||
CocoaDSFirmware *cdsFirmware = (CocoaDSFirmware *)[firmwarePanelController content];
|
||||
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:[self wifiEmulationMode] forKey:@"Wifi_EmulationMode"];
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:[self addressSelection] forKey:@"Wifi_AddressSelection"];
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:[cdsFirmware addressSelection] forKey:@"FirmwareConfig_AddressSelection"];
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:[self bridgeDeviceSelection] forKey:@"Wifi_BridgeDeviceSelectionIndex"];
|
||||
[[NSUserDefaults standardUserDefaults] setObject:_libpcapDeviceSelectionName forKey:@"Wifi_BridgeDeviceSelectionName"];
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:_myMACAddressValue forKey:@"Wifi_MyMACAddress"];
|
||||
|
||||
[[NSUserDefaults standardUserDefaults] synchronize];
|
||||
}
|
||||
|
||||
- (void) readUserDefaults
|
||||
{
|
||||
BOOL needUserDefaultSynchronize = NO;
|
||||
|
||||
// Set the user's MAC address set.
|
||||
// This needs to happen first since the other properties will have a dependency on this.
|
||||
uint32_t userDefaultMACAddressValue = 0;
|
||||
|
||||
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"Wifi_MyMACAddress"] != nil)
|
||||
{
|
||||
userDefaultMACAddressValue = (uint32_t)[[NSUserDefaults standardUserDefaults] integerForKey:@"Wifi_MyMACAddress"];
|
||||
}
|
||||
|
||||
if (userDefaultMACAddressValue == 0)
|
||||
{
|
||||
// Generate a new random MAC address set if one does not exist.
|
||||
do
|
||||
{
|
||||
userDefaultMACAddressValue = (uint32_t)random() & 0x00FFFFFF;
|
||||
} while (userDefaultMACAddressValue == 0);
|
||||
|
||||
userDefaultMACAddressValue = ((userDefaultMACAddressValue << 8) | 0xBF);
|
||||
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:userDefaultMACAddressValue forKey:@"Wifi_MyMACAddress"];
|
||||
needUserDefaultSynchronize = YES;
|
||||
}
|
||||
|
||||
_myMACAddressValue = userDefaultMACAddressValue;
|
||||
[self updateMyMACAddressStringsWithValue:_myMACAddressValue];
|
||||
CocoaDSFirmware *cdsFirmware = (CocoaDSFirmware *)[firmwarePanelController content];
|
||||
[self updateCustomMACAddressStrings];
|
||||
|
||||
// Set the bridge device selection.
|
||||
NSInteger userDefaultDeviceIndex = [[NSUserDefaults standardUserDefaults] integerForKey:@"Wifi_BridgeDeviceSelectionIndex"];
|
||||
|
@ -255,20 +182,14 @@
|
|||
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:userDefaultDeviceIndex forKey:@"Wifi_BridgeDeviceSelectionIndex"];
|
||||
[[NSUserDefaults standardUserDefaults] setObject:userDefaultDeviceName forKey:@"Wifi_BridgeDeviceSelectionName"];
|
||||
needUserDefaultSynchronize = YES;
|
||||
[[NSUserDefaults standardUserDefaults] synchronize];
|
||||
}
|
||||
|
||||
[self setBridgeDeviceSelection:userDefaultDeviceIndex];
|
||||
|
||||
// Set the remaining user defaults.
|
||||
[self setWifiEmulationMode:[[NSUserDefaults standardUserDefaults] integerForKey:@"Wifi_EmulationMode"]];
|
||||
[self setAddressSelection:[[NSUserDefaults standardUserDefaults] integerForKey:@"Wifi_AddressSelection"]];
|
||||
|
||||
// If we wrote to user defaults beforehand, then synchronize the write as the final operation here.
|
||||
if (needUserDefaultSynchronize)
|
||||
{
|
||||
[[NSUserDefaults standardUserDefaults] synchronize];
|
||||
}
|
||||
[cdsFirmware setAddressSelection:[[NSUserDefaults standardUserDefaults] integerForKey:@"FirmwareConfig_AddressSelection"]];
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -138,8 +138,6 @@
|
|||
return;
|
||||
}
|
||||
|
||||
srandom(time(NULL));
|
||||
|
||||
[CocoaDSFile setupAllFilePaths];
|
||||
|
||||
// On macOS v10.13 and later, some unwanted menu items will show up in the View menu.
|
||||
|
@ -434,6 +432,37 @@
|
|||
PreferencesWindowDelegate *prefWindowDelegate = [prefWindow delegate];
|
||||
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
|
||||
|
||||
// Setup the ARM7 BIOS, ARM9 BIOS, and firmware image paths per user preferences.
|
||||
NSString *arm7BiosImagePath = [[NSUserDefaults standardUserDefaults] stringForKey:@"BIOS_ARM7ImagePath"];
|
||||
if (arm7BiosImagePath != nil)
|
||||
{
|
||||
[cdsCore setArm7ImageURL:[NSURL fileURLWithPath:arm7BiosImagePath]];
|
||||
}
|
||||
else
|
||||
{
|
||||
[cdsCore setArm7ImageURL:nil];
|
||||
}
|
||||
|
||||
NSString *arm9BiosImagePath = [[NSUserDefaults standardUserDefaults] stringForKey:@"BIOS_ARM9ImagePath"];
|
||||
if (arm9BiosImagePath != nil)
|
||||
{
|
||||
[cdsCore setArm9ImageURL:[NSURL fileURLWithPath:arm9BiosImagePath]];
|
||||
}
|
||||
else
|
||||
{
|
||||
[cdsCore setArm9ImageURL:nil];
|
||||
}
|
||||
|
||||
NSString *firmwareImagePath = [[NSUserDefaults standardUserDefaults] stringForKey:@"Emulation_FirmwareImagePath"];
|
||||
if (firmwareImagePath != nil)
|
||||
{
|
||||
[cdsCore setFirmwareImageURL:[NSURL fileURLWithPath:firmwareImagePath]];
|
||||
}
|
||||
else
|
||||
{
|
||||
[cdsCore setFirmwareImageURL:nil];
|
||||
}
|
||||
|
||||
// Set the emulation flags.
|
||||
[cdsCore setEmuFlagAdvancedBusLevelTiming:[[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_AdvancedBusLevelTiming"]];
|
||||
[cdsCore setEmuFlagRigorousTiming:[[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_RigorousTiming"]];
|
||||
|
@ -468,28 +497,50 @@
|
|||
|
||||
// Set up the firmware per user preferences.
|
||||
CocoaDSFirmware *newFirmware = [[[CocoaDSFirmware alloc] init] autorelease];
|
||||
BOOL needUserDefaultSynchronize = NO;
|
||||
uint32_t defaultMACAddress_u32 = 0;
|
||||
|
||||
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"FirmwareConfig_MACAddress"] != nil)
|
||||
[newFirmware setExecControl:[cdsCore execControl]];
|
||||
|
||||
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"FirmwareConfig_FirmwareMACAddress"] != nil)
|
||||
{
|
||||
defaultMACAddress_u32 = (uint32_t)[[NSUserDefaults standardUserDefaults] integerForKey:@"FirmwareConfig_MACAddress"];
|
||||
defaultMACAddress_u32 = (uint32_t)[[NSUserDefaults standardUserDefaults] integerForKey:@"FirmwareConfig_FirmwareMACAddress"];
|
||||
}
|
||||
|
||||
if (defaultMACAddress_u32 == 0)
|
||||
{
|
||||
// Generate a new random MAC address set if one does not exist.
|
||||
do
|
||||
{
|
||||
defaultMACAddress_u32 = (uint32_t)random() & 0x00FFFFFF;
|
||||
} while (defaultMACAddress_u32 == 0);
|
||||
|
||||
defaultMACAddress_u32 = ((defaultMACAddress_u32 << 8) | 0xBF);
|
||||
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:defaultMACAddress_u32 forKey:@"FirmwareConfig_MACAddress"];
|
||||
defaultMACAddress_u32 = [newFirmware firmwareMACAddressPendingValue];
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:defaultMACAddress_u32 forKey:@"FirmwareConfig_FirmwareMACAddress"];
|
||||
needUserDefaultSynchronize = YES;
|
||||
}
|
||||
else
|
||||
{
|
||||
[newFirmware setFirmwareMACAddressPendingValue:defaultMACAddress_u32];
|
||||
}
|
||||
|
||||
defaultMACAddress_u32 = 0;
|
||||
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"FirmwareConfig_CustomMACAddress"] != nil)
|
||||
{
|
||||
defaultMACAddress_u32 = (uint32_t)[[NSUserDefaults standardUserDefaults] integerForKey:@"FirmwareConfig_CustomMACAddress"];
|
||||
}
|
||||
|
||||
if (defaultMACAddress_u32 == 0)
|
||||
{
|
||||
defaultMACAddress_u32 = [newFirmware customMACAddressValue];
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:defaultMACAddress_u32 forKey:@"FirmwareConfig_CustomMACAddress"];
|
||||
needUserDefaultSynchronize = YES;
|
||||
}
|
||||
else
|
||||
{
|
||||
[newFirmware setCustomMACAddressValue:defaultMACAddress_u32];
|
||||
}
|
||||
|
||||
if (needUserDefaultSynchronize)
|
||||
{
|
||||
[[NSUserDefaults standardUserDefaults] synchronize];
|
||||
}
|
||||
|
||||
[newFirmware setMACAddressValue:defaultMACAddress_u32];
|
||||
[wifiSettingsPanelDelegate updateCustomMACAddressStrings];
|
||||
|
||||
[newFirmware setIpv4Address_AP1_1:[[NSUserDefaults standardUserDefaults] integerForKey:@"FirmwareConfig_IPv4Address_AP1_1"]];
|
||||
[newFirmware setIpv4Address_AP1_2:[[NSUserDefaults standardUserDefaults] integerForKey:@"FirmwareConfig_IPv4Address_AP1_2"]];
|
||||
|
@ -558,40 +609,10 @@
|
|||
[prefWindowDelegate updateSubnetMaskString_AP2:nil];
|
||||
[prefWindowDelegate updateSubnetMaskString_AP3:nil];
|
||||
|
||||
[newFirmware update];
|
||||
[newFirmware applySettings];
|
||||
[cdsCore updateFirmwareMACAddressString];
|
||||
[emuControl setCdsFirmware:newFirmware];
|
||||
|
||||
// Setup the ARM7 BIOS, ARM9 BIOS, and firmware image paths per user preferences.
|
||||
NSString *arm7BiosImagePath = [[NSUserDefaults standardUserDefaults] stringForKey:@"BIOS_ARM7ImagePath"];
|
||||
if (arm7BiosImagePath != nil)
|
||||
{
|
||||
[cdsCore setArm7ImageURL:[NSURL fileURLWithPath:arm7BiosImagePath]];
|
||||
}
|
||||
else
|
||||
{
|
||||
[cdsCore setArm7ImageURL:nil];
|
||||
}
|
||||
|
||||
NSString *arm9BiosImagePath = [[NSUserDefaults standardUserDefaults] stringForKey:@"BIOS_ARM9ImagePath"];
|
||||
if (arm9BiosImagePath != nil)
|
||||
{
|
||||
[cdsCore setArm9ImageURL:[NSURL fileURLWithPath:arm9BiosImagePath]];
|
||||
}
|
||||
else
|
||||
{
|
||||
[cdsCore setArm9ImageURL:nil];
|
||||
}
|
||||
|
||||
NSString *firmwareImagePath = [[NSUserDefaults standardUserDefaults] stringForKey:@"Emulation_FirmwareImagePath"];
|
||||
if (firmwareImagePath != nil)
|
||||
{
|
||||
[cdsCore setFirmwareImageURL:[NSURL fileURLWithPath:firmwareImagePath]];
|
||||
}
|
||||
else
|
||||
{
|
||||
[cdsCore setFirmwareImageURL:nil];
|
||||
}
|
||||
|
||||
// Set up GDB stub settings per user preferences.
|
||||
#ifdef GDB_STUB
|
||||
[cdsCore setEnableGdbStubARM9:[[NSUserDefaults standardUserDefaults] boolForKey:@"Debug_GDBStubEnableARM9"]];
|
||||
|
|
|
@ -904,7 +904,7 @@
|
|||
|
||||
randomMACAddressValue = (randomMACAddressValue << 8) | 0xBF;
|
||||
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:randomMACAddressValue forKey:@"FirmwareConfig_MACAddress"];
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:randomMACAddressValue forKey:@"FirmwareConfig_FirmwareMACAddress"];
|
||||
[[NSUserDefaults standardUserDefaults] synchronize];
|
||||
|
||||
[self updateFirmwareMACAddressString:nil];
|
||||
|
@ -912,7 +912,7 @@
|
|||
|
||||
- (IBAction) updateFirmwareMACAddressString:(id)sender
|
||||
{
|
||||
const uint32_t defaultMACAddressValue = (uint32_t)[[NSUserDefaults standardUserDefaults] integerForKey:@"FirmwareConfig_MACAddress"];
|
||||
const uint32_t defaultMACAddressValue = (uint32_t)[[NSUserDefaults standardUserDefaults] integerForKey:@"FirmwareConfig_FirmwareMACAddress"];
|
||||
const uint8_t mac4 = (defaultMACAddressValue >> 8) & 0x000000FF;
|
||||
const uint8_t mac5 = (defaultMACAddressValue >> 16) & 0x000000FF;
|
||||
const uint8_t mac6 = (defaultMACAddressValue >> 24) & 0x000000FF;
|
||||
|
|
|
@ -2445,7 +2445,7 @@ static void SelectFirmwareFile()
|
|||
case GTK_RESPONSE_OK:
|
||||
sPath = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(pFileSelection));
|
||||
CommonSettings.UseExtFirmware = true;
|
||||
strncpy(CommonSettings.Firmware, (const char*)sPath, g_utf8_strlen(sPath, -1));
|
||||
strncpy(CommonSettings.ExtFirmwarePath, (const char*)sPath, g_utf8_strlen(sPath, -1));
|
||||
g_free(sPath);
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -144,8 +144,6 @@ BOOL CALLBACK FirmConfig_Proc(HWND dialog,UINT komunikat,WPARAM wparam,LPARAM lp
|
|||
|
||||
WriteFirmConfig(fwConfig);
|
||||
EndDialog(dialog,0);
|
||||
if (CommonSettings.UseExtFirmware == 0)
|
||||
NDS_InitFirmwareWithConfig(fwConfig);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
|
|
|
@ -2234,7 +2234,7 @@ int _main()
|
|||
Piano.Enabled = (slot2_device_type == NDS_SLOT2_EASYPIANO)?true:false;
|
||||
Paddle.Enabled = (slot2_device_type == NDS_SLOT2_PADDLE)?true:false;
|
||||
|
||||
CommonSettings.wifi.infraBridgeAdapter = GetPrivateProfileInt("Wifi", "BridgeAdapter", 0, IniName);
|
||||
CommonSettings.WifiBridgeDeviceID = GetPrivateProfileInt("Wifi", "BridgeAdapter", 0, IniName);
|
||||
|
||||
osd = new OSDCLASS(-1);
|
||||
|
||||
|
@ -2245,37 +2245,7 @@ int _main()
|
|||
WinPCapInterface *winpcapInterface = (isPCapSupported) ? new WinPCapInterface : NULL;
|
||||
wifiHandler->SetPCapInterface(winpcapInterface);
|
||||
wifiHandler->SetSocketsSupported(isSocketsSupported);
|
||||
|
||||
// Generate the unique MAC address for Ad-hoc mode.
|
||||
{
|
||||
// Get the host's IP4 address.
|
||||
char hostname[256];
|
||||
if (gethostname(hostname, 256) != 0)
|
||||
strncpy(hostname, "127.0.0.1", 256);
|
||||
|
||||
hostent *he = gethostbyname(hostname);
|
||||
u32 ipaddr;
|
||||
if (he == NULL || he->h_addr_list[0] == NULL)
|
||||
ipaddr = 0x0100007F; // 127.0.0.1
|
||||
else
|
||||
ipaddr = *(u32 *)he->h_addr_list[0];
|
||||
|
||||
u32 hash = (u32)GetCurrentProcessId();
|
||||
|
||||
while ((hash & 0xFF000000) == 0)
|
||||
{
|
||||
hash <<= 1;
|
||||
}
|
||||
|
||||
hash >>= 1;
|
||||
hash += ipaddr >> 8;
|
||||
hash &= 0x00FFFFFF;
|
||||
|
||||
wifiHandler->SetUserMACValues(hash >> 16, (hash >> 8) & 0xFF, hash & 0xFF);
|
||||
wifiHandler->SetFirmwareMACMode(FirmwareMACMode_Manual);
|
||||
}
|
||||
|
||||
wifiHandler->SetBridgeDeviceIndex(CommonSettings.wifi.infraBridgeAdapter);
|
||||
wifiHandler->SetBridgeDeviceIndex(CommonSettings.WifiBridgeDeviceID);
|
||||
|
||||
if (GetPrivateProfileBool("Wifi", "Enabled", false, IniName))
|
||||
{
|
||||
|
@ -2431,7 +2401,7 @@ int _main()
|
|||
|
||||
CommonSettings.UseExtFirmware = GetPrivateProfileBool("Firmware", "UseExtFirmware", false, IniName);
|
||||
CommonSettings.UseExtFirmwareSettings = GetPrivateProfileBool("Firmware", "UseExtFirmwareSettings", false, IniName);
|
||||
GetPrivateProfileString("Firmware", "FirmwareFile", "firmware.bin", CommonSettings.Firmware, 256, IniName);
|
||||
GetPrivateProfileString("Firmware", "FirmwareFile", "firmware.bin", CommonSettings.ExtFirmwarePath, 256, IniName);
|
||||
CommonSettings.BootFromFirmware = GetPrivateProfileBool("Firmware", "BootFromFirmware", false, IniName);
|
||||
|
||||
video.setfilter(GetPrivateProfileInt("Video", "Filter", video.NONE, IniName));
|
||||
|
@ -2439,6 +2409,40 @@ int _main()
|
|||
|
||||
//default the firmware settings, they may get changed later
|
||||
NDS_GetDefaultFirmwareConfig(CommonSettings.fwConfig);
|
||||
|
||||
// Generate the unique MAC address.
|
||||
{
|
||||
// Get the host's IP4 address.
|
||||
char hostname[256];
|
||||
if (gethostname(hostname, 256) != 0)
|
||||
strncpy(hostname, "127.0.0.1", 256);
|
||||
|
||||
hostent *he = gethostbyname(hostname);
|
||||
u32 ipaddr;
|
||||
if (he == NULL || he->h_addr_list[0] == NULL)
|
||||
ipaddr = 0x0100007F; // 127.0.0.1
|
||||
else
|
||||
ipaddr = *(u32 *)he->h_addr_list[0];
|
||||
|
||||
u32 hash = (u32)GetCurrentProcessId();
|
||||
|
||||
while ((hash & 0xFF000000) == 0)
|
||||
{
|
||||
hash <<= 1;
|
||||
}
|
||||
|
||||
hash >>= 1;
|
||||
hash += ipaddr >> 8;
|
||||
hash &= 0x00FFFFFF;
|
||||
|
||||
CommonSettings.fwConfig.MACAddress[0] = 0x00;
|
||||
CommonSettings.fwConfig.MACAddress[1] = 0x09;
|
||||
CommonSettings.fwConfig.MACAddress[2] = 0xBF;
|
||||
CommonSettings.fwConfig.MACAddress[3] = hash >> 16;
|
||||
CommonSettings.fwConfig.MACAddress[4] = (hash >> 8) & 0xFF;
|
||||
CommonSettings.fwConfig.MACAddress[5] = hash & 0xFF;
|
||||
}
|
||||
|
||||
// Read the firmware settings from the init file
|
||||
CommonSettings.fwConfig.favoriteColor = GetPrivateProfileInt("Firmware","favColor", 10, IniName);
|
||||
CommonSettings.fwConfig.birthdayMonth = GetPrivateProfileInt("Firmware","bMonth", 7, IniName);
|
||||
|
@ -5893,7 +5897,7 @@ LRESULT CALLBACK EmulationSettingsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, L
|
|||
}
|
||||
|
||||
CheckDlgButton(hDlg, IDC_USEEXTFIRMWARE, ((CommonSettings.UseExtFirmware == true) ? BST_CHECKED : BST_UNCHECKED));
|
||||
SetDlgItemText(hDlg, IDC_FIRMWARE, CommonSettings.Firmware);
|
||||
SetDlgItemText(hDlg, IDC_FIRMWARE, CommonSettings.ExtFirmwarePath);
|
||||
CheckDlgButton(hDlg, IDC_FIRMWAREBOOT, ((CommonSettings.BootFromFirmware == true) ? BST_CHECKED : BST_UNCHECKED));
|
||||
CheckDlgButton(hDlg, IDC_FIRMWAREEXTUSER, ((CommonSettings.UseExtFirmwareSettings == true) ? BST_CHECKED : BST_UNCHECKED));
|
||||
|
||||
|
@ -5959,7 +5963,7 @@ LRESULT CALLBACK EmulationSettingsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, L
|
|||
|
||||
CommonSettings.UseExtFirmware = IsDlgCheckboxChecked(hDlg, IDC_USEEXTFIRMWARE);
|
||||
cur = GetDlgItem(hDlg, IDC_FIRMWARE);
|
||||
GetWindowText(cur, CommonSettings.Firmware, 256);
|
||||
GetWindowText(cur, CommonSettings.ExtFirmwarePath, 256);
|
||||
CommonSettings.BootFromFirmware = IsDlgCheckboxChecked(hDlg, IDC_FIRMWAREBOOT);
|
||||
CommonSettings.UseExtFirmwareSettings = IsDlgCheckboxChecked(hDlg, IDC_FIRMWAREEXTUSER);
|
||||
|
||||
|
@ -5987,7 +5991,7 @@ LRESULT CALLBACK EmulationSettingsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, L
|
|||
WritePrivateProfileInt("BIOS", "PatchSWI3", ((CommonSettings.PatchSWI3 == true) ? 1 : 0), IniName);
|
||||
|
||||
WritePrivateProfileInt("Firmware", "UseExtFirmware", ((CommonSettings.UseExtFirmware == true) ? 1 : 0), IniName);
|
||||
WritePrivateProfileString("Firmware", "FirmwareFile", CommonSettings.Firmware, IniName);
|
||||
WritePrivateProfileString("Firmware", "FirmwareFile", CommonSettings.ExtFirmwarePath, IniName);
|
||||
WritePrivateProfileInt("Firmware", "BootFromFirmware", ((CommonSettings.BootFromFirmware == true) ? 1 : 0), IniName);
|
||||
WritePrivateProfileInt("Firmware", "UseExtFirmwareSettings", ((CommonSettings.UseExtFirmwareSettings == true) ? 1 : 0), IniName);
|
||||
#ifdef HAVE_JIT
|
||||
|
@ -6263,7 +6267,7 @@ LRESULT CALLBACK WifiSettingsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM
|
|||
{
|
||||
ComboBox_AddString(deviceMenu, deviceStringList[i].c_str());
|
||||
}
|
||||
curSel = CommonSettings.wifi.infraBridgeAdapter;
|
||||
curSel = CommonSettings.WifiBridgeDeviceID;
|
||||
enableWin = TRUE;
|
||||
}
|
||||
}
|
||||
|
@ -6307,9 +6311,9 @@ LRESULT CALLBACK WifiSettingsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM
|
|||
#endif
|
||||
|
||||
cur = GetDlgItem(hDlg, IDC_BRIDGEADAPTER);
|
||||
CommonSettings.wifi.infraBridgeAdapter = ComboBox_GetCurSel(cur);
|
||||
wifiHandler->SetBridgeDeviceIndex(CommonSettings.wifi.infraBridgeAdapter);
|
||||
WritePrivateProfileInt("Wifi", "BridgeAdapter", CommonSettings.wifi.infraBridgeAdapter, IniName);
|
||||
CommonSettings.WifiBridgeDeviceID = ComboBox_GetCurSel(cur);
|
||||
wifiHandler->SetBridgeDeviceIndex(CommonSettings.WifiBridgeDeviceID);
|
||||
WritePrivateProfileInt("Wifi", "BridgeAdapter", CommonSettings.WifiBridgeDeviceID, IniName);
|
||||
|
||||
if(val == IDYES)
|
||||
{
|
||||
|
|
|
@ -3651,7 +3651,6 @@ WifiHandler::WifiHandler()
|
|||
_softAPCommInterface = new SoftAPCommInterface;
|
||||
|
||||
_selectedBridgeDeviceIndex = 0;
|
||||
_firmwareMACMode = FirmwareMACMode_Automatic;
|
||||
|
||||
_workingTXBuffer = NULL;
|
||||
_workingRXAdhocBuffer = NULL;
|
||||
|
@ -4485,35 +4484,18 @@ bool WifiHandler::CommStart()
|
|||
|
||||
if (isAdhocCommStarted || isInfrastructureCommStarted)
|
||||
{
|
||||
switch (this->_firmwareMACMode)
|
||||
{
|
||||
case FirmwareMACMode_Automatic:
|
||||
this->GenerateRandomMAC(FW_Mac);
|
||||
NDS_OverrideFirmwareMAC(FW_Mac);
|
||||
break;
|
||||
|
||||
case FirmwareMACMode_Manual:
|
||||
this->CopyMACFromUserValues(FW_Mac);
|
||||
NDS_OverrideFirmwareMAC(FW_Mac);
|
||||
break;
|
||||
|
||||
case FirmwareMACMode_ReadFromFirmware:
|
||||
FW_Mac[0] = MMU.fw.data.wifiInfo.MACAddr[0];
|
||||
FW_Mac[1] = MMU.fw.data.wifiInfo.MACAddr[1];
|
||||
FW_Mac[2] = MMU.fw.data.wifiInfo.MACAddr[2];
|
||||
FW_Mac[3] = MMU.fw.data.wifiInfo.MACAddr[3];
|
||||
FW_Mac[4] = MMU.fw.data.wifiInfo.MACAddr[4];
|
||||
FW_Mac[5] = MMU.fw.data.wifiInfo.MACAddr[5];
|
||||
break;
|
||||
}
|
||||
FW_Mac[0] = MMU.fw.data.wifiInfo.MACAddr[0];
|
||||
FW_Mac[1] = MMU.fw.data.wifiInfo.MACAddr[1];
|
||||
FW_Mac[2] = MMU.fw.data.wifiInfo.MACAddr[2];
|
||||
FW_Mac[3] = MMU.fw.data.wifiInfo.MACAddr[3];
|
||||
FW_Mac[4] = MMU.fw.data.wifiInfo.MACAddr[4];
|
||||
FW_Mac[5] = MMU.fw.data.wifiInfo.MACAddr[5];
|
||||
|
||||
// Starting the comm interface was successful.
|
||||
// Report the MAC address to the user as confirmation.
|
||||
WIFI_LOG(1, "MAC Address = %02X:%02X:%02X:%02X:%02X:%02X\n",
|
||||
FW_Mac[0], FW_Mac[1], FW_Mac[2], FW_Mac[3], FW_Mac[4], FW_Mac[5]);
|
||||
|
||||
NDS_OverrideFirmwareMAC(FW_Mac);
|
||||
|
||||
#ifdef DESMUME_COCOA
|
||||
this->_rxTaskAdhoc->start(false, 43);
|
||||
#else
|
||||
|
@ -4929,68 +4911,6 @@ void WifiHandler::SetPCapInterface(ClientPCapInterface *pcapInterface)
|
|||
this->_pcap = (pcapInterface == NULL) ? &dummyPCapInterface : pcapInterface;
|
||||
}
|
||||
|
||||
FirmwareMACMode WifiHandler::GetFirmwareMACMode()
|
||||
{
|
||||
return this->_firmwareMACMode;
|
||||
}
|
||||
|
||||
void WifiHandler::SetFirmwareMACMode(FirmwareMACMode macMode)
|
||||
{
|
||||
this->_firmwareMACMode = macMode;
|
||||
}
|
||||
|
||||
void WifiHandler::GetUserMACValues(u8 *outValue3, u8 *outValue4, u8 *outValue5)
|
||||
{
|
||||
*outValue3 = this->_userMAC[0];
|
||||
*outValue4 = this->_userMAC[1];
|
||||
*outValue5 = this->_userMAC[2];
|
||||
}
|
||||
|
||||
void WifiHandler::SetUserMACValues(u8 inValue3, u8 inValue4, u8 inValue5)
|
||||
{
|
||||
this->_userMAC[0] = inValue3;
|
||||
this->_userMAC[1] = inValue4;
|
||||
this->_userMAC[2] = inValue5;
|
||||
}
|
||||
|
||||
void WifiHandler::GenerateRandomMAC(u8 outMAC[6])
|
||||
{
|
||||
if (outMAC == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static bool needSetRandomSeed = true;
|
||||
if (needSetRandomSeed)
|
||||
{
|
||||
srand(time(NULL));
|
||||
needSetRandomSeed = false;
|
||||
}
|
||||
|
||||
const u32 randomValue = (u32)rand();
|
||||
|
||||
outMAC[3] = (randomValue >> 0) & 0xFF;
|
||||
outMAC[4] = (randomValue >> 8) & 0xFF;
|
||||
outMAC[5] = (randomValue >> 16) & 0xFF;
|
||||
}
|
||||
|
||||
void WifiHandler::CopyMACFromUserValues(u8 outMAC[6])
|
||||
{
|
||||
if (outMAC == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// The first three MAC values are Nintendo's signature MAC values.
|
||||
// The last three MAC values are user-defined.
|
||||
outMAC[0] = 0x00;
|
||||
outMAC[1] = 0x09;
|
||||
outMAC[2] = 0xBF;
|
||||
outMAC[3] = this->_userMAC[0];
|
||||
outMAC[4] = this->_userMAC[1];
|
||||
outMAC[5] = this->_userMAC[2];
|
||||
}
|
||||
|
||||
void WifiHandler::PrepareSaveStateWrite()
|
||||
{
|
||||
WIFI_IOREG_MAP &io = this->_wifi.io;
|
||||
|
|
|
@ -824,13 +824,6 @@ enum WifiCommInterfaceID
|
|||
WifiCommInterfaceID_Infrastructure = 1
|
||||
};
|
||||
|
||||
enum FirmwareMACMode
|
||||
{
|
||||
FirmwareMACMode_Automatic = 0,
|
||||
FirmwareMACMode_Manual = 1,
|
||||
FirmwareMACMode_ReadFromFirmware = 2
|
||||
};
|
||||
|
||||
typedef u16 IOREG_W_PADDING;
|
||||
|
||||
typedef u16 IOREG_W_INTERNAL;
|
||||
|
@ -3317,9 +3310,6 @@ protected:
|
|||
bool _isSocketsSupported;
|
||||
bool _didWarnWFCUser;
|
||||
|
||||
FirmwareMACMode _firmwareMACMode;
|
||||
u8 _userMAC[3];
|
||||
|
||||
u8 *_workingTXBuffer;
|
||||
u8 *_workingRXAdhocBuffer;
|
||||
u8 *_workingRXSoftAPBuffer;
|
||||
|
@ -3391,15 +3381,6 @@ public:
|
|||
ClientPCapInterface* GetPCapInterface();
|
||||
void SetPCapInterface(ClientPCapInterface *pcapInterface);
|
||||
|
||||
FirmwareMACMode GetFirmwareMACMode();
|
||||
void SetFirmwareMACMode(FirmwareMACMode macMode);
|
||||
|
||||
void GetUserMACValues(u8 *outValue3, u8 *outValue4, u8 *outValue5);
|
||||
void SetUserMACValues(u8 inValue3, u8 inValue4, u8 inValue5);
|
||||
|
||||
void GenerateRandomMAC(u8 outMAC[6]);
|
||||
void CopyMACFromUserValues(u8 outMAC[6]);
|
||||
|
||||
void PrepareSaveStateWrite();
|
||||
void ParseSaveStateRead();
|
||||
|
||||
|
|
Loading…
Reference in New Issue