#include "interface.h"
#include "commands.h"
-
-#include <usb.h>
+#include "usb_common.h"
#define VID 0x1781
#define TCK_BIT 2
#define TMS_BIT 1
-static int usbprog_execute_queue(void);
-static int usbprog_speed(int speed);
-static int usbprog_register_commands(struct command_context_s *cmd_ctx);
-static int usbprog_init(void);
-static int usbprog_quit(void);
-
static void usbprog_end_state(tap_state_t state);
static void usbprog_state_move(void);
-static void usbprog_path_move(pathmove_command_t *cmd);
+static void usbprog_path_move(struct pathmove_command *cmd);
static void usbprog_runtest(int num_cycles);
static void usbprog_scan(bool ir_scan, enum scan_type type, uint8_t *buffer, int scan_size);
-struct jtag_interface usbprog_interface =
-{
- .name = "usbprog",
- .execute_queue = usbprog_execute_queue,
- .speed = usbprog_speed,
- .register_commands = usbprog_register_commands,
- .init = usbprog_init,
- .quit = usbprog_quit
-};
-
#define UNKOWN_COMMAND 0x00
#define PORT_DIRECTION 0x01
#define PORT_SET 0x02
return ERROR_OK;
}
-static int usbprog_register_commands(struct command_context_s *cmd_ctx)
-{
- return ERROR_OK;
-}
-
static int usbprog_execute_queue(void)
{
- jtag_command_t *cmd = jtag_command_queue; /* currently processed command */
+ struct jtag_command *cmd = jtag_command_queue; /* currently processed command */
int scan_size;
enum scan_type type;
uint8_t *buffer;
tap_set_state(tap_get_end_state());
}
-static void usbprog_path_move(pathmove_command_t *cmd)
+static void usbprog_path_move(struct pathmove_command *cmd)
{
int num_states = cmd->num_states;
int state_count;
struct usbprog_jtag* usbprog_jtag_open(void)
{
- struct usb_bus *bus;
- struct usb_device *dev;
-
- struct usbprog_jtag *tmp;
-
- tmp = (struct usbprog_jtag*)malloc(sizeof(struct usbprog_jtag));
-
usb_set_debug(10);
usb_init();
- usb_find_busses();
- usb_find_devices();
- busses = usb_get_busses();
+ const uint16_t vids[] = { VID, 0 };
+ const uint16_t pids[] = { PID, 0 };
+ struct usb_dev_handle *dev;
+ if (jtag_usb_open(vids, pids, &dev) != ERROR_OK)
+ return NULL;
- /* find usbprog_jtag device in usb bus */
+ struct usbprog_jtag *tmp = malloc(sizeof(struct usbprog_jtag));
+ tmp->usb_handle = dev;
- for (bus = busses; bus; bus = bus->next)
- {
- for (dev = bus->devices; dev; dev = dev->next)
- {
- /* condition for sucessfully hit (too bad, I only check the vendor id)*/
- if (dev->descriptor.idVendor == VID && dev->descriptor.idProduct == PID)
- {
- tmp->usb_handle = usb_open(dev);
- usb_set_configuration(tmp->usb_handle, 1);
- usb_claim_interface(tmp->usb_handle, 0);
- usb_set_altinterface(tmp->usb_handle, 0);
- return tmp;
- }
- }
- }
- free(tmp);
- return 0;
+ usb_set_configuration(dev, 1);
+ usb_claim_interface(dev, 0);
+ usb_set_altinterface(dev, 0);
+
+ return tmp;
}
#if 0
tms_chain_index = 0;
}
}
+
+struct jtag_interface usbprog_interface = {
+ .name = "usbprog",
+ .execute_queue = &usbprog_execute_queue,
+ .speed = &usbprog_speed,
+ .init = &usbprog_init,
+ .quit = &usbprog_quit
+ };