docs: public static CEMI createFromEMI(byte[] frame) throws KNXFormatException
  	{
  		// check for minimum frame length (i.e. busmonitor)
  		if (frame.length < 4)
  			throw new KNXFormatException("EMI frame too short");
  		final int mc = frame[0] & 0xff;
  		if (mc == CEMIBusMon.MC_BUSMON_IND) {
  			return new CEMIBusMon(frame[1] & 0xff, (frame[2] & 0xff) << 8 | frame[3] & 0xff,
  				false, truncate(frame, 4, frame.length - 4));
  		}
  		final Priority p = Priority.get(frame[1] >> 2 & 0x3);
  		final boolean ack = (frame[1] & 0x02) != 0;
  		final boolean c = (frame[1] & 0x01) != 0;
  		final int dst = (frame[4] & 0xff) << 8 | frame[5] & 0xff;
  		final KNXAddress a = (frame[6] & 0x80) != 0 ?
  			(KNXAddress) new GroupAddress(dst) : new IndividualAddress(dst);
  		final int hops = frame[6] >> 4 & 0x07;
  		final int len = (frame[6] & 0x0f) + 1;
  		final byte[] tpdu = truncate(frame, 7, Math.min(len, frame.length - 7));
  		// no long frames in EMI2
  		return c ? new CEMILData(mc, new IndividualAddress(0), a, tpdu, p, c)
  			: new CEMILData(mc, new IndividualAddress(0), a, tpdu, p, true, true, ack,
  				hops);
  	}