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

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

?? blue.cpp

?? blue-usu: (Search, Connect, Playback, Record) with bluetooth devices like headset. Rely on usu dr
?? CPP
?? 第 1 頁 / 共 4 頁
字號(hào):
/* * blue.cpp * * Author : Lionetti Salvatore <salvatorelionetti@yahoo.it> * License: GPL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */#include<stdio.h>#include<stdio.h>#include<fcntl.h>  /* open().*/#include<unistd.h> /* read()/close().*/#if 0#ifdef LITTLE_ENDIAN#undef LITTLE_ENDIAN#include<linux/byteorder/little_endian.h>#elif defined BIG_ENDIAN#undef BIG_ENDIAN#include<linux/byteorder/big_endian.h>#endif#endif#include<string.h>      /* memcpy().*/#include<linux/types.h> /* __u16 */#include<time.h> 	/* nanosleep(), timespec.*/#include<stdarg.h>	/* va_start(), va_end().*/#include<errno.h>#include"blue.h"#include"../config_usu.h" /* To select fs to which interact.*/#undef USE_PROCFSchar* linuxErrDes(int errCode) {	char* ritorno=0;	switch (errCode) {		case -ESRCH: {ritorno="-ESRCH";break;}		case -ENOSPC:{ritorno="-ENOSPC";break;}		case -EPROTO:{ritorno="-EPROTO";break;}		case -ENODEV:{ritorno="-ENODEV";break;}		case -EBADMSG:{ritorno="-EBADMSG";break;}		case -EALREADY:{ritorno="-EALREADY";break;}		case -EINVAL:{ritorno="-EINVAL";break;}		case -ETIMEDOUT:{ritorno="-ETIMEDOUT";break;}		case -EHOSTDOWN:{ritorno="-EHOSTDOWN";break;}		case -EACCES:{ritorno="-EACCES";break;}		case -ENOTCONN:{ritorno="-ENOTCONN";break;}		case -ECONNRESET:{ritorno="-ECONNRESET";break;}		case -EBUSY:{ritorno="-EBUSY";break;}		case -ECONNABORTED:{ritorno="-ECONNABORTED";break;}		default: {			static char defaultErr[10];			snprintf(defaultErr,10,"%d",errCode);			ritorno=defaultErr;			break;		}	}	return ritorno;}int blue2linuxErr(int errCode) {	int ritorno=0;	switch(errCode) {		case '\xb': 	{ritorno=-EALREADY;break;}		case '\x12': 	{ritorno=-EINVAL;break;}		case '\x10': 	{ritorno=-ETIMEDOUT;break;}		case '\x4': 	{ritorno=-EHOSTDOWN;break;}		case '\x18':		case '\x5': 	{ritorno=-EACCES;break;}		case '\x2': 	{ritorno=-ENOTCONN;break;}		case '\x13': 	{ritorno=-ECONNRESET;break;}		case '\xc':	{ritorno=-EBUSY;break;}		case '\x9':		case '\xa':	{ritorno=-EMLINK;break;} /* Many link.*/		case '\x16':	{ritorno=-ECONNABORTED;break;} /* Software cause connection abort.*//*		case '\x22':	{ritorno=-EPROTO;break;}  UNKNOWN.*/		case '\x1f':	{ritorno=-EIO;break;} /* affix report unk err.*/		default:	{ritorno=errCode;break;}	}	return ritorno;}char* blueErrDes(int errCode) {	return linuxErrDes(blue2linuxErr(errCode));}int log=1;FILE* fdlog=NULL;int Dprintf(const char* fmt,...) {	int ritorno;	{		va_list va;		va_start(va,fmt);		ritorno=vfprintf(stdout,fmt,va);		va_end(va);	}	if (fdlog==NULL) {		fdlog=fopen("log.txt","a");		if (fdlog) fprintf(fdlog,"\n=========START PROGRAM============\n");	}	if (fdlog) {		va_list va;		va_start(va,fmt);		int ritorno;		ritorno=vfprintf(fdlog,fmt,va);		va_end(va);	}	return ritorno;}HciReqRes::HciReqRes() {	req=new char[MAX_PDU_LEN*2];	res=req + MAX_PDU_LEN;	reqL=resL=MAX_PDU_LEN; 	/* max len.*/	reqC=resC=0; 		/* cursors.*/	atExitF=NULL;}HciReqRes::~HciReqRes() {	if (atExitF)		atExitF(atExitP,*this);	delete req;}void HciReqRes::atExit(void* ingP,atExitT ing) {	atExitF=ing;	atExitP=ingP;}/* Write only if all requested bytes are now available.*/int HciReqRes::compileReq(char* buf, int len) {	int ritorno=0;	if (len+reqC<=reqL) {		memcpy(req+reqC,buf,len);		ritorno=len;		reqC+=len;	}	return ritorno;}int HciReqRes::scanRes(char* buf, int len) {	int ritorno=len;	if (ritorno>0) {		memcpy(buf,res+resC,ritorno);		resC+=ritorno;		/*if (resC==0) requestOn=false; */	}	return ritorno;}int HciReqRes::writeReq(char* buf, int len) {	int ritorno=-ENOSPC;	if (len>reqC) {		if (reqC>0) memcpy(buf, req, reqC);		ritorno=reqC;		/*reqC=0; so multi read can be done.*/		requestOn=true;	}	return ritorno;}/* Read only if all bytes requested are now available.*/int HciReqRes::readRes(char* buf, int len) {	int ritorno=0;	/*if (len<=resC)*/ {		/*resC-=len;*/		resC=0;		memcpy(res+resC,buf,len);		ritorno=len;		requestOn=false;		/*if (resC==0) requestOn=false; */	}	return ritorno;}bool HciReqRes::done() {return !requestOn;}enum HciReqRes::ProtoT HciReqRes::getProto() {return proto;}void HciReqRes::setProto(enum HciReqRes::ProtoT pro) {proto=pro;}int HciReqRes::getReqC() {return reqC;}int HciReqRes::getResC() {return resC;}void HciReqRes::setDone(bool idone) {requestOn=!idone;}/*void HciReqRes::attach() {if (hcirr) hcirr->usecount++;}void HciReqRes::detach() {if (hcirr) hcirr->usecount--;}void HciReqRes::copy(HciReqRes& ing) {memcpy(this,&ing,sizeof(*this));}*/enum OgfOcfT {	WRITE_VOICE_SETTING=0,	WRITE_SCAN_ENABLE,	WRITE_AUTH_ENABLE,	WRITE_ENCR_MODE,	WRITE_LOCAL_NAME,	CREATE_CONNECTION,	LINKKEY_REPLY,	LINKKEY_NEG_REPLY,	PINCODE_REPLY,	DISCONNECT,	WRITE_CLASS_OF_DEV,	WRITE_LINK_POLICY,	ADD_SCO_CONNECTION,	ACCEPT_CONNECTION,	READ_HOST_MAC, /* HOST mean the special bt device that let us2communicate with HciBus.*/	SEARCH_DEVICE,	READ_REMOTE_NAME,	WRITE_PAGESCAN_TIMEOUT,	WRITE_INCONNECTION_TIMEOUT,	SET_EVENT_FILTER,	EVENT_WAITING,};/* All HCI Command end with EVT command complete: (also if err?) * class HciCmd capture this behavior.*//* Only deal with hci cmd and related response (e..., f...) * * AcceptConnection is only req (really is a response to device) * and have no response at all. Now we only schedule. * If wrong command, we a spurious hciEvent.*/class HciCmd: public HciReqRes {public:	enum OgfT {NULL_OGF=0, LINK_CTL, LINK_POL, HOST_CTL, INFO_PAR, STATUS_PAR, TESTING_CMD=0x3E, VENDOR_CMD};	struct HciCmdT {		char* des;		enum OgfT ogf;		__u16 ocf;		__u8 reqL;		__u8 resL;	};#if 0		char* reqOptTypes;		char* resOptTypes;#endifprivate:	static HciCmdT hciCmds[21];	enum OgfOcfT index;public:	HciCmd(enum OgfOcfT ind, char* reqopt=0);	~HciCmd();	int readRes(char* des, int len);	int writeReq(char* buf, int len);	/* Now we assume that only one parameter is present in req.*/	void setPar(char* reqopt);	int getReqL() {return req[2];}	void copy(HciCmd& ing) {memcpy(this,&ing,sizeof(*this));}};#if 0struct HciCmd::HciCmdT asd[]={	{"wrVoiceSetting",	HciCmd::HOST_CTL, 0x26, 2, 0},		/* WRITE_VOICE_SETTING 	*/	{"wrVoiceSetting",	HciCmd::HOST_CTL, 0x26, 2, 0}		/* WRITE_VOICE_SETTING 	*/};#endifstruct HciCmd::HciCmdT HciCmd::hciCmds[]={	{"wrVoiceSetting",	HOST_CTL, 0x26, 2, 0},		/* WRITE_VOICE_SETTING 	*/	{"wrScanEnable",	HOST_CTL, 0x1a, 1, 0},		/* WRITE_SCAN_ENABLE	*/	{"wrAuthEnable",	HOST_CTL, 0x20, 1, 0},		/* WRITE_AUTH_ENABLE	*/	{"wrEncrMode",		HOST_CTL, 0x22, 1, 0},		/* WRITE_ENCR_MODE	*/	{"wrLocalName",		HOST_CTL, 0x13, 256, 0},	/* WRITE_LOCAL_NAME	*/	{"createConn",		LINK_CTL, 0x05, 13, 0},		/* CREATE_CONNECTION	*/	{"linkKeyReply",	LINK_CTL, 0x0b, 22, 6},		/* LINKKEY_REPLY	*/	{"linkKeyNegReply",	LINK_CTL, 0x0c,  6, 6},		/* LINKKEY_NEG_REPLY	*/	{"pinCodeReply",	LINK_CTL, 0x0d, /*12*/23, 6},		/* PINCODE_REPLY	*/	{"disconnect",		LINK_CTL, 0x06, 3, 0},		/* DISCONNECT		*/	{"wrClassOfDev",	HOST_CTL, 0x24, 3, 0},		/* WRITE_CLASS_OF_DEV	*/	{"wrLinkPolicy",	LINK_POL, 0x0d, 4, 2},		/* WRITE_LINK_POLICY	*/	{"addScoConn",		LINK_CTL, 0x07, 4, 0},		/* ADD_SCO_CONNECTION	*/	{"acceptConn",		LINK_CTL, 0x09, 7, 0},		/* ACCEPT_CONNECTION	*/	{"rdHostMac",		INFO_PAR, 0x09, 0, 6},		/* READ_HOST_MAC	*/	{"searchDev",		LINK_CTL, 0x01, 5, 0},		/* SEARCH_DEVICE	*/	{"readRemoteName",	LINK_CTL, 0x19, 10, 0},		/* READ_REMOTE_NAME	*/	{"wrPageScanTimeout",	HOST_CTL, 0x18, 2, 0},		/* WRITE_PAGESCAN_TIMEOUT*/	{"wrIConnectionTimeout",HOST_CTL, 0x18, 2, 0},		/* WRITE_INCONNECTION_TIMEOUT*/	{"setEventFilter",	HOST_CTL, 0x05, 2, 0},		/* SET_EVENT_FILTER	*/	{"eventWait",		NULL_OGF, 0x00, 0,0}		/* EVENT_WAITING	*/};HciCmd::HciCmd(enum OgfOcfT ind, char* reqopt) {	setProto(HCI);	index=ind;	if (hciCmds[index].ogf!=NULL_OGF) {		char tmp;		tmp = hciCmds[index].ocf;						compileReq(&tmp,1);		tmp = (hciCmds[index].ocf>>8)&3 | hciCmds[index].ogf<<2; 		compileReq(&tmp,1);		tmp = index==WRITE_LOCAL_NAME?strlen(reqopt):hciCmds[index].reqL; 	compileReq(&tmp,1);		if (reqopt)			compileReq(reqopt, index==WRITE_LOCAL_NAME?strlen(reqopt):req[2]);	}}HciCmd::~HciCmd() {}int HciCmd::writeReq(char* buf, int len) {	if (log && index!=EVENT_WAITING) {		Dprintf("< %s(%x,%x) ",hciCmds[index].des, req[0],req[1]);		int l;		for (l=0; (l<hciCmds[index].reqL) && (l<getReqC()-3); l++)			Dprintf(index==WRITE_LOCAL_NAME?"c":"%02x",(unsigned char)req[3+l]);	}	return HciReqRes::writeReq(buf,len);}int HciCmd::readRes(char* buf, int len) {	int ritorno=0;	int expL=6;	/* Parameter correct for 0xf */	int ogfocfC=4;	/* Parameter correct for oxf */	int statusC=2;	/* Parameter correct for 0xf */	/* 1) see if msg is our response:	 * 	(0xe, len, nPendPct, ocf,ogf, status : check ocf,ogf,status,len=expected).	 * 	(0xf, len, status, nPendCmd, ocf, ogf: check ocf,ogf,status,len=expected).	 */	if (buf[0]=='\xe' || buf[0]=='\xf') {		if (buf[0]=='\xe') {			expL+=hciCmds[index].resL;			ogfocfC=3;			statusC=5;		}		if (len>=expL) {			if (expL==(buf[1]+2) && memcmp(req,buf+ogfocfC,2)==0) {		       		ritorno=HciReqRes::readRes(buf,expL);				{					/* skip common header: E len nPendCmd ocf ogf status(?)*/					char tmp[6];					HciReqRes::scanRes(tmp,6);				}			       	/* 2) If interesting verify correctness (status=0).*/			       	if (log) {					int l;					Dprintf("> cmd%s(%02x) (%x,%x) status(%s)",buf[0]=='\xe'?"Compl":"Stat",buf[0],buf[ogfocfC],buf[ogfocfC+1],blueErrDes(buf[statusC]));					for (l=getResC(); l<expL; l++)						Dprintf("%02x",(unsigned char)res[l]);			       	}				ritorno = buf[statusC]?blue2linuxErr(buf[statusC]):ritorno;/*-EPROTO*/;		       	}		}	}	return ritorno;}void HciCmd::setPar(char* reqopt) {	memcpy(req+3,reqopt,hciCmds[index].reqL);	}/* Hci bytes produced, so communication is started by device: * HciCmd < * HciCmd > * HciEvt > */enum EvtT {	ANY_EVT=0,	NUM_COMPL_PACKET=0x13,	PINCODE_REQ=0x16,	LINKKEY_REQ,	LINKKEY_NOTIFY,	CONNECT_COMPLETE=3,	CONNECT_REQUEST,	DISCONN_COMPLETE,	SEARCH_DEVICE_END=1,	SEARCH_DEVICE_FOUND,	DEVICE_NAME=7};class HciEvt: public HciReqRes {public:	struct HciEvtT {		char* des;		enum EvtT evt;		__u8 resL;	};private:	int index;	static HciEvtT hciEvts[11];public:	HciEvt(enum EvtT ind);	~HciEvt();	int readRes(char* des, int len);	int writeReq(char* buf, int len);	virtual void evtComplete();	void copy(HciEvt& ing) {memcpy(this,&ing,sizeof(*this));}};struct HciEvt::HciEvtT HciEvt::hciEvts[]={	{"anyEvt",		ANY_EVT,		 0},	{"numComplPacket", 	NUM_COMPL_PACKET, 	 5},	{"pinCodeRequest", 	PINCODE_REQ, 		 6},	{"linkKeyRequest", 	LINKKEY_REQ, 		 6},	{"linkKeyNotify", 	LINKKEY_NOTIFY,		23},	{"connectComplete", 	CONNECT_COMPLETE, 	11},	{"connectRequest",  	CONNECT_REQUEST, 	10},	{"disconnComplete", 	DISCONN_COMPLETE, 	 4},	{"searchDevEnd",	SEARCH_DEVICE_END,	 1},	{"searchDevFound",	SEARCH_DEVICE_FOUND,	15},	{"remoteDeviceName",	DEVICE_NAME,		255},};HciEvt::HciEvt(enum EvtT ind) {	unsigned int l;	setProto(HCI);	index=-1;	for (l=0; l<sizeof(hciEvts)/sizeof(HciEvtT); l++)		if (hciEvts[l].evt==ind)			index=l;	if (index==-1)		Dprintf("\n INTERNAL ERROR! index %d !exist in hciEvts[].\n",(int)ind);//	resC=hciEvts[index].resL+2;}HciEvt::~HciEvt() {}void HciEvt::evtComplete() {Dprintf("evtComplete!!!\n");}int HciEvt::writeReq(char* buf, int len) {	return HciReqRes::writeReq(buf,len);}/* HciBus ensure that only one event@time is delivered.*/int HciEvt::readRes(char* buf, int len) {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品亚洲日本在线桃色| 日韩免费视频一区| 91亚洲精品久久久蜜桃网站| 成人国产一区二区三区精品| 国产成人av资源| 国产xxx精品视频大全| 国产成人精品一区二区三区四区| 国产精品一区二区三区网站| 国产成人在线网站| 成人免费视频app| 99国产麻豆精品| 欧美亚洲综合在线| 欧美日免费三级在线| 91麻豆精品国产自产在线| 日韩欧美在线综合网| 精品精品欲导航| 欧美激情一区二区三区| 综合自拍亚洲综合图不卡区| 一区二区三区加勒比av| 亚洲成人动漫在线观看| 免费看欧美女人艹b| 国产一区二区在线免费观看| 国产成人免费在线视频| 99精品视频在线观看| 欧美中文字幕一区| 91精品国产91久久久久久最新毛片| 欧美r级在线观看| 中文字幕免费不卡| 亚洲国产乱码最新视频| 精品影视av免费| 成人一级黄色片| 欧美丝袜第三区| 欧美大片国产精品| 综合av第一页| 天天av天天翘天天综合网色鬼国产| 激情成人午夜视频| 99re热视频精品| 欧美美女bb生活片| 国产欧美精品一区二区三区四区 | 亚洲日本青草视频在线怡红院| 亚洲黄一区二区三区| 人人超碰91尤物精品国产| 国产91丝袜在线18| 欧美欧美欧美欧美| 国产亚洲精品超碰| 亚洲综合久久久| 国产在线精品国自产拍免费| 色综合欧美在线| 精品国产乱码久久| 亚洲黄色av一区| 久久99国内精品| 欧美优质美女网站| 久久久精品天堂| 天堂蜜桃一区二区三区 | 91成人免费网站| 2021中文字幕一区亚洲| 夜夜嗨av一区二区三区中文字幕| 久久精品国产精品亚洲综合| 色老综合老女人久久久| 久久亚洲精品国产精品紫薇 | 色中色一区二区| 精品国产3级a| 亚洲成av人片一区二区梦乃| 国产suv精品一区二区6| 666欧美在线视频| 亚洲精品视频在线| 丁香一区二区三区| 日韩欧美综合在线| 亚洲成人免费av| 91在线无精精品入口| 国产视频亚洲色图| 久久99国产精品免费| 欧美日韩精品免费| 亚洲乱码国产乱码精品精98午夜| 国产精品影视天天线| 欧美一区二区日韩| 亚洲国产精品久久久久秋霞影院| 99久久国产综合精品色伊| 久久久综合视频| 麻豆国产精品视频| 欧美一区二区三区色| 亚洲不卡一区二区三区| 一本一本大道香蕉久在线精品| 国产午夜精品在线观看| 麻豆精品一区二区av白丝在线| 欧美日韩一卡二卡三卡| 亚洲三级电影网站| 成人av动漫网站| 久久精品视频一区| 国产一区视频网站| 精品对白一区国产伦| 美女一区二区视频| 欧美一区二区三区在线看 | 国产婷婷色一区二区三区在线| 天堂资源在线中文精品| 91久久精品一区二区三区| 中文字幕日本乱码精品影院| 国产成人8x视频一区二区| ww亚洲ww在线观看国产| 紧缚捆绑精品一区二区| 精品乱人伦小说| 老司机免费视频一区二区| 91麻豆精品久久久久蜜臀| 午夜欧美2019年伦理| 欧美剧在线免费观看网站| 亚洲一区成人在线| 欧美日韩精品免费| 日韩黄色免费电影| 精品国产一区二区三区不卡| 精品一区二区在线看| 欧美精品一区男女天堂| 韩国欧美一区二区| 欧美精品一区二区三区在线播放 | 蜜臀av性久久久久蜜臀aⅴ | 欧美高清一级片在线观看| 国产精品自拍一区| 欧美国产精品专区| 99re热这里只有精品免费视频| 亚洲另类一区二区| 欧美三级韩国三级日本三斤| 秋霞午夜av一区二区三区| 日韩女优视频免费观看| 国产乱子伦一区二区三区国色天香| 欧美国产精品中文字幕| 色悠悠久久综合| 亚洲成人av中文| 日韩午夜av电影| 国产成人精品三级| 亚洲视频 欧洲视频| 欧美三日本三级三级在线播放| 爽好久久久欧美精品| 精品国产麻豆免费人成网站| 成人激情动漫在线观看| 亚洲午夜免费电影| 精品国产一二三区| 成人爱爱电影网址| 亚洲不卡在线观看| 久久一区二区三区国产精品| 99久久婷婷国产| 日韩精品欧美精品| 中文字幕不卡在线观看| 欧美影院一区二区| 国产尤物一区二区| 亚洲曰韩产成在线| 亚洲精品在线免费播放| 91性感美女视频| 免费成人美女在线观看| 国产日产欧美一区二区视频| 日本韩国欧美三级| 韩国av一区二区| 亚洲精品成人在线| www日韩大片| 日本久久一区二区| 国产一区二区三区| 亚洲一区二区三区中文字幕在线| 精品国产在天天线2019| 一本久道久久综合中文字幕 | 欧美电影在哪看比较好| 福利一区二区在线| 天天亚洲美女在线视频| 国产精品久久久久久福利一牛影视| 欧美日韩亚洲另类| 粉嫩av一区二区三区在线播放| 亚洲国产精品久久艾草纯爱| 欧美激情一区二区三区不卡| 欧美一级理论性理论a| jlzzjlzz国产精品久久| 精品在线视频一区| 五月综合激情婷婷六月色窝| 国产精品久久久久一区| 久久综合色播五月| 欧美日韩一区二区三区免费看| 懂色av噜噜一区二区三区av| 美女精品一区二区| 午夜欧美视频在线观看| |精品福利一区二区三区| 久久久久久电影| 欧美一级生活片| 欧美日韩国产高清一区二区| 成人免费av在线| 精品一区二区免费视频| 亚洲va欧美va人人爽午夜| 中文字幕人成不卡一区| 国产嫩草影院久久久久| 欧美成人精精品一区二区频| 欧美日韩亚洲国产综合| 欧美在线视频全部完| 99国产精品久| 成人午夜视频福利| 国产精品一区二区不卡| 激情五月播播久久久精品| 日本不卡的三区四区五区| 亚洲超碰精品一区二区| 亚洲一区在线看| 伊人性伊人情综合网| 最新热久久免费视频| 中文在线一区二区| 日本一二三四高清不卡| 国产色产综合产在线视频| 2014亚洲片线观看视频免费|