Hi  Antonio,

It seems there is a little mess with OpenOCD print results and processes.
I think except critical errors,  results and processes output should be
sent only to the caller that may be telnet, TCL script, ...

e.g,
* From TCL, when you issue the *targets *command there is no output to the
console while in ver 0.10.0 there was.
* On the other hand, issuing the help command from Telnet prints the
results on all opened Telnets and also the console.

of course, debug leveling still prints to console  I assume.

Regards,
Lior..





On Thu, Apr 29, 2021 at 9:08 AM Jan Matyáš <[email protected]> wrote:

> Hi Antonio,
>
> thank you for the concise explanation, it is now all clear to me :)
>
> So yes, it seems that the concrete examples I ran into (load_image,
> verify_image) could use some form of (optional) progress info.
> I'd be happy to submit a patch, as time permits.
>
> Regards,
> Jan
>
>
> On Wed, Apr 28, 2021 at 4:29 PM Antonio Borneo <[email protected]>
> wrote:
>
>> On Tue, Apr 27, 2021 at 11:18 AM Jan Matyáš <[email protected]> wrote:
>> >
>> > Hello,
>> >
>> > I have noticed that when TCL commands are being issued from OpenOCD's
>> startup scripts, their output (produced by command_print()) is not actually
>> visible on the output, apart from the last print. The preceding prints seem
>> to be dropped  - not visible to the user.
>> >
>> > This can be demonstrated e.g. on load_image / verify_image commands,
>> that are supposed to print both progress info ("XX bytes written to address
>> YY") and the overall summary ("Written XX bytes"). However, only the last
>> printed line - the summary - is visible.
>> >
>> > From a gerrit discussion, I understand this is a known issue, and I
>> have been pointed to http://openocd.zylin.com/#/c/1815/7
>> >
>> > Could you please explain how this issue came to being, or point me to
>> an earlier thread, if this has already been discussed? Is there any plan to
>> change this, so that the user can be informed in real-time e.g. about the
>> progress of load_image and similar commands?
>>
>> Hi Jan,
>>
>> the former code in OpenCD was quite messy regarding command output and
>> TCL compatibility.
>> The patch you point above is part of a long series to clean up those
>> old inconsistencies
>> http://openocd.zylin.com/#/q/topic:Tcl_return_values
>>
>> In TCL the "result" of a command is never printed by default, but it's
>> provided as TCL result to be used by other commands.
>> A TCL shell will print only the "result" of the last command to show
>> it interactively to the user.
>> You can try running the TCL shell of jimtcl or of the "full" tcl
>>
>> $ ./jimtcl/jimsh
>> Welcome to Jim version 0.80
>> . expr 1;expr 3;expr 5
>> 5
>> . puts [expr 1];puts [expr 3];puts [expr 5]
>> 1
>> 3
>> 5
>>
>> $ tclsh
>> % expr 1;expr 3;expr 5
>> 5
>> % puts [expr 1];puts [expr 3];puts [expr 5]
>> 1
>> 3
>> 5
>>
>> As you can see, in both cases only the last "result" is printed, in
>> the example above "5".
>> If a user needs to print out some intermediate value, he/she has to
>> print it using the TCL command "puts" or, in OpenOCD, "echo" (maybe
>> another inconsistency that should be fixed).
>> The telnet console of OpenOCD is now aligned with the TCL behavior.
>> The problem is that not all the commands cooperate well; they have to
>> be fixed one-by-one.
>>
>> Now your question becomes:
>> Should some command print an output, or they should only provide
>> "result" and the user has to use the TCL way "echo [command]" to print
>> it out ?
>>
>> My answer (not "the" answer but "my" answer) is: it depends!
>> If it is an OpenOCD error (not a command's error, but an OpenOCD
>> error, like "out of memory" or JTAG suddenly disconnected), it should
>> be printed unconditionally!
>> If it is an "interactive or dynamic" content, it should be printed,
>> but only if requested.
>> All the rest should go in "result".
>>
>> The command "svf" has an option "progress" to show during the download
>> the percentage of execution.
>> This percentage has sense to be printed out immediately, and there is
>> no reason to put it in the "result" of the command. What the sense of
>> printing it at the end when it is 100%!
>> But it is "optional"! So if in a script I don't want this output I can
>> silent it by removing the "progress" option.
>>
>> Maybe "load_image" should do something similar. Adding a "progress" or
>> "statistics" to enable some output.
>> Patches are welcome!
>> In OpenOCD code the output goes through LOG_USER()/LOG_USER_N(), while
>> the "result" goes through command_print()/command_print_sameline().
>>
>> Antonio
>>
>

-- 
Regards,
Lior

[email protected]
[email protected]


Reply via email to