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

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

?? sb.c

?? 用c語言實現(xiàn)gprs遠端通信中的陶tcp/ip 協(xié)議
?? C
?? 第 1 頁 / 共 2 頁
字號:
#define	TXBUF	1400
#define	RXBUF	8192
#define	SAMPRATE 8000U

#include "global.h"
#include <stdio.h>
#include <dos.h>
#include "mbuf.h"
#include "dma.h"
#include "sb.h"
#include "npc.h"
#include "socket.h"
#include "cmdparse.h"
#include "netuser.h"

static int sb_read_data(int base);
static int sb_reset(int base);
static int sb_setup(int base,int irq,int dma8,int dma16);
static int sb_write_byte(int base,int data);
static int sb_write_word_le(int base,int data);
static int sb_write_word_be(int base,int data);
static int sb_read_data(int base);
static int sb_read_mix(int base,int reg);
static int sb_write_mix(int base,int reg,int data);
static void dumpgains(int);
static void dumpgain(int,struct gain *);
static int sb_adc(long,int,int);
static int sb_dac(long,int,int);
static int sb_idle(void);
int sb_calibrate(long);
static void sb_outstart(struct mbuf **bpp);
int sb_send(struct mbuf *bp);
unsigned short pull16le(struct mbuf **bpp);

INTERRUPT sb0vec(int dev);
static INTERRUPT (*Sbhandle[])() = { sb0vec };
INTERRUPT (*Savevec)(void);

struct sbdriver {
	int irq,dma8,dma16;

	enum { IDLE, DAC, ADC } state;
	struct mbuf *sndq;
	struct mbuf *rcvq;

	uint8 *dmabuf;	/* Base of DMA buffer */
	int32 physaddr;	/* Physical address of DMA buffer */
	int dmasize;	/* Size of DMA buffer */

	uint8 *ioptr;	/* Write pointer into DMA buffer */
	int bufcnt;	/* Count of bytes in DMA buffer */
	int base;	/* Base register address */
	int pause;	/* Paused due to data underflow */
	long samprate;
	int stereo;
	long stuffsamples;
} Sb;


int S = -1;

int dosbatt(),dosbdet(),dogain(),dossend(),dosamprate(),dostereo();
int dosbcal(),dosbidle(),dostcplisten(),dostatus();

struct gain {
	char *name;
	int regl;
	int regr;
	double scale;
	double offset;
};
struct gain Gaintab[] = {
	"master",	SB_MV,		SB_MV+1,	4, -62,
	"dac",		SB_DAC,		SB_DAC+1,	4, -62,
	"midi",		SB_MIDI, 	SB_MIDI+1,	4, -62,
	"cd",		SB_CD,		SB_CD+1,	4, -62,
	"line",		SB_LINE,	SB_LINE+1,	4, -62,
	"mic",		SB_MIKE,	SB_MIKE,	4, -62,
	"pcspkr",	SB_PCSPKR,	SB_PCSPKR,	64/6., -18,
	"adc",		SB_ADC,		SB_ADC+1,	64/6., 0,
	"output",	SB_OUTG,	SB_OUTG+1,	64/6., 0,
	"treble",	SB_TREB,	SB_TREB+1,	8, -16,
	"bass",		SB_BASS,	SB_BASS+1,	8, -16,
	NULL,
};
static struct cmds Scmds[] = {
	"attach",	dosbatt,	0, 6,
		"sound attach sb16 <base_addr> <irq> <8bitdma> <16bitdma>",
	"calibrate",	dosbcal,	0, 1,
		"sound calibrate <samprate>",
	"detach",	dosbdet,	0, 1,
		"sound detach",
	"gain",		dogain,		0, 1,
		"sound gain [<parameter> [<setting>]]",
	"idle",		dosbidle,	0, 0,
		"sound idle",
	"listen",	dostcplisten,	0, 0, NULL,
	"samprate",	dosamprate,	0, 0, NULL,
	"send",		dossend,	4096, 2, "sound send <host> [<port>]",
	"status",	dostatus,	0, 0, NULL,
	"stereo",	dostereo,	0, 0, NULL,
	NULL,
};

dosound(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	return subcmd(Scmds,argc,argv,p);
}

dostatus(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	int i;

	printf("Samp rate: %lu Hz",Sb.samprate);
	if(Sb.stereo)
		printf(" Stereo;");
	else
		printf(" Mono;");
	switch(Sb.state){
	case IDLE:
		printf(" Idle\n");
		break;
	case ADC:
		disable();
		i = len_q(Sb.rcvq);
		enable();
		printf(" A/D: %u buffers\n",i);
		break;
	case DAC:
		disable();
		i = len_p(Sb.sndq);
		enable();
		printf(" D/A: %u bytes; inserted bytes %lu",i+Sb.bufcnt,Sb.stuffsamples);
		if(Sb.pause)
			printf(" Paused");
		printf("\n");
		break;
	}
	return 0;
}


dosbidle(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	/* This will indirectly cause any transfer to stop */
	sb_idle();
	return 0;
}

dosbatt(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	int major,minor;

	if(strcmp(argv[1],"sb16") == 0){
		if(Sb.base != 0){
			printf("Only one sound card currently supported\n");
			return 1;
		}
		Sb.base = htoi(argv[2]);
		Sb.irq = atoi(argv[3]);
		Sb.dma8 = atoi(argv[4]);
		Sb.dma16 = atoi(argv[5]);
		if(sb_setup(Sb.base,Sb.irq,Sb.dma8,Sb.dma16) == -1){
			printf("setup failed\n");
			return 0;
		}
		sb_write_byte(Sb.base,0xe1);
		major = sb_read_data(Sb.base);
		minor = sb_read_data(Sb.base);
		printf("SoundBlaster DSP version %d.%d\n",major,minor);
		Sb.state = IDLE;
	} else {
		printf("Only sb16 currently supported\n");
		return -1;
	}
	return 0;
}
dosbdet(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	sbshut();
	return 0;
}
void
sbshut()
{
	if(Sb.base == 0)
		return;	/* No card attached */
	setirq(Sb.irq,Savevec);
	maskoff(Sb.irq);
	sb_reset(Sb.base);
	Sb.base = 0;
	shutdown(S,2);	/* Blow it away */
	S = -1;
}
dosamprate(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	return setlong(&Sb.samprate,"Sample rate:",argc,argv);
}
dostereo(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	return setbool(&Sb.stereo,"Stereo",argc,argv);
}
dogain(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	struct gain *gp;
	double x;

	if(argc == 1){
		/* Dump all settings */
		dumpgains(Sb.base);
		return 0;
	}
	for(gp = Gaintab;gp->name != NULL;gp++){
		if(strncmp(argv[1],gp->name,strlen(argv[1])) == 0)
			break;
	}
	if(gp->name == NULL){
		printf("Valid parameters:");
		for(gp = Gaintab;gp->name != NULL;gp++)
			printf(" %s",gp->name);
		printf("\n");
		return 1;
	}
	if(argc == 2){
		dumpgain(Sb.base,gp);
		return 1;
	}
	x = (atof(argv[2]) - gp->offset) * gp->scale;
	x = max(0,x);
	x = min(x,255);
	sb_write_mix(Sb.base,gp->regl,(int) x);
	if(argc > 3){
		x = (atof(argv[3]) - gp->offset) * gp->scale;
		x = max(0,x);
		x = min(x,255);
	}
	sb_write_mix(Sb.base,gp->regr,(int) x);
	return 0;
}
void
dumpgains(base)
int base;
{
	struct gain *gp;

	for(gp = Gaintab;gp->name != NULL;gp++)
		dumpgain(base,gp);
}
void
dumpgain(base,gp)
int base;
struct gain *gp;
{
	double l,r;

	l = sb_read_mix(base,gp->regl);
	r = sb_read_mix(base,gp->regr);
	printf("%s ",gp->name);
	if(l != r){
		printf("left %.0f right %.0f dB\n",
		 l / gp->scale + gp->offset,
		 r / gp->scale + gp->offset);
	} else {
		printf("%.0f dB\n",l / gp->scale + gp->offset);
	}
}
void
sndrcv(s,p1,p2)
int s;
void *p1,*p2;
{
	struct mbuf *bp;

	while(recv_mbuf(s,&bp,0,NULL,NULL) > 0)
		sb_send(bp);
	close(s);
}

dostcplisten(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	if(sb_dac(Sb.samprate,Sb.stereo,RXBUF) == -1)
		return 1;

	return start_tcp(2010,"sound",sndrcv,2048);
}
dossend(argc,argv,p)
int argc;
char *argv[];
void *p;
{
	struct sockaddr_in sock;
	int s;
	int32 seq = 0;
	struct mbuf *bp;

	s = socket(AF_INET,SOCK_DGRAM,0);
	sock.sin_family = AF_INET;
	if(argc > 2)
		sock.sin_port = atoi(argv[2]);
	else
		sock.sin_port = 2010;
	sock.sin_addr.s_addr = resolve(argv[1]);
	if(connect(s,(struct sockaddr *)&sock,sizeof(sock)) == -1){
		printf("Connect failed\n");
		close(s);
		return -1;
	}
	if(sb_adc(Sb.samprate,Sb.stereo,TXBUF) == -1){
		close(s);
		return 1;
	}
	for(;;){
		while(Sb.rcvq == NULL && Sb.state == ADC)
			kwait(&Sb.rcvq);
		if(Sb.state == IDLE)
			break;
		bp = dequeue(&Sb.rcvq);
		pushdown(&bp,NULL,4);
		put32(bp->data,seq);
		seq += len_p(bp) - 4;
		send_mbuf(s,&bp,0,NULL,NULL);
	}
	return 0;
}

int
sb_setup(base,irq,dma8,dma16)
int base;	
int irq;
int dma8;
int dma16;
{
	int dma;

	if(sb_reset(base) == -1){
		printf("Soundblaster reset failed\n");
		return -1;
	}
	/* Save original interrupt vector */
	Savevec = getirq(irq);
	/* Set new interrupt vector */
	if(setirq(irq,Sbhandle[0]) == -1){
		printf("IRQ %u out of range\n",irq);
		return -1;
	}
	switch(irq){
	case 2:
	case 9:
		sb_write_mix(base,0x80,1);
		break;
	case 5:
		sb_write_mix(base,0x80,2);
		break;
	case 7:
		sb_write_mix(base,0x80,4);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产色一区二区| 91老师国产黑色丝袜在线| 欧美疯狂做受xxxx富婆| 亚洲国产精品一区二区久久| 91麻豆成人久久精品二区三区| 亚洲欧美另类小说视频| 91毛片在线观看| 一区二区日韩av| 在线成人av网站| 国产在线视视频有精品| 国产精品丝袜91| 9l国产精品久久久久麻豆| 亚洲午夜久久久久久久久电影网 | 欧美日韩国产片| 亚洲国产精品久久久男人的天堂| 在线精品视频一区二区三四| 亚洲国产日韩在线一区模特| 日韩欧美不卡在线观看视频| 国产激情精品久久久第一区二区 | 99久久精品国产麻豆演员表| 亚洲国产成人高清精品| 日韩三级中文字幕| 不卡一区二区三区四区| 亚洲一区二区在线免费观看视频| 91麻豆精品91久久久久同性| 国产一区二区久久| 亚洲激情欧美激情| 精品国产乱码久久久久久老虎| 成人一区二区三区在线观看| 亚洲国产成人91porn| 久久综合色婷婷| 欧洲一区在线观看| 国产在线一区二区综合免费视频| 亚洲六月丁香色婷婷综合久久| 欧美一级视频精品观看| av一区二区三区在线| 青青草国产精品97视觉盛宴| 中文字幕中文字幕在线一区| 7777精品伊人久久久大香线蕉最新版| 国产精品资源在线| 亚洲一区二区精品久久av| 久久久91精品国产一区二区精品| 日本电影欧美片| 欧美日韩国产在线观看| 东方aⅴ免费观看久久av| 亚洲一区二区三区四区五区黄| 久久综合久久综合九色| 欧美日韩一区视频| 91麻豆文化传媒在线观看| 国产激情精品久久久第一区二区 | 一区二区三区成人| 国产精品蜜臀在线观看| 欧美一区二区大片| 欧美性猛交xxxx黑人交| www.日韩精品| 国产69精品久久777的优势| 久久精品国产99国产精品| 亚洲成人午夜影院| 亚洲伦理在线精品| 亚洲欧洲日韩在线| 欧美国产精品一区| xfplay精品久久| 日韩精品专区在线影院观看| 欧洲一区二区三区在线| av午夜一区麻豆| 精品综合免费视频观看| 亚洲综合在线观看视频| 国产欧美日韩不卡免费| 国产传媒久久文化传媒| 激情欧美一区二区三区在线观看| 国产成人小视频| 久久电影网站中文字幕| 亚洲线精品一区二区三区| 国产精品污网站| 久久久噜噜噜久噜久久综合| 欧美一区二区三区影视| 91久久久免费一区二区| 99久久99久久免费精品蜜臀| 国产美女一区二区三区| 久久精品国产在热久久| 日本不卡中文字幕| 免费高清不卡av| 婷婷六月综合亚洲| 一区二区在线观看免费| 亚洲品质自拍视频| 国产精品日韩精品欧美在线| 国产亚洲福利社区一区| 国产亚洲欧美日韩俺去了| 久久精品一区八戒影视| 国产女人18水真多18精品一级做| 精品久久久久久久久久久久久久久| 欧美日韩精品欧美日韩精品| 在线一区二区三区四区五区| 色综合色综合色综合| 色综合久久综合中文综合网| 91网站在线播放| 色94色欧美sute亚洲线路一ni | 国产精品三级视频| 久久久影视传媒| 久久久久国色av免费看影院| 久久综合资源网| 精品日韩一区二区三区免费视频| 精品理论电影在线观看| 欧美日韩精品欧美日韩精品一综合| 91精品国产欧美一区二区成人| 欧美浪妇xxxx高跟鞋交| 欧美一区二区三区影视| 日韩欧美二区三区| 国产欧美一区二区三区网站| 国产精品美女久久久久久久网站| 1000部国产精品成人观看| 亚洲美女免费在线| 中文字幕亚洲综合久久菠萝蜜| 一区二区三区免费在线观看| 午夜成人免费电影| 另类专区欧美蜜桃臀第一页| 国产毛片精品视频| 99国产精品一区| 欧美日韩激情一区二区三区| 日韩午夜精品电影| 久久久久国产精品麻豆 | 亚洲精品成人悠悠色影视| 亚洲一区二区三区四区在线观看| 亚洲成a人v欧美综合天堂下载| 日韩国产一区二| 国模套图日韩精品一区二区 | 尤物在线观看一区| 欧美极品美女视频| 国产精品电影院| 精品一区二区在线免费观看| 蜜臀av一区二区三区| 国产精品99久| 国产精品久久久久久久久晋中| 欧美视频中文字幕| 一本久道久久综合中文字幕| 亚洲一区视频在线| 91网站最新网址| 欧美一级片免费看| 国产日韩欧美高清| 26uuu国产日韩综合| 懂色av一区二区三区免费看| 日韩一区精品视频| 精品国产乱码久久| 亚洲女同ⅹxx女同tv| 日本女人一区二区三区| 欧美人与性动xxxx| 午夜影院久久久| 久久se这里有精品| bt欧美亚洲午夜电影天堂| 久久91精品国产91久久小草| 国产成人一级电影| 欧美精品三级在线观看| 一区二区三区在线视频观看| 日本午夜精品一区二区三区电影 | 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 久久精品人人做人人综合| 大陆成人av片| 亚洲精品视频免费看| 成人短视频下载| 狠狠狠色丁香婷婷综合激情| 日韩三级高清在线| 成人中文字幕电影| 亚洲综合在线第一页| 欧美日韩一级片网站| 久久国产精品免费| 日韩欧美中文一区| 亚洲欧美日韩一区二区三区在线观看| 99热精品国产| 亚洲最快最全在线视频| 在线视频你懂得一区二区三区| 亚洲美女一区二区三区| 成人综合在线观看| 欧美国产日韩精品免费观看| 国产乱码精品1区2区3区| 国产精品无圣光一区二区| 日韩视频免费观看高清完整版在线观看 | 国产精品视频线看| 免费人成在线不卡| 日韩美女视频在线| 亚洲成人1区2区| 国产一区啦啦啦在线观看| 欧美一级日韩不卡播放免费| 国产在线视频一区二区| 午夜久久久久久久久久一区二区| 亚洲精品成人a在线观看| 亚洲欧洲国产日本综合| 成人的网站免费观看| 久久久久9999亚洲精品| 国产精品白丝jk黑袜喷水| 日韩女优电影在线观看| 日韩av中文在线观看| 4438x亚洲最大成人网| 亚洲精品日日夜夜| 波多野结衣中文字幕一区二区三区 | 一区二区三区中文在线观看| 国产一区二区三区在线观看免费视频 | 日韩精品一区第一页| 色婷婷综合激情| 亚洲美女淫视频| 精品视频1区2区3区|