code: public int increaseValue() throws ControlException {
  		int old = defaultValue;
  		
  		if(type==V4L4JConstants.CTRL_TYPE_STRING)
  			throw new UnsupportedMethod("This control is a string control and does not accept calls to increaseValue()");
  		if(type==V4L4JConstants.CTRL_TYPE_LONG)
  			throw new UnsupportedMethod("This control is a long control and does not support calls to increaseValue()");
  		
  		/**
  		 * the following try statement is here so that write-only 
  		 * controls (Relative Pan for instance) that return a ControlException
  		 * when read can still have their value increase()d.
  		 */
  		state.get();
  		try { old = doGetValue(v4l4jObject,id); } catch (ControlException e) {}
  		try { old = doSetValue(v4l4jObject,id, validateValue(old+step));}
  		catch (ControlException ce) {
  			state.put();
  			throw ce;
  		}
  		state.put();
  		return old;
  	}
docs: This method increases this control's current value by its step (as returned
  by {@link #getStepValue()})</code>. The returned value is the new value
  of the control, which for normal controls will be identical to the old one plus
  the step value. However, some controls (for example relative values like pan
  or tilt) are write-only and getting their value does not make sense. In this case,
  this method sets the new value to the default one plus the step value.
  Note that, the return value in this case is still the control's default value
  (as returned by {@link #getDefaultValue()}), not the default one plus the step value.
  @return the new value of the control after increasing its old value, or the control's default
  value
  @throws ControlException if the value cannot be increased
  @throws UnsupportedMethod if this control is of type {@link V4L4JConstants#CTRL_TYPE_STRING}
  or {@link V4L4JConstants#CTRL_TYPE_LONG}
  @throws StateException if this control has been released and must not be used anymore.