code: void writeInitData(final BluetoothGattCharacteristic characteristic, final CRC32 crc32)
  			throws DfuException, DeviceDisconnectedException, UploadAbortedException {
  		try {
  			byte[] data = mBuffer;
  			int size;
  			while ((size = mInitPacketStream.read(data, 0, data.length)) != -1) {
  				writeInitPacket(characteristic, data, size);
  				if (crc32 != null)
  					crc32.update(data, 0, size);
  			}
  		} catch (final IOException e) {
  			loge("Error while reading Init packet file", e);
  			throw new DfuException("Error while reading Init packet file", DfuBaseService.ERROR_FILE_ERROR);
  		}
  	}
docs: Wends the whole init packet stream to the given characteristic.
  
  @param characteristic the target characteristic
  @param crc32          the CRC object to be updated based on the data sent
  @throws DeviceDisconnectedException Thrown when the device will disconnect in the middle of
  the transmission.
  @throws DfuException                Thrown if DFU error occur.
  @throws UploadAbortedException      Thrown if DFU operation was aborted by user.