1eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh/* Copyright (c) 2015, The Linux Foundation. All rights reserved. 2eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * 3eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * Redistribution and use in source and binary forms, with or without 4eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * modification, are permitted provided that the following conditions are 5eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * met: 6eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * * Redistributions of source code must retain the above copyright 7eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * notice, this list of conditions and the following disclaimer. 8eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * * Redistributions in binary form must reproduce the above 9eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * copyright notice, this list of conditions and the following 10eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * disclaimer in the documentation and/or other materials provided 11eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * with the distribution. 12eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * * Neither the name of The Linux Foundation, nor the names of its 13eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * contributors may be used to endorse or promote products derived 14eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * from this software without specific prior written permission. 15eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * 16eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * 28eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh */ 29eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 30eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#ifndef __LOC_TIMER_CPP_H__ 31eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define __LOC_TIMER_CPP_H__ 32eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 33eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <stddef.h> 34eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <platform_lib_includes.h> 35eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 36eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh// opaque class to provide service implementation. 37eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass LocTimerDelegate; 38eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass LocSharedLock; 39eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 40eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh// LocTimer client must extend this class and implementthe callback. 41eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh// start() / stop() methods are to arm / disarm timer. 42eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass LocTimer 43eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{ 44eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LocTimerDelegate* mTimer; 45eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LocSharedLock* mLock; 46eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh // don't really want mLock to be manipulated by clients, yet LocTimer 47eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh // has to have a reference to the lock so that the delete of LocTimer 48eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh // and LocTimerDelegate can work together on their share resources. 49eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh friend class LocTimerDelegate; 50eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 51eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhpublic: 52eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LocTimer(); 53eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual ~LocTimer(); 54eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 55eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh // timeOutInMs: timeout delay in ms 56eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh // wakeOnExpire: true if to wake up CPU (if sleeping) upon timer 57eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh // expiration and notify the client. 58eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh // false if to wait until next time CPU wakes up (if 59eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh // sleeping) and then notify the client. 60eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh // return: true on success; 61eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh // false on failure, e.g. timer is already running. 62eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh bool start(uint32_t timeOutInMs, bool wakeOnExpire); 63eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 64eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh // return: true on success; 65eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh // false on failure, e.g. timer is not running. 66eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh bool stop(); 67eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 68eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh // LocTimer client Should implement this method. 69eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh // This method is used for timeout calling back to client. This method 70eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh // should be short enough (eg: send a message to your own thread). 71eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual void timeOutCallback() = 0; 72eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh}; 73eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 74eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#endif //__LOC_DELAY_H__ 75