diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-07-07 05:20:03 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-07-07 05:20:03 +0000 |
commit | b58d49bf1e52105a372cc9828208dd45705e954b (patch) | |
tree | 0d20834f77484513d331f1aa6acd9374f0504301 /wcn6740/qcwcn/wifi_hal/sync.h | |
parent | 96d3c91c4ba96e01ff355c1250a280853e88e6b6 (diff) | |
parent | 17fad3051142f31d3814b20ca9bf43459b762c2a (diff) | |
download | wlan-b58d49bf1e52105a372cc9828208dd45705e954b.tar.gz |
Snap for 10453563 from 17fad3051142f31d3814b20ca9bf43459b762c2a to mainline-uwb-releaseaml_uwb_341710010aml_uwb_341513070aml_uwb_341511050aml_uwb_341310300aml_uwb_341310030aml_uwb_341111010aml_uwb_341011000android14-mainline-uwb-release
Change-Id: I8e9aae36bb23b3162683705a32e95cbd777c2aaf
Diffstat (limited to 'wcn6740/qcwcn/wifi_hal/sync.h')
-rw-r--r-- | wcn6740/qcwcn/wifi_hal/sync.h | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/wcn6740/qcwcn/wifi_hal/sync.h b/wcn6740/qcwcn/wifi_hal/sync.h new file mode 100644 index 0000000..eaa9f11 --- /dev/null +++ b/wcn6740/qcwcn/wifi_hal/sync.h @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * 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 <pthread.h> +#include "wifi_hal.h" +#include "common.h" + +#ifndef __WIFI_HAL_SYNC_H__ +#define __WIFI_HAL_SYNC_H__ + +class Mutex +{ +private: + pthread_mutex_t mMutex; +public: + Mutex() { + pthread_mutex_init(&mMutex, NULL); + } + ~Mutex() { + pthread_mutex_destroy(&mMutex); + } + int tryLock() { + return pthread_mutex_trylock(&mMutex); + } + int lock() { + return pthread_mutex_lock(&mMutex); + } + void unlock() { + pthread_mutex_unlock(&mMutex); + } +}; + +class Condition +{ +private: + pthread_cond_t mCondition; + pthread_mutex_t mMutex; + +public: + Condition() { + pthread_mutex_init(&mMutex, NULL); + pthread_cond_init(&mCondition, NULL); + } + ~Condition() { + pthread_cond_destroy(&mCondition); + pthread_mutex_destroy(&mMutex); + } + + wifi_error wait() { + int status = pthread_cond_wait(&mCondition, &mMutex); + return mapKernelErrortoWifiHalError(status); + } + + wifi_error wait(struct timespec abstime) + { + struct timeval now; + int status; + + gettimeofday(&now,NULL); + + abstime.tv_sec += now.tv_sec; + if(((abstime.tv_nsec + now.tv_usec*1000) > 1000*1000*1000) || (abstime.tv_nsec + now.tv_usec*1000 < 0)) + { + abstime.tv_sec += 1; + abstime.tv_nsec += now.tv_usec * 1000; + abstime.tv_nsec -= 1000*1000*1000; + } + else + { + abstime.tv_nsec += now.tv_usec * 1000; + } + status = pthread_cond_timedwait(&mCondition, &mMutex, &abstime); + return mapKernelErrortoWifiHalError(status); + } + + void signal() { + pthread_cond_signal(&mCondition); + } +}; + +#endif |