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

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

?? hci.c

?? S3C2410平臺下藍牙編程與實驗
?? C
?? 第 1 頁 / 共 3 頁
字號:
}

/* Command Status OGF INFO_PARAM  */
void hci_cs_info_param(struct hci_dev *hdev,UINT16 ocf,UINT8 status)
{
	switch(ocf){
	default:
		hci_req_complete(hdev, status);
		#ifdef DEBUG
		printf("%s Command status: ogf INFO_PARAM ocf %x", hdev->hci_device_info.name, ocf);
		#endif
	}
}

/* Inquiry Complete */
void hci_inquiry_complete_evt(struct hci_dev *hdev)
{
	UINT8 status =(UINT8)(SDC_Get_Char(hdev->port));
	hci_req_complete(hdev,status);
	#ifdef DEBUG
	printf("%s status %d", hdev->hci_device_info.name, status);
	#endif
}

/* Inquiry Result */
void hci_inquiry_result_evt(struct hci_dev *hdev)
{
	int i;
	int num_rsp = (UINT8)(SDC_Get_Char(hdev->port));
	if(num_rsp !=1)
		return;
	for(i = 0;i<INQUIRY_INFO_SIZE;i++)
	{
		*((UINT8 *)(&(hdev->hci_inquiry_info))+i) = (UINT8)(SDC_Get_Char(hdev->port));
	}
  	//置標志位,已經接受一個藍牙的inquiry信息
  	hdev->inqu_flags = 0x0;
}

/* Connect Request */
void hci_conn_request_evt(struct hci_dev *hdev)
{
	int i;
	evt_conn_request cr;
	accept_conn_req_cp ac;
	reject_conn_cp rc;
	int accept = 0;
	for(i=0;i<EVT_CONN_REQUEST_SIZE;i++)
	{
		*((UINT8 *)(&cr)+i) = (UINT8)(SDC_Get_Char(hdev->port));
	}
	
	//printf("%s Connection request: %s type 0x%x", hdev->name, &cr->bdaddr, cr->link_type);
	
	if (cr.link_type == ACL_LINK) {
		/* Notify upper protocols ACL link notify L2CAP */
		
		
	}else{
	/* SCO link (no notification) */
	accept = 1;
	
	}
	if (accept) {
		/* Connection accepted by upper layer */
		__bt_mem_cpy((void*)(ac.bdaddr),(void*)(cr.bdaddr),6);
		ac.role = 0x01; //remain slave
		hci_send_cmd(hdev, OGF_LINK_CTL, OCF_ACCEPT_CONN_REQ, ACCEPT_CONN_REQ_CP_SIZE, (void*)&ac);
	}else{
		__bt_mem_cpy((void*)(rc.bdaddr),(void*)(cr.bdaddr),6);
		rc.reason = REJECT_REASON;
		hci_send_cmd(hdev,OGF_LINK_CTL,OCF_REJECT_CONN_REQ,REJECT_CONN_REQ_CP_SIZE,(void*)&rc);
	}
}

/* Connect Complete */
void hci_conn_complete_evt(struct hci_dev *hdev)
{
	int i;
	evt_conn_complete cc;
	for(i=0;i<EVT_CONN_COMPLETE_SIZE;i++)
	{
		*((UINT8 *)(&cc)+i) = (UINT8)(SDC_Get_Char(hdev->port));
	}
	if (!cc.status)
	{
		hci_conn_add(hdev,(UINT16)(cc.handle), cc.link_type, (char*)cc.bdaddr);
		hdev->link_flags=0;
		//for notify upper protocols.
		if (cc.link_type == ACL_LINK) {
	
	
		}else{
	
	
		}
	}
}

/* Disconnect Complete */

void hci_disconn_complete_evt(struct hci_dev *hdev)
{
	int i;
	UINT16 handle;
	evt_disconn_complete dc;
	for(i=0;i<EVT_DISCONN_COMPLETE_SIZE;i++)
	{
		*((char*)(&dc)+i) = (UINT8)(SDC_Get_Char(hdev->port));
	}
	handle = (UINT16)(dc.handle);
	
	if (!dc.status && (handle == hdev->hci_connection.hci_c_info.handle)) {
		// For Notify upper protocols 
		//if (conn->type == ACL_LINK) {
		
		
		//}else{
	
	
		//}
		hci_conn_del(hdev);
	}
}

/* Number of completed packets */
void hci_num_comp_pkts_evt(struct hci_dev *hdev)
{
	evt_num_comp_pkts nc;
	//UINT16 *ptr;
	int i;
	for(i=0;i<EVT_NUM_COMP_PKTS_SIZE;i++)
	{
		*((char*)(&nc)+i) = (UINT8)(SDC_Get_Char(hdev->port));
	}
	if(nc.num_hndl!=1)
	{
		//error,not a point to point bt device
		return;
	}
	if(nc.handle!=hdev->hci_connection.hci_c_info.handle)
	{
		//error,handle error,not matching
		return;
	}
	else{
		hdev->hci_connection.acl_conn_info.sent -=nc.num_of_complete_pkts;
	}
	hdev->acl_cnt +=nc.num_of_complete_pkts;
	
}

//hci event packet
void hci_event_packet(struct hci_dev *hdev)
{
	hci_event_hdr he;
	evt_cmd_status cs;
	evt_cmd_complete ec;
	UINT16 opcode,ocf,ogf;
	UINT8 indicator;
	int i;
	indicator=(UINT8)(SDC_Get_Char(hdev->port));
	if(indicator!=4)
	{
	//not a event packet,return;
		return;
	}
	for(i=0;i<HCI_EVENT_HDR_SIZE;i++)
	{
		*((char*)&he+i) = (UINT8)(SDC_Get_Char(hdev->port));
	}
	
	switch(he.evt){
	case EVT_NUM_COMP_PKTS:
			hci_num_comp_pkts_evt(hdev);
			break;
	case EVT_INQUIRY_COMPLETE:
			hci_inquiry_complete_evt(hdev);
			break;
	case EVT_INQUIRY_RESULT:
			hci_inquiry_result_evt(hdev);
			break;
	case EVT_CONN_REQUEST:
			hci_conn_request_evt(hdev);
			break;
	case EVT_CONN_COMPLETE:
			hci_conn_complete_evt(hdev);
			break;
	case EVT_DISCONN_COMPLETE:
			hci_disconn_complete_evt(hdev);
			break;
	case EVT_CMD_STATUS:
			for(i=0;i<EVT_CMD_STATUS_SIZE;i++)
			{
				*((char*)&cs+i)=(UINT8)(SDC_Get_Char(hdev->port));
			}
			opcode = (UINT16)(cs.opcode);
			ogf = cmd_opcode_ogf(opcode);
			ocf = cmd_opcode_ocf(opcode);
			switch(ogf){
			case OGF_INFO_PARAM:
					hci_cs_info_param(hdev, ocf, cs.status);
					break;
			case OGF_HOST_CTL:
					hci_cs_host_ctl(hdev, ocf, cs.status);
					break;
			case OGF_LINK_CTL:
					hci_cs_link_ctl(hdev, ocf, cs.status);
					break;
			case OGF_LINK_POLICY:
					hci_cs_link_policy(hdev, ocf, cs.status);
					break;
			default:
					//command status
					#ifdef DEBUG
					printf("%s Command Status OGF %x", hdev->hci_device_info.name, ogf);
					#endif
					break;
			}
			break;
	case EVT_CMD_COMPLETE:
			//ec = (evt_cmd_complete *)((UINT8 *)cb->Head+HCI_EVENT_HDR_SIZE);
			for(i=0;i<EVT_CMD_COMPLETE_SIZE;i++)
			{
				*((char*)&ec+i)=(UINT8)(SDC_Get_Char(hdev->port));
			}
			opcode = /*(UINT16)*/(ec.opcode);
			ogf = cmd_opcode_ogf(opcode);
			ocf = cmd_opcode_ocf(opcode);
			switch(ogf){
			case OGF_INFO_PARAM:
					hci_cc_info_param(hdev, ocf);
					break;
			case OGF_HOST_CTL:
					hci_cc_host_ctl(hdev, ocf);
					break;
			case OGF_LINK_CTL:
					hci_cc_link_ctl(hdev, ocf);
					break;
			case OGF_LINK_POLICY:
					hci_cc_link_policy(hdev, ocf);
					break;
			default:
					//command status
					#ifdef DEBUG
					printf("%s Command Completed OGF %x", hdev->hci_device_info.name, ogf);
					#endif
					break;
			}
	}
	
	//to add addix code here.
	
}


//The following is the user function interfaces
void hci_init_req1(struct hci_dev *hdev)
{
	write_class_of_dev_cp wcd;
	UINT8 name_len;
	//reset
	hci_send_cmd(hdev, OGF_HOST_CTL, OCF_RESET, 0, NULL);
	__bt_print_to_sdc(hdev);
	__delay(1);
	//Mandatory initialization
	//Read BD Address and 
	hci_send_cmd(hdev, OGF_INFO_PARAM, OCF_READ_BD_ADDR, 0, NULL);
	__bt_print_to_sdc(hdev);
	__delay(2);
	//Read Local Supported Features 
	hci_send_cmd(hdev, OGF_INFO_PARAM, OCF_READ_LOCAL_FEATURES, 0, NULL);
	__bt_print_to_sdc(hdev);
	__delay(1);
	//Read local version information
	hci_send_cmd( hdev, OGF_INFO_PARAM, OCF_READ_LOCAL_VERSION, 0, NULL);
	__bt_print_to_sdc(hdev);
	__delay(1);
	//Read Buffer Size (ACL mtu, max pkt, etc.)
	hci_send_cmd(hdev, OGF_INFO_PARAM, OCF_READ_BUFFER_SIZE, 0, NULL);
	__bt_print_to_sdc(hdev);
	__delay(1);

	while((hdev->port->rx_buffer_status==SDC_BUFFER_DATA)||(hdev->port->rx_buffer_status==SDC_BUFFER_FULL))
	{
		hci_event_packet(hdev);
	}
	//write class of device cmd
	__bt_mem_cpy((void*) (&wcd), (void * )(hdev->hci_device_info.class_device),3);
	hci_send_cmd( (void*)hdev, OGF_HOST_CTL, OCF_WRITE_CLASS_OF_DEV, WRITE_CLASS_OF_DEV_CP_SIZE,(void*)(&wcd));
	__bt_print_to_sdc(hdev);
	__delay(1);
	//write device name cmd
	for(name_len=0;*((char*)(hdev->hci_device_info.name)+name_len)!='\0';name_len++)
	{
	}
	hci_send_cmd( (void*)hdev, OGF_HOST_CTL, OCF_CHANGE_LOCAL_NAME, name_len, (void*)(hdev->hci_device_info.name));
	__bt_print_to_sdc(hdev);
	__delay(1);
	while((hdev->port->rx_buffer_status==SDC_BUFFER_DATA)||(hdev->port->rx_buffer_status==SDC_BUFFER_FULL))
	{
		hci_event_packet(hdev);
	}
}
void hci_init_req2(struct hci_dev *hdev)
{
	set_event_flt_cp ec;
	/* Optional initialization */
	//Clear Event Filters
	ec.flt_type  = FLT_CLEAR_ALL;
	hci_send_cmd((void*)hdev, OGF_HOST_CTL, OCF_SET_EVENT_FLT, 1, (void*)(&ec));
	__bt_print_to_sdc(hdev);
	__delay(1);
	//write scan enable
	hci_scan_req(hdev);
	__bt_print_to_sdc(hdev);
	__delay(1);
	//write authen disable
	hci_auth_req(hdev);
	__bt_print_to_sdc(hdev);
	__delay(1);
	//write voice setting
	hci_send_cmd((void*)hdev, OGF_HOST_CTL, OCF_WRITE_VOICE_SETTING, 2, (void*)(&(hdev->voice_setting)));
	__bt_print_to_sdc(hdev);
	__delay(1);
	//set event filter,set auto accept
	ec.flt_type = FLT_CONN_SETUP;
	ec.cond_type = CONN_SETUP_ALLOW_ALL;
	ec.condition = CONN_SETUP_AUTO_ON;
	hci_send_cmd(hdev, OGF_HOST_CTL, OCF_SET_EVENT_FLT, 3, (void*)(&ec)); 
	__bt_print_to_sdc(hdev);
	__delay(1);
	//Connection accept timeout ~20 secs
	hci_send_cmd(hdev, OGF_HOST_CTL, OCF_WRITE_CA_TIMEOUT, 2, (void*)(&(hdev->conn_accept_timeout)));
	__bt_print_to_sdc(hdev);
	__delay(1);
	//Page timeout secs
	hci_send_cmd(hdev, OGF_HOST_CTL, OCF_WRITE_PG_TIMEOUT, 2, (void*)(&(hdev->page_timeout)));
	__bt_print_to_sdc(hdev);
	__delay(1);
	while((hdev->port->rx_buffer_status==SDC_BUFFER_DATA)||(hdev->port->rx_buffer_status==SDC_BUFFER_FULL))
	{
		hci_event_packet(hdev);
	}

}

void HCI_master_create_acl_conn(struct hci_dev *hdev)
{
	hci_inq_req(hdev);
	__bt_print_to_sdc(hdev);
	__delay(10);
	while(hdev->inqu_flags)
	{
		while((hdev->port->rx_buffer_status==SDC_BUFFER_DATA)||(hdev->port->rx_buffer_status==SDC_BUFFER_FULL))
		{
			hci_event_packet(hdev);;
		}
	}
	hci_create_connect( hdev, (char*)(hdev->hci_inquiry_info.bdaddr));
	__bt_print_to_sdc(hdev);
	__delay(5);
	while(hdev->link_flags)
	{
		while((hdev->port->rx_buffer_status==SDC_BUFFER_DATA)||(hdev->port->rx_buffer_status==SDC_BUFFER_FULL))
		{
			hci_event_packet(hdev);;
		}
	}
}
unsigned char acl_demo_data[15]={0x02,0x01,0x20,0x0A,0x00,0x06,0x00,0x01,0x00,0x48,0x45,0x4C,0x4C,0x4F,0x00};
void HCI_Send_acl_demo(struct hci_dev *hdev)
{
	int i;
	for(i=0;i<15;i++)
	{
		HCI_Put_char(hdev, *(acl_demo_data+i));
	}
	__bt_print_to_sdc(hdev);

}

void HCI_SCO_conn(struct hci_dev *hdev)
{
	hdev->link_flags=1;
	hci_add_sco_conn(hdev);
	while(!(hdev->link_flags))
	{
		while((hdev->port->rx_buffer_status==SDC_BUFFER_DATA)||(hdev->port->rx_buffer_status==SDC_BUFFER_FULL))
		{
			hci_event_packet(hdev);;
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷av久久久久久久| 亚洲国产精品传媒在线观看| 欧美精品一区二| 亚洲电影在线播放| 成人av网站免费观看| 精品久久久久99| 婷婷成人综合网| 色综合咪咪久久| 中文字幕精品在线不卡| 免费欧美高清视频| 欧美日韩视频专区在线播放| 日韩伦理av电影| 成人一区二区三区中文字幕| 精品国产一区久久| 午夜日韩在线观看| 在线免费观看日本一区| 中文字幕亚洲成人| 成人国产电影网| 久久精品视频免费| 国产福利91精品| 日本一区二区视频在线| 韩国v欧美v亚洲v日本v| 日韩精品一区二区三区视频播放 | 久久综合网色—综合色88| 亚洲第一会所有码转帖| 精品国产伦一区二区三区观看体验 | 亚洲一区视频在线| 91视频com| 亚洲精品国产a| 在线看日本不卡| 一区二区三区四区乱视频| 99国产精品久久久久久久久久 | 色哟哟亚洲精品| 欧美一级一区二区| 中文字幕佐山爱一区二区免费| 欧美高清性hdvideosex| 美女被吸乳得到大胸91| 精品国产亚洲在线| 国产高清无密码一区二区三区| 久久久无码精品亚洲日韩按摩| 国产成人av电影在线| 综合精品久久久| 欧美日韩一区二区不卡| 免费人成网站在线观看欧美高清| 欧美mv日韩mv亚洲| 从欧美一区二区三区| 国产精品美女久久福利网站| 色婷婷亚洲综合| 肉色丝袜一区二区| 久久久精品免费免费| jizz一区二区| 亚洲福利一区二区三区| 日韩一区二区免费在线电影| 极品销魂美女一区二区三区| 欧美高清在线精品一区| 在线欧美日韩国产| 精品在线免费视频| 最好看的中文字幕久久| 在线电影欧美成精品| 韩国在线一区二区| 一区二区三区在线免费视频| 日韩欧美中文字幕制服| 国产91丝袜在线播放| 亚洲一二三级电影| 精品国产不卡一区二区三区| 99视频精品在线| 青青草97国产精品免费观看无弹窗版| 久久久噜噜噜久久人人看| 91成人免费电影| 国产成人在线网站| 性做久久久久久久免费看| 国产欧美一区二区精品秋霞影院| 在线观看日韩国产| 国产麻豆精品一区二区| 亚洲蜜臀av乱码久久精品| 欧美精品一区二区三区蜜桃| 在线视频你懂得一区| 国产成人一级电影| 五月综合激情婷婷六月色窝| 中文字幕欧美三区| 欧美一区在线视频| 色欧美88888久久久久久影院| 久久国产精品露脸对白| 亚洲成人在线免费| 国产精品久久久一本精品 | 久久国产综合精品| wwwwxxxxx欧美| 成人av午夜影院| 亚洲一区二区三区四区在线| 91精品在线免费| 国产老女人精品毛片久久| 国产精品国模大尺度视频| 在线免费观看不卡av| 蜜臀a∨国产成人精品| 久久综合资源网| 一本色道**综合亚洲精品蜜桃冫| 亚洲中国最大av网站| 国产乱色国产精品免费视频| 亚洲成av人片一区二区三区| 成人免费在线播放视频| 国产情人综合久久777777| 精品国产sm最大网站免费看| 欧美日韩国产高清一区二区| 欧美综合一区二区| 91福利精品第一导航| 99久久精品免费| aaa欧美色吧激情视频| gogogo免费视频观看亚洲一| 成人免费av资源| av在线不卡观看免费观看| 国产91精品露脸国语对白| 国产夫妻精品视频| 成人免费看视频| 成人免费电影视频| 色综合久久久久综合| 91黄色免费观看| 欧美精选在线播放| 日韩精品中文字幕在线不卡尤物| 日韩欧美美女一区二区三区| 亚洲精品一区二区在线观看| 精品区一区二区| 中文字幕av一区二区三区高| 一色桃子久久精品亚洲| 亚洲欧洲av另类| 亚洲国产你懂的| 日韩电影在线免费观看| 日韩成人伦理电影在线观看| 麻豆精品视频在线观看视频| 六月婷婷色综合| 国产91精品入口| 色婷婷av一区| 51久久夜色精品国产麻豆| 日韩欧美的一区二区| 久久精品在线观看| 亚洲综合一二三区| 秋霞影院一区二区| 国产99一区视频免费| 一本到三区不卡视频| 在线播放国产精品二区一二区四区 | 亚洲午夜精品在线| 日本亚洲三级在线| 国产成人av电影在线观看| 99国产精品视频免费观看| 欧美男同性恋视频网站| www国产成人免费观看视频 深夜成人网| 中文字幕免费观看一区| 亚洲国产va精品久久久不卡综合 | 日韩精品五月天| 国产福利一区在线观看| 色综合久久综合网欧美综合网| 欧美一区二区三区视频在线| 亚洲国产精品成人综合色在线婷婷| 亚洲国产美女搞黄色| 高清国产一区二区三区| 精品视频一区三区九区| 国产喷白浆一区二区三区| 波多野结衣中文字幕一区二区三区| 欧洲人成人精品| 久久久久久9999| 日韩电影在线免费看| 91农村精品一区二区在线| 精品国产乱码91久久久久久网站| 成人欧美一区二区三区白人 | 久久人人爽爽爽人久久久| 久久中文字幕电影| 日本一区二区三区四区在线视频| 国产日产欧美一区二区三区| 成人欧美一区二区三区白人| 亚洲高清视频在线| 精品一区二区三区久久久| 国产乱码精品一区二区三区忘忧草| 亚洲高清免费在线| 久久er99精品| 欧美一区二区三区免费在线看| 亚洲综合激情小说| 91一区二区在线| 国产精品三级久久久久三级| 久久av资源站| 欧美一卡二卡在线| 午夜精品福利在线| 欧美在线视频全部完| 亚洲日本va在线观看| 成人丝袜高跟foot| 中文字幕成人网| 国产精品香蕉一区二区三区| 精品国免费一区二区三区| 日本女人一区二区三区| 欧美色视频在线| 亚洲国产精品视频| 欧美性色黄大片| 一区二区三区视频在线看| 日本韩国一区二区三区| 亚洲激情图片一区| 91福利精品第一导航| 亚洲黄网站在线观看| 色欧美日韩亚洲| 亚洲精品伦理在线| 在线视频一区二区三| 亚洲制服丝袜av| 欧美日韩国产影片|