]> Repositories - Adafruit_Blinka-hackapet.git/blobdiff - src/adafruit_blinka/microcontroller/bcm283x/pulseio/PulseIn.py
Untangle code and remove pylint disables
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / bcm283x / pulseio / PulseIn.py
index 19dc98f32089364b6e266712f07ce39038dda5e1..78d5761afcfb6df5cc0191f28d8e240c7b945eb9 100644 (file)
@@ -1,15 +1,20 @@
+# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
 """Custom PulseIn Class to read PWM signals"""
 import time
 import subprocess
 import os
 import atexit
 import random
+import struct
 import sysv_ipc
 
 DEBUG = False
 queues = []
 procs = []
 
+
 # The message queues live outside of python space, and must be formally cleaned!
 def final():
     """In case the program is cancelled or quit, we need to clean up the PulseIn
@@ -25,6 +30,7 @@ def final():
 
 atexit.register(final)
 
+
 # pylint: disable=c-extension-no-member
 class PulseIn:
     """PulseIn Class to read PWM signals"""
@@ -49,9 +55,15 @@ class PulseIn:
                 "Message queue creation failed"
             ) from sysv_ipc.ExistentialError
 
+        # Check if OS is 64-bit
+        if struct.calcsize("P") * 8 == 64:  # pylint: disable=no-member
+            libgpiod_filename = "libgpiod_pulsein64"
+        else:
+            libgpiod_filename = "libgpiod_pulsein"
+
         dir_path = os.path.dirname(os.path.realpath(__file__))
         cmd = [
-            dir_path + "/libgpiod_pulsein",
+            dir_path + "/" + libgpiod_filename,
             "--pulses",
             str(maxlen),
             "--queue",
@@ -59,12 +71,16 @@ class PulseIn:
         ]
         if idle_state:
             cmd.append("-i")
-        cmd.append("gpiochip0")
-        cmd.append(str(pin))
+        if isinstance(pin.id, tuple):
+            cmd.append(f"gpiochip{pin.id[0]}")
+            cmd.append(str(pin.id[1]))
+        else:
+            cmd.append("gpiochip0")
+            cmd.append(str(pin))
         if DEBUG:
             print(cmd)
 
-        self._process = subprocess.Popen(cmd)
+        self._process = subprocess.Popen(cmd)  # pylint: disable=consider-using-with
         procs.append(self._process)
 
         # wait for it to start up