Gerhard Sittig [Sun, 15 Oct 2023 08:31:15 +0000 (10:31 +0200)]
input/protocoldata: improve use of feed queue API
Improve feed queue related calls in the submission of capture start/end
idle phases, inter-frame idle phases, and bit time quanta of generated
protocol traffic. The submit-one API call accepts a repeat count which
eliminates caller's loops.
This also happens to eliminate a misguided yet harmless wrong use of the
feed queue API. An earlier implementation assumed "data pointer, and
data size" as arguments, and looped around that at the caller's. While
it's "data pointer, and repeat count". Used to work because sizeof(u8)
"was mistaken" as repeat count 1, so this flaw went unnoticed.
Propagate errors as they are seen, an earlier implementation silently
ignored them for frame payloads.
Gerhard Sittig [Sun, 15 Oct 2023 08:22:20 +0000 (10:22 +0200)]
feed_queue: add API to submit multiple sample values at once
Extend the common feed queue support API. Add a routine which accepts
multiple sample values that correspond to multiple sample points. This
eliminates the necessity for buffer handling and flush semantics at call
sites. And reduces overhead when callers previously had to submit one
sample value per API call when only single value submission existed.
Gerhard Sittig [Sun, 15 Oct 2023 08:08:11 +0000 (10:08 +0200)]
feed_queue: rename routines for submission of a single sample value
Common feed queue support originated from input module RLE compression.
Its API would accept a single sample value and optionally repeat that
value several times.
Rename the routines and its parameter for improved awareness. Adjust
existing callers: The asix-omega, atorch, kingst-la, rdtech-tc, and
rdtech-um acquisition device drivers, as well as the protocoldata,
stf, and vcd input modules.
Gerhard Sittig [Thu, 5 Oct 2023 16:11:18 +0000 (18:11 +0200)]
kingst-la2016: rephrase 'sdi' resource release during scan
Eliminate an incomplete local copy of sdi resource release code in an
error path of scan/probe. Use common code instead to free the sdi.
Assign opaque pointers to intermediate variables before passing their
values to other routines. Should slightly increase readability and
data type safety. Also close the USB handle if it's open at this time.
Gerhard Sittig [Mon, 2 Oct 2023 16:33:08 +0000 (18:33 +0200)]
bindings/python: rephrase for Python 3.9 deprecation (call API)
The PyEval_CallObject() routine was deprecated in Python 3.9, use
PyObject_CallObject() instead which has existed since at least 3.0.
There are also PyEval_InitThreads() deprecation warnings, but these
originate from SWIG generated code and are outside of our control.
Requires SWIG version 4.1 to silence these.
Address several robustness/reliability and style issues in the JDS6600
support code. Extend existing documentation to help future maintenance.
This work is based on review feedback that I received by user fenugrec
via IRC.
- Fix resource leaks in the scan/probe code path. Respond earlier to
failed communication during that startup phase after previous comms
worked.
- Adjust printf(3) format specifiers. Use more appropriate integer
formats for sr_atoul_base() results. "%lf" is not needed for doubles.
- More thorough argument checks at the start of routines. Be explicit
about narrow value ranges when wide data types are involved (function
code only uses a small part of the size typed variable's range).
- Quote example requests and responses in protocol.c so that readers can
match generating and processing code paths to wire traffic, without
having access to the device or its protocol description. Extend
diagnostics messages to optionally provide the full content of raw
communication, including the end-of-line condition and non-printables.
Regular sr_log() calls would strip these details, users could not
notice.
- Provide more comments on motivation and implementation details.
- Prettify the protocol.h context declaration. Put struct members on
their individual source code lines.
Gerhard Sittig [Thu, 28 Sep 2023 19:11:54 +0000 (21:11 +0200)]
zeroplus-logic-cube: address minor style nits
Prefer size types for indices and length specs. Separate function calls
from result inspection from flow control, to improve readability. Trim
text line length in complex expressions. Eliminate redundant data types
in malloc calls. Eliminate else after return. Remove dead code.
Gerhard Sittig [Thu, 28 Sep 2023 18:53:26 +0000 (20:53 +0200)]
zeroplus-logic-cube: move USB VID:PID check in scan before device access
Getting USB strings from faulty devices can be troublesome. Users report
segfaults when unrelated(!) devices get accessed during scan for certain
measurement devices.
Move the VID:PID check during scan before the USB string access. This
avoids access to unrelated devices.
Rephrase the check whether a USB device is a supported model. The
previous implementation's operation is questioned, the loop condition
looked suspicious.
Reported-By: Marek Antoniak <redacted> [the early check]
Gerhard Sittig [Thu, 28 Sep 2023 18:35:00 +0000 (20:35 +0200)]
chronovu-la: rephrase the USB vendor check during scan
Provide more information in the source code comment on the motivation to
only inspect a given USB VID during scan for ChronoVu LA devices. Use a
different identifier for the expected VID, the previous implementation
was rather misleading.
Gerhard Sittig [Thu, 28 Sep 2023 18:21:24 +0000 (20:21 +0200)]
chronovu-la: rephrase conn= checking in the scan routine
Prefer common support over DIY code to get the SR_CONF_CONN spec.
Simplify the check during USB enumeration whether a user provided
conn= spec applies. Sort local var decls to match their use. Setup
resulting 'devices' early.
Gerhard Sittig [Thu, 5 Oct 2023 15:21:07 +0000 (17:21 +0200)]
juntek-jds6600: implement device support, tested with Joy-IT JDS6600
Implement support for the essential signal generator part of the device,
tested with a 60MHz Joy-IT JDS6600 model: Two channels, enable/disable,
waveform, frequency, amplitude, offset, duty cycle selection, phase
between channels.
This version does not support external signals and frequency measurement
nor counting. Upload/download of arbitrary waveforms could work from the
serial communication's perspective, but sigrok lacks infrastructure/API
for waveform exchange or communication of blobs.
Tested with sigrok-cli and getters/setters. Quickly tested with SmuView.
Gerhard Sittig [Mon, 2 Oct 2023 16:34:30 +0000 (18:34 +0200)]
devantech-eth008: add more supported models, variable DI width, doc cleanup
Add support for differing DI (digital input) response sizes depending
on the model. Declare support for more models, including WIFI (their
feature set and protocol are identical, only their model ID differs).
Rework developer notes, keep the API slim and concentrate most stuff
in the implementation. Discuss USB CDC protocols and other potential
TODO items. Modbus most probably remains out of that driver's scope.
This implementation should cover most Ethernet (and Wifi) models, and
support their complete feature set from the sigrok perspective. The
most important limitation is missing support for channels' interaction
(when a pin can be any of AI and DI and DO).
Gerhard Sittig [Thu, 28 Sep 2023 10:49:12 +0000 (12:49 +0200)]
rdtech-dps: rephrase how model specific ranges are handled
Commit 02a4f485de76 implemented ranges support such that _all_ models
including every RD as well as DPS device announced ranges, it's just
that most of them happen to support a single range.
Use this fact, accept any zero based index, and drop the "normalization"
to strict 0/1 values except for one RD specific code path when getting
the current state of multi-range supporting devices. Tell models with
"effectively no ranges" from devices which "support multile ranges".
This shall increase robustness and improve maintainability. Simplifies
future extensions when more ranges are involved.
Gerhard Sittig [Thu, 28 Sep 2023 10:48:10 +0000 (12:48 +0200)]
rdtech-dps: clear the "acquisition started" condition
The 'acquisition_started' condition was set when the first acquisition
attempted to start, but was never cleared. Adjust error paths in the
acquisition start and the stop code path to update that variable.
Gerhard Sittig [Thu, 28 Sep 2023 10:40:48 +0000 (12:40 +0200)]
rdtech-dps: address simple style issues
Coding style nits: Use const data for model lists. Prefer size types.
Link sdi and devc immediately after allocation. Skip unused wire fields
by reading them too, avoid breaking the reviewer's flow.
Cosmetics, readability: Do place trailing commas in initializers. Reduce
text line length. Break long lines in more appropriate locations that
are more readable. Eliminate unmotivated pre-increment operators.
Commit 02a4f485de76 snuck in a change that should not have gone there.
Revert the logic which re-reads Modbus registers several times before
declaring failure. Use the previous implementation as intended.
Gerhard Sittig [Thu, 28 Sep 2023 10:30:05 +0000 (12:30 +0200)]
rdtech-dps: touch up comments
Address style issues in comments. Extend and rephrase some for improved
readability and awareness during maintenance. Move comments to before
the code which they relate to.
Gerhard Sittig [Thu, 28 Sep 2023 10:22:01 +0000 (12:22 +0200)]
hameg-hmo: separate RTH002 and RTH004 model declarations
Commit 10e6dfd1f921 introduced differing trigger sources for RTH1002 and
RTH1004, but shared a single scope_models[] entry with identical data for
both devices.
Use separate scope_models[] entries for RTH1002 and RTH1004, reference
their respective capabilities which differ among models.
Move the RTH1004 trigger sources next to RT1002, the declarations appear
to not assume a specific order anyway.
Miroslav Sustek [Tue, 19 Apr 2022 18:47:40 +0000 (20:47 +0200)]
hantek-dso: add "forced" trigger source
This special trigger source mimics the trigger mode that is called
"Auto" in the original Hantek's "DSO2090 Software" and in
https://github.com/OpenHantek/OpenHantek6022 open-source project.
In the original https://github.com/OpenHantek/openhantek open-source
project the trigger mode is called "Wait/Force".
This feature can be used to immediately capture a single frame.
Example usage with sigrok-cli:
```
sigrok-cli --driver hantek-dso --frames 1 --config triggersource=forced
```
This enables us to use the oscilloscope for data logging in scripts.
Only after I implemented this I realized that if you have an extra probe,
you can set the triggersource to "EXT" and connect the EXT input
to the 1kHz calibration signal output on the back of the device
and that will trigger every millisecond. However, I still think that
the "forced" trigger source can be useful.
Mikael Djurfeldt [Mon, 16 Jan 2023 22:43:44 +0000 (23:43 +0100)]
rdtech-dps: add support for RD6006P, RD6012P and RD6024
RD6012P has two current ranges, so support for getting/setting/listing
range is added. This also means that the model table is reorganized to
support multiple ranges.
In order for the range setting and the current multiplier to be up to
date, the function rdtech_dps_update_range is called when
required. This function reads the range register of the device.
rigol-ds: Fix #1831 by supporting DS1xxxZ Plus & RPL1116 logic ports
The DS1xxxZ Plus models are MSO ready, they contain the connector to attach a RPL1116 16 port digital head.
Having a DS1xxxZ Plus and a connected RPL1116 effectively the instrument becomes a MSO1xxxZ.
But that "CH_INFO(4, false)" means 4 analog channels and NO digital channels.
As said though, the DS1xxxZ Plus variants got the D0..D15 digital ports abilities already so this line treats the DS1xxxZ Plus as a plain DS1xxxZ without the digital ports.
A very simple remedy is to change the CH_INFO(4, false) to CH_INFO(4, true)
So those two lines should be changed
from
{SERIES(DS1000Z), "DS1074Z Plus", {5, 1000000000}, CH_INFO(4, false), std_cmd},
{SERIES(DS1000Z), "DS1104Z Plus", {5, 1000000000}, CH_INFO(4, false), std_cmd},
to
{SERIES(DS1000Z), "DS1074Z Plus", {5, 1000000000}, CH_INFO(4, true), std_cmd},
{SERIES(DS1000Z), "DS1104Z Plus", {5, 1000000000}, CH_INFO(4, true), std_cmd},
and the problem will be solved.
Gerhard Sittig [Wed, 27 Sep 2023 15:15:02 +0000 (17:15 +0200)]
tcp: check for poll(2) and select(2), workaround for shutdown(2) API
The poll(2) API is not universally available. Check for its presence
before referencing it. Fallback to select(2) in its absence. Check for
the availability of select(2) as well. If neither is available, there
is no (portable) way of checking a file descriptor's readability.
The SHUT_RDWR identifier is not available in winsock. But a different
symbol with identical meaning is available. Use it as a fallback.
This amends commit fcab496c12b2 which introduced common TCP support.
Gerhard Sittig [Mon, 25 Sep 2023 12:38:58 +0000 (14:38 +0200)]
devantech-eth008: make request for digital output optional
This is for consistency with other optional features like digital input
and analog input. Only transmit digital output related requests to the
firmware when the model supports it.
Gerhard Sittig [Mon, 25 Sep 2023 12:28:59 +0000 (14:28 +0200)]
devantech-eth008: support digital and analog input channels
Implement support for digital input and analog input on those models
which provide these features beyond digital output (relays).
This was written without access to the hardware, and is untested.
This completes support for the cards' features. Other models (ETH1610)
could get added when their model ID is known. WLAN enabled cards are
assumed to share model IDs with their Ethernet counterparts.
Gerhard Sittig [Mon, 25 Sep 2023 12:18:55 +0000 (14:18 +0200)]
devantech-eth008: declare more models, still digital-output only
Add the ETH002, ETH484, and ETH8020 items to the list of supported
models. Adjust driver code paths for the differing DO image sizes of
these models (up to 20 relays which span up to three bytes width).
Support the R5..R8 gap for ETH484.
This was written without access to the hardware, and is untested.
Gerhard Sittig [Sun, 24 Sep 2023 09:05:08 +0000 (11:05 +0200)]
devantech-eth008: first driver implementation, relay output only
Implement common support code to communicate raw binary requests and
responses over TCP sockets, and ETH008 specific requests to control
up to 8 relays as well as getting the card's supply voltage.
Other cards with differing channel counts, and with features beyond
relay control, have not been available during creation of this driver.
Their addition is prepared but untested. Password protection is not
implemented, but outlined in developer comments.
Gerhard Sittig [Sun, 24 Sep 2023 08:27:31 +0000 (10:27 +0200)]
serial: introduce support for raw TCP communication (send/recv bytes)
Add support for "conn=tcp-raw/<ip>/<port>" specs for serial transports.
This is consistent with previously existing SCPI transports, and is
compatible because there has not been TCP communication outside of SCPI
so far.
This implementation supports blocking mode and attempts to communicate
the very caller specified amount of data. Also suports non-blocking mode
and read timeouts, which can result in short reads.
Support for source add/remove exists, so that receive callbacks can
execute when receive data has become available. Other serial transport
methods are missing. There is no support for bitrate configuration,
flow control, flushing, UART frame formats, etc.
Gerhard Sittig [Sun, 24 Sep 2023 08:42:00 +0000 (10:42 +0200)]
scpi_tcp: use common TCP support in SCPI transport (tcp-raw, tcp-rigol)
Use the recently added sr_tcp_dev_inst approach to TCP communication in
the tcp-raw and tcp-rigol SCPI transports. Eliminates redundancy in the
implementation.
Address style nits in the process: Use size types for length specs. Be
explicit about bytes and character conversions: Bytes are sent across
the TCP socket, while SCPI exchange typically involves text messages.
The previously used send(2) and recv(2) calls just passed void pointers.
Comment on the specific semantics of Rigol length specs that preceed the
response data. And how raw TCP attempts to determine the completion of a
reception while this length spec is absent. The previous implementation
would not reveal the motivation of this non-trivial logic.
Gerhard Sittig [Sun, 24 Sep 2023 08:23:15 +0000 (10:23 +0200)]
tcp: introduce common support code for TCP socket communication
It appears that so far only SCPI and the Beagleboard have supported
communication across TCP sockets. And both have locally open coded
the corresponding logic.
Introduce common support for TCP communication. This implementation
provides simple new/free, connect/disconnect, read/write (including
non-blocking reads), source add/remove calls, and keeps the API under
the sr_tcp_ prefix.
This commit introduces common code, but does not adjust callers.
Gerhard Sittig [Sun, 30 Jul 2023 08:10:12 +0000 (10:10 +0200)]
input/protocoldata: also accept comma separated data values
Frame format specs in the header section accepted space and comma
separators already (though comma separated frame format details are
considered unusual). Protocol values in non-comment (text mode) lines
assumed strictly space separated fields.
Accept comma and semicolon too as data value separators for maximum user
convenience. Simplifies the import of post processed other text formats,
only requires the addition of headers and decoration (select control,
text to number conversion base), but allows re-use of all existing
values. Reduces diffs before and after manipulating original text into
protocoldata which sigrok can import.
These separators silently get ignored. They don't have a meaning in the
sense of interpreting "1, , 3" as three values. There is no concept of
empty fields in the sequence of data values. This is pure convenience.
Gerhard Sittig [Thu, 13 Jul 2023 17:30:02 +0000 (19:30 +0200)]
input/protocoldata: reduce inter-frame gap for I2C waveforms
Space I2C data bytes the same as address bytes are spaced. Results in a
graphical presentation that is easier to inspect, and is less wasteful
at the same time (more data is seen at the same zoom level).
Gerhard Sittig [Tue, 14 May 2019 19:27:18 +0000 (21:27 +0200)]
input/protocoldata: add input module for "protocol values" files
Implement an input module which accepts data values that may have been
gotten by arbitrary means (external capture utility, synthesized data),
and creates logic traces which mimic the respective protocol's format.
This pretends that a logic capture had been taken by sigrok means, which
can be fed to protocol decoders. The motivation is neither to perfectly
simulate a given protocol, nor to inject arbitrary error conditions and
edge cases, but instead to make externally provided data available to
sigrok protocol decoders.
The input module supports several user servicable options to describe
raw files which exclusively contain data bytes. Optional automatic file
format detection is also supported, as is an optional file header to
embed protocol properties with the bytes stream. Text formatted input
is supported as a strict alternative to raw data bytes, also supporting
comments as well as pseudo comments. The latter carry instructions to
control some aspects that are outside of the mere stream of data bytes.
Some protocols may exclusively be useful in combination with text input.
Protocol specific handlers can generate up to eight logic channels, an
arbitrary number of bits per protocol frame, including varying bit times
within a frame, and several quanta per bit time. It is assumed that this
implementation provides enough infrastructure to mimic an arbitrary set
of protocols beyond the initially supported set of UART, SPI, and I2C.
Gerhard Sittig [Tue, 4 Jul 2023 16:40:19 +0000 (18:40 +0200)]
input/vcd: use common helpers for text lines/words splitting
Use recently added strutil helpers which isolate text lines in receive
buffers and which locate whitespace separated words on text lines. This
simplifies the processing of the data section of VCD input files.
It's essential to _not_ use these helpers when the receive buffer must
not get manipulated, like in file format matches, or when control data
sections span multiple text lines. Update comments to raise awareness.
Gerhard Sittig [Sun, 2 Jul 2023 07:48:57 +0000 (09:48 +0200)]
tests: implement strutil tests for text line and word splitting
Add the test_text_line() and test_text_word() routines to cover the
splitting of text buffers into lines and the splitting of words on a
text line.
This implementation "suffers" from global vars at the file scope,
because moving the table of test cases into the test routine results in
compiler errors (initializer data not constant), the cause is uncertain.
Gerhard Sittig [Sun, 2 Jul 2023 07:39:39 +0000 (09:39 +0200)]
strutil: add common helpers for input text parsing (lines, words)
Introduce the sr_text_next_line() and sr_text_next_word() routines which
split an input buffer into text lines and identify whitespace separated
words on a text line. Several input modules redundantly implement this,
having common support is desirable.
Gerhard Sittig [Sun, 2 Jul 2023 07:20:49 +0000 (09:20 +0200)]
tests: raise maximum version text length (dirty flag)
The previous implementation of the version text length check accounted
for the major, minor, micro numbers and the git hash. Raise the upper
limit of the accepted text length range to also account for the optional
"dirty" flag. Update comments to keep awareness of the magic numbers in
the length calculation.
Gerhard Sittig [Sun, 25 Jun 2023 20:47:47 +0000 (22:47 +0200)]
strutil: accept 0b prefix when base is 2 (which is non-zero)
The sr_atoul_base() conversion routine only accepted the 0b binary
prefix when base was 0. Extend this to also accept the 0b prefix when
the caller specified base is 2. This unbreaks a valid use case.
Gerhard Sittig [Sun, 30 Apr 2023 09:02:47 +0000 (11:02 +0200)]
binary_helpers: remove unused u64 and float variants (dead code)
Remove support for uint64_t and float data types in the extraction of
number values from byte streams. These are unused in current mainline.
The larger types even don't fit in the single precision result, the
32bit integer already suffers from precision loss during conversion
to float.
Mathieu Pilato [Fri, 31 Mar 2023 08:02:20 +0000 (10:02 +0200)]
binary_helpers: Rename bv_get_value to reflect it's length checking
Rename the bv_get_value() routine to bv_get_value_len() to better reflect
that this implementation checks the input data image's length. A version
which doesn't check length will get introduced soon.
[ gsi: use a shorter name than in the initial submission ]
Gerhard Sittig [Sat, 18 Mar 2023 16:18:15 +0000 (17:18 +0100)]
make: move version suffix gathering from configure to compile time
Check at configure time whether version control is available. Determine
at configure time which branch is being worked on, and re-configure when
the branch changes. Append "-git" to the package version when the source
tree is not tagged at configure time.
Get revision numbers and the dirty flag at compile time. Check whether
the source code revision exactly matches a tag at compile time. Derive
the version suffix from these details. Generate a git-version.h header
file which only the version.c source file references.
This embeds detailled version information into the library, where it is
available at runtime for the library and for applications. And severely
speeds up development iterations by avoiding full rebuilds of the whole
library when a git commit happened. The dirty flag may either require a
manual reconfiguration, or 'make version-clean', if that workspace state
is not automatically picked up. Which is considered acceptable for now,
because builds for distribution should always start with the configure
phase anyway. This uncertainty could only get avoided at the cost of
always creating the git-version.h header file in every build invocation.
Which would be easy to achieve, but remains for a future commit.
The approach was outlined by Martin Ling in 2018-09, see bug #1283. This
implementation additionally handles out-of-source builds, uses positive
logic for the header inclusion, and handles distribution builds from
tarballs or other non-versioned sources (assumes an empty suffix then).
Could also handle other sources of version details, or alternative VCS
implementations, thus passes more variables than strictly necessary from
configuration to compilation.
Gerhard Sittig [Sun, 9 Apr 2023 08:00:34 +0000 (10:00 +0200)]
microchip-pickit2: move channel creation to after device context alloc
Create device instance (sdi) and device context (devc) first, before
creating channels and channel groups. Channel creation might want to
reflect on per-device properties which are kept in the context.
Gerhard Sittig [Thu, 30 Mar 2023 18:28:13 +0000 (20:28 +0200)]
binary_helpers: remove scaling factor from binary field extraction
All call sites use the sr_analog_encoding's support to scale values.
Drop the scaling support from the binary field extractor helper.
Adjust calling rdtech-um and rdtech-tc source code accordingly. See
a word diff for the essence.
Gerhard Sittig [Sun, 19 Mar 2023 18:21:04 +0000 (19:21 +0100)]
rdtech-tc: avoid too eager request retransmission
The sequence of a scan/probe (which exchanges exactly one request and
response pair) before an acquisition (which requests another response,
then keeps re-requesting periodically) resulted in the transmission of
more requests shortly after a request was sent and before any response
started receiving at all. Which then resulted in unexpected lengths and
failed consistency checks for the receive data. This condition stuck
because rdtech-tc does not support the re-synchronization to the input
stream as rdtech-um does.
Defer transmission of requests until after receive data was seen (or
an acquisition start forces their transmission). Tested by repeatedly
running:
Gerhard Sittig [Sun, 19 Mar 2023 18:19:44 +0000 (19:19 +0100)]
rdtech-tc: style nits in variable names
Rename the AES_KEY[] to lower case, it's a variable not a preprocessor
symbol. Rename CRC variables to reflect what's calculated and what was
received.
Gerhard Sittig [Sun, 19 Mar 2023 15:09:18 +0000 (16:09 +0100)]
rdtech-tc: dump response payload at higher log levels
The request is sent as is, responses are AES encrypted. Which voids the
point of transport layer dumps. Extend the rdtech-tc device driver, dump
the response content at spew levels after successful AES decryption and
validity checks. Pick a bytes per line count which matches the 64 bytes
chunked layout, yet reduces the number of created log output lines.
Gerhard Sittig [Sun, 19 Mar 2023 15:02:45 +0000 (16:02 +0100)]
rdtech-tc: request keyword differs between CDC and BLE transports
The TC66C firmware implements different keywords and different request
terminators across the USB CDC and the Bluetooth LE transports. Move the
string literal to the probe routine, construct the request text at the
time when the device is probed, then re-use it for the remaining session.
Check the receive buffer size and maximum reponse length for consistency
at compile time. Declarations are spread across source files.
The 'buflen' variable name could be misleading, as it's not the receive
buffer's size. Instead it is the amount of previously received response
data. Rename it to 'rdlen'.
Gerhard Sittig [Sun, 19 Mar 2023 18:15:26 +0000 (19:15 +0100)]
serial_bt: support the dialog DA14580 chip (seen in TC66C)
Add support for dialog DA14580 chips, accept conn=bt/dialog/$MAC specs.
These BLE chips were seen in RDTech TC66C energy meters. They appear to
send notifications without the necessity to write CCCD values.
It's yet to get determined whether it's the chip or the device firmware
which requires MTU exchange. The default value in the 400 range (near
the absolute maximum MTU for BLE communication) is rather arbitrary a
choice, needs reconsideration in the future. Users always can override
as desired.
Add support for the rather generic 'notify' Bluetooth "chip type". This
avoids the necessity to come up with chip names for yet unsupported or
unknown BLE modules. Might be less confusing for users. All RX/TX/CCCD
handles must be provided by users.
Gerhard Sittig [Sun, 19 Mar 2023 15:21:06 +0000 (16:21 +0100)]
serial_bt, bluez: support MTU exchange in BLE reception
The central must respond to peripherals' requests to exchange the MTU
value. If it doesn't then the connection terminates. The central has no
choice whether this exchange happens or when it does, applicability is
the consequence of using a specific device (a firmware implementation).
This was first observed with RDTech TC66C energy meters.
Add support for the mtu= parameter in conn=bt/ specifications. A good
default value is yet to get determined. The connection type or the chip
in use are insufficient conditions AFAICT. Currently it is assumed that
users specify the central's MTU when their device firmware requires the
exchange.
Use the "warning" severity for the diagnostics message when peripherals
request MTU exchange while the central won't respond (due to lack of a
value to respond with).
Gerhard Sittig [Sun, 19 Mar 2023 14:59:31 +0000 (15:59 +0100)]
serial_bt, bluez: rework diag in BLE reception, accept zero length data
Rework how the sr_bt_check_notify() routine processes messages that were
received from a Bluetooth socket. Comment on edge cases that we have yet
to see how they are handled. Extend the amount of details that are given
in diagnostics messages, and tune their verbosity level. The debug level
nicely illustrates how data flows, the spew level makes bytes available.
Consider zero length data chunks in receive code paths non-fatal. Accept
either NULL or non-NULL addresses when the length is zero. A NULL pointer
in combination with a non-zero length is considered fatal though.
Introduce the read_u8_inc_len() and read_u16le_inc_len() routines which
read the respective numbers from binary input, advance the current read
position, and also track the remaining length of input data. Call sites
need not duplicate the data field width they advanced over.
The input stream is considered exhausted when there is insufficient data
to read another field. All subsequent reads will also terminate. Calling
applications need to check before reading when they expect specific sets
of adjacent fields to be available. It is assumed that most call sites
already do this (once for the whole input stream, not individually for
each conversion call of a field).
Gerhard Sittig [Sun, 19 Mar 2023 17:06:06 +0000 (18:06 +0100)]
strutil: add more space in hexdumps after 8 and 16 data bytes
The previous implementation just had one space between bytes. Which
quickly becomes hard to read for longer runs. Add more spaces after
8 and 16 bytes each for improved readability.
Gerhard Sittig [Sun, 19 Mar 2023 14:57:24 +0000 (15:57 +0100)]
log: accept when applications void the log callback
Common support code in the libsigrok library passes all output through
an application specified log callback, while a default callback exists
which writes to stdout and stderr.
Accept when no callback at all is registered. Don't output text in that
case, succeed silently.
Gerhard Sittig [Sun, 19 Mar 2023 14:52:53 +0000 (15:52 +0100)]
log: rephrase default sr_logv() routine, strip CR and LF
Unobfuscate how the unconditional prefix and the conditional timestamp
will prefix the caller's message. Separate the result check for emission
of the prefix/timestamp from the check for successful construction of
the caller's message text. Release the dynamic buffer in the error path.
Use pointers and character variables in the copy loop for readability.
Strip LF as well as CR from the resulting log output text. The previous
implementation exclusively stripped LF. Escaping non-printables is not
attempted in this version.
Gerhard Sittig [Sun, 19 Mar 2023 10:44:34 +0000 (11:44 +0100)]
fluke-dmm: sort models by numbers, no behaviour change
As the list of supported models grows, let's keep their declaration and
processing in numerical order of their model name. This is a mechanical
adjustment, no change in behaviour.
Gerhard Sittig [Fri, 17 Mar 2023 14:13:15 +0000 (15:13 +0100)]
fluke-dmm: reduce indentation in 18x/190/28x dispatch logic
Address several style nits in the fluke-dmm driver. Rephrase a lengthy
if-else-if sequence by means of switch-case, so that conditions are
easier to review. Use glib to get the vector length. Handle the trivial
case first, which reduces indentation for the remaining complex logic.
Fixup comment style, break long text lines.
Gerhard Sittig [Sat, 18 Mar 2023 21:17:01 +0000 (22:17 +0100)]
configure.ac: put spaces around version operators in pkg-config requires
Putting a library name and its version as one bare word on the Requires:
line without spaces around the operators makes application builds fail
because the library isn't found. This amends commit b0b139d914b9.