From: Brennen Bearnes Date: Mon, 10 Dec 2018 05:15:48 +0000 (-0700) Subject: some initial work on adding platformdetect X-Git-Tag: 1.0.2~1^2~16 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/3f017a27633d001cdb30d6e36bfce3baea3ab52d?ds=sidebyside some initial work on adding platformdetect This commit _definitely_ represents broken state. --- diff --git a/setup.py b/setup.py index 5d8474f..faedc62 100755 --- a/setup.py +++ b/setup.py @@ -34,6 +34,7 @@ setup( 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'" ], diff --git a/src/adafruit_blinka/agnostic/__init__.py b/src/adafruit_blinka/agnostic/__init__.py index 1d93e6c..cbd967c 100755 --- a/src/adafruit_blinka/agnostic/__init__.py +++ b/src/adafruit_blinka/agnostic/__init__.py @@ -5,43 +5,15 @@ 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 +detect = adafruit_platformdetect.PlatformDetect() -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" +board_name = detect.board.name() +chip_name = detect.chip.name() implementation = sys.implementation.name if implementation == "micropython": diff --git a/src/bitbangio.py b/src/bitbangio.py index 817bdbc..63265e3 100755 --- a/src/bitbangio.py +++ b/src/bitbangio.py @@ -8,12 +8,14 @@ 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": - raise NotImplementedError("No software I2C on {}".format(agnostic.board_id)) + # TODO: This one is a bit questionable: + if agnostic.board_name == ap_board.PYBOARD: + raise NotImplementedError("No software I2C on {}".format(agnostic.board_name)) self.init(scl, sda, frequency) def init(self, scl, sda, frequency): diff --git a/src/board.py b/src/board.py index d4e6be0..b343c80 100755 --- a/src/board.py +++ b/src/board.py @@ -29,21 +29,29 @@ See `CircuitPython:board` in CircuitPython for more details. """ import sys -from adafruit_blinka.agnostic import board_id +from adafruit_blinka.agnostic import board_name +import adafruit_platformdetect.board as ap_board -if board_id == "feather_huzzah": +if board_name == ap_board.FEATHER_HUZZAH: from adafruit_blinka.board.feather_huzzah import * -elif board_id == "nodemcu": + +elif board_name == ap_board.NODEMCU: from adafruit_blinka.board.nodemcu import * -elif board_id == "pyboard": + +elif board_name == ap_board.PYBOARD: from adafruit_blinka.board.pyboard import * -elif board_id == "raspi_2" or board_id == "raspi_3": + +elif board_name in ap_board.ANY_RASPBERRY_PI_2_OR_3: from adafruit_blinka.board.raspi_23 import * -elif board_id == "beaglebone_black": + +elif board_name == ap_board.BEAGLEBONE_BLACK: from adafruit_blinka.board.beaglebone_black import * -elif board_id == "orangepipc": + +elif board_name == ap_board.ORANGEPI_PC: from adafruit_blinka.board.orangepipc import * + elif "sphinx" in sys.modules: pass + else: raise NotImplementedError("Board not supported") diff --git a/src/busio.py b/src/busio.py index f82e4c3..cbcd50d 100755 --- a/src/busio.py +++ b/src/busio.py @@ -8,7 +8,16 @@ 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_name +import adafruit_platformdetect.board as ap_board + +SUPPORTED_BOARDS = ( + ap_board.RASPBERRY_PI_2B, + ap_board.RASPBERRY_PI_3B, + ap_board.RASPBERRY_PI_3B_PLUS, + ap_board.BEAGLEBONE_BLACK, + ap_board.ORANGEPI_PC, +) class I2C(Lockable): def __init__(self, scl, sda, frequency=400000): @@ -16,7 +25,7 @@ class I2C(Lockable): def init(self, scl, sda, frequency): self.deinit() - if board_id in ("raspi_3", "raspi_2", "beaglebone_black", "orangepipc"): + if board_name in SUPPORTED_BOARDS: from adafruit_blinka.microcontroller.generic_linux.i2c import I2C as _I2C else: from machine import I2C as _I2C @@ -70,7 +79,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 board_name in SUPPORTED_BOARDS: from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI else: from machine import SPI as _SPI @@ -88,14 +97,14 @@ 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": + if board_name in ap_board.ANY_RASPBERRY_PI_2_OR_3: from adafruit_blinka.microcontroller.raspi_23.pin import Pin from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI - elif board_id == "beaglebone_black": + elif board_name == ap_board.BEAGLEBONE_BLACK: # reuse the raspberry pi class as both boards use Linux spidev from adafruit_blinka.microcontroller.beaglebone_black.pin import Pin from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI - elif board_id == "orangepipc": + elif board_name == ap_board.ORANGEPI_PC: from adafruit_blinka.microcontroller.allwinner_h3.pin import Pin from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI else: diff --git a/src/microcontroller/pin.py b/src/microcontroller/pin.py index 9ccd81f..94aeac0 100755 --- a/src/microcontroller/pin.py +++ b/src/microcontroller/pin.py @@ -1,21 +1,19 @@ """Pins named after their chip name.""" from adafruit_blinka import agnostic +import adafruit_platformdetect.chip as ap_chip # We intentionally are patching into this namespace so skip the wildcard check. # pylint: disable=unused-wildcard-import,wildcard-import -if agnostic.platform == "esp8266": +if agnostic.chip_name == ap_chip.ESP8266: from adafruit_blinka.microcontroller.esp8266.pin import * -elif agnostic.platform == "stm32": +elif agnostic.chip_name == 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 agnostic.detect.any_raspberry_pi_or_3: + from adafruit_blinka.microcontroller.raspi_23.pin import * +elif agnostic.detect.beaglebone_black: + from adafruit_blinka.microcontroller.beaglebone_black.pin import * +elif agnostic.detect.orangepi_pc: + from adafruit_blinka.microcontroller.allwinner_h3.pin import * else: - raise NotImplementedError("Microcontroller not supported") + raise NotImplementedError("Board / microcontroller not supported: ", agnostic.board_name) diff --git a/src/neopixel_write.py b/src/neopixel_write.py index d5cb7e0..923ae2f 100644 --- a/src/neopixel_write.py +++ b/src/neopixel_write.py @@ -9,9 +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 board_name +import adafruit_platformdetect.board as ap_board -if board_id == "raspi_2" or board_id == "raspi_3": +if board_name in (ap_board.RASPBERRY_PI_2B, ap_board.RASPBERRY_PI_3B, ap_board.RASPBERRY_PI_B_PLUS): from adafruit_blinka.microcontroller.raspi_23 import neopixel as _neopixel elif "sphinx" in sys.modules: pass