X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fgmc-mh-1x-2x%2Fapi.c;h=00789d45e6c5b2e43c0cfccce895f907889fb765;hb=15f96409dc54fd2ef784c59156daedd9acfa78ed;hp=de3e9ea527d33de921d386dbb0bfadca1bb4a44e;hpb=c45c32ce47f429099cb0f1cabc1b45b9bcf44855;p=libsigrok.git diff --git a/src/hardware/gmc-mh-1x-2x/api.c b/src/hardware/gmc-mh-1x-2x/api.c index de3e9ea5..00789d45 100644 --- a/src/hardware/gmc-mh-1x-2x/api.c +++ b/src/hardware/gmc-mh-1x-2x/api.c @@ -32,9 +32,6 @@ #define SERIALCOMM_2X "9600/8n1/dtr=1/rts=1/flow=0" #define VENDOR_GMC "Gossen Metrawatt" -SR_PRIV struct sr_dev_driver gmc_mh_1x_2x_rs232_driver_info; -SR_PRIV struct sr_dev_driver gmc_mh_2x_bd232_driver_info; - static const uint32_t scanopts[] = { SR_CONF_CONN, SR_CONF_SERIALCOMM, @@ -66,11 +63,6 @@ static const uint32_t devopts_bd[] = { * Need to implement device-specific lists. */ -static int init(struct sr_dev_driver *di, struct sr_context *sr_ctx) -{ - return std_init(di, sr_ctx); -} - /** * Read single byte from serial port. * @@ -152,7 +144,6 @@ static enum model scan_model_sm(struct sr_serial_dev_inst *serial) static GSList *scan_1x_2x_rs232(struct sr_dev_driver *di, GSList *options) { struct sr_dev_inst *sdi; - struct drv_context *drvc; struct dev_context *devc; struct sr_config *src; struct sr_serial_dev_inst *serial; @@ -162,8 +153,6 @@ static GSList *scan_1x_2x_rs232(struct sr_dev_driver *di, GSList *options) gboolean serialcomm_given; devices = NULL; - drvc = di->context; - drvc->instances = NULL; conn = serialcomm = NULL; serialcomm_given = FALSE; @@ -218,21 +207,16 @@ static GSList *scan_1x_2x_rs232(struct sr_dev_driver *di, GSList *options) sdi->vendor = g_strdup(VENDOR_GMC); sdi->model = g_strdup(gmc_model_str(model)); devc = g_malloc0(sizeof(struct dev_context)); + sr_sw_limits_init(&devc->limits); devc->model = model; - devc->limit_samples = 0; - devc->limit_msec = 0; - devc->num_samples = 0; - devc->elapsed_msec = g_timer_new(); devc->settings_ok = FALSE; sdi->conn = serial; sdi->priv = devc; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P1"); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); } - return devices; + return std_scan_complete(di, devices); } /** @@ -242,7 +226,6 @@ static GSList *scan_1x_2x_rs232(struct sr_dev_driver *di, GSList *options) static GSList *scan_2x_bd232(struct sr_dev_driver *di, GSList *options) { struct sr_dev_inst *sdi; - struct drv_context *drvc; struct dev_context *devc; struct sr_config *src; struct sr_serial_dev_inst *serial; @@ -256,9 +239,6 @@ static GSList *scan_2x_bd232(struct sr_dev_driver *di, GSList *options) conn = serialcomm = NULL; devices = NULL; - drvc = di->context; - drvc->instances = NULL; - sr_spew("scan_2x_bd232() called!"); for (l = options; l; l = l->next) { @@ -315,14 +295,12 @@ static GSList *scan_2x_bd232(struct sr_dev_driver *di, GSList *options) if (devc->model != METRAHIT_NONE) { sr_spew("%s %s detected!", VENDOR_GMC, gmc_model_str(devc->model)); - devc->elapsed_msec = g_timer_new(); + sr_sw_limits_init(&devc->limits); sdi->model = g_strdup(gmc_model_str(devc->model)); sdi->version = g_strdup_printf("Firmware %d.%d", devc->fw_ver_maj, devc->fw_ver_min); sdi->conn = serial; sdi->priv = devc; - sdi->driver = di; sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P1"); - drvc->instances = g_slist_append(drvc->instances, sdi); devices = g_slist_append(devices, sdi); devc = g_malloc0(sizeof(struct dev_context)); sdi = g_malloc0(sizeof(struct sr_dev_inst)); @@ -337,7 +315,7 @@ static GSList *scan_2x_bd232(struct sr_dev_driver *di, GSList *options) sr_dev_inst_free(sdi); } - return devices; + return std_scan_complete(di, devices); exit_err: sr_info("scan_2x_bd232(): Error!"); @@ -358,13 +336,8 @@ static int dev_close(struct sr_dev_inst *sdi) std_serial_dev_close(sdi); sdi->status = SR_ST_INACTIVE; - - /* Free dynamically allocated resources. */ - if ((devc = sdi->priv) && devc->elapsed_msec) { - g_timer_destroy(devc->elapsed_msec); - devc->elapsed_msec = NULL; + if ((devc = sdi->priv)) devc->model = METRAHIT_NONE; - } return SR_OK; } @@ -377,17 +350,16 @@ static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *s (void)cg; - if (!sdi || !(devc = sdi->priv)) + if (!sdi) return SR_ERR_ARG; + devc = sdi->priv; + ret = SR_OK; switch (key) { case SR_CONF_LIMIT_SAMPLES: - *data = g_variant_new_uint64(devc->limit_samples); - break; case SR_CONF_LIMIT_MSEC: - *data = g_variant_new_uint64(devc->limit_msec); - break; + return sr_sw_limits_config_get(&devc->limits, key, data); case SR_CONF_POWER_OFF: *data = g_variant_new_boolean(FALSE); break; @@ -461,11 +433,8 @@ static int dev_acquisition_start_1x_2x_rs232(const struct sr_dev_inst *sdi) devc->settings_ok = FALSE; devc->buflen = 0; - std_session_send_df_header(sdi, LOG_PREFIX); - - /* Start timer, if required. */ - if (devc->limit_msec) - g_timer_start(devc->elapsed_msec); + sr_sw_limits_acquisition_start(&devc->limits); + std_session_send_df_header(sdi); /* Poll every 40ms, or whenever some data comes in. */ serial = sdi->conn; @@ -487,11 +456,8 @@ static int dev_acquisition_start_2x_bd232(const struct sr_dev_inst *sdi) devc->settings_ok = FALSE; devc->buflen = 0; - std_session_send_df_header(sdi, LOG_PREFIX); - - /* Start timer, if required. */ - if (devc->limit_msec) - g_timer_start(devc->elapsed_msec); + sr_sw_limits_acquisition_start(&devc->limits); + std_session_send_df_header(sdi); /* Poll every 40ms, or whenever some data comes in. */ serial = sdi->conn; @@ -504,21 +470,14 @@ static int dev_acquisition_start_2x_bd232(const struct sr_dev_inst *sdi) static int dev_acquisition_stop(struct sr_dev_inst *sdi) { - struct dev_context *devc; - - /* Stop timer, if required. */ - if (sdi && (devc = sdi->priv) && devc->limit_msec) - g_timer_stop(devc->elapsed_msec); - - return std_serial_dev_acquisition_stop(sdi, dev_close, - sdi->conn, LOG_PREFIX); + return std_serial_dev_acquisition_stop(sdi, dev_close); } -SR_PRIV struct sr_dev_driver gmc_mh_1x_2x_rs232_driver_info = { +static struct sr_dev_driver gmc_mh_1x_2x_rs232_driver_info = { .name = "gmc-mh-1x-2x-rs232", .longname = "Gossen Metrawatt Metrahit 1x/2x, RS232 interface", .api_version = 1, - .init = init, + .init = std_init, .cleanup = std_cleanup, .scan = scan_1x_2x_rs232, .dev_list = std_dev_list, @@ -532,12 +491,13 @@ SR_PRIV struct sr_dev_driver gmc_mh_1x_2x_rs232_driver_info = { .dev_acquisition_stop = dev_acquisition_stop, .context = NULL, }; +SR_REGISTER_DEV_DRIVER(gmc_mh_1x_2x_rs232_driver_info); -SR_PRIV struct sr_dev_driver gmc_mh_2x_bd232_driver_info = { +static struct sr_dev_driver gmc_mh_2x_bd232_driver_info = { .name = "gmc-mh-2x-bd232", .longname = "Gossen Metrawatt Metrahit 2x, BD232/SI232-II interface", .api_version = 1, - .init = init, + .init = std_init, .cleanup = std_cleanup, .scan = scan_2x_bd232, .dev_list = std_dev_list, @@ -551,3 +511,4 @@ SR_PRIV struct sr_dev_driver gmc_mh_2x_bd232_driver_info = { .dev_acquisition_stop = dev_acquisition_stop, .context = NULL, }; +SR_REGISTER_DEV_DRIVER(gmc_mh_2x_bd232_driver_info);