Linux Kernel input设备之handler

    xiaoxiao2021-03-25  46

    /**  * struct input_handler - implements one of interfaces for input devices  * @private: driver-specific data  * @event: event handler. This method is being called by input core with  * interrupts disabled and dev->event_lock spinlock held and so  * it may not sleep  * @events: event sequence handler. This method is being called by  * input core with interrupts disabled and dev->event_lock  * spinlock held and so it may not sleep  * @filter: similar to @event; separates normal event handlers from  * "filters".  * @match: called after comparing device's id with handler's id_table  * to perform fine-grained matching between device and handler  * @connect: called when attaching a handler to an input device  * @disconnect: disconnects a handler from input device  * @start: starts handler for given handle. This function is called by  * input core right after connect() method and also when a process  * that "grabbed" a device releases it  * @legacy_minors: set to %true by drivers using legacy minor ranges  * @minor: beginning of range of 32 legacy minors for devices this driver  * can provide  * @name: name of the handler, to be shown in /proc/bus/input/handlers  * @id_table: pointer to a table of input_device_ids this driver can  * handle  * @h_list: list of input handles associated with the handler  * @node: for placing the driver onto input_handler_list  *  * Input handlers attach to input devices and create input handles. There  * are likely several handlers attached to any given input device at the  * same time. All of them will get their copy of input event generated by  * the device.  *  * The very same structure is used to implement input filters. Input core  * allows filters to run first and will not pass event to regular handlers  * if any of the filters indicate that the event should be filtered (by  * returning %true from their filter() method).  *  * Note that input core serializes calls to connect() and disconnect()  * methods.  */ struct input_handler { void *private; void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value); void (*events)(struct input_handle *handle,       const struct input_value *vals, unsigned int count); bool (*filter)(struct input_handle *handle, unsigned int type, unsigned int code, int value); bool (*match)(struct input_handler *handler, struct input_dev *dev); int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id); void (*disconnect)(struct input_handle *handle); void (*start)(struct input_handle *handle); bool legacy_minors; int minor; const char *name; const struct input_device_id *id_table; struct list_head h_list; struct list_head node; }; /**  * struct input_handle - links input device with an input handler  * @private: handler-specific data  * @open: counter showing whether the handle is 'open', i.e. should deliver  * events from its device  * @name: name given to the handle by handler that created it  * @dev: input device the handle is attached to  * @handler: handler that works with the device through this handle  * @d_node: used to put the handle on device's list of attached handles  * @h_node: used to put the handle on handler's list of handles from which  * it gets events  */ struct input_handle { void *private; int open; const char *name; struct input_dev *dev; struct input_handler *handler; struct list_head d_node; struct list_head h_node; };
    转载请注明原文地址: https://ju.6miu.com/read-37162.html

    最新回复(0)