Новый разработчик, 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-to-serial. Я полагаю, что единственный способ, которым это может работать с этим конкретным адаптером, состоит в том, чтобы отключить питание и включить его снова, чтобы отразить то, что он будет видеть при удалении и повторной установке вручную. Я не верю, что это возможно, но я начну другую ветку со всего, с чем я могу столкнуться. Я ценю, что вы все нашли время, чтобы помочь с этим, я узнал много других вещей, которые я не знал заранее, так что это все еще было очень полезно. Еще раз, спасибо.
Взгляните на главу 3.2 здесь http://www.tldp.org/HOWTO/Serial-Programming-HOWTO/x115.html
сначала добавьте некоторые проверки ошибок, чтобы вы могли увидеть, где произойдет сбой. Линия perror поможет там.
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 в вашу программу на случай, если какое-то рукопожатие не удалось. Вы должны изменить его, чтобы он соответствовал дисплею.
Окончательная версия вашей программы может быть больше похожа на 3.3.