#
# 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
+ }
+
+ 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
}
# 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
echo "** Programming Started **"
+ set filename \{$filename\}
if {[info exists address]} {
set flash_args "$filename $address"
} else {
if {[catch {eval verify_image $flash_args}] == 0} {
echo "** Verified OK **"
} else {
- echo "** Verify Failed **"
+ program_error "** Verify Failed **" $exit
}
}
if {[info exists reset]} {
# reset target if requested
- # also disable target polling, we are shutting down anyway
- poll off
+ if {$exit == 1} {
+ # also disable target polling, we are shutting down anyway
+ poll off
+ }
echo "** Resetting Target **"
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.