亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
av高清久久久| 欧美日韩亚洲综合一区二区三区| 91丨porny丨中文| 欧美成人猛片aaaaaaa| 亚洲一区二区三区精品在线| 国产精品一区二区不卡| 在线播放欧美女士性生活| 亚洲视频一二三| 国产馆精品极品| 2023国产精品| 免费在线成人网| 欧美日韩高清一区二区| 亚洲曰韩产成在线| 色香蕉久久蜜桃| 亚洲欧美综合色| 成人av电影在线观看| 欧美国产精品中文字幕| 国产揄拍国内精品对白| 欧美mv日韩mv亚洲| 久久精品国产**网站演员| 欧美综合一区二区| 亚洲国产一区二区三区 | 狠狠色丁香婷婷综合| 正在播放一区二区| 青草国产精品久久久久久| 欧美日韩精品一区二区三区蜜桃 | 亚洲成av人片在www色猫咪| 91免费看`日韩一区二区| 亚洲色欲色欲www在线观看| 99九九99九九九视频精品| 中文字幕中文乱码欧美一区二区| 国产福利91精品| 国产精品蜜臀在线观看| 成年人午夜久久久| 亚洲三级小视频| 日本精品视频一区二区三区| 一区二区三区不卡视频在线观看| 色偷偷久久人人79超碰人人澡 | 国产精品视频免费| 成人av电影免费在线播放| 亚洲私人影院在线观看| 欧美性色综合网| 免费在线观看一区二区三区| 精品人在线二区三区| 国产福利视频一区二区三区| 日本一区二区三区视频视频| 91免费视频网| 三级成人在线视频| 久久女同性恋中文字幕| 成人丝袜高跟foot| 亚洲综合丁香婷婷六月香| 欧美剧情电影在线观看完整版免费励志电影| 亚洲高清免费视频| 久久嫩草精品久久久精品一| 成人免费va视频| 亚洲电影在线播放| 亚洲精品一区二区在线观看| kk眼镜猥琐国模调教系列一区二区| 亚洲综合色丁香婷婷六月图片| 69成人精品免费视频| 国产99久久久国产精品潘金| 亚洲精品免费视频| 精品精品国产高清a毛片牛牛| 粉嫩aⅴ一区二区三区四区| 亚洲综合一区在线| 久久一区二区三区国产精品| 91麻豆国产福利精品| 美女一区二区久久| 亚洲精品亚洲人成人网| 精品久久久久久久久久久久久久久 | 不卡的av中国片| 午夜精品成人在线视频| 亚洲国产精品二十页| 欧美精品123区| 成年人午夜久久久| 久久精品国产秦先生| 国产精品白丝在线| 精品久久人人做人人爽| 91黄色小视频| 岛国av在线一区| 美女一区二区视频| 亚洲影视在线观看| 综合久久综合久久| 久久精品视频在线免费观看| 欧美一区二区三区在线视频| 日本久久一区二区| 北条麻妃一区二区三区| 国产一区二区免费看| 午夜欧美视频在线观看| 亚洲男女毛片无遮挡| 亚洲国产成人一区二区三区| 欧美大片拔萝卜| 欧美欧美欧美欧美首页| 色综合久久66| www.激情成人| 成人性色生活片| 国产乱子轮精品视频| 老司机精品视频一区二区三区| 午夜视频一区二区三区| 亚洲一区二区三区四区在线免费观看 | 91精品国产欧美一区二区18| 色哟哟日韩精品| 91首页免费视频| 99麻豆久久久国产精品免费优播| 国产中文字幕一区| 国产一区视频导航| 久久国产夜色精品鲁鲁99| 美女高潮久久久| 久久成人免费日本黄色| 免费高清在线视频一区·| 人人超碰91尤物精品国产| 视频精品一区二区| 香蕉加勒比综合久久| 日韩专区在线视频| 日韩在线一区二区| 蜜臀国产一区二区三区在线播放| 日av在线不卡| 激情深爱一区二区| 国产乱码精品1区2区3区| 国产麻豆精品视频| 成人一区二区三区中文字幕| 成人av资源在线| 色婷婷久久久亚洲一区二区三区 | 99综合电影在线视频| 91在线码无精品| 欧美视频在线观看一区| 91精品国产综合久久久蜜臀图片| 欧美精品成人一区二区三区四区| 日韩你懂的在线观看| 久久日韩粉嫩一区二区三区| 国产精品青草综合久久久久99| 亚洲人一二三区| 香蕉影视欧美成人| 国产伦精品一区二区三区在线观看| 国产精品456| 91行情网站电视在线观看高清版| 欧美色图天堂网| 欧美网站一区二区| 久久久久久一二三区| xf在线a精品一区二区视频网站| 欧美精品一区二区三区高清aⅴ| 国产免费久久精品| 亚洲日本在线视频观看| 日本伊人色综合网| 国产精品一区二区久久精品爱涩 | 视频一区二区三区中文字幕| 美洲天堂一区二卡三卡四卡视频 | 99视频精品全部免费在线| 欧美日韩久久久久久| 久久久久久久久久久黄色| 国产精品你懂的| 亚洲第一激情av| 国产丶欧美丶日本不卡视频| 日本精品免费观看高清观看| 欧美精品粉嫩高潮一区二区| 亚洲国产成人自拍| 日欧美一区二区| 99亚偷拍自图区亚洲| 另类中文字幕网| 国产黄色成人av| 欧美性色综合网| 久久免费看少妇高潮| 一区二区欧美国产| 久久66热偷产精品| 在线免费观看日韩欧美| 久久一区二区三区四区| 性做久久久久久久久| av中文字幕一区| 欧美精品一区二区久久久| 亚洲一区免费在线观看| 国产精品69毛片高清亚洲| 欧美一卡二卡在线| 亚洲一级在线观看| 95精品视频在线| 久久精品人人做| 激情综合色综合久久综合| 欧美丝袜自拍制服另类| 国产精品美女一区二区三区 | 午夜久久电影网| 色系网站成人免费| 国产精品久久久久久久久久久免费看 | 色狠狠桃花综合| 亚洲国产成人自拍| 国产精品影视天天线| 2017欧美狠狠色| 久久精品国产色蜜蜜麻豆| 欧美久久久久免费| 亚洲h在线观看| 欧美最猛黑人xxxxx猛交| 亚洲免费观看高清完整版在线| 成人中文字幕在线| 国产精品美女久久福利网站| 成人激情午夜影院| 国产精品久久久久久久久免费相片| 国产福利精品一区| 国产精品欧美久久久久无广告| 处破女av一区二区| 亚洲欧洲美洲综合色网| 97精品久久久久中文字幕| 亚洲女与黑人做爰|