Python package for providing an runtime access to embedded devices based on a memory map type interface.
This package consists of base classes to build interfaces and a mock device used for testing and as an example of implementation.
Device connection such as serial
and parsers such as json
are used to get
standard output.
Embedded devices are generally constrained and communication with
runtime parameters can take up lots of resources. Since many users of
microcontroller are familiar with the concept of a memory map or
register map the Memory Map
Manager can be
used as and lightweight way of coordinating a single memory map for
documentation, C structures, and python interface. The mm_pal
provides
the building blocks for a custom interface. All common functions related
to connecting to the device, parsing output of the registers, and
reading/writing to the registers are handled and only application
specific functionality needs to be implemented. This can make
development easier, especially when the registers are changing
frequently.
┏━━━━━━━━━━━┓ ┏━━━━━━━━━┓
┃ developer ┃ ┃ script ┃
┗━━━━━▲━━━━━┛ ┗━━━━▲━━━━┛
┃ ┃
┏━━━━┸━━━━┓ ┏━━━━━┸━━━━━┓
┃ my_cli ◄━━━━━━━┫ my_app_if ┃
┗━━━━▲━━━━┛ ┗━━━━━▲━━━━━┛
┃ ┌────────┐ ┃
┃ │ mm_pal │ ┃
┌─────╂────┴────────┴────╂────────┐
│┏━━━━┸━━━┓ ┏━━━┸━━━┓ │
│┃ mm_cmd ◄━━━━━━━━━━┫ mm_if ┃ │
│┗━━━━━━━━┛ ┗━━━▲━━━┛ │
│ ┃ │
│ ┏━━━━━━━┸━━━━━━━┓│
│ ┃ serial_driver ┃│
│ ┗━━━━━━━▲━━━━━━━┛│
└────────────────────────╂────────┘
┃
┏━━━━━━━━━━▼━━━━━━━━━━┓
┃ my_embedded_device ┃
┗━━━━━━━━━━━━━━━━━━━━━┛
To install mm_pal
use pip:
pip install mm_pal --user
Note: only use python 3 which may require pip3
To install from sources:
./setup.py install --force --user
Note: setuptools package should be installed.
This package is meant to be built upon. An example implementation is done with the mock_if and the mock_cli.
The mm_cmd is based on the cmd2 module is probably worth reading the documenation.
To regenerate documentation use:
sphinx-apidoc -f -o docs/source/ mm_pal mock_pal; make html -C docs/
To test the package with pytest
must be installed installed and updated.
Using ./setup.py test
or tox
will perform tests on the
source package.
Special thanks to riotctrl as it served as a great example.