zx/
signals.rs

1// Copyright 2018 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5//! Type-safe bindings for Zircon signals.
6
7// Signals::NONE is not actually a flag but that's not very likely to be confusing
8#![allow(clippy::bad_bit_mask)]
9
10use crate::sys::*;
11use bitflags::bitflags;
12
13bitflags! {
14    /// Signals that can be waited upon.
15    ///
16    /// See
17    /// [Objects and signals](https://fuchsia.dev/fuchsia-src/concepts/kernel/concepts#objects_and_signals)
18    /// in the Zircon kernel documentation. Note: the names of signals are still in flux.
19    #[repr(transparent)]
20    #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
21    pub struct Signals: zx_signals_t {
22        const NONE          = ZX_SIGNAL_NONE;
23        const OBJECT_ALL    = ZX_OBJECT_SIGNAL_ALL;
24        const USER_ALL      = ZX_USER_SIGNAL_ALL;
25        const OBJECT_0      = ZX_OBJECT_SIGNAL_0;
26        const OBJECT_1      = ZX_OBJECT_SIGNAL_1;
27        const OBJECT_2      = ZX_OBJECT_SIGNAL_2;
28        const OBJECT_3      = ZX_OBJECT_SIGNAL_3;
29        const OBJECT_4      = ZX_OBJECT_SIGNAL_4;
30        const OBJECT_5      = ZX_OBJECT_SIGNAL_5;
31        const OBJECT_6      = ZX_OBJECT_SIGNAL_6;
32        const OBJECT_7      = ZX_OBJECT_SIGNAL_7;
33        const OBJECT_8      = ZX_OBJECT_SIGNAL_8;
34        const OBJECT_9      = ZX_OBJECT_SIGNAL_9;
35        const OBJECT_10     = ZX_OBJECT_SIGNAL_10;
36        const OBJECT_11     = ZX_OBJECT_SIGNAL_11;
37        const OBJECT_12     = ZX_OBJECT_SIGNAL_12;
38        const OBJECT_13     = ZX_OBJECT_SIGNAL_13;
39        const OBJECT_14     = ZX_OBJECT_SIGNAL_14;
40        const OBJECT_15     = ZX_OBJECT_SIGNAL_15;
41        const OBJECT_16     = ZX_OBJECT_SIGNAL_16;
42        const OBJECT_17     = ZX_OBJECT_SIGNAL_17;
43        const OBJECT_18     = ZX_OBJECT_SIGNAL_18;
44        const OBJECT_19     = ZX_OBJECT_SIGNAL_19;
45        const OBJECT_20     = ZX_OBJECT_SIGNAL_20;
46        const OBJECT_21     = ZX_OBJECT_SIGNAL_21;
47        const OBJECT_22     = ZX_OBJECT_SIGNAL_22;
48        const OBJECT_HANDLE_CLOSED = ZX_OBJECT_HANDLE_CLOSED;
49        const USER_0        = ZX_USER_SIGNAL_0;
50        const USER_1        = ZX_USER_SIGNAL_1;
51        const USER_2        = ZX_USER_SIGNAL_2;
52        const USER_3        = ZX_USER_SIGNAL_3;
53        const USER_4        = ZX_USER_SIGNAL_4;
54        const USER_5        = ZX_USER_SIGNAL_5;
55        const USER_6        = ZX_USER_SIGNAL_6;
56        const USER_7        = ZX_USER_SIGNAL_7;
57
58        const OBJECT_READABLE    = ZX_OBJECT_READABLE;
59        const OBJECT_WRITABLE    = ZX_OBJECT_WRITABLE;
60        const OBJECT_PEER_CLOSED = ZX_OBJECT_PEER_CLOSED;
61
62        // Cancelation (handle was closed while waiting with it)
63        const HANDLE_CLOSED = ZX_SIGNAL_HANDLE_CLOSED;
64
65        // Event
66        const EVENT_SIGNALED = ZX_EVENT_SIGNALED;
67
68        // EventPair
69        const EVENTPAIR_SIGNALED    = ZX_EVENTPAIR_SIGNALED;
70        const EVENTPAIR_PEER_CLOSED = ZX_EVENTPAIR_PEER_CLOSED;
71
72        // Task signals (process, thread, job)
73        const TASK_TERMINATED = ZX_TASK_TERMINATED;
74
75        // Channel
76        const CHANNEL_READABLE    = ZX_CHANNEL_READABLE;
77        const CHANNEL_WRITABLE    = ZX_CHANNEL_WRITABLE;
78        const CHANNEL_PEER_CLOSED = ZX_CHANNEL_PEER_CLOSED;
79
80        // Clock
81        const CLOCK_STARTED       = ZX_CLOCK_STARTED;
82        const CLOCK_UPDATED       = ZX_CLOCK_UPDATED;
83
84        // Counter
85        const COUNTER_POSITIVE    = ZX_COUNTER_POSITIVE;
86        const COUNTER_NON_POSITIVE    = ZX_COUNTER_NON_POSITIVE;
87
88        // Socket
89        const SOCKET_READABLE            = ZX_SOCKET_READABLE;
90        const SOCKET_WRITABLE            = ZX_SOCKET_WRITABLE;
91        const SOCKET_PEER_CLOSED         = ZX_SOCKET_PEER_CLOSED;
92        const SOCKET_PEER_WRITE_DISABLED = ZX_SOCKET_PEER_WRITE_DISABLED;
93        const SOCKET_WRITE_DISABLED      = ZX_SOCKET_WRITE_DISABLED;
94        const SOCKET_READ_THRESHOLD      = ZX_SOCKET_READ_THRESHOLD;
95        const SOCKET_WRITE_THRESHOLD     = ZX_SOCKET_WRITE_THRESHOLD;
96
97        // Resource
98        const RESOURCE_DESTROYED   = ZX_RESOURCE_DESTROYED;
99        const RESOURCE_READABLE    = ZX_RESOURCE_READABLE;
100        const RESOURCE_WRITABLE    = ZX_RESOURCE_WRITABLE;
101        const RESOURCE_CHILD_ADDED = ZX_RESOURCE_CHILD_ADDED;
102
103        // Fifo
104        const FIFO_READABLE    = ZX_FIFO_READABLE;
105        const FIFO_WRITABLE    = ZX_FIFO_WRITABLE;
106        const FIFO_PEER_CLOSED = ZX_FIFO_PEER_CLOSED;
107
108        // Iob
109        const IOB_PEER_CLOSED = ZX_IOB_PEER_CLOSED;
110
111        // Job
112        const JOB_TERMINATED   = ZX_JOB_TERMINATED;
113        const JOB_NO_JOBS      = ZX_JOB_NO_JOBS;
114        const JOB_NO_PROCESSES = ZX_JOB_NO_PROCESSES;
115
116        // Process
117        const PROCESS_TERMINATED = ZX_PROCESS_TERMINATED;
118
119        // Thread
120        const THREAD_TERMINATED = ZX_THREAD_TERMINATED;
121        const THREAD_RUNNING    = ZX_THREAD_RUNNING;
122        const THREAD_SUSPENDED  = ZX_THREAD_SUSPENDED;
123
124        // Log
125        const LOG_READABLE = ZX_LOG_READABLE;
126        const LOG_WRITABLE = ZX_LOG_WRITABLE;
127
128        // Timer
129        const TIMER_SIGNALED = ZX_TIMER_SIGNALED;
130
131        // Vmo
132        const VMO_ZERO_CHILDREN = ZX_VMO_ZERO_CHILDREN;
133    }
134}