+ 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'
+ ):
+ print('#### okay ####')
+ break
+ except IOError as e:
+ if e.errno != EACCES or (e.errno == EACCES and i == PWMOut.PWM_STAT_RETRIES - 1):
+ print('#### catch ####')
+ 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