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

📄 devio.c

📁 基于东南大学开发的SEP3203的ARM7中的所有驱动
💻 C
字号:


/********************************************/

 

/*  THE PUBLIC FUNCTIONS OF COM MANAGEMENT*/



/*********************************************/



#include <sys\sysuart.h>



#include <..\syssrc\net\nettypes.h>



#include "net.h"

#include "devio.h"





static char ppp_framechar = PPP_FLAG;



const char *nameForDevice(int fd)                 /* Get name for file device ID. */

{

return NULL;

}



 int nOpen(int id) 							/* Open fid on name */

{

	return SysOpenDev(id, 0);

}



int nClose(int id)                           /* Close a file */

{

	return SysCloseDev(id);

}



int nRead(int id, void *s, int n)                  /* read n char from device */

{

	int bytes=0;

	//int i;                                               /**********已经修改***********/

	

	while(bytes < n)

		{

		SysReadDev(id, s, 1, 0) ;

		((char *)s)++;

		bytes++;

		}

	return bytes;

}





int nWrite(int id,  void *s, int n)           /* write n char to device */

{

	int bytes=0;

	//int i;

/*	for (i = 0; i<3; i++)

		{

		bytes = SysWriteDev(id, s, n);

		if (bytes == n) break;

		}*/

		

	bytes = SysWriteDev(id, s, n, 0);		



	return bytes;

}



int ioctl(int fd, int op, void *data)

{

	/* VA: may need support for FRAME character in sdrv-driver */

	switch(op) {

		case SETFRAME:

			ppp_framechar = *(char *)data;

			break;

		case GETFRAME:

			*(char *)data = ppp_framechar;

			break;

//		case ENAECHO:

//			asy_ioctl(ASY_ECHO_ON, NULL);

//			break;

//		case DISECHO:

//			asy_ioctl(ASY_ECHO_OFF, NULL);

//			break;

//		case GETCONV:

//			asy_ioctl(ASY_GETATTR, data);

//			break;

//		case SETCONV:

//			asy_ioctl(ASY_SETATTR, data);

//			break;

		default:

			break;

	}



	return 0;

}



unsigned char out_character[4096];

unsigned char *out_pointer = out_character;

unsigned char *out_p;



int nPut(int fid, NBuf *nb)

{

	char *p;

	int total, len;

	NBuf *nbp = nb;

	unsigned int i = 0;

	


	out_pointer = out_character;

	if (nb == NULL)

		return 0;

	total = 0;

	while (nb) {

		if(nb->nextChain == nb)

			return -1;

		if (nb->len > 0) {

			p = nBUFTOPTR(nb, char *);

			out_p = p;

			for(i=0;i<nb->len;i++)
			{
				*out_pointer=*out_p;
				out_pointer++;
				out_p++;
			}

			len = SysWriteDev(fid, p, nb->len, 0);

			

			if (len <= 0) {
				nFreeChain(nbp);
				return -1;
			}
			total += len;
		}
		nb = nb->nextBuf;
	}

	nFreeChain(nbp);

	return total;

}



/* Get an nBuf packet from device. */

int nGet(int fid, NBuf **nb, int timeout)

{

	int tout = timeout;	//timeout is in ticks

	int r;

	char c;

	int total, len;



	*nb = NULL;		/* clear data */

	if ((r = asy_readch(fid, tout)) == -1)

		return -1;

	nGET(*nb);

	if (*nb == NULL)

		return -1;

	total = 0;

	c = r;

	nAPPENDCHAR(*nb, c, len);

	total += len;

	while (!(c == ppp_framechar && total > 1) && nTRAILINGSPACE(*nb) > 0) {

		if ((r = asy_readch(fid, tout)) == -1)

			return total;

		c = r;

		nAPPENDCHAR(*nb, c, len);

		total += len;

	}

	return total;

}



int isatty(int id)                                /* Tests if a tty device */
{

	return 0;

}

⌨️ 快捷键说明

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