📄 devio.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 + -