docs: public DfuServiceController start(@NonNull final Context context, @NonNull final Class<? extends DfuBaseService> service) {
  		if (fileType == -1)
  			throw new UnsupportedOperationException("You must specify the firmware file before starting the service");
  
  		final Intent intent = new Intent(context, service);
  
  		intent.putExtra(DfuBaseService.EXTRA_DEVICE_ADDRESS, deviceAddress);
  		intent.putExtra(DfuBaseService.EXTRA_DEVICE_NAME, deviceName);
  		intent.putExtra(DfuBaseService.EXTRA_DISABLE_NOTIFICATION, disableNotification);
  		intent.putExtra(DfuBaseService.EXTRA_FOREGROUND_SERVICE, startAsForegroundService);
  		intent.putExtra(DfuBaseService.EXTRA_FILE_MIME_TYPE, mimeType);
  		intent.putExtra(DfuBaseService.EXTRA_FILE_TYPE, fileType);
  		intent.putExtra(DfuBaseService.EXTRA_FILE_URI, fileUri);
  		intent.putExtra(DfuBaseService.EXTRA_FILE_PATH, filePath);
  		intent.putExtra(DfuBaseService.EXTRA_FILE_RES_ID, fileResId);
  		intent.putExtra(DfuBaseService.EXTRA_INIT_FILE_URI, initFileUri);
  		intent.putExtra(DfuBaseService.EXTRA_INIT_FILE_PATH, initFilePath);
  		intent.putExtra(DfuBaseService.EXTRA_INIT_FILE_RES_ID, initFileResId);
  		intent.putExtra(DfuBaseService.EXTRA_KEEP_BOND, keepBond);
  		intent.putExtra(DfuBaseService.EXTRA_RESTORE_BOND, restoreBond);
  		intent.putExtra(DfuBaseService.EXTRA_FORCE_DFU, forceDfu);
  		intent.putExtra(DfuBaseService.EXTRA_DISABLE_RESUME, disableResume);
  		intent.putExtra(DfuBaseService.EXTRA_MAX_DFU_ATTEMPTS, numberOfRetries);
  		intent.putExtra(DfuBaseService.EXTRA_MBR_SIZE, mbrSize);
  		if (mtu > 0)
  			intent.putExtra(DfuBaseService.EXTRA_MTU, mtu);
  		intent.putExtra(DfuBaseService.EXTRA_CURRENT_MTU, currentMtu);
  		intent.putExtra(DfuBaseService.EXTRA_UNSAFE_EXPERIMENTAL_BUTTONLESS_DFU, enableUnsafeExperimentalButtonlessDfu);
  		//noinspection StatementWithEmptyBody
  		if (packetReceiptNotificationsEnabled != null) {
  			intent.putExtra(DfuBaseService.EXTRA_PACKET_RECEIPT_NOTIFICATIONS_ENABLED, packetReceiptNotificationsEnabled);
  			intent.putExtra(DfuBaseService.EXTRA_PACKET_RECEIPT_NOTIFICATIONS_VALUE, numberOfPackets);
  		} else {
  			// For backwards compatibility:
  			// If the setPacketsReceiptNotificationsEnabled(boolean) has not been called, the PRN state and value are taken from
  			// SharedPreferences the way they were read in DFU Library in 1.0.3 and before, or set to default values.
  			// Default values: PRNs enabled on Android 4.3 - 5.1 and disabled starting from Android 6.0. Default PRN value is 12.
  		}
  		if (legacyDfuUuids != null)
  			intent.putExtra(DfuBaseService.EXTRA_CUSTOM_UUIDS_FOR_LEGACY_DFU, legacyDfuUuids);
  		if (secureDfuUuids != null)
  			intent.putExtra(DfuBaseService.EXTRA_CUSTOM_UUIDS_FOR_SECURE_DFU, secureDfuUuids);
  		if (experimentalButtonlessDfuUuids != null)
  			intent.putExtra(DfuBaseService.EXTRA_CUSTOM_UUIDS_FOR_EXPERIMENTAL_BUTTONLESS_DFU, experimentalButtonlessDfuUuids);
  		if (buttonlessDfuWithoutBondSharingUuids != null)
  			intent.putExtra(DfuBaseService.EXTRA_CUSTOM_UUIDS_FOR_BUTTONLESS_DFU_WITHOUT_BOND_SHARING, buttonlessDfuWithoutBondSharingUuids);
  		if (buttonlessDfuWithBondSharingUuids != null)
  			intent.putExtra(DfuBaseService.EXTRA_CUSTOM_UUIDS_FOR_BUTTONLESS_DFU_WITH_BOND_SHARING, buttonlessDfuWithBondSharingUuids);
  
  		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && startAsForegroundService) {
  			// On Android Oreo and above the service must be started as a foreground service to make it accessible from
  			// a killed application.
  			context.startForegroundService(intent);
  		} else {
  			context.startService(intent);
  		}
  		return new DfuServiceController(context);
  	}