code: private static byte[] createGroupAPDU(int service, DPTXlator t)
  	{
  		// check for group read
  		if (service == 0x00)
  			return new byte[2];
  		// only group response and group write are allowed
  		if (service != 0x40 && service != 0x80)
  			throw new KNXIllegalArgumentException("not an APDU group service");
  		// determine if data starts at byte offset 1 (optimized) or 2 (default)
  		final int offset = (t.getItems() == 1 && t.getTypeSize() == 0) ? 1 : 2;
  		final byte[] buf = new byte[t.getItems() * Math.max(1, t.getTypeSize()) + offset];
  		buf[0] = (byte) (service >> 8);
  		buf[1] = (byte) service;
  		return t.getData(buf, offset);
  	}
docs: Creates a group service application layer protocol data unit containing all
  items of a DPT translator.
  <p>
  The transport layer bits in the first byte (TL / AL control field) are set 0. The
  maximum length used for the ASDU is not checked.<br>
  For DPTs occupying &lt;= 6 bits in length the optimized (compact) group write /
  response format layout is used.
  
  @param service application layer group service code
  @param t DPT translator with items to put into ASDU
  @return group APDU as byte array