static void buspirate_jtag_get_adcs(int);
/* low level HW communication interface */
-static int buspirate_serial_setspeed(int fd, speed_t speed);
+static int buspirate_serial_open(char *port);
+static int buspirate_serial_setspeed(int fd, char speed);
static int buspirate_serial_write(int fd, char *buf, int size);
static int buspirate_serial_read(int fd, char *buf, int size);
+static void buspirate_serial_close(int fd);
static void buspirate_print_buffer(char *buf, int size);
static int buspirate_speed(int speed)
buspirate_runtest(cmd->cmd.runtest
->num_cycles);
break;
- case JTAG_STATEMOVE:
+ case JTAG_TLR_RESET:
DEBUG_JTAG_IO("statemove end in %s",
tap_state_name(cmd->cmd.statemove
->end_state));
return ERROR_JTAG_INIT_FAILED;
}
- buspirate_fd = open(buspirate_port, O_RDWR | O_NOCTTY);
+ buspirate_fd = buspirate_serial_open(buspirate_port);
if (buspirate_fd == -1) {
LOG_ERROR("Could not open serial port.");
return ERROR_JTAG_INIT_FAILED;
}
- buspirate_serial_setspeed(buspirate_fd, B115200);
+ buspirate_serial_setspeed(buspirate_fd, SERIAL_NORMAL);
buspirate_jtag_enable(buspirate_fd);
buspirate_jtag_set_speed(buspirate_fd, SERIAL_NORMAL);
buspirate_jtag_reset(buspirate_fd);
+
+ buspirate_serial_close(buspirate_fd);
+
if (buspirate_port) {
free(buspirate_port);
buspirate_port = NULL;
static void buspirate_tap_append(int tms, int tdi)
{
- int index;
+ int chain_index;
buspirate_tap_make_space(0, 1);
- index = tap_chain_index / 8;
+ chain_index = tap_chain_index / 8;
- if (index < BUSPIRATE_BUFFER_SIZE) {
+ if (chain_index < BUSPIRATE_BUFFER_SIZE) {
int bit_index = tap_chain_index % 8;
uint8_t bit = 1 << bit_index;
if (tms)
- tms_chain[index] |= bit;
+ tms_chain[chain_index] |= bit;
else
- tms_chain[index] &= ~bit;
+ tms_chain[chain_index] &= ~bit;
if (tdi)
- tdi_chain[index] |= bit;
+ tdi_chain[chain_index] |= bit;
else
- tdi_chain[index] &= ~bit;
+ tdi_chain[chain_index] &= ~bit;
tap_chain_index++;
} else
int ret;
char tmp[2];
char ack[2];
- speed_t baudrate = B115200;
ack[0] = 0xAA;
ack[1] = 0x55;
buspirate_jtag_command(fd, tmp, 2);
/* here the adapter changes speed, we need follow */
- if (speed == SERIAL_FAST)
- baudrate = B1000000;
-
- buspirate_serial_setspeed(fd, baudrate);
+ buspirate_serial_setspeed(fd, speed);
buspirate_serial_write(fd, ack, 2);
ret = buspirate_serial_read(fd, tmp, 2);
((float)c)/155.1515, ((float)d)/155.1515);
}
-static unsigned char buspirate_jtag_command(int buspirate_fd,
+static unsigned char buspirate_jtag_command(int fd,
char *cmd, int cmdlen)
{
int res;
int len = 0;
- res = buspirate_serial_write(buspirate_fd, cmd, cmdlen);
+ res = buspirate_serial_write(fd, cmd, cmdlen);
if ((cmd[0] == CMD_UART_SPEED)
|| (cmd[0] == CMD_PORT_MODE)
default:
LOG_INFO("Wrong !");
}
- res = buspirate_serial_read(buspirate_fd, cmd, len);
+ res = buspirate_serial_read(fd, cmd, len);
if (res > 0)
return (unsigned char)cmd[1];
else
/* low level serial port */
/* TODO add support for WIN32 and others ! */
-static int buspirate_serial_setspeed(int fd, speed_t speed)
+static int buspirate_serial_open(char *port)
+{
+ int fd;
+ fd = open(buspirate_port, O_RDWR | O_NOCTTY | O_NDELAY);
+ return fd;
+}
+
+static int buspirate_serial_setspeed(int fd, char speed)
{
struct termios t_opt;
+ speed_t baud = (speed == SERIAL_FAST) ? B1000000 : B115200;
/* set the serial port parameters */
- fcntl(buspirate_fd, F_SETFL, 0);
- tcgetattr(buspirate_fd, &t_opt);
- cfsetispeed(&t_opt, speed);
- cfsetospeed(&t_opt, speed);
+ fcntl(fd, F_SETFL, 0);
+ tcgetattr(fd, &t_opt);
+ cfsetispeed(&t_opt, baud);
+ cfsetospeed(&t_opt, baud);
t_opt.c_cflag |= (CLOCAL | CREAD);
t_opt.c_cflag &= ~PARENB;
t_opt.c_cflag &= ~CSTOPB;
t_opt.c_oflag &= ~OPOST;
t_opt.c_cc[VMIN] = 0;
t_opt.c_cc[VTIME] = 10;
- tcflush(buspirate_fd, TCIFLUSH);
- tcsetattr(buspirate_fd, TCSANOW, &t_opt);
+ tcflush(fd, TCIFLUSH);
+ tcsetattr(fd, TCSANOW, &t_opt);
return 0;
}
return len;
}
+static void buspirate_serial_close(int fd)
+{
+ close(fd);
+}
+
#define LINE_SIZE 81
#define BYTES_PER_LINE 16
static void buspirate_print_buffer(char *buf, int size)