static void dsu_writeDR(urj_chain_t *chain, int size, uint64_t wdata) { urj_tap_register_t *rwr = urj_tap_register_alloc(size); urj_tap_register_set_value(rwr, wdata); urj_tap_capture_dr(chain); urj_tap_shift_register(chain, rwr, NULL, URJ_CHAIN_EXITMODE_IDLE); urj_tap_register_free(rwr); }
static void dsu_writeIR(urj_chain_t *chain, int size, unsigned int val) { urj_tap_register_t *rwr = urj_tap_register_alloc(size); urj_tap_register_set_value(rwr, val); urj_tap_capture_ir(chain); urj_tap_shift_register(chain, rwr, NULL, URJ_CHAIN_EXITMODE_IDLE); urj_tap_register_free(rwr); /* urj_tap_capture_ir(chain); */ /* urj_tap_register_set_value(wir, val); */ /* urj_tap_shift_register(chain, wir, NULL, URJ_CHAIN_EXITMODE_IDLE); */ }
static uint64_t dsu_readDR(urj_chain_t *chain, int size, uint64_t wdata) { urj_tap_register_t *rwr = urj_tap_register_alloc(size); urj_tap_register_t *rrd = urj_tap_register_fill(urj_tap_register_alloc(size), 0); uint64_t rdata; urj_tap_register_set_value(rwr, wdata); urj_tap_capture_dr(chain); urj_tap_shift_register(chain, rwr, rrd, URJ_CHAIN_EXITMODE_IDLE); rdata = urj_tap_register_get_value(rrd); urj_tap_register_free(rwr); urj_tap_register_free(rrd); return rdata; }
int urj_tap_register_set_string (urj_tap_register_t *tr, const char *str) { if (!tr) { urj_error_set (URJ_ERROR_INVALID, "tr == NULL"); return URJ_STATUS_FAIL; } if (strncmp (str, "0x", 2) == 0) { /* Hex values */ uint64_t val; if (sscanf (str, "%"PRIX64, &val) != 1) { urj_error_set (URJ_ERROR_SYNTAX, _("invalid hex string '%s'"), str); return URJ_STATUS_FAIL; } return urj_tap_register_set_value (tr, val); } else { /* Bit string */ unsigned int bit; if (strspn (str, "01") != strlen (str)) { urj_error_set (URJ_ERROR_SYNTAX, _("bit patterns should be 0s and 1s, not '%s'"), str); return URJ_STATUS_FAIL; } else if (tr->len != strlen (str)) { urj_error_set (URJ_ERROR_OUT_OF_BOUNDS, _("register length %d mismatch: %zd"), tr->len, strlen (str)); return URJ_STATUS_FAIL; } for (bit = 0; str[bit]; ++bit) tr->data[tr->len - 1 - bit] = (str[bit] == '1'); return URJ_STATUS_OK; } }