1 // Copyright 2020 The Pigweed Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); you may not 4 // use this file except in compliance with the License. You may obtain a copy of 5 // the License at 6 // 7 // https://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12 // License for the specific language governing permissions and limitations under 13 // the License. 14 15 #include "pw_sync/binary_semaphore.h" 16 17 using pw::chrono::SystemClock; 18 pw_sync_BinarySemaphore_Release(pw_sync_BinarySemaphore * semaphore)19extern "C" void pw_sync_BinarySemaphore_Release( 20 pw_sync_BinarySemaphore* semaphore) { 21 semaphore->release(); 22 } 23 pw_sync_BinarySemaphore_Acquire(pw_sync_BinarySemaphore * semaphore)24extern "C" void pw_sync_BinarySemaphore_Acquire( 25 pw_sync_BinarySemaphore* semaphore) { 26 semaphore->acquire(); 27 } 28 pw_sync_BinarySemaphore_TryAcquire(pw_sync_BinarySemaphore * semaphore)29extern "C" bool pw_sync_BinarySemaphore_TryAcquire( 30 pw_sync_BinarySemaphore* semaphore) { 31 return semaphore->try_acquire(); 32 } 33 pw_sync_BinarySemaphore_TryAcquireFor(pw_sync_BinarySemaphore * semaphore,pw_chrono_SystemClock_Duration for_at_least)34extern "C" bool pw_sync_BinarySemaphore_TryAcquireFor( 35 pw_sync_BinarySemaphore* semaphore, 36 pw_chrono_SystemClock_Duration for_at_least) { 37 return semaphore->try_acquire_for(SystemClock::duration(for_at_least.ticks)); 38 } 39 pw_sync_BinarySemaphore_TryAcquireUntil(pw_sync_BinarySemaphore * semaphore,pw_chrono_SystemClock_TimePoint until_at_least)40extern "C" bool pw_sync_BinarySemaphore_TryAcquireUntil( 41 pw_sync_BinarySemaphore* semaphore, 42 pw_chrono_SystemClock_TimePoint until_at_least) { 43 return semaphore->try_acquire_until(SystemClock::time_point( 44 SystemClock::duration(until_at_least.duration_since_epoch.ticks))); 45 } 46 pw_sync_BinarySemaphore_Max(void)47extern "C" ptrdiff_t pw_sync_BinarySemaphore_Max(void) { 48 return pw::sync::BinarySemaphore::max(); 49 } 50