1*10465441SEvalZero /* 2*10465441SEvalZero * Copyright (c) 2006-2018, RT-Thread Development Team 3*10465441SEvalZero * 4*10465441SEvalZero * SPDX-License-Identifier: Apache-2.0 5*10465441SEvalZero * 6*10465441SEvalZero * Change Logs: 7*10465441SEvalZero * Date Author Notes 8*10465441SEvalZero */ 9*10465441SEvalZero #include "Semaphore.h" 10*10465441SEvalZero 11*10465441SEvalZero using namespace rtthread; 12*10465441SEvalZero Semaphore(const char * name,int32_t count)13*10465441SEvalZeroSemaphore::Semaphore(const char *name, int32_t count) 14*10465441SEvalZero { 15*10465441SEvalZero rt_sem_init(&mID, name, count, RT_IPC_FLAG_FIFO); 16*10465441SEvalZero } 17*10465441SEvalZero wait(int32_t millisec)18*10465441SEvalZerobool Semaphore::wait(int32_t millisec) 19*10465441SEvalZero { 20*10465441SEvalZero rt_int32_t tick; 21*10465441SEvalZero 22*10465441SEvalZero if (millisec < 0) 23*10465441SEvalZero tick = -1; 24*10465441SEvalZero else 25*10465441SEvalZero tick = rt_tick_from_millisecond(millisec); 26*10465441SEvalZero 27*10465441SEvalZero return rt_sem_take(&mID, tick) == RT_EOK; 28*10465441SEvalZero } 29*10465441SEvalZero release(void)30*10465441SEvalZerovoid Semaphore::release(void) 31*10465441SEvalZero { 32*10465441SEvalZero rt_sem_release(&mID); 33*10465441SEvalZero } 34*10465441SEvalZero ~Semaphore()35*10465441SEvalZeroSemaphore::~Semaphore() 36*10465441SEvalZero { 37*10465441SEvalZero rt_sem_detach(&mID); 38*10465441SEvalZero } 39