early-access version 1403
This commit is contained in:
parent
4f93c6e8b2
commit
3a9d9376f3
5 changed files with 179 additions and 6 deletions
|
@ -1,7 +1,7 @@
|
||||||
yuzu emulator early access
|
yuzu emulator early access
|
||||||
=============
|
=============
|
||||||
|
|
||||||
This is the source code for early-access 1402.
|
This is the source code for early-access 1403.
|
||||||
|
|
||||||
## Legal Notice
|
## Legal Notice
|
||||||
|
|
||||||
|
|
|
@ -383,11 +383,14 @@ void CommandGenerator::GenerateI3dl2ReverbEffectCommand(s32 mix_buffer_offset, E
|
||||||
const auto channel_count = params.channel_count;
|
const auto channel_count = params.channel_count;
|
||||||
for (s32 i = 0; i < channel_count; i++) {
|
for (s32 i = 0; i < channel_count; i++) {
|
||||||
// TODO(ogniK): Actually implement reverb
|
// TODO(ogniK): Actually implement reverb
|
||||||
|
/*
|
||||||
if (params.input[i] != params.output[i]) {
|
if (params.input[i] != params.output[i]) {
|
||||||
const auto* input = GetMixBuffer(mix_buffer_offset + params.input[i]);
|
const auto* input = GetMixBuffer(mix_buffer_offset + params.input[i]);
|
||||||
auto* output = GetMixBuffer(mix_buffer_offset + params.output[i]);
|
auto* output = GetMixBuffer(mix_buffer_offset + params.output[i]);
|
||||||
ApplyMix<1>(output, input, 32768, worker_params.sample_count);
|
ApplyMix<1>(output, input, 32768, worker_params.sample_count);
|
||||||
}
|
}*/
|
||||||
|
auto* output = GetMixBuffer(mix_buffer_offset + params.output[i]);
|
||||||
|
std::memset(output, 0, worker_params.sample_count * sizeof(s32));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1192,7 +1192,7 @@ IApplicationFunctions::IApplicationFunctions(Core::System& system_)
|
||||||
{40, &IApplicationFunctions::NotifyRunning, "NotifyRunning"},
|
{40, &IApplicationFunctions::NotifyRunning, "NotifyRunning"},
|
||||||
{50, &IApplicationFunctions::GetPseudoDeviceId, "GetPseudoDeviceId"},
|
{50, &IApplicationFunctions::GetPseudoDeviceId, "GetPseudoDeviceId"},
|
||||||
{60, nullptr, "SetMediaPlaybackStateForApplication"},
|
{60, nullptr, "SetMediaPlaybackStateForApplication"},
|
||||||
{65, nullptr, "IsGamePlayRecordingSupported"},
|
{65, &IApplicationFunctions::IsGamePlayRecordingSupported, "IsGamePlayRecordingSupported"},
|
||||||
{66, &IApplicationFunctions::InitializeGamePlayRecording, "InitializeGamePlayRecording"},
|
{66, &IApplicationFunctions::InitializeGamePlayRecording, "InitializeGamePlayRecording"},
|
||||||
{67, &IApplicationFunctions::SetGamePlayRecordingState, "SetGamePlayRecordingState"},
|
{67, &IApplicationFunctions::SetGamePlayRecordingState, "SetGamePlayRecordingState"},
|
||||||
{68, nullptr, "RequestFlushGamePlayingMovieForDebug"},
|
{68, nullptr, "RequestFlushGamePlayingMovieForDebug"},
|
||||||
|
@ -1480,6 +1480,16 @@ void IApplicationFunctions::GetDesiredLanguage(Kernel::HLERequestContext& ctx) {
|
||||||
rb.Push(*res_code);
|
rb.Push(*res_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void IApplicationFunctions::IsGamePlayRecordingSupported(Kernel::HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_AM, "(STUBBED) called");
|
||||||
|
|
||||||
|
constexpr bool gameplay_recording_supported = false;
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.Push(gameplay_recording_supported);
|
||||||
|
}
|
||||||
|
|
||||||
void IApplicationFunctions::InitializeGamePlayRecording(Kernel::HLERequestContext& ctx) {
|
void IApplicationFunctions::InitializeGamePlayRecording(Kernel::HLERequestContext& ctx) {
|
||||||
LOG_WARNING(Service_AM, "(STUBBED) called");
|
LOG_WARNING(Service_AM, "(STUBBED) called");
|
||||||
|
|
||||||
|
|
|
@ -266,6 +266,7 @@ private:
|
||||||
void SetTerminateResult(Kernel::HLERequestContext& ctx);
|
void SetTerminateResult(Kernel::HLERequestContext& ctx);
|
||||||
void GetDisplayVersion(Kernel::HLERequestContext& ctx);
|
void GetDisplayVersion(Kernel::HLERequestContext& ctx);
|
||||||
void GetDesiredLanguage(Kernel::HLERequestContext& ctx);
|
void GetDesiredLanguage(Kernel::HLERequestContext& ctx);
|
||||||
|
void IsGamePlayRecordingSupported(Kernel::HLERequestContext& ctx);
|
||||||
void InitializeGamePlayRecording(Kernel::HLERequestContext& ctx);
|
void InitializeGamePlayRecording(Kernel::HLERequestContext& ctx);
|
||||||
void SetGamePlayRecordingState(Kernel::HLERequestContext& ctx);
|
void SetGamePlayRecordingState(Kernel::HLERequestContext& ctx);
|
||||||
void NotifyRunning(Kernel::HLERequestContext& ctx);
|
void NotifyRunning(Kernel::HLERequestContext& ctx);
|
||||||
|
|
|
@ -21,6 +21,93 @@ enum class RequestState : u32 {
|
||||||
Connected = 3,
|
Connected = 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct IpAddressSetting {
|
||||||
|
bool is_automatic{};
|
||||||
|
Network::IPv4Address current_address{};
|
||||||
|
Network::IPv4Address subnet_mask{};
|
||||||
|
Network::IPv4Address gateway{};
|
||||||
|
};
|
||||||
|
static_assert(sizeof(IpAddressSetting) == 0xD, "IpAddressSetting has incorrect size.");
|
||||||
|
|
||||||
|
struct DnsSetting {
|
||||||
|
bool is_automatic{};
|
||||||
|
Network::IPv4Address primary_dns{};
|
||||||
|
Network::IPv4Address secondary_dns{};
|
||||||
|
};
|
||||||
|
static_assert(sizeof(DnsSetting) == 0x9, "DnsSetting has incorrect size.");
|
||||||
|
|
||||||
|
struct ProxySetting {
|
||||||
|
bool enabled{};
|
||||||
|
INSERT_PADDING_BYTES(1);
|
||||||
|
u16 port{};
|
||||||
|
std::array<char, 0x64> proxy_server{};
|
||||||
|
bool automatic_auth_enabled{};
|
||||||
|
std::array<char, 0x20> user{};
|
||||||
|
std::array<char, 0x20> password{};
|
||||||
|
INSERT_PADDING_BYTES(1);
|
||||||
|
};
|
||||||
|
static_assert(sizeof(ProxySetting) == 0xAA, "ProxySetting has incorrect size.");
|
||||||
|
|
||||||
|
struct IpSettingData {
|
||||||
|
IpAddressSetting ip_address_setting{};
|
||||||
|
DnsSetting dns_setting{};
|
||||||
|
ProxySetting proxy_setting{};
|
||||||
|
u16 mtu{};
|
||||||
|
};
|
||||||
|
static_assert(sizeof(IpSettingData) == 0xC2, "IpSettingData has incorrect size.");
|
||||||
|
|
||||||
|
struct SfWirelessSettingData {
|
||||||
|
u8 ssid_length{};
|
||||||
|
std::array<char, 0x20> ssid{};
|
||||||
|
u8 unknown_1{};
|
||||||
|
u8 unknown_2{};
|
||||||
|
u8 unknown_3{};
|
||||||
|
std::array<char, 0x41> passphrase{};
|
||||||
|
};
|
||||||
|
static_assert(sizeof(SfWirelessSettingData) == 0x65, "SfWirelessSettingData has incorrect size.");
|
||||||
|
|
||||||
|
struct NifmWirelessSettingData {
|
||||||
|
u8 ssid_length{};
|
||||||
|
std::array<char, 0x21> ssid{};
|
||||||
|
u8 unknown_1{};
|
||||||
|
INSERT_PADDING_BYTES(1);
|
||||||
|
u32 unknown_2{};
|
||||||
|
u32 unknown_3{};
|
||||||
|
std::array<char, 0x41> passphrase{};
|
||||||
|
INSERT_PADDING_BYTES(3);
|
||||||
|
};
|
||||||
|
static_assert(sizeof(NifmWirelessSettingData) == 0x70,
|
||||||
|
"NifmWirelessSettingData has incorrect size.");
|
||||||
|
|
||||||
|
#pragma pack(push, 1)
|
||||||
|
struct SfNetworkProfileData {
|
||||||
|
IpSettingData ip_setting_data{};
|
||||||
|
u128 uuid{};
|
||||||
|
std::array<char, 0x40> network_name{};
|
||||||
|
u8 unknown_1{};
|
||||||
|
u8 unknown_2{};
|
||||||
|
u8 unknown_3{};
|
||||||
|
u8 unknown_4{};
|
||||||
|
SfWirelessSettingData wireless_setting_data{};
|
||||||
|
INSERT_PADDING_BYTES(1);
|
||||||
|
};
|
||||||
|
static_assert(sizeof(SfNetworkProfileData) == 0x17C, "SfNetworkProfileData has incorrect size.");
|
||||||
|
|
||||||
|
struct NifmNetworkProfileData {
|
||||||
|
u128 uuid{};
|
||||||
|
std::array<char, 0x40> network_name{};
|
||||||
|
u32 unknown_1{};
|
||||||
|
u32 unknown_2{};
|
||||||
|
u8 unknown_3{};
|
||||||
|
u8 unknown_4{};
|
||||||
|
INSERT_PADDING_BYTES(2);
|
||||||
|
NifmWirelessSettingData wireless_setting_data{};
|
||||||
|
IpSettingData ip_setting_data{};
|
||||||
|
};
|
||||||
|
static_assert(sizeof(NifmNetworkProfileData) == 0x18E,
|
||||||
|
"NifmNetworkProfileData has incorrect size.");
|
||||||
|
#pragma pack(pop)
|
||||||
|
|
||||||
class IScanRequest final : public ServiceFramework<IScanRequest> {
|
class IScanRequest final : public ServiceFramework<IScanRequest> {
|
||||||
public:
|
public:
|
||||||
explicit IScanRequest(Core::System& system_) : ServiceFramework{system_, "IScanRequest"} {
|
explicit IScanRequest(Core::System& system_) : ServiceFramework{system_, "IScanRequest"} {
|
||||||
|
@ -128,7 +215,11 @@ private:
|
||||||
void GetAppletInfo(Kernel::HLERequestContext& ctx) {
|
void GetAppletInfo(Kernel::HLERequestContext& ctx) {
|
||||||
LOG_WARNING(Service_NIFM, "(STUBBED) called");
|
LOG_WARNING(Service_NIFM, "(STUBBED) called");
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 8};
|
std::vector<u8> out_buffer(ctx.GetWriteBufferSize());
|
||||||
|
|
||||||
|
ctx.WriteBuffer(out_buffer);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 5};
|
||||||
rb.Push(RESULT_SUCCESS);
|
rb.Push(RESULT_SUCCESS);
|
||||||
rb.Push<u32>(0);
|
rb.Push<u32>(0);
|
||||||
rb.Push<u32>(0);
|
rb.Push<u32>(0);
|
||||||
|
@ -179,6 +270,46 @@ private:
|
||||||
rb.Push(RESULT_SUCCESS);
|
rb.Push(RESULT_SUCCESS);
|
||||||
rb.PushIpcInterface<IRequest>(system);
|
rb.PushIpcInterface<IRequest>(system);
|
||||||
}
|
}
|
||||||
|
void GetCurrentNetworkProfile(Kernel::HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_NIFM, "(STUBBED) called");
|
||||||
|
|
||||||
|
const SfNetworkProfileData network_profile_data{
|
||||||
|
.ip_setting_data{
|
||||||
|
.ip_address_setting{
|
||||||
|
.is_automatic{true},
|
||||||
|
.current_address{192, 168, 1, 100},
|
||||||
|
.subnet_mask{255, 255, 255, 0},
|
||||||
|
.gateway{192, 168, 1, 1},
|
||||||
|
},
|
||||||
|
.dns_setting{
|
||||||
|
.is_automatic{true},
|
||||||
|
.primary_dns{1, 1, 1, 1},
|
||||||
|
.secondary_dns{1, 0, 0, 1},
|
||||||
|
},
|
||||||
|
.proxy_setting{
|
||||||
|
.enabled{false},
|
||||||
|
.port{},
|
||||||
|
.proxy_server{},
|
||||||
|
.automatic_auth_enabled{},
|
||||||
|
.user{},
|
||||||
|
.password{},
|
||||||
|
},
|
||||||
|
.mtu{1500},
|
||||||
|
},
|
||||||
|
.uuid{0xdeadbeef, 0xdeadbeef},
|
||||||
|
.network_name{"yuzu Network"},
|
||||||
|
.wireless_setting_data{
|
||||||
|
.ssid_length{12},
|
||||||
|
.ssid{"yuzu Network"},
|
||||||
|
.passphrase{"yuzupassword"},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
ctx.WriteBuffer(network_profile_data);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
}
|
||||||
void RemoveNetworkProfile(Kernel::HLERequestContext& ctx) {
|
void RemoveNetworkProfile(Kernel::HLERequestContext& ctx) {
|
||||||
LOG_WARNING(Service_NIFM, "(STUBBED) called");
|
LOG_WARNING(Service_NIFM, "(STUBBED) called");
|
||||||
|
|
||||||
|
@ -210,6 +341,34 @@ private:
|
||||||
rb.PushIpcInterface<INetworkProfile>(system);
|
rb.PushIpcInterface<INetworkProfile>(system);
|
||||||
rb.PushRaw<u128>(uuid);
|
rb.PushRaw<u128>(uuid);
|
||||||
}
|
}
|
||||||
|
void GetCurrentIpConfigInfo(Kernel::HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_NIFM, "(STUBBED) called");
|
||||||
|
|
||||||
|
struct IpConfigInfo {
|
||||||
|
IpAddressSetting ip_address_setting;
|
||||||
|
DnsSetting dns_setting;
|
||||||
|
};
|
||||||
|
static_assert(sizeof(IpConfigInfo) == sizeof(IpAddressSetting) + sizeof(DnsSetting),
|
||||||
|
"IpConfigInfo has incorrect size.");
|
||||||
|
|
||||||
|
const IpConfigInfo ip_config_info{
|
||||||
|
.ip_address_setting{
|
||||||
|
.is_automatic{true},
|
||||||
|
.current_address{192, 168, 1, 100},
|
||||||
|
.subnet_mask{255, 255, 255, 0},
|
||||||
|
.gateway{192, 168, 1, 1},
|
||||||
|
},
|
||||||
|
.dns_setting{
|
||||||
|
.is_automatic{true},
|
||||||
|
.primary_dns{1, 1, 1, 1},
|
||||||
|
.secondary_dns{1, 0, 0, 1},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2 + sizeof(IpConfigInfo) / sizeof(u32)};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.PushRaw<IpConfigInfo>(ip_config_info);
|
||||||
|
}
|
||||||
void IsWirelessCommunicationEnabled(Kernel::HLERequestContext& ctx) {
|
void IsWirelessCommunicationEnabled(Kernel::HLERequestContext& ctx) {
|
||||||
LOG_WARNING(Service_NIFM, "(STUBBED) called");
|
LOG_WARNING(Service_NIFM, "(STUBBED) called");
|
||||||
|
|
||||||
|
@ -248,7 +407,7 @@ IGeneralService::IGeneralService(Core::System& system_)
|
||||||
{1, &IGeneralService::GetClientId, "GetClientId"},
|
{1, &IGeneralService::GetClientId, "GetClientId"},
|
||||||
{2, &IGeneralService::CreateScanRequest, "CreateScanRequest"},
|
{2, &IGeneralService::CreateScanRequest, "CreateScanRequest"},
|
||||||
{4, &IGeneralService::CreateRequest, "CreateRequest"},
|
{4, &IGeneralService::CreateRequest, "CreateRequest"},
|
||||||
{5, nullptr, "GetCurrentNetworkProfile"},
|
{5, &IGeneralService::GetCurrentNetworkProfile, "GetCurrentNetworkProfile"},
|
||||||
{6, nullptr, "EnumerateNetworkInterfaces"},
|
{6, nullptr, "EnumerateNetworkInterfaces"},
|
||||||
{7, nullptr, "EnumerateNetworkProfiles"},
|
{7, nullptr, "EnumerateNetworkProfiles"},
|
||||||
{8, nullptr, "GetNetworkProfile"},
|
{8, nullptr, "GetNetworkProfile"},
|
||||||
|
@ -258,7 +417,7 @@ IGeneralService::IGeneralService(Core::System& system_)
|
||||||
{12, &IGeneralService::GetCurrentIpAddress, "GetCurrentIpAddress"},
|
{12, &IGeneralService::GetCurrentIpAddress, "GetCurrentIpAddress"},
|
||||||
{13, nullptr, "GetCurrentAccessPointOld"},
|
{13, nullptr, "GetCurrentAccessPointOld"},
|
||||||
{14, &IGeneralService::CreateTemporaryNetworkProfile, "CreateTemporaryNetworkProfile"},
|
{14, &IGeneralService::CreateTemporaryNetworkProfile, "CreateTemporaryNetworkProfile"},
|
||||||
{15, nullptr, "GetCurrentIpConfigInfo"},
|
{15, &IGeneralService::GetCurrentIpConfigInfo, "GetCurrentIpConfigInfo"},
|
||||||
{16, nullptr, "SetWirelessCommunicationEnabled"},
|
{16, nullptr, "SetWirelessCommunicationEnabled"},
|
||||||
{17, &IGeneralService::IsWirelessCommunicationEnabled, "IsWirelessCommunicationEnabled"},
|
{17, &IGeneralService::IsWirelessCommunicationEnabled, "IsWirelessCommunicationEnabled"},
|
||||||
{18, nullptr, "GetInternetConnectionStatus"},
|
{18, nullptr, "GetInternetConnectionStatus"},
|
||||||
|
|
Loading…
Reference in a new issue