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
Letzte Überarbeitung Beide Seiten der Revision
serialdbus:start [2011/08/07 14:05]
Patrick Wacker beispiel zur Benutzung hinzugepfügt
serialdbus:start [2011/08/07 21:26]
Patrick Wacker [Shell Script Beispiele (bash)] kommentare für die erwartete ausgabe 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>​
Projektwerkzeuge