Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
serialdbus:start [2011/08/07 14:05]
Patrick Wacker beispiel zur Benutzung hinzugepfügt
serialdbus:start [2011/08/07 22:05] (aktuell)
Patrick Wacker punkte die noch implementiert werden könnten hinzugefügt
Zeile 9: Zeile 9:
  
 ===== Verwendung ===== ===== Verwendung =====
 +
 +==== 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 ==== ==== Start des Programms ====
Zeile 34: Zeile 68:
 <file bash dbusserial.sh>​ <file bash dbusserial.sh>​
 #!/bin/bash #!/bin/bash
- +
-export SERIALDBUS="/​home/user/bin/​serialdbus"​+# bash Script das in andere Scripte eingebunden werden kann um Daten über 
 +# eine serielle Schnittstelle zu senden. 
 +# 
 +export SERIALDBUS="​../build/./​serialdbus"​
  
 function serial_init() function serial_init()
 { {
-        ​local device; + local device; 
-        local baudrate; + local baudrate; 
-        local dbusname; + local dbusname; 
-        local stopbits; + local stopbits; 
-        local databits; + local databits; 
-        local flowcontrol;​ + local flowcontrol;​ 
-        local parity; + local parity; 
-        local serial_export;​ + local serial_export;​ 
-         +  
-        if [[ -z "​$1"​ ]]; then + local interface;​ 
-                device="/​dev/​ttyS0"​ + local grepret; 
-        else +  
-                device="​$1"​ + if [[ -z "​$1"​ ]]; then 
-        fi + device="/​dev/​ttyS0"​ 
-         + else 
-        if [[ -z "​$2"​ ]]; then + device="​$1"​ 
-                dbusname="​Ser0"​ + fi 
-        else +  
-                dbusname="​$2"​ + if [[ -z "​$2"​ ]]; then 
-        fi + dbusname="​Ser0"​ 
-         + else 
-        #​Exportiert den Verwendeten Namen für diese Schittstelle + dbusname="​$2"​ 
-        serial_export="​SERIAL_${dbusname}"​ + fi 
-        export ${serial_export}=${dbusname} +  
-         + if [[ -z "​$3"​ ]]; then 
-        ​if [[ -z "​$3"​ ]]; then + baudrate=19200 
-                baudrate=19200 + else 
-        else + baudrate="​$3"​ 
-                baudrate="​$3"​ + fi 
-        fi +  
-         + if [[ -z "​$4"​ ]]; then 
-        if [[ -z "​$4"​ ]]; then + databits=8 
-                databits=8 + else 
-        else + databits="​$4"​ 
-                databits="​$4"​ + fi 
-        fi +   ​ 
-         + if [[ -z "​$5"​ ]]; then 
-        if [[ -z "​$5"​ ]]; then + flowcontrol="​none"​ 
-                flowcontrol="​none"​ + else 
-        else + flowcontrol="​$5"​ 
-                flowcontrol="​$5"​ + fi 
-        fi +   ​ 
-         + if [[ -z "​$6"​ ]]; then 
-        if [[ -z "​$6"​ ]]; then + stopbits=1 
-                stopbits=1 + else 
-        else + stopbits="​$6"​ 
-                stopbits="​$6"​ + fi 
-        fi +   ​ 
-         + if [[ -z "​$7"​ ]]; then 
-        if [[ -z "​$7"​ ]]; then + parity="​none"​ 
-                parity="​none"​ + else 
-        else + parity="​$7"​ 
-                parity="​$7"​ + fi 
-        fi +   ​ 
-         + # Alle Werte wurden auf Standart oder den übergebenen Wert gesetzt 
-        # Alle Werte wurden auf Standart oder den übergebenen Wert gesetzt +   ​ 
-         + # Instanz von serialdbus starten ​und alle Ausgaben des Programs 
-        # Instanz von serialdbus starten + # nach /dev/null schicken 
-        $SERIALDBUS "​$device"​ "​$dbusname"​ -b "​$baudrate"​ -d "​$databits"​ -f "​$flowcontrol"​ -s "​$stopbits"​ -p "​$parity"​ & + $SERIALDBUS "​$device"​ "​$dbusname"​ -b "​$baudrate"​ -d "​$databits"​ -f "​$flowcontrol"​ -s "​$stopbits"​ -p "​$parity" ​>/​dev/​null 2>&1 & 
-         +    
-        return 0;+ 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+Beendet ​die genutzte serielle Schnittstelle
 function serial_deinit() function serial_deinit()
 { {
-        ​if [[ -z "​$1"​ ]]; then + if [[ -z "​$1"​ ]]; then 
-                echo "​PROGRAMMING ERROR at ${FUNCNAME}:​ supply a DBUSNAME at \$1" + echo "​PROGRAMMING ERROR at ${FUNCNAME}:​ supply a DBUSNAME at \$1" 
-                return 1 + return 1 
-        fi + fi 
- +  
-        qdbus org.schmufu.serialdbus /${1} org.schmufu.serialdbus.quit + qdbus org.schmufu.serialdbus /${1} org.schmufu.serialdbus.quit 
-         +  
-        return 0+ return 0
 } }
         ​         ​
Zeile 119: Zeile 168:
 function serial_send() function serial_send()
 { {
-        ​local ret; + local ret; 
-        local str; + local str; 
-        ret=1; + ret=1; 
-        if [[ -z "​$1"​ ]]; then + if [[ -z "​$1"​ ]]; then 
-                echo -en "​PROGRAMMING ERROR at ${FUNCNAME} - supply a dbusname at \$1!\n"​ + echo -en "​PROGRAMMING ERROR at ${FUNCNAME} - supply a dbusname at \$1!\n"​ 
-                return 1 + return 1 
-        fi + fi 
-         +  
-        if [[ -z "​$2"​ ]]; then + if [[ -z "​$2"​ ]]; then 
-                echo -en "​PROGRAMMING ERROR at ${FUNCNAME} - supply a text to sent at \$2!\n"​ + echo -en "​PROGRAMMING ERROR at ${FUNCNAME} - supply a text to sent at \$2!\n"​ 
-                return 1 + return 1 
-        fi + fi 
-         +  
-         +  
-        str=$(qdbus org.schmufu.serialdbus /${1} org.schmufu.serialdbus.apply "​$2"​) + str=$(qdbus org.schmufu.serialdbus /${1} org.schmufu.serialdbus.apply "​$2"​) 
-        if [[ "​x${str}"​ != "​xtrue"​ ]]; then + if [[ "​x${str}"​ != "​xtrue"​ ]]; then 
-                ret=1 + ret=1 
-        else + else 
-                ret=0 + ret=0 
-        fi + fi 
-         +  
-        return $ret+ return $ret
 } }
  
-# Setzt die globale Variable $MEAS auf den Empfangenen String +# Setzt die globale Variable $SERIALRECV ​auf den Empfangenen String 
-function ​serial_recv()+function ​serial_receive()
 { {
-        ​local str; + local str; 
- +  
-        if [[ -z "​$1"​ ]]; then + if [[ -z "​$1"​ ]]; then 
-                echo -en "​PROGRAMMING ERROR at ${FUNCNAME} - supply a dbusname at \$1!\n"​ + echo -en "​PROGRAMMING ERROR at ${FUNCNAME} - supply a dbusname at \$1!\n"​ 
-                return 1; + return 1; 
-        fi + fi 
-         +  
-        str="";​ + str="";​ 
-         +  
-        str=$(qdbus org.schmufu.serialdbus /${1} org.schmufu.serialdbus.receive) + str=$(qdbus org.schmufu.serialdbus /${1} org.schmufu.serialdbus.receive) 
-        MEAS="​${str}";​ + SERIALRECV="​${str}";​ 
-      ​+}
  
 </​file>​ </​file>​
Zeile 163: Zeile 212:
 Verwendet werden kann dies dann wie folgt Verwendet werden kann dies dann wie folgt
  
-<file bash ser1.sh>+<file bash serial_example.sh>
 #!/bin/bash #!/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 #include the main functions
 . dbusserial.sh . dbusserial.sh
  
-SER=serial1 +SER=serial1 # der Name für die serialdbus instanz (frei wählbar!) 
-serial_init /​dev/​ttyUSB1 ${SER19200 8 none 1 none+ # ü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 if [[ $? -ne 0 ]]; then
-        ​echo "​ERROR:​ could not open /​dev/​ttyUSB1 as ${SERfor serial communication"​ + # Ein Fehler ist bei der Initialisierung aufgetreten 
-        exit 1+        ​echo "​ERROR:​ could not open /​dev/​ttyUSB1 as '$SER' ​for serial communication"​ 
 +        exit 1 # Script abbrechen
 fi fi
  
-# von jetzt an kann über $SER gelesen und geschrieben werden+# von jetzt an kann über "​serial_send" ​gelesen und über "​serial_receive" ​geschrieben werden
  
-serial_send ${SER"Diese Daten werden gesendet"​+# wenn TxD mit RxD verbunden ist wird das was gesendet wird auch wieder empfangen 
 +serial_send $SER "Diese Daten 
 +serial_send $SER "werden gesendet"​
  
-wenn TxD mit RxD verbunden ist kann über +wir holen die Empfangen Daten ab 
-serial_receive ${SER+serial_receive $SER 
-RX="​${MEAS}"​ +in $SERIALRECV steht jetzt der empfangene ​String 
-auf den gesendeten ​String ​reagiuer werden +echo "​Empfangen wurde:"​ 
-## ${RX} = "Diese Daten werden gesendet"​+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 # zum schluss muss die Schnittstelle wieder geschlossen werden
-serial_deinit ${SER}+serial_deinit $SER 
  
 </​file>​ </​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