/* * * Copyright 2021-2023 NXP * * 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. * ******************************************************************************/ #include "NxpNfcThreadMutex.h" /******************************************************************************* ** ** Function: NfcHalThreadMutex::NfcHalThreadMutex() ** ** Description: class constructor ** ** Returns: none ** *******************************************************************************/ NfcHalThreadMutex::NfcHalThreadMutex() { pthread_mutexattr_t mutexAttr; pthread_mutexattr_init(&mutexAttr); pthread_mutex_init(&mMutex, &mutexAttr); pthread_mutexattr_destroy(&mutexAttr); } /******************************************************************************* ** ** Function: NfcHalThreadMutex::~NfcHalThreadMutex() ** ** Description: class destructor ** ** Returns: none ** *******************************************************************************/ NfcHalThreadMutex::~NfcHalThreadMutex() { pthread_mutex_destroy(&mMutex); } /******************************************************************************* ** ** Function: NfcHalThreadMutex::lock() ** ** Description: lock kthe mutex ** ** Returns: none ** *******************************************************************************/ void NfcHalThreadMutex::lock() { pthread_mutex_lock(&mMutex); } /******************************************************************************* ** ** Function: NfcHalThreadMutex::unblock() ** ** Description: unlock the mutex ** ** Returns: none ** *******************************************************************************/ void NfcHalThreadMutex::unlock() { pthread_mutex_unlock(&mMutex); } /******************************************************************************* ** ** Function: NfcHalThreadCondVar::NfcHalThreadCondVar() ** ** Description: class constructor ** ** Returns: none ** *******************************************************************************/ NfcHalThreadCondVar::NfcHalThreadCondVar() { pthread_condattr_t CondAttr; pthread_condattr_init(&CondAttr); pthread_condattr_setclock(&CondAttr, CLOCK_MONOTONIC); pthread_cond_init(&mCondVar, &CondAttr); pthread_condattr_destroy(&CondAttr); } /******************************************************************************* ** ** Function: NfcHalThreadCondVar::~NfcHalThreadCondVar() ** ** Description: class destructor ** ** Returns: none ** *******************************************************************************/ NfcHalThreadCondVar::~NfcHalThreadCondVar() { pthread_cond_destroy(&mCondVar); } /******************************************************************************* ** ** Function: NfcHalThreadCondVar::timedWait() ** ** Description: wait on the mCondVar or till timeout happens ** ** Returns: none ** *******************************************************************************/ void NfcHalThreadCondVar::timedWait(struct timespec* time) { pthread_cond_timedwait(&mCondVar, *this, time); } /******************************************************************************* ** ** Function: NfcHalThreadCondVar::signal() ** ** Description: signal the mCondVar ** ** Returns: none ** *******************************************************************************/ void NfcHalThreadCondVar::signal() { NfcHalAutoThreadMutex a(*this); pthread_cond_signal(&mCondVar); } /******************************************************************************* ** ** Function: NfcHalAutoThreadMutex::NfcHalAutoThreadMutex() ** ** Description: class constructor, automatically lock the mutex ** ** Returns: none ** *******************************************************************************/ NfcHalAutoThreadMutex::NfcHalAutoThreadMutex(NfcHalThreadMutex& m) : mm(m) { mm.lock(); } /******************************************************************************* ** ** Function: NfcHalAutoThreadMutex::~NfcHalAutoThreadMutex() ** ** Description: class destructor, automatically unlock the mutex ** ** Returns: none ** *******************************************************************************/ NfcHalAutoThreadMutex::~NfcHalAutoThreadMutex() { mm.unlock(); }