int fd = 0;
#define RS485_NODE "/dev/uart1"
static pthread_mutex_t g_mtxChipwnd = PTHREAD_MUTEX_INITIALIZER;
fd = open(RS485_NODE, O_RDWR | O_NOCTTY, 0);
if (-1 == fd)
{
printf("open serial port %s failed.\n", RS485_NODE);
return;
}
if(-1 == serial_init(fd, BAUNDRATE, DATAB8, STOPB1, NOPARITY, NOFLOWCONTROL))
{
return;
}
void sendData2mcu(int fd, int addr)
{
UINT8 cmdData[16] = {0};
int cmdLen = 0;
int iret = 0;
mkData(cmdData, &cmdLen);
pthread_mutex_lock(&g_mtxChipwnd);
iret = write(fd, (char *)cmdData, cmdLen);
iret = serial_Readn(fd, (char *)cmdData, cmdLen);
pthread_mutex_unlock(&g_mtxChipwnd);
}
int serial_Readn(int connfd, char *vptr, int n)
{
int nleft;
int nread;
char *ptr;
struct timeval select_timeout;
fd_set rset;
select_timeout.tv_sec = 10;
select_timeout.tv_usec = 0;
ptr = vptr;
nleft = n;
while (nleft > 0)
{
select_timeout.tv_sec = 10;
select_timeout.tv_usec = 0;
FD_ZERO(&rset);
FD_SET(connfd, &rset);
if(select(connfd+1, &rset, NULL, NULL, &select_timeout) <= 0)
{
break;
}
if((nread = read(connfd, ptr, nleft)) < 0)
{
if(errno==EAGAIN || errno==EWOULDBLOCK || errno==EINTR)
{
nread = 0;
}
else
{
break;
}
}
else if (nread == 0)
{
break;
}
nleft -= nread;
ptr += nread;
}
return(n - nleft);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)