Home | History | Annotate | Download | only in adaptation
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2012 Broadcom Corporation
      4  *
      5  *  Licensed under the Apache License, Version 2.0 (the "License");
      6  *  you may not use this file except in compliance with the License.
      7  *  You may obtain a copy of the License at:
      8  *
      9  *  http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  *
     17  ******************************************************************************/
     18 
     19 /******************************************************************************
     20  *
     21  *  Encapsulate a mutex for thread synchronization.
     22  *
     23  ******************************************************************************/
     24 
     25 #define LOG_TAG "NfcNciHal"
     26 #include "OverrideLog.h"
     27 #include "Mutex.h"
     28 #include <errno.h>
     29 #include <string.h>
     30 
     31 /*******************************************************************************
     32 **
     33 ** Function:        Mutex
     34 **
     35 ** Description:     Initialize member variables.
     36 **
     37 ** Returns:         None.
     38 **
     39 *******************************************************************************/
     40 Mutex::Mutex ()
     41 {
     42     memset (&mMutex, 0, sizeof(mMutex));
     43     int res = pthread_mutex_init (&mMutex, NULL);
     44     if (res != 0)
     45     {
     46         ALOGE ("Mutex::Mutex: fail init; error=0x%X", res);
     47     }
     48 }
     49 
     50 
     51 /*******************************************************************************
     52 **
     53 ** Function:        ~Mutex
     54 **
     55 ** Description:     Cleanup all resources.
     56 **
     57 ** Returns:         None.
     58 **
     59 *******************************************************************************/
     60 Mutex::~Mutex ()
     61 {
     62     int res = pthread_mutex_destroy (&mMutex);
     63     if (res != 0)
     64     {
     65         ALOGE ("Mutex::~Mutex: fail destroy; error=0x%X", res);
     66     }
     67 }
     68 
     69 
     70 /*******************************************************************************
     71 **
     72 ** Function:        lock
     73 **
     74 ** Description:     Block the thread and try lock the mutex.
     75 **
     76 ** Returns:         None.
     77 **
     78 *******************************************************************************/
     79 void Mutex::lock ()
     80 {
     81     int res = pthread_mutex_lock (&mMutex);
     82     if (res != 0)
     83     {
     84         ALOGE ("Mutex::lock: fail lock; error=0x%X", res);
     85     }
     86 }
     87 
     88 
     89 /*******************************************************************************
     90 **
     91 ** Function:        unlock
     92 **
     93 ** Description:     Unlock a mutex to unblock a thread.
     94 **
     95 ** Returns:         None.
     96 **
     97 *******************************************************************************/
     98 void Mutex::unlock ()
     99 {
    100     int res = pthread_mutex_unlock (&mMutex);
    101     if (res != 0)
    102     {
    103         ALOGE ("Mutex::unlock: fail unlock; error=0x%X", res);
    104     }
    105 }
    106 
    107 
    108 /*******************************************************************************
    109 **
    110 ** Function:        tryLock
    111 **
    112 ** Description:     Try to lock the mutex.
    113 **
    114 ** Returns:         True if the mutex is locked.
    115 **
    116 *******************************************************************************/
    117 bool Mutex::tryLock ()
    118 {
    119     int res = pthread_mutex_trylock (&mMutex);
    120     if ((res != 0) && (res != EBUSY))
    121     {
    122         ALOGE ("Mutex::tryLock: error=0x%X", res);
    123     }
    124     return res == 0;
    125 }
    126 
    127 
    128 /*******************************************************************************
    129 **
    130 ** Function:        nativeHandle
    131 **
    132 ** Description:     Get the handle of the mutex.
    133 **
    134 ** Returns:         Handle of the mutex.
    135 **
    136 *******************************************************************************/
    137 pthread_mutex_t* Mutex::nativeHandle ()
    138 {
    139     return &mMutex;
    140 }
    141 
    142 
    143