X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fgwinstek-gpd%2Fapi.c;h=aff3a7a2faf4d2885c05db94b513d64448a4ecf5;hb=82ff7044494dab2e1473e45c72ee32b038d3eee0;hp=06e3d60d69c23e85860abe89bfac56d2595e9fec;hpb=b872ab7d301d7a8352b01bde8d6b9e8bde069129;p=libsigrok.git diff --git a/src/hardware/gwinstek-gpd/api.c b/src/hardware/gwinstek-gpd/api.c index 06e3d60d..aff3a7a2 100644 --- a/src/hardware/gwinstek-gpd/api.c +++ b/src/hardware/gwinstek-gpd/api.c @@ -60,6 +60,16 @@ static const struct gpd_model models[] = { { { 0, 30, 0.001 }, { 0, 3, 0.001 } }, }, }, + { GPD_3303S, "GPD-3303S", + CHANMODE_INDEPENDENT, + 2, + { + /* Channel 1 */ + { { 0, 32, 0.001 }, { 0, 3.2, 0.001 } }, + /* Channel 2 */ + { { 0, 32, 0.001 }, { 0, 3.2, 0.001 } }, + }, + }, }; static GSList *scan(struct sr_dev_driver *di, GSList *options) @@ -72,7 +82,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) GSList *l; struct sr_serial_dev_inst *serial; struct sr_dev_inst *sdi; - char reply[50]; + char reply[100]; unsigned int i; struct dev_context *devc; char channel[10]; @@ -107,7 +117,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) if (serial_open(serial, SERIAL_RDWR) != SR_OK) return NULL; - serial_flush(serial); gpd_send_cmd(serial, "*IDN?\n"); if (gpd_receive_reply(serial, reply, sizeof(reply)) != SR_OK) { sr_err("Device did not reply."); @@ -170,8 +179,16 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) if (sscanf(reply, "%1u%1u%1u%1u%1u%1u%1u%1u", &cc_cv_ch1, &cc_cv_ch2, &track1, &track2, &beep, &devc->output_enabled, &baud1, &baud2) != 8) { - sr_err("Invalid reply to STATUS: '%s'.", reply); - goto error; + /* old firmware (< 2.00?) responds with different format */ + if (sscanf(reply, "%1u %1u %1u %1u %1u X %1u X", &cc_cv_ch1, + &cc_cv_ch2, &track1, &track2, &beep, + &devc->output_enabled) != 6) { + sr_err("Invalid reply to STATUS: '%s'.", reply); + goto error; + } + /* ignore remaining two lines of status message */ + gpd_receive_reply(serial, reply, sizeof(reply)); + gpd_receive_reply(serial, reply, sizeof(reply)); } for (i = 0; i < model->num_channels; ++i) { @@ -220,14 +237,9 @@ error: static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi, const struct sr_channel_group *cg) { - int ret, channel; + int channel; const struct dev_context *devc; const struct sr_channel *ch; - const struct sr_key_info *ki; - - ki = sr_key_info_get(SR_KEY_CONFIG, key); - - sr_info("%s(%d, %s)", __func__, key, (ki != NULL) ? ki->name : NULL); if (!sdi) return SR_ERR_ARG; @@ -236,6 +248,9 @@ static int config_get(uint32_t key, GVariant **data, if (!cg) { switch (key) { + case SR_CONF_LIMIT_SAMPLES: + case SR_CONF_LIMIT_MSEC: + return sr_sw_limits_config_get(&devc->limits, key, data); case SR_CONF_CHANNEL_CONFIG: *data = g_variant_new_string( channel_modes[devc->channel_mode]); @@ -249,9 +264,6 @@ static int config_get(uint32_t key, GVariant **data, } else { ch = cg->channels->data; channel = ch->index; - sr_info("%s(%d, %s, %d)", __func__, key, - (ki != NULL) ? ki->name : NULL, channel); - ret = SR_OK; switch (key) { case SR_CONF_VOLTAGE: *data = g_variant_new_double( @@ -274,7 +286,7 @@ static int config_get(uint32_t key, GVariant **data, } } - return ret; + return SR_OK; } static int config_set(uint32_t key, GVariant *data, @@ -287,7 +299,6 @@ static int config_set(uint32_t key, GVariant *data, struct dev_context *devc; devc = sdi->priv; - sr_info("%s(%d)", __func__, key); ret = SR_OK; @@ -378,7 +389,6 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) struct dev_context *devc; struct sr_serial_dev_inst *serial; - sr_info("%s()", __func__); devc = sdi->priv; sr_sw_limits_acquisition_start(&devc->limits); @@ -393,7 +403,7 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) return SR_OK; } -SR_PRIV const struct sr_dev_driver gwinstek_gpd_driver_info = { +static struct sr_dev_driver gwinstek_gpd_driver_info = { .name = "gwinstek-gpd", .longname = "GW Instek GPD", .api_version = 1,