| 
									
										
										
										
											2014-12-04 14:45:47 -05:00
										 |  |  | // Copyright 2015 Citra Emulator Project
 | 
					
						
							|  |  |  | // Licensed under GPLv2 or any later version
 | 
					
						
							|  |  |  | // Refer to the license.txt file included.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "common/common_types.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-12 21:47:41 -05:00
										 |  |  | #include "core/hle/kernel/event.h"
 | 
					
						
							| 
									
										
										
										
											2014-12-04 14:45:47 -05:00
										 |  |  | #include "core/hle/kernel/kernel.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Kernel { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-27 02:40:21 -02:00
										 |  |  | class Timer final : public WaitObject { | 
					
						
							| 
									
										
										
										
											2015-01-23 02:19:33 -02:00
										 |  |  | public: | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Creates a timer | 
					
						
							|  |  |  |      * @param reset_type ResetType describing how to create the timer | 
					
						
							|  |  |  |      * @param name Optional name of timer | 
					
						
							|  |  |  |      * @return The created Timer | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2015-02-01 00:14:40 -02:00
										 |  |  |     static SharedPtr<Timer> Create(ResetType reset_type, std::string name = "Unknown"); | 
					
						
							| 
									
										
										
										
											2015-01-23 02:19:33 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-18 09:38:01 +09:00
										 |  |  |     std::string GetTypeName() const override { | 
					
						
							|  |  |  |         return "Timer"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     std::string GetName() const override { | 
					
						
							|  |  |  |         return name; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-01-23 02:19:33 -02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     static const HandleType HANDLE_TYPE = HandleType::Timer; | 
					
						
							| 
									
										
										
										
											2016-09-18 09:38:01 +09:00
										 |  |  |     HandleType GetHandleType() const override { | 
					
						
							|  |  |  |         return HANDLE_TYPE; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-01-23 02:19:33 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-18 09:38:01 +09:00
										 |  |  |     ResetType reset_type; ///< The ResetType of this timer
 | 
					
						
							| 
									
										
										
										
											2015-01-23 02:19:33 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-18 09:38:01 +09:00
										 |  |  |     bool signaled;    ///< Whether the timer has been signaled or not
 | 
					
						
							|  |  |  |     std::string name; ///< Name of timer (optional)
 | 
					
						
							| 
									
										
										
										
											2015-01-23 02:19:33 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-18 09:38:01 +09:00
										 |  |  |     u64 initial_delay;  ///< The delay until the timer fires for the first time
 | 
					
						
							|  |  |  |     u64 interval_delay; ///< The delay until the timer fires after the first time
 | 
					
						
							| 
									
										
										
										
											2015-01-23 02:19:33 -02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     bool ShouldWait() override; | 
					
						
							|  |  |  |     void Acquire() override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Starts the timer, with the specified initial delay and interval. | 
					
						
							|  |  |  |      * @param initial Delay until the timer is first fired | 
					
						
							|  |  |  |      * @param interval Delay until the timer is fired after the first time | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     void Set(s64 initial, s64 interval); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void Cancel(); | 
					
						
							|  |  |  |     void Clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2015-01-31 22:56:59 -02:00
										 |  |  |     Timer(); | 
					
						
							|  |  |  |     ~Timer() override; | 
					
						
							| 
									
										
										
										
											2015-01-31 14:23:09 -02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /// Handle used as userdata to reference this object when inserting into the CoreTiming queue.
 | 
					
						
							|  |  |  |     Handle callback_handle; | 
					
						
							| 
									
										
										
										
											2015-01-23 02:19:33 -02:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2014-12-04 14:45:47 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | /// Initializes the required variables for timers
 | 
					
						
							|  |  |  | void TimersInit(); | 
					
						
							|  |  |  | /// Tears down the timer variables
 | 
					
						
							|  |  |  | void TimersShutdown(); | 
					
						
							| 
									
										
										
										
											2015-01-23 02:19:33 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-04 14:45:47 -05:00
										 |  |  | } // namespace
 |