]> Repositories - Adafruit_Blinka-hackapet.git/commitdiff
Merge pull request #63 from Tonymac32/master 1.0.2
authorLimor "Ladyada" Fried <limor@ladyada.net>
Fri, 21 Dec 2018 17:53:36 +0000 (09:53 -0800)
committerGitHub <noreply@github.com>
Fri, 21 Dec 2018 17:53:36 +0000 (09:53 -0800)
Add board support files for Tritium H3

22 files changed:
.travis.yml
requirements.txt
setup.py
src/adafruit_blinka/__init__.py
src/adafruit_blinka/agnostic/__init__.py
src/adafruit_blinka/board/beaglebone_black.py
src/adafruit_blinka/board/raspi_40pin.py [moved from src/adafruit_blinka/board/raspi_23.py with 90% similarity]
src/adafruit_blinka/microcontroller/am335x/__init__.py [moved from src/adafruit_blinka/microcontroller/beaglebone_black/__init__.py with 100% similarity]
src/adafruit_blinka/microcontroller/am335x/pin.py [moved from src/adafruit_blinka/microcontroller/beaglebone_black/pin.py with 100% similarity]
src/adafruit_blinka/microcontroller/bcm283x/__init__.py [moved from src/adafruit_blinka/microcontroller/raspi_23/__init__.py with 100% similarity]
src/adafruit_blinka/microcontroller/bcm283x/neopixel.py [moved from src/adafruit_blinka/microcontroller/raspi_23/neopixel.py with 98% similarity]
src/adafruit_blinka/microcontroller/bcm283x/pin.py [moved from src/adafruit_blinka/microcontroller/raspi_23/pin.py with 100% similarity]
src/adafruit_blinka/microcontroller/bcm283x/pulseio/PulseIn.py [moved from src/adafruit_blinka/microcontroller/raspi_23/pulseio/PulseIn.py with 100% similarity]
src/adafruit_blinka/microcontroller/bcm283x/pulseio/libgpiod_pulsein [moved from src/adafruit_blinka/microcontroller/raspi_23/pulseio/libgpiod_pulsein with 100% similarity]
src/bitbangio.py
src/board.py
src/busio.py
src/digitalio.py
src/microcontroller/__init__.py
src/microcontroller/pin.py
src/neopixel_write.py
src/pulseio.py

index 38238b2a577543442abc9e97b68977ca0ff9d485..58f60ffa7cd2eaf6e56128c2ae151823d9a4d3ea 100755 (executable)
@@ -16,6 +16,7 @@ deploy:
       tags: true
 
 install:
+  - pip install -r requirements.txt
   - pip install --force-reinstall pylint==1.9.2
   - pip install circuitpython-build-tools Sphinx sphinx-rtd-theme
 
index 1468be88e2c47f91c745e6457813fe889258a9a2..e07d50586f4754262edf6dbbe3aa6e3f619f076f 100755 (executable)
@@ -1,3 +1,4 @@
-Adafruit-GPIO
+Adafruit-PlatformDetect
 RPi.GPIO; platform_machine=='armv7l' or platform_machine=='armv6l'
 rpi_ws281x>=4.0.0; platform_machine=='armv7l' or platform_machine=='armv6l'
+spidev
index 5d8474fb41e826eae04fc7f6503ecc864b0ac5ac..0393ef18c456f7e4c33cc7effc37c90cb2534704 100755 (executable)
--- a/setup.py
+++ b/setup.py
@@ -33,9 +33,10 @@ setup(
     # If your package is a single module, use this instead of 'packages':
     py_modules=['bitbangio', 'board', 'busio', 'digitalio', 'micropython', 'neopixel_write'],
     install_requires=[
-        'Adafruit-GPIO',
+        "Adafruit-PlatformDetect",
         "RPi.GPIO; platform_machine=='armv7l' or platform_machine=='armv6l'",
-        "rpi_ws281x>=4.0.0; platform_machine=='armv7l' or platform_machine=='armv6l'"
+        "rpi_ws281x>=4.0.0; platform_machine=='armv7l' or platform_machine=='armv6l'",
+        "spidev"
     ],
     license='MIT',
     classifiers=[
index 845c802cb26731a0358ed474c60c2e4c5432f19c..47622df88c8bf50cd9059420c7c2b9215c276497 100755 (executable)
@@ -5,7 +5,7 @@
 * Author(s): cefn
 """
 
-class Enum(object):
+class Enum():
     """
         Object supporting CircuitPython-style of static symbols
         as seen with Direction.OUTPUT, Pull.UP
@@ -43,9 +43,11 @@ class ContextManaged:
     def __exit__(self, exc_type, exc_value, traceback):
         self.deinit()
 
+    # pylint: disable=no-self-use
     def deinit(self):
         """Free any hardware used by the object."""
-        pass
+        return
+    # pylint: enable=no-self-use
 
 
 class Lockable(ContextManaged):
index 1d93e6c9bdfe7f604784afc29fc30566c5c8c701..1f6eb4c300537ea219a81014c254f32acddcf4fb 100755 (executable)
@@ -5,46 +5,21 @@
     common modules and operations, depending on platform support
 """
 import sys
+import adafruit_platformdetect
 
 # We intentionally are patching into this namespace as module names so skip the name check.
 # pylint: disable=invalid-name
-platform = sys.platform
 
-board_id = None
+# We'll define board and chip id values in agnostic rather than accessing
+# detector directly elsewhere, just in case additional indirection is necessary
+# at some later point:
 
-if platform is not None:
-    if platform == "esp8266":  # TODO more conservative board-guessing
-        board_id = "feather_huzzah"
-    elif platform == "samd21":
-        board_id = "feather_m0_express"
-    elif platform == "pyboard":
-        platform = "stm32"
-        board_id = "pyboard"
-    elif platform == "linux":
-        import re
-        # we're going to redo the Platform detection, this is a terrible hack
-        # for now.
-        try:
-            # lets see if we're an armbian board
-            for line in open("/etc/armbian-release", 'r'):
-                #print(line)
-                m = re.search('BOARD=(.*)', line)
-                if m:
-                    board_id = m.group(1)
-        except:
-            from Adafruit_GPIO import Platform
-            if Platform.platform_detect() == Platform.RASPBERRY_PI:
-                if Platform.pi_version() == 1:
-                    board_id = "raspi_1"
-                elif Platform.pi_version() == 2:
-                    board_id = "raspi_2"
-                elif Platform.pi_version() == 3:
-                    board_id = "raspi_3"
-            elif Platform.platform_detect() == Platform.BEAGLEBONE_BLACK:
-                board_id = "beaglebone_black"
+detector = adafruit_platformdetect.Detector()
+chip_id = detector.chip.id
+board_id = detector.board.id
 
 implementation = sys.implementation.name
 if implementation == "micropython":
     from utime import sleep
-elif implementation == "circuitpython" or implementation == "cpython":
+elif implementation in ("circuitpython", "cpython"):
     from time import sleep
index ffeb919571e013bc1a771dabf58e26521e61aece..f8699640bc83a8b49fb0c26fc6129b994de205c1 100644 (file)
@@ -1,4 +1,4 @@
-from adafruit_blinka.microcontroller.beaglebone_black import pin
+from adafruit_blinka.microcontroller.am335x import pin
 
 # initial pins, to mimic bonescript demo
 P8_3 = pin.P8_3
@@ -75,7 +75,7 @@ LED_USR2 = pin.USR2
 LED_USR3 = pin.USR3
 
 # I2C and SPI pins from:
-# src/adafruit_blinka/board/raspi_23.py
+# src/adafruit_blinka/board/raspi_40pin.py
 # SDA = pin.SDA
 # SCL = pin.SCL
 # CE1 = pin.D7
similarity index 90%
rename from src/adafruit_blinka/board/raspi_23.py
rename to src/adafruit_blinka/board/raspi_40pin.py
index 60898f08967c147c4544b589a5b05b80d2b60bb9..f944eee9fc48512fbeb624648de700e46e0cf507 100644 (file)
@@ -1,4 +1,4 @@
-from adafruit_blinka.microcontroller.raspi_23 import pin
+from adafruit_blinka.microcontroller.bcm283x import pin
 
 D2 = pin.D2
 SDA = pin.SDA
similarity index 98%
rename from src/adafruit_blinka/microcontroller/raspi_23/neopixel.py
rename to src/adafruit_blinka/microcontroller/bcm283x/neopixel.py
index 3d670c703ce2404ed9a099a980e244872997d7f2..d744b255f25bee7e3657354c75a9050609a1dd83 100644 (file)
@@ -37,7 +37,7 @@ def neopixel_write(gpio, buf):
 
         # Initialize the channel in use
         count = 0
-        if len(buf) % 3 == 0:            
+        if len(buf) % 3 == 0:
             # most common, divisible by 3 is likely RGB
             LED_STRIP = ws.WS2811_STRIP_RGB
             count = len(buf)//3
@@ -56,7 +56,7 @@ def neopixel_write(gpio, buf):
         # Initialize the controller
         ws.ws2811_t_freq_set(_led_strip, LED_FREQ_HZ)
         ws.ws2811_t_dmanum_set(_led_strip, LED_DMA_NUM)
-    
+
         resp = ws.ws2811_init(_led_strip)
         if resp != ws.WS2811_SUCCESS:
             if resp == -5:
@@ -84,7 +84,7 @@ def neopixel_write(gpio, buf):
             w = buf[bpp*i+3]
             pixel = (w << 24) | (r << 16) | (g << 8) | b
         ws.ws2811_led_set(channel, i, pixel)
-    
+
     resp = ws.ws2811_render(_led_strip)
     if resp != ws.WS2811_SUCCESS:
         message = ws.ws2811_get_return_t_str(resp)
index 817bdbcd19eed760792074859eeef0f947a552cb..c4ffcfb10faa55cdac98d9c8307c00ca3661e431 100755 (executable)
@@ -8,11 +8,13 @@ See `CircuitPython:bitbangio` in CircuitPython for more details.
 """
 
 from adafruit_blinka import Lockable, agnostic
+import adafruit_platformdetect.board as ap_board
 
 
 class I2C(Lockable):
     def __init__(self, scl, sda, frequency=400000):
-        if agnostic.microcontroller == "stm32":
+        # TODO: This one is a bit questionable:
+        if agnostic.board_id == ap_board.PYBOARD:
             raise NotImplementedError("No software I2C on {}".format(agnostic.board_id))
         self.init(scl, sda, frequency)
 
index d4e6be01c92bdca568135e7a25a95f6952cd4290..d862e349e65d83b3d5e5d8c5cec919f8abca7b7e 100755 (executable)
@@ -29,21 +29,31 @@ See `CircuitPython:board` in CircuitPython for more details.
 """
 import sys
 
-from adafruit_blinka.agnostic import board_id
+from adafruit_blinka.agnostic import board_id, detector
+import adafruit_platformdetect.board as ap_board
 
-if board_id == "feather_huzzah":
+# pylint: disable=wildcard-import,unused-wildcard-import,ungrouped-imports
+
+if board_id == ap_board.FEATHER_HUZZAH:
     from adafruit_blinka.board.feather_huzzah import *
-elif board_id == "nodemcu":
+
+elif board_id == ap_board.NODEMCU:
     from adafruit_blinka.board.nodemcu import *
-elif board_id == "pyboard":
+
+elif board_id == ap_board.PYBOARD:
     from adafruit_blinka.board.pyboard import *
-elif board_id == "raspi_2" or board_id == "raspi_3":
-    from adafruit_blinka.board.raspi_23 import *
-elif board_id == "beaglebone_black":
+
+elif detector.board.any_raspberry_pi_40_pin:
+    from adafruit_blinka.board.raspi_40pin import *
+
+elif board_id == ap_board.BEAGLEBONE_BLACK:
     from adafruit_blinka.board.beaglebone_black import *
-elif board_id == "orangepipc":
+
+elif board_id == ap_board.ORANGE_PI_PC:
     from adafruit_blinka.board.orangepipc import *
+
 elif "sphinx" in sys.modules:
     pass
+
 else:
     raise NotImplementedError("Board not supported")
index f82e4c3c3ad941d429100b1e84d37a36aba7e66a..61bebabaec00f66d231902f52a52ad2ae98ee3ef 100755 (executable)
@@ -8,7 +8,8 @@ See `CircuitPython:busio` in CircuitPython for more details.
 """
 
 from adafruit_blinka import Enum, Lockable, agnostic
-from adafruit_blinka.agnostic import board_id
+from adafruit_blinka.agnostic import board_id, detector
+import adafruit_platformdetect.board as ap_board
 
 class I2C(Lockable):
     def __init__(self, scl, sda, frequency=400000):
@@ -16,7 +17,7 @@ class I2C(Lockable):
 
     def init(self, scl, sda, frequency):
         self.deinit()
-        if board_id in ("raspi_3", "raspi_2", "beaglebone_black", "orangepipc"):
+        if detector.board.any_embedded_linux:
             from adafruit_blinka.microcontroller.generic_linux.i2c import I2C as _I2C
         else:
             from machine import I2C as _I2C
@@ -26,8 +27,9 @@ class I2C(Lockable):
                 self._i2c = _I2C(portId, mode=_I2C.MASTER, baudrate=frequency)
                 break
         else:
-            raise NotImplementedError("No Hardware I2C on (scl,sda)={}\nValid UART ports".format(
-        (scl, sda), i2cPorts))
+            raise NotImplementedError(
+                "No Hardware I2C on (scl,sda)={}\nValid UART ports: {}".format((scl, sda), i2cPorts)
+            )
 
     def deinit(self):
         try:
@@ -70,7 +72,7 @@ class I2C(Lockable):
 class SPI(Lockable):
     def __init__(self, clock, MOSI=None, MISO=None):
         self.deinit()
-        if board_id in ("raspi_3", "raspi_2", "beaglebone_black", "orangepipc"):
+        if detector.board.any_embedded_linux:
             from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
         else:
             from machine import SPI as _SPI
@@ -88,14 +90,13 @@ class SPI(Lockable):
                 format((clock, MOSI, MISO), spiPorts))
 
     def configure(self, baudrate=100000, polarity=0, phase=0, bits=8):
-        if board_id == "raspi_3" or board_id == "raspi_2":
-            from adafruit_blinka.microcontroller.raspi_23.pin import Pin
+        if detector.board.any_raspberry_pi:
+            from adafruit_blinka.microcontroller.bcm283x.pin import Pin
             from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
-        elif board_id == "beaglebone_black":
-            # reuse the raspberry pi class as both boards use Linux spidev
-            from adafruit_blinka.microcontroller.beaglebone_black.pin import Pin
+        elif board_id == ap_board.BEAGLEBONE_BLACK:
+            from adafruit_blinka.microcontroller.am335x.pin import Pin
             from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
-        elif board_id == "orangepipc":
+        elif board_id == ap_board.ORANGE_PI_PC:
             from adafruit_blinka.microcontroller.allwinner_h3.pin import Pin
             from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
         else:
@@ -156,7 +157,7 @@ class UART(Lockable):
         if flow is not None:  # default 0
             raise NotImplementedError(
                 "Parameter '{}' unsupported on {}".format(
-                    "flow", agnostic.board))
+                    "flow", agnostic.board_id))
 
         # translate parity flag for Micropython
         if parity is UART.Parity.ODD:
@@ -183,8 +184,8 @@ class UART(Lockable):
                 break
         else:
             raise NotImplementedError(
-                "No Hardware UART on (tx,rx)={}\nValid UART ports".format(
-                    (tx, rx), uartPorts))
+                "No Hardware UART on (tx,rx)={}\nValid UART ports: {}".format((tx, rx), uartPorts)
+            )
 
     def deinit(self):
         self._uart = None
index 40f42ad24964da35b465de0a2bb28463d4896468..ab9b761881f59c9e39eb8722d312ac9cb2bee02e 100755 (executable)
@@ -7,14 +7,17 @@ See `CircuitPython:digitalio` in CircuitPython for more details.
 * Author(s): cefn
 """
 
-from adafruit_blinka.agnostic import board_id
-if board_id == "raspi_3" or board_id == "raspi_2":
-    from adafruit_blinka.microcontroller.raspi_23.pin import Pin
-elif board_id == "beaglebone_black":
-    from adafruit_blinka.microcontroller.beaglebone_black.pin import Pin
-elif board_id == "orangepipc":
+from adafruit_blinka.agnostic import board_id, detector
+
+# pylint: disable=ungrouped-imports,wrong-import-position
+
+if detector.chip.BCM2XXX:
+    from adafruit_blinka.microcontroller.bcm283x.pin import Pin
+elif detector.chip.AM33XX:
+    from adafruit_blinka.microcontroller.am335x.pin import Pin
+elif detector.chip.SUN8I:
     from adafruit_blinka.microcontroller.allwinner_h3.pin import Pin
-elif board_id == "pyboard":
+elif detector.chip.STM32:
     from machine import Pin
 from adafruit_blinka import Enum, ContextManaged
 
@@ -113,7 +116,7 @@ class DigitalInOut(ContextManaged):
                     self._pin.init(mode=Pin.IN, pull=Pin.PULL_DOWN)
                 else:
                     raise NotImplementedError("{} unsupported on {}".format(
-                        Pull.DOWN, boardId))
+                        Pull.DOWN, board_id))
             elif pul is None:
                 self._pin.init(mode=Pin.IN, pull=None)
             else:
index 3bd5b51736fe84902c478b9a4080e30ce13aae71..a3d7eecf6e76a37b5ce9fb2bfd0ac32414f2d425 100755 (executable)
@@ -1,7 +1,8 @@
 """Microcontroller pins"""
 
+from adafruit_platformdetect import chip as ap_chip
 from adafruit_blinka import Enum
-from adafruit_blinka.agnostic import board_id, platform
+from adafruit_blinka.agnostic import board_id, chip_id
 
 class Pin(Enum):
     """Reference Pin object"""
@@ -21,20 +22,17 @@ class Pin(Enum):
         return repr(self)
 
 # We intentionally are patching into this namespace so skip the wildcard check.
-# pylint: disable=unused-wildcard-import,wildcard-import
+# pylint: disable=unused-wildcard-import,wildcard-import,ungrouped-imports
 
-if platform == "esp8266":
+if chip_id == ap_chip.ESP8266:
     from adafruit_blinka.microcontroller.esp8266 import *
-elif platform == "stm32":
+elif chip_id == ap_chip.STM32:
     from adafruit_blinka.microcontroller.stm32 import *
-elif platform == "linux":
-    if board_id == "raspi_3" or board_id == "raspi_2":
-        from adafruit_blinka.microcontroller.raspi_23 import *
-    elif board_id == "beaglebone_black":
-        from adafruit_blinka.microcontroller.beaglebone_black import *
-    elif board_id == "orangepipc":
-        from adafruit_blinka.microcontroller.allwinner_h3 import *
-    else:
-        raise NotImplementedError("Board not supported:", board_id)
+elif chip_id == ap_chip.BCM2XXX:
+    from adafruit_blinka.microcontroller.bcm283x import *
+elif chip_id == ap_chip.AM33XX:
+    from adafruit_blinka.microcontroller.am335x import *
+elif chip_id == ap_chip.SUN8I:
+    from adafruit_blinka.microcontroller.allwinner_h3 import *
 else:
-    raise NotImplementedError("Platform not supported:", platform)
+    raise NotImplementedError("Microcontroller not supported:", chip_id)
index 9ccd81f059da19b76c4d48032034bec4ae83b70a..5779050ef47b49aa9176f04446666a60f68dc7cd 100755 (executable)
@@ -1,21 +1,20 @@
 """Pins named after their chip name."""
 
-from adafruit_blinka import agnostic
+import adafruit_platformdetect.chip as ap_chip
+from adafruit_blinka.agnostic import chip_id
 
 # We intentionally are patching into this namespace so skip the wildcard check.
-# pylint: disable=unused-wildcard-import,wildcard-import
-if agnostic.platform == "esp8266":
+# pylint: disable=unused-wildcard-import,wildcard-import,ungrouped-imports
+
+if chip_id == ap_chip.ESP8266:
     from adafruit_blinka.microcontroller.esp8266.pin import *
-elif agnostic.platform == "stm32":
+elif chip_id == ap_chip.STM32:
     from adafruit_blinka.microcontroller.stm32.pin import *
-elif agnostic.platform == "linux":
-    if agnostic.board_id == "raspi_3" or agnostic.board_id == "raspi_2":
-        from adafruit_blinka.microcontroller.raspi_23.pin import *
-    elif agnostic.board_id == "beaglebone_black":
-        from adafruit_blinka.microcontroller.beaglebone_black.pin import *
-    elif agnostic.board_id == "orangepipc":
-        from adafruit_blinka.microcontroller.allwinner_h3.pin import *
-    else:
-        raise NotImplementedError("Board not supported: ", agnostic.board_id)
+elif chip_id == ap_chip.BCM2XXX:
+    from adafruit_blinka.microcontroller.bcm283x.pin import *
+elif chip_id == ap_chip.AM33XX:
+    from adafruit_blinka.microcontroller.am335x.pin import *
+elif chip_id == ap_chip.SUN8I:
+    from adafruit_blinka.microcontroller.allwinner_h3.pin import *
 else:
-    raise NotImplementedError("Microcontroller not supported")
+    raise NotImplementedError("Microcontroller not supported: ", chip_id)
index d5cb7e06c2beef2fdcfaacb4b0d177e5a435ff6d..5626bc632bace3df0884ecfad19edc8c210310f5 100644 (file)
@@ -9,10 +9,10 @@ See `CircuitPython:neopixel_write` in CircuitPython for more details.
 
 import sys
 
-from adafruit_blinka.agnostic import board_id
+from adafruit_blinka.agnostic import detector
 
-if board_id == "raspi_2" or board_id == "raspi_3":
-    from adafruit_blinka.microcontroller.raspi_23 import neopixel as _neopixel
+if detector.board.any_raspberry_pi:
+    from adafruit_blinka.microcontroller.bcm283x import neopixel as _neopixel
 elif "sphinx" in sys.modules:
     pass
 else:
index e2d69fc2246b158fae0534978febd58ea5256824..2d3f0b588d0bc091eff58855e32335882dd9588b 100644 (file)
@@ -1,6 +1,4 @@
-import sys
-from adafruit_blinka.agnostic import board_id
+from adafruit_blinka.agnostic import detector
 
-
-if board_id == "raspi_2" or board_id == "raspi_3":
-    from adafruit_blinka.microcontroller.raspi_23.pulseio.PulseIn import PulseIn as PulseIn
+if detector.board.any_raspberry_pi:
+    from adafruit_blinka.microcontroller.bcm283x.pulseio.PulseIn import PulseIn