vsf_err_t usbtobdm_transact(uint8_t index, uint8_t *out, uint8_t outlen, uint8_t *in, uint8_t inlen, uint8_t delay, uint8_t ack) { uint16_t token; #if PARAM_CHECK if (index > 7) { LOG_BUG(ERRMSG_INVALID_INTERFACE_NUM, index); return VSFERR_FAIL; } if ((outlen > 0x0F) || (inlen > 0x0F) || (NULL == out) || (delay > 3)) { return VSFERR_FAIL; } #endif token = outlen | (inlen << 8) | (delay << 6) | (ack ? 0x8000 : 0x0000); SET_LE_U16(&usbtoxxx_info->cmd_buff[0], token); memcpy(&usbtoxxx_info->cmd_buff[2], out, outlen); if (NULL == in) { return usbtoxxx_inout_command(USB_TO_BDM, index, usbtoxxx_info->cmd_buff, 2 + outlen, inlen, NULL, 0, 0, 1); } else { return usbtoxxx_inout_command(USB_TO_BDM, index, usbtoxxx_info->cmd_buff, 2 + outlen, inlen, in, 0, inlen, 1); } }
RESULT usbtojtagraw_execute(uint8_t interface_index, uint8_t *tdi, uint8_t *tms, uint8_t *tdo, uint32_t bitlen) { uint16_t bytelen; #if PARAM_CHECK if (interface_index > 7) { LOG_BUG(ERRMSG_INVALID_INTERFACE_NUM, interface_index); return ERROR_FAIL; } #endif if (bitlen > 8 * 0xFFFF) { return ERROR_FAIL; } bytelen = (uint16_t)((bitlen + 7) >> 3); SET_LE_U32(&versaloon_cmd_buf[0], bitlen); memcpy(versaloon_cmd_buf + 4, tdi, bytelen); memcpy(versaloon_cmd_buf + 4 + bytelen, tms, bytelen); return usbtoxxx_inout_command(USB_TO_JTAG_RAW, interface_index, versaloon_cmd_buf, 4 + bytelen * 2, bytelen, tdo, 0, bytelen, 0); }
vsf_err_t usbtolpcicp_enter_program_mode(uint8_t index) { #if PARAM_CHECK if (index > 7) { LOG_BUG(ERRMSG_INVALID_INTERFACE_NUM, index); return VSFERR_FAIL; } #endif return usbtoxxx_inout_command(USB_TO_LPCICP, index, NULL, 0, 0, NULL, 0, 0, 0); }
vsf_err_t usbtomicrowire_transport(uint8_t index, uint32_t opcode, uint8_t opcode_bitlen, uint32_t addr, uint8_t addr_bitlen, uint32_t data, uint8_t data_bitlen, uint8_t *reply, uint8_t reply_bitlen) { uint8_t reply_bytelen = (reply_bitlen + 7) / 8; uint16_t offset; #if PARAM_CHECK if (index > 7) { LOG_BUG(ERRMSG_INVALID_INTERFACE_NUM, index); return VSFERR_FAIL; } if ((opcode_bitlen > 32) || (addr_bitlen > 32) || (data_bitlen > 32) || (reply_bitlen > 32)) { return VSFERR_FAIL; } #endif usbtoxxx_info->cmd_buff[0] = opcode_bitlen; usbtoxxx_info->cmd_buff[1] = addr_bitlen; usbtoxxx_info->cmd_buff[2] = data_bitlen; usbtoxxx_info->cmd_buff[3] = reply_bitlen; offset = 4; if (opcode_bitlen) { SET_LE_U32(&usbtoxxx_info->cmd_buff[offset], opcode); offset += 4; } if (addr_bitlen) { SET_LE_U32(&usbtoxxx_info->cmd_buff[offset], addr); offset += 4; } if (data_bitlen) { SET_LE_U32(&usbtoxxx_info->cmd_buff[offset], data); offset += 4; } return usbtoxxx_inout_command(USB_TO_MICROWIRE, index, usbtoxxx_info->cmd_buff, offset, reply_bytelen, reply, 0, reply_bytelen, 1); }