Dies ist eine alte Version des Dokuments!


A PCRE internal error occured. This might be caused by a faulty plugin

====== serialdbus ====== {{ :wiki:progress:90.png?150|Fortschritt: 90% (Funktionsfähig, evt. Erweiterungen)}} Das Programm serialdbus dient der Umsetzung der seriellen Schnittstelle zum DBus-Daemon unter Linux. Mit hilfe dieser Umsetzung kann sehr simpel auf eine oder auch mehrere serielle Schnittstellen zugegriffen werden. ===== Verwendung ===== ==== Start des Programms ==== **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. ==== Senden von Daten (mit qdbus) ==== **qdbus org.schmufu.serialdbus /Ser1 org.schmufu.serialdbus.apply "send data"** Sendet "send data" über die serielle Schnittstelle /dev/ttyUSB0 ==== Empfangen von Daten (mit qdbus) ==== **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. ==== 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). ===== 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 export SERIALDBUS="/home/user/bin/serialdbus" function serial_init() { local device; local baudrate; local dbusname; local stopbits; local databits; local flowcontrol; local parity; local serial_export; if [[ -z "$1" ]]; then device="/dev/ttyS0" else device="$1" fi if [[ -z "$2" ]]; then dbusname="Ser0" else dbusname="$2" fi #Exportiert den Verwendeten Namen für diese Schittstelle serial_export="SERIAL_${dbusname}" export ${serial_export}=${dbusname} 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 $SERIALDBUS "$device" "$dbusname" -b "$baudrate" -d "$databits" -f "$flowcontrol" -s "$stopbits" -p "$parity" & 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 $MEAS auf den Empfangenen String function serial_recv() { 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) MEAS="${str}"; } </file> Verwendet werden kann dies dann wie folgt <file bash ser1.sh> #!/bin/bash #include the main functions . dbusserial.sh SER=serial1 serial_init /dev/ttyUSB1 ${SER} 19200 8 none 1 none if [[ $? -ne 0 ]]; then echo "ERROR: could not open /dev/ttyUSB1 as ${SER} for serial communication" exit 1 fi # von jetzt an kann über $SER gelesen und geschrieben werden serial_send ${SER} "Diese Daten werden gesendet" # wenn TxD mit RxD verbunden ist kann über serial_receive ${SER} RX="${MEAS}" # auf den gesendeten String reagiuer werden ## ${RX} = "Diese Daten werden gesendet" # zum schluss muss die Schnittstelle wieder geschlossen werden serial_deinit ${SER} </file> ====== Weiterführende Links ====== * [[http://schmufu.dyndns.org/svn/serialdbus|subversion repository]] * [[http://schmufu.dyndns.org/viewvc/serialdbus|ViewVC für das repos]]

Projektwerkzeuge