PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Linux SerialStream.h friert ein bei Open("/dev/ttyUSB0")



TomSawer
02.04.2011, 08:45
Hallo!

mit "/dev/ttyS0" kann der Code die Schnittstelle öffnen!

Aber mit "/dev/ttyUSB0" friert er immer bei usb_serial.open() ein.
Wenn ich den USB Stecker raus ziehe, gehts weiter und es gibt den Fehler "error opening device". -> Also kriegt schonmal zumindest was mit von dem USB-SERIAL konverter.

Hab jetzt alles durch was ich finden konnte und mir einfällt: sudo, neu starten usw.
Ich habe das Gefühl, es liegt an irgendwelchen Handshakes jedoch finde ich keinen Ansatz, da etwas zu verändern.


/*
* main.cc
*
* Created on: 01.04.2011
* Author: thomas
*/

#include <iostream>
#include <SerialStream.h>
#include <cstdlib>
#include <string>

using namespace LibSerial ;
using namespace std;

int main ()
{
string port( "/dev/ttyUSB0" );
// string port( "/dev/ttyS0" );

SerialStream usb_serial;

cout << "Open Port " << port << endl;
usb_serial.Open(port) ;
if (!usb_serial)
{
cout << "Error oppening Port " << port << endl;
return 1;
}

usb_serial.SetBaudRate( SerialStreamBuf::BAUD_19200 ) ;
if ( ! usb_serial.good() )
{
cerr << "Error: Could not set the baud rate." << endl ;
exit(1) ;
}
usb_serial.SetCharSize( SerialStreamBuf::CHAR_SIZE_8 ) ;
if ( ! usb_serial.good() )
{
cerr << "Error: Could not set the character size." << endl ;
exit(1) ;
}
usb_serial.SetParity( SerialStreamBuf::PARITY_ODD ) ;
if ( ! usb_serial.good() )
{
cerr << "Error: Could not disable the parity." << endl ;
exit(1) ;
}
usb_serial.SetNumOfStopBits( 1 ) ;
if ( ! usb_serial.good() )
{
cerr << "Error: Could not set the number of stop bits." << endl ;
exit(1) ;
}
usb_serial.SetFlowControl( SerialStreamBuf::FLOW_CONTROL_NONE ) ;
if ( ! usb_serial.good() )
{
cerr << "Error: Could not use hardware flow control." << endl ;
exit(1) ;
}

usb_serial.Close() ;
cout << "Port " << port << " closed!"<< endl;
return 0;
}

just4fun
02.04.2011, 11:09
Hast du ausreichende Rechte auf ttyUSB0? Ich hatte bei mir unter Linux als normaler User keine Rechte und habe mit dafür eine extra udev-Regel gebaut.

TomSawer
02.04.2011, 12:09
Ok, dass mit der udev Regel hab ich hin bekommen:

Diese Zeile liegt jetzt in /etc/udev/rules.d/usbsrrial.rules
SUBSYSTEM=="tty", DRIVERS=="cp210x", MODE="0777", KERNELS=="ttyUSB*"

Jetzt sind die Zugriffsrechte immer 777 für das USB Gerät!

Am Fehler hat sich aber leider nichts geändert. Komisch finde ich nach wie vor, das beim raus ziehen des USB-Kabels das Progrämmchen mir error reagiert!

just4fun
02.04.2011, 12:22
Ich kenne die LibSerial gar nicht, ehrlich gesagt...

Wie sieht die Header-Datei aus? Vielleicht liegt es daran, wie der Port geöffnet wird. Hast du es mal "zu Fuß" probiert, also ohne die gelieferten Methoden der Lib?

Ich nutze das hier in meinem Sourcecode unter https://github.com/markusk/direcs/blob/master/test/src/direcsSerial.cpp in der Methode "openAtmelPort" für meinen Atmel. Schau es dir mal an.

TomSawer
19.04.2011, 10:10
All right! Das sieht gut aus... Werd's bald ausprobiern! Thanks just4Fun
Zwischenzeitlich hab ich ein bisschen qt4 gelernt...

Das läßt sich ja dann gut verschmelzen

pc-fan
19.04.2011, 10:42
Hi,

wenn du etwas mit QT machst, würde sich sicherlich auch noch folgende Bibliothek anbieten:
http://www.qtwiki.de/wiki/QextSerialPort

Vielleicht hilfts dir ja ;)