+# 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
# 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):
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:
for _ in range(MCP2221_RETRY_MAX):
status = self._i2c_status()
if status[20] & MASK_ADDR_NACK:
- raise RuntimeError("I2C slave address was NACK'd")
+ raise OSError("I2C slave address was NACK'd")
usb_cmd_status = status[8]
if usb_cmd_status == 0:
break