Bug 260 - ols drivers causes pulseview to lock up
Summary: ols drivers causes pulseview to lock up
Status: CONFIRMED
Alias: None
Product: libsigrok
Classification: Unclassified
Component: Driver: openbench-logic-sniffer (show other bugs)
Version: unreleased development snapshot
Hardware: All All
: Normal normal
Target Milestone: ---
Assignee: Nobody
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-01-11 11:56 CET by Joel Holdsworth
Modified: 2018-06-15 21:19 CEST (History)
4 users (show)



Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Joel Holdsworth 2014-01-11 11:56:02 CET
1. Connect to OLS
2. Set pattern generator mode to internal
3. Set trigger level to high on channel 8
4. Set buffer size to 1k
5. PulseView waits for a trigger event forever
6. Pressing Stop causes GUI to lock up forever
Comment 1 Bert Vermeulen 2014-05-04 21:11:16 CEST
It doesn't lock up for me, and in any case a frontend locking up isn't likely a to be a driver issue. Can you test if this is still the case for you?
Comment 2 Uwe Hermann 2015-08-28 17:42:40 CEST
I just tried this, seeing some hangs as well most of the time. One or two runs would not hang when you press "Run" again (to stop the acquisition), but most do.

No actual errors with -l 5, but it appears the hardware just doesn't send any bytes in the cases where it hangs (?).

Independently of any potential issues in the driver, the GUI should indeed not hang.

Guess this needs more investigation.

Here's a random -l 5 snippet:

sr: ols: Probing /dev/ttyACM0.
sr: serial: Opening serial port '/dev/ttyACM0' (flags 1).
sr: serial: Parsing parameters from "115200/8n1".
sr: serial: Setting serial parameters on port /dev/ttyACM0.
sr: ols: Sending cmd 0x00.
sr: serial: Wrote 1/1 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Sending cmd 0x00.
sr: serial: Wrote 1/1 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Sending cmd 0x00.
sr: serial: Wrote 1/1 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Sending cmd 0x00.
sr: serial: Wrote 1/1 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Sending cmd 0x00.
sr: serial: Wrote 1/1 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Sending cmd 0x02.
sr: serial: Wrote 1/1 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: serial: Read 4/4 bytes.
sr: ols: Sending cmd 0x04.
sr: serial: Wrote 1/1 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: serial: Read 1/1 bytes.
sr: serial: Read 1/1 bytes.
[...]
sr: ols: Got metadata key 0x01 value 'Open Logic Sniffer v1.01'.
sr: serial: Read 1/1 bytes.
sr: serial: Read 1/1 bytes.
sr: serial: Read 1/1 bytes.
sr: serial: Read 1/1 bytes.
sr: serial: Read 1/1 bytes.
sr: serial: Read 1/1 bytes.
sr: ols: Got metadata key 0x02 value '3.07'.
sr: serial: Read 1/1 bytes.
sr: serial: Read 4/4 bytes.
sr: ols: Got metadata key 0x21 value 0x00006000.
sr: serial: Read 1/1 bytes.
sr: serial: Read 4/4 bytes.
sr: ols: Got metadata key 0x23 value 0x0bebc200.
sr: serial: Read 1/1 bytes.
sr: serial: Read 1/1 bytes.
sr: ols: Got metadata key 0x40 value 0x20.
sr: serial: Read 1/1 bytes.
sr: serial: Read 1/1 bytes.
sr: ols: Got metadata key 0x41 value 0x02.
sr: serial: Read 1/1 bytes.
sr: ols: Got metadata key 0x00, metadata ends.
sr: ols: Disabling demux mode.
sr: serial: Closing serial port /dev/ttyACM0.
sr: hwdriver: Scan of 'ols' found 1 devices.
sr: serial: Opening serial port '/dev/ttyACM0' (flags 1).
sr: serial: Parsing parameters from "115200/8n1".
sr: serial: Setting serial parameters on port /dev/ttyACM0.
sr: hwdriver: sr_config_list(): key 30002 (pattern) sdi 0x1cebfe0 cg NULL -> ['None', 'External', 'Internal']
sr: hwdriver: sr_config_get(): key 30003 (rle) sdi 0x1cebfe0 cg NULL -> false
sr: hwdriver: sr_config_get(): key 30002 (pattern) sdi 0x1cebfe0 cg NULL -> 'None'
sr: hwdriver: sr_config_get(): key 30001 (captureratio) sdi 0x1cebfe0 cg NULL -> uint64 0
sr: hwdriver: sr_config_list(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> (uint64 4, uint64 6144)
sr: hwdriver: sr_config_get(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> uint64 0
sr: hwdriver: sr_config_list(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> {'samplerate-steps': <[uint64 10, 200000000, 1]>}
sr: hwdriver: sr_config_get(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> uint64 200000
sr: hwdriver: sr_config_set(): key 30002 (pattern) sdi 0x1cebfe0 cg NULL -> 'Internal'
sr: ols: Enabling internal test mode.
sr: hwdriver: sr_config_set(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> uint64 6144
sr: hwdriver: sr_config_list(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> (uint64 4, uint64 6144)
sr: hwdriver: sr_config_get(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> uint64 6144
sr: hwdriver: sr_config_list(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> {'samplerate-steps': <[uint64 10, 200000000, 1]>}
sr: hwdriver: sr_config_get(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> uint64 200000
sr: hwdriver: sr_config_set(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> uint64 200000
sr: ols: Disabling demux mode.
sr: hwdriver: sr_config_list(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> {'samplerate-steps': <[uint64 10, 200000000, 1]>}
sr: hwdriver: sr_config_get(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> uint64 200000
sr: hwdriver: sr_config_list(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> (uint64 4, uint64 6144)
sr: hwdriver: sr_config_get(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> uint64 6144
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_set(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> uint64 1000
sr: hwdriver: sr_config_list(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> (uint64 4, uint64 6144)
sr: hwdriver: sr_config_get(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> uint64 1000
sr: hwdriver: sr_config_list(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> {'samplerate-steps': <[uint64 10, 200000000, 1]>}
sr: hwdriver: sr_config_get(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> uint64 200000
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_set(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> uint64 1000
sr: hwdriver: sr_config_list(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> (uint64 4, uint64 6144)
sr: hwdriver: sr_config_get(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> uint64 1000
sr: hwdriver: sr_config_list(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> {'samplerate-steps': <[uint64 10, 200000000, 1]>}
sr: hwdriver: sr_config_get(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> uint64 200000
sr: hwdriver: sr_config_set(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> uint64 200000
sr: ols: Disabling demux mode.
sr: hwdriver: sr_config_list(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> {'samplerate-steps': <[uint64 10, 200000000, 1]>}
sr: hwdriver: sr_config_get(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> uint64 200000
sr: hwdriver: sr_config_list(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> (uint64 4, uint64 6144)
sr: hwdriver: sr_config_get(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> uint64 1000
sr: hwdriver: sr_config_get(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> uint64 200000
sr: session: Checking trigger:
sr: session: Stage 0 match on channel 8, match 2
sr: session: Starting.
sr: ols: Setting OLS stage 0 trigger.
sr: ols: Sending cmd 0xc0 data 0x00010000.
sr: serial: Wrote 5/5 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Sending cmd 0xc1 data 0x00010000.
sr: serial: Wrote 5/5 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Sending cmd 0xc2 data 0x00000000.
sr: serial: Wrote 5/5 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Setting OLS stage 1 trigger.
sr: ols: Sending cmd 0xc4 data 0x00000000.
sr: serial: Wrote 5/5 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Sending cmd 0xc5 data 0x00000000.
sr: serial: Wrote 5/5 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Sending cmd 0xc6 data 0x00000108.
sr: serial: Wrote 5/5 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Setting samplerate to 200000Hz (divider 499)
sr: ols: Sending cmd 0x80 data 0xf3010000.
sr: serial: Wrote 5/5 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Setting sample limit 996, trigger point at 996
sr: ols: Sending cmd 0x81 data 0xf900f900.
sr: serial: Wrote 5/5 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Setting intpat on, extpat off, RLE off, noise_filter on, demux off
sr: ols: Sending cmd 0x82 data 0x02080000.
sr: serial: Wrote 5/5 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Sending cmd 0x01.
sr: serial: Wrote 1/1 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: std: ols: Starting acquisition.
sr: std: ols: Sending SR_DF_HEADER packet.
sr: session: bus: Received SR_DF_HEADER packet.
sr: hwdriver: sr_config_get(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> uint64 200000
sr: session: Running.
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x1cebfe0 cg NULL -> [1, 2]
sr: hwdriver: sr_config_set(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> uint64 1000
sr: hwdriver: sr_config_list(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> (uint64 4, uint64 6144)
sr: hwdriver: sr_config_get(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> uint64 1000
sr: hwdriver: sr_config_list(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> {'samplerate-steps': <[uint64 10, 200000000, 1]>}
sr: hwdriver: sr_config_get(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> uint64 200000
sr: hwdriver: sr_config_set(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> uint64 200000
sr: ols: Disabling demux mode.
sr: hwdriver: sr_config_list(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> {'samplerate-steps': <[uint64 10, 200000000, 1]>}
sr: hwdriver: sr_config_get(): key 30000 (samplerate) sdi 0x1cebfe0 cg NULL -> uint64 200000
sr: hwdriver: sr_config_list(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> (uint64 4, uint64 6144)
sr: hwdriver: sr_config_get(): key 50001 (limit_samples) sdi 0x1cebfe0 cg NULL -> uint64 1000

A similar run with sigrok-cli also doesn't yield data most of the time:

 $ sigrok-cli -d ols:conn=/dev/ttyACM0 -c pattern=Internal --samples 1k --wait-trigger -t 8=1

sr: hwdriver: Scan of 'ols' found 1 devices.
sr: serial: Opening serial port '/dev/ttyACM0' (flags 1).
sr: serial: Parsing parameters from "115200/8n1".
sr: serial: Setting serial parameters on port /dev/ttyACM0.
sr: hwdriver: sr_config_set(): key 30002 (pattern) sdi 0x661f50 cg NULL -> 'Internal'
sr: ols: Enabling internal test mode.
sr: hwdriver: sr_config_list(): key 30014 (triggermatch) sdi 0x661f50 cg NULL -> [1, 2]
sr: hwdriver: sr_config_list(): key 50001 (limit_samples) sdi 0x661f50 cg NULL -> (uint64 4, uint64 6144)
sr: hwdriver: sr_config_set(): key 50001 (limit_samples) sdi 0x661f50 cg NULL -> uint64 1000
sr: session: Checking trigger:
sr: session: Stage 0 match on channel 8, match 2
sr: session: Starting.
sr: ols: Setting OLS stage 0 trigger.
sr: ols: Sending cmd 0xc0 data 0x00010000.
sr: serial: Wrote 5/5 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Sending cmd 0xc1 data 0x00010000.
sr: serial: Wrote 5/5 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Sending cmd 0xc2 data 0x00000000.
sr: serial: Wrote 5/5 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Setting OLS stage 1 trigger.
sr: ols: Sending cmd 0xc4 data 0x00000000.
sr: serial: Wrote 5/5 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Sending cmd 0xc5 data 0x00000000.
sr: serial: Wrote 5/5 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Sending cmd 0xc6 data 0x00000108.
sr: serial: Wrote 5/5 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Setting samplerate to 200000Hz (divider 499)
sr: ols: Sending cmd 0x80 data 0xf3010000.
sr: serial: Wrote 5/5 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Setting sample limit 996, trigger point at 996
sr: ols: Sending cmd 0x81 data 0xf900f900.
sr: serial: Wrote 5/5 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Setting intpat on, extpat off, RLE off, noise_filter on, demux off
sr: ols: Sending cmd 0x82 data 0x02080000.
sr: serial: Wrote 5/5 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: ols: Sending cmd 0x01.
sr: serial: Wrote 1/1 bytes.
sr: serial: Draining serial port /dev/ttyACM0.
sr: std: ols: Starting acquisition.
sr: std: ols: Sending SR_DF_HEADER packet.
sr: session: Running transform module 'nop'.
sr: transform/nop: Received packet of type 10000, passing on unmodified.
sr: session: bus: Received SR_DF_HEADER packet.
cli: Received SR_DF_HEADER.
sr: hwdriver: sr_config_get(): key 30000 (samplerate) sdi 0x661f50 cg NULL -> uint64 200000
sr: session: Running.

(hangs there)
Comment 3 ShadowFax 2018-06-15 19:24:45 CEST
I just bought an Open Bench Logic Sniffer, and tried to use PulseView. The problem still appears to be present in the software. The first time the software is run, it seems to work for 1 or 2 captures, then the GUI locks up with a small dialog being displayed.

I downloaded 'pulseview-NIGHTLY-32bit-static-release-installer.exe' from 'https://sigrok.org/wiki/Downloads', as there is no version mentioned, it is the latest nightly build. I can not check if other versions would work, since there is no archive with older downloadable versions mentioned.

I installed Zadig driver using the 'USB Serial (CDC)' option as the driver. I tested on Windows 7 (clean install) and Windows 10 on different laptops and i tested with 2 different cables.

The Java based ols-0.9.7.2-full and ols-0308 are both working fine.

To me it looks like the software locks-up the device/driver in some way, as it seems to stop responding when using PulseView. When it hangs, i need to reconnect the device and reinstall the driver to get it back online. I checked this after having PulseView hang it, killing the process, then starting the OLS Java client and checking Device Manager. It could be the port is somehow in use. I noticed however that the USB Serial Port emulation stopped after the crash of PulseView. 

As of 15th June 2018 the bug still seems present and renders the Windows client unuasable, which is a shame :( I hope you can fix the bug, or further investigate.

Maybe for now it would be possible to make an older working version (2013-2014?) downloadable? It would help out.
Comment 4 ShadowFax 2018-06-15 21:19:15 CEST
After hours of browsing the internet i was able to find 2 older versions of pulseview, 0.2.0 and 0.3.0. 0.2.0 does not support the ols board, so no testing could be done. The 0.3.0 version of pulseview .... shows a generic capture failure dialog box. It looks like the exact same problem was already in the older 0.3.0 version, however, that version does not hang/lockup. After closeing that dialog, it might or might not capture on the next try. It doesnt fail all the time, but most of the time.

And i can confirm the driver itself does not seem to hang, as i thought before. It is mainly the GUI that locks up after it fails to start the capture. I'm just wondering if it might be related to 64 Bit versions of Windows, since the installers are for 32 bit. I'll try to get a 32 bit version running and try with that to see if the problem also occurs on 32 bit os.