1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/*
2dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
3dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
4dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * you may not use this file except in compliance with the License.
6dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * You may obtain a copy of the License at
7dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
8dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
10dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * See the License for the specific language governing permissions and
14dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * limitations under the License.
15dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */
16dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
17dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#ifndef __FDEVENT_H
18dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define __FDEVENT_H
19dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
20f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner#include <stdint.h>  /* for int64_t */
21f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner
22dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* events that may be observed */
23dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define FDE_READ              0x0001
24dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define FDE_WRITE             0x0002
25dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define FDE_ERROR             0x0004
26f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner#define FDE_TIMEOUT           0x0008
27dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
28dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* features that may be set (via the events set/add/del interface) */
29dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define FDE_DONT_CLOSE        0x0080
30dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
31dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef struct fdevent fdevent;
32dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
33dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef void (*fd_func)(int fd, unsigned events, void *userdata);
34dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
35dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* Allocate and initialize a new fdevent object
36f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner * Note: use FD_TIMER as 'fd' to create a fd-less object
37f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner * (used to implement timers).
38dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project*/
39dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectfdevent *fdevent_create(int fd, fd_func func, void *arg);
40dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
41dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* Uninitialize and deallocate an fdevent object that was
42dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** created by fdevent_create()
43dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project*/
44dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_destroy(fdevent *fde);
45dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
46dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* Initialize an fdevent object that was externally allocated
47dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project*/
48dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_install(fdevent *fde, int fd, fd_func func, void *arg);
49dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
50dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* Uninitialize an fdevent object that was initialized by
51dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** fdevent_install()
52dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project*/
53dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_remove(fdevent *item);
54dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
55dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* Change which events should cause notifications
56dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project*/
57dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_set(fdevent *fde, unsigned events);
58dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_add(fdevent *fde, unsigned events);
59dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_del(fdevent *fde, unsigned events);
60dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
61f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turnervoid fdevent_set_timeout(fdevent *fde, int64_t  timeout_ms);
62f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner
63dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* loop forever, handling events.
64dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project*/
65dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid fdevent_loop();
66dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
67dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct fdevent
68dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{
69dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    fdevent *next;
70dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    fdevent *prev;
71dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
72dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    int fd;
73408fa57864c01113deaa213e5c1848a9c594ae92JP Abgrall    int force_eof;
74408fa57864c01113deaa213e5c1848a9c594ae92JP Abgrall
75dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    unsigned short state;
76dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    unsigned short events;
77f6330a2eeb78c0971f33feee7fd1ee06472a7dbaDavid 'Digit' Turner
78dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    fd_func func;
79dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    void *arg;
80dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project};
81dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
82dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
83dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif
84