startup.tcl (former commands.tcl) is now embedded into OpenOCD executable.
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 11 Jul 2008 06:44:22 +0000 (06:44 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 11 Jul 2008 06:44:22 +0000 (06:44 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@787 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/Makefile.am
src/file2c.tcl [new file with mode: 0644]
src/openocd.c
src/startup.tcl [moved from src/tcl/commands.tcl with 90% similarity]

index ff0eb6e519fbe5307b68a8448891ce1726bed1d4..1c96fb474bf58ab1027a2b03b409764d078c1f2e 100644 (file)
@@ -7,7 +7,7 @@ MAINFILE = main.c jim.c
 endif
 
 
-openocd_SOURCES = $(MAINFILE) openocd.c
+openocd_SOURCES = $(MAINFILE) openocd.c startup.c
 
 # set the include path found by configure
 INCLUDES = -I$(top_srcdir)/src/helper \
@@ -82,7 +82,6 @@ openocd_LDADD = $(top_builddir)/src/xsvf/libxsvf.a \
        
        
 nobase_dist_pkglib_DATA = \
-       tcl/commands.tcl  \
        tcl/bitsbytes.tcl  \
        tcl/chip/atmel/at91/aic.tcl  \
        tcl/chip/atmel/at91/at91sam7x128.tcl  \
@@ -98,3 +97,6 @@ nobase_dist_pkglib_DATA = \
        tcl/mmr_helpers.tcl  \
        tcl/readable.tcl  
 
+# Convert .tcl to .c file
+startup.c: $(top_srcdir)/src/startup.tcl Makefile  $(top_srcdir)/src/file2c.tcl
+       tclsh $(top_srcdir)/src/file2c.tcl $(top_srcdir)/src/startup.tcl startup.c
\ No newline at end of file
diff --git a/src/file2c.tcl b/src/file2c.tcl
new file mode 100644 (file)
index 0000000..288751a
--- /dev/null
@@ -0,0 +1,125 @@
+#!/bin/bash
+# restart using a Tcl shell \
+       exec sh -c 'for tclshell in tclsh tclsh83 cygtclsh80 ; do \
+                       ( echo | $tclshell ) 2> /dev/null && exec $tclshell "`( cygpath -w \"$0\" ) 2> /dev/null || echo $0`" "$@" ; \
+               done ; \
+               echo "file2c.tcl: cannot find Tcl shell" ; exit 1' "$0" "$@"
+
+#===============================================================================
+#
+#    file2c.tcl
+#
+#    Convert a file into a header that can be #included from C.
+#
+#===============================================================================
+#####ECOSGPLCOPYRIGHTBEGIN####
+## -------------------------------------------
+## This file is part of eCos, the Embedded Configurable Operating System.
+## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+##
+## eCos is free software; you can redistribute it and/or modify it under
+## the terms of the GNU General Public License as published by the Free
+## Software Foundation; either version 2 or (at your option) any later version.
+##
+## eCos is distributed in the hope that it will be useful, but WITHOUT ANY
+## WARRANTY; without even the implied warranty of MERCHANTABILITY or
+## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+## for more details.
+##
+## You should have received a copy of the GNU General Public License along
+## with eCos; if not, write to the Free Software Foundation, Inc.,
+## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+##
+## As a special exception, if other files instantiate templates or use macros
+## or inline functions from this file, or you compile this file and link it
+## with other works to produce a work based on this file, this file does not
+## by itself cause the resulting work to be covered by the GNU General Public
+## License. However the source code for this file must still be made available
+## in accordance with section (3) of the GNU General Public License.
+##
+## This exception does not invalidate any other reasons why a work based on
+## this file might be covered by the GNU General Public License.
+##
+## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
+## at http://sources.redhat.com/ecos/ecos-license/
+## -------------------------------------------
+#####ECOSGPLCOPYRIGHTEND####
+#===============================================================================
+######DESCRIPTIONBEGIN####
+#
+# Author(s):   jlarmour,bartv
+# Contact(s):  
+# Date:                2001-07-20
+# Purpose:      
+# Description:
+# Usage:        file2c.tcl <file to encode> <output C header file>
+#
+#####DESCRIPTIONEND####
+#===============================================================================
+
+
+
+if { $argc != 2 } {
+       puts "Usage: file2c.tcl <file to encode> <output C file>"
+       exit 1
+}
+set infile [lindex $argv 0]
+set outfile [lindex $argv 1]
+set label [string range $outfile [expr 1+[string last / $outfile]] [expr [string last . $outfile]-1]]
+
+set status [ catch {
+       set infilefd [open $infile "r"]
+       fconfigure $infilefd -translation binary
+       set data [read $infilefd]
+       close $infilefd
+} message]
+
+if { $status != 0 } {
+       error "Unable to read file $infile: $message"
+}
+
+set result ""
+
+set status [ catch {
+       set outfilefd [ open $outfile "w" ]
+} message ]
+
+if { $status != 0 } {
+       error "Unable to create file $outfile: $message"
+}
+
+append result "/* This is a generated file. Do not edit. */\n\n"
+append result "const unsigned char filedata_$label\[\] = {\n"
+
+set datalength [ string length $data ]
+
+set aligned_datalength [expr $datalength - ($datalength % 8)]
+
+for { set i 0 } {$i < $aligned_datalength} {incr i 8} {
+       binary scan $data "@[set i]H16" var0
+       append result [format "    0x%2s, 0x%2s, 0x%2s, 0x%2s, 0x%2s, 0x%2s, 0x%2s, 0x%2s,\n" \
+                       [string range $var0  0  1] \
+                       [string range $var0  2  3] \
+                       [string range $var0  4  5] \
+                       [string range $var0  6  7] \
+                       [string range $var0  8  9] \
+                       [string range $var0 10 11] \
+                       [string range $var0 12 13] \
+                       [string range $var0 14 15]]
+}
+
+if { $aligned_datalength != $datalength } {
+       append result "    "
+       for { set i $aligned_datalength } {$i < $datalength} {incr i} {
+               binary scan $data "@[set i]H2" var0
+               append result [format "0x%2s, " $var0]
+       }
+}
+
+# Remove either comma+newline or comma+space from the end
+set result [string range $result 0 [expr [string length $result] - 3]]
+
+append result "\n};"
+
+puts $outfilefd $result
+close $outfilefd
index 64965e37a6a02c5d3678c298d44a32f2b365d32b..eef6e60dca30e7234c8076c87ab483885349fd6e 100644 (file)
@@ -742,12 +742,15 @@ void initJim(void)
        interp->cb_fgets = openocd_jim_fgets;
 }
 
+extern const unsigned char filedata_startup[];
+
 /* after command line parsing */
 void initJim2(void)
 {
-       if (Jim_Eval(interp, "source [find tcl/commands.tcl]")==JIM_ERR)
+       if (Jim_Eval(interp, filedata_startup)==JIM_ERR)
        {
-               LOG_ERROR("Can not find tcl/commands.tcl - check installation");
+               LOG_ERROR("Failed to run startup.tcl (embedded into OpenOCD compile time)");
+               Jim_PrintErrorMessage(interp);
                exit(-1);
        }
 }
similarity index 90%
rename from src/tcl/commands.tcl
rename to src/startup.tcl
index 8d7cdb823486aab74700f5ae846a112093c67c79..0a829128e3811c3d92f7a6e7e98bc6e5d31630f7 100644 (file)
@@ -1,63 +1,69 @@
-
-# Production command
-# FIX!!! need to figure out how to feed back relevant output
-# from e.g. "flash banks" command...
-proc board_produce {filename serialnumber} {
-       openocd "reset init"
-       openocd "flash write_image erase $filename [flash] bin"]]
-       openocd "verify_image $filename [flash] bin"]]
-       echo "Successfully ran production procedure"
-}
-
-proc board_test {} {
-       echo "Production test not implemented"
-}
-
-# Show flash in human readable form
-# This is an example of a human readable form of a low level fn
-proc flash_banks_pretty {} { 
-       set i 0         
-       set result ""
-       foreach {a} [flash_banks] {
-               if {$i > 0} {
-                       set result "$result\n"
-               }
-               set result [format "$result#%d: %s at 0x%08x, size 0x%08x, buswidth %d, chipwidth %d" $i [lindex $a 0] [lindex $a 1] [lindex $a 2] [lindex $a 3] [lindex $a 4]]
-               set i [expr $i+1]       
-       }       
-       return $result
-}
-
-# We need to explicitly redirect this to the OpenOCD command
-# as Tcl defines the exit proc
-proc exit {} {
-       openocd_throw exit
-}
-
-# We have currently converted only "flash banks" to tcl.
-proc flash args {
-       if {[string compare [lindex $args 0] banks]==0} {
-               return [flash_banks_pretty]
-       }
-       openocd_throw "flash $args"
-}
-
-# If a fn is unknown to Tcl, we try to execute it as an OpenOCD command
-proc unknown {args} {
-       if {[string length $args]>0} {
-               set cmd ""
-               # We need to add back quotes for arguments w/space
-               # for args without space, we can add quotes anyway
-               foreach {a} $args {
-                       set cmd "$cmd \"$a\""
-               }
-               openocd_throw $cmd
-       }
-       # openocd_throw outputs while running and also sets the
-       # primary return value to the output of the command
-       #
-       # The primary return value have been set by "openocd" above,
-       # so we need to clear it, lest we print out the output from
-       # the command twice.
-       return ""
-}
+#\r
+# Defines basic Tcl procs that must be there for\r
+# OpenOCD to work.\r
+#\r
+# Embedded into OpenOCD executable\r
+#\r
+\r
+# Production command\r
+# FIX!!! need to figure out how to feed back relevant output\r
+# from e.g. "flash banks" command...\r
+proc board_produce {filename serialnumber} {\r
+       openocd "reset init"\r
+       openocd "flash write_image erase $filename [flash] bin"]]\r
+       openocd "verify_image $filename [flash] bin"]]\r
+       echo "Successfully ran production procedure"\r
+}\r
+\r
+proc board_test {} {\r
+       echo "Production test not implemented"\r
+}\r
+\r
+# Show flash in human readable form\r
+# This is an example of a human readable form of a low level fn\r
+proc flash_banks_pretty {} { \r
+       set i 0         \r
+       set result ""\r
+       foreach {a} [flash_banks] {\r
+               if {$i > 0} {\r
+                       set result "$result\n"\r
+               }\r
+               set result [format "$result#%d: %s at 0x%08x, size 0x%08x, buswidth %d, chipwidth %d" $i [lindex $a 0] [lindex $a 1] [lindex $a 2] [lindex $a 3] [lindex $a 4]]\r
+               set i [expr $i+1]       \r
+       }       \r
+       return $result\r
+}\r
+\r
+# We need to explicitly redirect this to the OpenOCD command\r
+# as Tcl defines the exit proc\r
+proc exit {} {\r
+       openocd_throw exit\r
+}\r
+\r
+# We have currently converted only "flash banks" to tcl.\r
+proc flash args {\r
+       if {[string compare [lindex $args 0] banks]==0} {\r
+               return [flash_banks_pretty]\r
+       }\r
+       openocd_throw "flash $args"\r
+}\r
+\r
+# If a fn is unknown to Tcl, we try to execute it as an OpenOCD command\r
+proc unknown {args} {\r
+       if {[string length $args]>0} {\r
+               set cmd ""\r
+               # We need to add back quotes for arguments w/space\r
+               # for args without space, we can add quotes anyway\r
+               foreach {a} $args {\r
+                       set cmd "$cmd \"$a\""\r
+               }\r
+               openocd_throw $cmd\r
+       }\r
+       # openocd_throw outputs while running and also sets the\r
+       # primary return value to the output of the command\r
+       #\r
+       # The primary return value have been set by "openocd" above,\r
+       # so we need to clear it, lest we print out the output from\r
+       # the command twice.\r
+       return ""\r
+}\r

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)