summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt23
-rw-r--r--externals/find-modules/Findhttplib.cmake2
-rw-r--r--externals/find-modules/Findlz4.cmake2
-rw-r--r--externals/find-modules/Findzstd.cmake2
-rw-r--r--src/core/hle/service/nifm/nifm.cpp88
-rw-r--r--src/yuzu/debugger/controller.cpp10
6 files changed, 77 insertions, 50 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index cf366c24f..ed22187fd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -203,42 +203,43 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
203# System imported libraries 203# System imported libraries
204# ======================================================================= 204# =======================================================================
205 205
206find_package(enet 1.3) 206# Enforce the search mode of non-required packages for better and shorter failure messages
207find_package(enet 1.3 MODULE)
207find_package(fmt 9 REQUIRED) 208find_package(fmt 9 REQUIRED)
208find_package(inih) 209find_package(inih MODULE)
209find_package(lz4 REQUIRED) 210find_package(lz4 REQUIRED)
210find_package(nlohmann_json 3.8 REQUIRED) 211find_package(nlohmann_json 3.8 REQUIRED)
211find_package(Opus 1.3) 212find_package(Opus 1.3 MODULE)
212find_package(ZLIB 1.2 REQUIRED) 213find_package(ZLIB 1.2 REQUIRED)
213find_package(zstd 1.5 REQUIRED) 214find_package(zstd 1.5 REQUIRED)
214 215
215if (NOT YUZU_USE_EXTERNAL_VULKAN_HEADERS) 216if (NOT YUZU_USE_EXTERNAL_VULKAN_HEADERS)
216 find_package(Vulkan 1.3.238) 217 find_package(Vulkan 1.3.238 REQUIRED)
217endif() 218endif()
218 219
219if (ENABLE_LIBUSB) 220if (ENABLE_LIBUSB)
220 find_package(libusb 1.0.24) 221 find_package(libusb 1.0.24 MODULE)
221endif() 222endif()
222 223
223if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64) 224if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64)
224 find_package(xbyak 6 QUIET) 225 find_package(xbyak 6 CONFIG)
225endif() 226endif()
226 227
227if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) 228if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64)
228 find_package(dynarmic 6.4.0 QUIET) 229 find_package(dynarmic 6.4.0 CONFIG)
229endif() 230endif()
230 231
231if (ENABLE_CUBEB) 232if (ENABLE_CUBEB)
232 find_package(cubeb QUIET) 233 find_package(cubeb CONFIG)
233endif() 234endif()
234 235
235if (USE_DISCORD_PRESENCE) 236if (USE_DISCORD_PRESENCE)
236 find_package(DiscordRPC QUIET) 237 find_package(DiscordRPC MODULE)
237endif() 238endif()
238 239
239if (ENABLE_WEB_SERVICE) 240if (ENABLE_WEB_SERVICE)
240 find_package(cpp-jwt 1.4 QUIET) 241 find_package(cpp-jwt 1.4 CONFIG)
241 find_package(httplib 0.11 QUIET) 242 find_package(httplib 0.11 MODULE)
242endif() 243endif()
243 244
244if (YUZU_TESTS) 245if (YUZU_TESTS)
diff --git a/externals/find-modules/Findhttplib.cmake b/externals/find-modules/Findhttplib.cmake
index 4d17cb393..861207eb5 100644
--- a/externals/find-modules/Findhttplib.cmake
+++ b/externals/find-modules/Findhttplib.cmake
@@ -5,7 +5,7 @@
5include(FindPackageHandleStandardArgs) 5include(FindPackageHandleStandardArgs)
6 6
7find_package(httplib QUIET CONFIG) 7find_package(httplib QUIET CONFIG)
8if (httplib_FOUND) 8if (httplib_CONSIDERED_CONFIGS)
9 find_package_handle_standard_args(httplib CONFIG_MODE) 9 find_package_handle_standard_args(httplib CONFIG_MODE)
10else() 10else()
11 find_package(PkgConfig QUIET) 11 find_package(PkgConfig QUIET)
diff --git a/externals/find-modules/Findlz4.cmake b/externals/find-modules/Findlz4.cmake
index c82405c59..7a9a02d4e 100644
--- a/externals/find-modules/Findlz4.cmake
+++ b/externals/find-modules/Findlz4.cmake
@@ -4,7 +4,7 @@
4include(FindPackageHandleStandardArgs) 4include(FindPackageHandleStandardArgs)
5 5
6find_package(lz4 QUIET CONFIG) 6find_package(lz4 QUIET CONFIG)
7if (lz4_FOUND) 7if (lz4_CONSIDERED_CONFIGS)
8 find_package_handle_standard_args(lz4 CONFIG_MODE) 8 find_package_handle_standard_args(lz4 CONFIG_MODE)
9else() 9else()
10 find_package(PkgConfig QUIET) 10 find_package(PkgConfig QUIET)
diff --git a/externals/find-modules/Findzstd.cmake b/externals/find-modules/Findzstd.cmake
index f6eb9643a..ae3ea0865 100644
--- a/externals/find-modules/Findzstd.cmake
+++ b/externals/find-modules/Findzstd.cmake
@@ -4,7 +4,7 @@
4include(FindPackageHandleStandardArgs) 4include(FindPackageHandleStandardArgs)
5 5
6find_package(zstd QUIET CONFIG) 6find_package(zstd QUIET CONFIG)
7if (zstd_FOUND) 7if (zstd_CONSIDERED_CONFIGS)
8 find_package_handle_standard_args(zstd CONFIG_MODE) 8 find_package_handle_standard_args(zstd CONFIG_MODE)
9else() 9else()
10 find_package(PkgConfig QUIET) 10 find_package(PkgConfig QUIET)
diff --git a/src/core/hle/service/nifm/nifm.cpp b/src/core/hle/service/nifm/nifm.cpp
index 4fa9f51a6..5d32adf64 100644
--- a/src/core/hle/service/nifm/nifm.cpp
+++ b/src/core/hle/service/nifm/nifm.cpp
@@ -22,15 +22,19 @@ namespace {
22 22
23namespace Service::NIFM { 23namespace Service::NIFM {
24 24
25// This is nn::nifm::RequestState
25enum class RequestState : u32 { 26enum class RequestState : u32 {
26 NotSubmitted = 1, 27 NotSubmitted = 1,
27 Error = 1, ///< The duplicate 1 is intentional; it means both not submitted and error on HW. 28 Invalid = 1, ///< The duplicate 1 is intentional; it means both not submitted and error on HW.
28 Pending = 2, 29 OnHold = 2,
29 Connected = 3, 30 Accepted = 3,
31 Blocking = 4,
30}; 32};
31 33
32enum class InternetConnectionType : u8 { 34// This is nn::nifm::NetworkInterfaceType
33 WiFi = 1, 35enum class NetworkInterfaceType : u32 {
36 Invalid = 0,
37 WiFi_Ieee80211 = 1,
34 Ethernet = 2, 38 Ethernet = 2,
35}; 39};
36 40
@@ -42,14 +46,23 @@ enum class InternetConnectionStatus : u8 {
42 Connected, 46 Connected,
43}; 47};
44 48
49// This is nn::nifm::NetworkProfileType
50enum class NetworkProfileType : u32 {
51 User,
52 SsidList,
53 Temporary,
54};
55
56// This is nn::nifm::IpAddressSetting
45struct IpAddressSetting { 57struct IpAddressSetting {
46 bool is_automatic{}; 58 bool is_automatic{};
47 Network::IPv4Address current_address{}; 59 Network::IPv4Address ip_address{};
48 Network::IPv4Address subnet_mask{}; 60 Network::IPv4Address subnet_mask{};
49 Network::IPv4Address gateway{}; 61 Network::IPv4Address default_gateway{};
50}; 62};
51static_assert(sizeof(IpAddressSetting) == 0xD, "IpAddressSetting has incorrect size."); 63static_assert(sizeof(IpAddressSetting) == 0xD, "IpAddressSetting has incorrect size.");
52 64
65// This is nn::nifm::DnsSetting
53struct DnsSetting { 66struct DnsSetting {
54 bool is_automatic{}; 67 bool is_automatic{};
55 Network::IPv4Address primary_dns{}; 68 Network::IPv4Address primary_dns{};
@@ -57,18 +70,26 @@ struct DnsSetting {
57}; 70};
58static_assert(sizeof(DnsSetting) == 0x9, "DnsSetting has incorrect size."); 71static_assert(sizeof(DnsSetting) == 0x9, "DnsSetting has incorrect size.");
59 72
73// This is nn::nifm::AuthenticationSetting
74struct AuthenticationSetting {
75 bool is_enabled{};
76 std::array<char, 0x20> user{};
77 std::array<char, 0x20> password{};
78};
79static_assert(sizeof(AuthenticationSetting) == 0x41, "AuthenticationSetting has incorrect size.");
80
81// This is nn::nifm::ProxySetting
60struct ProxySetting { 82struct ProxySetting {
61 bool enabled{}; 83 bool is_enabled{};
62 INSERT_PADDING_BYTES(1); 84 INSERT_PADDING_BYTES(1);
63 u16 port{}; 85 u16 port{};
64 std::array<char, 0x64> proxy_server{}; 86 std::array<char, 0x64> proxy_server{};
65 bool automatic_auth_enabled{}; 87 AuthenticationSetting authentication{};
66 std::array<char, 0x20> user{};
67 std::array<char, 0x20> password{};
68 INSERT_PADDING_BYTES(1); 88 INSERT_PADDING_BYTES(1);
69}; 89};
70static_assert(sizeof(ProxySetting) == 0xAA, "ProxySetting has incorrect size."); 90static_assert(sizeof(ProxySetting) == 0xAA, "ProxySetting has incorrect size.");
71 91
92// This is nn::nifm::IpSettingData
72struct IpSettingData { 93struct IpSettingData {
73 IpAddressSetting ip_address_setting{}; 94 IpAddressSetting ip_address_setting{};
74 DnsSetting dns_setting{}; 95 DnsSetting dns_setting{};
@@ -101,6 +122,7 @@ static_assert(sizeof(NifmWirelessSettingData) == 0x70,
101 "NifmWirelessSettingData has incorrect size."); 122 "NifmWirelessSettingData has incorrect size.");
102 123
103#pragma pack(push, 1) 124#pragma pack(push, 1)
125// This is nn::nifm::detail::sf::NetworkProfileData
104struct SfNetworkProfileData { 126struct SfNetworkProfileData {
105 IpSettingData ip_setting_data{}; 127 IpSettingData ip_setting_data{};
106 u128 uuid{}; 128 u128 uuid{};
@@ -114,13 +136,14 @@ struct SfNetworkProfileData {
114}; 136};
115static_assert(sizeof(SfNetworkProfileData) == 0x17C, "SfNetworkProfileData has incorrect size."); 137static_assert(sizeof(SfNetworkProfileData) == 0x17C, "SfNetworkProfileData has incorrect size.");
116 138
139// This is nn::nifm::NetworkProfileData
117struct NifmNetworkProfileData { 140struct NifmNetworkProfileData {
118 u128 uuid{}; 141 u128 uuid{};
119 std::array<char, 0x40> network_name{}; 142 std::array<char, 0x40> network_name{};
120 u32 unknown_1{}; 143 NetworkProfileType network_profile_type{};
121 u32 unknown_2{}; 144 NetworkInterfaceType network_interface_type{};
122 u8 unknown_3{}; 145 bool is_auto_connect{};
123 u8 unknown_4{}; 146 bool is_large_capacity{};
124 INSERT_PADDING_BYTES(2); 147 INSERT_PADDING_BYTES(2);
125 NifmWirelessSettingData wireless_setting_data{}; 148 NifmWirelessSettingData wireless_setting_data{};
126 IpSettingData ip_setting_data{}; 149 IpSettingData ip_setting_data{};
@@ -184,6 +207,7 @@ public:
184 207
185 event1 = CreateKEvent(service_context, "IRequest:Event1"); 208 event1 = CreateKEvent(service_context, "IRequest:Event1");
186 event2 = CreateKEvent(service_context, "IRequest:Event2"); 209 event2 = CreateKEvent(service_context, "IRequest:Event2");
210 state = RequestState::NotSubmitted;
187 } 211 }
188 212
189 ~IRequest() override { 213 ~IRequest() override {
@@ -196,7 +220,7 @@ private:
196 LOG_WARNING(Service_NIFM, "(STUBBED) called"); 220 LOG_WARNING(Service_NIFM, "(STUBBED) called");
197 221
198 if (state == RequestState::NotSubmitted) { 222 if (state == RequestState::NotSubmitted) {
199 UpdateState(RequestState::Pending); 223 UpdateState(RequestState::OnHold);
200 } 224 }
201 225
202 IPC::ResponseBuilder rb{ctx, 2}; 226 IPC::ResponseBuilder rb{ctx, 2};
@@ -219,14 +243,14 @@ private:
219 switch (state) { 243 switch (state) {
220 case RequestState::NotSubmitted: 244 case RequestState::NotSubmitted:
221 return has_connection ? ResultSuccess : ResultNetworkCommunicationDisabled; 245 return has_connection ? ResultSuccess : ResultNetworkCommunicationDisabled;
222 case RequestState::Pending: 246 case RequestState::OnHold:
223 if (has_connection) { 247 if (has_connection) {
224 UpdateState(RequestState::Connected); 248 UpdateState(RequestState::Accepted);
225 } else { 249 } else {
226 UpdateState(RequestState::Error); 250 UpdateState(RequestState::Invalid);
227 } 251 }
228 return ResultPendingConnection; 252 return ResultPendingConnection;
229 case RequestState::Connected: 253 case RequestState::Accepted:
230 default: 254 default:
231 return ResultSuccess; 255 return ResultSuccess;
232 } 256 }
@@ -338,9 +362,9 @@ void IGeneralService::GetCurrentNetworkProfile(Kernel::HLERequestContext& ctx) {
338 .ip_setting_data{ 362 .ip_setting_data{
339 .ip_address_setting{ 363 .ip_address_setting{
340 .is_automatic{true}, 364 .is_automatic{true},
341 .current_address{Network::TranslateIPv4(net_iface->ip_address)}, 365 .ip_address{Network::TranslateIPv4(net_iface->ip_address)},
342 .subnet_mask{Network::TranslateIPv4(net_iface->subnet_mask)}, 366 .subnet_mask{Network::TranslateIPv4(net_iface->subnet_mask)},
343 .gateway{Network::TranslateIPv4(net_iface->gateway)}, 367 .default_gateway{Network::TranslateIPv4(net_iface->gateway)},
344 }, 368 },
345 .dns_setting{ 369 .dns_setting{
346 .is_automatic{true}, 370 .is_automatic{true},
@@ -348,12 +372,14 @@ void IGeneralService::GetCurrentNetworkProfile(Kernel::HLERequestContext& ctx) {
348 .secondary_dns{1, 0, 0, 1}, 372 .secondary_dns{1, 0, 0, 1},
349 }, 373 },
350 .proxy_setting{ 374 .proxy_setting{
351 .enabled{false}, 375 .is_enabled{false},
352 .port{}, 376 .port{},
353 .proxy_server{}, 377 .proxy_server{},
354 .automatic_auth_enabled{}, 378 .authentication{
355 .user{}, 379 .is_enabled{},
356 .password{}, 380 .user{},
381 .password{},
382 },
357 }, 383 },
358 .mtu{1500}, 384 .mtu{1500},
359 }, 385 },
@@ -370,7 +396,7 @@ void IGeneralService::GetCurrentNetworkProfile(Kernel::HLERequestContext& ctx) {
370 // When we're connected to a room, spoof the hosts IP address 396 // When we're connected to a room, spoof the hosts IP address
371 if (auto room_member = network.GetRoomMember().lock()) { 397 if (auto room_member = network.GetRoomMember().lock()) {
372 if (room_member->IsConnected()) { 398 if (room_member->IsConnected()) {
373 network_profile_data.ip_setting_data.ip_address_setting.current_address = 399 network_profile_data.ip_setting_data.ip_address_setting.ip_address =
374 room_member->GetFakeIpAddress(); 400 room_member->GetFakeIpAddress();
375 } 401 }
376 } 402 }
@@ -444,9 +470,9 @@ void IGeneralService::GetCurrentIpConfigInfo(Kernel::HLERequestContext& ctx) {
444 return IpConfigInfo{ 470 return IpConfigInfo{
445 .ip_address_setting{ 471 .ip_address_setting{
446 .is_automatic{true}, 472 .is_automatic{true},
447 .current_address{Network::TranslateIPv4(net_iface->ip_address)}, 473 .ip_address{Network::TranslateIPv4(net_iface->ip_address)},
448 .subnet_mask{Network::TranslateIPv4(net_iface->subnet_mask)}, 474 .subnet_mask{Network::TranslateIPv4(net_iface->subnet_mask)},
449 .gateway{Network::TranslateIPv4(net_iface->gateway)}, 475 .default_gateway{Network::TranslateIPv4(net_iface->gateway)},
450 }, 476 },
451 .dns_setting{ 477 .dns_setting{
452 .is_automatic{true}, 478 .is_automatic{true},
@@ -459,7 +485,7 @@ void IGeneralService::GetCurrentIpConfigInfo(Kernel::HLERequestContext& ctx) {
459 // When we're connected to a room, spoof the hosts IP address 485 // When we're connected to a room, spoof the hosts IP address
460 if (auto room_member = network.GetRoomMember().lock()) { 486 if (auto room_member = network.GetRoomMember().lock()) {
461 if (room_member->IsConnected()) { 487 if (room_member->IsConnected()) {
462 ip_config_info.ip_address_setting.current_address = room_member->GetFakeIpAddress(); 488 ip_config_info.ip_address_setting.ip_address = room_member->GetFakeIpAddress();
463 } 489 }
464 } 490 }
465 491
@@ -480,7 +506,7 @@ void IGeneralService::GetInternetConnectionStatus(Kernel::HLERequestContext& ctx
480 LOG_WARNING(Service_NIFM, "(STUBBED) called"); 506 LOG_WARNING(Service_NIFM, "(STUBBED) called");
481 507
482 struct Output { 508 struct Output {
483 InternetConnectionType type{InternetConnectionType::WiFi}; 509 u8 type{static_cast<u8>(NetworkInterfaceType::WiFi_Ieee80211)};
484 u8 wifi_strength{3}; 510 u8 wifi_strength{3};
485 InternetConnectionStatus state{InternetConnectionStatus::Connected}; 511 InternetConnectionStatus state{InternetConnectionStatus::Connected};
486 }; 512 };
diff --git a/src/yuzu/debugger/controller.cpp b/src/yuzu/debugger/controller.cpp
index e4bf16a04..19f3775a3 100644
--- a/src/yuzu/debugger/controller.cpp
+++ b/src/yuzu/debugger/controller.cpp
@@ -93,7 +93,7 @@ void ControllerDialog::ControllerUpdate(Core::HID::ControllerTriggerType type) {
93 case Core::HID::ControllerTriggerType::Button: 93 case Core::HID::ControllerTriggerType::Button:
94 case Core::HID::ControllerTriggerType::Stick: { 94 case Core::HID::ControllerTriggerType::Stick: {
95 const auto buttons_values = controller->GetButtonsValues(); 95 const auto buttons_values = controller->GetButtonsValues();
96 const auto stick_values = controller->GetSticksValues(); 96 const auto stick_values = controller->GetSticks();
97 u64 buttons = 0; 97 u64 buttons = 0;
98 std::size_t index = 0; 98 std::size_t index = 0;
99 for (const auto& button : buttons_values) { 99 for (const auto& button : buttons_values) {
@@ -101,12 +101,12 @@ void ControllerDialog::ControllerUpdate(Core::HID::ControllerTriggerType type) {
101 index++; 101 index++;
102 } 102 }
103 const InputCommon::TasInput::TasAnalog left_axis = { 103 const InputCommon::TasInput::TasAnalog left_axis = {
104 .x = stick_values[Settings::NativeAnalog::LStick].x.value, 104 .x = stick_values.left.x / 32767.f,
105 .y = stick_values[Settings::NativeAnalog::LStick].y.value, 105 .y = stick_values.left.y / 32767.f,
106 }; 106 };
107 const InputCommon::TasInput::TasAnalog right_axis = { 107 const InputCommon::TasInput::TasAnalog right_axis = {
108 .x = stick_values[Settings::NativeAnalog::RStick].x.value, 108 .x = stick_values.right.x / 32767.f,
109 .y = stick_values[Settings::NativeAnalog::RStick].y.value, 109 .y = stick_values.right.y / 32767.f,
110 }; 110 };
111 input_subsystem->GetTas()->RecordInput(buttons, left_axis, right_axis); 111 input_subsystem->GetTas()->RecordInput(buttons, left_axis, right_axis);
112 break; 112 break;