X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fasix-sigma%2Fprotocol.c;h=4d1b1cceb694a304b77cbc45d8cc7ef9a717e512;hb=b0e1a1ecc4be698fb2cd48179ee48cf41e8f7f52;hp=48de1b954ba4559d1de20f6355335212cffbb2f8;hpb=2f425a56edbe528ed4566ea6791009dad61ef56d;p=libsigrok.git diff --git a/src/hardware/asix-sigma/protocol.c b/src/hardware/asix-sigma/protocol.c index 48de1b95..4d1b1cce 100644 --- a/src/hardware/asix-sigma/protocol.c +++ b/src/hardware/asix-sigma/protocol.c @@ -446,7 +446,6 @@ static int upload_firmware(struct sr_context *ctx, unsigned char pins; size_t buf_size; const char *firmware; - struct ftdi_context *ftdic; /* Avoid downloading the same firmware multiple times. */ firmware = sigma_firmware_files[firmware_idx]; @@ -455,29 +454,19 @@ static int upload_firmware(struct sr_context *ctx, return SR_OK; } - /* Make sure it's an ASIX SIGMA. */ - ftdic = &devc->ftdic; - ret = ftdi_usb_open_desc(ftdic, USB_VENDOR, USB_PRODUCT, - USB_DESCRIPTION, NULL); - if (ret < 0) { - sr_err("ftdi_usb_open failed: %s", - ftdi_get_error_string(ftdic)); - return 0; - } - - ret = ftdi_set_bitmode(ftdic, 0xdf, BITMODE_BITBANG); + ret = ftdi_set_bitmode(&devc->ftdic, 0xdf, BITMODE_BITBANG); if (ret < 0) { sr_err("ftdi_set_bitmode failed: %s", - ftdi_get_error_string(ftdic)); - return 0; + ftdi_get_error_string(&devc->ftdic)); + return SR_ERR; } /* Four times the speed of sigmalogan - Works well. */ - ret = ftdi_set_baudrate(ftdic, 750 * 1000); + ret = ftdi_set_baudrate(&devc->ftdic, 750 * 1000); if (ret < 0) { sr_err("ftdi_set_baudrate failed: %s", - ftdi_get_error_string(ftdic)); - return 0; + ftdi_get_error_string(&devc->ftdic)); + return SR_ERR; } /* Initialize the FPGA for firmware upload. */ @@ -499,14 +488,14 @@ static int upload_firmware(struct sr_context *ctx, g_free(buf); - ret = ftdi_set_bitmode(ftdic, 0x00, BITMODE_RESET); + ret = ftdi_set_bitmode(&devc->ftdic, 0x00, BITMODE_RESET); if (ret < 0) { sr_err("ftdi_set_bitmode failed: %s", - ftdi_get_error_string(ftdic)); + ftdi_get_error_string(&devc->ftdic)); return SR_ERR; } - ftdi_usb_purge_buffers(ftdic); + ftdi_usb_purge_buffers(&devc->ftdic); /* Discard garbage. */ while (sigma_read(&pins, 1, devc) == 1) @@ -554,6 +543,7 @@ SR_PRIV int sigma_set_samplerate(const struct sr_dev_inst *sdi, uint64_t sampler struct drv_context *drvc; size_t i; int ret; + int num_channels; devc = sdi->priv; drvc = sdi->driver->context; @@ -572,15 +562,16 @@ SR_PRIV int sigma_set_samplerate(const struct sr_dev_inst *sdi, uint64_t sampler * firmware is required and higher rates might limit the set * of available channels. */ + num_channels = devc->num_channels; if (samplerate <= SR_MHZ(50)) { ret = upload_firmware(drvc->sr_ctx, 0, devc); - devc->num_channels = 16; + num_channels = 16; } else if (samplerate == SR_MHZ(100)) { ret = upload_firmware(drvc->sr_ctx, 1, devc); - devc->num_channels = 8; + num_channels = 8; } else if (samplerate == SR_MHZ(200)) { ret = upload_firmware(drvc->sr_ctx, 2, devc); - devc->num_channels = 4; + num_channels = 4; } /* @@ -589,6 +580,7 @@ SR_PRIV int sigma_set_samplerate(const struct sr_dev_inst *sdi, uint64_t sampler * an "event" (memory organization internal to the device). */ if (ret == SR_OK) { + devc->num_channels = num_channels; devc->cur_samplerate = samplerate; devc->samples_per_event = 16 / devc->num_channels; devc->state.state = SIGMA_IDLE;