* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
+
+/**
+ * @file
+ * Holds driver for PRESTO programmer from ASIX.
+ * http://tools.asix.net/prg_presto.htm
+ */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "windows.h"
#endif
-#include "interface.h"
+#include <jtag/interface.h>
#include <helper/time_support.h>
#include "bitq.h"
/* PRESTO access library includes */
#if BUILD_PRESTO_FTD2XX == 1
#include <ftd2xx.h>
+#include "ftd2xx_common.h"
#elif BUILD_PRESTO_LIBFTDI == 1
#include <ftdi.h>
#else
DWORD ftbytes;
if ((presto->status = FT_Write(presto->handle, buf, size, &ftbytes)) != FT_OK)
{
- LOG_ERROR("FT_Write returned: %lu", presto->status);
+ LOG_ERROR("FT_Write returned: %s", ftd2xx_status_string(presto->status));
return ERROR_JTAG_DEVICE_ERROR;
}
DWORD ftbytes;
if ((presto->status = FT_Read(presto->handle, buf, size, &ftbytes)) != FT_OK)
{
- LOG_ERROR("FT_Read returned: %lu", presto->status);
+ LOG_ERROR("FT_Read returned: %s", ftd2xx_status_string(presto->status));
return ERROR_JTAG_DEVICE_ERROR;
}
if ((presto->status = FT_ListDevices(&numdevs, NULL, FT_LIST_NUMBER_ONLY)) != FT_OK)
{
- LOG_ERROR("FT_ListDevices failed: %i", (int)presto->status);
+ LOG_ERROR("FT_ListDevices failed: %s", ftd2xx_status_string(presto->status));
return ERROR_JTAG_DEVICE_ERROR;
}
- LOG_DEBUG("FTDI devices available: %lu", numdevs);
+ LOG_DEBUG("FTDI devices available: %" PRIu32, (uint32_t)numdevs);
for (i = 0; i < numdevs; i++)
{
if ((presto->status = FT_Open(i, &(presto->handle))) != FT_OK)
{
/* this is not fatal, the device may be legitimately open by other process, hence debug message only */
- LOG_DEBUG("FT_Open failed: %i", (int)presto->status);
+ LOG_DEBUG("FT_Open failed: %s", ftd2xx_status_string(presto->status));
continue;
}
LOG_DEBUG("FTDI device %i open", (int)i);
break;
}
else
- LOG_DEBUG("FT_GetDeviceInfo failed: %lu", presto->status);
+ LOG_DEBUG("FT_GetDeviceInfo failed: %s", ftd2xx_status_string(presto->status));
LOG_DEBUG("FTDI device %i does not match, closing", (int)i);
FT_Close(presto->handle);
int result = ERROR_OK;
#if BUILD_PRESTO_FTD2XX == 1
- unsigned long ftbytes;
+ DWORD ftbytes;
if (presto->handle == (FT_HANDLE)INVALID_HANDLE_VALUE)
return result;
/* -------------------------------------------------------------------------- */
-static int presto_jtag_khz(int khz, int *jtag_speed)
+static int presto_adapter_khz(int khz, int *jtag_speed)
{
if (khz < 0)
{
*jtag_speed = 0;
- return ERROR_INVALID_ARGUMENTS;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
if (khz >= 3000) *jtag_speed = 0;
if ((speed < 0) || (speed > 1000))
{
*khz = 0;
- return ERROR_INVALID_ARGUMENTS;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
if (speed == 0) *khz = 3000;
if (presto_jtag_speed_div(speed, &khz))
{
- return ERROR_INVALID_ARGUMENTS;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
presto->jtag_speed = speed;
}
else
{
- LOG_ERROR("expected exactly one argument to presto_serial <serial-number>");
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
return ERROR_OK;
static const struct command_registration presto_command_handlers[] = {
{
.name = "presto_serial",
- .handler = &presto_handle_serial_command,
+ .handler = presto_handle_serial_command,
.mode = COMMAND_CONFIG,
- .help = "configure serial port",
- .usage = "<devname>",
+ .help = "Configure USB serial number of Presto device.",
+ .usage = "serial_string",
},
COMMAND_REGISTRATION_DONE
};
}
LOG_INFO("PRESTO open, serial number '%s'", presto->serial);
- /* use JTAG speed setting from configuration file */
- presto_jtag_speed(jtag_get_speed());
-
bitq_interface = &presto_bitq;
return ERROR_OK;
}
}
struct jtag_interface presto_interface = {
- .name = "presto",
-
- .commands = presto_command_handlers,
-
- .execute_queue = &bitq_execute_queue,
- .speed = &presto_jtag_speed,
- .khz = &presto_jtag_khz,
- .speed_div = &presto_jtag_speed_div,
-
- .init = &presto_jtag_init,
- .quit = &presto_jtag_quit,
- };
+ .name = "presto",
+ .commands = presto_command_handlers,
+
+ .execute_queue = bitq_execute_queue,
+ .speed = presto_jtag_speed,
+ .khz = presto_adapter_khz,
+ .speed_div = presto_jtag_speed_div,
+ .init = presto_jtag_init,
+ .quit = presto_jtag_quit,
+};