Metadata-Version: 2.0
Name: fdt
Version: 0.1.2
Summary: Flattened Device Tree Python Module
Home-page: https://github.com/molejar/pyFDT
Author: Martin Olejar
Author-email: martin.olejar@gmail.com
License: Apache 2.0
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Classifier: Environment :: Console
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Software Development :: Embedded Systems
Classifier: Topic :: Utilities
Requires-Python: >=3.6
Requires-Dist: click (>=5.0)

Flattened Device Tree Python Module
===================================

|Build Status| |Coverage Status| |PyPI Status| |Python Version|

This python module is usable for manipulation with `Device Tree
Data <https://www.devicetree.org/>`__ and primary was created for `i.MX
Smart-Boot
Tool <https://github.com/molejar/pyIMX/blob/master/doc/imxsb.md>`__

    Some parts in this module have been inspired from:
    https://github.com/superna9999/pyfdt project.

Dependencies
------------

-  `Python <https://www.python.org>`__ - Python 3.x interpreter
-  `Click <http://click.pocoo.org/6>`__ - Python package for creating
   beautiful command line interface.

Installation
------------

.. code:: bash

        $ pip install fdt

To install the latest version from master branch execute in shell
following command:

.. code:: bash

        $ pip install -U https://github.com/molejar/pyFDT/archive/master.zip

In case of development, install it from cloned sources:

.. code:: bash

        $ git clone https://github.com/molejar/pyFDT.git
        $ cd pyFDT
        $ pip install -U -e .

**NOTE:** You may run into a permissions issues running these commands.
Here are a few options how to fix it:

1. Run with ``sudo`` to install ``fdt`` and dependencies globally
2. Specify the ``--user`` option to install locally into your home
   directory (export “~/.local/bin” into PATH variable if haven’t).
3. Run the command in a
   `virtualenv <https://virtualenv.pypa.io/en/latest/>`__ local to a
   specific project working set.

Usage
-----

The API of **fdt** module is intuitive and implementing all general
requirements for manipulation with FDT Nodes, Properties and dts/dtb
files.

.. code:: python

        import fdt

        #-----------------------------------------------
        # convert *.dtb to *.dts
        # ----------------------------------------------
        with open("example.dtb", "rb") as f:
            dtb_data = f.read()

        dt1 = fdt.parse_dtb(dtb_data)

        with open("example.dts", "w") as f:
            f.write(dt1.to_dts())

        #-----------------------------------------------
        # convert *.dts to *.dtb
        # ----------------------------------------------
        with open("example.dts", "r") as f:
            dts_text = f.read()

        dt2 = fdt.parse_dts(dts_text)

        with open("example.dtb", "wb") as f:
            f.write(dt2.to_dtb(version=17))

        #-----------------------------------------------
        # Add Property and Node into dt2
        # ----------------------------------------------
        node = fdt.Node('test_node')
        node.append(fdt.Property('basic_property'))
        node.append(fdt.PropStrings('string_property', 'value1', 'value2'))
        node.append(fdt.PropWords('words_property', 0x1000, 0x80000000, wsize=32))
        node.append(fdt.PropBytes('bytes_property', data=[0, 200, 12]))
        dt2.add_item(node)

        #-----------------------------------------------
        # merge dt2 into dt1
        # ----------------------------------------------
        dt1.merge(dt2)

        with open("merged.dtb", "wb") as f:
            f.write(dt1.to_dtb(version=17))

        #-----------------------------------------------
        # diff two fdt objects
        # ----------------------------------------------
        out = fdt.diff(dt1, dt2)

        print(out[0]) # same in dt1 and dt2
        print(out[1]) # specific for dt1
        print(out[2]) # specific for dt2

[ pydtc ] Tool
--------------

The python device tree converter **pydtc** is a tool for conversion
*.dts to*.dtb and vice versa. Is distributed together with **fdt**
module. This tool can be in some cases used as replacement of `device
tree compiler <https://git.kernel.org/pub/scm/utils/dtc/dtc.git>`__.

.. code:: bash

      $ pydtc -?

    Usage: pydtc [OPTIONS] COMMAND [ARGS]...

      Device Tree Converter (DTC) is a tool for converting device tree binary
      blob (*.dtb) to readable text file (*.dts) and reverse

    Options:
      -v, --version  Show the version and exit.
      -?, --help     Show this message and exit.

    Commands:
      diff   Compare two *.dtb or *.dts files
      merge  Merge two and more *.dtb or *.dts files
      todtb  Convert *.dts to *.dtb
      todts  Convert *.dtb to *.dts

$ pydtc todts [OPTIONS] INFILE
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Convert Device Tree in binary blob *.dtb to readable text file*.dts

**INFILE** - Single DTB file as \*.dtb

options:
''''''''

-  **-t, –tabsize** - Tabulator Size
-  **-o, –outfile** - Output path/file name (*.dts)
-  **-?, –help** - Show help message and exit

Example:
''''''''

.. code:: bash

      $ pydtc todts test.dtb

        DTS saved as: test.dts

$ pydtc todtb [OPTIONS] INFILE
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Convert Device Tree in readable text file *.dts to binary blob*.dtb

**INFILE** - Single DTS file as \*.dts

.. _options-1:

options:
''''''''

-  **-v, –version** - DTB Version
-  **-l, –lcversion** - DTB Last Compatible Version
-  **-c, –cpuid** - Boot CPU ID
-  **-a, –align** - Make the blob align to the
-  **-p, –padding** - Add padding to the blob of long
-  **-s, –size** - Make the blob at least long
-  **-o, –outfile** - Output path/file name (*.dtb)
-  **-?, –help** - Show help message and exit

.. _example-1:

Example:
''''''''

.. code:: bash

      $ pydtc todtb -v 17 test.dts

        DTB saved as: test.dtb

$ pydtc merge [OPTIONS] OUTFILE [INFILES]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Merge two and more *.dtb or*.dts files into one \*.dts file

**OUTFILE** - The output file name with *.dts extension **INFILES** -
Two or more input files with*.dtb or \*.dts extension

.. _options-2:

options:
''''''''

-  **-t, –tabsize** - Tabulator Size
-  **-t, –intype** - Input file type: ‘auto’, ‘dts’, ‘dtb’ (default:
   auto)
-  **-?, –help** - Show help message and exit

.. _example-2:

Example:
''''''''

.. code:: bash

      $ pydtc merge out.dts test1.dtb test2.dtb

        Merge output saved as: out.dts

$ pydtc diff [OPTIONS] FILE1 FILE2
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Compare two dtb/dts files and generate 3 dts files (same in 1 and 2,
specific for 1, specific for 2)

**FILE1** - Input file 1 **FILE2** - Input file 2

.. _options-3:

options:
''''''''

-  **-t, –intype** - Input file type: ‘auto’, ‘dts’, ‘dtb’ (default:
   auto)
-  **-o, –outdir** - Output directory/path (default: diff_out)
-  **-?, –help** - Show help message and exit

.. _example-3:

Example:
''''''''

.. code:: bash

      $ pydtc diff test1.dtb test2.dtb

        Diff output saved into: diff_out

.. |Build Status| image:: https://travis-ci.org/molejar/pyFDT.svg?branch=master
   :target: https://travis-ci.org/molejar/pyFDT
.. |Coverage Status| image:: https://coveralls.io/repos/github/molejar/pyFDT/badge.svg
   :target: https://coveralls.io/github/molejar/pyFDT
.. |PyPI Status| image:: https://img.shields.io/pypi/v/fdt.svg
   :target: https://pypi.python.org/pypi/fdt
.. |Python Version| image:: https://img.shields.io/pypi/pyversions/fdt.svg
   :target: https://www.python.org


