#!/usr/bin/tclsh8.4 if {[llength $argv] != 1} { error "need serial port arg" } set port [lindex $argv 0] set port_stty [exec stty -F $port -g] set term_stty [exec stty -g] proc onreadp {} { global p while 1 { set c [read $p 1] } proc onreadk {} { } set e [catch { exec stty min 0 time 0 -istrip -ocrnl -onlcr -onocr -opost \ -ctlecho -echo -echoe -echok -echonl -iexten -isig exec stty -F $port min 0 time 0 -istrip -ocrnl -onlcr -onocr -opost \ -ctlecho -echo -echoe -echok -echonl -iexten -isig \ 9600 clocal cread -crtscts -hup -parenb cs8 -cstopb \ -ixoff bs0 cr0 ff0 nl0 -ofill -olcuc -onlcr set p [open $port {RDWR|NONBLOCK} 0] fconfigure $p -blocking false -buffering none fconfigure stdin -blocking false -buffering none fileevent stdin readable onreadk fileevent $p readable onreadp }] fconfigure stdin -blocking true exec stty $term_stty exec stty -F $port $port_stty