* @internal
*/
+#include <config.h>
#include <string.h>
#include "protocol.h"
#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,
* Need to implement device-specific lists.
*/
-static int init(struct sr_dev_driver *di, struct sr_context *sr_ctx)
-{
- return std_init(sr_ctx, di, LOG_PREFIX);
-}
-
/**
* Read single byte from serial port.
*
gboolean serialcomm_given;
devices = NULL;
- drvc = di->priv;
- drvc->instances = NULL;
+ drvc = di->context;
conn = serialcomm = NULL;
- model = METRAHIT_NONE;
serialcomm_given = FALSE;
sr_spew("scan_1x_2x_rs232() called!");
conn = serialcomm = NULL;
devices = NULL;
- drvc = di->priv;
- drvc->instances = NULL;
+ drvc = di->context;
sr_spew("scan_2x_bd232() called!");
/* Send message 03 "Query multimeter version and status" */
sdi->conn = serial;
- sdi->priv = devc;
if (req_stat14(sdi, TRUE) != SR_OK)
goto exit_err;
while (timeout_us > g_get_monotonic_time()) {
/* Receive reply (14 bytes) */
devc->buflen = 0;
- for (cnt = 0; cnt < 14; cnt++) {
+ for (cnt = 0; cnt < GMC_REPLY_SIZE; cnt++) {
byte = read_byte(serial, timeout_us);
if (byte != -1)
devc->buf[devc->buflen++] = (byte & MASK_6BITS);
}
- if (devc->buflen != 14)
+ if (devc->buflen != GMC_REPLY_SIZE)
continue;
devc->addr = devc->buf[0];
if (serial)
sr_serial_dev_inst_free(serial);
- if (devc)
- g_free(devc);
+ g_free(devc);
if (sdi)
sr_dev_inst_free(sdi);
return NULL;
}
-static GSList *dev_list(const struct sr_dev_driver *di)
-{
- return ((struct drv_context *)(di->priv))->instances;
-}
-
static int dev_close(struct sr_dev_inst *sdi)
{
struct dev_context *devc;
return SR_OK;
}
-static int cleanup(const struct sr_dev_driver *di)
-{
- return std_dev_clear(di, NULL);
-}
-
static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
const struct sr_channel_group *cg)
{
(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:
return SR_OK;
}
-static int dev_acquisition_start_1x_2x_rs232(const struct sr_dev_inst *sdi,
- void *cb_data)
+static int dev_acquisition_start_1x_2x_rs232(const struct sr_dev_inst *sdi)
{
struct dev_context *devc;
struct sr_serial_dev_inst *serial;
- if (!sdi || !cb_data || !(devc = sdi->priv))
- return SR_ERR_BUG;
-
if (sdi->status != SR_ST_ACTIVE)
return SR_ERR_DEV_CLOSED;
- devc->cb_data = cb_data;
+ devc = sdi->priv;
devc->settings_ok = FALSE;
devc->buflen = 0;
- /* Send header packet to the session bus. */
- std_session_send_df_header(cb_data, LOG_PREFIX);
+ std_session_send_df_header(sdi, LOG_PREFIX);
/* Start timer, if required. */
if (devc->limit_msec)
return SR_OK;
}
-static int dev_acquisition_start_2x_bd232(const struct sr_dev_inst *sdi,
- void *cb_data)
+static int dev_acquisition_start_2x_bd232(const struct sr_dev_inst *sdi)
{
struct dev_context *devc;
struct sr_serial_dev_inst *serial;
- if (!sdi || !cb_data || !(devc = sdi->priv))
- return SR_ERR_BUG;
-
if (sdi->status != SR_ST_ACTIVE)
return SR_ERR_DEV_CLOSED;
- devc->cb_data = cb_data;
+ devc = sdi->priv;
devc->settings_ok = FALSE;
devc->buflen = 0;
- /* Send header packet to the session bus. */
- std_session_send_df_header(cb_data, LOG_PREFIX);
+ std_session_send_df_header(sdi, LOG_PREFIX);
/* Start timer, if required. */
if (devc->limit_msec)
return req_meas14(sdi);
}
-static int dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data)
+static int dev_acquisition_stop(struct sr_dev_inst *sdi)
{
struct dev_context *devc;
if (sdi && (devc = sdi->priv) && devc->limit_msec)
g_timer_stop(devc->elapsed_msec);
- return std_serial_dev_acquisition_stop(sdi, cb_data, dev_close,
+ return std_serial_dev_acquisition_stop(sdi, dev_close,
sdi->conn, LOG_PREFIX);
}
-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,
- .cleanup = cleanup,
+ .init = std_init,
+ .cleanup = std_cleanup,
.scan = scan_1x_2x_rs232,
- .dev_list = dev_list,
+ .dev_list = std_dev_list,
.dev_clear = NULL,
.config_get = config_get,
.config_set = config_set,
.dev_close = dev_close,
.dev_acquisition_start = dev_acquisition_start_1x_2x_rs232,
.dev_acquisition_stop = dev_acquisition_stop,
- .priv = NULL,
+ .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,
- .cleanup = cleanup,
+ .init = std_init,
+ .cleanup = std_cleanup,
.scan = scan_2x_bd232,
- .dev_list = dev_list,
+ .dev_list = std_dev_list,
.dev_clear = NULL,
.config_get = config_get,
.config_set = config_set,
.dev_close = dev_close,
.dev_acquisition_start = dev_acquisition_start_2x_bd232,
.dev_acquisition_stop = dev_acquisition_stop,
- .priv = NULL,
+ .context = NULL,
};
+SR_REGISTER_DEV_DRIVER(gmc_mh_2x_bd232_driver_info);