@ -6,13 +6,118 @@
# 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/btm/btm.h"
# include "core/hle/service/service.h"
# include "core/hle/service/sm/sm.h"
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 > {
public :
explicit BTM ( ) : ServiceFramework { " btm " } {
@ -116,6 +221,7 @@ void InstallInterfaces(SM::ServiceManager& sm) {
std : : make_shared < BTM > ( ) - > InstallAsService ( sm ) ;
std : : make_shared < BTM_DBG > ( ) - > InstallAsService ( sm ) ;
std : : make_shared < BTM_SYS > ( ) - > InstallAsService ( sm ) ;
std : : make_shared < BTM_USR > ( ) - > InstallAsService ( sm ) ;
}
} // namespace Service::BTM