docs: public byte[] getDescription(int objIndex, int pid, int propIndex)
  		throws KNXTimeoutException, KNXConnectionClosedException, KNXRemoteException
  	{
  		// imitate property description:
  		// oindex: PID_IO_LIST
  		// pindex: supplied, conditional
  		// pid: supplied, conditional
  		// pdt: -
  		// elements: current number of elements
  		// rLevel: - (not existent)
  		// wLevel: - (not existent)
  		// read-only: only with write emulation
  
  		if (pid != 0 || objIndex != lastObjIndex || propIndex < lastPropIndex)
  			resetLastDescription();
  		// get current number of elements
  		// since we can't query by index, emulate with PID if necessary
  		byte[] ret = null;
  		int p = pid;
  		if (p == 0) {
  			p = lastPid;
  			int i = lastPropIndex;
  			while (p < 0xff && i < propIndex)
  				try {
  					ret = getProperty(objIndex, ++p, 0, 1);
  					++i;
  				}
  				catch (final KNXRemoteException e) {}
  			if (i != propIndex) {
  				resetLastDescription();
  				throw new KNXRemoteException("can't deduce property index in object");
  			}
  			setLastDescription(objIndex, i, p);
  		}
  		else
  			ret = getProperty(objIndex, p, 0, 1);
  
  		int writeEnabled = 0;
  		if (checkRW)
  			// check out if write enabled or read only
  			try {
  				setProperty(objIndex, p, 0, 1, ret);
  				writeEnabled = 0x80;
  			}
  			catch (final KNXRemoteException e) {}
  		// ??? should we return current number of elements for max.element
  		// int elements = 0;
  		// for (int i = 0; i < ret.length; ++i)
  		// 	elements = elements << 8 | ret[i] & 0xff;
  		return new byte[] { (byte) objIndex, (byte) p, (byte) propIndex,
  			(byte) writeEnabled, 0, 0, 0 };
  	}