Metadata-Version: 1.2
Name: imx
Version: 0.1.3
Summary: Open Source library for easy development with i.MX platform
Home-page: https://github.com/molejar/pyIMX
Author: Martin Olejar
Author-email: martin.olejar@gmail.com
License: BSD3
Description: pyIMX
        =====
        
        |Build Status| |Coverage Status| |PyPI Status| |Python Version|
        
        This repository collects a useful tools and python module targeted for
        `i.MX Applications
        Processors <https://www.nxp.com/products/processors-and-microcontrollers/arm-based-processors-and-mcus/i.mx-applications-processors>`__.
        
        **What is implemented:**
        
        -  DCD (Device Configuration Data) API
        -  Boot Image v2 (i.MX6 and i.MX7) API
        -  Boot Image v3 (i.MX8QM-A0 and i.MX8QXP-A0) API
        -  SDP (Serial Download Protocol) API - only USB interface
        -  HAB-Log parser (only i.MX6 and i.MX7 yet)
        -  SRK Table API
        
        **Embedded tools:**
        
        -  `imxim <https://github.com/molejar/pyIMX/blob/master/doc/imxim.md>`__
           - a tool for manipulation with ``*.imx`` boot image
        -  `imxsd <https://github.com/molejar/pyIMX/blob/master/doc/imxsd.md>`__
           - a tool to download and execute code on i.MX SoCs through the Serial
           Download Protocol (SDP)
        
            This project is still in developing phase. Please, test it and
            report founded issues.
        
        Dependencies
        ------------
        
        -  `Python <https://www.python.org>`__ - Python 3.x interpreter
        -  `Click <http://click.pocoo.org>`__ - Python package for creating
           beautiful command line interface.
        -  `pyYAML <http://pyyaml.org/wiki/PyYAML>`__ - YAML parser and emitter
           for the Python programming language.
        -  `bincopy <https://github.com/eerimoq/bincopy>`__ - Python package for
           parsing S-Record, Intel HEX and TI-TXT files.
        -  `easy\_enum <https://github.com/molejar/pyEnum>`__ - User friendly
           implementation of documented Enum type for Python language.
        -  `cryptography <https://cryptography.io/en/latest>`__ - Provides
           cryptographic recipes and primitives to Python developers
        -  `PyUSB <https://github.com/pyusb/pyusb>`__ - Python package to access
           USB devices in Linux OS.
        -  `PyWinUSB <https://github.com/rene-aguirre/pywinusb>`__ - Python
           package that simplifies USB-HID communications on Windows OS.
        
        Installation
        ------------
        
        .. code:: bash
        
                $ pip install imx
        
        To install the latest version from master branch execute in shell
        following commands:
        
        .. code:: bash
        
                $ pip install -r https://raw.githubusercontent.com/molejar/pyIMX/master/requirements.txt
                $ pip install -U https://github.com/molejar/pyIMX/archive/master.zip
        
        In case of development, install pyIMX from sources:
        
        .. code:: bash
        
                $ git clone https://github.com/molejar/pyIMX.git
                $ cd pyIMX
                $ pip install -r requirements.txt
                $ pip install -U -e .
        
        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 pyIMX 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
        -----
        
        In following example is demonstrated the simplicity of usage i.MX boot
        image API covered by ``imx.img`` module:
        
        .. code:: python
        
                from imx import img
        
                # --------------------------------------------------------------------------------
                # Create new U-Boot i.MX6/7 image
                # --------------------------------------------------------------------------------
        
                # Create DCD segment instance
                dcd = img.SegDCD()
        
                # Create Write Data command and append values with addresses
                cmd = img.CmdWriteData(4, img.EnumWriteOps.WRITE_VALUE)
                cmd.append(0x30340004, 0x4F400005)
                cmd.append(0x30391000, 0x00000002)
                cmd.append(0x307A0000, 0x01040001)
        
                # Append commands into DCD segment
                dcd.append(cmd)
                dcd.append(img.CmdCheckData(4, img.EnumCheckOps.ANY_CLEAR, 0x307900C4, 0x00000001))
        
                # Open U-Boot raw image
                with open('u-boot.img', 'rb') as f:
                    app = f.read()
        
                # Create IMX U-Boot image with DCD segment
                image = img.BootImg2(0x877FF000, app, dcd)
        
                # Print image info
                print(image)
        
                # Save IMX U-Boot image
                with open('u-boot.imx', 'wb') as f:
                    f.write(image.export())
        
                # --------------------------------------------------------------------------------
                # Extract DCD from existing U-Boot i.MX6/7 image
                # --------------------------------------------------------------------------------
        
                # Open U-Boot IMX image
                with open('u-boot.imx', 'rb') as f:
                    data = f.read()
        
                # Parse U-Boot IMX image
                image = img.BootImg2.parse(data)
        
                # Extract DCD from U-Boot IMX image
                dcd = image.dcd
        
                # Print extracted DCD info
                print(dcd)
        
                # Save extracted DCD content as raw image
                with open('dcd.img', 'wb') as f:
                    f.write(dcd.export())
        
                # Save extracted DCD content as readable text file
                with open('dcd.txt', 'w') as f:
                    f.write(dcd.store())
        
        Second example demonstrate usage of i.MX serial downloader protocol API
        covered by ``imx.sdp`` module:
        
        .. code:: python
        
                from imx import sdp
        
                # scan for connected USB devs
                devs = sdp.scan_usb()
        
                if devs:
                    # Print list of connected devices
                    for i, dev in enumerate(devs):
                        print("{}) {}".format(i, dev.usbd.info()))
        
                    # Connect to first i.MX device
                    flasher = devs[0]
                    flasher.open()
        
                    # Read data from i.MX Device (i.MX7D OCRAM)
                    data = flasher.read(0x910000, 100, 8)
        
                    # Write boot image data into i.MX Device (i.MX7D OCRAM)
                    flasher.write_file(0x910000, data)
        
                    # Other commands
                    # ...
        
                    # Disconnect IMX Device
                    flasher.close()
        
            For running ``imx.sdp`` module without root privileges in Linux OS
            copy attached udev rules
            `90-imx-sdp.rules <https://github.com/molejar/pyIMX/blob/master/udev/90-imx-sdp.rules>`__
            into ``/etc/udev/rules.d`` directory and reload it with command:
            ``sudo udevadm control --reload-rules``.
        
        TODO
        ----
        
        -  Add serial interface support for ``imx.sdp`` module
        -  Add image security features (sign and encryption)
        -  Add eFuses read, write and validation functionality
        -  Add HAB-log parser for i.MX-RT and i.MX8 devices
        -  Add support for QSPI Flash image
        
        .. |Build Status| image:: https://travis-ci.org/molejar/pyIMX.svg?branch=master
           :target: https://travis-ci.org/molejar/pyIMX
        .. |Coverage Status| image:: https://coveralls.io/repos/github/molejar/pyIMX/badge.svg?branch=master
           :target: https://coveralls.io/github/molejar/pyIMX?branch=master
        .. |PyPI Status| image:: https://img.shields.io/pypi/v/imx.svg
           :target: https://pypi.python.org/pypi/imx
        .. |Python Version| image:: https://img.shields.io/pypi/pyversions/imx.svg
           :target: https://www.python.org
        
Platform: Windows
Platform: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: POSIX :: Linux
Classifier: Operating System :: Microsoft :: Windows
Classifier: License :: OSI Approved :: BSD License
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Software Development :: Embedded Systems
Classifier: Topic :: System :: Hardware
Classifier: Topic :: Utilities
Requires-Python: >=3.5
