code: private ObjectChecksum readChecksum() throws DeviceDisconnectedException, DfuException,
              UploadAbortedException, RemoteDfuException, UnknownResponseException {
  		if (!mConnected)
  			throw new DeviceDisconnectedException("Unable to read Checksum: device disconnected");
  
  		writeOpCode(mControlPointCharacteristic, OP_CODE_CALCULATE_CHECKSUM);
  
  		final byte[] response = readNotificationResponse();
  		final int status = getStatusCode(response, OP_CODE_CALCULATE_CHECKSUM_KEY);
  		if (status == SecureDfuError.EXTENDED_ERROR)
  			throw new RemoteDfuExtendedErrorException("Receiving Checksum failed", response[3]);
  		if (status != DFU_STATUS_SUCCESS)
  			throw new RemoteDfuException("Receiving Checksum failed", status);
  
  		final ObjectChecksum checksum = new ObjectChecksum();
  		checksum.offset = mControlPointCharacteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT32, 3);
  		checksum.CRC32 = mControlPointCharacteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT32, 3 + 4);
  		return checksum;
  	}
docs: Sends the Calculate Checksum request. As a response a notification will be sent with current
  offset and CRC32 of the current object.
  
  @return requested object info.
  @throws DeviceDisconnectedException
  @throws DfuException
  @throws UploadAbortedException
  @throws RemoteDfuException thrown when the returned status code is not equal to
  {@link #DFU_STATUS_SUCCESS}.