bgtc: Update to 12.x and implement OpenTaskService

This commit is contained in:
Morph 2021-04-07 11:03:45 -04:00
parent 6af7bd02b2
commit 5ce0e127da
4 changed files with 36 additions and 1 deletions

View File

@ -212,6 +212,7 @@ void DebuggerBackend::Write(const Entry& entry) {
SUB(Service, ARP) \ SUB(Service, ARP) \
SUB(Service, BCAT) \ SUB(Service, BCAT) \
SUB(Service, BPC) \ SUB(Service, BPC) \
SUB(Service, BGTC) \
SUB(Service, BTDRV) \ SUB(Service, BTDRV) \
SUB(Service, BTM) \ SUB(Service, BTM) \
SUB(Service, Capture) \ SUB(Service, Capture) \

View File

@ -66,6 +66,7 @@ enum class Class : ClassType {
Service_ARP, ///< The ARP service Service_ARP, ///< The ARP service
Service_Audio, ///< The Audio (Audio control) service Service_Audio, ///< The Audio (Audio control) service
Service_BCAT, ///< The BCAT service Service_BCAT, ///< The BCAT service
Service_BGTC, ///< The BGTC (Background Task Controller) service
Service_BPC, ///< The BPC service Service_BPC, ///< The BPC service
Service_BTDRV, ///< The Bluetooth driver service Service_BTDRV, ///< The Bluetooth driver service
Service_BTM, ///< The BTM service Service_BTM, ///< The BTM service

View File

@ -2,11 +2,34 @@
// Licensed under GPLv2 or any later version // Licensed under GPLv2 or any later version
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include "common/logging/log.h"
#include "core/core.h"
#include "core/hle/ipc_helpers.h"
#include "core/hle/service/glue/bgtc.h" #include "core/hle/service/glue/bgtc.h"
namespace Service::Glue { namespace Service::Glue {
BGTC_T::BGTC_T(Core::System& system_) : ServiceFramework{system_, "bgtc:t"} { BGTC_T::BGTC_T(Core::System& system_) : ServiceFramework{system_, "bgtc:t"} {
// clang-format off
static const FunctionInfo functions[] = {
{100, &BGTC_T::OpenTaskService, "OpenTaskService"},
};
// clang-format on
RegisterHandlers(functions);
}
BGTC_T::~BGTC_T() = default;
void BGTC_T::OpenTaskService(Kernel::HLERequestContext& ctx) {
LOG_DEBUG(Service_BGTC, "called");
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
rb.Push(RESULT_SUCCESS);
rb.PushIpcInterface<ITaskService>(system);
}
ITaskService::ITaskService(Core::System& system_) : ServiceFramework{system_, "ITaskService"} {
// clang-format off // clang-format off
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
{1, nullptr, "NotifyTaskStarting"}, {1, nullptr, "NotifyTaskStarting"},
@ -20,16 +43,18 @@ BGTC_T::BGTC_T(Core::System& system_) : ServiceFramework{system_, "bgtc:t"} {
{13, nullptr, "UnscheduleTask"}, {13, nullptr, "UnscheduleTask"},
{14, nullptr, "GetScheduleEvent"}, {14, nullptr, "GetScheduleEvent"},
{15, nullptr, "SchedulePeriodicTask"}, {15, nullptr, "SchedulePeriodicTask"},
{16, nullptr, "Unknown16"},
{101, nullptr, "GetOperationMode"}, {101, nullptr, "GetOperationMode"},
{102, nullptr, "WillDisconnectNetworkWhenEnteringSleep"}, {102, nullptr, "WillDisconnectNetworkWhenEnteringSleep"},
{103, nullptr, "WillStayHalfAwakeInsteadSleep"}, {103, nullptr, "WillStayHalfAwakeInsteadSleep"},
{200, nullptr, "Unknown200"},
}; };
// clang-format on // clang-format on
RegisterHandlers(functions); RegisterHandlers(functions);
} }
BGTC_T::~BGTC_T() = default; ITaskService::~ITaskService() = default;
BGTC_SC::BGTC_SC(Core::System& system_) : ServiceFramework{system_, "bgtc:sc"} { BGTC_SC::BGTC_SC(Core::System& system_) : ServiceFramework{system_, "bgtc:sc"} {
// clang-format off // clang-format off

View File

@ -16,6 +16,14 @@ class BGTC_T final : public ServiceFramework<BGTC_T> {
public: public:
explicit BGTC_T(Core::System& system_); explicit BGTC_T(Core::System& system_);
~BGTC_T() override; ~BGTC_T() override;
void OpenTaskService(Kernel::HLERequestContext& ctx);
};
class ITaskService final : public ServiceFramework<ITaskService> {
public:
explicit ITaskService(Core::System& system_);
~ITaskService() override;
}; };
class BGTC_SC final : public ServiceFramework<BGTC_SC> { class BGTC_SC final : public ServiceFramework<BGTC_SC> {