Posted to tcl by patthoyts at Tue Apr 19 21:10:41 GMT 2011view pretty

proc tms_open {port} {
    variable TMSSettings
    set chan [open $port r+]
    fconfigure $chan -mode $TMSSettings \
        -buffering line -blocking 0 \
        -translation {cr cr}
    return $chan
}

proc tms_send {chan cmd} {
    puts -nonewline $chan "$cmd\r"
    flush $chan
    after 500 {set ::waiting_send 1} ; vwait ::waiting_send
    set limit 0
    while {[incr limit] < 10 && [gets $chan line] < 0} {
        after 100 {set ::waiting_send 1} ; vwait ::waiting_send
    }
    #puts "> $cmd\n< $line"
    return $line
}

proc tms_get {port} {
    variable tms_opened 1
    set tms [tms_open $port]
    if {[catch {
        set line [tms_send $tms T]
    } err]} {
        puts stderr "error: $err"
    }
    close $tms
    variable tms_opened 0
    binary scan $line c6a4 header hex
    return [format %.1f [expr {[scan $hex %x] / 10.0}]]
}