]> sigrok.org Git - libsigrok.git/commit
korad-kaxxxxp: speed up scan process, rephrase response read routine
authorGerhard Sittig <redacted>
Mon, 31 Aug 2020 19:03:31 +0000 (21:03 +0200)
committerGerhard Sittig <redacted>
Tue, 1 Sep 2020 15:11:36 +0000 (17:11 +0200)
commitd2cc60bd4511c1154eef67e4c7abccb3fd34faab
tree2103702ab5a15161d01ae8d5b4cd7e5ec078cb30
parentfcacf532f5180b11b9ddaac6d7a95549f3ee0e32
korad-kaxxxxp: speed up scan process, rephrase response read routine

The Korad protocol relies on unterminated request and response strings,
which works well enough for fixed length acquisition and status queries.
But the variable length replies to identification requests suffered from
an implementation detail in the receive routine. A large timeout must be
used because supported devices reportedly are slow to respond. There is
no simple yet robust condition to detect the response's completion. The
scan code must prepare for the maximum response length across the set of
supported devices. Unfortunately the maximum amount of time was spent
waiting for the response to occupy the provided response buffer, before
a long total timeout expired.

Rework the korad driver's helper routine which gets a variable length
non-terminated text string. Keep the long initial timeout, and keep
iterating in that initial phase to quickly detect when response data
became available. But terminate the read sequence after a shorter period
without receive data after some initial receive data was seen. Assume
that identification responses get transferred at wire speed and without
additional delays beyond bitrate expectations. Acquisition and status
responses shall not be affected by this change.

This speeds up the scan for devices from roughly 5s to some 0.1s on
newer devices (KA3005P v5.5) and 0.5s on older devices (KA3005P V2.0).

This commit also addresses an issue in the response text termination,
where partial responses contained undefined data. The previous version's
return value was unspecific: Negative for fatal errors, but either zero
or non-zero for successful reads, with no way for callers to learn about
the received amount of data. The rephrased version always returns the
amount of received data, and adds internal documentation which discusses
the implementation's constraints and the motivation for the approach.

This is a modified version of the initial implementation which was
Submitted-By: Karl Palsson <redacted>
src/hardware/korad-kaxxxxp/protocol.c
src/hardware/korad-kaxxxxp/protocol.h