X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fhameg-hmo%2Fapi.c;h=c293d2b44dd9e7024a06e8e9e7cee7d68d2b2d21;hb=3be42bc22f8b36599a448273c12a76d3e0f7a940;hp=cad91c75adfacc4f0059920aee54cb9ad5c45bb7;hpb=b1f8310376265f622c6f7d81c0cc0580598ea973;p=libsigrok.git
diff --git a/src/hardware/hameg-hmo/api.c b/src/hardware/hameg-hmo/api.c
index cad91c75..c293d2b4 100644
--- a/src/hardware/hameg-hmo/api.c
+++ b/src/hardware/hameg-hmo/api.c
@@ -17,7 +17,9 @@
* along with this program. If not, see .
*/
+#include
#include
+#include "scpi.h"
#include "protocol.h"
#define SERIALCOMM "115200/8n1/flow=1"
@@ -26,6 +28,7 @@ SR_PRIV struct sr_dev_driver hameg_hmo_driver_info;
static const char *manufacturers[] = {
"HAMEG",
+ "Rohde&Schwarz",
};
static const uint32_t drvopts[] = {
@@ -53,7 +56,7 @@ static int check_manufacturer(const char *manufacturer)
{
unsigned int i;
- for (i = 0; i < ARRAY_SIZE(manufacturers); ++i)
+ for (i = 0; i < ARRAY_SIZE(manufacturers); i++)
if (!strcmp(manufacturer, manufacturers[i]))
return SR_OK;
@@ -79,7 +82,6 @@ static struct sr_dev_inst *hmo_probe_serial_device(struct sr_scpi_dev_inst *scpi
goto fail;
sdi = g_malloc0(sizeof(struct sr_dev_inst));
- sdi->status = SR_ST_ACTIVE;
sdi->vendor = g_strdup(hw_info->manufacturer);
sdi->model = g_strdup(hw_info->model);
sdi->version = g_strdup(hw_info->firmware_version);
@@ -98,10 +100,6 @@ static struct sr_dev_inst *hmo_probe_serial_device(struct sr_scpi_dev_inst *scpi
if (hmo_init_device(sdi) != SR_OK)
goto fail;
- sr_scpi_close(sdi->conn);
-
- sdi->status = SR_ST_INACTIVE;
-
return sdi;
fail:
@@ -116,12 +114,12 @@ fail:
static GSList *scan(struct sr_dev_driver *di, GSList *options)
{
- return sr_scpi_scan(di->priv, options, hmo_probe_serial_device);
+ return sr_scpi_scan(di->context, options, hmo_probe_serial_device);
}
static GSList *dev_list(const struct sr_dev_driver *di)
{
- return ((struct drv_context *)(di->priv))->instances;
+ return ((struct drv_context *)(di->context))->instances;
}
static void clear_helper(void *priv)
@@ -186,11 +184,11 @@ static int check_channel_group(struct dev_context *devc,
if (!cg)
return CG_NONE;
- for (i = 0; i < model->analog_channels; ++i)
+ for (i = 0; i < model->analog_channels; i++)
if (cg == devc->analog_groups[i])
return CG_ANALOG;
- for (i = 0; i < model->digital_pods; ++i)
+ for (i = 0; i < model->digital_pods; i++)
if (cg == devc->digital_groups[i])
return CG_DIGITAL;
@@ -233,7 +231,7 @@ static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *s
sr_err("No channel group specified.");
return SR_ERR_CHANNEL_GROUP;
} else if (cg_type == CG_ANALOG) {
- for (i = 0; i < model->analog_channels; ++i) {
+ for (i = 0; i < model->analog_channels; i++) {
if (cg != devc->analog_groups[i])
continue;
*data = g_variant_new_int32(model->num_ydivs);
@@ -250,7 +248,7 @@ static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *s
sr_err("No channel group specified.");
return SR_ERR_CHANNEL_GROUP;
} else if (cg_type == CG_ANALOG) {
- for (i = 0; i < model->analog_channels; ++i) {
+ for (i = 0; i < model->analog_channels; i++) {
if (cg != devc->analog_groups[i])
continue;
*data = g_variant_new("(tt)",
@@ -281,7 +279,7 @@ static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *s
sr_err("No channel group specified.");
return SR_ERR_CHANNEL_GROUP;
} else if (cg_type == CG_ANALOG) {
- for (i = 0; i < model->analog_channels; ++i) {
+ for (i = 0; i < model->analog_channels; i++) {
if (cg != devc->analog_groups[i])
continue;
*data = g_variant_new_string((*model->coupling_options)[state->analog_channels[i].coupling]);
@@ -380,7 +378,7 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd
if (p != (*model->vdivs)[i][0] ||
q != (*model->vdivs)[i][1])
continue;
- for (j = 1; j <= model->analog_channels; ++j) {
+ for (j = 1; j <= model->analog_channels; j++) {
if (cg != devc->analog_groups[j - 1])
continue;
state->analog_channels[j - 1].vdiv = i;
@@ -439,17 +437,17 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd
break;
case SR_CONF_TRIGGER_SLOPE:
tmp = g_variant_get_string(data, NULL);
+ for (i = 0; (*model->trigger_slopes)[i]; i++) {
+ if (g_strcmp0(tmp, (*model->trigger_slopes)[i]) != 0)
+ continue;
+ state->trigger_slope = i;
+ g_snprintf(command, sizeof(command),
+ (*model->scpi_dialect)[SCPI_CMD_SET_TRIGGER_SLOPE],
+ (*model->trigger_slopes)[i]);
- if (!tmp || !(tmp[0] == 'f' || tmp[0] == 'r'))
- return SR_ERR_ARG;
-
- state->trigger_slope = (tmp[0] == 'r') ? 0 : 1;
-
- g_snprintf(command, sizeof(command),
- (*model->scpi_dialect)[SCPI_CMD_SET_TRIGGER_SLOPE],
- (state->trigger_slope == 0) ? "POS" : "NEG");
-
- ret = sr_scpi_send(sdi->conn, command);
+ ret = sr_scpi_send(sdi->conn, command);
+ break;
+ }
break;
case SR_CONF_COUPLING:
if (cg_type == CG_NONE) {
@@ -462,7 +460,7 @@ static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sd
for (i = 0; (*model->coupling_options)[i]; i++) {
if (strcmp(tmp, (*model->coupling_options)[i]) != 0)
continue;
- for (j = 1; j <= model->analog_channels; ++j) {
+ for (j = 1; j <= model->analog_channels; j++) {
if (cg != devc->analog_groups[j - 1])
continue;
state->analog_channels[j-1].coupling = i;
@@ -692,7 +690,7 @@ static int hmo_setup_channels(const struct sr_dev_inst *sdi)
}
}
- for (i = 1; i <= model->digital_pods; ++i) {
+ for (i = 1; i <= model->digital_pods; i++) {
if (state->digital_pods[i - 1] == pod_enabled[i - 1])
continue;
g_snprintf(command, sizeof(command),
@@ -771,13 +769,10 @@ static int dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data)
{
struct dev_context *devc;
struct sr_scpi_dev_inst *scpi;
- struct sr_datafeed_packet packet;
(void)cb_data;
- packet.type = SR_DF_END;
- packet.payload = NULL;
- sr_session_send(sdi, &packet);
+ std_session_send_df_end(sdi, LOG_PREFIX);
if (sdi->status != SR_ST_ACTIVE)
return SR_ERR_DEV_CLOSED;
@@ -809,5 +804,5 @@ SR_PRIV struct sr_dev_driver hameg_hmo_driver_info = {
.dev_close = dev_close,
.dev_acquisition_start = dev_acquisition_start,
.dev_acquisition_stop = dev_acquisition_stop,
- .priv = NULL,
+ .context = NULL,
};