mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-11-04 12:34:39 +08:00 
			
		
		
		
	kernel: added event module to support creation of CTR "Event" objects
This commit is contained in:
		
							parent
							
								
									d493d725ac
								
							
						
					
					
						commit
						fd69fd0325
					
				@ -168,6 +168,7 @@
 | 
			
		||||
    <ClCompile Include="hle\config_mem.cpp" />
 | 
			
		||||
    <ClCompile Include="hle\coprocessor.cpp" />
 | 
			
		||||
    <ClCompile Include="hle\hle.cpp" />
 | 
			
		||||
    <ClCompile Include="hle\kernel\event.cpp" />
 | 
			
		||||
    <ClCompile Include="hle\kernel\kernel.cpp" />
 | 
			
		||||
    <ClCompile Include="hle\kernel\mutex.cpp" />
 | 
			
		||||
    <ClCompile Include="hle\kernel\thread.cpp" />
 | 
			
		||||
@ -217,6 +218,7 @@
 | 
			
		||||
    <ClInclude Include="hle\coprocessor.h" />
 | 
			
		||||
    <ClInclude Include="hle\function_wrappers.h" />
 | 
			
		||||
    <ClInclude Include="hle\hle.h" />
 | 
			
		||||
    <ClInclude Include="hle\kernel\event.h" />
 | 
			
		||||
    <ClInclude Include="hle\kernel\kernel.h" />
 | 
			
		||||
    <ClInclude Include="hle\kernel\mutex.h" />
 | 
			
		||||
    <ClInclude Include="hle\kernel\thread.h" />
 | 
			
		||||
 | 
			
		||||
@ -165,6 +165,9 @@
 | 
			
		||||
    <ClCompile Include="arm\interpreter\armcopro.cpp">
 | 
			
		||||
      <Filter>arm\interpreter</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ClCompile Include="hle\kernel\event.cpp">
 | 
			
		||||
      <Filter>hle\kernel</Filter>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClInclude Include="arm\disassembler\arm_disasm.h">
 | 
			
		||||
@ -295,6 +298,9 @@
 | 
			
		||||
    <ClInclude Include="hle\kernel\mutex.h">
 | 
			
		||||
      <Filter>hle\kernel</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
    <ClInclude Include="hle\kernel\event.h">
 | 
			
		||||
      <Filter>hle\kernel</Filter>
 | 
			
		||||
    </ClInclude>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Text Include="CMakeLists.txt" />
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										91
									
								
								src/core/hle/kernel/event.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								src/core/hle/kernel/event.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,91 @@
 | 
			
		||||
// Copyright 2014 Citra Emulator Project
 | 
			
		||||
// Licensed under GPLv2
 | 
			
		||||
// Refer to the license.txt file included.  
 | 
			
		||||
 | 
			
		||||
#include <map>
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
#include "common/common.h"
 | 
			
		||||
 | 
			
		||||
#include "core/hle/kernel/kernel.h"
 | 
			
		||||
#include "core/hle/kernel/event.h"
 | 
			
		||||
 | 
			
		||||
namespace Kernel {
 | 
			
		||||
 | 
			
		||||
class Event : public Object {
 | 
			
		||||
public:
 | 
			
		||||
    const char* GetTypeName() { return "Event"; }
 | 
			
		||||
 | 
			
		||||
    static Kernel::HandleType GetStaticHandleType() {  return Kernel::HandleType::Event; }
 | 
			
		||||
    Kernel::HandleType GetHandleType() const { return Kernel::HandleType::Event; }
 | 
			
		||||
 | 
			
		||||
    ResetType intitial_reset_type;  ///< ResetType specified at Event initialization
 | 
			
		||||
    ResetType reset_type;           ///< Current ResetType
 | 
			
		||||
 | 
			
		||||
    bool locked;                    ///< Current locked state
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Synchronize kernel object 
 | 
			
		||||
     * @param wait Boolean wait set if current thread should wait as a result of sync operation
 | 
			
		||||
     * @return Result of operation, 0 on success, otherwise error code
 | 
			
		||||
     */
 | 
			
		||||
    Result SyncRequest(bool* wait) {
 | 
			
		||||
        // TODO(bunnei): ImplementMe
 | 
			
		||||
        ERROR_LOG(KERNEL, "Unimplemented function Event::SyncRequest");
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Wait for kernel object to synchronize
 | 
			
		||||
     * @param wait Boolean wait set if current thread should wait as a result of sync operation
 | 
			
		||||
     * @return Result of operation, 0 on success, otherwise error code
 | 
			
		||||
     */
 | 
			
		||||
    Result WaitSynchronization(bool* wait) {
 | 
			
		||||
        // TODO(bunnei): ImplementMe
 | 
			
		||||
        *wait = locked;
 | 
			
		||||
        if (reset_type != RESETTYPE_STICKY) {
 | 
			
		||||
            locked = true;
 | 
			
		||||
        }
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Clears an event
 | 
			
		||||
 * @param handle Handle to event to clear
 | 
			
		||||
 * @return Result of operation, 0 on success, otherwise error code
 | 
			
		||||
 */
 | 
			
		||||
Result ClearEvent(Handle handle) {
 | 
			
		||||
    ERROR_LOG(KERNEL, "Unimplemented function ClearEvent");
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Creates an event
 | 
			
		||||
 * @param handle Reference to handle for the newly created mutex
 | 
			
		||||
 * @param reset_type ResetType describing how to create event
 | 
			
		||||
 * @return Handle to newly created object
 | 
			
		||||
 */
 | 
			
		||||
Event* CreateEvent(Handle& handle, const ResetType reset_type) {
 | 
			
		||||
    Event* evt = new Event;
 | 
			
		||||
 | 
			
		||||
    handle = Kernel::g_object_pool.Create(evt);
 | 
			
		||||
 | 
			
		||||
    evt->reset_type = evt->intitial_reset_type = reset_type;
 | 
			
		||||
    evt->locked = false;
 | 
			
		||||
 | 
			
		||||
    return evt;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Creates an event
 | 
			
		||||
 * @param reset_type ResetType describing how to create event
 | 
			
		||||
 * @return Handle to newly created object
 | 
			
		||||
 */
 | 
			
		||||
Handle CreateEvent(const ResetType reset_type) {
 | 
			
		||||
    Handle handle;
 | 
			
		||||
    Event* evt = CreateEvent(handle, reset_type);
 | 
			
		||||
    return handle;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace
 | 
			
		||||
							
								
								
									
										28
									
								
								src/core/hle/kernel/event.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								src/core/hle/kernel/event.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,28 @@
 | 
			
		||||
// Copyright 2014 Citra Emulator Project
 | 
			
		||||
// Licensed under GPLv2
 | 
			
		||||
// Refer to the license.txt file included.  
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "common/common_types.h"
 | 
			
		||||
 | 
			
		||||
#include "core/hle/kernel/kernel.h"
 | 
			
		||||
#include "core/hle/svc.h"
 | 
			
		||||
 | 
			
		||||
namespace Kernel {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Clears an event
 | 
			
		||||
 * @param handle Handle to event to clear
 | 
			
		||||
 * @return Result of operation, 0 on success, otherwise error code
 | 
			
		||||
 */
 | 
			
		||||
Result ClearEvent(Handle handle);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Creates an event
 | 
			
		||||
 * @param reset_type ResetType describing how to create event
 | 
			
		||||
 * @return Handle to newly created object
 | 
			
		||||
 */
 | 
			
		||||
Handle CreateEvent(const ResetType reset_type);
 | 
			
		||||
 | 
			
		||||
} // namespace
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user