]> Repositories - Adafruit_Blinka-hackapet.git/blobdiff - src/adafruit_blinka/microcontroller/mcp2221/mcp2221.py
feat: add I2C and SPI
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / mcp2221 / mcp2221.py
index fb8193cc87ba9e518e573b744a71b6ecf8a382ef..90ed49e50c046ba10d48259a1e4e96a1b6a6b6a3 100644 (file)
@@ -1,8 +1,12 @@
+# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
 """Chip Definition for MCP2221"""
 
 import os
 import time
 import atexit
+
 import hid
 
 # Here if you need it
@@ -55,21 +59,14 @@ class MCP2221:
         # make sure the device gets closed before exit
         atexit.register(self.close)
         if MCP2221_RESET_DELAY >= 0:
-            try:
-                self._reset()
-            except OSError:
-                # this might fail on Linux with the hid_mcp2221 native
-                # driver and a short reset delay -- if it fails,
-                # close the device before reraising
-                self.close()
-                raise
+            self._reset()
         self._gp_config = [0x07] * 4  # "don't care" initial value
         for pin in range(4):
             self.gp_set_mode(pin, self.GP_GPIO)  # set to GPIO mode
             self.gpio_set_direction(pin, 1)  # set to INPUT
 
     def close(self):
-        """Close the device. Does nothing if the device is not open."""
+        """Close the hid device. Does nothing if the device is not open."""
         self._hid.close()
 
     def __del__(self):
@@ -136,6 +133,7 @@ class MCP2221:
 
     def _reset(self):
         self._hid_xfer(b"\x70\xAB\xCD\xEF", response=False)
+        self._hid.close()
         time.sleep(MCP2221_RESET_DELAY)
         start = time.monotonic()
         while time.monotonic() - start < 5: