scan-tool/scanner-tool.tcl
1: #!/usr/bin/wish
2: #
3: #
4:
5: global line
6: set line ""
7:
8: proc draw {TITLE TAG LEN} {
9: global VALUE
10: global VALUE2
11: set Y 2
12: set H 12
13: set R 12
14: frame .$TAG
15: pack .$TAG -side left -fill x
16: label .$TAG.errors1 -text "$TITLE"
17: pack .$TAG.errors1 -side top -fill x -expand yes
18: canvas .$TAG.screen -relief raised -width 320 -height [expr $Y + (($LEN) * $R)]
19: pack .$TAG.screen -side top -fill x
20: set N 1
21: while {$N <= $LEN} {
22: eval .$TAG.screen create rectangle 1 [expr $Y + ($N - 1) * $R] 320 [expr $Y + ($N - 1) * $R + $H] -width 1
23: eval .$TAG.screen create rectangle 1 [expr $Y + ($N - 1) * $R] 160 [expr $Y + ($N - 1) * $R + $H] -width 1 -tags $TAG$N-3 -fill yellow
24: eval .$TAG.screen create rectangle 1 [expr $Y + ($N - 1) * $R] 160 [expr $Y + ($N - 1) * $R + $H] -width 1 -tags $TAG$N-2 -fill green
25: eval .$TAG.screen create rectangle 1 [expr $Y + ($N - 1) * $R] 320 [expr $Y + ($N - 1) * $R + $H] -width 1 -tags $TAG$N -fill red
26: set VALUE($N) 0
27: set VALUE2($N) 0
28: incr N
29: }
30: }
31:
32:
33: proc update {TAG VALUES LEN FAC} {
34: global VALUE
35: global VALUE2
36: set Y 2
37: set H 12
38: set R 12
39: set N 1
40: while {$N <= $LEN} {
41: if {[string is integer [lindex $VALUES $N]]} {
42: set value [expr [expr [lindex $VALUES $N]] * 320 / 16]
43: eval .$TAG.screen coords $TAG$N 1 [expr $Y + ($N - 1) * $R] [expr $value + 1] [expr $Y + ($N - 1) * $R + $H]
44: eval .$TAG.screen coords $TAG$N-2 1 [expr $Y + ($N - 1) * $R] [expr \$VALUE($N) + 1] [expr $Y + ($N - 1) * $R + $H]
45: eval .$TAG.screen coords $TAG$N-3 1 [expr $Y + ($N - 1) * $R] [expr \$VALUE2($N) + 1] [expr $Y + ($N - 1) * $R + $H]
46:
47: if {$value >= $VALUE($N)} {
48: set VALUE($N) $value
49: } else {
50: incr VALUE($N) -1
51: }
52:
53: if {$value >= $VALUE2($N)} {
54: set VALUE2($N) $value
55: } else {
56: set VALUE2($N) [expr $VALUE2($N) - 0.01]
57: }
58:
59: incr N
60: }
61: }
62: }
63:
64: proc Serial_Init {ComPort ComRate} {
65: set iChannel [open $ComPort w+]
66: set rate $ComRate
67: fconfigure $iChannel -mode $ComRate,n,8,1
68: fconfigure $iChannel -blocking 1
69: fconfigure $iChannel -buffering line
70: fileevent $iChannel readable ""
71: return $iChannel
72: }
73:
74: proc rd_chid {chid} {
75: global line
76: set msg [read $chid 1]
77: if {$msg == "\n"} {
78: if {[string match "S;*" $line]} {
79: puts "#$line#"
80: update "b.rssi" [split $line ";"] 16 3
81: }
82: set line ""
83: } else {
84: set line "$line$msg"
85: }
86: }
87:
88:
89: #wm geometry . 320x250
90: wm title . "RCOPEN24 Scanner-Tool"
91:
92: frame .b
93: pack .b -side top -fill x
94:
95: draw "RSSI" "b.rssi" 16
96:
97: if {[lindex $argv 0] != ""} {
98: puts "Open Serial-Port: [lindex $argv 0]"
99:
100: if {[lindex $argv 1] != ""} {
101: set Serial [Serial_Init "[lindex $argv 0]" [lindex $argv 1]]
102: } else {
103: set Serial [Serial_Init "[lindex $argv 0]" 38400]
104: }
105: } else {
106: puts "USAGE: rx-tool COMPORT [BAUD]"
107: exit 1
108: }
109:
110: fileevent $Serial readable [list rd_chid $Serial]
111: