Пример #1
0
int WriteComPort (int fd, char * data, int datalength)
{
    fd_set fs_write;
    struct timeval tv_timeout;
    int retval, len, total_len;

    FD_ZERO (&fs_write);
    FD_SET (fd, &fs_write);
    tv_timeout.tv_sec = TIMEOUT_SEC (datalength, GetBaudrate ());
    tv_timeout.tv_usec = TIMEOUT_USEC;

    for (total_len = 0, len = 0; total_len < datalength;) {
        retval = select (fd + 1, NULL, &fs_write, NULL, &tv_timeout);
        if (retval) {
            len = write (fd, &data[total_len], datalength - total_len);
            if (len > 0)
                total_len += len;
        }
        else {
            tcflush (fd, TCOFLUSH);     /* flush all output data */
            break;
        }
    }

    return (total_len);
}
Пример #2
0
int WriteComPort (int fd, unsigned char *data, int datalength)
{
	int   retval, len = 0, total_len = 0;
	int i;
	
	FD_ZERO (&fs_write);
	FD_SET (fd, &fs_write);
	tv_timeout.tv_sec = TIMEOUT_SEC (datalength, GetBaudrate ());
	tv_timeout.tv_usec = TIMEOUT_USEC;

	for (total_len = 0, len = 0; total_len < datalength;) 
	{
		retval = select (fd + 1, NULL, &fs_write, NULL, &tv_timeout);
		if (retval) 
		{
			len = write (fd, data+total_len, datalength - total_len);
			if (len > 0) {
				total_len += len;
			}
        }
		else if(retval == 0)
		{
			printf("WriteComPort  timeout \n");
			break ;
		}
		else {
			printf("select return error %d\n",retval);
			//tcflush (fd, TCOFLUSH);     /* flush all output data */
			break;
		}
	}
	tcdrain(fd);
	//usleep(500);
	
#if 0
	printf("write: ");
	for(i=0;i<total_len; i++)
		printf("0x%02x  ",data[i]);
	printf("(total_len = %d)\r\n",total_len);	
#endif
	
	if(total_len != datalength)
	{
		printf("WriteComPort error \n");
		return -1;
	}
	else
		return 0;
 }
Пример #3
0
int ReadComPort (int fd, void *data, int datalength)
{
    fd_set fs_read;
    struct timeval tv_timeout;
    int retval = 0;

    FD_ZERO (&fs_read);
    FD_SET (fd, &fs_read);
    tv_timeout.tv_sec = TIMEOUT_SEC (datalength, GetBaudrate ());
    tv_timeout.tv_usec = TIMEOUT_USEC;

    retval = select (fd + 1, &fs_read, NULL, NULL, &tv_timeout);
    if (retval)
        return (read (fd, data, datalength));
    else
        return (-1);
}