aboutsummaryrefslogtreecommitdiff
path: root/pyecsca/sca/scope/picoscope_sdk.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyecsca/sca/scope/picoscope_sdk.py')
-rw-r--r--pyecsca/sca/scope/picoscope_sdk.py41
1 files changed, 29 insertions, 12 deletions
diff --git a/pyecsca/sca/scope/picoscope_sdk.py b/pyecsca/sca/scope/picoscope_sdk.py
index 133b9a2..68562b9 100644
--- a/pyecsca/sca/scope/picoscope_sdk.py
+++ b/pyecsca/sca/scope/picoscope_sdk.py
@@ -183,28 +183,45 @@ class PicoScopeSdk(Scope): # pragma: no cover
period = 1 / frequency
if low_freq == 0 or period > period_bound:
tb = floor(high_freq / frequency + high_subtract)
+ tb = max(tb, high_subtract + 1)
actual_frequency = high_freq // (tb - high_subtract)
else:
tb = min(floor(log2(low_freq) - log2(frequency)), timebase_bound)
actual_frequency = low_freq // 2**tb
max_samples = ctypes.c_int32()
- interval_nanoseconds = ctypes.c_int32()
- assert_pico_ok(
- self._dispatch_call(
- "GetTimebase",
- self.handle,
- tb,
- samples,
- ctypes.byref(interval_nanoseconds),
- 0,
- ctypes.byref(max_samples),
- 0,
+ if tb <= timebase_bound:
+ interval_nanoseconds = ctypes.c_float()
+ assert_pico_ok(
+ self._dispatch_call(
+ "GetTimebase2",
+ self.handle,
+ tb,
+ samples,
+ ctypes.byref(interval_nanoseconds),
+ 0,
+ ctypes.byref(max_samples),
+ 0,
+ )
+ )
+ else:
+ interval_nanoseconds = ctypes.c_int32()
+ assert_pico_ok(
+ self._dispatch_call(
+ "GetTimebase",
+ self.handle,
+ tb,
+ samples,
+ ctypes.byref(interval_nanoseconds),
+ 0,
+ ctypes.byref(max_samples),
+ 0,
+ )
)
- )
if max_samples.value < samples:
pretrig = max_samples.value * (pretrig // samples)
posttrig = max_samples.value - pretrig
samples = max_samples.value
+ # TODO: actual_frequency and "1e9 / interval_nanoseconds.value" should be close
self.frequency = actual_frequency
self.samples = samples
self.pretrig = pretrig