+// SPDX-License-Identifier: GPL-2.0-or-later
+
/***************************************************************************
* Copyright (C) 2007 by Pavel Chromy *
* chromy@asix.cz *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program. If not, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
/**
#include "windows.h"
#endif
+#include <jtag/adapter.h>
#include <jtag/interface.h>
#include <helper/time_support.h>
#include "bitq.h"
/* PRESTO access library includes */
-#include <ftdi.h>
+#include "libftdi_helper.h"
/* -------------------------------------------------------------------------- */
return ERROR_OK;
}
-static int presto_open_libftdi(char *req_serial)
+static int presto_open_libftdi(const char *req_serial)
{
uint8_t presto_data;
return ERROR_JTAG_DEVICE_ERROR;
}
- if (ftdi_usb_purge_buffers(&presto->ftdic) < 0) {
- LOG_ERROR("unable to purge PRESTO buffers");
+ if (ftdi_tcioflush(&presto->ftdic) < 0) {
+ LOG_ERROR("unable to flush PRESTO buffers");
return ERROR_JTAG_DEVICE_ERROR;
}
if (presto_read(&presto_data, 1) != ERROR_OK) {
LOG_DEBUG("no response from PRESTO, retrying");
- if (ftdi_usb_purge_buffers(&presto->ftdic) < 0)
+ if (ftdi_tcioflush(&presto->ftdic) < 0)
return ERROR_JTAG_DEVICE_ERROR;
presto_data = 0xD0;
return ERROR_OK;
}
-static int presto_open(char *req_serial)
+static int presto_open(const char *req_serial)
{
presto->buff_out_pos = 0;
presto->buff_in_pos = 0;
unsigned char cmd;
if (presto->jtag_tck == 0)
- presto_sendbyte(0xA4); /* LED idicator - JTAG active */
+ presto_sendbyte(0xA4); /* LED indicator - JTAG active */
else if (presto->jtag_speed == 0 && !tdo_req && tms == presto->jtag_tms) {
presto->jtag_tdi_data |= (tdi != 0) << presto->jtag_tdi_count;
presto_tdi_flush();
presto_tck_idle();
- presto_sendbyte(0xA0); /* LED idicator - JTAG idle */
+ presto_sendbyte(0xA0); /* LED indicator - JTAG idle */
return presto_flush();
}
return 0;
}
-static char *presto_serial;
-
-COMMAND_HANDLER(presto_handle_serial_command)
-{
- if (CMD_ARGC == 1) {
- if (presto_serial)
- free(presto_serial);
- presto_serial = strdup(CMD_ARGV[0]);
- } else
- return ERROR_COMMAND_SYNTAX_ERROR;
-
- return ERROR_OK;
-}
-
-static const struct command_registration presto_command_handlers[] = {
- {
- .name = "presto_serial",
- .handler = presto_handle_serial_command,
- .mode = COMMAND_CONFIG,
- .help = "Configure USB serial number of Presto device.",
- .usage = "serial_string",
- },
- COMMAND_REGISTRATION_DONE
-};
-
static int presto_jtag_init(void)
{
+ const char *presto_serial = adapter_get_required_serial();
+
if (presto_open(presto_serial) != ERROR_OK) {
presto_close();
- if (presto_serial != NULL)
+ if (presto_serial)
LOG_ERROR("Cannot open PRESTO, serial number '%s'", presto_serial);
else
LOG_ERROR("Cannot open PRESTO");
bitq_cleanup();
presto_close();
LOG_INFO("PRESTO closed");
-
- if (presto_serial) {
- free(presto_serial);
- presto_serial = NULL;
- }
-
return ERROR_OK;
}
-struct jtag_interface presto_interface = {
+static struct jtag_interface presto_interface = {
+ .execute_queue = bitq_execute_queue,
+};
+
+struct adapter_driver presto_adapter_driver = {
.name = "presto",
.transports = jtag_only,
- .commands = presto_command_handlers,
- .execute_queue = bitq_execute_queue,
+ .init = presto_jtag_init,
+ .quit = presto_jtag_quit,
.speed = presto_jtag_speed,
.khz = presto_adapter_khz,
.speed_div = presto_jtag_speed_div,
- .init = presto_jtag_init,
- .quit = presto_jtag_quit,
+
+ .jtag_ops = &presto_interface,
};