On Monday 21 September 2009, Johnny Halfmoon wrote:
>
> David Brownell wrote:
> > On Sunday 20 September 2009, Johnny Halfmoon wrote:
> >> + if ((retval = flash_check_sector_parameters(cmd_ctx,
> >> first, last, p->num_sectors)) !
> >
> > I had in mind more like
> >
> > uint32_t value;
>
>
> Okay. Like this then:
Yes! If I don't hear objections from anyone, I'll
check this in later today.
- Dave
>
> = = = = = = = = = = = =
>
>
> doc/openocd.texi | 6 ++-
> src/flash/flash.c | 97
> +++++++++++++++++++++++++++++++++++-------------------
> 2 files changed, 67 insertions(+), 36 deletions(-)
>
> Index: src/flash/flash.c
> ===================================================================
> --- src/flash/flash.c (revision 2736)
> +++ src/flash/flash.c (working copy)
> @@ -559,40 +559,62 @@
> return ERROR_OK;
> }
>
> +int flash_check_sector_parameters(struct command_context_s *cmd_ctx,
> uint32_t first, uint32_t last, uint num_sectors)
> +{
> + if ( first >= last ) {
> + command_print(cmd_ctx, "ERROR: last sector must be > first
> sector");
> + return ERROR_FAIL;
> + }
> +
> + if ( last > (num_sectors - 1)) {
> + command_print(cmd_ctx, "ERROR: last sector must be =< %d",
> num_sectors - 1);
> + return ERROR_FAIL;
> + }
> +
> + return ERROR_OK;
> +}
> +
> static int handle_flash_erase_command(struct command_context_s *cmd_ctx,
> char *cmd, char **args, int argc)
> {
> if (argc > 2)
> {
> - int first = strtoul(args[1], NULL, 0);
> - int last = strtoul(args[2], NULL, 0);
> + uint32_t bank_nr;
> + uint32_t first;
> + uint32_t last;
> int retval;
> - flash_bank_t *p = get_flash_bank_by_num(strtoul(args[0], NULL,
> 0));
> +
> + if ((retval = parse_u32(args[0], &bank_nr)) != ERROR_OK)
> + return retval;
> +
> + flash_bank_t *p = get_flash_bank_by_num(bank_nr);
> + if (!p)
> + return ERROR_OK;
> +
> + if ((retval = parse_u32(args[1], &first)) != ERROR_OK)
> + return retval;
> + if (strcmp(args[2], "last") == 0)
> + last = p->num_sectors - 1;
> + else
> + if ((retval = parse_u32(args[2], &last)) != ERROR_OK)
> + return retval;
> +
> + if ((retval = flash_check_sector_parameters(cmd_ctx, first,
> last, p->num_sectors)) != ERROR_OK)
> + return retval;
> +
> duration_t duration;
> char *duration_text;
> -
> duration_start_measure(&duration);
>
> - if (!p)
> - {
> - return ERROR_COMMAND_SYNTAX_ERROR;
> - }
> -
> - if ((retval = flash_driver_erase(p, first, last)) == ERROR_OK)
> - {
> + if ((retval = flash_driver_erase(p, first, last)) == ERROR_OK) {
> if ((retval = duration_stop_measure(&duration,
> &duration_text)) != ERROR_OK)
> - {
> return retval;
> - }
> -
> - command_print(cmd_ctx, "erased sectors %i through %i on
> flash bank %li in %s",
> - first, last, strtoul(args[0], 0, 0),
> duration_text);
> + command_print(cmd_ctx, "erased sectors %i through %i on
> flash bank %i in %s",
> + first, last, bank_nr, duration_text);
> free(duration_text);
> }
> }
> else
> - {
> return ERROR_COMMAND_SYNTAX_ERROR;
> - }
>
> return ERROR_OK;
> }
> @@ -601,40 +623,47 @@
> {
> if (argc > 3)
> {
> - int first = strtoul(args[1], NULL, 0);
> - int last = strtoul(args[2], NULL, 0);
> + uint32_t bank_nr;
> + uint32_t first;
> + uint32_t last;
> + int retval;
> int set;
> - int retval;
> - flash_bank_t *p = get_flash_bank_by_num(strtoul(args[0], NULL,
> 0));
> +
> + if ((retval = parse_u32(args[0], &bank_nr)) != ERROR_OK)
> + return retval;
> +
> + flash_bank_t *p = get_flash_bank_by_num(bank_nr);
> if (!p)
> - {
> - command_print(cmd_ctx, "flash bank '#%s' is out of
> bounds", args[0]);
> return ERROR_OK;
> - }
>
> + if ((retval = parse_u32(args[1], &first)) != ERROR_OK)
> + return retval;
> + if (strcmp(args[2], "last") == 0)
> + last = p->num_sectors - 1;
> + else
> + if ((retval = parse_u32(args[2], &last)) != ERROR_OK)
> + return retval;
> +
> if (strcmp(args[3], "on") == 0)
> set = 1;
> else if (strcmp(args[3], "off") == 0)
> set = 0;
> else
> - {
> return ERROR_COMMAND_SYNTAX_ERROR;
> - }
>
> + if ((retval = flash_check_sector_parameters(cmd_ctx, first,
> last, p->num_sectors)) != ERROR_OK)
> + return retval;
> +
> retval = flash_driver_protect(p, set, first, last);
> - if (retval == ERROR_OK)
> - {
> - command_print(cmd_ctx, "%s protection for sectors %i
> through %i on flash bank %li",
> + if (retval == ERROR_OK) {
> + command_print(cmd_ctx, "%s protection for sectors %i
> through %i on flash bank %i",
> (set) ? "set" : "cleared", first,
> - last, strtoul(args[0], 0, 0));
> + last, bank_nr);
> }
> }
> else
> - {
> return ERROR_COMMAND_SYNTAX_ERROR;
>
> - }
> -
> return ERROR_OK;
> }
>
> Index: doc/openocd.texi
> ===================================================================
> --- doc/openocd.texi (revision 2736)
> +++ doc/openocd.texi (working copy)
> @@ -3071,7 +3071,8 @@
> @anchor{flash erase_sector}
> @deffn Command {flash erase_sector} num first last
> Erase sectors in bank @var{num}, starting at sector @var{first} up to and
> including
> -...@var{last}. Sector numbering starts at 0.
> +...@var{last}. Sector numbering starts at 0. Defining a @var{last} sector of
> "last" is
> +equivalent to defining (max_sectors-1), i.e. erasing the entire bank.
> The @var{num} parameter is a value shown by @command{flash banks}.
> @end deffn
>
> @@ -3144,7 +3145,8 @@
> @anchor{flash protect}
> @deffn Command {flash protect} num first last (on|off)
> Enable (@var{on}) or disable (@var{off}) protection of flash sectors
> -...@var{first} to @var{last} of flash bank @var{num}.
> +...@var{first} to @var{last} of flash bank @var{num}. Defining a @var{last}
> sector of "last"
> +is equivalent to defining (max_sectors-1), i.e. protecting the entire bank.
> The @var{num} parameter is a value shown by @command{flash banks}.
> @end deffn
>
>
>
_______________________________________________
Openocd-development mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/openocd-development