X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fhantek-4032l%2Fapi.c;h=cf01e2997ed286085c9c064baaa832086dc36268;hb=a5b9880eb2c2cdde65b86f67183e638334a11386;hp=9576fabccb068ad9fcc6ac3d5b6951e2769fabe7;hpb=5089a14345442bb87d0970efc0bc10235a530d60;p=libsigrok.git diff --git a/src/hardware/hantek-4032l/api.c b/src/hardware/hantek-4032l/api.c index 9576fabc..cf01e299 100644 --- a/src/hardware/hantek-4032l/api.c +++ b/src/hardware/hantek-4032l/api.c @@ -180,7 +180,8 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) des.idProduct != H4032L_USB_PRODUCT) continue; - usb_get_port_path(devlist[i], connection_id, sizeof(connection_id)); + if (usb_get_port_path(devlist[i], connection_id, sizeof(connection_id)) < 0) + continue; sdi = g_malloc0(sizeof(struct sr_dev_inst)); sdi->driver = &hantek_4032l_driver_info; @@ -333,7 +334,7 @@ static int config_set(uint32_t key, GVariant *data, i++; if (i == ARRAY_SIZE(samplerates_hw) || sample_rate == 0) { - sr_err("invalid sample rate"); + sr_err("Invalid sample rate."); return SR_ERR_SAMPLERATE; } cmd_pkt->sample_rate = i; @@ -349,8 +350,8 @@ static int config_set(uint32_t key, GVariant *data, number_samples &= 0xfffffe00; if (number_samples < 2048 || number_samples > 64 * 1024 * 1024) { - sr_err("invalid sample range 2k...64M: %ld", - number_samples); + sr_err("Invalid sample range 2k...64M: %" + PRIu64 ".", number_samples); return SR_ERR; } cmd_pkt->sample_size = number_samples; @@ -399,6 +400,8 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) struct sr_trigger *trigger = sr_session_trigger_get(sdi->session); struct h4032l_cmd_pkt *cmd_pkt = &devc->cmd_pkt; + devc->acq_aborted = FALSE; + /* Calculate packet ratio. */ cmd_pkt->pre_trigger_size = (cmd_pkt->sample_size * devc->capture_ratio) / 100; @@ -410,7 +413,7 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) GSList *stages = trigger->stages; struct sr_trigger_stage *stage1 = stages->data; if (stages->next) { - sr_err("only one trigger stage supported for now"); + sr_err("Only one trigger stage supported for now."); return SR_ERR; } cmd_pkt->trig_flags.enable_trigger1 = 1; @@ -440,7 +443,7 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) break; case SR_TRIGGER_RISING: if (cmd_pkt->trigger[0].flags.edge_type != H4032L_TRIGGER_EDGE_TYPE_DISABLED) { - sr_err("only one trigger signal with fall/rising/edge allowed"); + sr_err("Only one trigger signal with fall/rising/edge allowed."); return SR_ERR; } cmd_pkt->trigger[0].flags.edge_type = H4032L_TRIGGER_EDGE_TYPE_RISE; @@ -448,7 +451,7 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) break; case SR_TRIGGER_FALLING: if (cmd_pkt->trigger[0].flags.edge_type != H4032L_TRIGGER_EDGE_TYPE_DISABLED) { - sr_err("only one trigger signal with fall/rising/edge allowed"); + sr_err("Only one trigger signal with fall/rising/edge allowed."); return SR_ERR; } cmd_pkt->trigger[0].flags.edge_type = H4032L_TRIGGER_EDGE_TYPE_FALL; @@ -456,14 +459,14 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) break; case SR_TRIGGER_EDGE: if (cmd_pkt->trigger[0].flags.edge_type != H4032L_TRIGGER_EDGE_TYPE_DISABLED) { - sr_err("only one trigger signal with fall/rising/edge allowed"); + sr_err("Only one trigger signal with fall/rising/edge allowed."); return SR_ERR; } cmd_pkt->trigger[0].flags.edge_type = H4032L_TRIGGER_EDGE_TYPE_TOGGLE; cmd_pkt->trigger[0].flags.edge_signal = match->channel->index; break; default: - sr_err("unknown trigger value"); + sr_err("Unknown trigger value."); return SR_ERR; } @@ -491,7 +494,7 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) } } - usb_source_add(sdi->session, drvc->sr_ctx, 10000, + usb_source_add(sdi->session, drvc->sr_ctx, 1000, h4032l_receive_data, sdi->driver->context); /* Start capturing. */ @@ -500,9 +503,13 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) static int dev_acquisition_stop(struct sr_dev_inst *sdi) { - (void)sdi; + struct dev_context *devc = sdi->priv; + + devc->acq_aborted = TRUE; + if (devc->usb_transfer) + libusb_cancel_transfer(devc->usb_transfer); - /* TODO: stop acquisition. */ + devc->status = H4032L_STATUS_IDLE; return SR_OK; }