flash/startup: extend "program" command to accept "exit"
[fw/openocd] / src / flash / startup.tcl
index b8d280b8e75fb97e100da4c4f0ca19746720a602..7a96a3e3b8496dd14bccb2de3fe999f2cebc5bf8 100644 (file)
@@ -3,16 +3,28 @@
 #
 # program utility proc
 # usage: program filename
-# optional args: verify, reset and address
+# optional args: verify, reset, exit and address
 #
 
+proc program_error {description exit} {
+       if {$exit == 1} {
+               echo $description
+               shutdown
+       }
+
+       error $description
+}
+
 proc program {filename args} {
+       set exit 0
 
        foreach arg $args {
                if {[string equal $arg "verify"]} {
                        set verify 1
                } elseif {[string equal $arg "reset"]} {
                        set reset 1
+               } elseif {[string equal $arg "exit"]} {
+                       set exit 1
                } else {
                        set address $arg
                }
@@ -20,16 +32,12 @@ proc program {filename args} {
 
        # make sure init is called
        if {[catch {init}] != 0} {
-               echo "** OpenOCD init Failed **"
-               shutdown
-               return
+               program_error "** OpenOCD init failed **" 1
        }
 
        # reset target and call any init scripts
        if {[catch {reset init}] != 0} {
-               echo "** Unable to reset target **"
-               shutdown
-               return
+               program_error "** Unable to reset target **" $exit
        }
 
        # start programming phase
@@ -48,7 +56,7 @@ proc program {filename args} {
                        if {[catch {eval verify_image $flash_args}] == 0} {
                                echo "** Verified OK **"
                        } else {
-                               echo "** Verify Failed **"
+                               program_error "** Verify Failed **" $exit
                        }
                }
 
@@ -60,15 +68,17 @@ proc program {filename args} {
                        reset run
                }
        } else {
-               echo "** Programming Failed **"
+               program_error "** Programming Failed **" $exit
        }
 
-       # shutdown OpenOCD
-       shutdown
+       if {$exit == 1} {
+               shutdown
+       }
+       return
 }
 
-add_help_text program "write an image to flash, address is only required for binary images. verify, reset are optional"
-add_usage_text program "<filename> \[address\] \[verify\] \[reset\]"
+add_help_text program "write an image to flash, address is only required for binary images. verify, reset, exit are optional"
+add_usage_text program "<filename> \[address\] \[verify\] \[reset\] \[exit\]"
 
 # stm32f0x uses the same flash driver as the stm32f1x
 # this alias enables the use of either name.