1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 3e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Copyright (C) 2012 Broadcom Corporation 4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * you may not use this file except in compliance with the License. 7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * You may obtain a copy of the License at: 8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * See the License for the specific language governing permissions and 15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * limitations under the License. 16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 19e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Synchronize two or more threads using a condition variable and a mutex. 22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#pragma once 25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "CondVar.h" 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "Mutex.h" 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectclass SyncEvent 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectpublic: 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /******************************************************************************* 33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Function: ~SyncEvent 35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Description: Cleanup all resources. 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Returns: None. 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *******************************************************************************/ 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ~SyncEvent () 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /******************************************************************************* 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Function: start 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Description: Start a synchronization operation. 51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Returns: None. 53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *******************************************************************************/ 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project void start () 56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mMutex.lock (); 58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /******************************************************************************* 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Function: wait 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Description: Block the thread and wait for the event to occur. 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Returns: None. 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *******************************************************************************/ 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project void wait () 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mCondVar.wait (mMutex); 73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /******************************************************************************* 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Function: wait 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Description: Block the thread and wait for the event to occur. 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** millisec: Timeout in milliseconds. 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Returns: True if wait is successful; false if timeout occurs. 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *******************************************************************************/ 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project bool wait (long millisec) 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project bool retVal = mCondVar.wait (mMutex, millisec); 89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retVal; 90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /******************************************************************************* 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Function: notifyOne 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Description: Notify a blocked thread that the event has occured. Unblocks it. 98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Returns: None. 100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *******************************************************************************/ 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project void notifyOne () 103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mCondVar.notifyOne (); 105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /******************************************************************************* 109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Function: end 111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Description: End a synchronization operation. 113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Returns: None. 115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *******************************************************************************/ 117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project void end () 118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mMutex.unlock (); 120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectprivate: 123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project CondVar mCondVar; 124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project Mutex mMutex; 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}; 126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************/ 129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************/ 130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/***************************************************************************** 133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Name: SyncEventGuard 135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: Automatically start and end a synchronization event. 137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/ 139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectclass SyncEventGuard 140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectpublic: 142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /******************************************************************************* 143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Function: SyncEventGuard 145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Description: Start a synchronization operation. 147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Returns: None. 149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *******************************************************************************/ 151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEventGuard (SyncEvent& event) 152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project : mEvent (event) 153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project event.start (); //automatically start operation 155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project }; 156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /******************************************************************************* 159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Function: ~SyncEventGuard 161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Description: End a synchronization operation. 163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** Returns: None. 165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ** 166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *******************************************************************************/ 167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ~SyncEventGuard () 168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mEvent.end (); //automatically end operation 170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project }; 171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectprivate: 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEvent& mEvent; 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}; 175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 176