Wade 0 Posted January 12, 2012 Report Share Posted January 12, 2012 Приветствую. Для того чтобы устройство на ttyACM0 правильно функционировало, необходимо чтобы программа открывала его в монопольном режиме, например program открывает /dev/ttyACM0, тогда команда echo "aaaa" > /dev/ttyACM0 должна закончиться неудачей. Minicom это делает, а у меня не получается. Вот код открытия: fd = open(device, O_RDWR | O_EXCL ); if (fd == -1) { /* * Could not open the port. */ perror(device); //return NULL; } //fcntl(fd, F_SETFL, FNDELAY); struct flock lock; lock . l_type = F_WRLCK; lock . l_whence = SEEK_SET; lock . l_start = 0; lock . l_len = 0; if (fcntl (fd, F_SETLK, & lock) < 0) { perror(device); //return NULL; } int status; ioctl(fd, TIOCMGET, &status); status &= ~TIOCM_RTS; status &= ~TIOCM_DTR; status &= ~TIOCM_CTS; status &= ~TIOCM_DSR; if (ioctl(fd, TIOCMSET, &status)) { perror("ioctl"); //return 0; } struct termios options; /* * Get the current options for the port... */ tcgetattr(fd, &options); cfsetispeed(&options, baud_rate); cfsetospeed(&options, baud_rate); options.c_cflag &= ~PARENB; options.c_cflag &= CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; options.c_cflag &= ~CRTSCTS; options.c_oflag &= ~OPOST; //raw output options.c_lflag &= ~(ICANON | ECHO | ISIG); /* * Enable the receiver and set local mode... */ options.c_cflag |= (CLOCAL | CREAD | baud_rate); /* * Set the timeouts VMIN is the minimum amount of characters to read */ //options.c_cc[VMIN] = 0; /* * The amount of time to wait for the amount of data specified by VMIN in tenths of a second */ //options.c_cc[VTIME] = 0; /* * Set the new options for the port... */ tcsetattr(fd, TCSANOW, &options); Подскажите, что не так. Либо кусок кода.где работает блокировка. Спасибо Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.