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

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

?? rfcomm.c

?? linux系統下的關于藍牙模塊的源代碼!十分的經典的程序!
?? C
?? 第 1 頁 / 共 5 頁
字號:
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);			}                }        }        }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久久久电影| 欧美日韩综合色| 国产精品免费人成网站| 99亚偷拍自图区亚洲| 一区二区三区欧美激情| 欧美日韩精品综合在线| 久久99国产乱子伦精品免费| 国产亚洲人成网站| 91色porny在线视频| 亚洲午夜久久久久中文字幕久| 欧美日韩国产高清一区| 国内精品自线一区二区三区视频| 久久综合久色欧美综合狠狠| 国产成人精品免费| 一区二区三区高清在线| 欧美老女人在线| 国产一区二区在线观看免费| 中文字幕一区二区不卡| 欧美日韩一级视频| 国产一区二区视频在线| 亚洲视频每日更新| 日韩免费高清av| 99re视频精品| 麻豆国产精品官网| 午夜精品福利一区二区三区av | 免费视频最近日韩| 国产清纯白嫩初高生在线观看91| 色婷婷激情一区二区三区| 性做久久久久久久免费看| 久久综合九色综合欧美亚洲| 91在线免费看| 韩国精品在线观看| 亚洲一区二区免费视频| 久久综合网色—综合色88| 欧美视频精品在线| 国产.欧美.日韩| 日韩电影在线一区| 日韩毛片精品高清免费| 精品播放一区二区| 91福利视频网站| 紧缚捆绑精品一区二区| 亚洲最新视频在线观看| 日本一区二区成人在线| 日韩欧美一区在线观看| 色屁屁一区二区| 成人一区二区三区视频在线观看 | 亚洲成人一区二区| 中文字幕在线观看一区| 精品久久久久久久久久久久包黑料| 91丝袜美腿高跟国产极品老师| 精品亚洲成a人| 三级精品在线观看| 亚洲尤物视频在线| 成人欧美一区二区三区黑人麻豆 | 一区二区在线观看免费视频播放| 精品国产成人在线影院| 欧美精品九九99久久| 99精品在线观看视频| 国产精品伊人色| 麻豆国产精品视频| 热久久国产精品| 午夜精品一区二区三区免费视频| 亚洲日本免费电影| 精品一区精品二区高清| 日韩精品乱码av一区二区| 洋洋av久久久久久久一区| 亚洲欧洲制服丝袜| 成人激情电影免费在线观看| 欧美一级一级性生活免费录像| 91在线高清观看| 成人性生交大片免费| 国产九色精品成人porny| 裸体歌舞表演一区二区| 日韩国产在线观看| 蜜臀av一级做a爰片久久| 午夜久久福利影院| 日韩av中文字幕一区二区| 亚洲va韩国va欧美va精品| 一级精品视频在线观看宜春院 | 一区二区三区四区在线| 亚洲三级免费电影| 一区二区激情视频| 亚洲成人综合网站| 蜜桃久久久久久久| 国产综合久久久久久鬼色| 国产精品亚洲成人| 懂色av一区二区三区免费看| 成人午夜短视频| 一本久久a久久免费精品不卡| 成人av高清在线| 色视频一区二区| 欧美一区二区日韩| 精品国产一区二区在线观看| 国产色产综合产在线视频| 中文在线一区二区| 亚洲女与黑人做爰| 奇米777欧美一区二区| 国产在线国偷精品产拍免费yy| 国产乱人伦精品一区二区在线观看 | 亚洲午夜视频在线观看| 午夜欧美一区二区三区在线播放| 亚洲一区二区三区中文字幕在线| 亚洲成人一区二区在线观看| 美女国产一区二区| 成人av电影观看| 欧美视频日韩视频| 久久人人97超碰com| 亚洲美女在线一区| 91久久精品一区二区| 91精品国产91久久久久久最新毛片| 精品久久99ma| 亚洲女女做受ⅹxx高潮| 美女在线观看视频一区二区| 成人晚上爱看视频| 欧美日韩精品一区二区三区蜜桃 | 国产午夜亚洲精品理论片色戒| 亚洲欧美在线观看| 日本不卡的三区四区五区| 岛国精品一区二区| 欧美精品日韩一本| 国产精品家庭影院| 美女视频一区二区三区| av在线不卡网| 欧美电影免费提供在线观看| 亚洲欧美怡红院| 国内外精品视频| 欧美日韩激情在线| 国产精品午夜在线观看| 日韩av成人高清| 91丨九色丨黑人外教| www国产亚洲精品久久麻豆| 亚洲韩国精品一区| 99综合电影在线视频| 精品国产三级电影在线观看| 一级女性全黄久久生活片免费| 国产麻豆日韩欧美久久| 欧美日韩国产综合久久| 国产精品久久久久影院老司| 狂野欧美性猛交blacked| 日本精品一区二区三区四区的功能| 精品国产伦理网| 午夜精品久久久久久不卡8050| 国产suv精品一区二区6| 日韩三级免费观看| 午夜国产精品一区| 在线观看欧美日本| 《视频一区视频二区| 国产999精品久久久久久绿帽| 日韩一级片在线观看| 五月开心婷婷久久| 欧美日韩国产精选| 亚洲福中文字幕伊人影院| 色久优优欧美色久优优| 亚洲视频中文字幕| 懂色一区二区三区免费观看| 精品sm捆绑视频| 久久国产人妖系列| 日韩丝袜美女视频| 免费成人深夜小野草| 欧美一区午夜精品| 日本成人在线电影网| 欧美顶级少妇做爰| 日韩精品一二三区| 欧美精品一级二级三级| 视频一区二区三区中文字幕| 欧美综合欧美视频| 亚洲综合久久av| 欧美日韩一级视频| 午夜一区二区三区在线观看| 精品污污网站免费看| 午夜精品久久久久久久| 日韩你懂的在线播放| 免费看精品久久片| 欧美精品一区二区三区蜜桃视频| 久久99国产精品尤物| 精品播放一区二区| 国产成人精品亚洲日本在线桃色 | 亚洲黄色尤物视频| 色欧美片视频在线观看在线视频| 亚洲视频一区二区在线观看| 色综合天天综合色综合av| 亚洲黄色性网站| 91精品国产91热久久久做人人| 久久精品国产精品亚洲综合| 26uuu精品一区二区| av一区二区三区黑人| 亚洲欧美激情在线| 欧美日韩三级一区二区| 美脚の诱脚舐め脚责91| 久久精品亚洲一区二区三区浴池| 成人精品小蝌蚪| 性欧美大战久久久久久久久| 欧美一区二区三区在线| 国产精品正在播放| 一区二区三区在线观看国产| 91精品国产免费| 成人午夜电影网站| 午夜在线成人av| 国产精品三级视频| 欧美日韩久久久一区|