code: int init(final ByteArrayInputStream is, final boolean parseDoA) throws KNXFormatException
  	{
  		final int ctrl = is.read();
  		// parse control field and check if valid
  		if ((ctrl & 0x53) != 0x10)
  			throw new KNXFormatException("invalid control field", ctrl);
  
  		type = LDATA_FRAME;
  		ext = (ctrl & 0x80) == 0;
  		repetition = (ctrl & 0x20) == 0;
  		p = Priority.get((ctrl >> 2) & 0x3);
  		final int ctrle = ext ? readCtrlEx(is) : 0;
  
  		if (parseDoA) {
  			doa = new byte[2];
  			is.read(doa, 0, 2);
  		}
  
  		src = new IndividualAddress((is.read() << 8) | is.read());
  		final int addr = (is.read() << 8) | is.read();
  		final int npci = is.read();
  		final int len;
  		if (ext) {
  			hopcount = (ctrle & 0x70) >> 4;
  			setDestination(addr, (ctrle & 0x80) != 0);
  			len = npci;
  		}
  		else {
  			hopcount = (npci & 0x70) >> 4;
  			setDestination(addr, (npci & 0x80) != 0);
  			len = npci & 0x0f;
  		}
  		return len;
  	}
docs: Inits the basic fields for TP1 and PL110 L-Data format reading the input
  stream.
  
  @param is
  @param parseDoA parse domain address after control field
  @return length field value of the raw frame
  @throws KNXFormatException