Metadata-Version: 2.4
Name: iclib
Version: 0.0.0.dev22
Summary: A collection of integrated circuit libraries in pure Python
Home-page: https://github.com/blueskysolarracing/iclib
Author: Blue Sky Solar Racing
Author-email: blueskysolar@studentorg.utoronto.ca
License: MIT
Project-URL: Documentation, https://iclib.readthedocs.io/en/latest/
Project-URL: Source, https://github.com/blueskysolarracing/iclib
Project-URL: Tracker, https://github.com/blueskysolarracing/iclib/issues
Keywords: a1230,adc78h89,bno055,ina229,lis2hh12,ltc6810,mcp23s17,mcp4161,microchip technology,nau7802,newhaven display,nhd-c12864a1z-fsw-fbw-htt,pa1616s,pca9546adr,python,sn74hcs137,texas instruments,ti,tmag5273,wavesculptor22
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Education
Classifier: Topic :: Education
Classifier: Topic :: Scientific/Engineering
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: >=3.11
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: python-periphery<3,>=2.4.0
Requires-Dist: freetype-py<3,>=2.4.0
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: keywords
Dynamic: license
Dynamic: license-file
Dynamic: project-url
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

=====
ICLib
=====

A collection of integrated circuit libraries in pure Python.

Features
--------

- High-level integrated circuit usage.
- Low-level integrated circuit usage.

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

.. code-block:: bash

   pip install iclib

Usage
-----

Below shows a sample usage of ADC78H89.

.. code-block:: python

   from iclib.adc78h89 import ADC78H89
   from periphery import SPI

   spi = SPI('/dev/spidev0.0', 3, 1e6)
   adc78h89 = ADC78H89(spi)
   voltages = adc78h89.sample_all()

   print(voltages[ADC78H89.InputChannel.AIN1])
   print(voltages[ADC78H89.InputChannel.GROUND])

Below shows a sample usage of MCP4161.

.. code-block:: python

   from iclib.mcp4161 import MCP4161
   from periphery import SPI

   spi = SPI('/dev/spidev0.0', 3, 1e6)
   mcp4161 = MCP4161(spi)

   mcp4161.set_wiper_step(123, True)  # eeprom
   mcp4161.set_wiper_step(123)

Below shows a sample usage of SN74HCS137.

.. code-block:: python

   from time import sleep
   from unittest.mock import MagicMock

   from periphery import GPIO
   from iclib.sn78hcs137 import SN74HCS137
   
   latch_enable_gpio = GPIO('/dev/gpiochip0', 0, 'out', inverted=True)
   strobe_input_gpio = GPIO('/dev/gpiochip0', 1, 'out', inverted=True)
   address_select_0_gpio = GPIO('/dev/gpiochip0', 2, 'out', inverted=False)
   address_select_1_gpio = GPIO('/dev/gpiochip0', 3, 'out', inverted=False)
   address_select_2_gpio = GPIO('/dev/gpiochip0', 4, 'out', inverted=False)
   sn78hcs137 = SN74HCS137(
       latch_enable_gpio,
       MagicMock(),
       strobe_input_gpio,
       address_select_0_gpio,
       address_select_1_gpio,
       address_select_2_gpio,
   )

   sn78hcs137.select(SN74HCS137.Address.Y3)
   sleep(1)
   sn78hcs137.deselect()

Below shows a sample usage of NHD-C12864A1Z-FSW-FBW-HTT.

.. code-block:: python

   from time import sleep

   from periphery import GPIO, SPI
   from iclib.nhd_c12864a1z_fsw_fbw_htt import NHDC12864A1ZFSWFBWHTT 

   spi = SPI('/dev/spidev0.0', 3, 10e6)
   a0 = GPIO('/dev/gpiochip0', 8, 'out')
   not_reset = GPIO('/dev/gpiochip0', 9, 'out')
   display = NHDC12864A1ZFSWFBWHTT(spi, a0, not_reset)

   display.clear_screen()

   display.draw_rect(0, 0, 127, 63)

   display.set_font('dejavusans.ttf')
   display.set_size(8, 14)
   display.draw_word('Welcome to Blue Sky solar racing! 12345678910', 2, 2)
   display.set_size(16, 16)
   display.draw_word('@#$%*^', 1, int(driver.HEIGHT * 0.7))
   display.display()

   sleep(5)

   display.clear_screen()

    # Fill screen
    for row in range(display.HEIGHT)
        for col in range(display.WIDTH)
            display.write_pixel(col, row)

    display.display()

    # Create checkerboard pattern
    for row in range(display.HEIGHT)
        for col in range(display.WIDTH)
            if (row + col) % 2 == 1:  # Checker pattern
                display.clear_pixel(col, row)

Testing and Validation
----------------------

ICLib has extensive test coverage, passes mypy static type checking with strict
parameter, and has been validated through extensive use in real-life scenarios.

Contributing
------------

Contributions are welcome! Please read our Contributing Guide for more
information.

License
-------

ICLib is distributed under the MIT license.
