*/
/*
- * ASIX Sigma Logic Analyzer Driver
+ * ASIX SIGMA Logic Analyzer Driver
*/
#include "config.h"
fseek(f, 0, SEEK_SET);
if (!(compressed_buf = g_try_malloc(file_size))) {
- sr_err("asix: %s: compressed_buf malloc failed", __func__);
+ sr_err("sigma: %s: compressed_buf malloc failed", __func__);
+ fclose(f);
return SR_ERR_MALLOC;
}
if (!(firmware = g_try_malloc(buffer_size))) {
- sr_err("asix: %s: firmware malloc failed", __func__);
+ sr_err("sigma: %s: firmware malloc failed", __func__);
+ fclose(f);
+ g_free(compressed_buf);
return SR_ERR_MALLOC;
}
*buf = p = (unsigned char *)g_try_malloc(*buf_size);
if (!p) {
- sr_err("asix: %s: buf/p malloc failed", __func__);
+ sr_err("sigma: %s: buf/p malloc failed", __func__);
+ g_free(compressed_buf);
+ g_free(firmware);
return SR_ERR_MALLOC;
}
deviceinfo = deviceinfo;
if (!(sigma = g_try_malloc(sizeof(struct sigma)))) {
- sr_err("asix: %s: sigma malloc failed", __func__);
+ sr_err("sigma: %s: sigma malloc failed", __func__);
return 0; /* FIXME: Should be SR_ERR_MALLOC. */
}
return 1;
free:
- free(sigma);
+ g_free(sigma);
return 0;
}
if (sigma->cur_samplerate >= SR_MHZ(100)) {
/* Fast trigger support. */
if (trigger_set) {
- sr_warn("Asix Sigma only supports a single "
+ sr_warn("ASIX SIGMA only supports a single "
"pin trigger in 100 and 200MHz mode.");
return SR_ERR;
}
else if (probe->trigger[0] == 'r')
sigma->trigger.risingmask |= probebit;
else {
- sr_warn("Asix Sigma only supports "
+ sr_warn("ASIX SIGMA only supports "
"rising/falling trigger in 100 "
"and 200MHz mode.");
return SR_ERR;
* does not permit ORed triggers.
*/
if (trigger_set > 1) {
- sr_warn("Asix Sigma only supports 1 rising/"
+ sr_warn("ASIX SIGMA only supports 1 rising/"
"falling triggers.");
return SR_ERR;
}
return SR_OK;
}
-static void hw_closedev(int device_index)
+static int hw_closedev(int device_index)
{
struct sr_device_instance *sdi;
struct sigma *sigma;
- if ((sdi = sr_get_device_instance(device_instances, device_index)))
- {
- sigma = sdi->priv;
- if (sdi->status == SR_ST_ACTIVE)
- ftdi_usb_close(&sigma->ftdic);
+ if (!(sdi = sr_get_device_instance(device_instances, device_index))) {
+ sr_err("sigma: %s: sdi was NULL", __func__);
+ return SR_ERR; /* TODO: SR_ERR_ARG? */
+ }
- sdi->status = SR_ST_INACTIVE;
+ if (!(sigma = sdi->priv)) {
+ sr_err("sigma: %s: sdi->priv was NULL", __func__);
+ return SR_ERR; /* TODO: SR_ERR_ARG? */
}
+
+ /* TODO */
+ if (sdi->status == SR_ST_ACTIVE)
+ ftdi_usb_close(&sigma->ftdic);
+
+ sdi->status = SR_ST_INACTIVE;
+
+ return SR_OK;
}
static void hw_cleanup(void)
}
struct sr_device_plugin asix_sigma_plugin_info = {
- "asix-sigma",
- "ASIX SIGMA",
- 1,
- hw_init,
- hw_cleanup,
- hw_opendev,
- hw_closedev,
- hw_get_device_info,
- hw_get_status,
- hw_get_capabilities,
- hw_set_configuration,
- hw_start_acquisition,
- hw_stop_acquisition,
+ .name = "asix-sigma",
+ .longname = "ASIX SIGMA",
+ .api_version = 1,
+ .init = hw_init,
+ .cleanup = hw_cleanup,
+ .opendev = hw_opendev,
+ .closedev = hw_closedev,
+ .get_device_info = hw_get_device_info,
+ .get_status = hw_get_status,
+ .get_capabilities = hw_get_capabilities,
+ .set_configuration = hw_set_configuration,
+ .start_acquisition = hw_start_acquisition,
+ .stop_acquisition = hw_stop_acquisition,
};