Added CSND stub.
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user