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

📄 adrport.c

📁 是自己开发的程序
💻 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 + -