-static void LIBUSB_CALL dslogic_trigger_receive(struct libusb_transfer *transfer)
-{
- const struct sr_dev_inst *sdi;
- struct dslogic_trigger_pos *tpos;
- struct dev_context *devc;
-
- sdi = transfer->user_data;
- devc = sdi->priv;
- if (transfer->status == LIBUSB_TRANSFER_CANCELLED) {
- sr_dbg("Trigger transfer canceled.");
- /* Terminate session. */
- std_session_send_df_end(sdi, LOG_PREFIX);
- usb_source_remove(sdi->session, devc->ctx);
- devc->num_transfers = 0;
- g_free(devc->transfers);
- if (devc->stl) {
- soft_trigger_logic_free(devc->stl);
- devc->stl = NULL;
- }
- } else if (transfer->status == LIBUSB_TRANSFER_COMPLETED
- && transfer->actual_length == sizeof(struct dslogic_trigger_pos)) {
- tpos = (struct dslogic_trigger_pos *)transfer->buffer;
- sr_info("tpos real_pos %d ram_saddr %d cnt %d", tpos->real_pos, tpos->ram_saddr, tpos->remain_cnt);
- devc->trigger_pos = tpos->real_pos;
- g_free(tpos);
- start_transfers(sdi);
- }
- libusb_free_transfer(transfer);
-}
-
-static int dslogic_trigger_request(const struct sr_dev_inst *sdi)
-{
- struct sr_usb_dev_inst *usb;
- struct libusb_transfer *transfer;
- struct dslogic_trigger_pos *tpos;
- struct dev_context *devc;
- int ret;
-
- usb = sdi->conn;
- devc = sdi->priv;
-
- if ((ret = dslogic_stop_acquisition(sdi)) != SR_OK)
- return ret;
-
- if ((ret = dslogic_fpga_configure(sdi)) != SR_OK)
- return ret;
-
- /* if this is a dslogic pro, set the voltage threshold */
- if (!strcmp(devc->profile->model, "DSLogic Pro")){
- if(devc->dslogic_voltage_threshold == DS_VOLTAGE_RANGE_18_33_V){
- dslogic_set_vth(sdi, 1.4);
- }else{
- dslogic_set_vth(sdi, 3.3);
- }
- }
-
- if ((ret = dslogic_start_acquisition(sdi)) != SR_OK)
- return ret;
-
- sr_dbg("Getting trigger.");
- tpos = g_malloc(sizeof(struct dslogic_trigger_pos));
- transfer = libusb_alloc_transfer(0);
- libusb_fill_bulk_transfer(transfer, usb->devhdl, 6 | LIBUSB_ENDPOINT_IN,
- (unsigned char *)tpos, sizeof(struct dslogic_trigger_pos),
- dslogic_trigger_receive, (void *)sdi, 0);
- if ((ret = libusb_submit_transfer(transfer)) < 0) {
- sr_err("Failed to request trigger: %s.", libusb_error_name(ret));
- libusb_free_transfer(transfer);
- g_free(tpos);
- return SR_ERR;
- }
-
- devc->transfers = g_try_malloc0(sizeof(*devc->transfers));
- if (!devc->transfers) {
- sr_err("USB trigger_pos transfer malloc failed.");
- return SR_ERR_MALLOC;
- }
- devc->num_transfers = 1;
- devc->submitted_transfers++;
- devc->transfers[0] = transfer;
-
- return ret;
-}
-