mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 22:00:05 +00:00 
			
		
		
		
	kernel: added event module to support creation of CTR "Event" objects
This commit is contained in:
		
							parent
							
								
									d493d725ac
								
							
						
					
					
						commit
						fd69fd0325
					
				
					 4 changed files with 127 additions and 0 deletions
				
			
		|  | @ -168,6 +168,7 @@ | ||||||
|     <ClCompile Include="hle\config_mem.cpp" /> |     <ClCompile Include="hle\config_mem.cpp" /> | ||||||
|     <ClCompile Include="hle\coprocessor.cpp" /> |     <ClCompile Include="hle\coprocessor.cpp" /> | ||||||
|     <ClCompile Include="hle\hle.cpp" /> |     <ClCompile Include="hle\hle.cpp" /> | ||||||
|  |     <ClCompile Include="hle\kernel\event.cpp" /> | ||||||
|     <ClCompile Include="hle\kernel\kernel.cpp" /> |     <ClCompile Include="hle\kernel\kernel.cpp" /> | ||||||
|     <ClCompile Include="hle\kernel\mutex.cpp" /> |     <ClCompile Include="hle\kernel\mutex.cpp" /> | ||||||
|     <ClCompile Include="hle\kernel\thread.cpp" /> |     <ClCompile Include="hle\kernel\thread.cpp" /> | ||||||
|  | @ -217,6 +218,7 @@ | ||||||
|     <ClInclude Include="hle\coprocessor.h" /> |     <ClInclude Include="hle\coprocessor.h" /> | ||||||
|     <ClInclude Include="hle\function_wrappers.h" /> |     <ClInclude Include="hle\function_wrappers.h" /> | ||||||
|     <ClInclude Include="hle\hle.h" /> |     <ClInclude Include="hle\hle.h" /> | ||||||
|  |     <ClInclude Include="hle\kernel\event.h" /> | ||||||
|     <ClInclude Include="hle\kernel\kernel.h" /> |     <ClInclude Include="hle\kernel\kernel.h" /> | ||||||
|     <ClInclude Include="hle\kernel\mutex.h" /> |     <ClInclude Include="hle\kernel\mutex.h" /> | ||||||
|     <ClInclude Include="hle\kernel\thread.h" /> |     <ClInclude Include="hle\kernel\thread.h" /> | ||||||
|  |  | ||||||
|  | @ -165,6 +165,9 @@ | ||||||
|     <ClCompile Include="arm\interpreter\armcopro.cpp"> |     <ClCompile Include="arm\interpreter\armcopro.cpp"> | ||||||
|       <Filter>arm\interpreter</Filter> |       <Filter>arm\interpreter</Filter> | ||||||
|     </ClCompile> |     </ClCompile> | ||||||
|  |     <ClCompile Include="hle\kernel\event.cpp"> | ||||||
|  |       <Filter>hle\kernel</Filter> | ||||||
|  |     </ClCompile> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <ClInclude Include="arm\disassembler\arm_disasm.h"> |     <ClInclude Include="arm\disassembler\arm_disasm.h"> | ||||||
|  | @ -295,6 +298,9 @@ | ||||||
|     <ClInclude Include="hle\kernel\mutex.h"> |     <ClInclude Include="hle\kernel\mutex.h"> | ||||||
|       <Filter>hle\kernel</Filter> |       <Filter>hle\kernel</Filter> | ||||||
|     </ClInclude> |     </ClInclude> | ||||||
|  |     <ClInclude Include="hle\kernel\event.h"> | ||||||
|  |       <Filter>hle\kernel</Filter> | ||||||
|  |     </ClInclude> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <Text Include="CMakeLists.txt" /> |     <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…
	
	Add table
		Add a link
		
	
		Reference in a new issue