#include <ftdi.h>
#include <unistd.h>
#include "usb-driver.h"
+#include "config.h"
#include "jtagkey.h"
#define USBBUFSIZE 4096
static unsigned int usb_maxlen = 0;
static unsigned char bitbang_mode;
-int jtagkey_init(unsigned short vid, unsigned short pid) {
+static int jtagkey_init(unsigned short vid, unsigned short pid) {
int ret = 0;
unsigned char c;
return ret;
}
-void jtagkey_close() {
- ftdi_disable_bitbang(&ftdic);
- ftdi_usb_close(&ftdic);
- ftdi_deinit(&ftdic);
+int jtagkey_open(int num) {
+ int ret;
+
+ ret = jtagkey_init(config_usb_vid(num), config_usb_pid(num));
+
+ if (ret >= 0)
+ ret = 0xff;
+
+ return ret;
+}
+
+void jtagkey_close(int handle) {
+ if (handle == 0xff) {
+ ftdi_disable_bitbang(&ftdic);
+ ftdi_usb_close(&ftdic);
+ ftdi_deinit(&ftdic);
+ }
}
static int jtagkey_set_bbmode(unsigned char mode) {
if (bitbang_mode != mode) {
DPRINTF("switching bitbang-mode!\n");
+
/* Wait for the latency-timer to kick in */
usleep(2);
if ((ret = ftdi_set_bitmode(&ftdic, JTAGKEY_TCK|JTAGKEY_TDI|JTAGKEY_TMS|JTAGKEY_OEn, mode)) != 0) {
pos += len;
}
- DPRINTF("read %d/%d bytes\n", i, writepos-writebuf);
writepos = writebuf;
}
if (nread)
{
DPRINTF("writing %d bytes\n", writepos-writebuf);
+
+ *writepos = last_data;
+ writepos++;
+
jtagkey_set_bbmode(BITMODE_SYNCBB);
ftdi_write_data(&ftdic, writebuf, writepos-writebuf);
switch(tr[i].cmdTrans) {
case PP_READ:
data = *readpos;
+
#ifdef DEBUG
DPRINTF("READ: 0x%x\n", data);
jtagkey_state(data);