X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fhardware%2Fmaynuo-m97%2Fapi.c;h=effa1b0bede4cc2c9424daf7dbe7f70b67aa3ebe;hb=e66d1892d0dd16ed166fc8f13493f95de0607362;hp=84e90b5e7bcd7e7d0e4fa4d06a18bae52e7c649a;hpb=dd5c48a6d567a3cac62c4b0058588273bbeea171;p=libsigrok.git diff --git a/src/hardware/maynuo-m97/api.c b/src/hardware/maynuo-m97/api.c index 84e90b5e..effa1b0b 100644 --- a/src/hardware/maynuo-m97/api.c +++ b/src/hardware/maynuo-m97/api.c @@ -53,9 +53,11 @@ static const uint32_t devopts_cg[] = { SR_CONF_OVER_TEMPERATURE_PROTECTION_ACTIVE | SR_CONF_GET, }; -/* The IDs in this list are only guessed and needs to be verified - against some real hardware. If at least a few of them matches, - it will probably be safe to enable the others. */ +/* + * The IDs in this list are only guessed and needs to be verified + * against some real hardware. If at least a few of them matches, + * it will probably be safe to enable the others. + */ static const struct maynuo_m97_model supported_models[] = { // { 53, "M9711" , 30, 150, 150 }, // { 54, "M9712" , 30, 150, 300 }, @@ -170,12 +172,12 @@ static int config_compare(gconstpointer a, gconstpointer b) static GSList *scan(struct sr_dev_driver *di, GSList *options) { struct sr_config default_serialcomm = { - .key = SR_CONF_SERIALCOMM, - .data = g_variant_new_string("9600/8n1"), + .key = SR_CONF_SERIALCOMM, + .data = g_variant_new_string("9600/8n1"), }; struct sr_config default_modbusaddr = { - .key = SR_CONF_MODBUSADDR, - .data = g_variant_new_uint64(1), + .key = SR_CONF_MODBUSADDR, + .data = g_variant_new_uint64(1), }; GSList *opts = options, *devices; @@ -201,8 +203,6 @@ static int dev_open(struct sr_dev_inst *sdi) if (sr_modbus_open(modbus) < 0) return SR_ERR; - sdi->status = SR_ST_ACTIVE; - maynuo_m97_set_bit(modbus, PC1, 1); return SR_OK; @@ -213,29 +213,23 @@ static int dev_close(struct sr_dev_inst *sdi) struct dev_context *devc; struct sr_modbus_dev_inst *modbus; - if (sdi->status != SR_ST_ACTIVE) - return SR_ERR_DEV_CLOSED; - modbus = sdi->conn; - if (modbus) { - devc = sdi->priv; - if (devc->expecting_registers) { - /* Wait for the last data that was requested from the device. */ - uint16_t registers[devc->expecting_registers]; - sr_modbus_read_holding_registers(modbus, -1, - devc->expecting_registers, - registers); - } + if (!modbus) + return SR_ERR_BUG; - maynuo_m97_set_bit(modbus, PC1, 0); + devc = sdi->priv; - if (sr_modbus_close(modbus) < 0) - return SR_ERR; - sdi->status = SR_ST_INACTIVE; + if (devc->expecting_registers) { + /* Wait for the last data that was requested from the device. */ + uint16_t registers[devc->expecting_registers]; + sr_modbus_read_holding_registers(modbus, -1, + devc->expecting_registers, registers); } - return SR_OK; + maynuo_m97_set_bit(modbus, PC1, 0); + + return sr_modbus_close(modbus); } static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi, @@ -331,9 +325,6 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd (void)cg; - if (sdi->status != SR_ST_ACTIVE) - return SR_ERR_DEV_CLOSED; - modbus = sdi->conn; devc = sdi->priv; @@ -370,34 +361,12 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst * { struct dev_context *devc; GVariantBuilder gvb; - int ret; - /* Always available, even without sdi. */ - if (key == SR_CONF_SCAN_OPTIONS) { - *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t)); - return SR_OK; - } else if (key == SR_CONF_DEVICE_OPTIONS && !sdi) { - *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - drvopts, ARRAY_SIZE(drvopts), sizeof(uint32_t)); - return SR_OK; - } - - if (!sdi) - return SR_ERR_ARG; - devc = sdi->priv; + devc = (sdi) ? sdi->priv : NULL; - ret = SR_OK; if (!cg) { /* No channel group: global options. */ - switch (key) { - case SR_CONF_DEVICE_OPTIONS: - *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, - devopts, ARRAY_SIZE(devopts), sizeof(uint32_t)); - break; - default: - return SR_ERR_NA; - } + return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts); } else { switch (key) { case SR_CONF_DEVICE_OPTIONS: @@ -425,7 +394,7 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst * } } - return ret; + return SR_OK; } static int dev_acquisition_start(const struct sr_dev_inst *sdi) @@ -434,9 +403,6 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) struct sr_modbus_dev_inst *modbus; int ret; - if (sdi->status != SR_ST_ACTIVE) - return SR_ERR_DEV_CLOSED; - modbus = sdi->conn; devc = sdi->priv; @@ -445,7 +411,7 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) return ret; sr_sw_limits_acquisition_start(&devc->limits); - std_session_send_df_header(sdi, LOG_PREFIX); + std_session_send_df_header(sdi); return maynuo_m97_capture_start(sdi); } @@ -454,10 +420,7 @@ static int dev_acquisition_stop(struct sr_dev_inst *sdi) { struct sr_modbus_dev_inst *modbus; - if (sdi->status != SR_ST_ACTIVE) - return SR_ERR_DEV_CLOSED; - - std_session_send_df_end(sdi, LOG_PREFIX); + std_session_send_df_end(sdi); modbus = sdi->conn; sr_modbus_source_remove(sdi->session, modbus); @@ -473,6 +436,7 @@ static struct sr_dev_driver maynuo_m97_driver_info = { .cleanup = std_cleanup, .scan = scan, .dev_list = std_dev_list, + .dev_clear = std_dev_clear, .config_get = config_get, .config_set = config_set, .config_list = config_list,