]> Repositories - Adafruit_Blinka-hackapet.git/commitdiff
add all files, untested
authorbrentru <brent@adafruit.com>
Fri, 17 May 2024 16:44:22 +0000 (12:44 -0400)
committerbrentru <brent@adafruit.com>
Fri, 17 May 2024 16:44:22 +0000 (12:44 -0400)
src/adafruit_blinka/board/generic_agnostic_board.py
src/adafruit_blinka/microcontroller/generic_agnostic_board/__init__.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/generic_agnostic_board/generic_agnostic_board.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/generic_agnostic_board/pin.py [new file with mode: 0644]
src/analogio.py
src/board.py
src/digitalio.py
src/microcontroller/__init__.py
src/microcontroller/pin.py

index 82ac5e453beb71c8f9c1b3456341238fbacf0481..f2d3e35740758e9246f52ca906c21c2bba2ba623 100644 (file)
@@ -11,10 +11,12 @@ Dx_INPUT_TRUE_PULL_UP = pin.D2
 Dx_INPUT_TRUE_PULL_DOWN = pin.D3
 Dx_OUTPUT_TRUE = pin.D4
 Dx_OUTPUT_FALSE = pin.D5
+# Special "digital" pins
+NEOPIXEL = pin.D6
 
 # Analog pins
 Ax_INPUT_RAND_INT = pin.A0
-Ax_INPUT_FIXED_INT = pin.A1
+Ax_INPUT_FIXED_INT_PI = pin.A1
 Ax_OUTPUT_WAVE_SINE = pin.A2
 Ax_OUTPUT_WAVE_SAWTOOTH = pin.A3
 
diff --git a/src/adafruit_blinka/microcontroller/generic_agnostic_board/__init__.py b/src/adafruit_blinka/microcontroller/generic_agnostic_board/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/src/adafruit_blinka/microcontroller/generic_agnostic_board/generic_agnostic_board.py b/src/adafruit_blinka/microcontroller/generic_agnostic_board/generic_agnostic_board.py
new file mode 100644 (file)
index 0000000..29ee3f2
--- /dev/null
@@ -0,0 +1,19 @@
+# SPDX-FileCopyrightText: 2024 Brent Rubell for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+"""Chip Definition for a generic, os-agnostic, board."""
+
+class GENERIC_AGNOSTIC_BOARD:
+    """Generic Agnostic Board Device Class Definition"""
+
+    def __init__(self):
+        pass  # This implementation is for a generic board, no initialization is required
+
+    def __del__(self):
+        # try to close the device before destroying the instance
+        return
+
+    # pylint: enable=unused-argument
+
+
+generic_agnostic_board = GENERIC_AGNOSTIC_BOARD()
diff --git a/src/adafruit_blinka/microcontroller/generic_agnostic_board/pin.py b/src/adafruit_blinka/microcontroller/generic_agnostic_board/pin.py
new file mode 100644 (file)
index 0000000..c4ec8b9
--- /dev/null
@@ -0,0 +1,102 @@
+# SPDX-FileCopyrightText: 2024 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+"""generic_agnostic_board pin interface"""
+import random
+
+class Pin:
+    """A basic Pin class for use with generic_agnostic_board"""
+    # pin modes
+    OUT = 0
+    IN = 1
+    ADC = 2
+    DAC = 3
+    # pin values
+    LOW = 0
+    HIGH = 1
+
+    expected_pin_behavior = {
+      'Dx_INPUT_TRUE': return_true,
+      'Dx_INPUT_FALSE': return_false,
+      'Dx_INPUT_TRUE_THEN_FALSE': return_toggle,
+      'Dx_INPUT_TRUE_PULL_UP': return_true,
+      'Dx_INPUT_TRUE_PULL_DOWN': return_true,
+      'Dx_OUTPUT_TRUE': return_true,
+      'Dx_OUTPUT_FALSE': return_true,
+      'Ax_INPUT_RAND_INT': return_random_int
+    }
+
+    def __init__(self, pin_id=None):
+      self.id = pin_id
+      self._mode = None
+      self.previous_value = None
+      self.current_value = None
+
+    def init(self, mode=IN, pull=None):
+        """Initialize the Pin"""
+        if self.id is None:
+            raise RuntimeError("Can not init a None type pin.")
+        if pull is not None:
+            raise NotImplementedError("Internal pullups and pulldowns not supported")
+        self._mode = mode
+
+    def write(self, new_value):
+      """Saves the new_value to the pin for subsequent calls to .value"""
+      self.previous_value = self.current_value
+      self.current_value = new_value
+
+    def read(self):
+      """Returns the pin's expected value."""
+      self.previous_value = self.current_value
+      self.current_value = self.expected_pin_behavior.get(self.pin_id)
+      return self.current_value
+
+    def return_toggle(self):
+      """Returns the pin's expected value, toggling between True and False"""
+      toggle_state = not self.previous_value
+      return toggle_state
+
+    def return_false(self):
+      """Returns the pin's expected value, False"""
+      return False
+
+    def return_true(self):
+      """Returns the pin's expected value, True"""
+      return True
+
+    def return_random_int(self):
+      """Returns a random integer"""
+      return random.randint(0, 65535)
+
+    def return_fixed_int_pi(self):
+      """Returns the first five digits of Pi, 31415"""
+      return 31415
+
+    def value(self, val=None):
+        """Set or return the Pin Value"""
+        # Digital In / Out
+        if self._mode in (Pin.IN, Pin.OUT):
+            # digital read
+            if val is None:
+                return self.read()
+            # digital write
+            if val in (Pin.LOW, Pin.HIGH):
+                return self.write(val)
+            # nope
+            raise ValueError("Invalid value for pin.")
+        # Analog In
+        if self._mode == Pin.ADC:
+            if val is None:
+                return self.read()
+            # read only
+            raise AttributeError("'AnalogIn' object has no attribute 'value'")
+        # Analog Out
+        if self._mode == Pin.DAC:
+            if val is None:
+                # write only
+                raise AttributeError("unreadable attribute")
+            self.write(val)
+            return None
+        raise RuntimeError(
+            "No action for mode {} with value {}".format(self._mode, val)
+        )
index 278ce9c82f189ccfbf7819719ffd24da61ebea08..89f9300b5fb72901c26be4aa17c287f6fb5bb5e9 100644 (file)
@@ -9,6 +9,7 @@ Not supported by all boards.
 
 * Author(s): Carter Nelson, Melissa LeBlanc-Williams
 """
+import os
 import sys
 
 from adafruit_blinka.agnostic import detector
@@ -62,5 +63,8 @@ elif detector.board.itsybitsy_u2if:
     from adafruit_blinka.microcontroller.rp2040_u2if.analogio import (
         AnalogIn_ItsyBitsy as AnalogIn,
     )
+elif "BLINKA_FORCECHIP" in os.environ and os.environ["BLINKA_FORCEBOARD"] == "GENERIC_AGNOSTIC_BOARD":
+    from adafruit_blinka.microcontroller.generic_agnostic_board.analogio import AnalogIn
+    from adafruit_blinka.microcontroller.generic_agnostic_board.analogio import AnalogOut
 else:
     raise NotImplementedError("analogio not supported for this board.")
index 8c3290eb997574d81a44bfa325acbefd7b706bf8..204147f6431313e2a68c1ae19ef0d9496a634006 100644 (file)
@@ -17,6 +17,7 @@ __blinka__ = True
 
 
 import sys
+import os
 import adafruit_platformdetect.constants.boards as ap_board
 from adafruit_blinka.agnostic import board_id, detector
 
@@ -387,6 +388,9 @@ elif board_id == ap_board.LICHEEPI_4A:
 elif board_id == ap_board.MILKV_DUO:
     from adafruit_blinka.board.milkv_duo import *
 
+elif "BLINKA_FORCECHIP" in os.environ and os.environ["BLINKA_FORCEBOARD"] == "GENERIC_AGNOSTIC_BOARD":
+    from adafruit_blinka.board.generic_agnostic_board import *
+
 elif "sphinx" in sys.modules:
     pass
 
index 96fe04516eb78ee8367507b8297235bc51ac06bc..aef48910b7ea607787e4d1abc5b2f6a6e6b62742 100644 (file)
@@ -9,6 +9,7 @@ See `CircuitPython:digitalio` in CircuitPython for more details.
 
 * Author(s): cefn
 """
+import os
 from adafruit_blinka.agnostic import board_id, detector
 
 # pylint: disable=ungrouped-imports,wrong-import-position,unused-wildcard-import,wildcard-import
@@ -136,6 +137,8 @@ elif detector.chip.RP2040:
     from machine import Pin
 elif detector.chip.CV1800B:
     from adafruit_blinka.microcontroller.cv1800b.pin import Pin
+elif "BLINKA_FORCECHIP" in os.environ and os.environ["BLINKA_FORCEBOARD"] == "GENERIC_AGNOSTIC_BOARD":
+    from adafruit_blinka.microcontroller.generic_agnostic.pin import Pin
 
 from adafruit_blinka import Enum, ContextManaged
 
index 7a6e496d72a2ba132a89871f329e0a36cc6aae48..b900a79249293cfb2f1d4c13c40f4f17f456127f 100644 (file)
@@ -150,6 +150,8 @@ elif chip_id == ap_chip.TH1520:
     from adafruit_blinka.microcontroller.thead.th1520 import *
 elif chip_id == ap_chip.GENERIC_X86:
     print("WARNING: GENERIC_X86 is not fully supported. Some features may not work.")
+  elif "BLINKA_FORCECHIP" in os.environ and os.environ["BLINKA_FORCEBOARD"] == "GENERIC_AGNOSTIC_BOARD":
+    from adafruit_blinka.microcontroller.generic_agnostic_board import *
 elif chip_id is None:
     print(
         "WARNING: chip_id == None is not fully supported. Some features may not work."
index eb26ce991a939db2467c47a7b8165bc35f097a90..36041180c4d0579cb8e086018b9842c4033fbf3b 100644 (file)
@@ -2,6 +2,7 @@
 #
 # SPDX-License-Identifier: MIT
 """Pins named after their chip name."""
+import os
 import sys
 from adafruit_platformdetect.constants import chips as ap_chip, boards as ap_boards
 from adafruit_blinka.agnostic import board_id, chip_id
@@ -148,6 +149,8 @@ elif "sphinx" in sys.modules:
 elif chip_id == ap_chip.GENERIC_X86:
     print("WARNING: GENERIC_X86 is not fully supported. Some features may not work.")
     from adafruit_blinka.microcontroller.generic_micropython import Pin
+elif "BLINKA_FORCECHIP" in os.environ and os.environ["BLINKA_FORCEBOARD"] == "GENERIC_AGNOSTIC_BOARD":
+    from adafruit_blinka.microcontroller.generic_agnostic_board.pin import *
 elif chip_id is None:
     print(
         "WARNING: chip_id == None is not fully supported. Some features may not work."