From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=FREEMAIL_FROM, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from primenet.com.au (ns1.primenet.com.au [203.24.36.2]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id 4bf4fbb6 for ; Thu, 14 Feb 2019 13:27:42 +0000 (UTC) Received: (qmail 19822 invoked by alias); 14 Feb 2019 00:00:58 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: List-Unsubscribe: X-Seq: 23867 Received: (qmail 20970 invoked by uid 1010); 14 Feb 2019 00:00:58 -0000 X-Qmail-Scanner-Diagnostics: from mout.gmx.net by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.100.2/25112. spamassassin: 3.4.2. Clear:RC:0(212.227.17.21):SA:0(-2.6/5.0):. Processed in 2.614758 secs); 14 Feb 2019 00:00:58 -0000 X-Envelope-From: dominik.vogt@gmx.de X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Date: Thu, 14 Feb 2019 01:00:42 +0100 From: Dominik Vogt To: Zsh Users Subject: Shell io from and to serial device Message-ID: <20190214000042.ed73yom5s26pst5p@gmx.de> Reply-To: dominik.vogt@gmx.de Mail-Followup-To: Zsh Users MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: NeoMutt/20170113 (1.7.2) X-Provags-ID: V03:K1:bf6P31fT8JLOcARZS9hzuIboFlhhJ4fjP1SNqx8utw8EGa/sw/j dLzjlaBzEa3RnYUIGbFlw5hW2fHaApi71Tpel4+l4lQjy7iJpSO190m50leYW0nTIlbvZ9B NhoLly4nNARxvsYCCs52rSREmt+F89kyzvzH10l5wIvRupsHoQHJFJTXF5V9Zu/lFfWXTTo I9xLDZoW8cTNeC8Ll560w== X-UI-Out-Filterresults: notjunk:1;V03:K0:tMKXo6kcSeQ=:WtsDaq7KGVmQmym8gc6+ei rKGzGOzTmoLh5fibcO6pzZAwqu8OV8yWnMgf7GzXvyuCgBgCwAXeXD0a6FV3Xqb0mULdmVu3J FylYKY/JdnmZJ9NL2ibMxanU8X9CmC2sfUMnEVKUk+0Rw2SZwX/4oyGU1b/wSrN+q54A7KqFX E5eFWSXK2gU+v70bnTxf5rVedo1v83V8xjvYWfCHAHyX2xgMVVk41vMZiSRIC8XkUvP4arRoL qXSIl7MwF3bdN9gxKQhHZ9YZw+WBf9nyKbeg02lH1oXQWpm1IQEOM9P5lcVotFoB7l6eWKm3e OLEdsQYKzUt1EvwHjYf5BNbbIA8W6kjrpwjOF/DX4CWkJIlvOi/QtnJgvLkDqWIg5WhhjMl3m TYziN1pmlVok3/2iIZZM+aG50nOKGNeZF05bqWKPn3BB9O9k2j75wm/aBl+hh8Tw2d9I97ZqD 5dQ30WYChnynN9zgoyB7MMZwUnuogBz4Nwtr1JGT+bqLKdnaHm/mv7JS4Hij7u144wujWXk0Q ArcPSXhmxP0yUrAQobC6gdbDF4kYd0tTMGnhekc1UXA+ANfbKZvoRFM+vJq/iuF/0iBNpLrcw OrAyQ2MGXfaSOx11YnYiMmV5bljmZLR4K3l+e+jfakAEYRoAeIY+a8gifpaSHEH/6CnFSbu1a hCiuXcmGmhpmqOB4VoCapmqXdqVi3w6Mqal6bvcc695uoQ56Yt3Ya/cPGE6yr+JrDSrizWD56 JIHKTXa/InqQSQIK7Et934cpoJ59/aVWnkBSTcRAZQa40MQXxQVCNY+Tu4/pFTiZe1mpKbGpV xU3seBLXQk86uh3M5TBbqonTZWjz9FA5hcnBvKCt86pcshIzKOOgDXmLn8pasf7eLIz3Y8Wh0 wmhGXsVhmV7nWpAhN+72XgCylyBH67/zsmE8YwNgmT5T3TvU6VkvRQd0usIb0M Hi Folks, I'm really stuck with this problem. We need a fast, and reliable way to send a string to a serial device and grep for a certain reply, and failed to make that work with "expect" - because its documentation is awful. Anyway, it should be not too difficult to do with zsh. The task is: 1. configure serial line, e.g. with $ stty -F /dev/ttyUSB0 speed 115200 cs8 -cstopb -parenb -echo 2. Send some string to the serial line $ echo foo > /dev/ttyUSB0 3. Grep for a certain reply with configurable, sub second timeout. $ ?????? 4. In case of a timeout, all input from the serial line is stored in a file or shell variable. There should be no noticeable delay if the expected reply shows up immediately. Something like this should do it: -- snip -- #!/usr/bin/zsh set -u set -C SEND="$1" EXPECT="$2" TIMEOUT="$3" DEV="$4" LOGFILE="$5" shift 5 trap "exit 1" TERM # serial setup stty -F "$DEV" speed 115200 cs8 -cstopb -parenb -echo > /dev/null # watchdog process { sleep "$TIMEOUT"; echo "timeout" 1>&2; kill 0 2> /dev/null; } & # child sends string with delay { sleep 0.01; echo "$SEND" > "$DEV" } & rm -f "$LOGFILE" # parent waits for reply tee "$LOGFILE" < "$DEV" | while read LINE; do if { cat < /dev/null exit 0 fi done exit 1 -- snip -- But this looks really complicated and the "sleep 0.01" is annoying. There must be an easier way. Also, I'm not convinced that "tee" won't buffer serial input and cause a timeout, although on the test machine it doesn't. Ciao Dominik ^_^ ^_^ -- Dominik Vogt