Metadata-Version: 2.4
Name: philander
Version: 0.4
Summary: Driver collection for embedded systems or wireless sensor nodes.
Project-URL: Homepage, https://github.com/olimaye/philander
Project-URL: Documentation, http://philander.readthedocs.io
Project-URL: Bug Tracker, https://github.com/olimaye/philander/issues
Project-URL: Changelog, https://github.com/olimaye/philander/blob/master/changelog.md
Author: Oliver Maye
Author-email: maye@ihp-microelectronics.com
License: EUPL-1.2
License-File: LICENSE.txt
Keywords: BMA456,WSN,accelerometer,driver,hardware abstraction,platform
Classifier: Development Status :: 6 - Mature
Classifier: Environment :: Console
Classifier: Environment :: No Input/Output (Daemon)
Classifier: Environment :: Other Environment
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Education
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: European Union Public Licence 1.2 (EUPL 1.2)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: MicroPython
Classifier: Topic :: Software Development :: Embedded Systems
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Hardware :: Hardware Drivers
Requires-Python: >=3.4
Requires-Dist: argparse; implementation_name == 'micropython'
Requires-Dist: gpiozero; platform_machine == 'aarch64'
Requires-Dist: logging; implementation_name == 'micropython'
Requires-Dist: pymitter
Requires-Dist: smbus2; platform_machine == 'aarch64'
Requires-Dist: threading; implementation_name == 'micropython'
Requires-Dist: unittest; implementation_name == 'micropython'
Requires-Dist: warnings; implementation_name == 'micropython'
Description-Content-Type: text/markdown

# About philander

Philander is a collection of drivers for the components of an embedded
system or wireless sensor node. This includes but is not limited to:
  - sensors
  - battery chargers
  - battery fuel gauges
  - actors, such as motors
  - GUI elements, like LEDs and buttons
  - service modules, e.g. integer mathematics
  
The code is completely written in Python and relies on low-level
communication modules such as smbus, smbus2 or periphery and pymitter.
It aims at making application development easier by providing a
unified interface for electronic parts that are expected to do
similar things.

The intended hardware platform is all kind of single-board computers
such as Raspberry Pi, Arduino and Google Coral.
This software is specifically designed for making the features of their
shields, daughter- and add-on boards available to the application.

# Installation

Released builds of this collection can be installed from the
python package index at [https://pypi.org](https://pypi.org) by just
using pip as in:
`pip3 install philander`

# Application development
The main guide line is: Keep your application code as generic as
possible. References to philander objects should only be as specific as
necessary!

The API reference may be generated from the source code, through, e.g.
sphinx. It can be found at [https://philander.readthedocs.io](https://philander.readthedocs.io)
 
The most relevant philander objects are derived from `module`. The life
cycle of such an object is as follows.

* Instantiation: usually a default constructor without any parameter.
* Params_init(): A class method to pre-populate a configuration dictionary
with default entries.
* open(): Configures an object and prepares it for use.
* ...operation...: depends on the actual type and may be
specified by other interfaces, such as sensor, charger or gasgauge.
* close(): Shut down the instance and possibly release any hardware resources.

Note that the configuration is done through Python dictionaries,
passed in as the first parameter to the open() method.
The dictionary can be pre-initialized by Params_init()
or set by the application. Alternatively, parts of it could be read from
config files, for example.


# Example code
```
from philander.accelerometer import Accelerometer
from philander.bma456 import BMA456 as sensorDriver
from philander.systypes import ErrorCode

configSensor = {
    "SerialBus.designator": "/dev/i2c-1",
    "SerialBusDevice.address": 0x18,
    "Sensor.dataRange"    : 4000,
    "Sensor.dataRate"     : 100,
}
sensor = sensorDriver()
sensorDriver.Params_init( configSensor )

err = sensor.open( configSensor )
if (err == ErrorCode.errOk):
    print("Success!")
else:
    print("Error: ", err)

mdata, err = sensor.getNextData()
if (err == ErrorCode.errOk):
    print(now, mdata)

sensor.close()
```

# Library development

Python developers are welcome to add own classes and driver
implementations to this collection. Stick to the rules and conventions
of object-oriented Python programming!

The mandatory coding convention for Python code is the Python
Enhancement Proposal #8 ([PEP 8](https://peps.python.org/pep-0008/)).
It also gives advice on the naming convention.

Documentation must follow [PEP 257](https://peps.python.org/pep-0257/).
The Docstring format should be reStructuredText as defined by the
[reStructuredText Markup Specification](https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html).
To generate the HTML documentation output from the source files, tools
like [Sphinx](https://www.sphinx-doc.org) may be used.
Preferrably, the same tool should also be able to generate PDF output.

