समाशोधन यह मेरा समारोह सीरियल पोर्ट (Ubuntu 12.04 का उपयोग कर) खोलने के लिए कैसा दिखता है:,सीरियल पोर्ट के बफर
int open_port(void)
{
int fd; /* File descriptor for the port */
fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1)
{
// Could not open the port.
perror("open_port: Unable to open /dev/ttyUSB0 - ");
}
else
fcntl(fd, F_SETFL, 0);
struct termios options;
tcgetattr(fd, &options);
//setting baud rates and stuff
cfsetispeed(&options, B19200);
cfsetospeed(&options, B19200);
options.c_cflag |= (CLOCAL | CREAD);
tcsetattr(fd, TCSANOW, &options);
tcsetattr(fd, TCSAFLUSH, &options);
options.c_cflag &= ~PARENB;//next 4 lines setting 8N1
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
//options.c_cflag &= ~CNEW_RTSCTS;
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); //raw input
options.c_iflag &= ~(IXON | IXOFF | IXANY); //disable software flow control
return (fd);
}
क्या समस्या है जाता है कि जब मैं इस कार्यक्रम चलाने के लिए और मेरे धारावाहिक डिवाइस है, तो पहले से ही प्लग इन किया गया था, बफर में सामग्री है। इससे पहले कि मैं इसे पढ़ना शुरू कर दूं, मुझे बफर को साफ़ करने का एक तरीका चाहिए। मैंने सोचा कि tcsetattr(fd, TCSAFLUSH, &options);
का उपयोग बंदरगाह शुरू करने से पहले आईओ बफर को फ्लश करके इस समस्या को ठीक करेगा, लेकिन ऐसी कोई किस्मत नहीं। कोई अंतर्दृष्टि?
उम्मीद है कि कोई हमें बता सकता है कि यह क्यों काम करता है :-) –
+1 मैं भी इससे थोड़ा सा स्टंप हूं। –
मुझे लगता है कि यह लिनक्स कर्नेल में यह बग था: http://lkml.iu.edu//hypermail/linux/kernel/0707.3/1776.html –