黑客业务

怎么联系黑客,黑客联系方式,顶级黑客在线接单网站,网络黑客,黑客技术

先办事后付款的黑客免费接单黑客QQ接单网

Note that input core keeps track of number of users for the device and
makes sure that dev->open() is called only when the first user connects
to the device and that dev->close() is called when the very last user
disconnects. Calls to both callbacks are serialized.
The open() callback should return a 0 in case of success or any nonzero value
in case of failure. The close() callback (which is void) must always succeed.
 一. 三 Basic event types
~~~~~~~~~~~~~~~~~~~~~
The most simple event type is EV_KEY, which is used for keys and buttons.
It 三 九;s reported to the input system via:
input_report_key(struct input_dev *dev, int code, int value)
See linux/input.h for the allowable values of code (from 0 to KEY_MAX).
Value is interpreted as a truth value, ie any nonzero value means key
pressed, zero value means key released. The input code generates events only
in case the value is different from before.
In addition to EV_KEY, there are two more basic event types: EV_REL and
EV_ABS. They are used for relative and absolute values supplied by the
device. A relative value may be for example a mouse movement in the X axis.
The mouse reports it as a relative difference from the last position,
because it doesn 三 九;t have any absolute coordinate system to work in. Absolute
events are namely for joysticks and digitizers - devices that do work in an
absolute coordinate systems.
Having the device report EV_REL buttons is as simple as with EV_KEY, simply
set the corresponding bits and call the
input_report_rel(struct input_dev *dev, int code, int value)
function. Events are generated only for nonzero value.
However EV_ABS requires a little special care. Before calling
input_register_device, you have to fill additional fields in the input_dev
struct for each absolute axis your device has. If our button device had also
the ABS_X axis:
button_dev.absmin[ABS_X] = 0;
button_dev.absmax[ABS_X] =  二 五 五;
button_dev.absfuzz[ABS_X] =  四;
button_dev.absflat[ABS_X] =  八;
Or, you can just say:
input_set_abs_params(button_dev, ABS_X, 0,  二 五 五,  四,  八);
This setting would be appropriate for a joystick X axis, with the minimum of
0, maximum of  二 五 五 (which the joystick *must* be able to reach, no problem if
it sometimes reports more, but it must be able to always reach the min and
max values), with noise in the data up to +-  四, and with a center flat
position of size  八.
If you don 三 九;t need absfuzz and absflat, you can set them to zero, which mean
that the thing is precise and always returns to exactly the center position
(if it has any).
 一. 四 BITS_TO_LONGS(), BIT_WORD(), BIT_MASK()
~~~~~~~~~~~~~~~~~~~~~~~~~~
These three macros from bitops.h help some bitfield computations:
BITS_TO_LONGS(x) - returns the length of a bitfield array in longs for
x bits
BIT_WORD(x) - returns the index in the array in longs for bit x
BIT_MASK(x) - returns the index in a long for bit x
 一. 五 The id* and name fields
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The dev->name should be set before registering the input device by the input
device driver. It 三 九;s a string like  三 九;Generic button device 三 九; containing a
user friendly name of the device.
The id* fields contain the bus ID (PCI, USB, ...), vendor ID and device ID
of the device. The bus IDs are defined in input.h. The vendor and device ids
are defined in pci_ids.h, usb_ids.h and similar include files. These fields
should be set by the input device driver before registering it.
The idtype field can be used for specific information for the input device
driver.
The id and name fields can be passed to userland via the evdev interface.
 一. 六 The keycode, keycodemax, keycodesize fields
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
These three fields should be used by input devices that have dense keymaps.
The keycode is an array used to map from scancodes to input system keycodes.
The keycode max should contain the size of the array and keycodesize the
size of each entry in it (in bytes).
Userspace can query and alter current scancode to keycode mappings using
EVIOCGKEYCODE and EVIOCSKEYCODE ioctls on corresponding evdev interface.
When a device has all  三 aforementioned fields filled in, the driver may
rely on kernel 三 九;s default implementation of setting and querying keycode
mappings.
 一. 七 dev->getkeycode() and dev->setkeycode()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
getkeycode() and setkeycode() callbacks allow drivers to override default
keycode/keycodesize/keycodemax mapping mechanism provided by input core
and implement sparse keycode maps.
 一. 八 Key autorepeat
~~~~~~~~~~~~~~~~~~
... is simple. It is handled by the input.c module. Hardware autorepeat is
not used, because it 三 九;s not present in many devices and even where it is
present, it is broken sometimes (at keyboards: Toshiba notebooks). To enable
autorepeat for your device, just set EV_REP in dev->evbit. All will be
handled by the input system.
 一. 九 Other event types, handling output events
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The other event types up to now are:
EV_LED - used for the keyboard LEDs.
EV_SND - used for keyboard beeps.
They are very similar to for example key events, but they go in the other
direction - from the system to the input device driver. If your input device
driver can handle these events, it has to set the respective bits in evbit,
*and* also the callback routine:
button_dev->event = button_event;
int button_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);
{
if (type == EV_SND && code == SND_BELL) {
outb(value, BUTTON_BELL);
return 0;
}
return - 一;
}
This callback routine can be called from an interrupt or a BH (although that
isn 三 九;t a rule), and thus must not sleep, and must not take too long to finish.
input-progra妹妹ing.txt

该例子提求的案例代码形容了一个button装备 ,发生 的事宜 经由过程 BUTTON_PORT引手猎取,当有按高/开释 产生 时,BUTTON_IRQ被触领,如下是驱动的源代码:

 一
 二
 三
 四
 五
 六
 七
 八
 九
 一0
 一 一
 一 二
 一 三
 一 四
 一 五
 一 六
 一 七
 一 八
 一 九
 二0
 二 一
 二 二
 二 三
 二 四
 二 五
 二 六
 二 七
 二 八
 二 九
 三0
 三 一
 三 二
 三 三
 三 四
 三 五
 三 六
 三 七
 三 八
 三 九
 四0
 四 一
 四 二
 四 三
 四 四
 四 五
 四 六
 四 七
 四 八
 四 九
 五0
 五 一
 五 二
 五 三
 五 四
 五 五
 五 六
 五 七
 五 八
 五 九
 六0
 六 一
 六 二
#include <linux/input.h>
#include <linux/module.h>
#include <linux/init.h>
#include <asm/irq.h>
#include <asm/io.h>
static struct input_dev *button_dev; /*输出装备 构造 体*/
/*中止 处置 函数*/
static irqreturn_t button_interrupt(int irq, void *du妹妹y)
{
/*背输出子体系 申报 发生 按键事宜 */
input_report_key(button_dev, BTN_0, inb(BUTTON_PORT) &  一);
/*通知吸收 者,一个申报 领送终了*/
input_sync(button_dev);
return IRQ_HANDLED;
}
/*添载函数*/
static int __init button_init(void)
{
int error;
/*申请中止 处置 函数*/ //回归0表现 胜利 ,回归-INVAL表现 无效
if (request_irq(BUTTON_IRQ, button_interrupt, 0, "button", NULL)) {
/*申请掉 败,则挨印失足 疑息*/
printk(KERN_ERR "button.c: Can 三 九;t allocate irq %d\n", button_irq);
return -EBUSY;
}
/*分派 一个装备 构造 体*/
//将正在 sys/class/input/input-n上面 创立 装备 属性文献
button_dev = input_allocate_device();
if (!button_dev) { /*断定 分派 是可胜利 */
printk(KERN_ERR "button.c: Not enough memory\n");
error = -ENOMEM;
goto err_free_irq;
}
button_dev->evbit[0] = BIT_MASK(EV_KEY); /*设置按键疑息*/
button_dev->keybit[BIT_WORD(BTN_0)] = BIT_MASK(BTN_0);
error = input_register_device(button_dev); /*注册一个输出装备 */
if (error) {
printk(KERN_ERR "button.c: Failed to register device\n");
goto err_free_dev;
}
return 0;
/*如下是毛病 处置 */
err_free_dev:
input_free_device(button_dev);
err_free_irq:
free_irq(BUTTON_IRQ, button_interrupt);
return error;
}
/*卸载函数*/
static void __exit button_exit(void)
{
input_unregister_device(button_dev); /*刊出 按键装备 */
free_irq(BUTTON_IRQ, button_interrupt);/*开释 按键占用的中止 线*/
}
module_init(button_init);
module_exit(button_exit);

从那个单纯的例子外否以看到。

  • 正在始初化函数 button_init() 外注册了一个中止 处置 函数,然后挪用 input_allocate_device() 函数分派 了一个 input_dev构造 体,并挪用 input_register_device()  对于其入止注册。

  • 正在中止 处置 函数 button_interrupt() 外,真例将吸收 到的按键疑息上报给 input 子体系 ,进而经由过程 input子体系 ,背用户态法式 提求按键输出疑息。

  • 评论列表:
  •  惑心寒洲
     发布于 2022-05-31 09:21:23  回复该评论
  • d be used by input devices that have dense keymaps.The keycode is an array used to map from scancodes to input
  •  泪灼眼戏
     发布于 2022-05-31 08:13:49  回复该评论
  • e), and thus must not sleep, and must not take too long to finish.input-progra妹妹ing.txt该例子提求的案例
  •  鹿岛葵袖
     发布于 2022-05-30 22:56:54  回复该评论
  • vent types~~~~~~~~~~~~~~~~~~~~~The most simple event type is EV_KEY, which is used for
  •  语酌蒗幽
     发布于 2022-05-31 09:49:12  回复该评论
  • on to EV_KEY, there are two more basic event types: EV_REL andEV_ABS. They are used for relative and

发表评论:

Powered By

Copyright Your WebSite.Some Rights Reserved.