From 9bf745524d3198e74f8bdc8e9aba389a91b2ff6c Mon Sep 17 00:00:00 2001 From: yellows8 Date: Sat, 15 Feb 2020 12:32:50 -0500 Subject: [PATCH] nifm: Added NifmClientId and nifmGetClientId/nifmIsAnyInternetRequestAccepted. --- nx/include/switch/services/nifm.h | 17 +++++++++++++++++ nx/source/services/nifm.c | 19 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/nx/include/switch/services/nifm.h b/nx/include/switch/services/nifm.h index 04d0cc7a..04956209 100644 --- a/nx/include/switch/services/nifm.h +++ b/nx/include/switch/services/nifm.h @@ -28,6 +28,11 @@ typedef enum { NifmInternetConnectionStatus_Connected = 4, ///< Internet is connected. } NifmInternetConnectionStatus; +/// ClientId +typedef struct { + u32 id; ///< ClientId +} NifmClientId; + /// Initialize nifm. This is used automatically by gethostid(). Result nifmInitialize(NifmServiceType service_type); @@ -40,6 +45,11 @@ Service* nifmGetServiceSession_StaticService(void); /// Gets the Service object for IGeneralService. Service* nifmGetServiceSession_GeneralService(void); +/** + * @brief GetClientId + */ +NifmClientId nifmGetClientId(void); + Result nifmGetCurrentIpAddress(u32* out); /** @@ -56,6 +66,13 @@ Result nifmIsWirelessCommunicationEnabled(bool* out); Result nifmGetInternetConnectionStatus(NifmInternetConnectionType* connectionType, u32* wifiStrength, NifmInternetConnectionStatus* connectionStatus); Result nifmIsEthernetCommunicationEnabled(bool* out); + +/** + * @brief IsAnyInternetRequestAccepted + * @param[in] id \ref NifmClientId + */ +bool nifmIsAnyInternetRequestAccepted(NifmClientId id); + Result nifmIsAnyForegroundRequestAccepted(bool* out); Result nifmPutToSleep(void); Result nifmWakeUp(void); diff --git a/nx/source/services/nifm.c b/nx/source/services/nifm.c index d03cbbf0..fcb63e20 100644 --- a/nx/source/services/nifm.c +++ b/nx/source/services/nifm.c @@ -105,6 +105,16 @@ static Result _nifmCreateGeneralService(Service* srv_out) { ); } +NifmClientId nifmGetClientId(void) { + NifmClientId id={0}; + Result rc = serviceDispatch(&g_nifmIGS, 1, + .buffer_attrs = { SfBufferAttr_FixedSize | SfBufferAttr_HipcPointer | SfBufferAttr_Out }, + .buffers = { { &id, sizeof(id) } }, + ); + if (R_FAILED(rc)) id.id = 0; + return id; +} + Result nifmGetCurrentIpAddress(u32* out) { return _nifmCmdNoInOutU32(&g_nifmIGS, out, 12); } @@ -141,6 +151,15 @@ Result nifmIsEthernetCommunicationEnabled(bool* out) { return _nifmCmdNoInOutBool(&g_nifmIGS, out, 20); } +bool nifmIsAnyInternetRequestAccepted(NifmClientId id) { + u8 tmp=0; + Result rc = serviceDispatchOut(&g_nifmIGS, 21, tmp, + .buffer_attrs = { SfBufferAttr_FixedSize | SfBufferAttr_HipcPointer | SfBufferAttr_In }, + .buffers = { { &id, sizeof(id) } }, + ); + return R_SUCCEEDED(rc) ? tmp & 1 : 0; +} + Result nifmIsAnyForegroundRequestAccepted(bool* out) { return _nifmCmdNoInOutBool(&g_nifmIGS, out, 22); }