docs: public <T> T runBusLockedDeviceAction(final I2CDevice device, final Callable<T> action) throws IOException {
          if (action == null) {
              throw new NullPointerException("Parameter 'action' is mandatory!");
          }
  
          testForProperOperationConditions(device);
  
          try {
              if (accessLock.tryLock(lockAquireTimeout, lockAquireTimeoutUnit)) {
                  try {
                      testForProperOperationConditions(device);
  
                      selectBusSlave(device);
  
                      return action.call();
                  } finally {
                      accessLock.unlock();
                  }
              }
          } catch (InterruptedException e) {
              logger.log(Level.FINER, "Failed locking I2CBusImpl-" + busNumber, e);
              throw new RuntimeException("Could not obtain an access-lock!", e);
          } catch (IOException e) { // unwrap IOExceptionWrapperException
              throw e;
          } catch (RuntimeException e) {
              throw e;
          } catch (Exception e) { // unexpected exceptions
              throw new RuntimeException(e);
          }
          throw new RuntimeException("Could not obtain an access-lock!");
      }