⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fasiintf.c

📁 一个通讯程序源码
💻 C
字号:
/*+-------------------------------------------------------------------------	fasiintf.c - FAS/i interface	wht@n4hgf.Mt-Park.GA.US  Defined functions:	display_fasi(fip)	fasi_breaks_detected()	fasi_line_errors()	fasi_msr()	fasi_rings_detected()	icmd_fasi(narg,arg)	ier_text(ier)	lcr_text(lcr)	mcr_text(mcr)	msr_text(msr)	pcmd_fasi(param)--------------------------------------------------------------------------*//*+:EDITS:*//*:09-10-1992-13:59-wht@n4hgf-ECU release 3.20 *//*:08-22-1992-15:38-wht@n4hgf-ECU release 3.20 BETA *//*:07-25-1991-12:57-wht@n4hgf-ECU release 3.10 *//*:04-29-1991-18:52-wht@n4hgf-FAS/i 2.08.0 official release *//*:12-24-1990-00:51-wht-creation */#include "ecu.h"#if	defined(FASI)#include "ecuerror.h"#include "esd.h"#if defined(NULL)#undef NULL#endif# include <local/fas.h>extern int proctrace;/*+-------------------------------------------------------------------------	msr_text(msr)--------------------------------------------------------------------------*/char *msr_text(msr)uchar msr;{	static char txt[50];	txt[0] = '*';	txt[1] = 0;	if(!msr)	{		strcat(txt,"NULL*");		return(txt);	}	if(msr & MS_CTS_DELTA) strcat(txt,"dCTS*");	if(msr & MS_DSR_DELTA) strcat(txt,"dDSR*");	if(msr & MS_RING_TEDGE) strcat(txt,"dRI*");	if(msr & MS_DCD_DELTA) strcat(txt,"dDCD*");	if(msr & MS_CTS_PRESENT) strcat(txt,"CTS*");	if(msr & MS_DSR_PRESENT) strcat(txt,"DSR*");	if(msr & MS_RING_PRESENT) strcat(txt,"RING*");	if(msr & MS_DCD_PRESENT) strcat(txt,"DCD*");	return(txt);}	/* end of msr_text *//*+-------------------------------------------------------------------------	mcr_text(mcr)--------------------------------------------------------------------------*/char *mcr_text(mcr)uchar mcr;{	static char txt[32];	txt[0] = '*';	txt[1] = 0;	if(!mcr)	{		strcat(txt,"NULL*");		return(txt);	}	if(mcr & MC_SET_DTR) strcat(txt,"DTR*");	if(mcr & MC_SET_RTS) strcat(txt,"RTS*");	if(mcr & MC_SET_OUT1) strcat(txt,"OUT1*");	if(mcr & MC_SET_OUT2) strcat(txt,"OUT2*");	if(mcr & MC_SET_LOOPBACK) strcat(txt,"LOOPBACK*");	return(txt);}	/* end of mcr_text *//*+-------------------------------------------------------------------------	lcr_text(lcr)--------------------------------------------------------------------------*/char *lcr_text(lcr)uchar lcr;{	static char txt[64];	sprintf(txt,"*%ddb*",(lcr & LC_WORDLEN_MASK) + 5);	strcat(txt,(lcr & LC_STOPBITS_LONG) ? "2" : "1");	strcat(txt,"sb*");	if(lcr & LC_ENABLE_PARITY)	{		strcat(txt,"PARITY*");		if(lcr & LC_STICK_PARITY)			strcat(txt,(lcr & LC_EVEN_PARITY) ? "MARK*" : "SPACE*");		else			strcat(txt,(lcr & LC_EVEN_PARITY) ? "EVEN*" : "ODD*" );	}	else		strcat(txt,"NOPAR*");	if(lcr & LC_SET_BREAK_LEVEL)		strcat(txt,"SETBREAK*");	if(lcr & LC_ENABLE_DIVISOR)		strcat(txt,"ENABDIV*");	return(txt);}	/* end of lcr_text *//*+-------------------------------------------------------------------------	ier_text(ier)--------------------------------------------------------------------------*/char *ier_text(ier)uchar ier;{	static char txt[32];	txt[0] = '*';	txt[1] = 0;	if(!ier)	{		strcat(txt,"NULL*");		return(txt);	}	if(ier & IE_RECV_DATA_AVAILABLE) strcat(txt,"RDAV*");	if(ier & IE_XMIT_HOLDING_BUFFER_EMPTY) strcat(txt,"TBMT*");	if(ier & IE_LINE_STATUS) strcat(txt,"LS*");	if(ier & IE_MODEM_STATUS) strcat(txt,"MS*");	return(txt);}	/* end of ier_text *//*+-------------------------------------------------------------------------	display_fasi(fip)--------------------------------------------------------------------------*/voiddisplay_fasi(fip)struct fas_info *fip;{	pprintf("base address: %04x irq=%u ",fip->port_0.addr,fip->vec);	pputs("device is ");	if(fip->device_flags.s & DF_DEVICE_IS_NS16550A)		pputs("16550\n");	else if(fip->device_flags.s & DF_DEVICE_IS_I82510)		pputs("82510\n");	else		pputs("16450\n");	pprintf("MSR=%s   ",msr_text(fip->msr));	pprintf("MCR=%s\n",mcr_text(fip->mcr));	pprintf("LCR=%s   ",lcr_text(fip->lcr));	pprintf("IER=%s\n",ier_text(fip->ier));	pprintf("recv ring cnt=%u  ",fip->recv_ring_cnt);	pprintf("xmit ring cnt=%u  ",fip->xmit_ring_cnt);	pprintf("xmit fifo size=%u\n",fip->xmit_fifo_size);	pprintf("characters received    =%12lu\n",fip->characters_received);	pprintf("characters transmitted =%12lu\n",fip->characters_transmitted);	pprintf("modem status events    =%12lu\n",fip->modem_status_events);	pprintf("overrun errors=%lu  ",fip->overrun_errors);	pprintf("framing errors=%lu  ",fip->framing_errors);	pprintf("parity errors=%lu\n",fip->parity_errors);	pprintf("rings detected=%lu  ",fip->rings_detected);	pprintf("breaks detected=%lu\n",fip->breaks_detected);	pprintf("xmtr flow off XON/XOFF=%lu  RTS/CTS=%lu\n",		fip->xmtr_sw_flow_count,fip->xmtr_hw_flow_count);	pprintf("rcvr flow off XON/XOFF=%lu  RTS/CTS=%lu\n",		fip->rcvr_sw_flow_count,fip->rcvr_hw_flow_count);}	/* end of display_fasi *//*+-------------------------------------------------------------------------	fasi_msr() - return modem status register contents--------------------------------------------------------------------------*/ucharfasi_msr(){	ulong ltmp = 0;	return((uchar)ioctl(shm->Liofd,FASIC_MCR,(char *)&ltmp));	return(ltmp);}	/* end of fasi_msr *//*+-------------------------------------------------------------------------	fasi_line_errors() - return UART error count--------------------------------------------------------------------------*/ulongfasi_line_errors(){	struct fas_info finfo,*fip = &finfo;	memset((char *)fip,0,sizeof(*fip));	if((ioctl(shm->Liofd,FASIC_SIP,(char *)fip)) < 0)		return(0);	return(fip->parity_errors + fip->framing_errors + fip->overrun_errors);}	/* end of fasi_line_errors *//*+-------------------------------------------------------------------------	fasi_rings_detected() - return number of RI trailing edges--------------------------------------------------------------------------*/ulongfasi_rings_detected(){	struct fas_info finfo,*fip = &finfo;	memset((char *)fip,0,sizeof(*fip));	if((ioctl(shm->Liofd,FASIC_SIP,(char *)fip)) < 0)		return(0);	return(fip->rings_detected);}	/* end of fasi_rings_detected *//*+-------------------------------------------------------------------------	fasi_breaks_detected() - return number of BREAKs detected--------------------------------------------------------------------------*/ulongfasi_breaks_detected(){	struct fas_info finfo,*fip = &finfo;	memset((char *)fip,0,sizeof(*fip));	if((ioctl(shm->Liofd,FASIC_SIP,(char *)fip)) < 0)		return(0);	return(fip->breaks_detected);}	/* end of fasi_breaks_detected *//*+-------------------------------------------------------------------------	pcmd_fasi(param)fasi [-switches] <str-cmd>>where <str-cmd> is 'd[isplay]'                or 'r[eset]'fasi 'd'fasi 'r'--------------------------------------------------------------------------*/intpcmd_fasi(param)ESD *param;{	int erc;	char switches[8];	ESD *tesd = (ESD *)0;	struct fas_info finfo,*fip = &finfo;	char ident_str[128];	memset((char *)fip,0,sizeof(*fip));	get_switches(param,switches,sizeof(switches));	if(!(tesd = esdalloc(64)))		return(eNoMemory);	if(!(erc = gstr(param,tesd,1)))	{		skip_cmd_break(tesd);		switch(to_lower(*(tesd->pb + tesd->index)))		{			case 'd':	/* display */				if((ioctl(shm->Liofd,FASIC_SIP,(char *)fip)) < 0)				{					pperror("ioctl FASIC_SIP");					erc = eFATAL_ALREADY;				}				else					display_fasi(fip);				if((ioctl(shm->Liofd,FASIC_DVR_IDENT,ident_str)) < 0)				{					pperror("ioctl FASIC_DVR_IDENT");					erc = eFATAL_ALREADY;				}				else					pprintf("driver:  '%s'\n",ident_str);				if((ioctl(shm->Liofd,FASIC_SPACE_IDENT,ident_str)) < 0)				{					pperror("ioctl FASIC_SPACE_IDENT");					erc = eFATAL_ALREADY;				}				else					pprintf("space.c: '%s'\n",ident_str);				break;			case 'r':	/* reset */				if((ioctl(shm->Liofd,FASIC_RESET_STAT,(char *)0)) < 0)				{					pperror("ioctl FASIC_RESET_STAT");					erc = eFATAL_ALREADY;				}				else if(proctrace)					pputs("statistics reset\n");				break;			default:				pputs("invalid subcommand '");				pputs(tesd->pb);				pputs("'\n");				erc = eFATAL_ALREADY;				break;		}	}	if(tesd)		esdfree(tesd);	return(erc);}	/* end of pcmd_fasi *//*+-------------------------------------------------------------------------	icmd_fasi(narg,arg)--------------------------------------------------------------------------*/voidicmd_fasi(narg,arg)int narg;char **arg;{	struct fas_info finfo,*fip = &finfo;	char ident_str[128];	memset((char *)fip,0,sizeof(*fip));	if((narg > 1) && (to_lower(*arg[1]) == 'r'))	{		if((ioctl(shm->Liofd,FASIC_RESET_STAT,(char *)0)) < 0)		{			pperror("   ioctl FASIC_RESET_STAT");			return;		}		ff(se,"  fasi statistics reset\r\n");	}	else	{		if((ioctl(shm->Liofd,FASIC_SIP,(char *)fip)) < 0)		{			pperror("   ioctl FASIC_SIP");			return;		}		ff(se,"\r\n");		display_fasi(fip);		if((ioctl(shm->Liofd,FASIC_DVR_IDENT,ident_str)) < 0)			pperror("ioctl FASIC_DVR_IDENT");		else			pprintf("driver:  '%s'\n",ident_str);		if((ioctl(shm->Liofd,FASIC_SPACE_IDENT,ident_str)) < 0)			pperror("ioctl FASIC_SPACE_IDENT");		else			pprintf("space.c: '%s'\n",ident_str);	}}	/* end of icmd_fasi */#endif /* FASI *//* vi: set tabstop=4 shiftwidth=4: *//* end of fasiintf.c */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -