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

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

?? blue.cpp

?? blue-usu: (Search, Connect, Playback, Record) with bluetooth devices like headset. Rely on usu dr
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
	int ritorno=0;	int optL=hciEvts[index].resL;	unsigned char* ubuf = (unsigned char*)buf;	/* 1) see if msg is our response. */	if ((len-2)==ubuf[1]) {		if (hciEvts[index].evt==ANY_EVT || (buf[0]==hciEvts[index].evt && (optL==ubuf[1]))) {			ritorno=HciReqRes::readRes(buf,ubuf[1]+2);			scanRes(buf,2);			if (hciEvts[index].evt==ANY_EVT)				evtComplete();			/* 2) If interesting verify correctness (status=0).*/			if (log) {				int l;				Dprintf("> %s(%02x)",hciEvts[index].des,buf[0]);				for (l=0; l<ubuf[1]; l++)					Dprintf("%02x",(unsigned char)res[2+l]);				switch (hciEvts[index].evt) {					case DISCONN_COMPLETE:						Dprintf(" reason(%s)",blueErrDes(res[5]));					case CONNECT_COMPLETE:						Dprintf(" status(%s)",blueErrDes(res[2]));						ritorno=res[2]?blue2linuxErr(res[2]):ritorno;					default:						break;				}			}		}	}	return ritorno;}enum L2capCode {	NO_CODE=0,	COMMAND_REJ=1,	CONNECT_REQ,	CONNECT_RES,	CONFIG_REQ,	CONFIG_RES,	DISCONN_REQ,	DISCONN_RES,	ECHO_REQ,	ECHO_RES,	INFO_REQ,	INFO_RES,};struct L2capCmdEvt{	L2capCode code;	int len;};class HciL2cap: public HciReqRes {	static char hciH;	static L2capCmdEvt l2capCmdEvt[11];	static char req_ident;	static char res_ident;		L2capCode code;	int remL;public:	HciL2cap(char cid, L2capCode code, char* opt, int optl=-1);	~HciL2cap();	int readRes(char* des, int len);	int writeReq(char* buf, int len);	void copy(HciL2cap& ing) {memcpy(this,&ing,sizeof(*this));}		static void setHciHandle(char newHhciH);	static void setReqNumber(char reqn);	static char getReqNumber();};char HciL2cap::hciH='\x0';char HciL2cap::req_ident=0;char HciL2cap::res_ident=0;L2capCmdEvt HciL2cap::l2capCmdEvt[]={	{COMMAND_REJ, 	0},	{CONNECT_REQ, 	4},	{CONNECT_RES, 	8},	{CONFIG_REQ,  	8},	{CONFIG_RES,  	6},	{DISCONN_REQ, 	4},	{DISCONN_RES, 	4},	{ECHO_REQ,	0},	{ECHO_RES,	0},	{INFO_REQ,	0},	{INFO_RES,	0},};void HciL2cap::setHciHandle(char newHciH) {	hciH=newHciH;}void HciL2cap::setReqNumber(char number) {	req_ident=number;}char HciL2cap::getReqNumber() {	return req_ident;}HciL2cap::~HciL2cap() {}HciL2cap::HciL2cap(char cid, L2capCode cod, char* opt, int optl): code(cod) {	setProto(L2CAP);	HciReqRes::compileReq(&hciH,1);	HciReqRes::compileReq("\x20",1);	remL=0;	unsigned int l;	int optL=optl;	for (l=0; (l<sizeof(l2capCmdEvt)/sizeof(L2capCmdEvt)) && (optL==-1); l++)		if (l2capCmdEvt[l].code==code)			optL=l2capCmdEvt[l].len;	if (optL!=-1) {		char codechar=(char)code;		char optLc=(char) optL + 4/*len,cid*/ + 4 /*code,ident,len*/;		HciReqRes::compileReq(&optLc, 1);		HciReqRes::compileReq("\x00", 1);		optLc-=4;		HciReqRes::compileReq(&optLc, 1);		HciReqRes::compileReq("\x00", 1);		HciReqRes::compileReq(&cid,1);		HciReqRes::compileReq("\x00",1);		if (codechar!=NO_CODE) {			char ident;			if (codechar%2) {				res_ident++;				ident=res_ident;			} else {				req_ident++;				ident=req_ident;			}			HciReqRes::compileReq(&codechar,1);			HciReqRes::compileReq(&ident,1);			optLc-=4;			HciReqRes::compileReq(&optLc, 1);			HciReqRes::compileReq("\x00", 1);		}		if (opt && optL)			HciReqRes::compileReq(opt, optL);	} else if (code!=NO_CODE)		Dprintf("L2cap::L2cap() code=%d !found.",code);}int HciL2cap::writeReq(char* buf, int len) {	if (log) {		Dprintf("< L2CAP:");		int l;		for (l=0; (l<getReqC()); l++)			Dprintf("%02x",(unsigned char)req[l]);	}	return HciReqRes::writeReq(buf,len);}/*  * L2CAP	  ACL            L2CAP *  ACL		28 20 0C 00	08 00  01 00  ... *		|   |   |	 len	cid *       (handle)   |   | * 		(flag)  | * 		      (len) *  * When >1 packet is generated4anL2CAPmsg, we have this situation: * 	 ACLlen=18  | L2CAPlen=14 * 	28 20 11 00 | 0e 00 41 ... * 	28 10 01 00 | aa * * Same packet sometimes is generated with 1 frame: * 	 ACLlen=18  | L2CAPlen=14 * 	28 20 12 00 | 0e 00 41 ... * * In first case, the second frame can be linked to first only thank to ACL level, so we expect that * every non first frame are related to last frame in same direction. * */ int HciL2cap::readRes(char* buf, int len) {	int ritorno=0;	unsigned char* ubuf=(unsigned char*) buf;	if (buf[0]==hciH) {		/* 		 * If start frame, remain on,		 *    middle frame, remain on,		 *    end frame, turn off.		 */		ritorno=HciReqRes::readRes(buf,len);		if (log) {			int l;			Dprintf("> L2CAP:");			for (l=0; l<len; l++)				Dprintf("%02x",(unsigned char)res[l]);		}		if (remL==0)			remL=ubuf[4]+(ubuf[5]<<8);		remL-=(ritorno-8);		if (remL>0) {			Dprintf("(!complete packet,remain=%d)",remL);			/*requestOn=true*/;		} if (remL<0)			Dprintf("(corrupted packet!remL=%d!)",remL);		if (buf[8]==CONNECT_RES && buf[16]==1 && buf[18]==2) {			Dprintf("(auth pending, reschedule same event)");			setDone(false);		}	}	return ritorno;}HciBus::HciBus() {	memset(this,0,sizeof(*this));#ifdef USE_PROC_FS	fdCommand=open("/proc/USBDo/intr",O_WRONLY,0666);	fdEvent	 =open("/proc/USBDo/intr",O_RDONLY,0666);	fdDataAsync=open("/proc/USBDo/bulk",O_RDWR,0666);/*	fdDataSync =open("/proc/USBDo/isoc",O_RDWR,0666);*/#else	fdCommand=open("/dev/usu_intr",O_WRONLY,0666);	fdEvent	 =open("/dev/usu_intr",O_RDONLY,0666);	fdDataAsync=open("/dev/usu_bulk",O_RDWR,0666);#endif	lastPduL=MAX_PDU_LEN;	lastPduC=0;	lastPdu = new char[MAX_PDU_LEN];}HciBus::~HciBus() {	if (fdCommand>0) close(fdCommand);	if (fdEvent>0) close(fdEvent);	if (fdDataAsync>0) close(fdDataAsync);	if (fdDataSync>0) close(fdDataSync);	int l,ritorno=0;	for (l=0; l<MAX_PENDING_CMD; l++)		if (hcireqres[l]) {			Dprintf("HciBus::clear() found obj!!!\n");			/*hcireqres[l].detach()~HciReqRes()*/;			hcireqres[l]=NULL;			ritorno++;		}	delete lastPdu;}void onMessageDestroy(void* hb, HciReqRes& hcirr) {	((HciBus*)hb)->clear(hcirr);}int HciBus::schedule(HciReqRes& hcirr,char classe) {	int ritorno=-ENOSPC;	int l,la,lb;//	if (hcirr.done()) return -EBADMSG;	la=(classe=='a')?0:MAX_PENDING_CMD_CLASSA;	lb=(classe=='a')?  MAX_PENDING_CMD_CLASSA:MAX_PENDING_CMD;	for (l=la; (l<lb) && (ritorno<0); l++)		if (hcireqres[l]==NULL || hcireqres[l]->done())			ritorno=l;	if (ritorno>=0) {		hcireqres[ritorno]=&hcirr;//		fb=(void (*) (HciReqRes&)) &HciBus::onMessageDestroy;		hcirr.atExit(this,onMessageDestroy);		/*		hcireqres[ritorno].detach();		hcireqres[ritorno].copy(hcirr);		hcireqres[ritorno].attach();		*/		ritorno=hcirr.writeReq(lastPdu, lastPduL);		if (ritorno>0) { /* So event can pass through this function.*/			lastPduC=ritorno;			ritorno=hcirr.getProto()==HciReqRes::HCI?writeHci(fdCommand):writeHci(fdDataAsync);		}	}	if (log && ritorno!=0) Dprintf("\tscheduled(%s=%s)\n",ritorno>=0?"bytes":"err",linuxErrDes(ritorno));	return ritorno;}int HciBus::writeHci(char* cmddata,int cmddataLen) {	if (cmddataLen>lastPduL)		return -ENOSPC;	memcpy(lastPdu,cmddata,cmddataLen);	lastPduC=cmddataLen;	return writeHci(fdCommand);}int HciBus::writeHci(int fd) {	int ritorno=0;	int nVolte=0;	while (ritorno>=0 && lastPduC>0 && nVolte<10 && fd>=0) {		ritorno=write(fd,lastPdu,lastPduC);		if (ritorno>=0) lastPduC-=ritorno;		if (nVolte) {			struct timespec ts;			ts.tv_sec=0;			ts.tv_nsec=1000*100; /* 100 msec.*/			nanosleep(&ts,0);		}		nVolte++;	}	if (nVolte==10 || fd==-1) ritorno=-ENODEV;	return ritorno;}/* In one cycle we read msg & deliver. * * Return 0 if 0 bytes was readed form hciFd, * 	 >0 if wee read a valid msg & is being accepted, without error, by someone. * 	 <0 (msg decode with error -EBADMSG) | (msg !accepted by so -ESRCH) | (msg accepted with error) */int HciBus::hci_readEvt() {	return readHci(HciReqRes::HCI);}int HciBus::l2cap_readEvt() {	return readHci(HciReqRes::L2CAP);}/* readMsg() read {hci,l2cap} pdu (so we found hci,l2cap header) * 	     for l2cap put only header from first packet, so user level can recognize multipacket. */int HciBus::readMsg(HciReqRes::ProtoT proto) {	int ritorno=0;	bool done=false;	int nPacket=0;	int lastPduCkp1=0;	unsigned char* ulastPdu = (unsigned char*)lastPdu;	/* Header & msg.*/	int currFd	=(proto==HciReqRes::HCI)?fdEvent:fdDataAsync;;	int hdrLen	=(proto==HciReqRes::HCI)?2:4;	int pduLen;	/* Overwrite lastPdu.*/	lastPduC=0;	while (ritorno>=0 && !done) {		/* HCI Event:		L2CAP Event:		 * id len		    ACL	    |   L2CAP		 * 13 0B ...		28 20 12 00 | 0e 00 41 ... 		 * 			       len     len		 *  hdrlen=2		hdrlen=4		 *  len@pdu[1]		len@pdu[2:3]		 *		 *  1) Read header,		 */		if (proto==HciReqRes::L2CAP || (proto==HciReqRes::HCI && nPacket==0)) {			ritorno=currFd!=-1?read(currFd,lastPdu+lastPduC,hdrLen):-ENODEV;			if (proto==HciReqRes::HCI || (proto==HciReqRes::L2CAP && nPacket==0))				lastPduCkp1+=hdrLen;			nPacket++;		}		/*  2) Read remaining bytes of protocol {HCI,ACL}. */		if (ritorno==hdrLen) {			pduLen=ulastPdu[hdrLen>>1]; 			/* HCI len.	*/			if (proto==HciReqRes::L2CAP)				pduLen+=ulastPdu[(hdrLen>>1)+1]<<8;	/* ACL len.	*/			while (ritorno>=0 && pduLen>0) {				ritorno=read(currFd,lastPdu+lastPduCkp1,pduLen);				if (ritorno>0) {					pduLen-=ritorno;					lastPduCkp1+=ritorno;				}				if (ritorno==0) {					static int nTime=0;					if (nTime<100) {						struct timespec ts;						ts.tv_sec=0;						ts.tv_nsec=1<<20; /* about 1ms.*/						nanosleep(&ts,0);						nTime++;					} else {						ritorno = -ETIMEDOUT;						if (log)							Dprintf("> msg timedout while reconstruct msg of len(%d/%d)!",lastPduCkp1,pduLen+lastPduCkp1);					}				}			}		} else if (ritorno>0) {			if (log)				Dprintf("(ERR!: can't read atomically header)");			ritorno=-EBADMSG;		}		if (ritorno>=0) {			done = true;			if (ritorno>0 && proto==HciReqRes::L2CAP) {				int l2capLen=ulastPdu[4]+(ulastPdu[5]<<8);				Dprintf("l2cap (desLen,readedLen)=(%d,%d)",l2capLen,lastPduCkp1-8);				if (l2capLen<4) {					if (log)						Dprintf("(ERR!:L2CAP msg have len<4 (len=%d))",l2capLen);				} else if (l2capLen>lastPduCkp1-8) {					done=false;					if (log)						Dprintf("(L2CAP msg have other %d bytes)",l2capLen-(lastPduCkp1-8));				} else if (l2capLen<lastPduCkp1-8) {					if (log)						Dprintf("(ERR!:bad L2CAP msg: ACL len > L2CAP len)");					ritorno = -EBADMSG;					done = false;				}			}		}	}	if (ritorno>0) {		lastPduC=lastPduCkp1;		ritorno =lastPduCkp1;	}	return ritorno;}/* If any pending message, we complete in this routine. * The problem is that if we have: *  <- ReadA *  <- ReadRemoteName *  -> 16 bytes *  -> 16 bytes *  -> N bytes (ReadA) *  -> 16 bytes *  -> 16 bytes * It is difficult to recognize readRemoteName PDU against response (F 4 ...) * For now we serialize. */int HciBus::readHci(HciReqRes::ProtoT proto) {	/* 	 * Read entire msg.  Hci seem to prefere serial beh.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
高清av一区二区| 亚洲成av人片| 国产成人精品亚洲日本在线桃色 | 日本一区二区久久| 成人综合在线视频| 中文字幕第一区二区| youjizz久久| 亚洲一区二区三区国产| 欧美精品亚洲二区| 精品一区二区三区久久久| 久久久久久久网| 99久久综合狠狠综合久久| 亚洲精品视频自拍| 91精品国产日韩91久久久久久| 午夜电影一区二区三区| 欧美哺乳videos| 暴力调教一区二区三区| 亚洲亚洲人成综合网络| 日韩欧美国产小视频| 大白屁股一区二区视频| 一区二区三区久久| 亚洲精品欧美专区| 日韩美女视频在线| 本田岬高潮一区二区三区| 日韩精品三区四区| 日本一区二区电影| 欧美一区日本一区韩国一区| 国产99一区视频免费| 亚洲自拍与偷拍| 久久美女艺术照精彩视频福利播放| 一本大道av一区二区在线播放| 日本色综合中文字幕| 国产精品青草久久| 这里只有精品电影| av综合在线播放| 免费日韩伦理电影| 亚洲激情第一区| 久久久综合视频| 欧美日韩成人在线| 成人午夜伦理影院| 看电视剧不卡顿的网站| 一区二区三区四区蜜桃| www国产亚洲精品久久麻豆| 91久久精品一区二区三| 国产精品一级片在线观看| 偷拍与自拍一区| 日韩毛片一二三区| 国产亚洲成av人在线观看导航| 欧美美女黄视频| 一本大道久久精品懂色aⅴ | 亚洲123区在线观看| 中文乱码免费一区二区| 欧美一区二区三区在线观看| 白白色亚洲国产精品| 国产资源在线一区| 秋霞av亚洲一区二区三| 亚洲一区二三区| 中文字幕一区二区在线播放| 久久综合色一综合色88| 91 com成人网| 欧美性一二三区| 色噜噜狠狠色综合中国| 99视频有精品| 99久久99久久免费精品蜜臀| 国产精品1区2区3区| 久久国产精品第一页| 日韩精品乱码av一区二区| 亚洲一区二区三区四区在线观看| 欧美国产视频在线| 久久婷婷久久一区二区三区| 精品日韩在线观看| 日韩视频在线观看一区二区| 欧美日本乱大交xxxxx| 欧美日韩国产一级二级| 欧美日韩免费观看一区三区| 欧美中文字幕一区| 欧洲亚洲国产日韩| 欧美日韩国产综合草草| 欧美色综合天天久久综合精品| 在线一区二区三区四区| 在线观看日韩电影| 欧美四级电影在线观看| 精品婷婷伊人一区三区三| 欧美日韩精品专区| 欧美电影免费提供在线观看| 欧美成人激情免费网| 久久综合国产精品| 欧美高清在线精品一区| 亚洲欧美日韩国产中文在线| 夜夜嗨av一区二区三区四季av | 成人免费毛片高清视频| 成人免费看的视频| 91丨porny丨在线| 欧美午夜不卡视频| 91精品国产综合久久福利| 欧美mv日韩mv国产| 中文字幕不卡在线播放| 成人免费在线播放视频| 一区二区三区美女视频| 青椒成人免费视频| 粉嫩久久99精品久久久久久夜 | 国产成人av一区二区| 99精品欧美一区二区三区综合在线| 色悠久久久久综合欧美99| 欧美人狂配大交3d怪物一区| 欧美成人官网二区| 中文字幕在线免费不卡| 亚洲福利国产精品| 激情综合网av| 色婷婷av一区二区三区大白胸| 欧美日韩国产综合一区二区| 久久久精品欧美丰满| 亚洲久本草在线中文字幕| 日av在线不卡| av一二三不卡影片| 日韩视频永久免费| 亚洲欧美激情插| 卡一卡二国产精品| 91在线视频播放地址| 日韩亚洲欧美综合| 综合久久给合久久狠狠狠97色| 日韩电影一区二区三区四区| 国产99久久久精品| 欧美一区二区免费观在线| 国产精品不卡一区二区三区| 日本欧美肥老太交大片| zzijzzij亚洲日本少妇熟睡| 日韩亚洲欧美在线| 亚洲激情图片一区| 大桥未久av一区二区三区中文| 欧美放荡的少妇| 亚洲欧美中日韩| 国产九色sp调教91| 欧美日韩黄视频| 亚洲伦理在线免费看| 国模一区二区三区白浆| 欧洲另类一二三四区| 中文字幕的久久| 精品无人码麻豆乱码1区2区| 欧美三级中文字| 自拍偷在线精品自拍偷无码专区| 裸体在线国模精品偷拍| 欧美日韩在线一区二区| 亚洲图片激情小说| 国产成人在线视频免费播放| 欧美美女黄视频| 有码一区二区三区| 成人影视亚洲图片在线| 精品久久久久久久一区二区蜜臀| 亚洲大尺度视频在线观看| 色综合天天狠狠| 国产精品电影院| 成人晚上爱看视频| 久久色成人在线| 精品一区二区三区欧美| 欧美一区二区三区色| 五月天一区二区| 欧美日韩视频专区在线播放| 一区二区三区资源| 99国产精品久久久| 亚洲日本va午夜在线影院| 白白色 亚洲乱淫| 亚洲青青青在线视频| 粉嫩一区二区三区在线看| 国产一区二区三区黄视频| 久久你懂得1024| 久久新电视剧免费观看| 日韩高清一区二区| 欧美伦理影视网| 男女性色大片免费观看一区二区| 欧美日本在线观看| 成人avav影音| 成人欧美一区二区三区白人| av高清不卡在线| 亚洲三级在线看| 色素色在线综合| 亚洲午夜激情网页| 欧美日韩三级视频| 蜜臀va亚洲va欧美va天堂 | 久久99精品久久久久| 精品久久久网站| 国产99久久久国产精品潘金| 中文一区二区在线观看| av电影在线观看完整版一区二区| 亚洲蜜臀av乱码久久精品蜜桃| 欧美图片一区二区三区| 日本不卡在线视频| 国产亚洲制服色| 色综合久久中文综合久久97| 亚洲国产aⅴ天堂久久| 欧美一区二区观看视频| 国产一区二区三区综合| 成人免费小视频| 欧美日韩国产另类一区| 久久精品国产久精国产爱| 国产精品网站在线| 欧美性大战xxxxx久久久| 麻豆国产一区二区| 国产精品久久久久影院亚瑟| 欧美午夜电影网|