private void sendBlockAck(final int seqZero, final int ttl, final int src, final int dst, final int segN) {
        final int blockAck = mSegmentedAccessBlockAck;
        if (BlockAcknowledgementMessage.hasAllSegmentsBeenReceived(blockAck, segN)) {
            MeshLogger.verbose(TAG, "All segments received cancelling incomplete timer");
            cancelIncompleteTimer();
        }

        final byte[] upperTransportControlPdu = createAcknowledgementPayload(seqZero, blockAck);
        MeshLogger.verbose(TAG, "Block acknowledgement payload: " + MeshParserUtils.bytesToHex(upperTransportControlPdu, false));
        final ControlMessage controlMessage = new ControlMessage();
        controlMessage.setOpCode(TransportLayerOpCodes.SAR_ACK_OPCODE);
        controlMessage.setTransportControlPdu(upperTransportControlPdu);
        controlMessage.setTtl(ttl);
        controlMessage.setPduType(MeshManagerApi.PDU_TYPE_NETWORK);
        controlMessage.setSrc(src);
        controlMessage.setDst(dst);
        controlMessage.setIvIndex(mUpperTransportLayerCallbacks.getIvIndex());
        final int sequenceNumber = mUpperTransportLayerCallbacks.getNode(controlMessage.getSrc()).incrementSequenceNumber();
        final byte[] sequenceNum = MeshParserUtils.getSequenceNumberBytes(sequenceNumber);
        controlMessage.setSequenceNumber(sequenceNum);
        mBlockAckSent = true;
        mLowerTransportLayerCallbacks.sendSegmentAcknowledgementMessage(controlMessage);
        mSegmentedAccessAcknowledgementTimerStarted = false;
    }
Send block acknowledgement

@param seqZero Seqzero of the segmented messages.
@param ttl     TTL of the segmented messages.
@param src     Source address which is the element address
@param dst     Destination address.
mesh/src/main/java/no/nordicsemi/android/mesh/transport/LowerTransportLayer.java