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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rfcomm.c

?? blue tooth protocol stack source code
?? C
?? 第 1 頁 / 共 5 頁
字號(hào):
static void create_crctable(u8 table[]);static rfcomm_con* get_new_rfcomm_con(void);static rfcomm_con* get_rfcomm_con(u8 line);static s32 get_connected_dlci(rfcomm_con *rfcomm);/****************** GLOBAL VARIABLE DECLARATION SECTION *********************//****************** LOCAL VARIABLE DECLARATION SECTION **********************//* The crctable for the FEC field */static u8 crctable[256];/* One RFCOMM connection for each ttyBTx */rfcomm_con rfcomm_con_list[BT_NBR_DATAPORTS];#ifdef __KERNEL__static struct timer_list rfcomm_timer;#endif#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)static struct wait_queue *rfcomm_disconnect_wq = NULL;#elsestatic wait_queue_head_t rfcomm_disconnect_wq;#endif /* LINUX_VERSION_CODE */rpn_values rpn_val;/****************** FUNCTION DEFINITION SECTION *****************************//**************************************************************************** * Functions reachable outside this file ****************************************************************************/void rfcomm_reset_con(u8 line){		s32 j;	/* check if valid line number */	if (line >= BT_NBR_DATAPORTS)	{		D_ERR(FNC"invalid line!\n");		return;	}	D_CTRL(FNC"line %d\n", line);	rfcomm_con_list[line].magic = RFCOMM_MAGIC;	rfcomm_con_list[line].line = line;	rfcomm_con_list[line].credit_flow = 0;	for (j = 0; j < 62; j++) {		rfcomm_con_list[line].dlci[j].local_credits = 0;		rfcomm_con_list[line].dlci[j].state = DISCONNECTED;		rfcomm_con_list[line].dlci[j].mtu = DEF_RFCOMM_MTU;		rfcomm_con_list[line].dlci[j].initiated = FALSE;		rfcomm_con_list[line].dlci[j].initiator = FALSE;	}	rfcomm_con_list[line].initiator = FALSE;	rfcomm_con_list[line].l2cap = NULL;}s32rfcomm_module_init(void){#ifdef __KERNEL__#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)	init_waitqueue_head(&rfcomm_disconnect_wq);#endif /* LINUX_VERSION_CODE */#endif /* __KERNEL__ */	return 0;}voidrfcomm_init(void){	s32 i;	protocol_layer this_layer;	DSYS("Initialising RFCOMM\n");	create_crctable(crctable);		/* Set the confirm and indication functions for the L2CAP-layer */	this_layer.con_ind = rfcomm_connect_ind;	this_layer.con_pnd = rfcomm_connect_pnd;	this_layer.conf_ind = rfcomm_config_ind;	this_layer.disc_ind = rfcomm_disconnect_ind;	this_layer.con_cfm = rfcomm_connect_cfm;	this_layer.conf_cfm = rfcomm_config_cfm;	this_layer.disc_cfm = rfcomm_disconnect_cfm;	this_layer.receive_data = rfcomm_receive_data;	/* Register RFCOMM in the L2CAP layer*/	l2cap_register_upper(RFCOMM_LAYER, &this_layer); 	/* Initiate rfcomm lines */	for (i = 0; i < BT_NBR_DATAPORTS; i++) {		rfcomm_reset_con(i);	}	/* Set the values in the rpn octets */	rpn_val.bit_rate = 7; /* Irrelevent here */	rpn_val.data_bits = 3; /* 8 databits */	rpn_val.stop_bit = 0; /*One stopbit */	rpn_val.parity = 0;	rpn_val.parity_type = 0;	rpn_val.res1 = 0;	rpn_val.xon_input = 0;	rpn_val.xon_output = 0;	rpn_val.rtr_input = 0;	rpn_val.rtr_output = 0;	rpn_val.rtc_input = 0;	rpn_val.rtc_output = 0;	rpn_val.res2 = 0;	rpn_val.xon_u8 = 0x11;	rpn_val.xoff_u8 = 0x13;	memset(&rpn_val.pm, 0 , 2); /* Set the mask to zero */        #ifdef CONFIG_BLUETOOTH_USE_SECURITY_MANAGER        rfcomm_sec_man_init();#endif}s32rfcomm_set_mtu(rfcomm_con *rfcomm, u8 dlci, u32 new_mtu){	DSYS(FNC"MTU set to:%d\n", new_mtu);	if (rfcomm->dlci[dlci].state == DISCONNECTED) {		rfcomm->dlci[dlci].mtu = new_mtu;		return 0;	} else {		return -1;	}}static char* state2name(u8 state){	switch(state)	{	case DISCONNECTED :		return "DISCONNECTED";	case CONNECTING :		return "CONNECTING";	case NEGOTIATING :		return "NEGOTIATING";	case CONNECTED :		return "CONNECTED";	case DISCONNECTING :		return "DISCONNECTING";	default :		return "Invalid State";	}}void rfcomm_close(void){	s32 i;  	DSYS("Shutting down RFCOMM\n");	/* First try disconnecting */	for (i = 0; i < BT_NBR_DATAPORTS; i++) {		rfcomm_con *rfcomm = get_rfcomm_con(i);		/* fixme -- handle the case where only the control 		   channel is left on a rfcomm session */		if (get_connected_dlci(rfcomm) > 0) {			DSYS(FNC"Now disconnecting rfcomm line %d\n", i);			rfcomm_disconnect_req(i);		}			}	/* If still connections left, terminate them */	for (i = 0; i < BT_NBR_DATAPORTS; i++) {		rfcomm_reset_con(i);	}}/* This function creates an rfcomm connection over the control channel DCLI 0 */  s32 rfcomm_connect_req(u8* bd_addr, u8 server_chn, u8 line){	rfcomm_con *rfcomm;	u8 tmp_dlci;	s32 retval = 0;  	D_CTRL(FNC"server channel:%d, line:%d\n",	       server_chn, line);	if (!(rfcomm = get_rfcomm_con(line))) {		D_ERR(FNC"%d is an invalid line\n", line);		return -MSGCODE(MSG_LAYER_RFCOMM, RFCOMM_INVALID_LINE);	}	if (rfcomm->dlci[0].state == DISCONNECTED) {		rfcomm->initiator = TRUE;	}		rfcomm->line = line;	rfcomm->server_chn = server_chn;	tmp_dlci = (server_chn << 1) | (~rfcomm->initiator & 0x1);		if (!(rfcomm->l2cap)) {		rfcomm->dlci[0].state = CONNECTING;    		/* we don't have a l2cap connection yet */		if ((retval = l2ca_connect_req(bd_addr, RFCOMM_LAYER)) < 0) {			D_ERR(FNC"l2ca_connect_req failed\n");			return retval;		}	} else if (!((rfcomm->l2cap)->current_state == OPEN)) {				D_ERR(FNC"L2CAP_CON exists but is not in OPEN state (yet?)\n");		/* FIXME: Should we really return no error here? */		return 0;	} else if (rfcomm->dlci[0].state != CONNECTED) {		/* we have an l2cap channel (server ch) */		D_CTRL(FNC"we already have an l2cap channel)\n");		/* fixme -- strange case ... */		if (rfcomm->dlci[0].state != DISCONNECTED) {			D_ERR(FNC"DLCI:0 neither CONNECTED nor DISCONNECTED\n");			return -1;		} else {			rfcomm->dlci[0].state = CONNECTING;			/* Establish the control channel */			return send_sabm(rfcomm, 0);		}	} else if (rfcomm->dlci[tmp_dlci].state != DISCONNECTED) {		D_ERR(FNC"trying to connect a non DISCONNECTED server channel (%d)\n",server_chn);		return -MSGCODE(MSG_LAYER_RFCOMM, RFCOMM_SRVCHN_CONNECTED);	} else {		D_CTRL(FNC"We are negotiating rfcomm (pn msg)\n");		rfcomm->dlci[tmp_dlci].state = NEGOTIATING;		/* must fit i l2cap mtu */		D_CTRL(FNC"negotiate mtu : %d bytes\n",		       rfcomm->l2cap->remote_mtu - 5);		return send_pn_msg(rfcomm, 7, rfcomm->dlci[tmp_dlci].mtu, 0, 0,			    tmp_dlci, TRUE);	}	return 0;}/* fixme -- this should be on dlci/rfcomm con basis not line ... */s32rfcomm_disconnect_req(u8 line){	rfcomm_con *rfcomm;	s32 tmp;	D_CTRL("rfcomm_disconnect_req %d\n", line);	if(line >= BT_NBR_DATAPORTS) {		D_ERR("rfcomm_disconnect_req : Invalid line\n");		return -MSGCODE(MSG_LAYER_RFCOMM, RFCOMM_INVALID_LINE);	}		if (!(rfcomm = &rfcomm_con_list[line]))	{		D_ERR("rfcomm_disconnect_req : no rfcomm con\n");		return -EINVAL;	}	tmp = get_connected_dlci(rfcomm);	if (tmp > 0) {		l2cap_con *l2cap = rfcomm->l2cap;		rfcomm->dlci[tmp].state = DISCONNECTING;				send_disc(rfcomm, tmp);#ifdef __KERNEL__		start_wq_timer(&rfcomm_timer, RFCOMM_CON_TIMEOUT,			       &rfcomm_disconnect_wq);#endif		/* FIXME -- check that we haven't already received 		   disconnect 'acknowledge' */		interruptible_sleep_on(&rfcomm_disconnect_wq);		/* Check that rfcomm session really disconnected */		/* FIXME -- add timer obj with status in rfcomm obj */		/* check control channel */		if (rfcomm->dlci[0].state != DISCONNECTED)		{			D_ERR("Rfcomm disconnect failed, reset session\n");#ifdef __KERNEL__						bt_unregister_rfcomm(rfcomm->line);			bt_disconnect_cfm(CREATE_RFCOMM_ID(rfcomm->line, 0), 					  rfcomm->l2cap->c_result);#endif			rfcomm_reset_con(rfcomm->line);		}		/* Now rfcomm is disconnected, disconnect l2cap */		return l2ca_disconnect_req(l2cap);	}	else		D_WARN("rfcomm_disconnect_req : line not connected !\n");	return 0;}	/* The lower protocol layer, L2CAP, indicates that a new connection has been   established at a lower layer. RFCOMM should ask the control block whether   to accept or reject the connection and then reply to L2CAP with   l2cap_connect_rsp. */void rfcomm_connect_ind(l2cap_con *l2cap){	rfcomm_con *rfcomm;	D_CTRL("rfcomm_connect_ind\n");  	if (!(rfcomm = get_new_rfcomm_con())) {		D_ERR("rfcomm_connect_ind: error: couldn't find free tty\n");				/* fixme -- respond neg ! */		return;	} else {          		if (l2ca_connect_rsp(l2cap, RES_SUCCESS, STAT_NOINFO)) {			D_ERR("rfcomm_connect_ind: l2ca_connect_rsp failed\n");			return;		}		rfcomm->initiator = FALSE;		rfcomm->dlci[0].state = CONNECTING;		rfcomm->l2cap = l2cap;		l2cap->upper_con = (void*) rfcomm;	}}/* only client receives connect pnd */void rfcomm_connect_pnd(l2cap_con *l2cap, s32 status){	printk("rfcomm_connect_pnd : reason %d\n", status);	}void rfcomm_connect_cfm(l2cap_con *l2cap, s32 status){	s32 i = 0;	s32 stop = FALSE;	rfcomm_con *rfcomm = NULL;	D_CTRL(FNC"status %d\n", status);	/* FIXME -- use bt session list (which holds pointers to all layers	   con objs) to see which rfcomm that was trying to connect */	/* Find the connecting rfcomm_con */	while ((i < BT_NBR_DATAPORTS) && (!stop)) {		if ((rfcomm_con_list[i].dlci[0].state == CONNECTING) && 		    (rfcomm_con_list[i].initiator == TRUE)) {			rfcomm = &rfcomm_con_list[i];			stop = TRUE;		}		i++;	} 	if (status) {		/* reset this rfcomm connection !*/		rfcomm_reset_con(rfcomm->line);		bt_connect_cfm(CREATE_RFCOMM_ID(rfcomm->line,0), status);		return;	}	if (rfcomm != NULL) {		rfcomm->l2cap = l2cap;		l2cap->upper_con = (void*) rfcomm;		if (!l2ca_local_conf_done(l2cap))		{			/* still haven't sent config request yet */						/* Zero indicates that default values will be used */			if (l2ca_config_req(l2cap, 0, NULL, 0, 0)) {				D_ERR(FNC"l2ca_config_req failed\n");			} 		} else 			DSYS(FNC"already have sent back a pos response\n");	} else {		D_ERR(FNC"couldn't find the correct rfcomm_con object\n");	}}/* The lower protocol layer, L2CAP, indicates that it has received a   configuration indication signal and RFCOMM should reply with proper    configuration parameters to the L2CAP layer, with a l2cap_config_rsp   messages and then send a own configuration request messages. */void rfcomm_config_ind(l2cap_con* l2cap){	/* 	   FIXME	   Check whether the received params are acceptable, 	   accept all for now	*/	D_CTRL("rfcomm_config_ind : remote cid %d\n", l2cap->remote_cid);	/* check if we have sent a pos response yet */	if (!l2ca_remote_conf_done(l2cap)){		/* still haven't sent a pos configure response*/				if (l2ca_config_rsp(l2cap, l2cap->remote_mtu, 				    NULL, CONF_SUCCESS)) {			D_ERR(FNC"l2ca_config_rsp failed\n");		}	} else 		DSYS(FNC"already have sent back a pos response\n");	/* check if we received a pos response on a previous conf req */ 	if (((rfcomm_con*) l2cap->upper_con)->initiator == FALSE) {		/* check if we received a pos response on a 		   previous config req */ 		if (!l2ca_local_conf_done(l2cap))		{			l2cap->local_mtu=l2cap->remote_mtu;			DSYS(FNC"Local l2cap mtu set to %d\n", 			      l2cap->local_mtu);			if (l2ca_config_req(l2cap, 0, NULL, 					    0, 0)) {				D_ERR(FNC"l2ca_config_req failed\n");			}		} else 			DSYS(FNC"already ready with config req\n");	} }/* The lower protocol layer, L2CAP, indicates that the configuration   procedure has succeeded */void rfcomm_config_cfm(l2cap_con *l2cap, s32 status){	rfcomm_con *rfcomm;	rfcomm = (rfcomm_con *) l2cap->upper_con;	D_CTRL(FNC"\n");	if (status) {		DSYS(FNC"l2cap configuration failed\n");		/* notify usermode and reset connection */		bt_connect_cfm(CREATE_RFCOMM_ID(rfcomm->line,0), status);		rfcomm_reset_con(rfcomm->line);		return;	} else {		DSYS(FNC"l2cap is now open\n");				if (rfcomm->initiator && 		    rfcomm->dlci[0].state == CONNECTING) {			D_CTRL("sending sabm\n");			send_sabm(rfcomm, 0);		}		else if (!rfcomm->initiator &&                          ((l2cap->remote_mtu-5) < DEF_RFCOMM_MTU) )                {						s32 j;			DSYS(FNC"Setting RFCOMM frame size to %d\n", 			     l2cap->remote_mtu-5);						for (j = 0; j < 62; j++) {				rfcomm->dlci[j].mtu = (l2cap->remote_mtu-5);			}                }        }        }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人在线综合网站| 免费精品99久久国产综合精品| 久久国产精品露脸对白| 欧美国产精品中文字幕| 欧美理论电影在线| 免播放器亚洲一区| 欧美电影免费观看高清完整版在线观看| 老司机一区二区| 色呦呦一区二区三区| 日韩精品91亚洲二区在线观看| 99久久精品国产一区| 激情欧美一区二区| 日本aⅴ亚洲精品中文乱码| 一个色在线综合| 国产精品久久毛片| 久久蜜臀中文字幕| 日韩无一区二区| 欧美精品国产精品| 欧美在线不卡视频| 亚洲高清在线精品| 亚洲乱码精品一二三四区日韩在线| 久久午夜色播影院免费高清| 51精品久久久久久久蜜臀| 色哟哟一区二区在线观看| 懂色av一区二区在线播放| 国产在线视视频有精品| 《视频一区视频二区| 国产亚洲欧美在线| 久久亚洲精精品中文字幕早川悠里| 欧美精品tushy高清| 欧美色男人天堂| 欧美丝袜丝nylons| 欧美色精品在线视频| 国产毛片一区二区| 精品一区二区三区影院在线午夜| 中文字幕制服丝袜一区二区三区 | 日本不卡123| 欧美国产精品专区| 欧美国产精品中文字幕| 中文字幕av一区二区三区免费看| 欧美性猛交一区二区三区精品| 美日韩一区二区三区| 蜜臀av一区二区| 亚洲精品成人天堂一二三| ...av二区三区久久精品| 中文字幕亚洲欧美在线不卡| 国产精品久久毛片| 亚洲女人****多毛耸耸8| 亚洲精品国产品国语在线app| 国产精品国产自产拍高清av王其| 中文字幕一区二区三区色视频 | 日本欧美一区二区在线观看| 日韩精品成人一区二区在线| 国产精品久久一卡二卡| 亚洲色图第一区| 亚洲国产综合91精品麻豆| 亚洲国产精品v| 日韩美女视频19| 国产日韩欧美精品综合| 欧美一级一区二区| 国产日韩欧美精品在线| 亚洲色图第一区| 国产亚洲精品免费| 欧美va日韩va| 在线亚洲一区观看| 91精品国产综合久久精品app| 日韩精品最新网址| 国产精品久久三区| 国产欧美精品一区二区三区四区 | 久久国产精品色| 粉嫩高潮美女一区二区三区 | 欧美色爱综合网| 色综合天天视频在线观看 | 欧美一二三在线| 国产亚洲欧美日韩日本| 亚洲一区二区三区在线| 精品午夜久久福利影院| 极品美女销魂一区二区三区| 成人听书哪个软件好| 欧美少妇一区二区| 亚洲精品一区二区三区影院| 亚洲欧美日韩中文播放| 免费观看日韩电影| av亚洲产国偷v产偷v自拍| 成人黄色网址在线观看| 欧美日韩国产成人在线免费| 久久一区二区三区四区| 亚洲一二三四区不卡| 国产一区二区三区四区五区入口 | 欧美综合亚洲图片综合区| 日韩欧美激情在线| 精品国产在天天线2019| 中文字幕日韩精品一区| 久久精品国产在热久久| 色婷婷精品久久二区二区蜜臂av| 一本大道久久a久久精品综合| 欧美一区二区成人6969| 欧美变态凌虐bdsm| 欧美精品一区二区三区在线| 国产日韩欧美精品一区| 日韩va亚洲va欧美va久久| 91色在线porny| 久久综合久久综合久久综合| 国产视频一区二区在线| 中文字幕亚洲视频| 亚洲青青青在线视频| 韩国v欧美v亚洲v日本v| 不卡视频一二三四| 91成人在线精品| 欧美一区二区美女| 亚洲小说春色综合另类电影| 美腿丝袜亚洲综合| 国产精品一卡二卡在线观看| 欧美美女bb生活片| 亚洲免费在线播放| 日本伊人午夜精品| 欧美午夜在线观看| 精品国产髙清在线看国产毛片| 国产欧美精品一区二区三区四区 | 91麻豆国产精品久久| 久久久久久久久久久久久女国产乱| 午夜精品久久久久久不卡8050| 91在线一区二区三区| 欧美人妇做爰xxxⅹ性高电影| 精品sm在线观看| 日韩不卡一区二区| 56国语精品自产拍在线观看| 亚洲国产成人精品视频| 欧美在线免费视屏| 久久久噜噜噜久噜久久综合| 蜜桃av一区二区| 欧美大片一区二区三区| 亚洲欧洲韩国日本视频| 男女男精品视频| jizz一区二区| 日韩午夜激情视频| 久久精品免费看| 欧洲人成人精品| 久久久久久久久久久久久久久99| 亚洲少妇中出一区| 久久精品国产99国产精品| 91在线小视频| 亚洲精品视频在线| 欧美吞精做爰啪啪高潮| 欧美高清在线视频| hitomi一区二区三区精品| 亚洲免费视频中文字幕| 欧美日韩综合在线免费观看| 亚洲午夜免费电影| 欧美日韩大陆在线| 亚洲精品视频自拍| 欧美日韩午夜在线| 亚洲精品视频观看| 欧美性一二三区| 国产精品短视频| 国产精品一区在线| 国产精品二三区| 欧美日韩国产另类一区| 久久99在线观看| 中文字幕精品综合| 欧美性一二三区| 激情深爱一区二区| 亚洲色图在线看| 欧美精品一二三四| 亚洲综合激情网| 日韩欧美成人激情| 99综合电影在线视频| 香蕉成人伊视频在线观看| 精品福利一区二区三区免费视频| 国产成人精品一区二区三区四区| 亚洲美女一区二区三区| 欧美一区二区播放| 不卡的电影网站| 日日摸夜夜添夜夜添国产精品 | 国产主播一区二区| 日韩美女视频在线| 成人高清在线视频| 中文av一区二区| 欧美日韩亚洲另类| 懂色av一区二区三区免费看| 亚洲福利电影网| 色菇凉天天综合网| 经典一区二区三区| 亚洲一区二区三区中文字幕| 欧美午夜电影网| 国产米奇在线777精品观看| 久久久亚洲午夜电影| 国产精品亚洲午夜一区二区三区 | 欧美视频在线一区二区三区 | 欧美人狂配大交3d怪物一区| 国产成人亚洲综合a∨婷婷| 日韩免费看的电影| 91麻豆免费视频| 狠狠色丁香婷婷综合久久片| 一级特黄大欧美久久久| 欧美日韩国产色站一区二区三区| 国产91精品欧美| 1024国产精品| 在线免费观看日本一区| 成人美女在线观看|