mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	Merge pull request #1165 from esoteric-programmer/master
Added CSND_ExecuteType0Commands stub.
This commit is contained in:
		
						commit
						7c12ee9ecc
					
				
					 2 changed files with 66 additions and 4 deletions
				
			
		|  | @ -3,6 +3,8 @@ | |||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include "core/hle/hle.h" | ||||
| #include "core/hle/kernel/mutex.h" | ||||
| #include "core/hle/kernel/shared_memory.h" | ||||
| #include "core/hle/service/csnd_snd.h" | ||||
| 
 | ||||
| ////////////////////////////////////////////////////////////////////////////////////////////////////
 | ||||
|  | @ -11,11 +13,11 @@ | |||
| namespace CSND_SND { | ||||
| 
 | ||||
| const Interface::FunctionInfo FunctionTable[] = { | ||||
|     {0x00010140, nullptr,               "Initialize"}, | ||||
|     {0x00020000, nullptr,               "Shutdown"}, | ||||
|     {0x00030040, nullptr,               "ExecuteType0Commands"}, | ||||
|     {0x00010140, Initialize,            "Initialize"}, | ||||
|     {0x00020000, Shutdown,              "Shutdown"}, | ||||
|     {0x00030040, ExecuteType0Commands,  "ExecuteType0Commands"}, | ||||
|     {0x00040080, nullptr,               "ExecuteType1Commands"}, | ||||
|     {0x00050000, nullptr,               "AcquireSoundChannels"}, | ||||
|     {0x00050000, AcquireSoundChannels,  "AcquireSoundChannels"}, | ||||
|     {0x00060000, nullptr,               "ReleaseSoundChannels"}, | ||||
|     {0x00070000, nullptr,               "AcquireCaptureDevice"}, | ||||
|     {0x00080040, nullptr,               "ReleaseCaptureDevice"}, | ||||
|  | @ -31,4 +33,51 @@ Interface::Interface() { | |||
|     Register(FunctionTable); | ||||
| } | ||||
| 
 | ||||
| static Kernel::SharedPtr<Kernel::SharedMemory> shared_memory = nullptr; | ||||
| static Kernel::SharedPtr<Kernel::Mutex> mutex = nullptr; | ||||
| 
 | ||||
| void Initialize(Service::Interface* self) { | ||||
|     u32* cmd_buff = Kernel::GetCommandBuffer(); | ||||
| 
 | ||||
|     shared_memory = Kernel::SharedMemory::Create(cmd_buff[1], | ||||
|             Kernel::MemoryPermission::ReadWrite, | ||||
|             Kernel::MemoryPermission::ReadWrite, "CSNDSharedMem"); | ||||
| 
 | ||||
|     mutex = Kernel::Mutex::Create(false); | ||||
| 
 | ||||
|     cmd_buff[1] = 0; | ||||
|     cmd_buff[2] = 0x4000000; | ||||
|     cmd_buff[3] = Kernel::g_handle_table.Create(mutex).MoveFrom(); | ||||
|     cmd_buff[4] = Kernel::g_handle_table.Create(shared_memory).MoveFrom(); | ||||
| } | ||||
| 
 | ||||
| void ExecuteType0Commands(Service::Interface* self) { | ||||
|     u32* cmd_buff = Kernel::GetCommandBuffer(); | ||||
| 
 | ||||
|     if (shared_memory != nullptr) { | ||||
|         struct Type0Command* command = reinterpret_cast<struct Type0Command*>( | ||||
|                 shared_memory->GetPointer(cmd_buff[1])); | ||||
|         if (command == nullptr) { | ||||
|             cmd_buff[1] = 1; | ||||
|         }else{ | ||||
|             LOG_WARNING(Service, "(STUBBED) CSND_SND::ExecuteType0Commands"); | ||||
|             command->finished |= 1; | ||||
|             cmd_buff[1] = 0; | ||||
|         } | ||||
|     }else{ | ||||
|         cmd_buff[1] = 1; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void AcquireSoundChannels(Service::Interface* self) { | ||||
|     u32* cmd_buff = Kernel::GetCommandBuffer(); | ||||
|     cmd_buff[1] = 0; | ||||
|     cmd_buff[2] = 0xFFFFFF00; | ||||
| } | ||||
| 
 | ||||
| void Shutdown(Service::Interface* self) { | ||||
|     shared_memory = nullptr; | ||||
|     mutex = nullptr; | ||||
| } | ||||
| 
 | ||||
| } // namespace
 | ||||
|  |  | |||
|  | @ -20,4 +20,17 @@ public: | |||
|     } | ||||
| }; | ||||
| 
 | ||||
| struct Type0Command { | ||||
|     // command id and next command offset
 | ||||
|     u32 command_id; | ||||
|     u32 finished; | ||||
|     u32 flags; | ||||
|     u8  parameters[20]; | ||||
| }; | ||||
| 
 | ||||
| void Initialize(Service::Interface* self); | ||||
| void ExecuteType0Commands(Service::Interface* self); | ||||
| void AcquireSoundChannels(Service::Interface* self); | ||||
| void Shutdown(Service::Interface* self); | ||||
| 
 | ||||
| } // namespace
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue