亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? core.c

?? 優龍2410linux2.6.8內核源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*    HIDP implementation for Linux Bluetooth stack (BlueZ).   Copyright (C) 2003-2004 Marcel Holtmann <marcel@holtmann.org>   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License version 2 as   published by the Free Software Foundation;   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS    SOFTWARE IS DISCLAIMED.*/#include <linux/config.h>#include <linux/module.h>#include <linux/types.h>#include <linux/errno.h>#include <linux/kernel.h>#include <linux/major.h>#include <linux/sched.h>#include <linux/slab.h>#include <linux/poll.h>#include <linux/fcntl.h>#include <linux/skbuff.h>#include <linux/socket.h>#include <linux/ioctl.h>#include <linux/file.h>#include <linux/init.h>#include <net/sock.h>#include <linux/input.h>#include <net/bluetooth/bluetooth.h>#include <net/bluetooth/l2cap.h>#include "hidp.h"#ifndef CONFIG_BT_HIDP_DEBUG#undef  BT_DBG#define BT_DBG(D...)#endif#define VERSION "1.0"static DECLARE_RWSEM(hidp_session_sem);static LIST_HEAD(hidp_session_list);static unsigned char hidp_keycode[256] = {	  0,  0,  0,  0, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38,	 50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44,  2,  3,	  4,  5,  6,  7,  8,  9, 10, 11, 28,  1, 14, 15, 57, 12, 13, 26,	 27, 43, 43, 39, 40, 41, 51, 52, 53, 58, 59, 60, 61, 62, 63, 64,	 65, 66, 67, 68, 87, 88, 99, 70,119,110,102,104,111,107,109,106,	105,108,103, 69, 98, 55, 74, 78, 96, 79, 80, 81, 75, 76, 77, 71,	 72, 73, 82, 83, 86,127,116,117,183,184,185,186,187,188,189,190,	191,192,193,194,134,138,130,132,128,129,131,137,133,135,136,113,	115,114,  0,  0,  0,121,  0, 89, 93,124, 92, 94, 95,  0,  0,  0,	122,123, 90, 91, 85,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,	 29, 42, 56,125, 97, 54,100,126,164,166,165,163,161,115,114,113,	150,158,159,128,136,177,178,176,142,152,173,140};static struct hidp_session *__hidp_get_session(bdaddr_t *bdaddr){	struct hidp_session *session;	struct list_head *p;	BT_DBG("");	list_for_each(p, &hidp_session_list) {		session = list_entry(p, struct hidp_session, list);		if (!bacmp(bdaddr, &session->bdaddr))			return session;	}	return NULL;}static void __hidp_link_session(struct hidp_session *session){	__module_get(THIS_MODULE);	list_add(&session->list, &hidp_session_list);}static void __hidp_unlink_session(struct hidp_session *session){	list_del(&session->list);	module_put(THIS_MODULE);}static void __hidp_copy_session(struct hidp_session *session, struct hidp_conninfo *ci){	bacpy(&ci->bdaddr, &session->bdaddr);	ci->flags = session->flags;	ci->state = session->state;	ci->vendor  = 0x0000;	ci->product = 0x0000;	ci->version = 0x0000;	memset(ci->name, 0, 128);	if (session->input) {		ci->vendor  = session->input->id.vendor;		ci->product = session->input->id.product;		ci->version = session->input->id.version;		if (session->input->name)			strncpy(ci->name, session->input->name, 128);		else			strncpy(ci->name, "HID Boot Device", 128);	}}static int hidp_input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value){	struct hidp_session *session = dev->private;	struct sk_buff *skb;	unsigned char newleds;	BT_DBG("session %p hid %p data %p size %d", session, device, data, size);	if (type != EV_LED)		return -1;	newleds = (!!test_bit(LED_KANA,    dev->led) << 3) |		  (!!test_bit(LED_COMPOSE, dev->led) << 3) |		  (!!test_bit(LED_SCROLLL, dev->led) << 2) |		  (!!test_bit(LED_CAPSL,   dev->led) << 1) |		  (!!test_bit(LED_NUML,    dev->led));	if (session->leds == newleds)		return 0;	session->leds = newleds;	if (!(skb = alloc_skb(3, GFP_ATOMIC))) {		BT_ERR("Can't allocate memory for new frame");		return -ENOMEM;	}	*skb_put(skb, 1) = 0xa2;	*skb_put(skb, 1) = 0x01;	*skb_put(skb, 1) = newleds;	skb_queue_tail(&session->intr_transmit, skb);	hidp_schedule(session);	return 0;}static void hidp_input_report(struct hidp_session *session, struct sk_buff *skb){	struct input_dev *dev = session->input;	unsigned char *keys = session->keys;	unsigned char *udata = skb->data + 1;	signed char *sdata = skb->data + 1;	int i, size = skb->len - 1;	switch (skb->data[0]) {	case 0x01:	/* Keyboard report */		for (i = 0; i < 8; i++)			input_report_key(dev, hidp_keycode[i + 224], (udata[0] >> i) & 1);		for (i = 2; i < 8; i++) {			if (keys[i] > 3 && memscan(udata + 2, keys[i], 6) == udata + 8) {				if (hidp_keycode[keys[i]])					input_report_key(dev, hidp_keycode[keys[i]], 0);				else					BT_ERR("Unknown key (scancode %#x) released.", keys[i]);			}			if (udata[i] > 3 && memscan(keys + 2, udata[i], 6) == keys + 8) {				if (hidp_keycode[udata[i]])					input_report_key(dev, hidp_keycode[udata[i]], 1);				else					BT_ERR("Unknown key (scancode %#x) pressed.", udata[i]);			}		}		memcpy(keys, udata, 8);		break;	case 0x02:	/* Mouse report */		input_report_key(dev, BTN_LEFT,   sdata[0] & 0x01);		input_report_key(dev, BTN_RIGHT,  sdata[0] & 0x02);		input_report_key(dev, BTN_MIDDLE, sdata[0] & 0x04);		input_report_key(dev, BTN_SIDE,   sdata[0] & 0x08);		input_report_key(dev, BTN_EXTRA,  sdata[0] & 0x10);		input_report_rel(dev, REL_X, sdata[1]);		input_report_rel(dev, REL_Y, sdata[2]);		if (size > 3)			input_report_rel(dev, REL_WHEEL, sdata[3]);		break;	}	input_sync(dev);}static void hidp_idle_timeout(unsigned long arg){	struct hidp_session *session = (struct hidp_session *) arg;	atomic_inc(&session->terminate);	hidp_schedule(session);}static inline void hidp_set_timer(struct hidp_session *session){	if (session->idle_to > 0)		mod_timer(&session->timer, jiffies + HZ * session->idle_to);}static inline void hidp_del_timer(struct hidp_session *session){	if (session->idle_to > 0)		del_timer(&session->timer);}static inline void hidp_send_message(struct hidp_session *session, unsigned char hdr){	struct sk_buff *skb;	BT_DBG("session %p", session);	if (!(skb = alloc_skb(1, GFP_ATOMIC))) {		BT_ERR("Can't allocate memory for message");		return;	}	*skb_put(skb, 1) = hdr;	skb_queue_tail(&session->ctrl_transmit, skb);	hidp_schedule(session);}static inline int hidp_recv_frame(struct hidp_session *session, struct sk_buff *skb){	__u8 hdr;	BT_DBG("session %p skb %p len %d", session, skb, skb->len);	hdr = skb->data[0];	skb_pull(skb, 1);	if (hdr == 0xa1) {		hidp_set_timer(session);		if (session->input)			hidp_input_report(session, skb);	} else {		BT_DBG("Unsupported protocol header 0x%02x", hdr);	}	kfree_skb(skb);	return 0;}static int hidp_send_frame(struct socket *sock, unsigned char *data, int len){	struct kvec iv = { data, len };	struct msghdr msg;	BT_DBG("sock %p data %p len %d", sock, data, len);	if (!len)		return 0;	memset(&msg, 0, sizeof(msg));	return kernel_sendmsg(sock, &msg, &iv, 1, len);}static int hidp_process_transmit(struct hidp_session *session){	struct sk_buff *skb;	BT_DBG("session %p", session);	while ((skb = skb_dequeue(&session->ctrl_transmit))) {		if (hidp_send_frame(session->ctrl_sock, skb->data, skb->len) < 0) {			skb_queue_head(&session->ctrl_transmit, skb);			break;		}		hidp_set_timer(session);		kfree_skb(skb);	}	while ((skb = skb_dequeue(&session->intr_transmit))) {		if (hidp_send_frame(session->intr_sock, skb->data, skb->len) < 0) {			skb_queue_head(&session->intr_transmit, skb);			break;		}		hidp_set_timer(session);		kfree_skb(skb);	}	return skb_queue_len(&session->ctrl_transmit) +				skb_queue_len(&session->intr_transmit);}static int hidp_session(void *arg){	struct hidp_session *session = arg;	struct sock *ctrl_sk = session->ctrl_sock->sk;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本成人中文字幕| 玉足女爽爽91| 久久久久久亚洲综合影院红桃| 欧美日韩在线三级| 欧美猛男男办公室激情| 欧美精品一级二级三级| 欧美丰满高潮xxxx喷水动漫| 91精品国产欧美一区二区18| 欧美日韩国产小视频| 欧美日韩国产综合视频在线观看 | 精品一区二区av| 老汉av免费一区二区三区| 久久精品理论片| 成人性视频网站| 在线观看av不卡| 欧美一级久久久| 久久久久97国产精华液好用吗| 国产色产综合产在线视频| 亚洲色图欧洲色图婷婷| 亚洲一区自拍偷拍| 免费成人小视频| 粉嫩嫩av羞羞动漫久久久| 91色视频在线| 欧美一二三在线| 欧美激情艳妇裸体舞| 亚洲精品成人少妇| 免费国产亚洲视频| www.亚洲人| 精品日韩欧美在线| 亚洲欧美日韩久久| 经典一区二区三区| 欧美在线不卡一区| 久久午夜羞羞影院免费观看| 亚洲一区二区三区四区在线免费观看| 日韩黄色片在线观看| 成人精品一区二区三区中文字幕 | 欧美大黄免费观看| 亚洲视频一区在线观看| 精品在线一区二区| 欧美日韩午夜在线视频| 国产精品污www在线观看| 日日夜夜精品视频天天综合网| 国产高清无密码一区二区三区| 欧美最新大片在线看| 久久久久9999亚洲精品| 爽好久久久欧美精品| 91浏览器打开| 国产视频911| 免费高清成人在线| 欧美三日本三级三级在线播放| 久久精品视频网| 日韩和欧美的一区| 色婷婷激情综合| 中文欧美字幕免费| 国产一区啦啦啦在线观看| 欧美久久久久久蜜桃| 亚洲精选在线视频| av男人天堂一区| 日韩一区二区电影网| 亚洲最大的成人av| 99久久精品国产导航| 国产亚洲制服色| 国产一区视频导航| 精品福利视频一区二区三区| 日韩成人午夜电影| 国产欧美一区视频| 国产一区欧美日韩| 久久亚洲影视婷婷| 国产不卡在线播放| 国产无遮挡一区二区三区毛片日本| 日韩国产高清影视| 欧美一区二区视频在线观看2020| 夜夜嗨av一区二区三区中文字幕 | 极品少妇xxxx精品少妇偷拍| 欧美一级二级在线观看| 日日夜夜免费精品视频| 欧美一区二区三区日韩| 蜜臀a∨国产成人精品| 欧美一区二区三区免费大片| 五月天亚洲婷婷| 欧美一区二区视频网站| 蜜臀久久久99精品久久久久久| 欧美一级二级在线观看| 久久99精品久久久久久久久久久久| 欧美一区二区三区在线看| 奇米精品一区二区三区四区| 日韩午夜激情av| 韩国精品主播一区二区在线观看| 久久日韩精品一区二区五区| 国产乱色国产精品免费视频| 欧美国产在线观看| 色婷婷激情久久| 日韩综合在线视频| 久久精品亚洲一区二区三区浴池| 国产999精品久久| 亚洲欧美激情小说另类| 欧美群妇大交群中文字幕| 韩国视频一区二区| 亚洲色图视频免费播放| 69av一区二区三区| 国产成人在线网站| 亚洲最新视频在线观看| 日韩欧美自拍偷拍| 91亚洲国产成人精品一区二区三| 一区二区三区四区av| 日韩一区二区电影| 99久久综合色| 久久精品国产99国产精品| 国产精品美女久久福利网站| 欧美午夜一区二区三区| 国产乱子伦一区二区三区国色天香| 中文字幕人成不卡一区| 欧美一级xxx| 一本一本大道香蕉久在线精品| 日本aⅴ亚洲精品中文乱码| 国产精品麻豆视频| 日韩欧美区一区二| 91国产福利在线| 国产成人免费网站| 日日夜夜免费精品| 一区二区三区在线视频播放| 久久久亚洲午夜电影| 欧美午夜电影在线播放| 顶级嫩模精品视频在线看| 毛片av一区二区| 亚洲风情在线资源站| 中文字幕在线一区| 精品国产青草久久久久福利| 欧美日本在线视频| 91网上在线视频| 国产·精品毛片| 国产精品一区二区男女羞羞无遮挡| 一级做a爱片久久| 亚洲欧洲综合另类| 国产精品久久久久久久蜜臀| www日韩大片| 91精品国产丝袜白色高跟鞋| 在线视频综合导航| 99久久精品99国产精品| 不卡区在线中文字幕| 国产福利一区二区三区视频 | 91精品国产欧美一区二区成人 | 国产自产v一区二区三区c| 亚洲一区二区综合| 亚洲精品日产精品乱码不卡| 中文字幕在线不卡国产视频| 亚洲国产高清不卡| 国产欧美一区二区精品性色超碰| 久久综合成人精品亚洲另类欧美| 日韩精品专区在线影院重磅| 51精品国自产在线| 5858s免费视频成人| 日韩视频一区二区三区| 日韩一级黄色片| 精品久久久久av影院| 欧美mv和日韩mv国产网站| 精品久久久久久最新网址| 久久久久国色av免费看影院| 欧美国产日本视频| 亚洲免费在线看| 亚洲图片一区二区| 日韩av中文在线观看| 激情成人综合网| 成人性生交大片| 91久久国产综合久久| 欧美另类一区二区三区| 日韩午夜av一区| 欧美va日韩va| 一区在线中文字幕| 午夜亚洲福利老司机| 久久精品国产精品亚洲红杏| 国产风韵犹存在线视精品| 99久久777色| 91精品在线一区二区| 国产亚洲成年网址在线观看| 中文字幕一区二区三中文字幕| 亚洲激情在线激情| 久久99精品久久久久婷婷| 91小视频在线免费看| 欧美一区二区三区在线视频| 久久精品一区二区三区不卡| 依依成人综合视频| 韩国欧美国产1区| 欧美三日本三级三级在线播放| 欧美zozo另类异族| 亚洲在线视频一区| 国产麻豆精品久久一二三| 91女神在线视频| 精品国产伦一区二区三区观看方式| 国产精品福利一区| 精品在线一区二区| 欧洲视频一区二区| 亚洲精品一线二线三线| 亚洲毛片av在线| 狠狠色狠狠色综合系列| 91黄色免费看| 亚洲国产精品成人综合色在线婷婷| 亚洲成va人在线观看| 99久久er热在这里只有精品66| 欧美人与性动xxxx|