code: private void writeOpCode(@NonNull final BluetoothGattCharacteristic characteristic, @NonNull final byte[] value)
  			throws DeviceDisconnectedException, DfuException, UploadAbortedException {
  		final boolean reset = value[0] == OP_CODE_RESET_KEY || value[0] == OP_CODE_ACTIVATE_AND_RESET_KEY;
  		writeOpCode(characteristic, value, reset);
  	}
docs: Writes the operation code to the characteristic. This method is SYNCHRONOUS and wait until the
  {@link android.bluetooth.BluetoothGattCallback#onCharacteristicWrite(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic, int)}
  will be called or the device gets disconnected.
  If connection state will change, or an error will occur, an exception will be thrown.
  
  @param characteristic the characteristic to write to. Should be the DFU CONTROL POINT.
  @param value          the value to write to the characteristic.
  @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.