+ raise PWMError(e.errno, "Exporting PWM pin: " + e.strerror) from IOError
+
+ # Loop until 'period' is writable, because application of udev rules
+ # after the above pin export is asynchronous.
+ # Without this loop, the following properties may not be writable yet.
+ for i in range(PWMOut.PWM_STAT_RETRIES):
+ try:
+ with open(
+ os.path.join(
+ channel_path, self._pin_path.format(self._pwmpin), "period"
+ ),
+ "w",
+ ):
+ break
+ except IOError as e:
+ 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)
+
+ # self._set_enabled(False) # This line causes a write error when trying to enable