mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-10-31 23:06:43 +08:00 
			
		
		
		
	service: btm: Implement function needed by QLaunch
This commit is contained in:
		
							parent
							
								
									9c0724b270
								
							
						
					
					
						commit
						110969e207
					
				| @ -7,22 +7,22 @@ namespace Service::BTM { | ||||
| 
 | ||||
| IBtmDebug::IBtmDebug(Core::System& system_) : ServiceFramework{system_, "btm:dbg"} { | ||||
|     // clang-format off
 | ||||
|         static const FunctionInfo functions[] = { | ||||
|             {0, nullptr, "AcquireDiscoveryEvent"}, | ||||
|             {1, nullptr, "StartDiscovery"}, | ||||
|             {2, nullptr, "CancelDiscovery"}, | ||||
|             {3, nullptr, "GetDeviceProperty"}, | ||||
|             {4, nullptr, "CreateBond"}, | ||||
|             {5, nullptr, "CancelBond"}, | ||||
|             {6, nullptr, "SetTsiMode"}, | ||||
|             {7, nullptr, "GeneralTest"}, | ||||
|             {8, nullptr, "HidConnect"}, | ||||
|             {9, nullptr, "GeneralGet"}, | ||||
|             {10, nullptr, "GetGattClientDisconnectionReason"}, | ||||
|             {11, nullptr, "GetBleConnectionParameter"}, | ||||
|             {12, nullptr, "GetBleConnectionParameterRequest"}, | ||||
|             {13, nullptr, "Unknown13"}, | ||||
|         }; | ||||
|     static const FunctionInfo functions[] = { | ||||
|         {0, nullptr, "AcquireDiscoveryEvent"}, | ||||
|         {1, nullptr, "StartDiscovery"}, | ||||
|         {2, nullptr, "CancelDiscovery"}, | ||||
|         {3, nullptr, "GetDeviceProperty"}, | ||||
|         {4, nullptr, "CreateBond"}, | ||||
|         {5, nullptr, "CancelBond"}, | ||||
|         {6, nullptr, "SetTsiMode"}, | ||||
|         {7, nullptr, "GeneralTest"}, | ||||
|         {8, nullptr, "HidConnect"}, | ||||
|         {9, nullptr, "GeneralGet"}, | ||||
|         {10, nullptr, "GetGattClientDisconnectionReason"}, | ||||
|         {11, nullptr, "GetBleConnectionParameter"}, | ||||
|         {12, nullptr, "GetBleConnectionParameterRequest"}, | ||||
|         {13, nullptr, "Unknown13"}, | ||||
|     }; | ||||
|     // clang-format on
 | ||||
| 
 | ||||
|     RegisterHandlers(functions); | ||||
|  | ||||
| @ -5,16 +5,15 @@ | ||||
| #include "core/hle/service/btm/btm_system.h" | ||||
| #include "core/hle/service/btm/btm_system_core.h" | ||||
| #include "core/hle/service/cmif_serialization.h" | ||||
| #include "core/hle/service/ipc_helpers.h" | ||||
| #include "core/hle/service/service.h" | ||||
| 
 | ||||
| namespace Service::BTM { | ||||
| 
 | ||||
| IBtmSystem::IBtmSystem(Core::System& system_) : ServiceFramework{system_, "btm:sys"} { | ||||
|     // clang-format off
 | ||||
|         static const FunctionInfo functions[] = { | ||||
|             {0, C<&IBtmSystem::GetCore>, "GetCore"}, | ||||
|         }; | ||||
|     static const FunctionInfo functions[] = { | ||||
|         {0, C<&IBtmSystem::GetCore>, "GetCore"}, | ||||
|     }; | ||||
|     // clang-format on
 | ||||
| 
 | ||||
|     RegisterHandlers(functions); | ||||
|  | ||||
| @ -4,47 +4,55 @@ | ||||
| #include "common/logging/log.h" | ||||
| #include "core/hle/service/btm/btm_system_core.h" | ||||
| #include "core/hle/service/cmif_serialization.h" | ||||
| #include "core/hle/service/ipc_helpers.h" | ||||
| #include "core/hle/service/server_manager.h" | ||||
| #include "core/hle/service/service.h" | ||||
| #include "core/hle/service/set/system_settings_server.h" | ||||
| #include "core/hle/service/sm/sm.h" | ||||
| 
 | ||||
| namespace Service::BTM { | ||||
| 
 | ||||
| IBtmSystemCore::IBtmSystemCore(Core::System& system_) | ||||
|     : ServiceFramework{system_, "IBtmSystemCore"} { | ||||
|     : ServiceFramework{system_, "IBtmSystemCore"}, service_context{system_, "IBtmSystemCore"} { | ||||
|     // clang-format off
 | ||||
|         static const FunctionInfo functions[] = { | ||||
|             {0, C<&IBtmSystemCore::StartGamepadPairing>, "StartGamepadPairing"}, | ||||
|             {1, C<&IBtmSystemCore::CancelGamepadPairing>, "CancelGamepadPairing"}, | ||||
|             {2, nullptr, "ClearGamepadPairingDatabase"}, | ||||
|             {3, nullptr, "GetPairedGamepadCount"}, | ||||
|             {4, nullptr, "EnableRadio"}, | ||||
|             {5, nullptr, "DisableRadio"}, | ||||
|             {6, C<&IBtmSystemCore::IsRadioEnabled>, "IsRadioEnabled"}, | ||||
|             {7, nullptr, "AcquireRadioEvent"}, | ||||
|             {8, nullptr, "AcquireGamepadPairingEvent"}, | ||||
|             {9, nullptr, "IsGamepadPairingStarted"}, | ||||
|             {10, nullptr, "StartAudioDeviceDiscovery"}, | ||||
|             {11, nullptr, "StopAudioDeviceDiscovery"}, | ||||
|             {12, nullptr, "IsDiscoveryingAudioDevice"}, | ||||
|             {13, nullptr, "GetDiscoveredAudioDevice"}, | ||||
|             {14, nullptr, "AcquireAudioDeviceConnectionEvent"}, | ||||
|             {15, nullptr, "ConnectAudioDevice"}, | ||||
|             {16, nullptr, "IsConnectingAudioDevice"}, | ||||
|             {17, C<&IBtmSystemCore::GetConnectedAudioDevices>, "GetConnectedAudioDevices"}, | ||||
|             {18, nullptr, "DisconnectAudioDevice"}, | ||||
|             {19, nullptr, "AcquirePairedAudioDeviceInfoChangedEvent"}, | ||||
|             {20, C<&IBtmSystemCore::GetPairedAudioDevices>, "GetPairedAudioDevices"}, | ||||
|             {21, nullptr, "RemoveAudioDevicePairing"}, | ||||
|             {22, C<&IBtmSystemCore::RequestAudioDeviceConnectionRejection>, "RequestAudioDeviceConnectionRejection"}, | ||||
|             {23, C<&IBtmSystemCore::CancelAudioDeviceConnectionRejection>, "CancelAudioDeviceConnectionRejection"} | ||||
|         }; | ||||
|     static const FunctionInfo functions[] = { | ||||
|         {0, C<&IBtmSystemCore::StartGamepadPairing>, "StartGamepadPairing"}, | ||||
|         {1, C<&IBtmSystemCore::CancelGamepadPairing>, "CancelGamepadPairing"}, | ||||
|         {2, nullptr, "ClearGamepadPairingDatabase"}, | ||||
|         {3, nullptr, "GetPairedGamepadCount"}, | ||||
|         {4, C<&IBtmSystemCore::EnableRadio>, "EnableRadio"}, | ||||
|         {5, C<&IBtmSystemCore::DisableRadio>, "DisableRadio"}, | ||||
|         {6, C<&IBtmSystemCore::IsRadioEnabled>, "IsRadioEnabled"}, | ||||
|         {7, C<&IBtmSystemCore::AcquireRadioEvent>, "AcquireRadioEvent"}, | ||||
|         {8, nullptr, "AcquireGamepadPairingEvent"}, | ||||
|         {9, nullptr, "IsGamepadPairingStarted"}, | ||||
|         {10, nullptr, "StartAudioDeviceDiscovery"}, | ||||
|         {11, nullptr, "StopAudioDeviceDiscovery"}, | ||||
|         {12, nullptr, "IsDiscoveryingAudioDevice"}, | ||||
|         {13, nullptr, "GetDiscoveredAudioDevice"}, | ||||
|         {14, C<&IBtmSystemCore::AcquireAudioDeviceConnectionEvent>, "AcquireAudioDeviceConnectionEvent"}, | ||||
|         {15, nullptr, "ConnectAudioDevice"}, | ||||
|         {16, nullptr, "IsConnectingAudioDevice"}, | ||||
|         {17, C<&IBtmSystemCore::GetConnectedAudioDevices>, "GetConnectedAudioDevices"}, | ||||
|         {18, nullptr, "DisconnectAudioDevice"}, | ||||
|         {19, nullptr, "AcquirePairedAudioDeviceInfoChangedEvent"}, | ||||
|         {20, C<&IBtmSystemCore::GetPairedAudioDevices>, "GetPairedAudioDevices"}, | ||||
|         {21, nullptr, "RemoveAudioDevicePairing"}, | ||||
|         {22, C<&IBtmSystemCore::RequestAudioDeviceConnectionRejection>, "RequestAudioDeviceConnectionRejection"}, | ||||
|         {23, C<&IBtmSystemCore::CancelAudioDeviceConnectionRejection>, "CancelAudioDeviceConnectionRejection"} | ||||
|     }; | ||||
|     // clang-format on
 | ||||
| 
 | ||||
|     RegisterHandlers(functions); | ||||
|     radio_event = service_context.CreateEvent("IBtmSystemCore::RadioEvent"); | ||||
|     audio_device_connection_event = | ||||
|         service_context.CreateEvent("IBtmSystemCore::AudioDeviceConnectionEvent"); | ||||
| 
 | ||||
|     m_set_sys = | ||||
|         system.ServiceManager().GetService<Service::Set::ISystemSettingsServer>("set:sys", true); | ||||
| } | ||||
| 
 | ||||
| IBtmSystemCore::~IBtmSystemCore() = default; | ||||
| IBtmSystemCore::~IBtmSystemCore() { | ||||
|     service_context.CloseEvent(radio_event); | ||||
|     service_context.CloseEvent(audio_device_connection_event); | ||||
| } | ||||
| 
 | ||||
| Result IBtmSystemCore::StartGamepadPairing() { | ||||
|     LOG_WARNING(Service_BTM, "(STUBBED) called"); | ||||
| @ -56,10 +64,37 @@ Result IBtmSystemCore::CancelGamepadPairing() { | ||||
|     R_SUCCEED(); | ||||
| } | ||||
| 
 | ||||
| Result IBtmSystemCore::IsRadioEnabled(Out<bool> out_is_enabled) { | ||||
|     LOG_DEBUG(Service_BTM, "(STUBBED) called"); // Spams a lot when controller applet is running
 | ||||
| Result IBtmSystemCore::EnableRadio() { | ||||
|     LOG_DEBUG(Service_BTM, "called"); | ||||
| 
 | ||||
|     *out_is_enabled = true; | ||||
|     R_RETURN(m_set_sys->SetBluetoothEnableFlag(true)); | ||||
| } | ||||
| Result IBtmSystemCore::DisableRadio() { | ||||
|     LOG_DEBUG(Service_BTM, "called"); | ||||
| 
 | ||||
|     R_RETURN(m_set_sys->SetBluetoothEnableFlag(false)); | ||||
| } | ||||
| 
 | ||||
| Result IBtmSystemCore::IsRadioEnabled(Out<bool> out_is_enabled) { | ||||
|     LOG_DEBUG(Service_BTM, "called"); | ||||
| 
 | ||||
|     R_RETURN(m_set_sys->GetBluetoothEnableFlag(out_is_enabled)); | ||||
| } | ||||
| 
 | ||||
| Result IBtmSystemCore::AcquireRadioEvent(Out<bool> out_is_valid, | ||||
|                                          OutCopyHandle<Kernel::KReadableEvent> out_event) { | ||||
|     LOG_WARNING(Service_BTM, "(STUBBED) called"); | ||||
| 
 | ||||
|     *out_is_valid = true; | ||||
|     *out_event = &radio_event->GetReadableEvent(); | ||||
|     R_SUCCEED(); | ||||
| } | ||||
| 
 | ||||
| Result IBtmSystemCore::AcquireAudioDeviceConnectionEvent( | ||||
|     OutCopyHandle<Kernel::KReadableEvent> out_event) { | ||||
|     LOG_WARNING(Service_BTM, "(STUBBED) called"); | ||||
| 
 | ||||
|     *out_event = &audio_device_connection_event->GetReadableEvent(); | ||||
|     R_SUCCEED(); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -4,12 +4,22 @@ | ||||
| #pragma once | ||||
| 
 | ||||
| #include "core/hle/service/cmif_types.h" | ||||
| #include "core/hle/service/kernel_helpers.h" | ||||
| #include "core/hle/service/service.h" | ||||
| 
 | ||||
| namespace Kernel { | ||||
| class KEvent; | ||||
| class KReadableEvent; | ||||
| } // namespace Kernel
 | ||||
| 
 | ||||
| namespace Core { | ||||
| class System; | ||||
| } | ||||
| 
 | ||||
| namespace Service::Set { | ||||
| class ISystemSettingsServer; | ||||
| } | ||||
| 
 | ||||
| namespace Service::BTM { | ||||
| 
 | ||||
| class IBtmSystemCore final : public ServiceFramework<IBtmSystemCore> { | ||||
| @ -20,8 +30,15 @@ public: | ||||
| private: | ||||
|     Result StartGamepadPairing(); | ||||
|     Result CancelGamepadPairing(); | ||||
|     Result EnableRadio(); | ||||
|     Result DisableRadio(); | ||||
|     Result IsRadioEnabled(Out<bool> out_is_enabled); | ||||
| 
 | ||||
|     Result AcquireRadioEvent(Out<bool> out_is_valid, | ||||
|                              OutCopyHandle<Kernel::KReadableEvent> out_event); | ||||
| 
 | ||||
|     Result AcquireAudioDeviceConnectionEvent(OutCopyHandle<Kernel::KReadableEvent> out_event); | ||||
| 
 | ||||
|     Result GetConnectedAudioDevices( | ||||
|         Out<s32> out_count, | ||||
|         OutArray<std::array<u8, 0xFF>, BufferAttr_HipcPointer> out_audio_devices); | ||||
| @ -32,6 +49,12 @@ private: | ||||
| 
 | ||||
|     Result RequestAudioDeviceConnectionRejection(ClientAppletResourceUserId aruid); | ||||
|     Result CancelAudioDeviceConnectionRejection(ClientAppletResourceUserId aruid); | ||||
| 
 | ||||
|     KernelHelpers::ServiceContext service_context; | ||||
| 
 | ||||
|     Kernel::KEvent* radio_event; | ||||
|     Kernel::KEvent* audio_device_connection_event; | ||||
|     std::shared_ptr<Service::Set::ISystemSettingsServer> m_set_sys; | ||||
| }; | ||||
| 
 | ||||
| } // namespace Service::BTM
 | ||||
|  | ||||
| @ -5,16 +5,14 @@ | ||||
| #include "core/hle/service/btm/btm_user.h" | ||||
| #include "core/hle/service/btm/btm_user_core.h" | ||||
| #include "core/hle/service/cmif_serialization.h" | ||||
| #include "core/hle/service/ipc_helpers.h" | ||||
| #include "core/hle/service/service.h" | ||||
| 
 | ||||
| namespace Service::BTM { | ||||
| 
 | ||||
| IBtmUser::IBtmUser(Core::System& system_) : ServiceFramework{system_, "btm:u"} { | ||||
|     // clang-format off
 | ||||
|         static const FunctionInfo functions[] = { | ||||
|             {0, C<&IBtmUser::GetCore>, "GetCore"}, | ||||
|         }; | ||||
|     static const FunctionInfo functions[] = { | ||||
|         {0, C<&IBtmUser::GetCore>, "GetCore"}, | ||||
|     }; | ||||
|     // clang-format on
 | ||||
| 
 | ||||
|     RegisterHandlers(functions); | ||||
|  | ||||
| @ -8,49 +8,46 @@ | ||||
| #include "core/hle/kernel/k_event.h" | ||||
| #include "core/hle/service/btm/btm_user_core.h" | ||||
| #include "core/hle/service/cmif_serialization.h" | ||||
| #include "core/hle/service/ipc_helpers.h" | ||||
| #include "core/hle/service/server_manager.h" | ||||
| #include "core/hle/service/service.h" | ||||
| 
 | ||||
| namespace Service::BTM { | ||||
| 
 | ||||
| IBtmUserCore::IBtmUserCore(Core::System& system_) | ||||
|     : ServiceFramework{system_, "IBtmUserCore"}, service_context{system_, "IBtmUserCore"} { | ||||
|     // clang-format off
 | ||||
|         static const FunctionInfo functions[] = { | ||||
|             {0, C<&IBtmUserCore::AcquireBleScanEvent>, "AcquireBleScanEvent"}, | ||||
|             {1, nullptr, "GetBleScanFilterParameter"}, | ||||
|             {2, nullptr, "GetBleScanFilterParameter2"}, | ||||
|             {3, nullptr, "StartBleScanForGeneral"}, | ||||
|             {4, nullptr, "StopBleScanForGeneral"}, | ||||
|             {5, nullptr, "GetBleScanResultsForGeneral"}, | ||||
|             {6, nullptr, "StartBleScanForPaired"}, | ||||
|             {7, nullptr, "StopBleScanForPaired"}, | ||||
|             {8, nullptr, "StartBleScanForSmartDevice"}, | ||||
|             {9, nullptr, "StopBleScanForSmartDevice"}, | ||||
|             {10, nullptr, "GetBleScanResultsForSmartDevice"}, | ||||
|             {17, C<&IBtmUserCore::AcquireBleConnectionEvent>, "AcquireBleConnectionEvent"}, | ||||
|             {18, nullptr, "BleConnect"}, | ||||
|             {19, nullptr, "BleDisconnect"}, | ||||
|             {20, nullptr, "BleGetConnectionState"}, | ||||
|             {21, nullptr, "AcquireBlePairingEvent"}, | ||||
|             {22, nullptr, "BlePairDevice"}, | ||||
|             {23, nullptr, "BleUnPairDevice"}, | ||||
|             {24, nullptr, "BleUnPairDevice2"}, | ||||
|             {25, nullptr, "BleGetPairedDevices"}, | ||||
|             {26, C<&IBtmUserCore::AcquireBleServiceDiscoveryEvent>, "AcquireBleServiceDiscoveryEvent"}, | ||||
|             {27, nullptr, "GetGattServices"}, | ||||
|             {28, nullptr, "GetGattService"}, | ||||
|             {29, nullptr, "GetGattIncludedServices"}, | ||||
|             {30, nullptr, "GetBelongingGattService"}, | ||||
|             {31, nullptr, "GetGattCharacteristics"}, | ||||
|             {32, nullptr, "GetGattDescriptors"}, | ||||
|             {33, C<&IBtmUserCore::AcquireBleMtuConfigEvent>, "AcquireBleMtuConfigEvent"}, | ||||
|             {34, nullptr, "ConfigureBleMtu"}, | ||||
|             {35, nullptr, "GetBleMtu"}, | ||||
|             {36, nullptr, "RegisterBleGattDataPath"}, | ||||
|             {37, nullptr, "UnregisterBleGattDataPath"}, | ||||
|         }; | ||||
|     static const FunctionInfo functions[] = { | ||||
|         {0, C<&IBtmUserCore::AcquireBleScanEvent>, "AcquireBleScanEvent"}, | ||||
|         {1, nullptr, "GetBleScanFilterParameter"}, | ||||
|         {2, nullptr, "GetBleScanFilterParameter2"}, | ||||
|         {3, nullptr, "StartBleScanForGeneral"}, | ||||
|         {4, nullptr, "StopBleScanForGeneral"}, | ||||
|         {5, nullptr, "GetBleScanResultsForGeneral"}, | ||||
|         {6, nullptr, "StartBleScanForPaired"}, | ||||
|         {7, nullptr, "StopBleScanForPaired"}, | ||||
|         {8, nullptr, "StartBleScanForSmartDevice"}, | ||||
|         {9, nullptr, "StopBleScanForSmartDevice"}, | ||||
|         {10, nullptr, "GetBleScanResultsForSmartDevice"}, | ||||
|         {17, C<&IBtmUserCore::AcquireBleConnectionEvent>, "AcquireBleConnectionEvent"}, | ||||
|         {18, nullptr, "BleConnect"}, | ||||
|         {19, nullptr, "BleDisconnect"}, | ||||
|         {20, nullptr, "BleGetConnectionState"}, | ||||
|         {21, nullptr, "AcquireBlePairingEvent"}, | ||||
|         {22, nullptr, "BlePairDevice"}, | ||||
|         {23, nullptr, "BleUnPairDevice"}, | ||||
|         {24, nullptr, "BleUnPairDevice2"}, | ||||
|         {25, nullptr, "BleGetPairedDevices"}, | ||||
|         {26, C<&IBtmUserCore::AcquireBleServiceDiscoveryEvent>, "AcquireBleServiceDiscoveryEvent"}, | ||||
|         {27, nullptr, "GetGattServices"}, | ||||
|         {28, nullptr, "GetGattService"}, | ||||
|         {29, nullptr, "GetGattIncludedServices"}, | ||||
|         {30, nullptr, "GetBelongingGattService"}, | ||||
|         {31, nullptr, "GetGattCharacteristics"}, | ||||
|         {32, nullptr, "GetGattDescriptors"}, | ||||
|         {33, C<&IBtmUserCore::AcquireBleMtuConfigEvent>, "AcquireBleMtuConfigEvent"}, | ||||
|         {34, nullptr, "ConfigureBleMtu"}, | ||||
|         {35, nullptr, "GetBleMtu"}, | ||||
|         {36, nullptr, "RegisterBleGattDataPath"}, | ||||
|         {37, nullptr, "UnregisterBleGattDataPath"}, | ||||
|     }; | ||||
|     // clang-format on
 | ||||
|     RegisterHandlers(functions); | ||||
| 
 | ||||
|  | ||||
| @ -10,7 +10,7 @@ | ||||
| namespace Kernel { | ||||
| class KEvent; | ||||
| class KReadableEvent; | ||||
| } | ||||
| } // namespace Kernel
 | ||||
| 
 | ||||
| namespace Core { | ||||
| class System; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user