藍牙鍵盤按鍵添加方法

修改:

--- 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[n], value[n], interrupt);
Hid-core.c (kernel\drivers\hid): hid_process_event(hid, field, &field->usage[field->value[n] - min], 0, interrupt);
Hid-core.c (kernel\drivers\hid): hid_process_event(hid, field, &field->usage[value[n] - 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)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章