static int ublast_ftdi_init(struct ublast_lowlevel *low) { uint8_t latency_timer; struct ftdi_context *ftdic = ublast_getftdic(low); LOG_INFO("usb blaster interface using libftdi"); if (ftdi_init(ftdic) < 0) return ERROR_JTAG_INIT_FAILED; /* context, vendor id, product id */ if (ftdi_usb_open(ftdic, low->ublast_vid, low->ublast_pid) < 0) { LOG_ERROR("unable to open ftdi device: %s", ftdic->error_str); return ERROR_JTAG_INIT_FAILED; } if (ftdi_usb_reset(ftdic) < 0) { LOG_ERROR("unable to reset ftdi device"); return ERROR_JTAG_INIT_FAILED; } if (ftdi_set_latency_timer(ftdic, 2) < 0) { LOG_ERROR("unable to set latency timer"); return ERROR_JTAG_INIT_FAILED; } if (ftdi_get_latency_timer(ftdic, &latency_timer) < 0) { LOG_ERROR("unable to get latency timer"); return ERROR_JTAG_INIT_FAILED; } LOG_DEBUG("current latency timer: %u", latency_timer); ftdi_disable_bitbang(ftdic); return ERROR_OK; }
int CKMotionIO::SetLatency(UCHAR LatencyTimer) { int ftStatus; unsigned char c; Mutex->Lock(); ftStatus = ftdi_get_latency_timer(ftdi,&c ); if(c != LatencyTimer){ log_info("ftdi_get_latency_timer old value %d", c); ftStatus = ftdi_set_latency_timer(ftdi,LatencyTimer ); if (ftStatus < FT_OK) { // FT_SetLatencyTimer FAILED! ErrorMessageBox("Unable to set USB Latency timer"); Mutex->Unlock(); return 1; } } // LatencyTimer set ftStatus = ftdi_set_event_char(ftdi,'\n',1); if (ftStatus == FT_OK) { // Event set Mutex->Unlock(); return 0; } else { // FT_SetLatencyTimer FAILED! ErrorMessageBox("Unable to set USB Event Character"); Mutex->Unlock(); return 1; } }
unsigned Context::latency() { unsigned char latency = 0; ftdi_get_latency_timer(d->ftdi, &latency); return latency; }