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_SIGNALED    = ZX_COUNTER_SIGNALED;
86        const COUNTER_POSITIVE    = ZX_COUNTER_POSITIVE;
87        const COUNTER_NON_POSITIVE    = ZX_COUNTER_NON_POSITIVE;
88
89        // Socket
90        const SOCKET_READABLE            = ZX_SOCKET_READABLE;
91        const SOCKET_WRITABLE            = ZX_SOCKET_WRITABLE;
92        const SOCKET_PEER_CLOSED         = ZX_SOCKET_PEER_CLOSED;
93        const SOCKET_PEER_WRITE_DISABLED = ZX_SOCKET_PEER_WRITE_DISABLED;
94        const SOCKET_WRITE_DISABLED      = ZX_SOCKET_WRITE_DISABLED;
95        const SOCKET_READ_THRESHOLD      = ZX_SOCKET_READ_THRESHOLD;
96        const SOCKET_WRITE_THRESHOLD     = ZX_SOCKET_WRITE_THRESHOLD;
97
98        // Resource
99        const RESOURCE_DESTROYED   = ZX_RESOURCE_DESTROYED;
100        const RESOURCE_READABLE    = ZX_RESOURCE_READABLE;
101        const RESOURCE_WRITABLE    = ZX_RESOURCE_WRITABLE;
102        const RESOURCE_CHILD_ADDED = ZX_RESOURCE_CHILD_ADDED;
103
104        // Fifo
105        const FIFO_READABLE    = ZX_FIFO_READABLE;
106        const FIFO_WRITABLE    = ZX_FIFO_WRITABLE;
107        const FIFO_PEER_CLOSED = ZX_FIFO_PEER_CLOSED;
108
109        // Iob
110        const IOB_PEER_CLOSED = ZX_IOB_PEER_CLOSED;
111        const IOB_SHARED_REGION_UPDATED = ZX_IOB_SHARED_REGION_UPDATED;
112
113        // Job
114        const JOB_TERMINATED   = ZX_JOB_TERMINATED;
115        const JOB_NO_JOBS      = ZX_JOB_NO_JOBS;
116        const JOB_NO_PROCESSES = ZX_JOB_NO_PROCESSES;
117
118        // Process
119        const PROCESS_TERMINATED = ZX_PROCESS_TERMINATED;
120
121        // Thread
122        const THREAD_TERMINATED = ZX_THREAD_TERMINATED;
123        const THREAD_RUNNING    = ZX_THREAD_RUNNING;
124        const THREAD_SUSPENDED  = ZX_THREAD_SUSPENDED;
125
126        // Log
127        const LOG_READABLE = ZX_LOG_READABLE;
128        const LOG_WRITABLE = ZX_LOG_WRITABLE;
129
130        // Timer
131        const TIMER_SIGNALED = ZX_TIMER_SIGNALED;
132
133        // Vmo
134        const VMO_ZERO_CHILDREN = ZX_VMO_ZERO_CHILDREN;
135    }
136}