set baudrate 38400 set parity n set databits 8 set stopbits 1 text .t1 -width 85 -font {courier 8 } -tabs {3c 6c 9c 13c left}\ -cursor gobbler pack .t1 -side top -anchor nw button .b1 -text Exit -command exit pack .b1 -side bottom -anchor nw -fill x -expand true wm title . "Com1 Reader - HexCharacters " .t1 tag configure underline -underline true .t1 tag configure bold -font {courier 10 bold} .t1 tag configure finsih -font {courier 6} .t1 insert end "\tRead COM1: $baudrate, Parity=$parity,\ Databits=$databits, Stopbits=$stopbits\n\n" {underline bold} proc rd_chid {chid} { set msg [read $chid 3] set listOfLetters [split $msg {} ] set serialIPinHex "" foreach iChar $listOfLetters { scan $iChar "%c" decimalValue set hexValue [format "%02X" $decimalValue ] set hexValue "0x$hexValue" set serialIPinHex "$serialIPinHex $hexValue" } .t1 insert @0,0 "hallo:\"$serialIPinHex\"\n" } proc open_com {} { global com global baudrate global parity global databits global stopbits set com [open com1: r+] fconfigure $com -mode $baudrate,$parity,$databits,$stopbits \ -blocking 0 -translation auto -buffering none -buffersize 12 fileevent $com readable [list rd_chid $com] } open_com # the channel shouldn't be closed before exiting #close $com
effe:Very special, reading data in bunches of 3 ... nevertheless, if you want it that way you can have it. And you can have it better!You cared about setting tabs, a funny cursor and underlined information, but you didn't care about an important thing: Scrolling! Seeing new info arriving at the top and old info disappering into an unknown bottom is awkward. Let me improve the GUI, adding 2 lines, rearranging 4 lines to fit the new style. Yes, you're allowed to introduce your cursor again, if this is what you really want your program to show.
button .b1 -text Exit -command exit pack .b1 -side bottom -fill x -expand true text .t1 -width 85 -font {courier 8} -yscrollcommand ".s1 set" scrollbar .s1 -command ".t1 yview" pack .s1 -side right -fill y -expand true pack .t1 -side left wm title . "Com1 Reader - HexCharacters "Now, add smart autoscolling, it works this way: If the text area is scrolled to the bottom, scroll it to the (new) bottom after inserting a string, keep the position otherwise. Sounds simple, is simple. (This is Tcl.)
proc output str { lassign [.t1 yview] y0 y1 .t1 insert end $str if {$y1 == 1} { .t1 see end } }Rewrite the event callback to make use of all this (and a little bit more). Needs Tcl8.5 or a backport of the binary command since it uses the unsigned "u".
proc rd_chid {chid} { set msg [read $chid 3] binary scan $msg cu* valueList set str "hallo:" foreach value $valueList { append str [format " 0x%02X" $value] } output "$str\n" }I hope I gave enough hints to further improve your serial line debugging.