summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2018-03-01 14:08:53 +0800
committerGitHub <[email protected]>2018-03-01 14:08:53 +0800
commit44def114fb05bfff3556f70186cc4a74400dc217 (patch)
tree2b7acaf70ec61499d4266d74a8c0551a85260111 /include
parentef668bc3aa99992208ba6808fe430e5d00849b2f (diff)
parent38b9ed3118f7df9fd683b9d3bd4425ab604ee2bc (diff)
Merge pull request #1241 from BernardXiong/feature_signal
[Kernel] add sigwait implementation
Diffstat (limited to 'include')
-rw-r--r--include/libc/libc_signal.h38
-rw-r--r--include/rtdef.h4
-rw-r--r--include/rtthread.h1
3 files changed, 24 insertions, 19 deletions
diff --git a/include/libc/libc_signal.h b/include/libc/libc_signal.h
index cc4552f990..dabcad1a34 100644
--- a/include/libc/libc_signal.h
+++ b/include/libc/libc_signal.h
@@ -30,6 +30,7 @@
extern "C" {
#endif
+#ifndef HAVE_SYS_SIGNALS
/* Signal Generation and Delivery, P1003.1b-1993, p. 63
NOTE: P1003.1c/D10, p. 34 adds sigev_notify_function and
sigev_notify_attributes to the sigevent structure. */
@@ -59,14 +60,15 @@ struct siginfo
union sigval si_value;
};
typedef struct siginfo siginfo_t;
+#endif
-#define SI_USER 0x01 /* Signal sent by kill(). */
-#define SI_QUEUE 0x02 /* Signal sent by sigqueue(). */
-#define SI_TIMER 0x03 /* Signal generated by expiration of a
+#define SI_USER 0x01 /* Signal sent by kill(). */
+#define SI_QUEUE 0x02 /* Signal sent by sigqueue(). */
+#define SI_TIMER 0x03 /* Signal generated by expiration of a
timer set by timer_settime(). */
-#define SI_ASYNCIO 0x04 /* Signal generated by completion of an
- asynchronous I/O request. */
-#define SI_MESGQ 0x05 /* Signal generated by arrival of a
+#define SI_ASYNCIO 0x04 /* Signal generated by completion of an
+ asynchronous I/O request. */
+#define SI_MESGQ 0x05 /* Signal generated by arrival of a
message on an empty message queue. */
#ifdef RT_USING_NEWLIB
@@ -107,17 +109,17 @@ typedef unsigned long sigset_t;
#define SIGRTMAX 31
#define NSIG 32
-#define SIG_SETMASK 0 /* set mask with sigprocmask() */
-#define SIG_BLOCK 1 /* set of signals to block */
-#define SIG_UNBLOCK 2 /* set of signals to, well, unblock */
+#define SIG_SETMASK 0 /* set mask with sigprocmask() */
+#define SIG_BLOCK 1 /* set of signals to block */
+#define SIG_UNBLOCK 2 /* set of signals to, well, unblock */
typedef void (*_sig_func_ptr)(int);
struct sigaction
{
- _sig_func_ptr sa_handler;
- sigset_t sa_mask;
- int sa_flags;
+ _sig_func_ptr sa_handler;
+ sigset_t sa_mask;
+ int sa_flags;
};
#define sigaddset(what,sig) (*(what) |= (1<<(sig)), 0)
@@ -163,17 +165,17 @@ typedef unsigned long sigset_t;
#define SIGRTMAX 31
#define NSIG 32
-#define SIG_SETMASK 0 /* set mask with sigprocmask() */
-#define SIG_BLOCK 1 /* set of signals to block */
-#define SIG_UNBLOCK 2 /* set of signals to, well, unblock */
+#define SIG_SETMASK 0 /* set mask with sigprocmask() */
+#define SIG_BLOCK 1 /* set of signals to block */
+#define SIG_UNBLOCK 2 /* set of signals to, well, unblock */
typedef void (*_sig_func_ptr)(int);
struct sigaction
{
- _sig_func_ptr sa_handler;
- sigset_t sa_mask;
- int sa_flags;
+ _sig_func_ptr sa_handler;
+ sigset_t sa_mask;
+ int sa_flags;
};
#define sigaddset(what,sig) (*(what) |= (1<<(sig)), 0)
diff --git a/include/rtdef.h b/include/rtdef.h
index f2da3ac7bc..2404f7a364 100644
--- a/include/rtdef.h
+++ b/include/rtdef.h
@@ -451,8 +451,10 @@ typedef struct rt_timer *rt_timer_t;
* @addtogroup Signal
*/
#ifdef RT_USING_SIGNALS
+#include <libc/libc_signal.h>
typedef unsigned long rt_sigset_t;
typedef void (*rt_sighandler_t)(int signo);
+typedef siginfo_t rt_siginfo_t;
#define RT_SIG_MAX 32
#endif
@@ -481,7 +483,7 @@ typedef void (*rt_sighandler_t)(int signo);
#define RT_THREAD_STAT_SIGNAL 0x10
#define RT_THREAD_STAT_SIGNAL_READY (RT_THREAD_STAT_SIGNAL | RT_THREAD_READY)
-#define RT_THREAD_STAT_SIGNAL_SUSPEND 0x20
+#define RT_THREAD_STAT_SIGNAL_WAIT 0x20
#define RT_THREAD_STAT_SIGNAL_MASK 0xf0
/**
diff --git a/include/rtthread.h b/include/rtthread.h
index 61cd82d97e..c92f7f012f 100644
--- a/include/rtthread.h
+++ b/include/rtthread.h
@@ -204,6 +204,7 @@ void rt_scheduler_sethook(void (*hook)(rt_thread_t from, rt_thread_t to));
void rt_signal_mask(int signo);
void rt_signal_unmask(int signo);
rt_sighandler_t rt_signal_install(int signo, rt_sighandler_t handler);
+int rt_signal_wait(const rt_sigset_t *set, rt_siginfo_t *si, rt_int32_t timeout);
int rt_system_signal_init(void);
#endif