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