zy1000: keep up with latest changes to command handling
[openocd.git] / src / jtag / arm-jtag-ew.c
index d2e3ff7d915d1e2dc46a7218326c0d83f3954f6b..46c3107056d6950fb91149a4658ef8daaa9e216f 100644 (file)
@@ -25,6 +25,7 @@
 #include "interface.h"
 #include "commands.h"
 #include <usb.h>
+#include "usb_common.h"
 
 
 #define USB_VID                                                0x15ba
 static uint8_t usb_in_buffer[ARMJTAGEW_IN_BUFFER_SIZE];
 static uint8_t usb_out_buffer[ARMJTAGEW_OUT_BUFFER_SIZE];
 
-/* External interface functions */
-static int armjtagew_execute_queue(void);
-static int armjtagew_speed(int speed);
-static int armjtagew_khz(int khz, int *jtag_speed);
-static int armjtagew_register_commands(struct command_context_s *cmd_ctx);
-static int armjtagew_init(void);
-static int armjtagew_quit(void);
-
-/* CLI command handler functions */
-static int armjtagew_handle_armjtagew_info_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-
 /* Queue command functions */
 static void armjtagew_end_state(tap_state_t state);
 static void armjtagew_state_move(void);
@@ -108,18 +98,6 @@ static struct armjtagew* armjtagew_handle;
 /***************************************************************************/
 /* External interface implementation */
 
-struct jtag_interface armjtagew_interface =
-{
-       .name = "arm-jtag-ew",
-       .execute_queue = armjtagew_execute_queue,
-       .speed = armjtagew_speed,
-       .khz = armjtagew_khz,
-       .register_commands = armjtagew_register_commands,
-       .init = armjtagew_init,
-       .quit = armjtagew_quit
-};
-
-
 static int armjtagew_execute_queue(void)
 {
        struct jtag_command *cmd = jtag_command_queue;
@@ -240,13 +218,6 @@ static int armjtagew_khz(int khz, int *jtag_speed)
        return ERROR_OK;
 }
 
-static int armjtagew_register_commands(struct command_context_s *cmd_ctx)
-{
-       register_command(cmd_ctx, NULL, "armjtagew_info", armjtagew_handle_armjtagew_info_command, COMMAND_EXEC,
-               "query armjtagew info");
-       return ERROR_OK;
-}
-
 static int armjtagew_init(void)
 {
        int check_cnt;
@@ -520,7 +491,7 @@ static int armjtagew_get_version_info(void)
        return ERROR_OK;
 }
 
-static int armjtagew_handle_armjtagew_info_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+COMMAND_HANDLER(armjtagew_handle_armjtagew_info_command)
 {
        if (armjtagew_get_version_info() == ERROR_OK)
        {
@@ -531,6 +502,29 @@ static int armjtagew_handle_armjtagew_info_command(struct command_context_s *cmd
        return ERROR_OK;
 }
 
+static const struct command_registration armjtagew_command_handlers[] = {
+       {
+               .name = "armjtagew_info",
+               .handler = &armjtagew_handle_armjtagew_info_command,
+               .mode = COMMAND_EXEC,
+               .help = "query armjtagew info",
+       },
+       COMMAND_REGISTRATION_DONE
+};
+
+struct jtag_interface armjtagew_interface = {
+               .name = "arm-jtag-ew",
+
+               .commands = armjtagew_command_handlers,
+
+               .execute_queue = &armjtagew_execute_queue,
+               .speed = &armjtagew_speed,
+               .khz = &armjtagew_khz,
+
+               .init = &armjtagew_init,
+               .quit = &armjtagew_quit,
+       };
+
 /***************************************************************************/
 /* ARM-JTAG-EW tap functions */
 
@@ -726,50 +720,30 @@ static int armjtagew_tap_execute(void)
 
 static struct armjtagew* armjtagew_usb_open()
 {
-       struct usb_bus *busses;
-       struct usb_bus *bus;
-       struct usb_device *dev;
-
-       struct armjtagew *result;
-
-       result = (struct armjtagew*) malloc(sizeof(struct armjtagew));
-
        usb_init();
-       usb_find_busses();
-       usb_find_devices();
 
-       busses = usb_get_busses();
+       const uint16_t vids[] = { USB_VID, 0 };
+       const uint16_t pids[] = { USB_PID, 0 };
+       struct usb_dev_handle *dev;
+       if (jtag_usb_open(vids, pids, &dev) != ERROR_OK)
+               return NULL;
 
-       /* find armjtagew device in usb bus */
-
-       for (bus = busses; bus; bus = bus->next)
-       {
-               for (dev = bus->devices; dev; dev = dev->next)
-               {
-                       if ((dev->descriptor.idVendor == USB_VID) && (dev->descriptor.idProduct == USB_PID))
-                       {
-                               result->usb_handle = usb_open(dev);
+       struct armjtagew *result = malloc(sizeof(struct armjtagew));
+       result->usb_handle = dev;
 
 #if 0
-                               /* usb_set_configuration required under win32 */
-                               usb_set_configuration(result->usb_handle, dev->config[0].bConfigurationValue);
+       /* usb_set_configuration required under win32 */
+       usb_set_configuration(dev, dev->config[0].bConfigurationValue);
 #endif
-                               usb_claim_interface(result->usb_handle, 0);
-
+       usb_claim_interface(dev, 0);
 #if 0
-                               /*
-                                * This makes problems under Mac OS X. And is not needed
-                                * under Windows. Hopefully this will not break a linux build
-                                */
-                               usb_set_altinterface(result->usb_handle, 0);
+       /*
+        * This makes problems under Mac OS X. And is not needed
+        * under Windows. Hopefully this will not break a linux build
+        */
+       usb_set_altinterface(dev, 0);
 #endif
-                               return result;
-                       }
-               }
-       }
-
-       free(result);
-       return NULL;
+       return result;
 }
 
 static void armjtagew_usb_close(struct armjtagew *armjtagew)

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)