Commit Graph

142 Commits

Author SHA1 Message Date
Lars-Peter Clausen 5af666a94e sr: fx2lafw: Calculate buffer size and timeout based on sample rate
Currently timeout and buffer size are hard-coded in the fx2lafw driver which is
non-optimal if we want to get good results at both high and low sample rates.

The timeout is hard-coded to 40ms, which doesn't work well when sampling at
a low sample rate. E.g. at 20kHz filling all available buffer space alone takes
6 seconds. So naturally we'll see a lot of transfers timeout in this case.

The buffer size is hard-coded to 4096 bytes, which does not work well with high
sample rates. E.g. at 24MHz these 4096 bytes are enough space for 0.17ms of
data. The total buffer size is enough for about 5ms of data. Sooner or later the
application won't be able to resubmit a transfer within this time span and the
device will abort data acquisition. Usually this happens within the first few
seconds of sampling.

This patch adds a few new helper functions which calculate the buffer size and
timeout based on the current sample rate.

The buffer size is chosen to be large enough to hold about 10ms of data and it
also must be a multiple of 512 bytes since the firmware will send us the data
in 512 byte chunks.

The timeout is set to the time it would take to fill the whole available buffer
space plus a 25% headroom to accommodate for jitter. This is more than enough,
but there is no need to make the timeout a tight deadline, since it is only
meant as a last resort in case the device stops submitting data. And in this
case data acquisition will be aborted anyway.

The patch also limits the the number of transfers so that the total buffer
space is not much more of 500ms. This will ensure that we do not have to
wait too long when aborting data acquisition.

This patch also significantly reduces the number of context switches when
sampling at a higher sample rate. On my system for example the CPU load of
sigrok-cli when sampling at 24MHz goes down from ~25% to 3-4%.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
2012-06-28 00:40:52 +02:00
Lars-Peter Clausen 7ce737a77c sr: fx2lafw: Handle the transfer's status
While errors are usually already implicitly caught by looking at the packet
length field there is one error status which is worth special handling. If the
device has been removed there is not really a chance to recover from this error
so data acquisition can be stopped immediately.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
2012-06-28 00:40:52 +02:00
Lars-Peter Clausen 17dff8a1e6 sr: fx2lafw: Avoid unnecessary alloc/free combo
In receive_transfer for each completed transfer a new buffer is allocated and
the old one is freed. We can avoid this by simply reusing the buffer for the
next transfer. This is possible if we only resubmit the transfer after all
processing on the data buffer has been done. A new buffer is only allocated if
the size of the old one is not 4096 bytes.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
2012-06-28 00:40:51 +02:00
Lars-Peter Clausen f855de7575 sr: fx2lafw: Properly free transfer
When freeing a transfer we also have to free the transfer buffer. We also have
to keep track of the number of allocated transfers and if the freed transfer was
the last one stop acquisition. This patch introduces a helper function which
takes care of all of this.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
2012-06-28 00:40:51 +02:00
Lars-Peter Clausen bd47acabe3 sr: fx2lafw: Allocate header and packet struct on the stack
The header and packet struct are only used in the scope of this function and
they are freed at the end of it. Also these structs are rather small, so they
can safely be allocated on the stack. By doing so memory leaks on the error
paths are avoided.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
2012-06-28 00:40:51 +02:00
Joel Holdsworth 0c156e06c5 fx2lafw: Made libusb_claim_interface error messages more informative 2012-06-28 00:40:48 +02:00
Bert Vermeulen 3b6c19303d fx2lafw: fix broken firmware upload timeout
Also corner case error init.
2012-06-27 01:02:39 +02:00
Lars-Peter Clausen fa114e4ab1 sr: fx2lafw: Set correct unitsize for trigger buffer
Commit 88b75eb719 ("fx2lafw: Added device caps and added support for wide
sampling") increased the size of the trigger buffer from 8 to 16 bit, but forgot
to adjust the unitsize logic packet which is used to send the contents of the
trigger buffer. This patch sets the unitsize to sizeof() of the trigger buffer.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
2012-06-25 19:48:21 +02:00
Lars-Peter Clausen f3ab43a8fb sr: fx2lafw: Fix multistage trigger
Multistage triggers currently do no work, because there is a return statement
in the middle of the trigger detector which will be hit as soon as the first
stage in a multistage trigger matches. This patch removes the return statement
so that the trigger detector can continue to try to match the next stage. In
order for this to work we also make sure that the trigger stage is only reset
if the current sample does not match.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
2012-06-24 14:35:26 +02:00
Lars-Peter Clausen eabf24035b sr: fx2lafw: Fix memory leaks in receive_transfer
There are a few memory leaks in the receive_transfer transfer function. The most
serve of them is that a sample buffer is not freed if the triggered has not
matched yet, which causes a sigrok process which is waiting for a trigger to
consume several megabytes of memory within seconds. The other leaks are on the
error paths in that function.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
2012-06-22 09:23:30 +02:00
Uwe Hermann 0a88ec3d9c sr: fx2lafw: Use gboolean, cosmetics, fix gcc warning. 2012-05-31 22:48:40 +02:00
Joel Holdsworth f4575b6549 fx2lafw: Added a check to limit the sample rate during 16-bit sampling 2012-05-31 19:53:36 +01:00
Joel Holdsworth d1ddc7a9a8 fx2lafw: Added device caps and added support for wide sampling 2012-05-31 19:52:32 +01:00
Joel Holdsworth a533743dd1 sr: Made sample rate lists const 2012-05-31 19:51:11 +01:00
Joel Holdsworth 1b79df2f57 sr: Made the dev_config_set parameter a const pointer 2012-05-31 19:51:11 +01:00
Joel Holdsworth b7f578bef5 sr: Made the dev_info_get return value const 2012-05-31 19:51:10 +01:00
Joel Holdsworth 915f7cc87a sr: Made hwcap const 2012-05-31 19:51:09 +01:00
Bert Vermeulen f366e86c68 sr: change all drivers to use SR_DF_META_LOGIC 2012-05-30 23:55:36 +02:00
Uwe Hermann 7e41e319d9 sr: fx2lafw: Forgot to add (C) line to fx2lafw.h in recent commit. 2012-05-30 23:31:03 +02:00
Uwe Hermann 0a8c0c324e sr: fx2lafw: Only check for correct major FW version.
Changes in the minor version number are OK, as those should never
contain any incompatible/API changes.
2012-05-30 23:23:14 +02:00
Uwe Hermann 921634ec10 sr: Fix typos. 2012-05-30 22:42:47 +02:00
Uwe Hermann cf94c8167b sr: fx2lafw: Add (C) line from old saleae driver it's based on. 2012-05-30 22:42:45 +02:00
Uwe Hermann f60fdf6ebe sr: fx2lafw: s/MAX_RENUM_DELAY/MAX_RENUM_DELAY_MS/. 2012-05-30 09:30:50 +02:00
Uwe Hermann e8bd58ffd2 sr: fx2lafw: Fix a firmware upload bug on 32bit systems.
The glib GTimeVal data type (and some functions using it) will be faded
out from glib sooner or later, so it's not a good idea to use them anyway.

In this specific case GTimeVal.tv_sec was overflowing, leading a check in
libsigrok to fail, and thus to FX2 firmware upload errors, i.e.
non-working fx2lafw devices.

  http://thread.gmane.org/gmane.comp.debugging.sigrok.devel/166

The root cause is that GTimeVal.tv_sec is a 'glong' (8 bytes on 64bit
systems, but only 4 on 32bit systems).

We now use an int64_t (and g_get_monotonic_time() instead of the more
problematics g_get_current_time() which uses a GTimeVal).

This has been verified to fix the issue on a 32bit system.

Other uses of GTimeVal in libsigrok will be removed in a later release.

Also, drop unneeded GTV_TO_MSEC.
2012-05-30 09:30:18 +02:00
Uwe Hermann 9f05304e4e sr: ARMFLY AX-Pro is supported by fx2lafw (LA only). 2012-05-29 20:25:08 +02:00
Uwe Hermann 37dc0b16a6 fx2lafw: Cosmetics. 2012-05-11 00:22:30 +02:00
Joel Holdsworth dc68c660d5 fx2lafw: Added a gpif delay debug message 2012-05-10 13:11:07 +01:00
Joel Holdsworth 79dc64985f fx2lafw: Added support for 20kHz and 25kHz sampling 2012-05-10 13:10:59 +01:00
Joel Holdsworth 897c1a2ee5 fx2lafw: Added support for 100kHz and 50kHz sampling 2012-05-10 13:08:09 +01:00
Uwe Hermann 1e94408ae5 sr: fx2lafw: Get/display FX2 REVID. 2012-05-06 19:54:46 +02:00
Uwe Hermann 1663e4706c sr: fx2lafw: Braintechnology USB-LPS support. 2012-05-06 17:24:40 +02:00
Bert Vermeulen 6b73d9a598 fx2lafw: use iManufacturer/iProduct fields to identify our firmware
It's more deterministic than the endpoint profile check we did before. Which
was also broken.
2012-04-27 01:28:47 +02:00
Uwe Hermann 934cde02b8 fx2lafw: supported_samplerates[] should be 0-terminated. 2012-04-19 00:55:29 +02:00
Joel Holdsworth f488762a17 fx2lafw: Added support for default Cypess FX2 without EEPROM 2012-04-19 00:12:22 +02:00
Joel Holdsworth 9304d57650 fx2lafw: Added slower sample rates 2012-04-18 19:07:39 +01:00
Uwe Hermann 44dfd483db sr: fx2lafw: Cosmetics. 2012-04-10 22:32:31 +02:00
Joel Holdsworth 13bf7eccbb fx2lafw: Added command to verify firmware version 2012-04-10 18:27:24 +01:00
Joel Holdsworth 6fbe5e6081 fx2lafw: Safer use of libusb_get_device_list 2012-04-08 17:19:52 +01:00
Uwe Hermann da68656857 sr: fx2lafw: Consistency fixes. 2012-03-31 11:33:43 +02:00
Uwe Hermann 7ae2f9d56f sr: fx2lafw: Cosmetics. 2012-03-28 01:19:28 +02:00
Uwe Hermann b04902b646 sr: fx2lafw: Use SR_PRIV where needed. 2012-03-28 01:19:28 +02:00
Uwe Hermann 30da9658ad sr: fx2lafw: command.h: Add missing include guards. 2012-03-28 01:19:28 +02:00
Uwe Hermann f4a9e5c0aa sr: fx2lafw: Cosmetics. 2012-03-28 01:19:27 +02:00
Joel Holdsworth 3e6292b296 fx2lafw: Made finish_acquisition a static function 2012-03-25 19:42:37 +01:00
Uwe Hermann 590b9f9a91 sr: Fix some samplerate fields. 2012-03-24 22:32:47 +01:00
Joel Holdsworth cb61e9f7c3 fx2lafw: Only terminate session after all transfers have been aborted 2012-03-24 10:09:28 +00:00
Joel Holdsworth 24125e0520 fx2lafw: Removed a line of redundant code 2012-03-24 10:07:58 +00:00
Joel Holdsworth 6c6781b6a7 fx2lafw: Imported software triggering from fx2lafw 2012-03-21 22:47:25 +00:00
Uwe Hermann 2e7cb0040a cli: Fix -V/-h output a bit.
Options and their defaults should not be documented there, but rather in
the manpage or such.
2012-03-21 23:20:09 +01:00
Uwe Hermann ebc3473882 sr: s/err/ret/ for consistency.
We use ret, err, error, and others for return codes of functions.
Standardize on 'ret' for consistency reasons for now.
2012-03-21 23:20:06 +01:00
Joel Holdsworth ecc16ed070 fx2lafw: Upped NUM_SIMUL_TRANSFERS to 32 2012-03-14 22:56:15 +00:00
Joel Holdsworth 4502e86921 fx2lafw: Added CWAV USBee SX to the device list 2012-03-12 21:49:34 +00:00
Joel Holdsworth 0ca21631dd fx2lafw: Corrected a comment 2012-03-12 21:47:45 +00:00
Joel Holdsworth 93a9f3daaf fx2lafw: Added Saleae Logic (and clones) to the device list 2012-03-12 21:47:44 +00:00
Joel Holdsworth f8b07fc6c3 fx2lafw: Moved firmware path into fx2lafw_profile 2012-03-12 21:41:28 +00:00
Joel Holdsworth 4679d14db3 fx2lafw: Made fx2lafw profiles const 2012-03-12 21:41:27 +00:00
Joel Holdsworth 6ccfadaf66 fx2lafw: Made string pointers constant 2012-03-12 21:39:02 +00:00
Joel Holdsworth 17b6c75a89 fx2lafw: Added ESLA201A to device list 2012-03-12 21:38:57 +00:00
Joel Holdsworth 017375d17e fx2lafw: Send start command after bulk transfer have been set up 2012-03-11 20:59:39 +00:00
Joel Holdsworth 9031ce63f3 fx2lafw: Corrected check_conf_profile checks 2012-03-07 07:52:05 +00:00
Joel Holdsworth dba024420f fx2lafw: Implemented control of sample rates 2012-03-07 07:52:05 +00:00
Joel Holdsworth f92994fd91 fx2lafw: Ensure default sample rate is set 2012-03-07 07:52:05 +00:00
Joel Holdsworth d98c4e35ce fx2lafw: Removed CMD_STOP and renumbered commands 2012-03-07 07:52:05 +00:00
Joel Holdsworth 2e526f4a6a fx2lafw: Moved num_samples into context struct 2012-03-07 07:52:05 +00:00
Joel Holdsworth 19ccdf696c fx2lafw: Removed CMD_SET_SAMPLERATE 2012-03-07 07:52:05 +00:00
Joel Holdsworth f6582cd7bf fx2lafw: Implemented initial support for start capture 2012-03-07 07:52:05 +00:00
Joel Holdsworth 74fcfb806d fx2lafw: Devices now retain the same PID/VID after fw load 2012-03-07 07:51:39 +00:00
Joel Holdsworth e318664793 fx2lafw: Implemented SR_HWCAP_PROBECONFIG and SR_HWCAP_LIMIT_SAMPLES 2012-03-07 07:51:39 +00:00
Joel Holdsworth c8f2c9dda4 fx2lafw: Fixed a compiler error, and made cv_data consistent with saleae-logic.c 2012-03-07 07:51:31 +00:00
Uwe Hermann 0abee5076f sr: Fix some TODOs, improve comments/docs. 2012-03-04 15:10:12 +01:00
Uwe Hermann 3cd3a20b35 sr: More callback param renames.
Start/stop acquisition callbacks: Consistently name the 'void *' parameter
cb_data for now. The per-device-instance device pointer is called
'session_dev_id' everywhere for now, but this should be renamed to
something more clear.
2012-03-04 15:10:09 +01:00
Uwe Hermann 1f9813eb6c sr: Name all callback data 'cb_data'. 2012-03-02 02:25:42 +01:00
Uwe Hermann 31ccebc492 sr: s/sr_session_bus/sr_session_send/. 2012-03-01 23:49:25 +01:00
Uwe Hermann c09f0b578c sr/cli/gtk/qt/: s/plugin/driver/. 2012-02-28 23:52:30 +01:00
Uwe Hermann 6c39d99a28 sr: fx2lafw: Consistent #include guard naming. 2012-02-27 23:55:06 +01:00
Uwe Hermann f9a69557d2 sr: fx2lafw: Use gboolean consistenly. 2012-02-27 23:53:44 +01:00
Uwe Hermann 772a0e6153 fx2lafw: Small consistency fixes. 2012-02-27 23:40:38 +01:00
Uwe Hermann be4b99e897 fx2lafw: Compile fix. 2012-02-27 23:26:05 +01:00
Joel Holdsworth 5da939028d fx2lafw: Implemented hw_dev_acquisition_stop 2012-02-27 21:58:25 +00:00
Joel Holdsworth 610dbb7091 fx2lafw: Implemented hw_dev_acquisition_start 2012-02-27 21:58:25 +00:00
Joel Holdsworth 7cb621d418 fx2lafw: Basic implementation of hw_dev_config_set with SR_HWCAP_LIMIT_SAMPLES 2012-02-27 21:58:25 +00:00
Joel Holdsworth 62bc70e412 fx2lafw: Added more to hw_cleanup 2012-02-27 21:58:25 +00:00
Joel Holdsworth f1898235e8 fx2lafw: Implemented hw_dev_close 2012-02-27 21:58:25 +00:00
Joel Holdsworth 43125c6993 fx2lafw: Implemented hw_dev_open 2012-02-27 21:58:25 +00:00
Joel Holdsworth b1eeb67e92 fx2lafw: Implemented firmware upload 2012-02-27 21:58:25 +00:00
Joel Holdsworth cdfdd71101 fx2lafw: Renamed fx2lafw_dev to ctx in hw_dev_info_get 2012-02-27 21:58:25 +00:00
Joel Holdsworth 90282c82bc fx2lafw: Renamed fx2lafw_dev to ctx in hw_init 2012-02-27 21:58:25 +00:00
Joel Holdsworth cac0bbaafd fx2lafw: Renamed dev_insts variable in hw_init 2012-02-27 21:58:25 +00:00
Joel Holdsworth aae2fed675 fx2lafw: Implemented hw_get_status 2012-02-25 11:11:44 +00:00
Joel Holdsworth 8b35f47483 fx2lafw: Exposed capabilities data 2012-02-25 11:11:44 +00:00
Joel Holdsworth 187b358232 fx2lafw: Added probing for fx2lafw devices 2012-02-25 11:11:29 +00:00
Joel Holdsworth f302a08256 fx2lafw: Added empty hardware module for fx2lafw 2012-02-25 09:11:53 +00:00