comparison gpf/BIN/xpanel.tcl @ 0:509db1a7b7b8

initial import: leo2moko-r1
author Space Falcon <falcon@ivan.Harhan.ORG>
date Mon, 01 Jun 2015 03:24:05 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:509db1a7b7b8
1 #-----------------------------------------------------------------------------
2 # Project : XPAN
3 # Modul : xpanel.tcl
4 #-----------------------------------------------------------------------------
5 # Copyright 2002 Texas Instruments Berlin, AG
6 # All rights reserved.
7 #
8 # This file is confidential and a trade secret of Texas
9 # Instruments Berlin, AG
10 # The receipt of or possession of this file does not convey
11 # any rights to reproduce or disclose its contents or to
12 # manufacture, use, or sell anything it may describe, in
13 # whole, or in part, without the specific written consent of
14 # Texas Instruments Berlin, AG.
15 #-----------------------------------------------------------------------------
16 #| Purpose : This modul provides the framework of the xPanel frontend and
17 # its main entry point.
18 #-----------------------------------------------------------------------------
19
20
21 #*==== CONSTANTS ===================================================*#
22 set TEXT_DSPL_UPDATE 50
23 set GRAPH_DSPL_UPDATE 50
24
25 #*==== VARIABLES ===================================================*#
26 # initial screen image
27 set m_initscreen_img "initscreen.ppm"
28 set m_screen_img "screen.ppm"
29 set m_displ_type D
30 set m_displtext " "
31 set m_displwidth [expr 21*8]
32
33 #*==== EXPORTS =====================================================*#
34 # function for use in the c-backend:
35
36 # proc set_initparams {x y w h wtitle}
37 # .. send init-params which will be set by TCL (curr. initial size and window title)
38 # proc displ_update {}
39 # .. updates display
40 # proc load_prim {fname}
41 # .. load primitives form a given file named -fname-,
42 # if fname="" a file dialog will be provided
43 # proc set_comm_mode {mode}
44 # .. set communication mode varibale for dialog
45 # proc set_comport {port}
46 # .. sets comport varibale for dialog
47 #*==== IMPLEMENTATION ==============================================*#
48
49 #foreach i [winfo child .] {
50 # catch {destroy $i}
51 #}
52
53 #------------------------------------------
54 # create the frontend
55 #------------------------------------------
56
57 # ... the menu
58 menu .menubar
59 . config -menu .menubar
60 foreach m {File Config Display Cmd} {
61 set $m [menu .menubar.m$m]
62 .menubar add cascade -label $m -menu .menubar.m$m
63 }
64 $File add command -label "Load Layout ..." -command {load_layout ""}
65 $File add separator
66 $File add command -label Exit -command {destroy .}
67 $Config add checkbutton -variable m_setcomm \
68 -label "Configure test interface" -command {enable_setcomm $m_setcomm}
69 set m_comm_menu1 [$Config add command -label "Change communication mode ..." -command {dlg_comm_mode}]
70 set m_comm_menu2 [$Config add command -label "Reset test interface" -command {c_reset}]
71 $Display add radio -variable m_displ_type -value T \
72 -label Text -command {c_setdispl T}
73 $Display add radio -variable m_displ_type -value G \
74 -label Graphical -command {c_setdispl G}
75 $Display add radio -variable m_displ_type -value D \
76 -label "\[Disabled\]" -command {c_setdispl D}
77 $Display add separator
78 $Display add command -label "Zoom in" -command {c_zoom 1}
79 $Display add command -label "Zoom out" -command {c_zoom 0}
80 $Cmd add command -label "Input system primitive ..." -command input_prim
81 $Cmd add command -label "Load system primitives ..." -command {load_prim ""}
82 $Cmd add separator
83 $Cmd add command -label "Input AT command ..." -command input_at
84 $Cmd add command -label "Load AT commands ..." -command load_at
85
86 # ... the frame
87 frame .frame -relief flat
88 pack .frame -side top -fill y -anchor center
89
90 catch {file copy -force $m_initscreen_img $m_screen_img}
91 catch {file attributes $m_screen_img -readonly 0}
92
93 # set tcl_traceExec 3
94
95 #image create bitmap main_icon -file "xpan.bmp"
96 #wm iconbitmap . main_icon
97
98
99
100 #------------------------------------------
101 # define tcl functions
102 #------------------------------------------
103
104 ############################################################
105 # GUI RELATED FUNCTIONS
106 ############################################################
107
108
109 ############################################
110 # load_layout #
111 ############################################
112 # PURPOSE : called to load a new layout
113 #
114 # PARAM: lo_fname ... name of layout file
115 #
116 # RETURNS:
117 ############################################
118 proc load_layout {lo_fname} {
119 global m_initscreen_img
120 global m_displtext
121
122 if {$lo_fname == ""} {
123 set lo_fname [tk_getOpenFile -filetypes {{{"Layout-Files"} {*lo.tcl}}} \
124 -title "Please choose an Layout-File:"]
125 }
126
127 if {$lo_fname != ""} {
128 c_set_lofile $lo_fname
129
130 puts [format "loading layout from %s ..." $lo_fname]
131
132 # special layout
133 if {[winfo exists .keys]} {
134 foreach i [winfo child .keys] {
135 catch {destroy $i}
136 }
137 catch {destroy .keys}
138 }
139 source $lo_fname
140
141 # the "screen"
142 catch {image delete screen}
143 catch {destroy .frame.screen}
144 catch {image create photo screen -file $m_initscreen_img}
145 if { [catch {label .frame.screen -image screen -font systemfixed \
146 -background $DISPL_BG -foreground $DISPL_FG }] } {
147 label .frame.screen -text $m_displtext -font systemfixed \
148 -background $DISPL_BG -foreground $DISPL_FG
149 }
150 pack .frame.screen -side top -anchor w
151 }
152 }
153 #------------------------------------------
154
155
156 ############################################
157 # load_at #
158 ############################################
159 # PURPOSE : called to open a file containing
160 # AT-Command strings and execute
161 # them
162 #
163 # PARAMS:
164 #
165 # RETURNS:
166 ############################################
167 proc load_at {} {
168 set fname [tk_getOpenFile -filetypes {{{"At-Command-Files"} {.atc}}} \
169 -title "Please choose an AT-Command-File:"]
170
171 if {$fname != ""} {
172 set file [open $fname r]
173 while {![eof $file]} {
174 c_exec_at [gets $file] 0
175 }
176 close $file
177 }
178 }
179 #------------------------------------------
180
181
182 ############################################
183 # set_usart_config #
184 ############################################
185 # PURPOSE : called to set the usart
186 # configuration shown in the GUI
187 #
188 # PARAMS: port .. com port used
189 # baudrate ...
190 # flowctrl ... N,R,...
191 #
192 # RETURNS:
193 ############################################
194 proc set_usart_config {port baudrate flowctrl} {
195 global modeinput_dlg
196 set modeinput_dlg(port) $port
197 set modeinput_dlg(baudrate) $baudrate
198 set modeinput_dlg(flowctrl) $flowctrl
199 }
200 #------------------------------------------
201
202
203 ############################################
204 # set_hostname #
205 ############################################
206 # PURPOSE : called to set the hostname
207 # shown in the GUI
208 #
209 # PARAMS: hostname ... host string
210 #
211 # RETURNS:
212 ############################################
213 proc set_host {hostname} {
214 global modeinput_dlg
215 set modeinput_dlg(host) $hostname
216 }
217 #------------------------------------------
218
219
220 ############################################
221 # enable_setcomm #
222 ############################################
223 # PURPOSE : called to enable/disable setting
224 # of tst communication
225 #
226 # PARAMS: enable ... 0 or 1
227 #
228 # RETURNS:
229 ############################################
230 proc enable_setcomm {enable} {
231 global m_setcomm
232
233 set m_setcomm $enable
234
235 c_enable_setcom $enable
236 if {$enable == 1} {
237 .menubar.mConfig entryconfigure 2 -state normal
238 .menubar.mConfig entryconfigure 3 -state normal
239 c_reset
240 } else {
241 .menubar.mConfig entryconfigure 2 -state disabled
242 .menubar.mConfig entryconfigure 3 -state disabled
243 }
244 }
245 #------------------------------------------
246
247
248
249 ############################################
250 # set_comm_mode #
251 ############################################
252 # PURPOSE : called to set the communication
253 # mode shown in the GUI
254 #
255 # PARAMS: mode ... SOCKET, REAL, SIM
256 #
257 # RETURNS:
258 ############################################
259 proc set_comm_mode {mode} {
260 global modeinput_dlg
261 set modeinput_dlg(mode) $mode
262 }
263 #------------------------------------------
264
265
266 ############################################
267 # dlg_comm_mode #
268 ############################################
269 # PURPOSE : called to show a dialog
270 # for communication settings
271 #
272 # PARAMS:
273 #
274 # RETURNS:
275 ############################################
276 proc dlg_comm_mode {} {
277 global modeinput_dlg
278 set f .modeinput_dlg
279 if [Dialog_Create $f "Communication mode choice" -borderwidth 10] {
280 message $f.msg -text "Please select the mode to use:" -aspect 1000
281 set m [frame $f.modes]
282 radiobutton $m.radioSOCKET -text "Sockets " -variable modeinput_dlg(mode) \
283 -value SOCKET
284 radiobutton $m.radioREAL -text "USART (COM-port) " -variable modeinput_dlg(mode) \
285 -value REAL
286 radiobutton $m.radioSIM -text "USART (simulation)" -variable modeinput_dlg(mode) \
287 -value SIM
288 pack $m.radioSOCKET $m.radioREAL $m.radioSIM -side left -anchor n
289 set b [frame $f.buttons -borderwidth 5]
290 set s [frame $f.settings -relief sunken]
291 set x [frame $f.xtras]
292 checkbutton $x.check_pcon -text "Use PCON" -variable modeinput_dlg(pcon)
293 checkbutton $x.old_tstheader -text "Use old TST-Header" -variable modeinput_dlg(oldtst)
294 pack $x.check_pcon $x.old_tstheader -side left -anchor n
295
296 pack $f.msg -side top
297 pack $f.modes -side top
298 pack $f.settings -side top
299 pack $f.xtras -side top
300 pack $f.buttons -side bottom -anchor w
301
302 button $b.ok -text Ok -command {set modeinput_dlg(ok) 1} -default active
303 button $b.cancel -text Cancel \
304 -command {set modeinput_dlg(ok) 0}
305 pack $b.ok -side left
306 pack $b.cancel -side right
307
308 foreach i [winfo child $f] {
309 foreach j [winfo child $i] {
310 bind $j <Return> {set modeinput_dlg(ok) 1}
311 bind $j <Escape> {set modeinput_dlg(ok) 0}
312 }
313 bind $i <Return> {set modeinput_dlg(ok) 1}
314 bind $i <Escape> {set modeinput_dlg(ok) 0}
315 }
316 bind $f <Return> {set modeinput_dlg(ok) 1}
317 bind $f <Escape> {set modeinput_dlg(ok) 0}
318 }
319 # save old settings
320 set mode $modeinput_dlg(mode)
321 catch {set hostname $modeinput_dlg(host)}
322 catch {
323 set port $modeinput_dlg(port)
324 set baudrate $modeinput_dlg(baudrate)
325 set flowctrl $modeinput_dlg(flowctrl)
326 }
327
328 set s $f.settings
329 set modeinput_dlg(ok) -1
330
331 focus $f
332 catch {tkwait visibility $top}
333 catch {grab $f}
334 set oldmode {}
335 while {$modeinput_dlg(ok)==-1 && [winfo exists $f]} {
336 after 10
337 update
338
339 if {$modeinput_dlg(mode) != $oldmode} {
340 foreach i [winfo child $s] {
341 catch {destroy $i}
342 }
343
344 switch $modeinput_dlg(mode) {
345 SOCKET {
346 message $s.msg -text "Hostname:" -aspect 1000
347 entry $s.host -width 30 -textvariable modeinput_dlg(host)
348 pack $s.msg $s.host -side left -anchor w
349 message $s.msg2 -text "Port:" -aspect 1000
350 entry $s.socket_port -width 5 -textvariable modeinput_dlg(socket_port)
351 pack $s.msg2 $s.socket_port -side left -anchor w
352 }
353 REAL {
354 message $s.msg -text "COM-Port:" -aspect 1000
355 entry $s.comport -width 2 -textvariable modeinput_dlg(port)
356 pack $s.msg $s.comport -side left -anchor w
357 message $s.msg2 -text "Baudrate:" -aspect 1000
358 entry $s.baudrate -width 8 -textvariable modeinput_dlg(baudrate)
359 pack $s.msg2 $s.baudrate -side left -anchor w
360 message $s.msg3 -text "Flowcontrol:" -aspect 1000
361 entry $s.flowctrl -width 2 -textvariable modeinput_dlg(flowctrl)
362 pack $s.msg3 $s.flowctrl -side left -anchor w
363 }
364 SIM {
365 checkbutton $s.checkSTX -text "STX" -variable modeinput_dlg(stx)
366 pack $s.checkSTX -side left -anchor w
367 }
368 }
369 foreach j [winfo child $s] {
370 bind $j <Return> {set modeinput_dlg(ok) 1}
371 bind $j <Escape> {set modeinput_dlg(ok) 0}
372 }
373 set oldmode $modeinput_dlg(mode)
374 }
375 }
376 if {![winfo exists $f]} {
377 set modeinput_dlg(ok) 0
378 }
379 catch {grab release $f}
380
381 Dialog_Dismiss $f
382 if {$modeinput_dlg(ok)==0} {
383 # restore old settings
384 set modeinput_dlg(mode) $mode
385 catch {set modeinput_dlg(host) $hostname}
386 catch {
387 set modeinput_dlg(port) $port
388 set modeinput_dlg(baudrate) $baudrate
389 set modeinput_dlg(flowctrl) $flowctrl
390 }
391 return
392 }
393 c_set_comm_mode $modeinput_dlg(mode) $modeinput_dlg(stx)
394 switch $modeinput_dlg(mode) {
395 SOCKET { c_config_socket $modeinput_dlg(host) $modeinput_dlg(socket_port) }
396 REAL { c_config_usart $modeinput_dlg(port) $modeinput_dlg(baudrate) $modeinput_dlg(flowctrl) }
397 SIM { c_config_usart $modeinput_dlg(port) $modeinput_dlg(baudrate) $modeinput_dlg(flowctrl) }
398 }
399 c_setpcon $modeinput_dlg(pcon)
400 c_setoldtst $modeinput_dlg(oldtst)
401 }
402 #------------------------------------------
403
404
405 ############################################
406 # input_at #
407 ############################################
408 # PURPOSE : called to show a dialog
409 # for input of at-command strings
410 #
411 # PARAMS:
412 #
413 # RETURNS:
414 ############################################
415 proc input_at {} {
416 global atinput_dlg
417 set f .atinput_dlg
418 if [Dialog_Create $f "AT commands" -borderwidth 10] {
419 message $f.msg -text "Please input an AT command:" -aspect 1000
420 entry $f.entry -textvariable atinput_dlg(result)
421 set b [frame $f.buttons]
422 pack $f.msg $f.entry $f.buttons -side top -fill x
423 pack $f.entry -pady 5
424
425 checkbutton $f.check_raw -text "Use raw mode" -variable atinput_dlg(raw)
426 pack $f.check_raw -side left -anchor w
427
428 button $b.ok -text SEND -command {set atinput_dlg(ok) 1}
429 button $b.cancel -text Cancel \
430 -command {set atinput_dlg(ok) 0}
431 pack $b.ok -side left
432 pack $b.cancel -side right
433 bind $f.entry <Return> {set atinput_dlg(ok) 1 ; break}
434 bind $f.entry <Escape> {set atinput_dlg(ok) 0 ; break}
435 }
436 set atinput_dlg(ok) 0
437 Dialog_Wait $f atinput_dlg(ok) $f.entry
438 Dialog_Dismiss $f
439 if {$atinput_dlg(ok)} {
440 c_exec_at $atinput_dlg(result) $atinput_dlg(raw)
441 }
442 }
443 #------------------------------------------
444
445
446 ############################################
447 # load_prim #
448 ############################################
449 # PURPOSE : called to open a file containing
450 # ATsystem primitives and execute
451 # them
452 #
453 # PARAMS: fname .. name of primitive file,
454 # if empty -> dialog will
455 # be shown
456 #
457 # RETURNS:
458 ############################################
459 proc load_prim {fname} {
460 if {$fname == ""} {
461 set fname [tk_getOpenFile -filetypes {{{"Primitive-Files"} {.pri}}} \
462 -title "Please choose an Primitive-File:"]
463 }
464
465 if {$fname != ""} {
466 set file [open $fname r]
467 if {![eof $file]} {
468 puts [format "executing primitives from %s ..." $fname]
469 }
470 while {![eof $file]} {
471 set receiver [gets $file]
472 set slist [split $receiver]
473 puts $slist
474 puts [lindex $slist 0]
475 if {[lindex $slist 0]=="sleep"} {
476 after [lindex $slist 1]
477 } else {
478 c_send_prim $receiver [gets $file]
479 }
480 }
481 close $file
482 }
483 }
484 #------------------------------------------
485
486
487 ############################################
488 # input_prim #
489 ############################################
490 # PURPOSE : called to show a dialog
491 # for input of system primitives
492 #
493 # PARAMS:
494 #
495 # RETURNS:
496 ############################################
497 proc input_prim {} {
498 global priminput_dlg
499 set f .priminput_dlg
500 if [Dialog_Create $f "Primitives" -borderwidth 10] {
501 message $f.msg -text "Please input a receiver:" -aspect 1000
502 entry $f.entry -width 5 -textvariable priminput_dlg(receiver)
503 $f.entry insert 0 MMI
504 message $f.msg2 -text "Please input a primitive:" -aspect 1000
505 entry $f.entry2 -width 0 -textvariable priminput_dlg(prim)
506 $f.entry2 insert 0 "TRACECLASS FF"
507 set b [frame $f.buttons]
508 pack $f.msg $f.entry -side top
509 pack $f.msg2 $f.entry2 $f.buttons -side top -fill x
510 pack $f.entry -pady 5
511 pack $f.entry2 -pady 7
512 button $b.ok -text SEND -command {set priminput_dlg(ok) 1}
513 button $b.cancel -text Cancel \
514 -command {set priminput_dlg(ok) 0}
515 pack $b.ok -side left
516 pack $b.cancel -side right
517 bind $f.entry <Return> {set priminput_dlg(ok) 1 ; break}
518 bind $f.entry <Escape> {set priminput_dlg(ok) 0 ; break}
519 }
520 set priminput_dlg(ok) 0
521 Dialog_Wait $f priminput_dlg(ok) $f.entry
522 Dialog_Dismiss $f
523 if {$priminput_dlg(ok)} {
524 c_send_prim $priminput_dlg(receiver) $priminput_dlg(prim)
525 }
526 }
527 #------------------------------------------
528
529
530 ############################################
531 # set_windim #
532 ############################################
533 # PURPOSE : set dimension of GUI-Window
534 #
535 # PARAMS:
536 #
537 # RETURNS:
538 ############################################
539 proc set_windim {x y w h} {
540 wm geometry . [format "%ix%i+%i+%i" $w $h $x $y]
541 #wm geometry . [format "+%i+%i" $x $y]
542 }
543 #------------------------------------------
544
545 ############################################
546 # set_initparams #
547 ############################################
548 # PURPOSE : called from c-backend to
549 # send init-params which will be set by TCL
550 # (curr. initial size and window title)
551 #
552 # PARAMS:
553 #
554 # RETURNS:
555 ############################################
556 proc set_initparams {x y w h wtitle} {
557 after 500 set_windim $x $y $w $h
558 after 500 wm title . $wtitle
559 after 500 wm deiconify .
560 }
561 #------------------------------------------
562
563 ############################################
564 # send_windim #
565 ############################################
566 # PURPOSE : called to send
567 # dimension of GUI-Window to
568 # c-backend
569 #
570 # PARAMS:
571 #
572 # RETURNS:
573 ############################################
574 proc send_windim {} {
575 set geo [wm geometry .]
576 c_windim $geo
577 }
578 bind .menubar.mFile <Destroy> {send_windim}
579 #------------------------------------------
580
581
582
583
584
585 ############################################################
586 # DISPLAY RELATED FUNCTIONS
587 ############################################################
588
589
590 ############################################
591 # displ_text #
592 ############################################
593 # PURPOSE : asks c-backend for current
594 # content of text display and
595 # shows it
596 #
597 # PARAMS:
598 #
599 # RETURNS:
600 ############################################
601 proc displ_text {} {
602 global m_displ_type
603 global m_displtext
604 global m_displwidth
605
606 set m_displtext [c_get_displtext]
607 catch [.frame.screen configure -image "" -text $m_displtext]
608 }
609 #------------------------------------------
610
611
612 ############################################
613 # displ_img #
614 ############################################
615 # PURPOSE : asks c-backend for current
616 # display image to be used and
617 # shows it
618 #
619 # PARAMS:
620 #
621 # RETURNS:
622 ############################################
623 proc displ_img {} {
624 catch [.frame.screen configure -image screen]
625 }
626 #------------------------------------------
627
628
629 ############################################
630 # displ_update #
631 ############################################
632 # PURPOSE : periodically called to update
633 # the display screen depending
634 # on set display mode (m_displ_type)
635 #
636 # PARAMS:
637 #
638 # RETURNS:
639 ############################################
640 proc displ_update {} {
641 global m_displ_type
642 global m_displtext
643 global m_displwidth
644 global GRAPH_DSPL_UPDATE
645 global TEXT_DSPL_UPDATE
646
647 switch $m_displ_type {
648 "T" {
649 displ_text
650 after $TEXT_DSPL_UPDATE displ_update
651 }
652 "D" {
653 displ_text
654 # after $TEXT_DSPL_UPDATE displ_update
655 }
656 "G" {
657 displ_img
658 after $GRAPH_DSPL_UPDATE displ_update
659 }
660 }
661 }
662 #------------------------------------------
663
664
665
666
667
668
669 ############################################################
670 # INTERNAL FUNCTIONS
671 ############################################################
672
673
674 ############################################
675 # Dialog_Create #
676 ############################################
677 # PURPOSE : internal function for
678 # creating a dialog window
679 #
680 # PARAMS: top ... variable for dialog window
681 # title ... dialog title
682 # args ... argument to dialog
683 #
684 # RETURNS:
685 ############################################
686 proc Dialog_Create {top title args} {
687 global dialog
688 if [winfo exists $top] {
689 switch -- [wm state $top] {
690 normal {
691 # Raise a buried window
692 raise $top
693 }
694 withdrawn -
695 iconified {
696 # Open and restore geometry
697 wm deiconify $top
698 catch {wm geometry $top $dialog(geo,$top)}
699 }
700 }
701 return 0
702 } else {
703 eval {toplevel $top} $args
704 wm title $top $title
705 set g [wm geometry .]
706 set pos [string first + $g]
707 set g2 [string range $g $pos [string length $g]]
708
709 catch {wm geometry $top $g2}
710 return 1
711 }
712 }
713 #------------------------------------------
714
715
716 ############################################
717 # Dialog_Wait #
718 ############################################
719 # PURPOSE : internal function for
720 # waiting for state of a varibale
721 # of a modal dialog
722 #
723 # PARAMS: top ... variable of dialog window
724 # varName ... variable to be checked
725 # focus ... sub window to get focus
726 #
727 # RETURNS:
728 ############################################
729 proc Dialog_Wait {top varName {focus {}}} {
730 upvar $varName var
731
732 # Poke the variable if the user nukes the window
733 bind $top <Destroy> [list set $varName $var]
734
735 # Grab focus for the dialog
736 if {[string length $focus] == 0} {
737 set focus $top
738 }
739 set old [focus -displayof $top]
740 focus $focus
741 catch {tkwait visibility $top}
742 catch {grab $top}
743
744 # Wait for the dialog to complete
745 tkwait variable $varName
746 catch {grab release $top}
747 focus $old
748 }
749 #------------------------------------------
750
751
752 ############################################
753 # Dialog_Dismiss #
754 ############################################
755 # PURPOSE : internal function for
756 # closing a dialog window
757 #
758 # PARAMS: top ... variable of dialog window
759 #
760 # RETURNS:
761 ############################################
762 proc Dialog_Dismiss {top} {
763 global dialog
764 # Save current size and position
765 catch {
766 # window may have been deleted
767 set dialog(geo,$top) [wm geometry $top]
768 wm withdraw $top
769 }
770 }
771 #------------------------------------------
772