]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/kingst-la2016/protocol.c
kingst-la2016: unconditionally construct MCU firmware filename
[libsigrok.git] / src / hardware / kingst-la2016 / protocol.c
index de5e1ac747eeba6927a4afe08e41f60f79043bfc..2cf67c707cda7ac201f2f81a33636439c2a0eb00 100644 (file)
@@ -864,28 +864,29 @@ static int get_capture_info(const struct sr_dev_inst *sdi)
 }
 
 SR_PRIV int la2016_upload_firmware(const struct sr_dev_inst *sdi,
-       struct sr_context *sr_ctx, libusb_device *dev, uint16_t product_id)
+       struct sr_context *sr_ctx, libusb_device *dev, gboolean skip_upload)
 {
        struct dev_context *devc;
-       char *fw_file;
+       uint16_t pid;
+       char *fw;
        int ret;
 
        devc = sdi ? sdi->priv : NULL;
+       if (!devc || !devc->usb_pid)
+               return SR_ERR_ARG;
+       pid = devc->usb_pid;
 
-       fw_file = g_strdup_printf(MCU_FWFILE_FMT, product_id);
-       sr_info("USB PID %04hx, MCU firmware '%s'.", product_id, fw_file);
+       fw = g_strdup_printf(MCU_FWFILE_FMT, pid);
+       sr_info("USB PID %04hx, MCU firmware '%s'.", pid, fw);
+       devc->mcu_firmware = g_strdup(fw);
 
-       ret = ezusb_upload_firmware(sr_ctx, dev, USB_CONFIGURATION, fw_file);
-       if (ret != SR_OK) {
-               g_free(fw_file);
+       if (skip_upload)
+               ret = SR_OK;
+       else
+               ret = ezusb_upload_firmware(sr_ctx, dev, USB_CONFIGURATION, fw);
+       g_free(fw);
+       if (ret != SR_OK)
                return ret;
-       }
-
-       if (devc) {
-               devc->mcu_firmware = fw_file;
-               fw_file = NULL;
-       }
-       g_free(fw_file);
 
        return SR_OK;
 }
@@ -1404,8 +1405,8 @@ SR_PRIV int la2016_init_hardware(const struct sr_dev_inst *sdi)
        }
 
        state = run_state(sdi);
-       if (state != 0x85e9) {
-               sr_warn("Unexpected run state, want 0x85e9, got 0x%04x.", state);
+       if ((state & 0xfff0) != 0x85e0) {
+               sr_warn("Unexpected run state, want 0x85eX, got 0x%04x.", state);
        }
 
        ret = ctrl_out(sdi, CMD_BULK_RESET, 0x00, 0, NULL, 0);