I've committed a small patch to allow toying around with the idea
of having low level fn's that e.g. the Telnet UI can use to implement
fn's and clients can use.
"flash banks" generates human readable output
"flash_banks" generates a Tcl list of the banks.
flash_banks is now a Tcl low level fn that returns a list of flash bank
info(same order as output from "flash banks").
A tiny piece of tcl can be written to format this information in any
form desired by the client.
> flash_banks
{ecosflash 16777216 2097152 2 2}
> foreach {a} [flash_banks] {puts "Name: [lindex $a 0]\nSize: [lindex $a 2]"}
Name: ecosflash
Size: 2097152
>
--
Øyvind Harboe
http://www.zylin.com/zy1000.html
ARM7 ARM9 XScale Cortex
JTAG debugger and flash programmer
Index: C:/workspace/trunk/src/flash/flash.c
===================================================================
--- C:/workspace/trunk/src/flash/flash.c (revision 774)
+++ C:/workspace/trunk/src/flash/flash.c (working copy)
@@ -41,6 +41,11 @@
#include <errno.h>
#include <inttypes.h>
+#include "../jim.h"
+
+extern Jim_Interp *interp;
+
+
/* command handlers */
int handle_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd,
char **args, int argc);
int handle_flash_banks_command(struct command_context_s *cmd_ctx, char *cmd,
char **args, int argc);
@@ -140,6 +145,41 @@
return ERROR_OK;
}
+static int Jim_Command_flash_banks(Jim_Interp *interp, int argc, Jim_Obj
*const *argv)
+{
+ if (argc != 1) {
+ Jim_WrongNumArgs(interp, 1, argv, "no arguments to flash_banks
command");
+ return JIM_ERR;
+ }
+ flash_bank_t *p;
+ int i = 0;
+
+ if (!flash_banks)
+ {
+ return JIM_ERR;
+ }
+
+ Jim_Obj *list=Jim_NewListObj(interp, NULL, 0);
+ for (p = flash_banks; p; p = p->next)
+ {
+ Jim_Obj *elem=Jim_NewListObj(interp, NULL, 0);
+
+
+ Jim_ListAppendElement(interp, elem, Jim_NewStringObj(interp,
p->driver->name, -1));
+ Jim_ListAppendElement(interp, elem, Jim_NewIntObj(interp,
p->base));
+ Jim_ListAppendElement(interp, elem, Jim_NewIntObj(interp,
p->size));
+ Jim_ListAppendElement(interp, elem, Jim_NewIntObj(interp,
p->bus_width));
+ Jim_ListAppendElement(interp, elem, Jim_NewIntObj(interp,
p->chip_width));
+
+ Jim_ListAppendElement(interp, list, elem);
+ }
+
+ Jim_SetResult(interp, list);
+
+ return JIM_OK;
+}
+
+
int flash_init_drivers(struct command_context_s *cmd_ctx)
{
if (flash_banks)
@@ -144,6 +184,8 @@
{
if (flash_banks)
{
+ Jim_CreateCommand(interp, "flash_banks",
Jim_Command_flash_banks, NULL, NULL );
+
register_command(cmd_ctx, flash_cmd, "banks",
handle_flash_banks_command, COMMAND_EXEC,
"list configured flash banks
");
register_command(cmd_ctx, flash_cmd, "info",
handle_flash_info_command, COMMAND_EXEC,
_______________________________________________
Openocd-development mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/openocd-development