Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
serialdbus:start [2011/08/07 12:56]
Patrick Wacker angelegt
serialdbus:start [2011/08/07 22:05] (aktuell)
Patrick Wacker punkte die noch implementiert werden könnten hinzugefügt
Zeile 8: Zeile 8:
  
  
-==== Verwendung ====+===== Verwendung ​=====
  
-=== Start des Programms ===+==== Programm Parameter (-h|--help) ==== 
 +Ausgabe von '​serialdbus --help'​ 
 +<​code>​ 
 +Usage: ./​serialdbus device dbus-name [OPTIONS] 
 + 
 +  device 
 +                the serial device to use, e.g. /dev/ttyS0, /​dev/​ttyUSB0 etc. 
 +  dbus-name 
 +                the name under wich this instance will appear in the 
 +                session-dbus domain '​org.schmufu.serialdbus "​dbus-name"'​. 
 + 
 +OPTIONS are: 
 +  -h, --help ​   shows this help and exits 
 +  -b N, --baud N, --baudrate N 
 +                baudrate to use. Default: 19200 
 +                supported values: 110, 115200, 1200, 19200, 2400, 300, 38400, 4800, 57600, 600, 9600 
 +  -d N, --data N, --databits N 
 +                data bits. Default: 8 
 +                supported values: 5, 6, 7, 8 
 +  -f FLOW, --flow FLOW, --flowcontrol FLOW 
 +                flow control. Default: none 
 +                supported values: hardware, none, off, software, xonxoff 
 +  -s N, --stop N, --stopbits N 
 +                N count stop bits. Default: 1 
 +                supported values: 1, 2 
 +  -p PARITY, --par PARITY, --parity PARITY 
 +                parity to use. Default: none 
 +                supported values: even, mark, none, odd, space 
 + 
 +Version: 0.1.0.0 (svn: rev7) 
 +Author: ​ Patrick Wacker (wacker.p@gmx.de) 
 +License: GNU General Public License version 2, or (at your option) any later version 
 +</​code>​ 
 + 
 +==== Start des Programms ​====
 **serialdbus /​dev/​ttyUSB0 Ser1** **serialdbus /​dev/​ttyUSB0 Ser1**
  
 dies stellt ein dbus-Interface "​org.schmufu.serialdbus"​ mit dem Object "/​Ser1"​ im DBus zur Verfügung. Der Zugriff hierauf kann dann z.B. über qdbus erfolgen. dies stellt ein dbus-Interface "​org.schmufu.serialdbus"​ mit dem Object "/​Ser1"​ im DBus zur Verfügung. Der Zugriff hierauf kann dann z.B. über qdbus erfolgen.
  
-=== Senden von Daten (mit qdbus) ===+==== Senden von Daten (mit qdbus) ​====
 **qdbus org.schmufu.serialdbus /Ser1 org.schmufu.serialdbus.apply "send data"​** **qdbus org.schmufu.serialdbus /Ser1 org.schmufu.serialdbus.apply "send data"​**
  
 Sendet "send data" über die serielle Schnittstelle /​dev/​ttyUSB0 Sendet "send data" über die serielle Schnittstelle /​dev/​ttyUSB0
  
-=== Empfangen von Daten (mit qdbus) ===+==== Empfangen von Daten (mit qdbus) ​====
 **qdbus org.schmufu.serialdbus /Ser1 org.schmufu.serialdbus.receive** **qdbus org.schmufu.serialdbus /Ser1 org.schmufu.serialdbus.receive**
  
 Gibt alle, seit dem letzten Aufruf, empfangene Daten zurück und löscht den internen Empfangsbuffer. Gibt alle, seit dem letzten Aufruf, empfangene Daten zurück und löscht den internen Empfangsbuffer.
  
-=== Beenden des Programms ===+==== Beenden des Programms ​====
 serialdbus läuft weiterhin im Vordergrund und kann über STRG+C beendet werden. Es besteht aber auch die Möglichkeit das Programm über den dbus aufruf "qdbus org.schmufu.serialdbus /Ser1 org.schmufu.serialdbus.quit"​ zu beenden. (Dies funktioniert auch dann wenn das Programm durch ein nachgestelltes "&"​ weiter im Hintergrund ausgeführt wird). ​ serialdbus läuft weiterhin im Vordergrund und kann über STRG+C beendet werden. Es besteht aber auch die Möglichkeit das Programm über den dbus aufruf "qdbus org.schmufu.serialdbus /Ser1 org.schmufu.serialdbus.quit"​ zu beenden. (Dies funktioniert auch dann wenn das Programm durch ein nachgestelltes "&"​ weiter im Hintergrund ausgeführt wird). ​
  
-==== Shell Script Beispiele (bash) ====+===== Shell Script Beispiele (bash) ​===== 
 + 
 +folgendes script kann in ein Script eingebunden werden und dann einfach über die zur Verfügung gestellten funktionen auf die serielle Schnittstelle zugegriffen werden. 
 + 
 +<file bash dbusserial.sh>​ 
 +#​!/​bin/​bash 
 +
 +# bash Script das in andere Scripte eingebunden werden kann um Daten über 
 +# eine serielle Schnittstelle zu senden. 
 +
 +export SERIALDBUS="​../​build/​./​serialdbus"​ 
 + 
 +function serial_init() 
 +
 + local device; 
 + local baudrate; 
 + local dbusname; 
 + local stopbits; 
 + local databits; 
 + local flowcontrol;​ 
 + local parity; 
 + local serial_export;​ 
 +  
 + local interface;​ 
 + local grepret; 
 +  
 + if [[ -z "​$1"​ ]]; then 
 + device="/​dev/​ttyS0"​ 
 + else 
 + device="​$1"​ 
 + fi 
 +  
 + if [[ -z "​$2"​ ]]; then 
 + dbusname="​Ser0"​ 
 + else 
 + dbusname="​$2"​ 
 + fi 
 +  
 + if [[ -z "​$3"​ ]]; then 
 + baudrate=19200 
 + else 
 + baudrate="​$3"​ 
 + fi 
 +  
 + if [[ -z "​$4"​ ]]; then 
 + databits=8 
 + else 
 + databits="​$4"​ 
 + fi 
 +    
 + if [[ -z "​$5"​ ]]; then 
 + flowcontrol="​none"​ 
 + else 
 + flowcontrol="​$5"​ 
 + fi 
 +    
 + if [[ -z "​$6"​ ]]; then 
 + stopbits=1 
 + else 
 + stopbits="​$6"​ 
 + fi 
 +    
 + if [[ -z "​$7"​ ]]; then 
 + parity="​none"​ 
 + else 
 + parity="​$7"​ 
 + fi 
 +    
 + # Alle Werte wurden auf Standart oder den übergebenen Wert gesetzt 
 +    
 + # Instanz von serialdbus starten und alle Ausgaben des Programs 
 + # nach /dev/null schicken 
 + $SERIALDBUS "​$device"​ "​$dbusname"​ -b "​$baudrate"​ -d "​$databits"​ -f "​$flowcontrol"​ -s "​$stopbits"​ -p "​$parity"​ >/​dev/​null 2>&1 & 
 +    
 + sleep 2 #etwas warten damit die schnittstelle initialisert werden kann 
 +    
 + # gibt alle funktionen innerhalb von serialdbus wieder 
 + interface=$(qdbus org.schmufu.serialdbus) 
 + grepret=$(echo "​${interface}"​ | egrep "​${dbusname}"​) 
 + # der übergebene dbusname muss als dbus service vorhanden sein 
 + if [[ -z "​${grepret}"​ ]]; then 
 + #dbus service konnte nicht erstellt werden 
 + echo "ERROR at ${FUNCNAME}:​ cant create the serialdbus service for $dbusname"​ 
 + return 1 
 + fi 
 +  
 + return 0; 
 +
 + 
 +# Beendet die genutzte serielle Schnittstelle 
 +function serial_deinit() 
 +
 + if [[ -z "​$1"​ ]]; then 
 + echo "​PROGRAMMING ERROR at ${FUNCNAME}:​ supply a DBUSNAME at \$1" 
 + return 1 
 + fi 
 +  
 + qdbus org.schmufu.serialdbus /${1} org.schmufu.serialdbus.quit 
 +  
 + return 0 
 +
 +         
 + 
 +# Sendet über die in $1 definierte Schnittstelle,​ den in $2 übergebenen String 
 +function serial_send() 
 +
 + local ret; 
 + local str; 
 + ret=1; 
 + if [[ -z "​$1"​ ]]; then 
 + echo -en "​PROGRAMMING ERROR at ${FUNCNAME} - supply a dbusname at \$1!\n"​ 
 + return 1 
 + fi 
 +  
 + if [[ -z "​$2"​ ]]; then 
 + echo -en "​PROGRAMMING ERROR at ${FUNCNAME} - supply a text to sent at \$2!\n"​ 
 + return 1 
 + fi 
 +  
 +  
 + str=$(qdbus org.schmufu.serialdbus /${1} org.schmufu.serialdbus.apply "​$2"​) 
 + if [[ "​x${str}"​ != "​xtrue"​ ]]; then 
 + ret=1 
 + else 
 + ret=0 
 + fi 
 +  
 + return $ret 
 +
 + 
 +# Setzt die globale Variable $SERIALRECV auf den Empfangenen String 
 +function serial_receive() 
 +
 + local str; 
 +  
 + if [[ -z "​$1"​ ]]; then 
 + echo -en "​PROGRAMMING ERROR at ${FUNCNAME} - supply a dbusname at \$1!\n"​ 
 + return 1; 
 + fi 
 +  
 + str="";​ 
 +  
 + str=$(qdbus org.schmufu.serialdbus /${1} org.schmufu.serialdbus.receive) 
 + SERIALRECV="​${str}";​ 
 +
 + 
 +</​file>​ 
 + 
 +Verwendet werden kann dies dann wie folgt 
 + 
 +<file bash serial_example.sh>​ 
 +#​!/​bin/​bash 
 +
 +# simples Beispiel Script zur Verwendung von serialdbus über die bash 
 +
 +
 +# Vorrausssetzungen:​ 
 +#  - es existiert die serielle Schnittstelle /​dev/​ttyUSB1 
 +#  - TXD ist mit RXD verbunden 
 +#  - das Programm "​qdbus"​ ist installiert 
 +
 +
 + 
 +#include the main functions 
 +. dbusserial.sh 
 + 
 +SER=serial1 #​ der Name für die serialdbus instanz (frei wählbar!) 
 + # über diesen Namen wird später auf die Schnittstelle zugeriffen 
 +  
 +# initialisierung der Schnittstelle 
 +serial_init /​dev/​ttyUSB1 $SER 19200 8 none 1 none 
 + 
 +if [[ $? -ne 0 ]]; then 
 + # Ein Fehler ist bei der Initialisierung aufgetreten 
 +        echo "​ERROR:​ could not open /​dev/​ttyUSB1 as '​$SER'​ for serial communication"​ 
 +        exit 1 # Script abbrechen 
 +fi 
 + 
 +# von jetzt an kann über "​serial_send"​ gelesen und über "​serial_receive"​ geschrieben werden 
 + 
 +# wenn TxD mit RxD verbunden ist wird das was gesendet wird auch wieder empfangen 
 +serial_send $SER "Diese Daten " 
 +serial_send $SER "​werden gesendet"​ 
 + 
 +# wir holen die Empfangen Daten ab 
 +serial_receive $SER 
 +# in $SERIALRECV steht jetzt der empfangene String 
 +echo "​Empfangen wurde:"​ 
 +echo -en "​$SERIALRECV"​ # gibt "Diese Daten werden gesendet"​ aus 
 +echo " " 
 + 
 +# Die gesendeten Daten enhalten KEINE Steuerzeichen! Und auch ein abschlie0endes 
 +# "​\n"​ wird nicht automatisch an den String angehangen! 
 +# Wenn Steuerzeichen übertragen werden sollen kann dies folgendermaßen 
 +# erreicht werden 
 + 
 +# String erstellen 
 +SEND_DATA=$(echo -en "Test mit einem\nZeilenumbruch."​) 
 +# Daten Senden. $SEND_DATA muss in " ", damit es als ein Argument übergeben wird! 
 +serial_send $SER "​$SEND_DATA"​  
 + 
 +# wir holen die Empfangen Daten ab 
 +serial_receive $SER 
 +# in $SERIALRECV steht jetzt der empfangene String 
 +echo "​Empfangen wurde:"​ 
 +echo -en "​$SERIALRECV"​ # gibt "Test mit einem 
 +echo " " ​              # ​     "​Zeilenumbruch."​ aus 
 + 
 + 
 +# Auch folgendes ist möglich 
 +serial_send $SER "0x41 (A) in HEX angegeben = \x41\n"​ 
 +serial_receive $SER 
 +echo "​Empfangen wurde:"​ 
 +echo -en "​$SERIALRECV"​ # gibt "0x41 (A) in HEX angegeben = A" aus 
 +echo " " 
 + 
 + 
 +# zum schluss muss die Schnittstelle wieder geschlossen werden 
 +serial_deinit $SER 
 + 
 + 
 +</​file>​ 
 + 
 +====== evt. noch implementieren ======
  
 +  * über dbus die aktuellen Einstellungen auslesen (baudrate, databits, device etc.)
 +  * über dbus die Einstellungen ändern (baudrate, databits, device etc.)
 +  * Fehler zurückgeben wenn irgendwas schief ging
 +  * über dbus die Schnittstelle öffnen und schließen (dabei das Progamm aber nicht beenden)
  
 ====== Weiterführende Links ====== ====== Weiterführende Links ======
Projektwerkzeuge