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