Source code for dwfpy.application

"""
Support for Digilent WaveForms applications.
"""

#
# This file is part of dwfpy: https://github.com/mariusgreuel/dwfpy
# Copyright (C) 2019 Marius Greuel
#
# SPDX-License-Identifier: MIT
#

import ctypes
import logging
from . import bindings as api
from .constants import Error, GlobalParameter
from .exceptions import WaveformsError
from .helpers import Helpers


class _Singleton:
    _instance = None

    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = super().__new__(cls, *args, **kwargs)

        return cls._instance


[docs]class Application(_Singleton): """WaveForms application.""" _logger = logging.getLogger('dwfpy') def __init__(self): api.set_error_handler(Application._error_handler) @staticmethod def _error_handler(result, _, args): if not result: error = Application.get_last_error() if error != Error.NO_ERROR: error_message = Application.get_last_error_message() raise WaveformsError(error_message, error) return args
[docs] @staticmethod def get_logger() -> logging.Logger: """Gets the WaveForms logger.""" return Application._logger
[docs] @staticmethod def get_version() -> str: """Gets the DWF API version string.""" buffer = ctypes.create_string_buffer(32) api.dwf_get_version(buffer) return Helpers.c_char_to_string(buffer)
[docs] @staticmethod def get_last_error() -> Error: """Gets the last DWF API error code.""" return Error(api.dwf_get_last_error())
[docs] @staticmethod def get_last_error_message() -> str: """Gets the last DWF API error message.""" buffer = ctypes.create_string_buffer(512) api.dwf_get_last_error_msg(buffer) return Helpers.c_char_to_string(buffer).rstrip('\n')
[docs] @staticmethod def get_parameter(parameter: GlobalParameter) -> int: """Gets a global parameter.""" return api.dwf_param_get(parameter)
[docs] @staticmethod def set_parameter(parameter: GlobalParameter, value: int) -> None: """Sets a global parameter.""" api.dwf_param_set(parameter, value)
@property def usb_power_on_aux(self) -> bool: """Gets or sets a value to keep the USB power enabled even when AUX supply is connected. Applies to Analog Discovery 2""" return bool(self.get_parameter(GlobalParameter.USB_POWER)) @usb_power_on_aux.setter def usb_power_on_aux(self, value: bool) -> None: self.set_parameter(GlobalParameter.USB_POWER, value) @property def led_brightness(self) -> int: """Gets or sets the Digital Discovery LED brightness.""" return self.get_parameter(GlobalParameter.LED_BRIGHTNESS) @led_brightness.setter def led_brightness(self, value: int) -> None: self.set_parameter(GlobalParameter.LED_BRIGHTNESS, value) @property def on_close_behavior(self) -> int: """Gets or sets a value indicating the device close behavior. 0 = Continue, 1 = Stop, 2 = Shutdown.""" return self.get_parameter(GlobalParameter.ON_CLOSE) @on_close_behavior.setter def on_close_behavior(self, value: int) -> None: self.set_parameter(GlobalParameter.ON_CLOSE, value) @property def enable_audio_output(self) -> bool: """Enables or disables audio output.""" return bool(self.get_parameter(GlobalParameter.AUDIO_OUT)) @enable_audio_output.setter def enable_audio_output(self, value: bool) -> None: self.set_parameter(GlobalParameter.AUDIO_OUT, value) @property def usb_limit(self) -> int: """Gets or sets the USB current limitation in mA.""" return self.get_parameter(GlobalParameter.USB_LIMIT) @usb_limit.setter def usb_limit(self, value: int) -> None: self.set_parameter(GlobalParameter.USB_LIMIT, value) @property def enable_analog_out(self) -> bool: """Enables or disables the analog audio output.""" return bool(self.get_parameter(GlobalParameter.ANALOG_OUT)) @enable_analog_out.setter def enable_analog_out(self, value: bool) -> None: self.set_parameter(GlobalParameter.ANALOG_OUT, value) @property def frequency(self) -> int: """Gets or sets the frequency in Hz.""" return self.get_parameter(GlobalParameter.FREQUENCY) @frequency.setter def frequency(self, value: int) -> None: self.set_parameter(GlobalParameter.FREQUENCY, value) @property def external_frequency(self) -> int: """Specifies the external frequency in Hz.""" return self.get_parameter(GlobalParameter.EXT_FREQ) @external_frequency.setter def external_frequency(self, value: int) -> None: self.set_parameter(GlobalParameter.EXT_FREQ, value) @property def clock_mode(self) -> int: """Specifies the clock mode: 0 internal, 1 output, 2 input, 3 IO.""" return self.get_parameter(GlobalParameter.CLOCK_MODE) @clock_mode.setter def clock_mode(self, value: int) -> None: self.set_parameter(GlobalParameter.CLOCK_MODE, value)