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

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

?? seq_oss_midi.c

?? 優龍2410linux2.6.8內核源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
		return 0;	}	perm &= ~mdev->opened;	memset(&subs, 0, sizeof(subs));	if (perm & PERM_WRITE) {		subs.sender = dp->addr;		subs.dest.client = mdev->client;		subs.dest.port = mdev->port;		if (snd_seq_kernel_client_ctl(dp->cseq, SNDRV_SEQ_IOCTL_SUBSCRIBE_PORT, &subs) >= 0)			mdev->opened |= PERM_WRITE;	}	if (perm & PERM_READ) {		subs.sender.client = mdev->client;		subs.sender.port = mdev->port;		subs.dest = dp->addr;		subs.flags = SNDRV_SEQ_PORT_SUBS_TIMESTAMP;		subs.queue = dp->queue;		/* queue for timestamps */		if (snd_seq_kernel_client_ctl(dp->cseq, SNDRV_SEQ_IOCTL_SUBSCRIBE_PORT, &subs) >= 0)			mdev->opened |= PERM_READ;	}	if (! mdev->opened) {		snd_use_lock_free(&mdev->use_lock);		return -ENXIO;	}	mdev->devinfo = dp;	snd_use_lock_free(&mdev->use_lock);	return 0;}/* * close the midi device if already opened */intsnd_seq_oss_midi_close(seq_oss_devinfo_t *dp, int dev){	seq_oss_midi_t *mdev;	snd_seq_port_subscribe_t subs;	if ((mdev = get_mididev(dp, dev)) == NULL)		return -ENODEV;	if (! mdev->opened || mdev->devinfo != dp) {		snd_use_lock_free(&mdev->use_lock);		return 0;	}	debug_printk(("closing client %d port %d mode %d\n", mdev->client, mdev->port, mdev->opened));	memset(&subs, 0, sizeof(subs));	if (mdev->opened & PERM_WRITE) {		subs.sender = dp->addr;		subs.dest.client = mdev->client;		subs.dest.port = mdev->port;		snd_seq_kernel_client_ctl(dp->cseq, SNDRV_SEQ_IOCTL_UNSUBSCRIBE_PORT, &subs);	}	if (mdev->opened & PERM_READ) {		subs.sender.client = mdev->client;		subs.sender.port = mdev->port;		subs.dest = dp->addr;		snd_seq_kernel_client_ctl(dp->cseq, SNDRV_SEQ_IOCTL_UNSUBSCRIBE_PORT, &subs);	}	mdev->opened = 0;	mdev->devinfo = NULL;	snd_use_lock_free(&mdev->use_lock);	return 0;}/* * change seq capability flags to file mode flags */intsnd_seq_oss_midi_filemode(seq_oss_devinfo_t *dp, int dev){	seq_oss_midi_t *mdev;	int mode;	if ((mdev = get_mididev(dp, dev)) == NULL)		return 0;	mode = 0;	if (mdev->opened & PERM_WRITE)		mode |= SNDRV_SEQ_OSS_FILE_WRITE;	if (mdev->opened & PERM_READ)		mode |= SNDRV_SEQ_OSS_FILE_READ;	snd_use_lock_free(&mdev->use_lock);	return mode;}/* * reset the midi device and close it: * so far, only close the device. */voidsnd_seq_oss_midi_reset(seq_oss_devinfo_t *dp, int dev){	seq_oss_midi_t *mdev;	if ((mdev = get_mididev(dp, dev)) == NULL)		return;	if (! mdev->opened) {		snd_use_lock_free(&mdev->use_lock);		return;	}	if (mdev->opened & PERM_WRITE) {		snd_seq_event_t ev;		int c;		debug_printk(("resetting client %d port %d\n", mdev->client, mdev->port));		memset(&ev, 0, sizeof(ev));		ev.dest.client = mdev->client;		ev.dest.port = mdev->port;		ev.queue = dp->queue;		ev.source.port = dp->port;		if (dp->seq_mode == SNDRV_SEQ_OSS_MODE_SYNTH) {			ev.type = SNDRV_SEQ_EVENT_SENSING;			snd_seq_oss_dispatch(dp, &ev, 0, 0); /* active sensing */		}		for (c = 0; c < 16; c++) {			ev.type = SNDRV_SEQ_EVENT_CONTROLLER;			ev.data.control.channel = c;			ev.data.control.param = 123;			snd_seq_oss_dispatch(dp, &ev, 0, 0); /* all notes off */			if (dp->seq_mode == SNDRV_SEQ_OSS_MODE_MUSIC) {				ev.data.control.param = 121;				snd_seq_oss_dispatch(dp, &ev, 0, 0); /* reset all controllers */				ev.type = SNDRV_SEQ_EVENT_PITCHBEND;				ev.data.control.value = 0;				snd_seq_oss_dispatch(dp, &ev, 0, 0); /* bender off */			}		}	}	// snd_seq_oss_midi_close(dp, dev);	snd_use_lock_free(&mdev->use_lock);}/* * get client/port of the specified MIDI device */voidsnd_seq_oss_midi_get_addr(seq_oss_devinfo_t *dp, int dev, snd_seq_addr_t *addr){	seq_oss_midi_t *mdev;	if ((mdev = get_mididev(dp, dev)) == NULL)		return;	addr->client = mdev->client;	addr->port = mdev->port;	snd_use_lock_free(&mdev->use_lock);}/* * input callback - this can be atomic */intsnd_seq_oss_midi_input(snd_seq_event_t *ev, int direct, void *private_data){	seq_oss_devinfo_t *dp = (seq_oss_devinfo_t *)private_data;	seq_oss_midi_t *mdev;	int rc;	if (dp->readq == NULL)		return 0;	if ((mdev = find_slot(ev->source.client, ev->source.port)) == NULL)		return 0;	if (! (mdev->opened & PERM_READ)) {		snd_use_lock_free(&mdev->use_lock);		return 0;	}	if (dp->seq_mode == SNDRV_SEQ_OSS_MODE_MUSIC)		rc = send_synth_event(dp, ev, mdev->seq_device);	else		rc = send_midi_event(dp, ev, mdev);	snd_use_lock_free(&mdev->use_lock);	return rc;}/* * convert ALSA sequencer event to OSS synth event */static intsend_synth_event(seq_oss_devinfo_t *dp, snd_seq_event_t *ev, int dev){	evrec_t ossev;	memset(&ossev, 0, sizeof(ossev));	switch (ev->type) {	case SNDRV_SEQ_EVENT_NOTEON:		ossev.v.cmd = MIDI_NOTEON; break;	case SNDRV_SEQ_EVENT_NOTEOFF:		ossev.v.cmd = MIDI_NOTEOFF; break;	case SNDRV_SEQ_EVENT_KEYPRESS:		ossev.v.cmd = MIDI_KEY_PRESSURE; break;	case SNDRV_SEQ_EVENT_CONTROLLER:		ossev.l.cmd = MIDI_CTL_CHANGE; break;	case SNDRV_SEQ_EVENT_PGMCHANGE:		ossev.l.cmd = MIDI_PGM_CHANGE; break;	case SNDRV_SEQ_EVENT_CHANPRESS:		ossev.l.cmd = MIDI_CHN_PRESSURE; break;	case SNDRV_SEQ_EVENT_PITCHBEND:		ossev.l.cmd = MIDI_PITCH_BEND; break;	default:		return 0; /* not supported */	}	ossev.v.dev = dev;	switch (ev->type) {	case SNDRV_SEQ_EVENT_NOTEON:	case SNDRV_SEQ_EVENT_NOTEOFF:	case SNDRV_SEQ_EVENT_KEYPRESS:		ossev.v.code = EV_CHN_VOICE;		ossev.v.note = ev->data.note.note;		ossev.v.parm = ev->data.note.velocity;		ossev.v.chn = ev->data.note.channel;		break;	case SNDRV_SEQ_EVENT_CONTROLLER:	case SNDRV_SEQ_EVENT_PGMCHANGE:	case SNDRV_SEQ_EVENT_CHANPRESS:		ossev.l.code = EV_CHN_COMMON;		ossev.l.p1 = ev->data.control.param;		ossev.l.val = ev->data.control.value;		ossev.l.chn = ev->data.control.channel;		break;	case SNDRV_SEQ_EVENT_PITCHBEND:		ossev.l.code = EV_CHN_COMMON;		ossev.l.val = ev->data.control.value + 8192;		ossev.l.chn = ev->data.control.channel;		break;	}		snd_seq_oss_readq_put_timestamp(dp->readq, ev->time.tick, dp->seq_mode);	snd_seq_oss_readq_put_event(dp->readq, &ossev);	return 0;}/* * decode event and send MIDI bytes to read queue */static intsend_midi_event(seq_oss_devinfo_t *dp, snd_seq_event_t *ev, seq_oss_midi_t *mdev){	char msg[32];	int len;		snd_seq_oss_readq_put_timestamp(dp->readq, ev->time.tick, dp->seq_mode);	if (!dp->timer->running)		len = snd_seq_oss_timer_start(dp->timer);	if (ev->type == SNDRV_SEQ_EVENT_SYSEX) {		if ((ev->flags & SNDRV_SEQ_EVENT_LENGTH_MASK) == SNDRV_SEQ_EVENT_LENGTH_VARIABLE)			snd_seq_oss_readq_puts(dp->readq, mdev->seq_device,					       ev->data.ext.ptr, ev->data.ext.len);	} else {		len = snd_midi_event_decode(mdev->coder, msg, sizeof(msg), ev);		if (len > 0)			snd_seq_oss_readq_puts(dp->readq, mdev->seq_device, msg, len);	}	return 0;}/* * dump midi data * return 0 : enqueued *        non-zero : invalid - ignored */intsnd_seq_oss_midi_putc(seq_oss_devinfo_t *dp, int dev, unsigned char c, snd_seq_event_t *ev){	seq_oss_midi_t *mdev;	if ((mdev = get_mididev(dp, dev)) == NULL)		return -ENODEV;	if (snd_midi_event_encode_byte(mdev->coder, c, ev) > 0) {		snd_seq_oss_fill_addr(dp, ev, mdev->client, mdev->port);		snd_use_lock_free(&mdev->use_lock);		return 0;	}	snd_use_lock_free(&mdev->use_lock);	return -EINVAL;}/* * create OSS compatible midi_info record */intsnd_seq_oss_midi_make_info(seq_oss_devinfo_t *dp, int dev, struct midi_info *inf){	seq_oss_midi_t *mdev;	if ((mdev = get_mididev(dp, dev)) == NULL)		return -ENXIO;	inf->device = dev;	inf->dev_type = 0; /* FIXME: ?? */	inf->capabilities = 0; /* FIXME: ?? */	strlcpy(inf->name, mdev->name, sizeof(inf->name));	snd_use_lock_free(&mdev->use_lock);	return 0;}/* * proc interface */static char *capmode_str(int val){	val &= PERM_READ|PERM_WRITE;	if (val == (PERM_READ|PERM_WRITE))		return "read/write";	else if (val == PERM_READ)		return "read";	else if (val == PERM_WRITE)		return "write";	else		return "none";}voidsnd_seq_oss_midi_info_read(snd_info_buffer_t *buf){	int i;	seq_oss_midi_t *mdev;	snd_iprintf(buf, "\nNumber of MIDI devices: %d\n", max_midi_devs);	for (i = 0; i < max_midi_devs; i++) {		snd_iprintf(buf, "\nmidi %d: ", i);		mdev = get_mdev(i);		if (mdev == NULL) {			snd_iprintf(buf, "*empty*\n");			continue;		}		snd_iprintf(buf, "[%s] ALSA port %d:%d\n", mdev->name,			    mdev->client, mdev->port);		snd_iprintf(buf, "  capability %s / opened %s\n",			    capmode_str(mdev->flags),			    capmode_str(mdev->opened));		snd_use_lock_free(&mdev->use_lock);	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色菇凉天天综合网| 麻豆国产精品777777在线| 久久嫩草精品久久久精品一| 日韩欧美不卡一区| 久久久久久久久久久99999| 精品国产99国产精品| 亚洲福利视频一区| 亚洲天堂精品视频| 亚洲影院久久精品| 欧美中文字幕久久| 成人av综合一区| 成人精品一区二区三区中文字幕| 久久综合网色—综合色88| 国产三级三级三级精品8ⅰ区| 国产超碰在线一区| 99久久久国产精品免费蜜臀| www.欧美色图| 亚洲免费av在线| 五月激情六月综合| 91精品久久久久久久久99蜜臂| 日韩一二三区不卡| 色呦呦国产精品| 欧美一级电影网站| 亚洲视频网在线直播| 午夜日韩在线观看| 成人中文字幕电影| 欧美精品黑人性xxxx| 欧美成va人片在线观看| 波波电影院一区二区三区| 一道本成人在线| 精品99999| 亚洲主播在线播放| 国产剧情一区二区三区| 欧美综合亚洲图片综合区| 欧美成人a在线| 夜夜嗨av一区二区三区网页| 久久成人久久鬼色| 一区二区三区高清| 激情综合网天天干| 欧美精品丝袜中出| 国产亚洲一区二区三区四区| 亚洲老司机在线| 国产一区999| 欧美精品三级在线观看| 亚洲美女屁股眼交3| 国产.欧美.日韩| 欧美二区在线观看| 亚洲猫色日本管| 国产精品88888| 日韩欧美成人一区| 亚洲国产成人va在线观看天堂| 国产一区二区h| 日韩欧美国产wwwww| 日韩黄色片在线观看| 91蜜桃网址入口| 欧美国产精品v| 日本三级亚洲精品| 一二三区精品视频| 91天堂素人约啪| 国产精品家庭影院| 国产一区二区三区黄视频| 91超碰这里只有精品国产| 一区二区三区在线观看动漫| 国产精品1区2区| 欧美性一二三区| 亚洲一二三四在线| 欧美三级电影网| 丝袜诱惑制服诱惑色一区在线观看| 美女www一区二区| 色婷婷狠狠综合| 一区二区三区免费网站| 91麻豆高清视频| 亚洲一区国产视频| 色妞www精品视频| 一区二区三区国产| 欧美精品高清视频| 亚洲在线观看免费视频| 成人小视频在线| 一区二区三区欧美在线观看| av电影在线观看一区| 亚洲天堂精品视频| 欧美日韩亚洲不卡| 日韩中文字幕av电影| 欧美tk丨vk视频| 国产99精品视频| 亚洲图片激情小说| 在线不卡的av| 国产在线不卡一区| 日本一区二区三区高清不卡 | 蜜臀久久久久久久| 欧美xxx久久| 国产成人啪午夜精品网站男同| 日韩精品自拍偷拍| 麻豆精品在线视频| 国产精品夫妻自拍| 色妹子一区二区| 免费在线观看不卡| 国产精品久久久久久一区二区三区| a级精品国产片在线观看| 一区二区久久久| 欧美成人女星排名| 不卡区在线中文字幕| 亚洲综合色在线| 欧美二区三区的天堂| 偷拍与自拍一区| 久久精子c满五个校花| 色一情一伦一子一伦一区| 日韩二区三区四区| 国产精品美女视频| 欧美无砖专区一中文字| 国产经典欧美精品| 亚洲精品菠萝久久久久久久| 久久一区二区三区四区| 成人国产电影网| 亚洲图片欧美视频| 久久久久久久久久久久电影| 欧美日韩国产另类不卡| www.在线欧美| 老司机免费视频一区二区三区| 亚洲蜜桃精久久久久久久| 久久美女艺术照精彩视频福利播放| 不卡一区二区三区四区| 国内一区二区视频| 午夜不卡在线视频| 日韩美女视频一区二区 | 91精品欧美久久久久久动漫| 国产大陆亚洲精品国产| 日韩av一级片| 国产精品人成在线观看免费| 欧美偷拍一区二区| av网站免费线看精品| 国产一区二区三区视频在线播放| 亚洲一区在线电影| 亚洲视频免费看| 国产无一区二区| 日韩精品中文字幕一区二区三区| 欧洲一区在线观看| 波多野结衣欧美| 成人久久18免费网站麻豆| 天堂久久一区二区三区| 国产欧美一二三区| 亚洲精品一区二区三区在线观看| 777xxx欧美| 91精品婷婷国产综合久久性色 | 精品影院一区二区久久久| 亚洲成人免费观看| 综合中文字幕亚洲| 亚洲欧美自拍偷拍色图| 国产精品少妇自拍| 久久精品日韩一区二区三区| 久久精品网站免费观看| 久久美女艺术照精彩视频福利播放| 日韩一区二区三区免费观看| 欧美一区二区三区小说| 欧美午夜精品一区二区三区| 国产成人午夜片在线观看高清观看| 国产精品99久久久久久似苏梦涵 | 奇米色777欧美一区二区| 爽好多水快深点欧美视频| 日本女优在线视频一区二区| 日韩专区欧美专区| 美女国产一区二区三区| 精品无人码麻豆乱码1区2区| 国产伦精品一区二区三区免费迷| 精品午夜久久福利影院| 成人av影视在线观看| 99精品1区2区| 色婷婷av一区二区三区软件| 欧美视频一区二区三区| 91精品国产综合久久国产大片| 日韩网站在线看片你懂的| 亚洲精品一区二区三区蜜桃下载| 久久久国产精品午夜一区ai换脸| 国产在线精品一区二区夜色| 国产成人免费9x9x人网站视频| 欧洲精品中文字幕| 久久精品男人的天堂| 日韩一区精品字幕| 成人污视频在线观看| 欧美一区二区三区视频免费| 亚洲欧洲另类国产综合| 奇米影视一区二区三区小说| 99精品1区2区| 国产亚洲综合av| 麻豆传媒一区二区三区| 91麻豆国产福利在线观看| 2017欧美狠狠色| 日本不卡免费在线视频| 91麻豆国产在线观看| 国产亚洲一区二区三区| 日韩精品免费专区| 91国产成人在线| 国产精品人成在线观看免费| 精品一区二区三区欧美| 欧美日韩三级在线| 亚洲三级理论片| 岛国精品在线观看| 精品久久久网站| 美女视频第一区二区三区免费观看网站 | 亚洲精品老司机|