fdevent.h revision dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0
1237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa/*
2237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa * Copyright (C) 2006 The Android Open Source Project
3237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa *
4237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa * Licensed under the Apache License, Version 2.0 (the "License");
5237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa * you may not use this file except in compliance with the License.
6237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa * You may obtain a copy of the License at
7237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa *
8237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa *      http://www.apache.org/licenses/LICENSE-2.0
9237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa *
10237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa * Unless required by applicable law or agreed to in writing, software
11237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa * distributed under the License is distributed on an "AS IS" BASIS,
12237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa * See the License for the specific language governing permissions and
14237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa * limitations under the License.
15237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa */
16237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa
17237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa#ifndef __FDEVENT_H
18237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa#define __FDEVENT_H
19237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa
20237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa/* events that may be observed */
21237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa#define FDE_READ              0x0001
22677ef21613a9d35053ec098444832ce4125a847eDaisuke Miyakawa#define FDE_WRITE             0x0002
23237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa#define FDE_ERROR             0x0004
24237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa
25237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa/* features that may be set (via the events set/add/del interface) */
26237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa#define FDE_DONT_CLOSE        0x0080
27237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa
28237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawatypedef struct fdevent fdevent;
29237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa
30237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawatypedef void (*fd_func)(int fd, unsigned events, void *userdata);
31237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa
32237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa/* Allocate and initialize a new fdevent object
33237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa*/
34237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawafdevent *fdevent_create(int fd, fd_func func, void *arg);
35237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa
36237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa/* Uninitialize and deallocate an fdevent object that was
37237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa** created by fdevent_create()
38237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa*/
39237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawavoid fdevent_destroy(fdevent *fde);
40237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa
41237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa/* Initialize an fdevent object that was externally allocated
42237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa*/
43237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawavoid fdevent_install(fdevent *fde, int fd, fd_func func, void *arg);
44237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa
45237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa/* Uninitialize an fdevent object that was initialized by
46237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa** fdevent_install()
47237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa*/
48237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawavoid fdevent_remove(fdevent *item);
49237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa
50237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa/* Change which events should cause notifications
51237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa*/
52237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawavoid fdevent_set(fdevent *fde, unsigned events);
53237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawavoid fdevent_add(fdevent *fde, unsigned events);
54237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawavoid fdevent_del(fdevent *fde, unsigned events);
55237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa
56237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa/* loop forever, handling events.
57237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa*/
58237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawavoid fdevent_loop();
59237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa
60237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawastruct fdevent
61237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa{
62237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa    fdevent *next;
63237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa    fdevent *prev;
64237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa
65237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa    int fd;
66237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa    unsigned short state;
67237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa    unsigned short events;
68237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa
69237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa    fd_func func;
70237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa    void *arg;
71237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa};
72237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa
73237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa
74237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa#endif
75237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawa