File setup.py#
File List > libpisoundmicro > pypisoundmicro > pypisoundmicro > setup.py
Go to the documentation of this file
"""Setup utilities for Element configuration in pypisoundmicro."""
from ._utils import copy_doc
from .swig import pypisoundmicro as psm
from typing import Optional, Union, Self
from .types import ElementType, Pin, PinDirection, PinPull, ActivityType
from .name import ElementName
from . import Element
class Setup:
"""Wrapper for upisnd_setup_t type that encapsulates Element configuration.
This class provides a Pythonic interface for working with element setup options
that are passed to Element.setup() to create new elements.
"""
def __init__(self) -> None:
"""Initialize an empty Setup object."""
self._setup = 0 # The underlying C upisnd_setup_t is just a 32-bit integer
@property
@copy_doc(psm.upisnd_setup_get_element_type)
def element_type(self) -> ElementType:
return ElementType(psm.upisnd_setup_get_element_type(self._setup))
@element_type.setter
@copy_doc(psm.upisnd_setup_set_element_type)
def element_type(self, value: ElementType) -> None:
result, setup = psm.upisnd_setup_set_element_type(self._setup, value)
if result != 0:
raise ValueError(f"Failed to set element type: {result}")
self._setup = setup
@property
@copy_doc(psm.upisnd_setup_get_pin_id)
def pin(self) -> Pin:
return Pin(psm.upisnd_setup_get_pin_id(self._setup))
@pin.setter
@copy_doc(psm.upisnd_setup_set_pin_id)
def pin(self, value: Pin) -> None:
result, setup = psm.upisnd_setup_set_pin_id(self._setup, value)
if result != 0:
raise ValueError(f"Failed to set pin: {result}")
self._setup = setup
@property
@copy_doc(psm.upisnd_setup_get_gpio_dir)
def gpio_direction(self) -> PinDirection:
return PinDirection(psm.upisnd_setup_get_gpio_dir(self._setup))
@gpio_direction.setter
@copy_doc(psm.upisnd_setup_set_gpio_dir)
def gpio_direction(self, value: PinDirection) -> None:
result, setup = psm.upisnd_setup_set_gpio_dir(self._setup, value)
if result != 0:
raise ValueError(f"Failed to set GPIO direction: {result}")
self._setup = setup
@property
@copy_doc(psm.upisnd_setup_get_gpio_pull)
def gpio_pull(self) -> PinPull:
return PinPull(psm.upisnd_setup_get_gpio_pull(self._setup))
@gpio_pull.setter
@copy_doc(psm.upisnd_setup_set_gpio_pull)
def gpio_pull(self, value: PinPull) -> None:
result, setup = psm.upisnd_setup_set_gpio_pull(self._setup, value)
if result != 0:
raise ValueError(f"Failed to set GPIO pull: {result}")
self._setup = setup
@property
@copy_doc(psm.upisnd_setup_get_gpio_output)
def gpio_output(self) -> int:
return psm.upisnd_setup_get_gpio_output(self._setup)
@gpio_output.setter
@copy_doc(psm.upisnd_setup_set_gpio_output)
def gpio_output(self, value: int) -> None:
result, setup = psm.upisnd_setup_set_gpio_output(self._setup, value)
if result != 0:
raise ValueError(f"Failed to set GPIO output: {result}")
self._setup = setup
@property
@copy_doc(psm.upisnd_setup_get_encoder_pin_b_id)
def encoder_pin_b(self) -> Pin:
return Pin(psm.upisnd_setup_get_encoder_pin_b_id(self._setup))
@encoder_pin_b.setter
@copy_doc(psm.upisnd_setup_set_encoder_pin_b_id)
def encoder_pin_b(self, value: Pin) -> None:
result, setup = psm.upisnd_setup_set_encoder_pin_b_id(self._setup, value)
if result != 0:
raise ValueError(f"Failed to set encoder pin B: {result}")
self._setup = setup
@property
@copy_doc(psm.upisnd_setup_get_encoder_pin_b_pull)
def encoder_pin_b_pull(self) -> PinPull:
return PinPull(psm.upisnd_setup_get_encoder_pin_b_pull(self._setup))
@encoder_pin_b_pull.setter
@copy_doc(psm.upisnd_setup_set_encoder_pin_b_pull)
def encoder_pin_b_pull(self, value: PinPull) -> None:
result, setup = psm.upisnd_setup_set_encoder_pin_b_pull(self._setup, value)
if result != 0:
raise ValueError(f"Failed to set encoder pin B pull: {result}")
self._setup = setup
@property
@copy_doc(psm.upisnd_setup_get_activity_type)
def activity_type(self) -> ActivityType:
return ActivityType(psm.upisnd_setup_get_activity_type(self._setup))
@activity_type.setter
@copy_doc(psm.upisnd_setup_set_activity_type)
def activity_type(self, value: ActivityType) -> None:
result, setup = psm.upisnd_setup_set_activity_type(self._setup, value)
if result != 0:
raise ValueError(f"Failed to set activity type: {result}")
self._setup = setup
def to_int(self) -> int:
"""Get the raw setup integer value."""
return self._setup
@classmethod
def from_int(cls, setup_int: int) -> Self:
"""Create a Setup object from an existing integer setup value.
Args:
setup_int: An integer representing a upisnd_setup_t value
Returns:
A new Setup object initialized with the given setup value
"""
setup = cls()
setup._setup = setup_int
return setup
@staticmethod
@copy_doc(psm.upisnd_setup_for_encoder)
def for_encoder(pin_a: Pin, pull_a: PinPull, pin_b: Pin, pull_b: PinPull) -> 'Setup':
setup = Setup()
result, setup_value = psm.upisnd_setup_for_encoder(setup._setup, pin_a, pull_a, pin_b, pull_b)
if result != 0:
raise ValueError(f"Failed to setup encoder: {result}")
setup._setup = setup_value
return setup
@staticmethod
@copy_doc(psm.upisnd_setup_for_analog_input)
def for_analog_input(pin: Pin) -> 'Setup':
setup = Setup()
result, setup_value = psm.upisnd_setup_for_analog_input(setup._setup, pin)
if result != 0:
raise ValueError(f"Failed to setup analog input: {result}")
setup._setup = setup_value
return setup
@staticmethod
@copy_doc(psm.upisnd_setup_for_gpio_input)
def for_gpio_input(pin: Pin, pull: PinPull) -> 'Setup':
setup = Setup()
result, setup_value = psm.upisnd_setup_for_gpio_input(setup._setup, pin, pull)
if result != 0:
raise ValueError(f"Failed to setup GPIO input: {result}")
setup._setup = setup_value
return setup
@staticmethod
@copy_doc(psm.upisnd_setup_for_gpio_output)
def for_gpio_output(pin: Pin, high: int) -> 'Setup':
setup = Setup()
result, setup_value = psm.upisnd_setup_for_gpio_output(setup._setup, pin, high)
if result != 0:
raise ValueError(f"Failed to setup GPIO output: {result}")
setup._setup = setup_value
return setup
@staticmethod
@copy_doc(psm.upisnd_setup_for_activity)
def for_activity(pin: Pin, activity: ActivityType) -> 'Setup':
setup = Setup()
result, setup_value = psm.upisnd_setup_for_activity(setup._setup, pin, activity)
if result != 0:
raise ValueError(f"Failed to setup activity: {result}")
setup._setup = setup_value
return setup
@copy_doc(psm.upisnd_setup)
def setup_element(name: Union[str, ElementName], setup: Union[Setup, int]) -> Element:
return Element.setup(name, setup)