diff options
Diffstat (limited to 'pyecsca/sca/scope/picoscope_alt.py')
| -rw-r--r-- | pyecsca/sca/scope/picoscope_alt.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/pyecsca/sca/scope/picoscope_alt.py b/pyecsca/sca/scope/picoscope_alt.py new file mode 100644 index 0000000..69b705a --- /dev/null +++ b/pyecsca/sca/scope/picoscope_alt.py @@ -0,0 +1,57 @@ +from time import time_ns, sleep +from typing import Optional, Tuple, Sequence, Union + +import numpy as np +from picoscope.ps4000 import PS4000 +from picoscope.ps6000 import PS6000 +from public import public + +from .base import Scope + + +@public +class PicoScopeAlt(Scope): + + def __init__(self, ps: Union[PS4000, PS6000]): + self.ps = ps + + def open(self) -> None: + self.ps.open() + + @property + def channels(self) -> Sequence[str]: + return list(self.ps.CHANNELS.keys()) + + def setup_frequency(self, frequency: int, samples: int) -> Tuple[int, int]: + actual_frequency, max_samples = self.ps.setSamplingFrequency(frequency, samples) + if max_samples < samples: + samples = max_samples + return actual_frequency, samples + + def setup_channel(self, channel: str, coupling: str, range: float, enable: bool) -> None: + self.ps.setChannel(channel, coupling, range, 0.0, enable) + + def setup_trigger(self, channel: str, threshold: float, direction: str, delay: int, + timeout: int, enable: bool) -> None: + self.ps.setSimpleTrigger(channel, threshold, direction, delay, timeout, enable) + + def setup_capture(self, channel: str, enable: bool) -> None: + pass + + def arm(self) -> None: + self.ps.runBlock() + + def capture(self, channel: str, timeout: Optional[int] = None) -> Optional[np.ndarray]: + start = time_ns() + while not self.ps.isReady(): + sleep(0.001) + if timeout is not None and (time_ns() - start) / 1e6 >= timeout: + return None + + return self.ps.getDataV(channel) + + def stop(self) -> None: + self.ps.stop() + + def close(self) -> None: + self.ps.close() |
