/*---------------------------------------------------------------------------* Project: Horizon File: hid_HidBase.h Copyright (C)2009 Nintendo Co., Ltd. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Rev: 12449 $ *---------------------------------------------------------------------------*/ /*! @file @brief HidBase クラス を定義します。 */ #ifndef NN_HID_CTR_HID_HIDBASE_H_ #define NN_HID_CTR_HID_HIDBASE_H_ #include #include #include #include #include #include #include namespace nn { namespace hid { namespace CTR { /*! @brief HID の基底 クラスです。 */ class HidBase : public nn::os::EventBase { protected: HidBase() : nn::os::EventBase() {} ~HidBase() {} private: nn::os::Mutex m_Mutex; uptr m_pResource; public: /*! @brief デバイスがサンプリングするのを待ちます。 @return なし。 */ void WaitSampling( ); /*! @brief デバイスがサンプリングするのをタイムアウトつきで待ちます。 @param[in] timeout タイムアウト時間を指定します。0 を指定すると即座に処理を返します。 @return タイムアウト時間までにイベントが発生したかを返します。 */ bool WaitSampling(nn::fnd::TimeSpan timeout); /*! @brief 引数で指定したデバイスのうち一つがサンプリングするのを待ちます。 @param[in] devices HidBaseの配列を指定します。 @param[in] numDevices HidBaseの数を指定します。 @return 処理の結果を返します。 @retval 0以上 サンプリングされたデバイスのインデックスを返します。 */ static s32 WaitSamplingAny(HidBase* devices[], s32 numDevices); /*! @brief 引数で指定したデバイスのうち一つがサンプリングするのをタイムアウトつきで待ちます。 @param[in] devices HidBaseの配列を指定します。 @param[in] numDevices HidBaseの数を指定します。 @param[in] timeout タイムアウト時間を指定します。 @return 処理の結果を返します。 @retval 0以上 サンプリングされたデバイスのインデックスを返します。 @retval 0未満 タイムアウトしたことを意味します。 */ static s32 WaitSamplingAny(HidBase* devices[], s32 numDevices, nn::fnd::TimeSpan timeout); nn::os::Mutex* GetMutex(); uptr GetResource(); void SetResource(uptr resource); }; // inline 定義 inline void HidBase::WaitSampling( ) { WaitOne(); } inline bool HidBase::WaitSampling(nn::fnd::TimeSpan timeout) { return WaitOne(timeout); } inline s32 HidBase::WaitSamplingAny(HidBase* devices[], s32 numDevices) { return nn::os::WaitObject::WaitAny(reinterpret_cast(devices), numDevices); } inline s32 HidBase::WaitSamplingAny(HidBase* devices[], s32 numDevices, nn::fnd::TimeSpan timeout) { return nn::os::WaitObject::WaitAny(reinterpret_cast(devices), numDevices, timeout); } inline nn::os::Mutex* HidBase::GetMutex() { return &m_Mutex; } inline uptr HidBase::GetResource() { return m_pResource; } inline void HidBase::SetResource(uptr resource) { m_pResource = resource; } } // namespace CTR { } // namespace hid { } // namespace nn { #endif // #ifndef NN_HID_CTR_HID_HIDBASE_H_