mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-27 01:02:48 +01:00
Merge pull request #1711 from ogniK5377/bluetooth-lets-go
Added various bluetooth based cmds for palma
This commit is contained in:
commit
0149b4245c
2 changed files with 145 additions and 1 deletions
|
@ -2,12 +2,49 @@
|
||||||
// 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/hle/ipc_helpers.h"
|
||||||
|
#include "core/hle/kernel/event.h"
|
||||||
|
#include "core/hle/kernel/hle_ipc.h"
|
||||||
#include "core/hle/service/btdrv/btdrv.h"
|
#include "core/hle/service/btdrv/btdrv.h"
|
||||||
#include "core/hle/service/service.h"
|
#include "core/hle/service/service.h"
|
||||||
#include "core/hle/service/sm/sm.h"
|
#include "core/hle/service/sm/sm.h"
|
||||||
|
|
||||||
namespace Service::BtDrv {
|
namespace Service::BtDrv {
|
||||||
|
|
||||||
|
class Bt final : public ServiceFramework<Bt> {
|
||||||
|
public:
|
||||||
|
explicit Bt() : ServiceFramework{"bt"} {
|
||||||
|
// clang-format off
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, nullptr, "Unknown0"},
|
||||||
|
{1, nullptr, "Unknown1"},
|
||||||
|
{2, nullptr, "Unknown2"},
|
||||||
|
{3, nullptr, "Unknown3"},
|
||||||
|
{4, nullptr, "Unknown4"},
|
||||||
|
{5, nullptr, "Unknown5"},
|
||||||
|
{6, nullptr, "Unknown6"},
|
||||||
|
{7, nullptr, "Unknown7"},
|
||||||
|
{8, nullptr, "Unknown8"},
|
||||||
|
{9, &Bt::RegisterEvent, "RegisterEvent"},
|
||||||
|
};
|
||||||
|
// clang-format on
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void RegisterEvent(Kernel::HLERequestContext& ctx) {
|
||||||
|
auto& kernel = Core::System::GetInstance().Kernel();
|
||||||
|
register_event =
|
||||||
|
Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "BT:RegisterEvent");
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2, 1};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.PushCopyObjects(register_event);
|
||||||
|
LOG_WARNING(Service_BTM, "(STUBBED) called");
|
||||||
|
}
|
||||||
|
Kernel::SharedPtr<Kernel::Event> register_event;
|
||||||
|
};
|
||||||
|
|
||||||
class BtDrv final : public ServiceFramework<BtDrv> {
|
class BtDrv final : public ServiceFramework<BtDrv> {
|
||||||
public:
|
public:
|
||||||
explicit BtDrv() : ServiceFramework{"btdrv"} {
|
explicit BtDrv() : ServiceFramework{"btdrv"} {
|
||||||
|
@ -67,6 +104,7 @@ public:
|
||||||
|
|
||||||
void InstallInterfaces(SM::ServiceManager& sm) {
|
void InstallInterfaces(SM::ServiceManager& sm) {
|
||||||
std::make_shared<BtDrv>()->InstallAsService(sm);
|
std::make_shared<BtDrv>()->InstallAsService(sm);
|
||||||
|
std::make_shared<Bt>()->InstallAsService(sm);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Service::BtDrv
|
} // namespace Service::BtDrv
|
||||||
|
|
|
@ -6,13 +6,118 @@
|
||||||
|
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "core/hle/ipc_helpers.h"
|
#include "core/hle/ipc_helpers.h"
|
||||||
|
#include "core/hle/kernel/event.h"
|
||||||
#include "core/hle/kernel/hle_ipc.h"
|
#include "core/hle/kernel/hle_ipc.h"
|
||||||
#include "core/hle/service/btm/btm.h"
|
#include "core/hle/service/btm/btm.h"
|
||||||
#include "core/hle/service/service.h"
|
#include "core/hle/service/service.h"
|
||||||
#include "core/hle/service/sm/sm.h"
|
|
||||||
|
|
||||||
namespace Service::BTM {
|
namespace Service::BTM {
|
||||||
|
|
||||||
|
class IBtmUserCore final : public ServiceFramework<IBtmUserCore> {
|
||||||
|
public:
|
||||||
|
explicit IBtmUserCore() : ServiceFramework{"IBtmUserCore"} {
|
||||||
|
// clang-format off
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, &IBtmUserCore::GetScanEvent, "GetScanEvent"},
|
||||||
|
{1, nullptr, "Unknown1"},
|
||||||
|
{2, nullptr, "Unknown2"},
|
||||||
|
{3, nullptr, "Unknown3"},
|
||||||
|
{4, nullptr, "Unknown4"},
|
||||||
|
{5, nullptr, "Unknown5"},
|
||||||
|
{6, nullptr, "Unknown6"},
|
||||||
|
{7, nullptr, "Unknown7"},
|
||||||
|
{8, nullptr, "Unknown8"},
|
||||||
|
{9, nullptr, "Unknown9"},
|
||||||
|
{10, nullptr, "Unknown10"},
|
||||||
|
{17, &IBtmUserCore::GetConnectionEvent, "GetConnectionEvent"},
|
||||||
|
{18, nullptr, "Unknown18"},
|
||||||
|
{19, nullptr, "Unknown19"},
|
||||||
|
{20, nullptr, "Unknown20"},
|
||||||
|
{21, nullptr, "Unknown21"},
|
||||||
|
{22, nullptr, "Unknown22"},
|
||||||
|
{23, nullptr, "Unknown23"},
|
||||||
|
{24, nullptr, "Unknown24"},
|
||||||
|
{25, nullptr, "Unknown25"},
|
||||||
|
{26, &IBtmUserCore::GetDiscoveryEvent, "AcquireBleServiceDiscoveryEventImpl"},
|
||||||
|
{27, nullptr, "Unknown27"},
|
||||||
|
{28, nullptr, "Unknown28"},
|
||||||
|
{29, nullptr, "Unknown29"},
|
||||||
|
{30, nullptr, "Unknown30"},
|
||||||
|
{31, nullptr, "Unknown31"},
|
||||||
|
{32, nullptr, "Unknown32"},
|
||||||
|
{33, &IBtmUserCore::GetConfigEvent, "GetConfigEvent"},
|
||||||
|
{34, nullptr, "Unknown34"},
|
||||||
|
{35, nullptr, "Unknown35"},
|
||||||
|
{36, nullptr, "Unknown36"},
|
||||||
|
{37, nullptr, "Unknown37"},
|
||||||
|
};
|
||||||
|
// clang-format on
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void GetScanEvent(Kernel::HLERequestContext& ctx) {
|
||||||
|
auto& kernel = Core::System::GetInstance().Kernel();
|
||||||
|
scan_event =
|
||||||
|
Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IBtmUserCore:ScanEvent");
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2, 1};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.PushCopyObjects(scan_event);
|
||||||
|
LOG_WARNING(Service_BTM, "(STUBBED) called");
|
||||||
|
}
|
||||||
|
void GetConnectionEvent(Kernel::HLERequestContext& ctx) {
|
||||||
|
auto& kernel = Core::System::GetInstance().Kernel();
|
||||||
|
connection_event = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot,
|
||||||
|
"IBtmUserCore:ConnectionEvent");
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2, 1};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.PushCopyObjects(connection_event);
|
||||||
|
LOG_WARNING(Service_BTM, "(STUBBED) called");
|
||||||
|
}
|
||||||
|
void GetDiscoveryEvent(Kernel::HLERequestContext& ctx) {
|
||||||
|
auto& kernel = Core::System::GetInstance().Kernel();
|
||||||
|
service_discovery =
|
||||||
|
Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IBtmUserCore:Discovery");
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2, 1};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.PushCopyObjects(service_discovery);
|
||||||
|
LOG_WARNING(Service_BTM, "(STUBBED) called");
|
||||||
|
}
|
||||||
|
void GetConfigEvent(Kernel::HLERequestContext& ctx) {
|
||||||
|
auto& kernel = Core::System::GetInstance().Kernel();
|
||||||
|
config_event =
|
||||||
|
Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IBtmUserCore:ConfigEvent");
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2, 1};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.PushCopyObjects(config_event);
|
||||||
|
LOG_WARNING(Service_BTM, "(STUBBED) called");
|
||||||
|
}
|
||||||
|
Kernel::SharedPtr<Kernel::Event> scan_event;
|
||||||
|
Kernel::SharedPtr<Kernel::Event> connection_event;
|
||||||
|
Kernel::SharedPtr<Kernel::Event> service_discovery;
|
||||||
|
Kernel::SharedPtr<Kernel::Event> config_event;
|
||||||
|
};
|
||||||
|
|
||||||
|
class BTM_USR final : public ServiceFramework<BTM_USR> {
|
||||||
|
public:
|
||||||
|
explicit BTM_USR() : ServiceFramework{"btm:u"} {
|
||||||
|
// clang-format off
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, &BTM_USR::GetCoreImpl, "GetCoreImpl"},
|
||||||
|
};
|
||||||
|
// clang-format on
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void GetCoreImpl(Kernel::HLERequestContext& ctx) {
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.PushIpcInterface<IBtmUserCore>();
|
||||||
|
LOG_DEBUG(Service_BTM, "called");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class BTM final : public ServiceFramework<BTM> {
|
class BTM final : public ServiceFramework<BTM> {
|
||||||
public:
|
public:
|
||||||
explicit BTM() : ServiceFramework{"btm"} {
|
explicit BTM() : ServiceFramework{"btm"} {
|
||||||
|
@ -116,6 +221,7 @@ void InstallInterfaces(SM::ServiceManager& sm) {
|
||||||
std::make_shared<BTM>()->InstallAsService(sm);
|
std::make_shared<BTM>()->InstallAsService(sm);
|
||||||
std::make_shared<BTM_DBG>()->InstallAsService(sm);
|
std::make_shared<BTM_DBG>()->InstallAsService(sm);
|
||||||
std::make_shared<BTM_SYS>()->InstallAsService(sm);
|
std::make_shared<BTM_SYS>()->InstallAsService(sm);
|
||||||
|
std::make_shared<BTM_USR>()->InstallAsService(sm);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Service::BTM
|
} // namespace Service::BTM
|
||||||
|
|
Loading…
Reference in a new issue