/* External interface functions */
static int opendous_execute_queue(void);
-static int opendous_speed(int speed);
-static int opendous_speed_div(int speed, int *khz);
-static int opendous_khz(int khz, int *jtag_speed);
static int opendous_init(void);
static int opendous_quit(void);
.name = "opendous",
.commands = opendous_command_handlers,
.execute_queue = opendous_execute_queue,
- .speed = opendous_speed,
- .speed_div = opendous_speed_div,
- .khz = opendous_khz,
.init = opendous_init,
.quit = opendous_quit,
};
return opendous_tap_execute();
}
-/* Sets speed in kHz. */
-static int opendous_speed(int speed)
-{
- if (speed <= OPENDOUS_MAX_SPEED) {
- /* one day... */
- return ERROR_OK;
- } else
- LOG_INFO("Requested speed %dkHz exceeds maximum of %dkHz, ignored", speed, OPENDOUS_MAX_SPEED);
-
- return ERROR_OK;
-}
-
-static int opendous_speed_div(int speed, int *khz)
-{
- *khz = speed;
-
- return ERROR_OK;
-}
-
-static int opendous_khz(int khz, int *jtag_speed)
-{
- *jtag_speed = khz;
- /* TODO: convert this into delay value for opendous */
-
- return ERROR_OK;
-}
-
static int opendous_init(void)
{
int check_cnt;
/* Move to appropriate scan state */
opendous_end_state(ir_scan ? TAP_IRSHIFT : TAP_DRSHIFT);
- opendous_state_move();
+ if (tap_get_state() != tap_get_end_state())
+ opendous_state_move();
+
opendous_end_state(saved_end_state);
/* Scan */
void opendous_tap_ensure_space(int scans, int bits)
{
int available_scans = MAX_PENDING_SCAN_RESULTS - pending_scan_results_length;
+ int available_bits = OPENDOUS_TAP_BUFFER_SIZE / 2 - tap_length;
- if (scans > available_scans)
+ if ((scans > available_scans) || (bits > available_bits))
opendous_tap_execute();
}
unsigned char _tms = tms ? 1 : 0;
unsigned char _tdi = tdi ? 1 : 0;
+ opendous_tap_ensure_space(0, 1);
+
int tap_index = tap_length / 4;
int bits = (tap_length % 4) * 2;