aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Guillemard <me@thog.eu>2019-10-19 00:47:50 +0200
committerAc_K <Acoustik666@gmail.com>2019-10-19 00:47:50 +0200
commit2b5ec23aa747d46e7c9142c14c636e58fa5b5910 (patch)
tree5924f613474d5ee03f5b78bd9652b28031272580
parent8a8ea4c8c00e8ba23349d9cdb0a6b681d09e6b0d (diff)
Fix latest version of hbl/hb-menu (#795)
* Fix latest version of hbl/hb-menu This implement GetSettingsItemValueSize (required by hbl) and GetInternetConnectionStatus (required by hb-menu). * Address comments
-rw-r--r--Ryujinx.HLE/HOS/Services/Nifm/StaticService/IGeneralService.cs23
-rw-r--r--Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/InternetConnectionState.cs11
-rw-r--r--Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/InternetConnectionStatus.cs12
-rw-r--r--Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/InternetConnectionType.cs9
-rw-r--r--Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs44
5 files changed, 99 insertions, 0 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Nifm/StaticService/IGeneralService.cs b/Ryujinx.HLE/HOS/Services/Nifm/StaticService/IGeneralService.cs
index 4a07b298..c1642c3f 100644
--- a/Ryujinx.HLE/HOS/Services/Nifm/StaticService/IGeneralService.cs
+++ b/Ryujinx.HLE/HOS/Services/Nifm/StaticService/IGeneralService.cs
@@ -1,5 +1,7 @@
+using Ryujinx.Common;
using Ryujinx.Common.Logging;
using Ryujinx.HLE.HOS.Services.Nifm.StaticService.GeneralService;
+using Ryujinx.HLE.HOS.Services.Nifm.StaticService.Types;
using System;
using System.Linq;
using System.Net;
@@ -71,6 +73,27 @@ namespace Ryujinx.HLE.HOS.Services.Nifm.StaticService
return ResultCode.Success;
}
+ [Command(18)]
+ // GetInternetConnectionStatus() -> nn::nifm::detail::sf::InternetConnectionStatus
+ public ResultCode GetInternetConnectionStatus(ServiceCtx context)
+ {
+ if (!NetworkInterface.GetIsNetworkAvailable())
+ {
+ return ResultCode.NoInternetConnection;
+ }
+
+ InternetConnectionStatus internetConnectionStatus = new InternetConnectionStatus
+ {
+ Type = InternetConnectionType.WiFi,
+ WifiStrength = 3,
+ State = InternetConnectionState.Connected,
+ };
+
+ context.ResponseData.WriteStruct(internetConnectionStatus);
+
+ return ResultCode.Success;
+ }
+
[Command(21)]
// IsAnyInternetRequestAccepted(buffer<nn::nifm::ClientId, 0x19, 4>) -> bool
public ResultCode IsAnyInternetRequestAccepted(ServiceCtx context)
diff --git a/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/InternetConnectionState.cs b/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/InternetConnectionState.cs
new file mode 100644
index 00000000..dfb8f76c
--- /dev/null
+++ b/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/InternetConnectionState.cs
@@ -0,0 +1,11 @@
+namespace Ryujinx.HLE.HOS.Services.Nifm.StaticService.Types
+{
+ enum InternetConnectionState : byte
+ {
+ ConnectingType0 = 0,
+ ConnectingType1 = 1,
+ ConnectingType2 = 2,
+ ConnectingType3 = 3,
+ Connected = 4,
+ }
+}
diff --git a/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/InternetConnectionStatus.cs b/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/InternetConnectionStatus.cs
new file mode 100644
index 00000000..ff944eca
--- /dev/null
+++ b/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/InternetConnectionStatus.cs
@@ -0,0 +1,12 @@
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.HLE.HOS.Services.Nifm.StaticService.Types
+{
+ [StructLayout(LayoutKind.Sequential)]
+ struct InternetConnectionStatus
+ {
+ public InternetConnectionType Type;
+ public byte WifiStrength;
+ public InternetConnectionState State;
+ }
+}
diff --git a/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/InternetConnectionType.cs b/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/InternetConnectionType.cs
new file mode 100644
index 00000000..af2bcfa1
--- /dev/null
+++ b/Ryujinx.HLE/HOS/Services/Nifm/StaticService/Types/InternetConnectionType.cs
@@ -0,0 +1,9 @@
+namespace Ryujinx.HLE.HOS.Services.Nifm.StaticService.Types
+{
+ enum InternetConnectionType : byte
+ {
+ Invalid = 0,
+ WiFi = 1,
+ Ethernet = 2,
+ }
+}
diff --git a/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs b/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs
index 490d0e8e..73f437e8 100644
--- a/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs
+++ b/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs
@@ -103,6 +103,50 @@ namespace Ryujinx.HLE.HOS.Services.Settings
return ResultCode.Success;
}
+ [Command(37)]
+ // GetSettingsItemValueSize(buffer<nn::settings::SettingsName, 0x19>, buffer<nn::settings::SettingsItemKey, 0x19>) -> u64
+ public ResultCode GetSettingsItemValueSize(ServiceCtx context)
+ {
+ long classPos = context.Request.PtrBuff[0].Position;
+ long classSize = context.Request.PtrBuff[0].Size;
+
+ long namePos = context.Request.PtrBuff[1].Position;
+ long nameSize = context.Request.PtrBuff[1].Size;
+
+ byte[] Class = context.Memory.ReadBytes(classPos, classSize);
+ byte[] name = context.Memory.ReadBytes(namePos, nameSize);
+
+ string askedSetting = Encoding.ASCII.GetString(Class).Trim('\0') + "!" + Encoding.ASCII.GetString(name).Trim('\0');
+
+ NxSettings.Settings.TryGetValue(askedSetting, out object nxSetting);
+
+ if (nxSetting != null)
+ {
+ ulong settingSize;
+
+ if (nxSetting is string stringValue)
+ {
+ settingSize = (ulong)stringValue.Length + 1;
+ }
+ else if (nxSetting is int)
+ {
+ settingSize = sizeof(int);
+ }
+ else if (nxSetting is bool)
+ {
+ settingSize = 1;
+ }
+ else
+ {
+ throw new NotImplementedException(nxSetting.GetType().Name);
+ }
+
+ context.ResponseData.Write(settingSize);
+ }
+
+ return ResultCode.Success;
+ }
+
[Command(38)]
// GetSettingsItemValue(buffer<nn::settings::SettingsName, 0x19, 0x48>, buffer<nn::settings::SettingsItemKey, 0x19, 0x48>) -> (u64, buffer<unknown, 6, 0>)
public ResultCode GetSettingsItemValue(ServiceCtx context)