Browse Source

Service: am: enhance UnpopInData, GetHdcpAuthenticationState and GetHdcpAuthenticationStateChangeEvent

Thanks to Sudachi and Torzu for some help and referance.
JPikachu 10 months ago
committed by swurl
parent
commit
d94c1e87b0
No known key found for this signature in database GPG Key ID: A5A7629F109C8FD1
  1. 6
      src/core/hle/service/am/lifecycle_manager.cpp
  2. 3
      src/core/hle/service/am/lifecycle_manager.h
  3. 1
      src/core/hle/service/am/process_creation.cpp
  4. 17
      src/core/hle/service/am/service/common_state_getter.cpp
  5. 2
      src/core/hle/service/am/service/common_state_getter.h
  6. 7
      src/core/hle/service/am/service/library_applet_self_accessor.cpp
  7. 1
      src/core/hle/service/am/service/library_applet_self_accessor.h

6
src/core/hle/service/am/lifecycle_manager.cpp

@ -9,7 +9,7 @@ namespace Service::AM {
LifecycleManager::LifecycleManager(Core::System& system, KernelHelpers::ServiceContext& context,
bool is_application)
: m_system_event(context), m_operation_mode_changed_system_event(context),
m_is_application(is_application) {}
m_hdcp_state_changed_event(context), m_is_application(is_application) {}
LifecycleManager::~LifecycleManager() = default;
@ -21,6 +21,10 @@ Event& LifecycleManager::GetOperationModeChangedSystemEvent() {
return m_operation_mode_changed_system_event;
}
Event& LifecycleManager::GetHDCPStateChangedEvent() {
return m_hdcp_state_changed_event;
}
void LifecycleManager::PushUnorderedMessage(AppletMessage message) {
m_unordered_messages.push_back(message);
this->SignalSystemEventIfNeeded();

3
src/core/hle/service/am/lifecycle_manager.h

@ -42,6 +42,7 @@ public:
public:
Event& GetSystemEvent();
Event& GetOperationModeChangedSystemEvent();
Event& GetHDCPStateChangedEvent();
public:
bool IsApplication() {
@ -145,12 +146,14 @@ private:
private:
Event m_system_event;
Event m_operation_mode_changed_system_event;
Event m_hdcp_state_changed_event;
std::list<AppletMessage> m_unordered_messages{};
bool m_is_application{};
bool m_focus_state_changed_notification_enabled{true};
bool m_operation_mode_changed_notification_enabled{true};
bool m_hdcp_state_changed_notification_enabled{true};
bool m_performance_mode_changed_notification_enabled{true};
bool m_resume_notification_enabled{};

1
src/core/hle/service/am/process_creation.cpp

@ -106,6 +106,7 @@ std::unique_ptr<Process> CreateApplicationProcess(std::vector<u8>& out_control,
out_control = nacp.GetRawBytes();
} else {
out_control.resize(sizeof(FileSys::RawNACP));
std::fill(out_control.begin(), out_control.end(), 0);
}
auto& storage = system.GetContentProviderUnion();

17
src/core/hle/service/am/service/common_state_getter.cpp

@ -48,8 +48,8 @@ ICommonStateGetter::ICommonStateGetter(Core::System& system_, std::shared_ptr<Ap
{59, nullptr, "SetVrPositionForDebug"},
{60, D<&ICommonStateGetter::GetDefaultDisplayResolution>, "GetDefaultDisplayResolution"},
{61, D<&ICommonStateGetter::GetDefaultDisplayResolutionChangeEvent>, "GetDefaultDisplayResolutionChangeEvent"},
{62, nullptr, "GetHdcpAuthenticationState"},
{63, nullptr, "GetHdcpAuthenticationStateChangeEvent"},
{62, D<&ICommonStateGetter::GetHdcpAuthenticationState>, "GetHdcpAuthenticationState"},
{63, D<&ICommonStateGetter::GetHdcpAuthenticationStateChangeEvent>, "GetHdcpAuthenticationStateChangeEvent"},
{64, nullptr, "SetTvPowerStateMatchingMode"},
{65, nullptr, "GetApplicationIdByContentActionName"},
{66, &ICommonStateGetter::SetCpuBoostMode, "SetCpuBoostMode"},
@ -140,6 +140,19 @@ Result ICommonStateGetter::GetDefaultDisplayResolutionChangeEvent(
R_SUCCEED();
}
Result ICommonStateGetter::GetHdcpAuthenticationState(Out<s32> out_state) {
LOG_DEBUG(Service_AM, "called");
*out_state = 1;
R_SUCCEED();
}
Result ICommonStateGetter::GetHdcpAuthenticationStateChangeEvent(
OutCopyHandle<Kernel::KReadableEvent> out_event) {
LOG_DEBUG(Service_AM, "called");
*out_event = m_applet->lifecycle_manager.GetHDCPStateChangedEvent().GetHandle();
R_SUCCEED();
}
Result ICommonStateGetter::GetOperationMode(Out<OperationMode> out_operation_mode) {
const bool use_docked_mode{Settings::IsDockedMode()};
LOG_DEBUG(Service_AM, "called, use_docked_mode={}", use_docked_mode);

2
src/core/hle/service/am/service/common_state_getter.h

@ -35,6 +35,8 @@ private:
Result GetWriterLockAccessorEx(Out<SharedPointer<ILockAccessor>> out_lock_accessor,
u32 button_type);
Result GetDefaultDisplayResolutionChangeEvent(OutCopyHandle<Kernel::KReadableEvent> out_event);
Result GetHdcpAuthenticationState(Out<s32> out_state);
Result GetHdcpAuthenticationStateChangeEvent(OutCopyHandle<Kernel::KReadableEvent> out_event);
Result GetOperationMode(Out<OperationMode> out_operation_mode);
Result GetPerformanceMode(Out<APM::PerformanceMode> out_performance_mode);
Result GetCradleFwVersion(OutArray<uint32_t, 4> out_version);

7
src/core/hle/service/am/service/library_applet_self_accessor.cpp

@ -63,7 +63,7 @@ ILibraryAppletSelfAccessor::ILibraryAppletSelfAccessor(Core::System& system_,
{19, D<&ILibraryAppletSelfAccessor::GetDesirableKeyboardLayout>, "GetDesirableKeyboardLayout"},
{20, nullptr, "PopExtraStorage"},
{25, nullptr, "GetPopExtraStorageEvent"},
{30, nullptr, "UnpopInData"},
{30, D<&ILibraryAppletSelfAccessor::UnpopInData>, "UnpopInData"},
{31, nullptr, "UnpopExtraStorage"},
{40, nullptr, "GetIndirectLayerProducerHandle"},
{50, D<&ILibraryAppletSelfAccessor::ReportVisibleError>, "ReportVisibleError"},
@ -223,6 +223,11 @@ Result ILibraryAppletSelfAccessor::ReportVisibleErrorWithErrorContext(
R_SUCCEED();
}
Result ILibraryAppletSelfAccessor::UnpopInData() {
LOG_WARNING(Service_AM, "(STUBBED) called");
R_SUCCEED();
}
Result ILibraryAppletSelfAccessor::GetMainAppletApplicationDesiredLanguage(
Out<u64> out_desired_language) {
// FIXME: this is copied from IApplicationFunctions::GetDesiredLanguage

1
src/core/hle/service/am/service/library_applet_self_accessor.h

@ -69,6 +69,7 @@ private:
Result ReportVisibleError(ErrorCode error_code);
Result ReportVisibleErrorWithErrorContext(
ErrorCode error_code, InLargeData<ErrorContext, BufferAttr_HipcMapAlias> error_context);
Result UnpopInData();
Result GetMainAppletApplicationDesiredLanguage(Out<u64> out_desired_language);
Result GetCurrentApplicationId(Out<u64> out_application_id);
Result GetMainAppletAvailableUsers(Out<bool> out_can_select_any_user, Out<s32> out_users_count,

Loading…
Cancel
Save