📄 adrport.c
字号:
#include "adrport.h"#include <stdio.h> /*±ê×¼ÊäÈëÊä³ö¶¨Òå*/
#include <stdlib.h> /*±ê×¼º¯Êý¿â¶¨Òå*/
#include <unistd.h> /*Unix ±ê×¼º¯Êý¶¨Òå*/
#include <sys/types.h>
#include <sys/time.h>
#include <sys/stat.h>
#include <fcntl.h> /*Îļþ¿ØÖƶ¨Òå*/
#include <termios.h> /*PPSIX ÖÕ¶Ë¿ØÖƶ¨Òå*/
#include <string.h>
#include <errno.h> /*´íÎóºÅ¶¨Òå*/
#ifndef byte_uint
#define byte_uint
typedef unsigned char byte;
typedef unsigned int uint;
#endif
#ifndef INFTIM
#define INFTIM -1
#endif
/* ´ò¿ª´®¿Ú
·µ»ØÖµ:
> 0 = fd
-1 = ´ò¿ªÊ§°Ü*/
int OpenAdrPort(uint iPortNumber)
{
int fd = -1;
char sPortName[64];
struct termios my_termios;
sprintf(sPortName, "/dev/ttyS%d", iPortNumber);
/* ±£Ö¤´®¿Ú£¨fd£©ÒѾ¹Ø±Õ */
CloseAdrPort(fd);
fd = open(sPortName, O_RDWR | O_NOCTTY | O_NONBLOCK | O_SYNC);
if (fd < 0)
{
printf("open error %d %s\n", errno, strerror(errno));
}
else
{
tcgetattr(fd, &my_termios);
tcflush(fd, TCIOFLUSH);
my_termios.c_lflag &= ~ (ECHO | ICANON);
my_termios.c_cc[VMIN] = 0;
my_termios.c_cc[VTIME] = 0;
my_termios.c_cflag |= CS8 |CREAD | CLOCAL | HUPCL;
my_termios.c_cflag &= ~(PARENB|CSTOPB);
cfsetispeed(&my_termios, B9600);
cfsetospeed(&my_termios, B9600);
tcsetattr(fd, TCSANOW, &my_termios);
} /* end if*/
return fd;
} /* end OpenAdrPort*/
/* Ïò´®¿ÚдÊý¾Ý
// ·µ»ØÖµ:
// >= 0 = дÈëµÄ×Ö½ÚÊý
// -1 = дÈëʧ°Ü */
int WriteAdrPort(int fd,byte* pbOutput, uint ilen)
{
int iOut;
/*FILE* fp;*/
if (fd < 0)
{
printf(" port is not open\n");
return -1;
} /* end if*/
iOut = write(fd, pbOutput, ilen);
/*
if((fp = fdopen(fd,"r+"))==NULL)
{
return -1;
}
else
{
fflush(fp);
}
flush(fd);
*/
if (iOut < 0)
{
printf("write error %d %s\n", errno, strerror(errno));
}
return iOut;
} /* end WriteAdrPort */
// ´Ó´®¿Ú¶ÁÈ¡Êý¾Ý
// ·µ»ØÖµ:
// >= 0 = ¶ÁÈ¡µÄ×Ö½ÚÊý
// -1 = ¶Áȡʧ°Ü
int ReadAdrPort(int fd,byte* pbInput, uint iBufLen)
{
int iIn;
fd_set readset;
if (fd < 0)
{
printf(" port is not open\n");
return -1;
} /* end if*/
FD_ZERO(&readset);
FD_SET(fd,&readset);
if(select(FD_SETSIZE,&readset,NULL,NULL,NULL)<0)
{
printf("select errno\n");
return -1;
}
iIn = read(fd, pbInput, iBufLen);
if (iIn < 0)
{
if (errno == EAGAIN)
{
return 0; // assume that command generated no response
}
else
{
printf("read error %d %s\n", errno, strerror(errno));
} // end if
}
return iIn;
} // end ReadAdrPort
/* Çå¿Õ´®¿Ú
0£ºÇå¿Õ¶Á 1£ºÇå¿Õд 2£ºÈ«²¿ */
int FlushAdrPort(int fd, int action)
{
if (fd < 0)
{
printf(" port is not open\n");
return -1;
} /* end if*/
if(action == 0)
tcflush(fd, TCIFLUSH);
else if(action == 1)
tcflush(fd, TCOFLUSH);
else
tcflush(fd, TCIOFLUSH);
return 1;
} /* end CloseAdrPort */
/* ¹Ø±Õ´®¿Ú */
int CloseAdrPort(int fd)
{
if (fd >= 0)
{
close(fd);
} /* end if */
return 0;
} /* end CloseAdrPort */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -