46#define SIG_LIMIT (sizeof(unsigned) * CHAR_BIT)
48#define SIGSET(signo) (((signo) < (SIG_LIMIT)) ? 1U << (signo) : 0U)
50#define sigAll ( 0U-1 )
56typedef struct __sig sig_t;
65typedef struct __sig sig_id [];
81#define _SIG_INIT() { _OBJ_INIT(), 0 }
89#define OS_SIG( sig ) \
90 sig_t sig[] = { _SIG_INIT() }
93#define static_SIG( sig ) \
94 static sig_t sig[] = { _SIG_INIT() }
118#define SIG_CREATE() \
163int sig_take( sig_t *sig,
unsigned sigset,
unsigned *signo );
167int sig_tryWait( sig_t *sig,
unsigned sigset,
unsigned *signo ) {
return sig_take(sig, sigset, signo); }
185int sig_waitFor( sig_t *sig,
unsigned sigset,
unsigned *signo, cnt_t delay );
201int sig_waitUntil( sig_t *sig,
unsigned sigset,
unsigned *signo, cnt_t time );
227void sig_give( sig_t *sig,
unsigned signo );
240void sig_clear( sig_t *sig,
unsigned signo );
248#if defined(__cplusplus)
255struct Signal :
public __sig
259 Signal(): __sig _SIG_INIT() {}
261 ~Signal() { assert(__sig::obj.queue ==
nullptr); }
266 assert(_src.obj.queue ==
nullptr);
275 int take (
unsigned _sigset,
unsigned *_signo =
nullptr ) {
return sig_take (
this, _sigset, _signo); }
276 int tryWait (
unsigned _sigset,
unsigned *_signo =
nullptr ) {
return sig_tryWait (
this, _sigset, _signo); }
281 int wait (
unsigned _sigset,
unsigned *_signo =
nullptr ) {
return sig_wait (
this, _sigset, _signo); }
#define INFINITE
infinite waiting
Definition osbase.h:250
int sig_tryWait(sig_t *sig, unsigned sigset, unsigned *signo)
alias of sig_take()
Definition ossignal.h:166
int sig_waitFor(sig_t *sig, unsigned sigset, unsigned *signo, cnt_t delay)
wait for a signal from the given set of signals for given duration of time and return the lowest one ...
void sig_clear(sig_t *sig, unsigned signo)
reset given signal in the signal object
int sig_wait(sig_t *sig, unsigned sigset, unsigned *signo)
wait indefinitely for a signal from the given set of signals and return the lowest one in the 'signo'...
Definition ossignal.h:215
void sig_init(sig_t *sig)
initialize a signal object
void sig_kill(sig_t *sig)
alias of sig_reset()
Definition ossignal.h:148
void sig_reset(sig_t *sig)
reset the signal object and wake up all waiting tasks with 'E_STOPPED' event value
int sig_take(sig_t *sig, unsigned sigset, unsigned *signo)
check signal object for a given set of signals and return the lowest one in the 'signo' variable
void sig_give(sig_t *sig, unsigned signo)
set given signal in the signal object
void sig_set(sig_t *sig, unsigned signo)
alias of sig_give()
Definition ossignal.h:230
int sig_waitUntil(sig_t *sig, unsigned sigset, unsigned *signo, cnt_t time)
wait for a signal from the given set of signals until given timepoint and return the lowest one in th...
static constexpr rep until(const std::chrono::time_point< Clock, _Duration > &_time)
time point in ticks, rounded up to whole ticks (only a time point of this clock)
Definition osclock.h:109
static constexpr rep count(const std::chrono::duration< _Rep, _Period > &_delay)
delay in ticks, rounded up to whole ticks; negative delay: IMMEDIATE, delay out of range: INFINITE
Definition osclock.h:102
create and initialize a signal object
Definition ossignal.h:255
void kill()
sig_kill()
Definition ossignal.h:273
void clear(unsigned _signo)
sig_clear()
Definition ossignal.h:283
int tryWait(unsigned _sigset, unsigned *_signo=nullptr)
sig_tryWait()
Definition ossignal.h:275
int take(unsigned _sigset, unsigned *_signo=nullptr)
sig_take()
Definition ossignal.h:274
void reset()
sig_reset()
Definition ossignal.h:272
void give(unsigned _signo)
sig_give()
Definition ossignal.h:281
void set(unsigned _signo)
sig_set()
Definition ossignal.h:282
int waitFor(unsigned _sigset, unsigned *_signo, const T &_delay)
sig_waitFor()
Definition ossignal.h:277
int waitUntil(unsigned _sigset, unsigned *_signo, const T &_time)
sig_waitUntil()
Definition ossignal.h:279
int wait(unsigned _sigset, unsigned *_signo=nullptr)
sig_wait()
Definition ossignal.h:280
constexpr Signal()
constructor, see the constructor parameters of the class
Definition ossignal.h:258