您的位置:首页 > 其它

蓝牙键盘按键添加方法

2012-05-05 13:06 176 查看
修改:
--- a/kernel/drivers/hid/hid-input.c

+++ b/kernel/drivers/hid/hid-input.c

@@ -620,7 +620,11 @@ static void hidinput_configure_usage(struct hid_input *hidi

case 0x289: map_key_clear(KEY_REPLY); break;

case 0x28b: map_key_clear(KEY_FORWARDMAIL); break;

case 0x28c: map_key_clear(KEY_SEND); break;

-

+//Roger add for blue tooth keyboard

+ case 0x1b1: map_key_clear(KEY_SCREEN); break;

+ case 0x30a: map_key_clear(KEY_BRIGHTNESSDOWN); break;

+ case 0x30b: map_key_clear(KEY_BRIGHTNESSUP); break;

+//End of Roger add

default: goto ignore;

}

break;
通过是系统崩溃获取追踪信息:
在kernel/drivers/input/input.c:
void input_event(struct input_dev *dev,

unsigned int type, unsigned int code, int value)

{

unsigned long flags;

//add by cvt_hgd
(int *) 0 =0;
//the end by cvt_hgd

if (is_event_supported(type, dev->evbit, EV_MAX)) {

spin_lock_irqsave(&dev->event_lock, flags);

add_input_randomness(type, code, value);

input_handle_event(dev, type, code, value);

spin_unlock_irqrestore(&dev->event_lock, flags);

}

}

EXPORT_SYMBOL(input_event);

Backtrace:

[<c02a4a80>] (input_event+0x0/0xc8) from [<c02ea70c>] (hidinput_hid_event+0x2e4)

r9:e350f400 r8:00000001 r7:e3658000 r6:00000001 r5:e2c78400

r4:e3658094

[<c02ea428>] (hidinput_hid_event+0x0/0x338) from [<c02e582c>] (hid_process_even)

[<c02e571c>] (hid_process_event+0x0/0x160) from [<c02e5c80>] (hid_report_raw_ev)

r9:e350f400 r8:e2ff9f00 r7:00000000 r6:00000000 r5:e3b25000

r4:e3658000

[<c02e587c>] (hid_report_raw_event+0x0/0x424) from [<c02e5e7c>] (hid_input_repo)

[<c02e5ca0>] (hid_input_report+0x0/0x220) from [<c0402304>] (hidp_session+0x420)

[<c0401ee4>] (hidp_session+0x0/0x6ac) from [<c006e0ec>] (kthread+0x8c/0x94)

[<c006e060>] (kthread+0x0/0x94) from [<c0056fa0>] (do_exit+0x0/0x6b0)

r7:00000013 r6:c0056fa0 r5:c006e060 r4:e3a41ce8

Code: 03a03000 e1a04001 e1a08000 e59f009c (05833000)

---[ end trace 3a88c581571cea3b ]---

type=3,code=0,value=8

type=3,code=1,value=836

type=3,code=2,value=-576

type=0,code=0,value=0

Kernel panic - not syncing: Fatal exception

Hid-a4tech.c (kernel\drivers\hid): input_event(input, EV_REL, value ? REL_HWHEEL :

Hid-a4tech.c (kernel\drivers\hid): input_event(input, usage->type, REL_HWHEEL, value);

Hid-apple.c (kernel\drivers\hid): input_event(input, usage->type, usage->code, value);

Hid-apple.c (kernel\drivers\hid): input_event(input, usage->type, trans->to,

Hid-apple.c (kernel\drivers\hid): input_event(input, usage->type, trans->to,

Hid-apple.c (kernel\drivers\hid): input_event(input, usage->type, trans->to, value);

Hid-apple.c (kernel\drivers\hid): input_event(field->hidinput->input, usage->type, usage->code,

Hid-input.c (kernel\drivers\hid): input_event(input, usage->type, usage->code , hid_hat_to_axis[hat_dir].x);

Hid-input.c (kernel\drivers\hid): input_event(input, usage->type, usage->code + 1, hid_hat_to_axis[hat_dir].y);

Hid-input.c (kernel\drivers\hid): input_event(input, usage->type, (*quirks & HID_QUIRK_INVERT) ? BTN_TOOL_RUBBER : usage->code, 1);

Hid-input.c (kernel\drivers\hid): input_event(input, usage->type, usage->code, 0);

Hid-input.c (kernel\drivers\hid): input_event(input, usage->type, BTN_TOOL_RUBBER, 0);

Hid-input.c (kernel\drivers\hid): input_event(input, EV_KEY, BTN_TOUCH, value > a + ((b - a) >> 3));

Hid-input.c (kernel\drivers\hid): input_event(input, EV_KEY, direction, 1);

Hid-input.c (kernel\drivers\hid): input_event(input, EV_KEY, direction, 0);

Hid-input.c (kernel\drivers\hid): input_event(input, EV_MSC, MSC_SCAN, usage->hid);

Hid-core.c (kernel\drivers\hid): hidinput_hid_event(hid, field, usage, value);

Hid-input.c (kernel\drivers\hid): * in hidinput_hid_event()

Hid-input.c (kernel\drivers\hid):void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct hid_usage *usage, __s32 value)

Hid.h (kernel\include\linux):extern void hidinput_hid_event(struct hid_device *, struct hid_field *, struct hid_usa

Hid-core.c (kernel\drivers\hid):static void hid_process_event(struct hid_device *hid, struct hid_field *field,

Hid-core.c (kernel\drivers\hid): hid_process_event(hid, field, &field->usage
, value
, interrupt);

Hid-core.c (kernel\drivers\hid): hid_process_event(hid, field, &field->usage[field->value
- min], 0, interrupt);

Hid-core.c (kernel\drivers\hid): hid_process_event(hid, field, &field->usage[value
- min], 1, interrupt)

Hid-core.c (kernel\drivers\hid):void hid_report_raw_event(struct hid_device *hid, int type, u8 *data, int size,

Hid-core.c (kernel\drivers\hid):EXPORT_SYMBOL_GPL(hid_report_raw_event);

Hid-core.c (kernel\drivers\hid): hid_report_raw_event(hid, type, data, size, interrupt);

Hid.h (kernel\include\linux):void hid_report_raw_event(struct hid_device *hid, int type, u8 *data, int size,

Core.c (kernel\net\bluetooth\hidp): hid_input_report(session->hid, HID_INPUT_REPORT, skb->data, skb->len, 0);

Core.c (kernel\net\bluetooth\hidp): hid_input_report(session->hid, HID_INPUT_REPORT, skb->data, skb->len, 1);

Hid-core.c (kernel\drivers\hid): * hid_input_report - report data from lower layer (usb, bt...)
Hid-core.c (kernel\drivers\hid):int hid_input_report(struct hid_device *hid, int type, u8 *data, int size, int interrupt);
Hid.h (kernel\include\linux):int hid_input_report(struct hid_device *, int type, u8 *, int, int);

Core.c (kernel\net\bluetooth\hidp):static struct hidp_session *__hidp_get_session(bdaddr_t *bdaddr)

Hidp.h (kernel\net\bluetooth\hidp):struct hidp_session {

Hidp.h (kernel\net\bluetooth\hidp):static inline void hidp_schedule(struct hidp_session *session)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: