linux的新功能:C++打开和关闭usb端口的问题



新开发人员,Linux,C++,USB-串行适配器。

我已经完成了一个可以写入USB端口的程序。但是,如果我更改代码,制作,以root身份重新登录,并尝试再次写入端口,它就无法通过。只有当我从电脑上拔下USB电缆并重新拔插后再尝试再次发送数据时,它才会起作用。如果你需要更多信息,请告诉我。

我在两台不同的电脑上,无法复制和粘贴,但以下是我正在做的事情的要点。

int fd = 0;
int iOut = 0;
char *ComPort = "/dev/ttyUSB0";
fd=open(ComPort, O_CREAT | O_RDWR | O_NOCTTY | O_NDELAY);
if(fd == -1)
  cout << "unable to open" << endl;
// blah blah getting data ready to be sent
// create a block of 50 hex characters to be sent : DB
iOut = write(fd, $DB, sizeof(DB));
// blah blah error checking
close(fd);
return(0);

@Surt@alexfarber我与一位同事就此进行了交谈,我们得出结论,这很可能是我的显示器或usb到串行适配器的硬件问题。我相信,使用这种特定适配器的唯一方法是关闭电源并重新打开,以反映手动拆卸和重新拔插时的情况。我不相信这是可能的,但我会用我可能遇到的任何事情开始另一个线程。我很感激你们花时间帮助我,我确实学到了很多以前不知道的东西,所以这仍然很有帮助。再次感谢。

看看这里的第3.2章http://www.tldp.org/HOWTO/Serial-Programming-HOWTO/x115.html首先添加一些错误检查,这样您就可以查看if失败的位置。恐怖线会在那里有所帮助。

if (fd <0) {perror(ComPort ); exit(-1); } // note the exit which your code doesn't have.

这应该会告诉你更多的信息并添加

if (errno) {perror(ComPort ); exit(-1); }

在所有操作之后,读取、写入和设置fd上的内容。

现在将3.2中的newtio部分添加到程序中,以防握手失败。您必须更改它,使其与显示一致。

程序的最终版本可能更像3.3。

最新更新