X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fnorma-dmm%2Fapi.c;h=27a4db5e5d846ec579c9cbd3622cfaf83204ce19;hb=81a9ab725f9ce9125c9bc22bc5ebd2903c26bc35;hp=143f03874f49a82173ff7270cde7118d6e500444;hpb=f8e76e2e74bf09024af50d68a0e90a558be126b9;p=libsigrok.git
diff --git a/hardware/norma-dmm/api.c b/hardware/norma-dmm/api.c
index 143f0387..27a4db5e 100644
--- a/hardware/norma-dmm/api.c
+++ b/hardware/norma-dmm/api.c
@@ -17,13 +17,8 @@
* along with this program. If not, see .
*/
-#include
-#include
-#include
-
#include "protocol.h"
-
static const int32_t hwopts[] = {
SR_CONF_CONN,
SR_CONF_SERIALCOMM,
@@ -36,20 +31,18 @@ static const int32_t hwcaps[] = {
SR_CONF_CONTINUOUS,
};
+#define BUF_MAX 50
#define SERIALCOMM "4800/8n1/dtr=1/rts=0/flow=1"
-
SR_PRIV struct sr_dev_driver norma_dmm_driver_info;
static struct sr_dev_driver *di = &norma_dmm_driver_info;
-
static int init(struct sr_context *sr_ctx)
{
return std_init(sr_ctx, di, LOG_PREFIX);
}
-
static GSList *scan(GSList *options)
{
struct sr_dev_inst *sdi;
@@ -66,8 +59,6 @@ static GSList *scan(GSList *options)
char req[10];
int auxtype;
- #define BUF_MAX (50)
-
devices = NULL;
drvc = di->priv;
drvc->instances = NULL;
@@ -97,28 +88,27 @@ static GSList *scan(GSList *options)
serial_flush(serial);
- len = BUF_MAX;
- if (!(buf = g_try_malloc(len))) {
+ if (!(buf = g_try_malloc(BUF_MAX))) {
sr_err("Serial buffer malloc failed.");
return NULL;
}
snprintf(req, sizeof(req), "%s\r\n",
- nmadmm_requests[NMADMM_REQ_IDN].reqstr);
+ nmadmm_requests[NMADMM_REQ_IDN].req_str);
for (cnt = 0; cnt < 7; cnt++) {
if (serial_write(serial, req, strlen(req)) == -1) {
sr_err("Unable to send identification request: %d %s.",
- errno, strerror(errno));
+ errno, strerror(errno));
return NULL;
}
len = BUF_MAX;
serial_readline(serial, &buf, &len, 1500);
if (!len)
continue;
- buf[BUF_MAX-1] = '\0';
+ buf[BUF_MAX - 1] = '\0';
- /* Match id string, e.g. "1834 065 V1.06,IF V1.02" (DM950) */
- if (g_regex_match_simple("^1834 [^,]*,IF V*", (char*)buf,0,0)) {
+ /* Match ID string, e.g. "1834 065 V1.06,IF V1.02" (DM950) */
+ if (g_regex_match_simple("^1834 [^,]*,IF V*", (char *)buf, 0, 0)) {
auxtype = xgittoint(buf[7]);
// TODO: Will this work with non-DM950?
snprintf(fmttype, sizeof(fmttype), "DM9%d0", auxtype);
@@ -127,7 +117,7 @@ static GSList *scan(GSList *options)
if (!(sdi = sr_dev_inst_new(0, SR_ST_INACTIVE,
"Norma", fmttype, buf + 9)))
return NULL;
- if (!(devc = g_try_malloc0(sizeof(*devc)))) {
+ if (!(devc = g_try_malloc0(sizeof(struct dev_context)))) {
sr_err("Device context malloc failed.");
return NULL;
}
@@ -146,9 +136,13 @@ static GSList *scan(GSList *options)
devices = g_slist_append(devices, sdi);
break;
}
- /* The interface of the DM9x0 contains a cap that needs to
- charge for up to 10s before the interface works, if not powered
- externally. Therefore wait a little to improve chances. */
+
+ /*
+ * The interface of the DM9x0 contains a cap that needs to
+ * charge for up to 10s before the interface works, if not
+ * powered externally. Therefore wait a little to improve
+ * chances.
+ */
if (cnt == 3) {
sr_info("Waiting 5s to allow interface to settle.");
g_usleep(5 * 1000 * 1000);
@@ -164,45 +158,23 @@ static GSList *scan(GSList *options)
return devices;
}
-
static GSList *dev_list(void)
{
return ((struct drv_context *)(di->priv))->instances;
}
-
static int dev_clear(void)
{
return std_dev_clear(di, NULL);
}
-
-static int dev_open(struct sr_dev_inst *sdi)
-{
- struct sr_serial_dev_inst *serial;
-
- serial = sdi->conn;
- if (serial_open(serial, SERIAL_RDWR | SERIAL_NONBLOCK) != SR_OK)
- return SR_ERR;
-
- sdi->status = SR_ST_ACTIVE;
-
- return SR_OK;
-}
-
-
static int dev_close(struct sr_dev_inst *sdi)
{
- struct sr_serial_dev_inst *serial;
struct dev_context *devc;
- serial = sdi->conn;
- if (serial && serial->fd != -1) {
- serial_close(serial);
- sdi->status = SR_ST_INACTIVE;
- }
+ std_serial_dev_close(sdi);
- // Free dynamically allocated resources.
+ /* Free dynamically allocated resources. */
if ((devc = sdi->priv) && devc->version) {
g_free(devc->version);
devc->version = NULL;
@@ -212,17 +184,18 @@ static int dev_close(struct sr_dev_inst *sdi)
return SR_OK;
}
-
static int cleanup(void)
{
return dev_clear();
}
-
-static int config_set(int key, GVariant *data, const struct sr_dev_inst *sdi)
+static int config_set(int key, GVariant *data, const struct sr_dev_inst *sdi,
+ const struct sr_probe_group *probe_group)
{
struct dev_context *devc;
+ (void)probe_group;
+
if (sdi->status != SR_ST_ACTIVE)
return SR_ERR_DEV_CLOSED;
@@ -254,10 +227,11 @@ static int config_set(int key, GVariant *data, const struct sr_dev_inst *sdi)
return SR_OK;
}
-
-static int config_list(int key, GVariant **data, const struct sr_dev_inst *sdi)
+static int config_list(int key, GVariant **data, const struct sr_dev_inst *sdi,
+ const struct sr_probe_group *probe_group)
{
(void)sdi;
+ (void)probe_group;
switch (key) {
case SR_CONF_SCAN_OPTIONS:
@@ -275,7 +249,6 @@ static int config_list(int key, GVariant **data, const struct sr_dev_inst *sdi)
return SR_OK;
}
-
static int dev_acquisition_start(const struct sr_dev_inst *sdi,
void *cb_data)
{
@@ -302,13 +275,12 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi,
/* Poll every 100ms, or whenever some data comes in. */
serial = sdi->conn;
- sr_source_add(serial->fd, G_IO_IN, 100, norma_dmm_receive_data,
+ serial_source_add(serial, G_IO_IN, 100, norma_dmm_receive_data,
(void *)sdi);
return SR_OK;
}
-
static int dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data)
{
struct dev_context *devc;
@@ -317,14 +289,13 @@ static int dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data)
if (sdi && (devc = sdi->priv) && devc->limit_msec)
g_timer_stop(devc->elapsed_msec);
- return std_dev_acquisition_stop_serial(sdi, cb_data, dev_close,
+ return std_serial_dev_acquisition_stop(sdi, cb_data, dev_close,
sdi->conn, LOG_PREFIX);
}
-
SR_PRIV struct sr_dev_driver norma_dmm_driver_info = {
.name = "norma-dmm",
- .longname = "Norma DM910..950, Siemens B1024..1028 DMMs",
+ .longname = "Norma DM9x0 / Siemens B102x DMMs",
.api_version = 1,
.init = init,
.cleanup = cleanup,
@@ -334,7 +305,7 @@ SR_PRIV struct sr_dev_driver norma_dmm_driver_info = {
.config_get = NULL,
.config_set = config_set,
.config_list = config_list,
- .dev_open = dev_open,
+ .dev_open = std_serial_dev_open,
.dev_close = dev_close,
.dev_acquisition_start = dev_acquisition_start,
.dev_acquisition_stop = dev_acquisition_stop,