From: Scott Main Date: Fri, 4 Dec 2020 20:09:22 +0000 (-0800) Subject: Add timout loop after exporting the PWM pin. X-Git-Tag: 5.8.1^2~3 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/11d2b8cca309cf76414c2fff089686455f2db41c Add timout loop after exporting the PWM pin. This gives udev time to respond to the device event. Without this, the subsequent attempts to modify pin properties will fail when depending on udev rules to apply new user permissions. This code is essentially copied from python-periphery, as was most of this file (both MIT licenced). Although it appears sergeev added this loop recently, compared to when this code was originally cloned. --- diff --git a/src/adafruit_blinka/microcontroller/generic_linux/sysfs_pwmout.py b/src/adafruit_blinka/microcontroller/generic_linux/sysfs_pwmout.py index e95a1e6..ae4da4b 100644 --- a/src/adafruit_blinka/microcontroller/generic_linux/sysfs_pwmout.py +++ b/src/adafruit_blinka/microcontroller/generic_linux/sysfs_pwmout.py @@ -31,6 +31,11 @@ class PWMOut: # Delay between check for scucessful PWM export on open (100ms) PWM_STAT_DELAY = 0.1 + # Number of retries to check for successful PWM export on open + PWM_STAT_RETRIES = 10 + # Delay between check for scucessful PWM export on open (100ms) + PWM_STAT_DELAY = 0.1 + # Sysfs paths _sysfs_path = "/sys/class/pwm/" _channel_path = "pwmchip{}" @@ -121,13 +126,16 @@ class PWMOut: for i in range(PWMOut.PWM_STAT_RETRIES): try: with open( - os.path.join(channel_path, self._pin_path.format(self._pwmpin), "period"), 'w' + os.path.join( + channel_path, self._pin_path.format(self._pwmpin), "period" + ), + "w", ): - print('#### okay ####') break except IOError as e: - if e.errno != EACCES or (e.errno == EACCES and i == PWMOut.PWM_STAT_RETRIES - 1): - print('#### catch ####') + if e.errno != EACCES or ( + e.errno == EACCES and i == PWMOut.PWM_STAT_RETRIES - 1 + ): raise PWMError(e.errno, "Opening PWM period: " + e.strerror) sleep(PWMOut.PWM_STAT_DELAY)