|
|
@ -129,6 +129,9 @@ static_assert(sizeof(NifmNetworkProfileData) == 0x18E, |
|
|
"NifmNetworkProfileData has incorrect size."); |
|
|
"NifmNetworkProfileData has incorrect size."); |
|
|
#pragma pack(pop)
|
|
|
#pragma pack(pop)
|
|
|
|
|
|
|
|
|
|
|
|
constexpr Result ResultPendingConnection{ErrorModule::NIFM, 111}; |
|
|
|
|
|
constexpr Result ResultNetworkCommunicationDisabled{ErrorModule::NIFM, 1111}; |
|
|
|
|
|
|
|
|
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"} { |
|
|
@ -192,6 +195,10 @@ private: |
|
|
void Submit(Kernel::HLERequestContext& ctx) { |
|
|
void Submit(Kernel::HLERequestContext& ctx) { |
|
|
LOG_WARNING(Service_NIFM, "(STUBBED) called"); |
|
|
LOG_WARNING(Service_NIFM, "(STUBBED) called"); |
|
|
|
|
|
|
|
|
|
|
|
if (state == RequestState::NotSubmitted) { |
|
|
|
|
|
UpdateState(RequestState::Pending); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
rb.Push(ResultSuccess); |
|
|
rb.Push(ResultSuccess); |
|
|
} |
|
|
} |
|
|
@ -201,19 +208,32 @@ private: |
|
|
|
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 3}; |
|
|
IPC::ResponseBuilder rb{ctx, 3}; |
|
|
rb.Push(ResultSuccess); |
|
|
rb.Push(ResultSuccess); |
|
|
|
|
|
|
|
|
if (Network::GetHostIPv4Address().has_value()) { |
|
|
|
|
|
rb.PushEnum(RequestState::Connected); |
|
|
|
|
|
} else { |
|
|
|
|
|
rb.PushEnum(RequestState::NotSubmitted); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
rb.PushEnum(state); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void GetResult(Kernel::HLERequestContext& ctx) { |
|
|
void GetResult(Kernel::HLERequestContext& ctx) { |
|
|
LOG_WARNING(Service_NIFM, "(STUBBED) called"); |
|
|
LOG_WARNING(Service_NIFM, "(STUBBED) called"); |
|
|
|
|
|
|
|
|
|
|
|
const auto result = [this] { |
|
|
|
|
|
const auto has_connection = Network::GetHostIPv4Address().has_value(); |
|
|
|
|
|
switch (state) { |
|
|
|
|
|
case RequestState::NotSubmitted: |
|
|
|
|
|
return has_connection ? ResultSuccess : ResultNetworkCommunicationDisabled; |
|
|
|
|
|
case RequestState::Pending: |
|
|
|
|
|
if (has_connection) { |
|
|
|
|
|
UpdateState(RequestState::Connected); |
|
|
|
|
|
} else { |
|
|
|
|
|
UpdateState(RequestState::Error); |
|
|
|
|
|
} |
|
|
|
|
|
return ResultPendingConnection; |
|
|
|
|
|
case RequestState::Connected: |
|
|
|
|
|
default: |
|
|
|
|
|
return ResultSuccess; |
|
|
|
|
|
} |
|
|
|
|
|
}(); |
|
|
|
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
rb.Push(ResultSuccess); |
|
|
|
|
|
|
|
|
rb.Push(result); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void GetSystemEventReadableHandles(Kernel::HLERequestContext& ctx) { |
|
|
void GetSystemEventReadableHandles(Kernel::HLERequestContext& ctx) { |
|
|
@ -252,8 +272,15 @@ private: |
|
|
rb.Push<u32>(0); |
|
|
rb.Push<u32>(0); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void UpdateState(RequestState new_state) { |
|
|
|
|
|
state = new_state; |
|
|
|
|
|
event1->Signal(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
KernelHelpers::ServiceContext service_context; |
|
|
KernelHelpers::ServiceContext service_context; |
|
|
|
|
|
|
|
|
|
|
|
RequestState state; |
|
|
|
|
|
|
|
|
Kernel::KEvent* event1; |
|
|
Kernel::KEvent* event1; |
|
|
Kernel::KEvent* event2; |
|
|
Kernel::KEvent* event2; |
|
|
}; |
|
|
}; |
|
|
|