diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gpf/BIN/xpanel.tcl	Mon Jun 01 03:24:05 2015 +0000
@@ -0,0 +1,772 @@
+#----------------------------------------------------------------------------- 
+#  Project :  XPAN
+#  Modul   :  xpanel.tcl
+#----------------------------------------------------------------------------- 
+#  Copyright 2002 Texas Instruments Berlin, AG 
+#                 All rights reserved. 
+# 
+#                 This file is confidential and a trade secret of Texas 
+#                 Instruments Berlin, AG 
+#                 The receipt of or possession of this file does not convey 
+#                 any rights to reproduce or disclose its contents or to 
+#                 manufacture, use, or sell anything it may describe, in 
+#                 whole, or in part, without the specific written consent of 
+#                 Texas Instruments Berlin, AG. 
+#----------------------------------------------------------------------------- 
+#|  Purpose :	This modul provides the framework of the xPanel frontend and
+#              its main entry point.  
+#----------------------------------------------------------------------------- 
+
+
+#*==== CONSTANTS ===================================================*#
+set TEXT_DSPL_UPDATE  50
+set GRAPH_DSPL_UPDATE  50
+
+#*==== VARIABLES ===================================================*#
+# initial screen image
+set m_initscreen_img "initscreen.ppm" 
+set m_screen_img "screen.ppm" 
+set m_displ_type D
+set m_displtext "                            "
+set m_displwidth [expr 21*8]
+
+#*==== EXPORTS =====================================================*#
+# function for use in the c-backend:
+
+# proc set_initparams {x y w h wtitle} 
+#   .. send init-params which will be set by TCL (curr. initial size and window title) 
+# proc displ_update {} 
+#   .. updates display
+# proc load_prim {fname} 
+#   .. load primitives form a given file named -fname-, 
+#   if fname="" a file dialog will be provided
+# proc set_comm_mode {mode}
+#	.. set communication mode varibale for dialog
+# proc set_comport {port}
+# .. sets comport varibale for dialog
+#*==== IMPLEMENTATION ==============================================*#
+
+#foreach i [winfo child .] {
+#	catch {destroy $i}
+#}
+
+#------------------------------------------
+# create the frontend
+#------------------------------------------
+
+# ... the menu
+menu .menubar
+. config -menu .menubar
+foreach m {File Config Display Cmd} {
+  set $m [menu .menubar.m$m]
+  .menubar add cascade -label $m -menu .menubar.m$m
+}
+$File add command -label "Load Layout ..." -command {load_layout ""}
+$File add separator
+$File add command -label Exit -command {destroy .}
+$Config add checkbutton -variable m_setcomm \
+  -label "Configure test interface" -command {enable_setcomm $m_setcomm}
+set m_comm_menu1 [$Config add command -label "Change communication mode ..." -command {dlg_comm_mode}]
+set m_comm_menu2 [$Config add command -label "Reset test interface" -command {c_reset}]
+$Display add radio -variable m_displ_type -value T \
+  -label Text -command {c_setdispl T}
+$Display add radio -variable m_displ_type -value G \
+  -label Graphical -command {c_setdispl G}
+$Display add radio -variable m_displ_type -value D \
+  -label "\[Disabled\]" -command {c_setdispl D}
+$Display add separator 
+$Display add command -label "Zoom in" -command {c_zoom 1} 
+$Display add command -label "Zoom out" -command {c_zoom 0} 
+$Cmd add command -label "Input system primitive ..." -command input_prim  
+$Cmd add command -label "Load system primitives ..." -command {load_prim ""}
+$Cmd add separator
+$Cmd add command -label "Input AT command ..." -command input_at  
+$Cmd add command -label "Load AT commands ..." -command load_at
+
+# ... the frame
+frame .frame -relief flat 
+pack .frame -side top -fill y -anchor center
+
+catch {file copy -force $m_initscreen_img $m_screen_img}
+catch {file attributes $m_screen_img -readonly 0}
+
+# set tcl_traceExec 3
+
+#image create bitmap main_icon -file "xpan.bmp"
+#wm iconbitmap . main_icon 
+
+
+
+#------------------------------------------
+# define tcl functions
+#------------------------------------------
+
+############################################################
+# GUI RELATED FUNCTIONS
+############################################################
+
+
+############################################
+# load_layout                              #
+############################################
+# PURPOSE : called to load a new layout 
+#
+# PARAM: lo_fname ... name of layout file
+#
+# RETURNS:
+############################################
+proc load_layout {lo_fname} {
+  global m_initscreen_img
+  global m_displtext
+
+  if {$lo_fname == ""} {
+    set lo_fname [tk_getOpenFile -filetypes {{{"Layout-Files"} {*lo.tcl}}} \
+              -title "Please choose an Layout-File:"]
+  }
+
+  if {$lo_fname != ""} {
+    c_set_lofile $lo_fname
+
+    puts [format "loading layout from %s ..." $lo_fname]
+
+    # special layout
+    if {[winfo exists .keys]} {
+      foreach i [winfo child .keys] {
+      	catch {destroy $i}
+      }
+      catch {destroy .keys}
+    }
+    source $lo_fname
+    
+    # the "screen"
+    catch {image delete screen}
+    catch {destroy .frame.screen}
+    catch {image create photo screen -file $m_initscreen_img} 
+    if { [catch {label .frame.screen -image screen -font systemfixed \
+                 -background $DISPL_BG -foreground $DISPL_FG }] } {
+      label .frame.screen -text $m_displtext -font systemfixed \
+        -background $DISPL_BG -foreground $DISPL_FG 
+    }
+    pack .frame.screen -side top -anchor w
+  }
+}
+#------------------------------------------
+
+
+############################################
+# load_at                                  #
+############################################
+# PURPOSE : called to open a file containing
+#           AT-Command strings and execute 
+#           them 
+#
+# PARAMS: 
+#
+# RETURNS:
+############################################
+proc load_at {} {
+  set fname [tk_getOpenFile -filetypes {{{"At-Command-Files"} {.atc}}} \
+              -title "Please choose an AT-Command-File:"]
+  
+  if {$fname != ""} {
+    set file [open $fname r]
+    while {![eof $file]} { 
+      c_exec_at [gets $file] 0
+    }
+    close $file
+  }
+}
+#------------------------------------------
+
+
+############################################
+# set_usart_config                         #
+############################################
+# PURPOSE : called to set the usart 
+#           configuration shown in the GUI
+#
+# PARAMS: port .. com port used
+#         baudrate ...
+#         flowctrl ... N,R,...
+#
+# RETURNS:
+############################################
+proc set_usart_config {port baudrate flowctrl} {
+ 	global modeinput_dlg
+  set modeinput_dlg(port) $port
+  set modeinput_dlg(baudrate) $baudrate
+  set modeinput_dlg(flowctrl) $flowctrl
+}
+#------------------------------------------
+
+
+############################################
+# set_hostname                             #
+############################################
+# PURPOSE : called to set the hostname 
+#           shown in the GUI
+#
+# PARAMS: hostname ... host string
+#
+# RETURNS:
+############################################
+proc set_host {hostname} {
+  global modeinput_dlg
+  set modeinput_dlg(host) $hostname
+}
+#------------------------------------------
+
+
+############################################
+# enable_setcomm                           #
+############################################
+# PURPOSE : called to enable/disable setting
+#           of tst communication
+#
+# PARAMS:  enable ... 0 or 1
+#
+# RETURNS:
+############################################
+proc enable_setcomm {enable} {
+  global m_setcomm 
+
+  set m_setcomm $enable
+
+  c_enable_setcom $enable
+  if {$enable == 1} {
+    .menubar.mConfig entryconfigure 2 -state normal
+    .menubar.mConfig entryconfigure 3 -state normal
+    c_reset
+  } else {
+    .menubar.mConfig entryconfigure 2 -state disabled
+    .menubar.mConfig entryconfigure 3 -state disabled
+  }
+}
+#------------------------------------------
+
+
+
+############################################
+# set_comm_mode                            #
+############################################
+# PURPOSE : called to set the communication 
+#           mode shown in the GUI
+#
+# PARAMS: mode ... SOCKET, REAL, SIM
+#
+# RETURNS:
+############################################
+proc set_comm_mode {mode} {
+  global modeinput_dlg
+  set modeinput_dlg(mode) $mode
+}
+#------------------------------------------
+
+
+############################################
+# dlg_comm_mode                            #
+############################################
+# PURPOSE : called to show a dialog
+#           for communication settings
+#
+# PARAMS: 
+#
+# RETURNS:
+############################################
+proc dlg_comm_mode {} {
+  global modeinput_dlg
+  set f .modeinput_dlg
+  if [Dialog_Create $f "Communication mode choice" -borderwidth 10] {
+    message $f.msg -text "Please select the mode to use:" -aspect 1000
+    set m [frame $f.modes]
+    radiobutton $m.radioSOCKET -text "Sockets " -variable modeinput_dlg(mode) \
+      -value SOCKET
+    radiobutton $m.radioREAL -text "USART (COM-port) " -variable modeinput_dlg(mode) \
+      -value REAL
+    radiobutton $m.radioSIM -text "USART (simulation)" -variable modeinput_dlg(mode) \
+      -value SIM
+    pack $m.radioSOCKET $m.radioREAL $m.radioSIM -side left -anchor n
+    set b [frame $f.buttons -borderwidth 5]
+    set s [frame $f.settings -relief sunken]
+    set x [frame $f.xtras]
+    checkbutton $x.check_pcon -text "Use PCON" -variable modeinput_dlg(pcon)
+    checkbutton $x.old_tstheader -text "Use old TST-Header" -variable modeinput_dlg(oldtst)
+    pack $x.check_pcon $x.old_tstheader -side left -anchor n 
+
+	  pack $f.msg -side top
+	  pack $f.modes -side top
+    pack $f.settings -side top 
+    pack $f.xtras -side top
+    pack $f.buttons -side bottom -anchor w
+
+ 	  button $b.ok -text Ok -command {set modeinput_dlg(ok) 1} -default active
+    button $b.cancel -text Cancel \
+	    -command {set modeinput_dlg(ok) 0}
+  	pack $b.ok -side left
+	  pack $b.cancel -side right
+
+    foreach i [winfo child $f] {
+      foreach j [winfo child $i] {
+	  	  bind $j <Return> {set modeinput_dlg(ok) 1}
+  	  	bind $j <Escape> {set modeinput_dlg(ok) 0}
+      }
+   	  bind $i <Return> {set modeinput_dlg(ok) 1}
+    	bind $i <Escape> {set modeinput_dlg(ok) 0}
+    }
+	  bind $f <Return> {set modeinput_dlg(ok) 1}
+  	bind $f <Escape> {set modeinput_dlg(ok) 0}
+  }
+  # save old settings
+  set mode $modeinput_dlg(mode)
+  catch {set hostname $modeinput_dlg(host)}
+  catch {
+    set port $modeinput_dlg(port)
+    set baudrate $modeinput_dlg(baudrate)
+    set flowctrl $modeinput_dlg(flowctrl)
+  }
+
+  set s $f.settings
+	set modeinput_dlg(ok) -1
+
+  focus $f
+  catch {tkwait visibility $top}
+	catch {grab $f}
+  set oldmode {}
+  while {$modeinput_dlg(ok)==-1 && [winfo exists $f]} {
+    after 10
+    update 
+
+    if {$modeinput_dlg(mode) != $oldmode} {
+      foreach i [winfo child $s] {
+        catch {destroy $i}
+      }
+
+      switch $modeinput_dlg(mode) {
+		    SOCKET {
+          message $s.msg -text "Hostname:" -aspect 1000
+          entry $s.host -width 30 -textvariable modeinput_dlg(host)
+          pack $s.msg $s.host -side left -anchor w
+          message $s.msg2 -text "Port:" -aspect 1000
+	  	    entry $s.socket_port -width 5 -textvariable modeinput_dlg(socket_port)
+          pack $s.msg2 $s.socket_port -side left -anchor w
+		    }
+  	  	REAL {
+          message $s.msg -text "COM-Port:" -aspect 1000
+	  	    entry $s.comport -width 2 -textvariable modeinput_dlg(port)
+          pack $s.msg $s.comport -side left -anchor w
+          message $s.msg2 -text "Baudrate:" -aspect 1000
+	  	    entry $s.baudrate -width 8 -textvariable modeinput_dlg(baudrate)
+          pack $s.msg2 $s.baudrate -side left -anchor w
+          message $s.msg3 -text "Flowcontrol:" -aspect 1000
+	  	    entry $s.flowctrl -width 2 -textvariable modeinput_dlg(flowctrl)
+          pack $s.msg3 $s.flowctrl -side left -anchor w
+        }
+  	  	SIM {
+          checkbutton $s.checkSTX -text "STX" -variable modeinput_dlg(stx)
+          pack $s.checkSTX -side left -anchor w
+        }
+	    }
+      foreach j [winfo child $s] {
+	   	  bind $j <Return> {set modeinput_dlg(ok) 1}
+  	    bind $j <Escape> {set modeinput_dlg(ok) 0}
+      }
+      set oldmode $modeinput_dlg(mode)
+    }
+  }
+  if {![winfo exists $f]} {
+    set modeinput_dlg(ok) 0
+  }
+	catch {grab release $f}
+
+  Dialog_Dismiss $f
+  if {$modeinput_dlg(ok)==0} {
+    # restore old settings
+    set modeinput_dlg(mode) $mode 
+    catch {set modeinput_dlg(host) $hostname}
+    catch {
+      set modeinput_dlg(port) $port 
+      set modeinput_dlg(baudrate) $baudrate
+      set modeinput_dlg(flowctrl) $flowctrl
+    }
+    return
+  }
+  c_set_comm_mode $modeinput_dlg(mode) $modeinput_dlg(stx) 
+  switch $modeinput_dlg(mode) {
+    SOCKET { c_config_socket $modeinput_dlg(host) $modeinput_dlg(socket_port) }
+    REAL { c_config_usart $modeinput_dlg(port) $modeinput_dlg(baudrate) $modeinput_dlg(flowctrl) }
+    SIM { c_config_usart $modeinput_dlg(port) $modeinput_dlg(baudrate) $modeinput_dlg(flowctrl) }
+  }
+  c_setpcon $modeinput_dlg(pcon)
+  c_setoldtst $modeinput_dlg(oldtst)
+}
+#------------------------------------------
+
+
+############################################
+# input_at                                 #
+############################################
+# PURPOSE : called to show a dialog
+#           for input of at-command strings
+#
+# PARAMS: 
+#
+# RETURNS:
+############################################
+proc input_at {} {
+	global atinput_dlg
+	set f .atinput_dlg
+	if [Dialog_Create $f "AT commands" -borderwidth 10] {
+		message $f.msg -text "Please input an AT command:" -aspect 1000
+		entry $f.entry -textvariable atinput_dlg(result)
+		set b [frame $f.buttons]
+		pack $f.msg $f.entry $f.buttons -side top -fill x
+		pack $f.entry -pady 5
+
+    checkbutton $f.check_raw -text "Use raw mode" -variable atinput_dlg(raw)
+    pack $f.check_raw -side left -anchor w
+
+		button $b.ok -text SEND -command {set atinput_dlg(ok) 1}
+		button $b.cancel -text Cancel \
+			-command {set atinput_dlg(ok) 0}
+		pack $b.ok -side left
+		pack $b.cancel -side right
+		bind $f.entry <Return> {set atinput_dlg(ok) 1 ; break}
+		bind $f.entry <Escape> {set atinput_dlg(ok) 0 ; break}
+	}
+	set atinput_dlg(ok) 0
+	Dialog_Wait $f atinput_dlg(ok) $f.entry
+	Dialog_Dismiss $f
+	if {$atinput_dlg(ok)} {
+    c_exec_at $atinput_dlg(result) $atinput_dlg(raw)
+	} 
+}
+#------------------------------------------
+
+
+############################################
+# load_prim                                #
+############################################
+# PURPOSE : called to open a file containing
+#           ATsystem primitives and execute 
+#           them 
+#
+# PARAMS: fname .. name of primitive file,
+#                  if empty -> dialog will 
+#                  be shown
+#
+# RETURNS:
+############################################
+proc load_prim {fname} {
+  if {$fname == ""} {
+    set fname [tk_getOpenFile -filetypes {{{"Primitive-Files"} {.pri}}} \
+              -title "Please choose an Primitive-File:"]
+  }
+
+  if {$fname != ""} {
+    set file [open $fname r]
+    if {![eof $file]} {
+      puts [format "executing primitives from %s ..." $fname]
+    }
+    while {![eof $file]} { 
+      set receiver [gets $file]
+      set slist [split $receiver]
+      puts $slist
+      puts [lindex $slist 0]
+      if {[lindex $slist 0]=="sleep"} {
+        after [lindex $slist 1]
+      } else {
+        c_send_prim $receiver [gets $file]
+      }
+    }
+    close $file
+  }
+}
+#------------------------------------------
+
+
+############################################
+# input_prim                               #
+############################################
+# PURPOSE : called to show a dialog
+#           for input of system primitives
+#
+# PARAMS: 
+#
+# RETURNS:
+############################################
+proc input_prim {} {
+	global priminput_dlg
+	set f .priminput_dlg
+	if [Dialog_Create $f "Primitives" -borderwidth 10] {
+		message $f.msg -text "Please input a receiver:" -aspect 1000
+		entry $f.entry -width 5 -textvariable priminput_dlg(receiver)
+    $f.entry insert 0 MMI
+		message $f.msg2 -text "Please input a primitive:" -aspect 1000
+		entry $f.entry2 -width 0 -textvariable priminput_dlg(prim)
+    $f.entry2 insert 0 "TRACECLASS FF"
+		set b [frame $f.buttons]
+		pack $f.msg $f.entry -side top 
+		pack $f.msg2 $f.entry2 $f.buttons -side top -fill x
+		pack $f.entry -pady 5
+		pack $f.entry2 -pady 7
+		button $b.ok -text SEND -command {set priminput_dlg(ok) 1}
+		button $b.cancel -text Cancel \
+			-command {set priminput_dlg(ok) 0}
+		pack $b.ok -side left
+		pack $b.cancel -side right
+		bind $f.entry <Return> {set priminput_dlg(ok) 1 ; break}
+		bind $f.entry <Escape> {set priminput_dlg(ok) 0 ; break}
+	}
+	set priminput_dlg(ok) 0
+	Dialog_Wait $f priminput_dlg(ok) $f.entry
+	Dialog_Dismiss $f
+	if {$priminput_dlg(ok)} {
+    c_send_prim $priminput_dlg(receiver) $priminput_dlg(prim)
+	} 
+}
+#------------------------------------------
+
+
+############################################
+# set_windim                               #
+############################################
+# PURPOSE : set dimension of GUI-Window
+#
+# PARAMS: 
+#
+# RETURNS:
+############################################
+proc set_windim {x y w h} {
+  wm geometry . [format "%ix%i+%i+%i" $w $h $x $y]
+  #wm geometry . [format "+%i+%i" $x $y]
+}
+#------------------------------------------
+
+############################################
+# set_initparams                           #
+############################################
+# PURPOSE : called from c-backend to 
+#           send init-params which will be set by TCL 
+#           (curr. initial size and window title)
+#
+# PARAMS: 
+#
+# RETURNS:
+############################################
+proc set_initparams {x y w h wtitle} {
+  after 500 set_windim $x $y $w $h
+  after 500 wm title . $wtitle
+  after 500 wm deiconify . 
+}
+#------------------------------------------
+
+############################################
+# send_windim                              #
+############################################
+# PURPOSE : called to send 
+#           dimension of GUI-Window to
+#           c-backend
+#
+# PARAMS: 
+#
+# RETURNS:
+############################################
+proc send_windim {} {
+  set geo [wm geometry .]
+  c_windim $geo
+}  
+bind .menubar.mFile <Destroy> {send_windim}
+#------------------------------------------
+
+
+
+
+
+############################################################
+# DISPLAY RELATED FUNCTIONS
+############################################################
+
+
+############################################
+# displ_text                               #
+############################################
+# PURPOSE : asks c-backend for current
+#           content of text display and
+#           shows it
+#
+# PARAMS: 
+#
+# RETURNS:
+############################################
+proc displ_text {} {
+  global m_displ_type
+  global m_displtext 
+  global m_displwidth
+
+  set m_displtext [c_get_displtext]
+  catch [.frame.screen configure -image "" -text $m_displtext] 
+}
+#------------------------------------------
+
+
+############################################
+# displ_img                                #
+############################################
+# PURPOSE : asks c-backend for current
+#           display image to be used and
+#           shows it
+#
+# PARAMS: 
+#
+# RETURNS:
+############################################
+proc displ_img {} {
+  catch [.frame.screen configure -image screen]
+}
+#------------------------------------------
+
+
+############################################
+# displ_update                             #
+############################################
+# PURPOSE : periodically called to update
+#           the display screen depending
+#           on set display mode (m_displ_type)
+#
+# PARAMS: 
+#
+# RETURNS:
+############################################
+proc displ_update {} {
+  global m_displ_type
+  global m_displtext 
+  global m_displwidth
+  global GRAPH_DSPL_UPDATE
+  global TEXT_DSPL_UPDATE
+
+  switch $m_displ_type {
+    "T" {
+      displ_text
+      after $TEXT_DSPL_UPDATE displ_update
+    } 
+    "D" {
+      displ_text
+#      after $TEXT_DSPL_UPDATE displ_update
+    } 
+    "G" {
+      displ_img
+      after $GRAPH_DSPL_UPDATE displ_update
+    } 
+  }
+}
+#------------------------------------------
+
+
+
+
+
+
+############################################################
+# INTERNAL FUNCTIONS
+############################################################
+
+
+############################################
+# Dialog_Create                            #
+############################################
+# PURPOSE : internal function for
+#           creating a dialog window
+#
+# PARAMS: top ... variable for dialog window
+#         title ... dialog title
+#         args ... argument to dialog
+#
+# RETURNS:
+############################################
+proc Dialog_Create {top title args} {
+  global dialog
+  if [winfo exists $top] {
+    switch -- [wm state $top] {
+      normal {
+        # Raise a buried window
+        raise $top
+      }
+      withdrawn -
+      iconified {
+        # Open and restore geometry
+        wm deiconify $top
+        catch {wm geometry $top $dialog(geo,$top)}
+      }
+    }
+    return 0
+  } else {
+    eval {toplevel $top} $args
+    wm title $top $title
+    set g [wm geometry .]
+    set pos [string first + $g] 
+    set g2 [string range $g $pos [string length $g]]
+
+    catch {wm geometry $top $g2}
+    return 1
+  }
+}
+#------------------------------------------
+
+
+############################################
+# Dialog_Wait                              #
+############################################
+# PURPOSE : internal function for
+#           waiting for state of a varibale
+#           of a modal dialog
+#
+# PARAMS: top ... variable of dialog window
+#         varName ... variable to be checked
+#         focus ... sub window to get focus
+#
+# RETURNS:
+############################################
+proc Dialog_Wait {top varName {focus {}}} {
+  upvar $varName var
+
+  # Poke the variable if the user nukes the window
+  bind $top <Destroy> [list set $varName $var]
+
+  # Grab focus for the dialog
+  if {[string length $focus] == 0} {
+    set focus $top
+  }
+  set old [focus -displayof $top]
+  focus $focus
+  catch {tkwait visibility $top}
+  catch {grab $top}
+
+  # Wait for the dialog to complete
+  tkwait variable $varName
+  catch {grab release $top}
+  focus $old
+}
+#------------------------------------------
+
+
+############################################
+# Dialog_Dismiss                           #
+############################################
+# PURPOSE : internal function for
+#           closing a dialog window
+#
+# PARAMS: top ... variable of dialog window
+#
+# RETURNS:
+############################################
+proc Dialog_Dismiss {top} {
+  global dialog
+  # Save current size and position
+  catch {
+    # window may have been deleted
+    set dialog(geo,$top) [wm geometry $top]
+    wm withdraw $top
+  }
+}
+#------------------------------------------
+