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

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

?? states.c

?? linxu內核中
?? C
?? 第 1 頁 / 共 2 頁
字號:
	else {		sdp_close(hs_sdp_session);		hspd_sockets[IDX_SDP_SOCK] = 0;	}}void headsetPagingTimedout(struct State *this){	appl_send_error_pkt(EHOSTUNREACH);	syslog(LOG_NOTICE, "Timeout connecting L2CAP socket to headset, aborting.");	this->_next_state = &HeadsetIdleState;}int headsetPagingGetTimeout(struct State *this){	return hs_pagingtimeout;}struct State HeadsetPagingState = {	.name = "Paging",	.pollEvents = {		[IDX_CTL_APPL_SRV_SOCK]   = POLLIN,		[IDX_SDP_SOCK] = POLLOUT,	 },	.readSdp       = headsetPagingReadSdp,	.timedout      = headsetPagingTimedout,	.getTimeout    = headsetPagingGetTimeout,	.readCtlAppl   = unconnectedReadCtlAppl,	.getNextState  = genericGetNextState,};/* Connecting State */static void headsetConnectingReadRfcomm(struct State *this, short revents){	/* Fectching result code */	int errcode;	unsigned int opt_size = sizeof(int);	/* default next state is back to home : idle */	this->_next_state = &HeadsetIdleState;	if(getsockopt(hspd_sockets[IDX_RFCOMM_SOCK], SOL_SOCKET, SO_ERROR, &errcode, &opt_size) == 0) {		if(errcode == 0) {			hs_connected = 1;			signalHeadsetConnected(&hs_bdaddr);			/* Go to HeadsetReady state */			this->_next_state = &HeadsetReadyState;		}		else {			appl_send_error_pkt(errcode);			syslog(LOG_NOTICE, "unable to connect to headset: %s", strerror(errcode));			/* go to default state : idle */		}	}}struct State HeadsetConnectingState = {	.name = "Connecting",	.pollEvents = {		[IDX_CTL_APPL_SRV_SOCK]   = POLLIN,		[IDX_RFCOMM_SOCK] = POLLOUT,	 },	.readRfcomm    = headsetConnectingReadRfcomm,	.readCtlAppl   = unconnectedReadCtlAppl,	.getNextState  = genericGetNextState,};/* Connected State */static void headsetConnectedEnter(struct State *this){	/* killing useless sockets */	if(hspd_sockets[IDX_PCM_APPL_SOCK] != 0) {		close(hspd_sockets[IDX_PCM_APPL_SOCK]);		hspd_sockets[IDX_PCM_APPL_SOCK] = 0;	}	if(hspd_sockets[IDX_SCO_SOCK] != 0) {		close(hspd_sockets[IDX_SCO_SOCK]);		hspd_sockets[IDX_SCO_SOCK] = 0;	}	/* This is not a transitional state */	this->_next_state = this;	}static void headsetConnectedHandleApplConnReq(struct State *this){	struct sockaddr_un client_addr;	unsigned int client_addr_len = sizeof(client_addr);	/* Per default stay in same state */	this->_next_state = this;		/* Connect Appli to us */	int _appl_sock = accept(hspd_sockets[IDX_PCM_APPL_SRV_SOCK], (struct sockaddr *)&client_addr, &client_addr_len);	if(_appl_sock != -1) {		fcntl(_appl_sock, F_SETFL, O_NONBLOCK);		if(recv_cfg(_appl_sock, 0, 0) >= 0) {			hspd_sockets[IDX_PCM_APPL_SOCK] = _appl_sock;			/* Go to HeadsetReady state */			this->_next_state = &HeadsetReadyState;		}		else {			/* else : stay where we are */			close(_appl_sock);		}	}	else {		syslog(LOG_ERR, "unable to accept local application connection, %s", strerror(errno));	}}struct State HeadsetConnectedState = {	.name = "Connected",	.pollEvents = {		[IDX_PCM_APPL_SRV_SOCK] = POLLIN,		[IDX_CTL_APPL_SRV_SOCK] = POLLIN,		[IDX_RFCOMM_SOCK] = POLLIN	 },	.enter             = headsetConnectedEnter,	.handleApplConnReq = headsetConnectedHandleApplConnReq,	.readRfcomm        = genericReadRfcomm,	.readCtlAppl       = unconnectedReadCtlAppl,	.getNextState      = genericGetNextState,};/* Ready State */static void headsetReadyEnter(struct State *this){	/* Check if application socket is still there */	struct pollfd pfd = {.fd = hspd_sockets[IDX_PCM_APPL_SOCK], .events = POLLOUT};	int ret = poll(&pfd, 1, 0);	if((ret == 1) && !(pfd.revents & (POLLHUP | POLLERR))) {		/* Application still there : go go go !!! */		/* Launch SCO connection */		int _sco_sock = scoConnectAsync(&hs_bdaddr);		if(_sco_sock >= 0) {			hspd_sockets[IDX_SCO_SOCK] = _sco_sock;			/* Go to HeadsetOpeningState state */			this->_next_state = &HeadsetOpeningState;		}		else {			appl_send_error_pkt(errno);			syslog(LOG_ERR, "unable to open bluetooth SCO socket");			close(_sco_sock);			this->_next_state = &HeadsetConnectedState;		}	}	else {		/* Application closed connection : keep headset connection */		this->_next_state = &HeadsetConnectedState;	}}struct State HeadsetReadyState = {	.name          = "Ready",	.pollEvents    = {}, /* Empty pollEvents : this state is purely transitionnal */	.enter         = headsetReadyEnter,	.readCtlAppl   = unconnectedReadCtlAppl,	.getNextState  = genericGetNextState,};/* Opening State */static void headsetOpeningReadSco(struct State *this, short revents){	/* Fetching result code */	int errcode;	unsigned int opt_size = sizeof(int);	/* default next state is back to Connected */	this->_next_state = &HeadsetConnectedState;	if(getsockopt(hspd_sockets[IDX_SCO_SOCK], SOL_SOCKET, SO_ERROR, &errcode, &opt_size) == 0) {		if(errcode == 0) {			struct sco_conninfo conn;			struct sco_options opts;			unsigned int size;			size = sizeof(conn);			if (getsockopt(hspd_sockets[IDX_SCO_SOCK], SOL_SCO, SCO_CONNINFO, &conn, &size) == 0) {				size = sizeof(opts);				if (getsockopt(hspd_sockets[IDX_SCO_SOCK], SOL_SCO, SCO_OPTIONS, &opts, &size) == 0) {					/* Make sure we will block per default - clear 0_NONBLOCK flag */					fcntl(hspd_sockets[IDX_SCO_SOCK], F_SETFL, 0);					syslog(LOG_INFO, "SCO channel opened handle=0x%04x mtu=%d", conn.hci_handle, opts.mtu);					this->_next_state = &HeadsetStreamingState;				}				else {					appl_send_error_pkt(errno);					syslog(LOG_ERR, "unable to query SCO channel info: %s", strerror(errno));					/* go to default state : idle */				}			}			else {				appl_send_error_pkt(errno);				syslog(LOG_ERR, "unable to query SCO channel info: %s", strerror(errno));				/* go to default state : idle */			}		}		else {			appl_send_error_pkt(errcode);			syslog(LOG_ERR, "unable to open SCO channel to headset: %s", strerror(errcode));			/* go to default state : idle */		}	}	else {		appl_send_error_pkt(errno);	}}struct State HeadsetOpeningState = {	.name = "Opening",	.pollEvents = {		[IDX_CTL_APPL_SRV_SOCK] = POLLIN,		[IDX_RFCOMM_SOCK] = POLLIN,		[IDX_SCO_SOCK]    = POLLOUT,	 },	.readSco       = headsetOpeningReadSco,	.readRfcomm    = genericReadRfcomm,	.readCtlAppl   = unconnectedReadCtlAppl,	.getNextState  = genericGetNextState,};/* Streaming State */static void headsetStreamingEnter(struct State *this){	/* Send sco socket to application using ancilliary data - see man 7 unix*/        char cmsg_b[CMSG_SPACE(sizeof(int))];  /* ancillary data buffer */	struct cmsghdr *cmsg;	ipc_packet_t pkt = {.type = PKT_TYPE_STREAMING_IND};	struct iovec iov =  {              .iov_base = &pkt,        /* Starting address */              .iov_len  = sizeof(pkt)   /* Number of bytes */        };	struct msghdr msgh = {		.msg_name       = 0,		.msg_namelen    = 0,		.msg_iov        = &iov,		.msg_iovlen     = 1,		.msg_control    = &cmsg_b,		.msg_controllen = CMSG_LEN(sizeof(int)),		.msg_flags      = 0	};	cmsg = CMSG_FIRSTHDR(&msgh);	cmsg->cmsg_level = SOL_SOCKET;	cmsg->cmsg_type  = SCM_RIGHTS;	cmsg->cmsg_len   = CMSG_LEN(sizeof(int));	/* Initialize the payload */        (*(int *)CMSG_DATA(cmsg)) = hspd_sockets[IDX_SCO_SOCK];	/* finally send it -we ignore PIPE signal & return code, as any errors will be caught later */	int ret = sendmsg(hspd_sockets[IDX_PCM_APPL_SOCK], &msgh, MSG_NOSIGNAL);	if(ret == -1) {		syslog(LOG_ERR, "Unable to send SCO socket to appl: %s", strerror(errno));	}	/* This is not a transitional state */	this->_next_state = this;	}static void headsetStreamingReadAppl(struct State *this, short revents){	if((revents & (POLLHUP | POLLERR)) == 0) {		/* Should not happen, treat as error */		this->_next_state = &HeadsetConnectedState;	}	else {		syslog(LOG_INFO, "Appli closed socket");		/* go to Closewaiting state */		this->_next_state = &HeadsetClosewaitingState;	}}struct State HeadsetStreamingState = {	.name = "Streaming",	.pollEvents = {		[IDX_CTL_APPL_SRV_SOCK] = POLLIN,		[IDX_PCM_APPL_SOCK]   = POLLIN,		[IDX_RFCOMM_SOCK] = POLLIN,		[IDX_SCO_SOCK]    = POLLERR, /* We are interested in nothing but errors */	 },	.enter         = headsetStreamingEnter,	.readRfcomm    = genericReadRfcomm,	.readPcmAppl      = headsetStreamingReadAppl,	.readSco       = genericReadSco,	.readCtlAppl   = connectedReadCtlAppl,	.getNextState  = genericGetNextState,};/* Closewaiting State */static void headsetClosewaitingEnter(struct State *this){	if(hspd_sockets[IDX_PCM_APPL_SOCK] != 0) {		close(hspd_sockets[IDX_PCM_APPL_SOCK]);		hspd_sockets[IDX_PCM_APPL_SOCK] = 0;	}	/* This is not a transitional state */	this->_next_state = this;	}static void headsetClosewaitingHandleApplConnReq(struct State *this){	struct sockaddr_un client_addr;	unsigned int client_addr_len = sizeof(client_addr);	/* Per default stay in same state */	this->_next_state = this;		/* Connect Appli to us */	int _appl_sock = accept(hspd_sockets[IDX_PCM_APPL_SRV_SOCK], (struct sockaddr *)&client_addr, &client_addr_len);	if(_appl_sock != -1) {		fcntl(_appl_sock, F_SETFL, O_NONBLOCK);		if((recv_cfg(_appl_sock, 0, 0) >= 0)) { 			hspd_sockets[IDX_PCM_APPL_SOCK] = _appl_sock;			this->_next_state = &HeadsetStreamingState;		}		else {			/* else : stay where we are */			close(_appl_sock);		}	}	else {		syslog(LOG_ERR, "unable to accept local application connection");	}}void headsetClosewaitingTimedout(struct State *this){	appl_send_error_pkt(EHOSTUNREACH);	syslog(LOG_NOTICE, "Nobody uses SCO channel anymore, closing it.");	this->_next_state = &HeadsetConnectedState;}int headsetClosewaitingGetTimeout(struct State *this){	return 4000;}struct State HeadsetClosewaitingState = {	.name = "Closewaiting",	.pollEvents = {		[IDX_PCM_APPL_SRV_SOCK] = POLLIN,		[IDX_CTL_APPL_SRV_SOCK] = POLLIN,		[IDX_RFCOMM_SOCK]   = POLLIN,		[IDX_SCO_SOCK]      = POLLERR,	 },	.enter             = headsetClosewaitingEnter,	.readRfcomm        = genericReadRfcomm,	.readSco           = genericReadSco,	.handleApplConnReq = headsetClosewaitingHandleApplConnReq,	.timedout          = headsetClosewaitingTimedout,	.getTimeout        = headsetClosewaitingGetTimeout,	.readCtlAppl       = connectedReadCtlAppl,	.getNextState      = genericGetNextState,};/* AT commands processing */struct commands_table {	const char * command;	int (*process_func)(const char *cmd);};static void respOK(){	const char resp_ok[] = "\r\nOK\r\n";	send(hspd_sockets[IDX_RFCOMM_SOCK], resp_ok, sizeof(resp_ok) - 1, MSG_NOSIGNAL);}static void respError(){	const char resp_error[] = "\r\nERROR\r\n";	send(hspd_sockets[IDX_RFCOMM_SOCK], resp_error, sizeof(resp_error) - 1, MSG_NOSIGNAL);}static int doVolChanged(const char * cmd){	return volctl_write_fromhs(cmd);}static int doBtnPushed(const char * cmd){	signalHeadsetButtonPushed(&hs_bdaddr);	return 0;}static void process_at_command(const char* buffer, unsigned int datalen){	int i;	int answered = 0;	const struct commands_table tbl[] = {		{"AT+CKPD=200", doBtnPushed },		{"AT+VGS=",     doVolChanged },		{"AT+VGM=",     doVolChanged },		{0,             0 },	};	#ifndef NDEBUG	fprintf(stderr, "Received from HS: %s\n", buffer);	#endif		for(i = 0; tbl[i].command != 0; i++) {		if(strncmp(buffer, tbl[i].command, strlen(tbl[i].command)) == 0) {			if(tbl[i].process_func(buffer) != 0) {				/* Error happened while processing */				respError();			}			else {				/* Everything's fine */				respOK();			}			answered = 1;			break;		}	}	if(!answered) {		/* command not found in list */		respError();	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91美女精品福利| av毛片久久久久**hd| 欧美日韩国产高清一区二区三区| 中文字幕综合网| 一本大道av伊人久久综合| 亚洲欧美日韩国产综合| 欧美在线看片a免费观看| 亚洲成人7777| 精品精品欲导航| 国产伦精品一区二区三区免费 | 激情图片小说一区| 久久久久久久久久久久电影| 国产成人亚洲综合色影视| 综合欧美亚洲日本| 欧美日韩高清一区二区| 国产在线不卡视频| 日韩一区有码在线| 宅男噜噜噜66一区二区66| 国产乱码精品1区2区3区| 国产精品久久一级| 欧美精品vⅰdeose4hd| 国产成人午夜视频| 亚洲18色成人| 久久精品人人做人人综合| 91香蕉视频污在线| 日韩国产欧美在线播放| 国产亚洲精品aa| 欧美乱妇20p| 国产成人免费在线观看| 亚洲国产毛片aaaaa无费看| 欧美mv日韩mv| 日本韩国欧美在线| 国产一区二区三区在线观看免费| 亚洲丝袜另类动漫二区| 欧美变态凌虐bdsm| 在线观看国产日韩| 国产精品中文字幕欧美| 亚洲一区二区三区精品在线| 精品粉嫩超白一线天av| 91成人网在线| 国产成人免费在线观看不卡| 五月天一区二区三区| ●精品国产综合乱码久久久久| 91精选在线观看| 色综合中文字幕国产| 免费观看在线综合| 亚洲激情在线激情| 欧美精彩视频一区二区三区| 欧美疯狂做受xxxx富婆| 91久久线看在观草草青青| 狠狠色丁香久久婷婷综| 五月天视频一区| 一区二区三区免费| 国产精品欧美经典| 亚洲精品在线电影| 91精品免费在线| 欧美在线综合视频| 97久久精品人人爽人人爽蜜臀| 国产在线麻豆精品观看| 日韩avvvv在线播放| 亚洲mv大片欧洲mv大片精品| 亚洲老妇xxxxxx| 国产精品看片你懂得| 久久综合九色综合欧美98| 日韩欧美一级片| 91精品免费在线| 欧美精品久久久久久久多人混战 | 高清不卡一二三区| 国产一区二区不卡| 精品在线观看免费| 蜜臂av日日欢夜夜爽一区| 午夜精品aaa| 亚洲成av人片在线| 午夜精品一区二区三区免费视频| 亚洲一二三区不卡| 亚洲高清一区二区三区| 亚洲成a人v欧美综合天堂 | 亚洲成av人综合在线观看| 一区二区三区欧美日| 一级女性全黄久久生活片免费| 亚洲精品伦理在线| 亚洲欧洲一区二区三区| 成人免费在线观看入口| 中文字幕在线观看一区| 亚洲女人的天堂| 亚洲国产成人av好男人在线观看| 亚洲成人福利片| 日日夜夜一区二区| 久久国产人妖系列| 国产精品一区专区| 成人h动漫精品一区二区| 91丨九色丨蝌蚪富婆spa| 一本到不卡免费一区二区| 欧美日韩精品一二三区| 欧美一区二区三区成人| 久久久不卡网国产精品一区| 日本一区二区免费在线| 《视频一区视频二区| 亚洲国产精品尤物yw在线观看| 日韩专区一卡二卡| 国产电影一区二区三区| 色综合色综合色综合色综合色综合| 在线观看网站黄不卡| 欧美一区二区人人喊爽| 国产亚洲人成网站| 亚洲免费伊人电影| 视频在线观看91| 国产福利一区二区三区在线视频| 99re成人在线| 欧美麻豆精品久久久久久| 久久久久久毛片| 一区二区三区中文字幕精品精品 | 日韩欧美在线一区二区三区| 久久日韩精品一区二区五区| 国产精品久久久久久久久久久免费看| 亚洲六月丁香色婷婷综合久久| 老司机一区二区| 91免费版pro下载短视频| 91精品一区二区三区在线观看| 中文一区二区完整视频在线观看| 一区二区三区久久久| 国产伦精品一区二区三区免费迷 | 91成人看片片| 日韩三级中文字幕| 国产精品九色蝌蚪自拍| 蜜臀久久久久久久| 99国产精品久久久久久久久久久| 欧美怡红院视频| 亚洲国产高清不卡| 日韩av一区二| 色哟哟一区二区在线观看| 精品国产123| 爽好久久久欧美精品| 不卡区在线中文字幕| 日韩精品专区在线影院重磅| 日韩美女久久久| 国产乱人伦偷精品视频不卡| 欧美亚洲免费在线一区| 国产精品全国免费观看高清| 国模冰冰炮一区二区| 91精品国产色综合久久ai换脸| 亚洲视频一二区| 国产成人自拍网| 日韩精品最新网址| 日本免费在线视频不卡一不卡二 | 午夜精品爽啪视频| caoporm超碰国产精品| 精品va天堂亚洲国产| 日韩精品五月天| 欧美优质美女网站| 亚洲免费观看视频| av午夜精品一区二区三区| 久久久欧美精品sm网站 | 国产成人综合在线播放| 欧美一区二区三区喷汁尤物| 亚洲午夜一区二区三区| 91高清视频在线| 成人免费在线播放视频| 国产91精品精华液一区二区三区 | 欧美肥妇free| 亚洲国产精品人人做人人爽| 91麻豆国产福利在线观看| 欧美国产精品一区二区| 国产精品中文字幕一区二区三区| 日韩欧美国产精品| 久久99久久久欧美国产| 欧美一级日韩不卡播放免费| 日韩av电影一区| 日韩无一区二区| 美日韩一区二区| 日韩一卡二卡三卡| 久久精品国内一区二区三区| 欧美一区二区三区四区久久 | 国产区在线观看成人精品| 国产一区二区在线观看视频| 日韩一区二区免费电影| 免费成人性网站| 精品久久久久久无| 国产成人av在线影院| 中日韩免费视频中文字幕| 风间由美中文字幕在线看视频国产欧美| 久久久激情视频| 99在线热播精品免费| 中文字幕中文乱码欧美一区二区| www.日韩av| 亚洲国产一二三| 日韩午夜在线观看视频| 久久99国产精品麻豆| 久久精品欧美一区二区三区麻豆| 国产91在线|亚洲| 成人欧美一区二区三区| 欧美丝袜丝交足nylons| 日韩不卡一二三区| 国产网站一区二区三区| 9i在线看片成人免费| 亚洲一区二区三区小说| 日韩欧美久久一区| 波多野结衣中文字幕一区| 亚洲国产成人porn| 国产亚洲精品超碰|