Metadata-Version: 2.4
Name: herosdevices
Version: 0.5.2
Summary: Python representations (think drivers) of frequently used lab equipment.
Project-URL: Homepage, https://gitlab.com/atomiq-project/herosdevices
Project-URL: Repository, https://gitlab.com/atomiq-project/herosdevices
Project-URL: Bug Tracker, https://gitlab.com/atomiq-project/herosdevices/issues
Author-email: Thomas Niederprüm <t.niederpruem@rptu.de>, Suthep Pomjaksilp <suthep.pomjaksilp@uni-hamburg.de>, Christian Hölzl <choelzl@pi5.physik.uni-stuttgart.de>, Tobias Ebert <tobias.ebert@uni-hamburg.de>
Maintainer-email: Thomas Niederprüm <t.niederpruem@rptu.de>, Suthep Pomjaksilp <suthep.pomjaksilp@uni-hamburg.de>
License: LGPL-3.0-or-later
License-File: LICENSE
Keywords: pub/sub,remote object,rpc,zenoh
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Communications
Requires-Python: >=3.10
Requires-Dist: ftd3xx
Requires-Dist: gpiod; sys_platform == 'linux'
Requires-Dist: heros>=0.7
Requires-Dist: pyftdi
Requires-Dist: pyserial
Requires-Dist: python-dateutil
Requires-Dist: pyvisa
Requires-Dist: pyvisa-py
Requires-Dist: spidev; sys_platform == 'linux'
Requires-Dist: toptica-lasersdk==3.2.0
Provides-Extra: dev
Requires-Dist: mypy; extra == 'dev'
Requires-Dist: pre-commit>=4; extra == 'dev'
Requires-Dist: pytest-cov>=4.0; extra == 'dev'
Requires-Dist: pytest>=8; extra == 'dev'
Requires-Dist: ruff>=0.12; extra == 'dev'
Requires-Dist: types-pyserial; extra == 'dev'
Requires-Dist: types-python-dateutil; extra == 'dev'
Requires-Dist: types-rpi-gpio; extra == 'dev'
Provides-Extra: docs
Requires-Dist: furo>=2024; extra == 'docs'
Requires-Dist: hatch; extra == 'docs'
Requires-Dist: sphinx-argparse; extra == 'docs'
Requires-Dist: sphinx-autoapi>=3; extra == 'docs'
Requires-Dist: sphinx-autodoc-typehints>=3; (python_version >= '3.11') and extra == 'docs'
Requires-Dist: sphinx>=8; (python_version >= '3.11') and extra == 'docs'
Requires-Dist: toml; extra == 'docs'
Provides-Extra: rpi
Requires-Dist: adafruit-circuitpython-dht; extra == 'rpi'
Requires-Dist: gpiozero; extra == 'rpi'
Requires-Dist: lgpio; extra == 'rpi'
Requires-Dist: pigpio; extra == 'rpi'
Requires-Dist: rpi-gpio; extra == 'rpi'
Description-Content-Type: text/markdown

<h1 align="center">
<img src="https://gitlab.com/atomiq-project/herosdevices/-/raw/main/docs/_static/logo.svg" width="150">
</h1>

# HEROS Devices
This repository contains python representations (think drivers) of frequently used lab equipment. While these drivers
can be perfectly used also locally on the system attached to the lab equipment, the real advantage arises, when the
created python object is made available in the network via [HEROS](https://gitlab.com/atomiq-project/heros).

The drivers in this repository sit in the hardware submodule and are arranged in submodules corresponding the vendor
name of the device.

## Howto Use

### Standalone
The hardware control code in this repository is developed as stand-alone code. That means it also runs locally, without any
HEROS magic. Thus, the classes in this module do not inherit from LocalHERO. It is up to the user to make it a HERO or
to use BOSS as described in the following.

### Using as a HERO with BOSS
Using the [BOSS Object Starter Service (BOSS)](https://gitlab.com/atomiq-project/boss) it is easy to instantiate
objects of the classes provided in this repository and make them a [HERO](https://gitlab.com/atomiq-project/heros)
that is available through the network. To this end you can either install BOSS in your system and follow it's
instructions to create an object from the heros-devices module.

## Interfaces
To signal that a HERO provides a certain interface, herosdevices provides the submodule `interfaces`. Inheriting
from the classes therein enforces that particular methods and attributes are implemented by the HERO (otherwise it
errors upon initialization of the HERO) and signals it's compatibility through the hero metadata. This allows the
remote site to safely assume that a certain interface is present with the HERO. This allows to, for example, to
transparently use HEROs in an atomiq script as RFSource, VoltageSource, CurrentSource, DACChannel, Switch, etc. This is
explicitly possible without herosdevices depending on atomiq itself. The mechanism can easily be extended to have interface
classes for other systems as well.

.. note::
    The interfaces mechanism is completely optional. If a HERO does not inherit from an interface, nothing breaks but
    also none of the magic described above will happen on the remote side.