]> git.gag.com Git - fw/openocd/blobdiff - src/pld/pld.c
use COMMAND_HANDLER macro to define all commands
[fw/openocd] / src / pld / pld.c
index 391fb7610d3db26ae126c19eb1e8616d6f6f61ed..c20b936c7ed477a6e97b44977cd4c6714da724e1 100644 (file)
@@ -39,26 +39,6 @@ static pld_driver_t *pld_drivers[] =
 static pld_device_t *pld_devices;
 static command_t *pld_cmd;
 
-static int handle_pld_devices_command(struct command_context_s *cmd_ctx,
-               char *cmd, char **args, int argc);
-static int handle_pld_device_command(struct command_context_s *cmd_ctx,
-               char *cmd, char **args, int argc);
-static int handle_pld_load_command(struct command_context_s *cmd_ctx,
-               char *cmd, char **args, int argc);
-
-int pld_init(struct command_context_s *cmd_ctx)
-{
-       if (pld_devices)
-       {
-               register_command(cmd_ctx, pld_cmd, "devices", handle_pld_devices_command, COMMAND_EXEC,
-                                               "list configured pld devices");
-               register_command(cmd_ctx, pld_cmd, "load", handle_pld_load_command, COMMAND_EXEC,
-                                               "load configuration <file> into programmable logic device");
-       }
-
-       return ERROR_OK;
-}
-
 pld_device_t *get_pld_device_by_num(int num)
 {
        pld_device_t *p;
@@ -77,8 +57,7 @@ pld_device_t *get_pld_device_by_num(int num)
 
 /* pld device <driver> [driver_options ...]
  */
-static int handle_pld_device_command(struct command_context_s *cmd_ctx,
-               char *cmd, char **args, int argc)
+COMMAND_HANDLER(handle_pld_device_command)
 {
        int i;
        int found = 0;
@@ -140,8 +119,7 @@ static int handle_pld_device_command(struct command_context_s *cmd_ctx,
        return ERROR_OK;
 }
 
-static int handle_pld_devices_command(struct command_context_s *cmd_ctx,
-               char *cmd, char **args, int argc)
+COMMAND_HANDLER(handle_pld_devices_command)
 {
        pld_device_t *p;
        int i = 0;
@@ -160,8 +138,7 @@ static int handle_pld_devices_command(struct command_context_s *cmd_ctx,
        return ERROR_OK;
 }
 
-static int handle_pld_load_command(struct command_context_s *cmd_ctx,
-               char *cmd, char **args, int argc)
+COMMAND_HANDLER(handle_pld_load_command)
 {
        int retval;
        struct timeval start, end, duration;
@@ -175,7 +152,9 @@ static int handle_pld_load_command(struct command_context_s *cmd_ctx,
                return ERROR_OK;
        }
 
-       p = get_pld_device_by_num(strtoul(args[0], NULL, 0));
+       unsigned dev_id;
+       COMMAND_PARSE_NUMBER(uint, args[0], dev_id);
+       p = get_pld_device_by_num(dev_id);
        if (!p)
        {
                command_print(cmd_ctx, "pld device '#%s' is out of bounds", args[0]);
@@ -184,25 +163,41 @@ static int handle_pld_load_command(struct command_context_s *cmd_ctx,
 
        if ((retval = p->driver->load(p, args[1])) != ERROR_OK)
        {
-               command_print(cmd_ctx, "failed loading file %s to pld device %lu",
-                       args[1], strtoul(args[0], NULL, 0));
+               command_print(cmd_ctx, "failed loading file %s to pld device %u",
+                       args[1], dev_id);
                switch (retval)
                {
                }
+               return retval;
        }
        else
        {
                gettimeofday(&end, NULL);
                timeval_subtract(&duration, &end, &start);
 
-               command_print(cmd_ctx, "loaded file %s to pld device %lu in %jis %jius",
-                       args[1], strtoul(args[0], NULL, 0),
+               command_print(cmd_ctx, "loaded file %s to pld device %u in %jis %jius",
+                       args[1], dev_id,
                        (intmax_t)duration.tv_sec, (intmax_t)duration.tv_usec);
        }
 
        return ERROR_OK;
 }
 
+int pld_init(struct command_context_s *cmd_ctx)
+{
+       if (!pld_devices)
+               return ERROR_OK;
+
+       register_command(cmd_ctx, pld_cmd, "devices",
+                       handle_pld_devices_command, COMMAND_EXEC,
+                       "list configured pld devices");
+       register_command(cmd_ctx, pld_cmd, "load",
+                       handle_pld_load_command, COMMAND_EXEC,
+                       "load configuration <file> into programmable logic device");
+
+       return ERROR_OK;
+}
+
 int pld_register_commands(struct command_context_s *cmd_ctx)
 {
        pld_cmd = register_command(cmd_ctx, NULL, "pld", NULL, COMMAND_ANY, "programmable logic device commands");