smbus-cffi
==========

.. image:: https://secure.travis-ci.org/bivab/smbus-cffi.svg
    :target: http://travis-ci.org/bivab/smbus-cffi

.. image:: https://img.shields.io/pypi/v/smbus-cffi.svg
    :target: https://pypi.python.org/pypi/smbus-cffi/
    :alt: Latest Version

.. image:: https://img.shields.io/pypi/implementation/smbus-cffi.svg
    :target: https://pypi.python.org/pypi/smbus-cffi/
    :alt: Implementation
    
.. image:: https://img.shields.io/pypi/l/smbus-cffi.svg
    :target: https://pypi.python.org/pypi/smbus-cffi/
    :alt: License
    
.. image:: https://img.shields.io/pypi/format/smbus-cffi.svg
    :target: https://pypi.python.org/pypi/smbus-cffi/
    :alt: Download format

.. image:: https://requires.io/github/bivab/smbus-cffi/requirements.png?branch=master
     :target: https://requires.io/github/bivab/smbus-cffi/requirements/?branch=master
     :alt: Requirements Status

This Python module allows SMBus access through the I2C /dev interface on Linux
hosts. The host kernel must have I2C support, I2C device interface support, and
a bus adapter driver.

This module is a cffi-based python reimplementation of the python-smbus C-extension
(http://www.lm-sensors.org/browser/i2c-tools/trunk/py-smbus/) and works on PyPy
and CPython (2.6 and up).


Notes
-----

The SMBus methods read_block_data and block_process_call are not fully tested,
and might not work correctly, see note below.

*Note of caution for Raspberry Pi users*: when calling read_block_data and
block_process_call the underlying i2c/smbus library/driver causes a kernel
panic on the Raspberry Pi. Testing these features on other hardware would be a
great way to contribute.


Example
-------

Assuming you have a device connected at address 4 on the bus

::

  >>> from smbus import SMBus

  >>> bus = SMBus(4)

  >>> bus.write_quick()

  >>> some_reg = 123

  >>> bus.write_i2c_block_data(4, some_reg, [1, 4, 7])


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

To install smbus-cffi you will need:

* A C compiler
* i2c development headers
* cffi (https://pypi.python.org/pypi/cffi/)
* PyPy or CPython development headers
* libffi-dev is required CPython for cffi

https://metacpan.org/pod/Device::SMBus provides a good description on how to setup the dependencies.

On Debian based distributions these can be installed with:

::

  sudo apt-get install build-essential libi2c-dev i2c-tools python-dev libffi-dev

On Arch Linux:

::

  pacman -S base-devel
  pacman -S i2c-tools


Finally install cffi using pip or from source.

::

  pip install cffi


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

There are several methods to install the package. First install the dependencies as described above. *Note:* unfortunately at the
moment when installing using pip or setup.py on CPython you need to make sure
that the cffi package already is installed.

1. pip install from PyPi
::

  pip install smbus-cffi

2. pip install from git
::

  pip install git+https://github.com/bivab/smbus-cffi.git

3. Clone the repository and run setup.py
::

  git clone https://github.com/bivab/smbus-cffi.git
  python setup.py install


Bug Reporting
-------------

To submit a bugreport use the GitHub bugtracker for the project:

  https://github.com/bivab/smbus-cffi/issues


Development
-----------

You can get the latest version from the repository hosted at GitHub
https://github.com/bivab/smbus-cffi

The file requirements.txt contains the list of dependencies needed to work with
smbus-cffi.

The project uses py.test for testing and tox to test on pypy and python.

The file test/test_smbus_integration.py contains a set of integration tests for
the smbus wrapper. To run the integrations tests you need an Arduino board
flashed with the sketch provided in test/test_sketch.  The serial port and the
i2c pins of the Arduino board need to be connected to the machine running the
tests. The sketch implements the counterpart of the smbus protocol that reads
and writes data for each test using smbus and the serial port.



Authors
-------

* David Schneider

Author of the original smbus C extension:

* Mark M. Hoffman


Copyright
---------

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.

See LICENSE for full license text
