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

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

?? volctl.c

?? linxu內(nèi)核中
?? C
字號(hào):
/* * *  Headset Profile support for Linux * *  Copyright (C) 2006  Fabien Chevalier * *  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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA * */#include <stdlib.h>#include <stdio.h>#include <string.h>#include <syslog.h>#include <sys/socket.h>#include <sys/un.h>#include <sys/poll.h>#include <errno.h>#include <assert.h>#include "volctl.h"#include "sockets.h"/* Local defines */#define CTLS_COUNT 2#define MINVOL 0#define MAXVOL 15  /* We should not have to define this, however it looks like it is defined nowere,     and even hardcoded in sys/un.h */#define UNIX_PATH_MAX 108  /* Control (CTL) packet types */#define PKT_TYPE_CTL_CMD_GET       0#define PKT_TYPE_CTL_CMD_SET       1#define PKT_TYPE_CTL_GET_RSP       2#define PKT_TYPE_CTL_NTFY          3/* Local typedefs */typedef struct ctl_appl_list_node {	struct sockaddr_un address;	struct ctl_appl_list_node *next;} ctl_appl_list_node_t;/* Local variables */static int vols[CTLS_COUNT] = {7, 7};  /* Last recently used control applications */static ctl_appl_list_node_t *ctl_appl_list = 0;/* Local functions */static void volctl_register_appl(const struct sockaddr_un * appl_address);static void volctl_notify_change(const struct sockaddr_un * appl_address, volume_t voltype);void volctl_write_fromappl(volume_t type, int value){	char volstr[32];	assert(hspd_sockets[IDX_RFCOMM_SOCK] != 0);	if((value >= MINVOL) && (value <= MAXVOL)) {		vols[type] = value;		sprintf(volstr, "\r\n+VG%c=%d\r\n", (type == SPEAKER ? 'S' : 'M'), value);#ifndef NDEBUG		fprintf(stderr, "Sending to headset: %s", volstr);#endif		if(send(hspd_sockets[IDX_RFCOMM_SOCK], volstr, strlen(volstr), MSG_NOSIGNAL) < 0) {			syslog(LOG_ERR, "Unable to send volume change to headset : %s", strerror(errno));		}	}	/* else : do not print anything anywhere */}void volctl_write_fromappl_unconnected(volume_t type, int value){	if((value >= MINVOL) && (value <= MAXVOL)) {		vols[type] = value;	}	/* else : do not print anything anywhere */}int volctl_write_fromhs(const char * atcmd){	volume_t type;	/* AT+VGS */	if(atcmd[5] == 'S') {		type = SPEAKER;	}	/* AT+VGM */	else if(atcmd[5] == 'M') {		type = MICROPHONE;	}#ifndef NDEBUG	else {		abort();	}#endif	const char *startptr = atcmd + strlen("AT+VGx=");	char *endptr;	int value = strtol(startptr, &endptr, 10);	if((endptr[0] == '\0' || endptr[0] == '\r') && (value >= MINVOL) && (value <= MAXVOL)) { /* Ok */		vols[type] = value;		volctl_notify_change(0, type);		return 0;	}	else {		syslog(LOG_ERR, "Wrong command received from Headset: '%s'", atcmd);		return -1;	}}int  volctl_read_fromappl(volume_t type){	if(type >= 0 && type <= CTLS_COUNT) { 		return vols[type];	}	else {		return 0;	}}void volctl_ReadCtlApplSocket(struct State *s, short revents, void (*volwritefx)(volume_t, int)){	if((revents & (POLLHUP | POLLERR)) == 0) {		ctl_packet_t pkt;		struct sockaddr_un unixaddr;		socklen_t addrlen = sizeof(unixaddr);		if(recvfrom(hspd_sockets[IDX_CTL_APPL_SRV_SOCK], &pkt, sizeof(pkt), 0, 			(struct sockaddr *)&unixaddr, &addrlen) == sizeof(pkt)) {			switch(pkt.type) {			case PKT_TYPE_CTL_CMD_SET:				(*volwritefx)(pkt.voltype, pkt.volvalue);				volctl_notify_change(&unixaddr, pkt.voltype);				volctl_register_appl(&unixaddr);				break;			case PKT_TYPE_CTL_CMD_GET:				pkt.type     = PKT_TYPE_CTL_GET_RSP;				pkt.volvalue = volctl_read_fromappl(pkt.voltype);				if(sendto(hspd_sockets[IDX_CTL_APPL_SRV_SOCK], &pkt, sizeof(pkt), 					MSG_NOSIGNAL, (struct sockaddr *)&unixaddr, addrlen) > 0) {					volctl_register_appl(&unixaddr);				}				else {					syslog(LOG_ERR, "Unable to send volume to ctl appl : %s", strerror(errno));				}				break;			default:				syslog(LOG_ERR, "Unexpected ctl packet type %d received", pkt.type);			}		}	}}static void volctl_register_appl(const struct sockaddr_un * appl_address){ 	ctl_appl_list_node_t * curitem;	int already_in_list = 0;	for(curitem = ctl_appl_list; curitem != 0; curitem = curitem->next) {		if(strncmp(appl_address->sun_path + 1, curitem->address.sun_path + 1, UNIX_PATH_MAX - 1) == 0) {			already_in_list = 1;			break;		}	}	if(!already_in_list) {		ctl_appl_list_node_t * newitem = malloc(sizeof(ctl_appl_list_node_t));		memcpy(&newitem->address, appl_address, sizeof(struct sockaddr_un));		/* Insert us in list */		newitem->next = ctl_appl_list;		ctl_appl_list = newitem;	}}static void volctl_notify_change(const struct sockaddr_un * appl_address, volume_t voltype){ 	ctl_appl_list_node_t * curitem = ctl_appl_list;	ctl_packet_t pkt;		while(curitem != 0) {		int incremented = 0;		if(!appl_address || 			strncmp(appl_address->sun_path + 1, curitem->address.sun_path + 1, UNIX_PATH_MAX - 1) != 0) {			/* Not us, trying to ring the bell !! */			pkt.type = PKT_TYPE_CTL_NTFY;			pkt.voltype = voltype;			pkt.volvalue = 0;			int r = sendto(hspd_sockets[IDX_CTL_APPL_SRV_SOCK], &pkt, sizeof(pkt), MSG_NOSIGNAL, (struct sockaddr *)&curitem->address, sizeof(struct sockaddr_un));			if(r < 0) {				if(errno == ECONNREFUSED) {					/* Application closed, remove item from the list */					ctl_appl_list_node_t *item, *previtem;					for(item = ctl_appl_list, previtem = 0;					item != 0; previtem = item, item = item->next) {						if(item == curitem) {							/* remove curitem */							if(previtem) {								previtem->next = item->next;							}							else {								ctl_appl_list = item->next;							}							/* we need to increment before free */							incremented = 1;							curitem = curitem->next;							free(item);							break;						}					}				}				else {					syslog(LOG_ERR, "Unable to sendto : %s", strerror(errno));				}			}		}		if(!incremented) {			curitem = curitem->next;		}	}}void volctl_release(){ 	ctl_appl_list_node_t * curitem = ctl_appl_list;		while(curitem != 0) {		free(curitem);		curitem = curitem->next;	}	ctl_appl_list = 0;}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线视视频有精品| 成人亚洲精品久久久久软件| 久久精品亚洲麻豆av一区二区| 成+人+亚洲+综合天堂| 日本美女一区二区三区| 中文字幕一区二区三区不卡| 91精品综合久久久久久| 99久久精品免费看国产免费软件| 美女网站一区二区| 有码一区二区三区| 国产精品无码永久免费888| 日韩免费一区二区三区在线播放| 色综合天天综合网国产成人综合天| 国产在线精品国自产拍免费| 亚洲成人动漫在线免费观看| 中文乱码免费一区二区| 日韩午夜电影av| 欧美三级视频在线| gogogo免费视频观看亚洲一| 狠狠狠色丁香婷婷综合久久五月| 香蕉乱码成人久久天堂爱免费| 国产精品久久久久久久久动漫| 精品成人免费观看| 日韩一区二区三免费高清| 欧美日韩一区二区三区免费看| eeuss鲁一区二区三区| 福利一区二区在线| 国产在线精品一区在线观看麻豆| 日本亚洲天堂网| 日韩av午夜在线观看| 亚洲图片有声小说| 亚洲黄一区二区三区| 亚洲美腿欧美偷拍| 国产精品伦理一区二区| 国产性色一区二区| 国产婷婷色一区二区三区四区| 久久免费美女视频| 精品国产一区久久| 精品国产一区二区精华| 欧美成人a在线| 日韩欧美专区在线| 精品卡一卡二卡三卡四在线| 欧美成人性战久久| 久久综合999| 国产三级一区二区| 日韩成人一级片| 首页国产丝袜综合| 日本欧美肥老太交大片| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲第一狼人社区| 天堂久久久久va久久久久| 午夜精品福利一区二区三区av | 国产电影精品久久禁18| 国产一区二区三区av电影| 精品一区二区在线看| 国产自产视频一区二区三区| 国产成人一区二区精品非洲| 成人激情免费电影网址| 91在线视频播放地址| 色一情一乱一乱一91av| 欧美视频在线一区二区三区| 69久久99精品久久久久婷婷| 制服丝袜日韩国产| 久久久久久久久久久久久女国产乱| 久久精品一区二区三区不卡 | 懂色av一区二区三区免费看| 国产成人精品一区二区三区网站观看| 成人免费视频国产在线观看| 色综合激情五月| 欧美一区二区视频在线观看2020 | 国产精品―色哟哟| 亚洲理论在线观看| 免费美女久久99| 国产suv精品一区二区三区| 91麻豆视频网站| 欧美另类一区二区三区| 欧美精品一区视频| 自拍偷拍欧美精品| 亚洲国产精品欧美一二99| 美女尤物国产一区| 94色蜜桃网一区二区三区| 欧美精品一二三区| 久久久99久久| 亚洲国产欧美在线| 国产夫妻精品视频| 欧美精品乱码久久久久久按摩| 26uuu久久综合| 亚洲影院免费观看| 国产 欧美在线| 91精品免费在线观看| 国产精品色哟哟网站| 日韩成人一级大片| av电影天堂一区二区在线观看| 91精品啪在线观看国产60岁| 国产精品国产三级国产普通话蜜臀 | 欧美精品久久99| 中文无字幕一区二区三区| 亚洲va在线va天堂| www.av精品| 欧美sm美女调教| 亚洲国产wwwccc36天堂| 岛国av在线一区| 欧美α欧美αv大片| 一区二区三区欧美久久| 国产精品99久久久久| 欧美精品乱码久久久久久按摩 | 亚洲国产精品传媒在线观看| 三级在线观看一区二区| 91亚洲国产成人精品一区二区三| 精品久久久久久久久久久久久久久久久 | 一区二区三区四区不卡在线| 久久99精品国产.久久久久久| 色欧美日韩亚洲| 欧美韩日一区二区三区| 国产在线观看免费一区| 欧美狂野另类xxxxoooo| 一区二区三区在线观看国产| 成人免费高清在线| 欧美精品一区二区三区蜜桃视频| 亚洲va中文字幕| 欧美天天综合网| 亚洲欧美激情插| 成人avav影音| 国产日本欧洲亚洲| 国产一区二区三区最好精华液| 欧美精选午夜久久久乱码6080| 亚洲欧美乱综合| 色综合色综合色综合色综合色综合| 欧美极品美女视频| 国产精品一区久久久久| 精品久久久久久最新网址| 免费日本视频一区| 欧美一区二区性放荡片| 青椒成人免费视频| 日韩一级片在线播放| 日本亚洲天堂网| 欧美大片拔萝卜| 激情综合色播五月| 精品国产一二三| 国产高清不卡一区| 中文字幕欧美日本乱码一线二线| 国产91精品露脸国语对白| 国产日韩精品一区二区三区| 国产精品一区二区三区乱码| 国产视频一区不卡| www.综合网.com| 一区二区三区资源| 欧美亚洲愉拍一区二区| 亚洲一区二区高清| 欧美精品在线一区二区三区| 日韩精品乱码av一区二区| 日韩欧美一二三四区| 久久不见久久见免费视频7| 精品成人私密视频| 成人黄页在线观看| 亚洲精选一二三| 欧美日韩亚洲国产综合| 日本视频中文字幕一区二区三区| 日韩午夜电影av| 国产高清久久久| 亚洲久本草在线中文字幕| 欧美日韩不卡在线| 韩国一区二区在线观看| 国产精品日产欧美久久久久| 91色在线porny| 亚洲1区2区3区4区| 欧美精品一区二区三区一线天视频 | 国产精品久久久久久久裸模| 一本一道久久a久久精品| 午夜国产精品一区| 久久久久久久网| 91亚洲大成网污www| 日韩va亚洲va欧美va久久| 久久精品欧美一区二区三区不卡| 91麻豆国产香蕉久久精品| 日韩精品欧美精品| 亚洲国产精品传媒在线观看| 欧美午夜片在线观看| 久久国产日韩欧美精品| 综合激情成人伊人| 日韩欧美久久久| 91女厕偷拍女厕偷拍高清| 日韩激情一区二区| 国产精品久久777777| 日韩欧美一级特黄在线播放| 91免费在线视频观看| 激情小说亚洲一区| 91精品国产乱码久久蜜臀| 91黄视频在线| 久久嫩草精品久久久精品| 国产无人区一区二区三区| 久久久精品国产免大香伊| 国产精品欧美经典| 亚洲va欧美va人人爽午夜| 国产一区二区三区在线看麻豆| 成人高清免费观看| 日韩限制级电影在线观看| 国产日韩在线不卡| 婷婷成人激情在线网| 国产成人亚洲精品青草天美|