Xenomai 3.3.2
Loading...
Searching...
No Matches
sem.h
1/*
2 * Copyright (C) 2011 Philippe Gerum <rpm@xenomai.org>.
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
17 */
18#ifndef _XENOMAI_ALCHEMY_SEM_H
19#define _XENOMAI_ALCHEMY_SEM_H
20
21#include <stdint.h>
22#include <alchemy/timer.h>
23
30#define S_PRIO 0x1 /* Pend by task priority order. */
31#define S_FIFO 0x0 /* Pend by FIFO order. */
32#define S_PULSE 0x2 /* Enable pulse mode. */
33
34struct RT_SEM {
35 uintptr_t handle;
36};
37
38typedef struct RT_SEM RT_SEM;
39
51 unsigned long count;
59 char name[XNOBJECT_NAME_LEN];
60};
61
62typedef struct RT_SEM_INFO RT_SEM_INFO;
63
64#ifdef __cplusplus
65extern "C" {
66#endif
67
68int rt_sem_create(RT_SEM *sem,
69 const char *name,
70 unsigned long icount,
71 int mode);
72
73int rt_sem_delete(RT_SEM *sem);
74
75int rt_sem_p_timed(RT_SEM *sem,
76 const struct timespec *abs_timeout);
77
78static inline int rt_sem_p_until(RT_SEM *sem, RTIME timeout)
79{
80 struct timespec ts;
81 return rt_sem_p_timed(sem, alchemy_abs_timeout(timeout, &ts));
82}
83
84static inline int rt_sem_p(RT_SEM *sem, RTIME timeout)
85{
86 struct timespec ts;
87 return rt_sem_p_timed(sem, alchemy_rel_timeout(timeout, &ts));
88}
89
90int rt_sem_v(RT_SEM *sem);
91
92int rt_sem_broadcast(RT_SEM *sem);
93
94int rt_sem_inquire(RT_SEM *sem,
95 RT_SEM_INFO *info);
96
97int rt_sem_bind(RT_SEM *sem,
98 const char *name, RTIME timeout);
99
100int rt_sem_unbind(RT_SEM *sem);
101
102#ifdef __cplusplus
103}
104#endif
105
108#endif /* _XENOMAI_ALCHEMY_SEM_H */
int rt_sem_bind(RT_SEM *sem, const char *name, RTIME timeout)
Bind to a semaphore.
Definition sem.c:547
int rt_sem_inquire(RT_SEM *sem, RT_SEM_INFO *info)
Query semaphore status.
Definition sem.c:479
int rt_sem_broadcast(RT_SEM *sem)
Broadcast a semaphore.
Definition sem.c:440
int rt_sem_unbind(RT_SEM *sem)
Unbind from a semaphore.
Definition sem.c:569
int rt_sem_delete(RT_SEM *sem)
Delete a semaphore.
Definition sem.c:258
int rt_sem_v(RT_SEM *sem)
Signal a semaphore.
Definition sem.c:405
int rt_sem_create(RT_SEM *sem, const char *name, unsigned long icount, int mode)
Create a counting semaphore.
Definition sem.c:177
int rt_sem_p_timed(RT_SEM *sem, const struct timespec *abs_timeout)
Pend on a semaphore.
Definition sem.c:368
static int rt_sem_p_until(RT_SEM *sem, RTIME timeout)
Pend on a semaphore (with absolute scalar timeout).
Definition sem.h:78
static int rt_sem_p(RT_SEM *sem, RTIME timeout)
Pend on a semaphore (with relative scalar timeout).
Definition sem.h:84
Semaphore status descriptor .
Definition sem.h:47
unsigned long count
Current semaphore value.
Definition sem.h:51
int nwaiters
Number of tasks waiting on the semaphore.
Definition sem.h:55
char name[XNOBJECT_NAME_LEN]
Name of semaphore.
Definition sem.h:59