Source code for pycanape.recorder

# SPDX-FileCopyrightText: 2022-present Artur Drogunow <artur.drogunow@zf.com>
#
# SPDX-License-Identifier: MIT

import ctypes
from ctypes import wintypes
from pathlib import Path
from typing import Union

from .cnp_api import cnp_class, cnp_constants
from .cnp_api.cnp_prototype import CANapeDll
from .config import RC


[docs] class Recorder: def __init__( self, dll: CANapeDll, asap3_handle: cnp_class.TAsap3Hdl, # type: ignore[valid-type] recorder_id: cnp_class.TRecorderID, # type: ignore[valid-type] ) -> None: """The :class:`~pycanape.recorder.Recorder` class is not meant to be instantiated by the user. :class:`~pycanape.recorder.Recorder` instances are returned by :meth:`~pycanape.canape.CANape.define_recorder`, :meth:`~pycanape.canape.CANape.get_recorder_by_index` and :meth:`~pycanape.canape.CANape.get_selected_recorder`. :param asap3_handle: :param recorder_id: """ self._dll = dll self._asap3_handle = asap3_handle self._recorder_id = recorder_id
[docs] def get_name(self) -> str: """Get the name of the recorder.""" length = ctypes.c_long() self._dll.Asap3GetRecorderName( self._asap3_handle, self._recorder_id, None, ctypes.byref(length), ) buffer = ctypes.create_string_buffer(length.value) self._dll.Asap3GetRecorderName( self._asap3_handle, self._recorder_id, buffer, ctypes.byref(length), ) return buffer.value.decode(RC["ENCODING"])
[docs] def get_state(self) -> cnp_constants.RecorderState: """Return the state of a Recorder""" c_state = cnp_class.enum_type() self._dll.Asap3GetRecorderState( self._asap3_handle, self._recorder_id, ctypes.byref(c_state), ) return cnp_constants.RecorderState(c_state.value)
[docs] def is_enabled(self) -> bool: """Check if Recorder is enabled. :return: True if recorder is enabled """ c_bln = ctypes.c_bool() self._dll.Asap3IsRecorderEnabled( self._asap3_handle, self._recorder_id, ctypes.byref(c_bln), ) return c_bln.value
[docs] def enable(self) -> None: """Enable Recorder.""" self._dll.Asap3EnableRecorder( self._asap3_handle, self._recorder_id, True, )
[docs] def disable(self) -> None: """Disable Recorder.""" self._dll.Asap3EnableRecorder( self._asap3_handle, self._recorder_id, False, )
[docs] def get_mdf_filename(self) -> str: """Retrieve the MDF Filename of a Recorder.""" length = wintypes.DWORD() self._dll.Asap3GetRecorderMdfFileName( self._asap3_handle, self._recorder_id, None, ctypes.byref(length), ) buffer = ctypes.create_string_buffer(length.value) self._dll.Asap3GetRecorderMdfFileName( self._asap3_handle, self._recorder_id, buffer, ctypes.byref(length), ) return buffer.value.decode(RC["ENCODING"])
[docs] def set_mdf_filename(self, filename: Union[str, Path]) -> None: """Set the MDF Filename for a Recorder. :param filename: new recorder filename e.g. '{RECORDER}_{YEAR}-{MONTH}-{DAY}_{HOUR}-{MINUTE}-{SECOND}.MF4' """ self._dll.Asap3SetRecorderMdfFileName( self._asap3_handle, self._recorder_id, str(filename).encode(RC["ENCODING"]), )
[docs] def start(self) -> None: """Starts the recording into the mdf file.""" self._dll.Asap3StartRecorder( self._asap3_handle, self._recorder_id, )
[docs] def stop(self, save_to_mdf: bool = True) -> None: """Stops the recording and writes an MDF File. :param save_to_mdf: save recorded data to a file if True """ self._dll.Asap3StopRecorder( self._asap3_handle, self._recorder_id, save_to_mdf, )
[docs] def pause(self, pause: bool) -> None: """Pause or unpause recorder.""" self._dll.Asap3PauseRecorder( self._asap3_handle, self._recorder_id, pause, )