X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=service%2Fnative%2Fframework_unified%2Fclient%2FNS_Timer%2Fsrc%2Fns_timer_class.cpp;fp=service%2Fnative%2Fframework_unified%2Fclient%2FNS_Timer%2Fsrc%2Fns_timer_class.cpp;h=47b41e9a75d41bc39138d287f6c2e330626bfef7;hb=17cf21bcf8a2e29d2cbcf0a313474d2a4ee44f5d;hp=0000000000000000000000000000000000000000;hpb=9e86046cdb356913ae026f616e5bf17f6f238aa5;p=staging%2Fbasesystem.git diff --git a/service/native/framework_unified/client/NS_Timer/src/ns_timer_class.cpp b/service/native/framework_unified/client/NS_Timer/src/ns_timer_class.cpp new file mode 100755 index 0000000..47b41e9 --- /dev/null +++ b/service/native/framework_unified/client/NS_Timer/src/ns_timer_class.cpp @@ -0,0 +1,177 @@ +/* + * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +////////////////////////////////////////////////////////////////////////////////////////////////// +/// \ingroup tag_NSTimer +/// \brief +/// +/// Timer class for setting timers. +/// +////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +////////////////////////////////////////////////////////////////////////////////////////////// +///// Constructor +////////////////////////////////////////////////////////////////////////////////////////////// +NSTimer::NSTimer(): + m_hTimer(NULL), + m_u64TimeInterval(0), + m_bRepeatTimer(FALSE) { +} + +////////////////////////////////////////////////////////////////////////////////////////////// +///// Destructor +////////////////////////////////////////////////////////////////////////////////////////////// +NSTimer::~NSTimer() { + if (NULL != m_hTimer) { + NS_TimerDelete(m_hTimer); + m_hTimer = NULL; + } +} + + +////////////////////////////////////////////////////////////////////////////////////////////// +///// SetNotifyMethod +////////////////////////////////////////////////////////////////////////////////////////////// +EFrameworkunifiedStatus NSTimer::SetNotifyMethod(UI_16 notifyCmdId, PCSTR notifyToAppName) { + EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; + NSTimerInfo l_tTimerInfo = {}; + + if ((NULL != notifyToAppName) && (strlen(notifyToAppName) <= MAX_SERVICE_NAME)) { + HANDLE l_hSenderHandle = McOpenSender(notifyToAppName); + + if (NULL != l_hSenderHandle) { // reset previous notify method, and set new + // resets previous timer timeout action if any + if (NULL != m_hTimer) { + NS_TimerDelete(m_hTimer); + m_hTimer = NULL; + } + + l_tTimerInfo.iCmd = notifyCmdId; + // Create timer. Do not start. + if (NULL == (m_hTimer = NS_TimerCreate(l_tTimerInfo, CALLBACK_MESSAGE, l_hSenderHandle))) { + l_eStatus = eFrameworkunifiedStatusFail; + } + + McClose(l_hSenderHandle); + } else { + // just return fail. Don't reset any previous notify method + l_eStatus = eFrameworkunifiedStatusFail; + } + } else { + l_eStatus = eFrameworkunifiedStatusInvldParam; + } + + return l_eStatus; +} + +////////////////////////////////////////////////////////////////////////////////////////////// +///// SetRepeatTimer +////////////////////////////////////////////////////////////////////////////////////////////// +VOID NSTimer::SetRepeatTimer(BOOL repeatTimer) { + m_bRepeatTimer = repeatTimer; +} + +////////////////////////////////////////////////////////////////////////////////////////////// +///// SetTime +////////////////////////////////////////////////////////////////////////////////////////////// +VOID NSTimer::SetTime(UI_32 seconds, UI_64 msecs) { + m_u64TimeInterval = msecs + seconds * 1000ULL; // internally, set interval as milliseconds +} + +////////////////////////////////////////////////////////////////////////////////////////////// +///// SetTime +////////////////////////////////////////////////////////////////////////////////////////////// +VOID NSTimer::SetTime(UI_32 hrs, UI_32 mins, UI_32 seconds, UI_64 msecs) { + // internally, set interval as milliseconds + m_u64TimeInterval = msecs + seconds * 1000ULL + mins * 60000ULL + hrs * 3600000ULL; +} + +////////////////////////////////////////////////////////////////////////////////////////////// +///// Start +////////////////////////////////////////////////////////////////////////////////////////////// +EFrameworkunifiedStatus NSTimer::Start(UI_32 seconds, UI_64 msecs) { + this->SetTime(seconds, msecs); + return (this->Start()); +} + +////////////////////////////////////////////////////////////////////////////////////////////// +///// Start +////////////////////////////////////////////////////////////////////////////////////////////// +EFrameworkunifiedStatus NSTimer::Start() { + EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; + if (NULL != m_hTimer) { + NSTimerInfo l_tTimerInfo = {}; + + l_tTimerInfo.t_sec = WholeSeconds(static_cast(m_u64TimeInterval)); /// Converts to seconds + l_tTimerInfo.t_nsec = MSToNS(RemainderMs(static_cast(m_u64TimeInterval))); /// Converts to nano seconds + + if (TRUE == m_bRepeatTimer) { + l_tTimerInfo.rpt_sec = l_tTimerInfo.t_sec; + l_tTimerInfo.rpt_nsec = l_tTimerInfo.t_nsec; + } + l_eStatus = NS_TimerSetTime(m_hTimer, l_tTimerInfo); + } else { + l_eStatus = eFrameworkunifiedStatusFail; + } + + return l_eStatus; +} + +////////////////////////////////////////////////////////////////////////////////////////////// +///// Stop +////////////////////////////////////////////////////////////////////////////////////////////// +EFrameworkunifiedStatus NSTimer::Stop() { + EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK; + + if (NULL != m_hTimer) { + NSTimerInfo l_tTimerInfo = {}; + l_eStatus = NS_TimerSetTime(m_hTimer, l_tTimerInfo); + } else { + l_eStatus = eFrameworkunifiedStatusFail; + } + + return l_eStatus; +} + +////////////////////////////////////////////////////////////////////////////////////////////// +///// IsRunning +////////////////////////////////////////////////////////////////////////////////////////////// +BOOL NSTimer::IsRunning() { + BOOL l_bIsRunning = FALSE; + + if (NULL != m_hTimer) { + NSTimerInfo l_tTimerInfo = {}; + NS_TimerGetTime(m_hTimer, &l_tTimerInfo); + if ((0 != l_tTimerInfo.t_sec) || (0 != l_tTimerInfo.t_nsec) || (0 != l_tTimerInfo.rpt_sec) || + (0 != l_tTimerInfo.rpt_nsec)) { + l_bIsRunning = TRUE; + } + } + return l_bIsRunning; +} + +////////////////////////////////////////////////////////////////////////////////////////////// +///// GetInterval +////////////////////////////////////////////////////////////////////////////////////////////// +UI_64 NSTimer::GetInterval() { + return m_u64TimeInterval; +} + +// EOF