diff --git a/Laerdal.Dfu.sln b/Laerdal.Dfu.sln index 78f986c..4172a6f 100644 --- a/Laerdal.Dfu.sln +++ b/Laerdal.Dfu.sln @@ -8,7 +8,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Misc", "_Misc", "{37EBD209 LICENSE = LICENSE Laerdal.Scripts\Laerdal.Version.sh = Laerdal.Scripts\Laerdal.Version.sh Laerdal.Scripts\Laerdal.Builder.targets = Laerdal.Scripts\Laerdal.Builder.targets - Laerdal.Scripts\Laerdal.Changelog.sh = Laerdal.Scripts\Laerdal.Changelog.sh Laerdal.Scripts\Laerdal.CreateNewReleaseInGithub.sh = Laerdal.Scripts\Laerdal.CreateNewReleaseInGithub.sh Laerdal.Scripts\Laerdal.SetupBuildEnvironment.sh = Laerdal.Scripts\Laerdal.SetupBuildEnvironment.sh .github\workflows\github-actions.yml = .github\workflows\github-actions.yml diff --git a/Laerdal.Dfu/Laerdal.Dfu.csproj b/Laerdal.Dfu/Laerdal.Dfu.csproj index def5edf..8c46b57 100644 --- a/Laerdal.Dfu/Laerdal.Dfu.csproj +++ b/Laerdal.Dfu/Laerdal.Dfu.csproj @@ -101,11 +101,11 @@ - + - + diff --git a/Laerdal.Dfu/Laerdal.Dfu.csproj.DotSettings b/Laerdal.Dfu/Laerdal.Dfu.csproj.DotSettings index e304b59..74fc16c 100644 --- a/Laerdal.Dfu/Laerdal.Dfu.csproj.DotSettings +++ b/Laerdal.Dfu/Laerdal.Dfu.csproj.DotSettings @@ -3,6 +3,7 @@ True True True + True True True True diff --git a/Laerdal.Dfu/Platforms.Droid/DfuInstallation.cs b/Laerdal.Dfu/Platforms.Droid/DfuInstallation.cs index d751140..7ce470d 100644 --- a/Laerdal.Dfu/Platforms.Droid/DfuInstallation.cs +++ b/Laerdal.Dfu/Platforms.Droid/DfuInstallation.cs @@ -13,101 +13,83 @@ namespace Laerdal.Dfu { public partial class DfuInstallation { - public Func CustomDfuServiceInitiatorConfiguration { get; set; } = (dfuInitiator) => dfuInitiator; + public Func CustomDfuServiceInitiatorConfiguration { get; set; } = dfuInitiator => dfuInitiator; private void SetInitiator() { - DfuProgressListener = new DfuProgressListener(this); DfuLogger = new DfuLogger(DeviceId); + DfuProgressListener = new DfuProgressListener(this); - Initiator = new Laerdal.Dfu.Bindings.Android.DfuServiceInitiator(DeviceId).SetZip(FileUrl); - - // PacketsReceiptNotifications - Initiator = Initiator.SetPacketsReceiptNotificationsEnabled(PacketReceiptNotificationParameter.HasValue); - Initiator = Initiator.SetPacketsReceiptNotificationsValue(PacketReceiptNotificationParameter ?? Laerdal.Dfu.Bindings.Android.DfuServiceInitiator.DefaultPrnValue); - - // DataObjectPreparationDelay - Initiator = Initiator.SetPrepareDataObjectDelay((long) (DataObjectPreparationDelay ?? 0)); + Initiator = new Laerdal.Dfu.Bindings.Android.DfuServiceInitiator(DeviceId).SetZip(FileUrl)!; + Initiator = Initiator.SetPacketsReceiptNotificationsEnabled(PacketReceiptNotificationParameter.HasValue)!; // PacketsReceiptNotifications + Initiator = Initiator.SetPacketsReceiptNotificationsValue(PacketReceiptNotificationParameter ?? Laerdal.Dfu.Bindings.Android.DfuServiceInitiator.DefaultPrnValue)!; + Initiator = Initiator.SetPrepareDataObjectDelay((long) (DataObjectPreparationDelay ?? 0))!; // DataObjectPreparationDelay - // DisableResume if (DisableResume ?? false) { - Initiator = Initiator.DisableResume(); + Initiator = Initiator.DisableResume()!; } - // AlternativeAdvertisingName if (!string.IsNullOrEmpty(AlternativeAdvertisingName)) { - Initiator = Initiator.SetDeviceName(AlternativeAdvertisingName); + Initiator = Initiator.SetDeviceName(AlternativeAdvertisingName)!; } - // ForceScanningForNewAddressInLegacyDfu if (ForceScanningForNewAddressInLegacyDfu.HasValue) { - Initiator = Initiator.SetForceScanningForNewAddressInLegacyDfu(ForceScanningForNewAddressInLegacyDfu.Value); + Initiator = Initiator.SetForceScanningForNewAddressInLegacyDfu(ForceScanningForNewAddressInLegacyDfu.Value)!; } - // EnableUnsafeExperimentalButtonlessServiceInSecureDfu if (EnableUnsafeExperimentalButtonlessServiceInSecureDfu.HasValue) { - Initiator = Initiator.SetUnsafeExperimentalButtonlessServiceInSecureDfuEnabled(EnableUnsafeExperimentalButtonlessServiceInSecureDfu.Value); + Initiator = Initiator.SetUnsafeExperimentalButtonlessServiceInSecureDfuEnabled(EnableUnsafeExperimentalButtonlessServiceInSecureDfu.Value)!; } - - // ForceDfu + if (ForceDfu.HasValue) { - Initiator = Initiator.SetForceDfu(ForceDfu.Value); + Initiator = Initiator.SetForceDfu(ForceDfu.Value)!; } - // DisableMtuRequest if (DisableMtuRequest ?? false) { - Initiator = Initiator.DisableMtuRequest(); + Initiator = Initiator.DisableMtuRequest()!; } - // DisableNotification if (DisableNotification.HasValue) { - Initiator = Initiator.SetDisableNotification(DisableNotification.Value); + Initiator = Initiator.SetDisableNotification(DisableNotification.Value)!; } - // MbrSize - Initiator = Initiator.SetMbrSize(MbrSize ?? Laerdal.Dfu.Bindings.Android.DfuServiceInitiator.DefaultMbrSize); + Initiator = Initiator.SetMbrSize(MbrSize ?? Laerdal.Dfu.Bindings.Android.DfuServiceInitiator.DefaultMbrSize)!; - // Scope if (Scope.HasValue) { - Initiator = Initiator.SetScope((int) Scope.Value); + Initiator = Initiator.SetScope((int) Scope.Value)!; } - // Foreground if (Foreground.HasValue) { - Initiator = Initiator.SetForeground(Foreground.Value); + Initiator = Initiator.SetForeground(Foreground.Value)!; } - - // KeepBond + if (KeepBond.HasValue) { - Initiator = Initiator.SetKeepBond(KeepBond.Value); + Initiator = Initiator.SetKeepBond(KeepBond.Value)!; } - // RestoreBond if (RestoreBond.HasValue) { - Initiator = Initiator.SetRestoreBond(RestoreBond.Value); + Initiator = Initiator.SetRestoreBond(RestoreBond.Value)!; } - // Mtu if (Mtu.HasValue) { - Initiator = Initiator.SetMtu(Mtu.Value); + Initiator = Initiator.SetMtu(Mtu.Value)!; } - - // NumberOfRetries + if (NumberOfRetries.HasValue) { - Initiator = Initiator.SetNumberOfRetries(NumberOfRetries.Value); + Initiator = Initiator.SetNumberOfRetries(NumberOfRetries.Value)!; } // For Oreo progress @@ -116,7 +98,7 @@ private void SetInitiator() Laerdal.Dfu.Bindings.Android.DfuServiceInitiator.CreateDfuNotificationChannel(Android.App.Application.Context); } - Initiator = CustomDfuServiceInitiatorConfiguration?.Invoke(Initiator); + Initiator = CustomDfuServiceInitiatorConfiguration?.Invoke(Initiator)!; // public DfuServiceInitiator SetCurrentMtu(int mtu) // public DfuServiceInitiator SetCustomUuidsForButtonlessDfuWithBondSharing(UUID buttonlessDfuServiceUuid, UUID buttonlessDfuControlPointUuid) @@ -126,28 +108,24 @@ private void SetInitiator() // public DfuServiceInitiator SetCustomUuidsForSecureDfu(UUID dfuServiceUuid, UUID dfuControlPointUuid, UUID dfuPacketUuid) } + private DfuLogger DfuLogger { get; set;} + private DfuProgressListener DfuProgressListener { get; set;} + public Laerdal.Dfu.Bindings.Android.DfuServiceInitiator Initiator { get; private set; } - public Laerdal.Dfu.Bindings.Android.DfuServiceController Controller { get; private set; } - private DfuProgressListener DfuProgressListener { get; set;} - - private DfuLogger DfuLogger { get; set;} - public DfuInstallation(string deviceId, string fileUrl) : base(deviceId, fileUrl) { } - public DfuInstallation() : base() + public DfuInstallation() { } public override void Start() { if (Controller != null) - { throw new System.Exception("Controller is already set."); - } SetInitiator(); Controller = Initiator.Start(Android.App.Application.Context, Class.FromType(typeof(DfuService))); @@ -170,26 +148,31 @@ public override void Abort() protected override void Dispose(bool disposing) { + if (!disposing) + return; + DfuProgressListener?.Dispose(); - if (disposing) - { - Initiator?.Dispose(); - Controller?.Dispose(); - DfuLogger?.Dispose(); - } + DfuProgressListener = null; + + Initiator?.Dispose(); + Initiator = null; + + Controller?.Dispose(); + Controller = null; + + DfuLogger?.Dispose(); + DfuLogger = null; } public bool CheckDeviceAddress(string deviceAddress) { if (deviceAddress == DeviceId) - { return true; - } var parsed = DeviceId.Split(':').Select(p => int.Parse(p, NumberStyles.HexNumber)).ToList(); parsed[^1] += 1; + var deviceAddressPlusOne = string.Join(":", parsed.Select(p => p.ToString("X2"))); - if (deviceAddress == deviceAddressPlusOne) { return true; diff --git a/Laerdal.Dfu/Platforms.NetX/DfuInstallation.cs b/Laerdal.Dfu/Platforms.NetX/DfuInstallation.cs index c1be179..a7f225f 100644 --- a/Laerdal.Dfu/Platforms.NetX/DfuInstallation.cs +++ b/Laerdal.Dfu/Platforms.NetX/DfuInstallation.cs @@ -11,7 +11,7 @@ public DfuInstallation(string deviceId, string fileUrl) : base(deviceId, fileUrl throw new NotImplementedException(); } - public DfuInstallation() : base() + public DfuInstallation() { throw new NotImplementedException(); } diff --git a/Laerdal.Dfu/Platforms.iOSandMacCatalyst/DfuInstallation.cs b/Laerdal.Dfu/Platforms.iOSandMacCatalyst/DfuInstallation.cs index 56518d1..ddbb10e 100644 --- a/Laerdal.Dfu/Platforms.iOSandMacCatalyst/DfuInstallation.cs +++ b/Laerdal.Dfu/Platforms.iOSandMacCatalyst/DfuInstallation.cs @@ -7,19 +7,18 @@ namespace Laerdal.Dfu public partial class DfuInstallation { public static Func Queue { get; set; } = () => DispatchQueue.GetGlobalQueue(DispatchQueuePriority.Default); + public static Func LoggerQueue { get; set; } = () => DispatchQueue.GetGlobalQueue(DispatchQueuePriority.Default); public static Func DelegateQueue { get; set; } = () => DispatchQueue.GetGlobalQueue(DispatchQueuePriority.Default); public static Func ProgressQueue { get; set; } = () => DispatchQueue.GetGlobalQueue(DispatchQueuePriority.Default); - public static Func LoggerQueue { get; set; } = () => DispatchQueue.GetGlobalQueue(DispatchQueuePriority.Default); - - public Func CustomDfuServiceInitiatorConfiguration { get; set; } = (dfuInitiator) => dfuInitiator; + public Func CustomDfuServiceInitiatorConfiguration { get; set; } = dfuInitiator => dfuInitiator; private void SetInitiator() { - DfuProgressDelegate = new DfuProgressDelegate(this); DfuServiceDelegate = new DfuServiceDelegate(this); + DfuProgressDelegate = new DfuProgressDelegate(this); DfuPeripheralSelectorDelegate = new DfuPeripheralSelectorDelegate(this); - Firmware = new Laerdal.Dfu.Bindings.iOS.DFUFirmware(new NSUrl(FileUrl, false), out NSError error); + Firmware = new Laerdal.Dfu.Bindings.iOS.DFUFirmware(new NSUrl(FileUrl, isDir: false), out _); Initiator = new Laerdal.Dfu.Bindings.iOS.DFUServiceInitiator( queue: Queue.Invoke(), @@ -30,74 +29,75 @@ private void SetInitiator() ) { Logger = new DfuLogger(), - WeakProgressDelegate = DfuProgressDelegate, WeakDelegate = DfuServiceDelegate, + WeakProgressDelegate = DfuProgressDelegate, }; + Initiator = Initiator.WithFirmware(Firmware); - // PacketsReceiptNotifications if (PacketReceiptNotificationParameter.HasValue) + { Initiator.PacketReceiptNotificationParameter = PacketReceiptNotificationParameter.Value; - // DataObjectPreparationDelay + } if (DataObjectPreparationDelay.HasValue) + { Initiator.DataObjectPreparationDelay = DataObjectPreparationDelay.Value; + } - // DisableResume if (DisableResume.HasValue) + { Initiator.DisableResume = DisableResume.Value; + } - // AlternativeAdvertisingName - Initiator.AlternativeAdvertisingNameEnabled = !string.IsNullOrEmpty(AlternativeAdvertisingName); Initiator.AlternativeAdvertisingName = AlternativeAdvertisingName; - // ForceScanningForNewAddressInLegacyDfu + Initiator.AlternativeAdvertisingNameEnabled = !string.IsNullOrEmpty(AlternativeAdvertisingName); if (ForceScanningForNewAddressInLegacyDfu.HasValue) + { Initiator.ForceScanningForNewAddressInLegacyDfu = ForceScanningForNewAddressInLegacyDfu.Value; - // EnableUnsafeExperimentalButtonlessServiceInSecureDfu + } if (EnableUnsafeExperimentalButtonlessServiceInSecureDfu.HasValue) + { Initiator.ForceScanningForNewAddressInLegacyDfu = EnableUnsafeExperimentalButtonlessServiceInSecureDfu.Value; - // ForceDfu + } if (ForceDfu.HasValue) + { Initiator.ForceDfu = ForceDfu.Value; + } - // ConnectionTimeout if (ConnectionTimeout.HasValue) + { Initiator.ConnectionTimeout = ConnectionTimeout.Value; + } Initiator = CustomDfuServiceInitiatorConfiguration?.Invoke(Initiator); - - // public DFUUuidHelper UuidHelper {get; set;} } - public Laerdal.Dfu.Bindings.iOS.DFUServiceInitiator Initiator { get; private set; } - + public Laerdal.Dfu.Bindings.iOS.DFUFirmware Firmware { get; private set; }public Laerdal.Dfu.Bindings.iOS.DFUServiceInitiator Initiator { get; private set; } public Laerdal.Dfu.Bindings.iOS.DFUServiceController Controller { get; private set; } - public Laerdal.Dfu.Bindings.iOS.DFUFirmware Firmware { get; private set; } + private DfuServiceDelegate DfuServiceDelegate { get;set; } private DfuProgressDelegate DfuProgressDelegate { get; set; } - private DfuServiceDelegate DfuServiceDelegate { get; set; } + private DfuPeripheralSelectorDelegate DfuPeripheralSelectorDelegate { get; set; } - public DfuInstallation(string deviceId, string fileUrl) : base(deviceId, fileUrl) { } - public DfuInstallation() : base() + public DfuInstallation() { } public override void Start() { if (Controller != null) - { throw new System.Exception("Controller is already set."); - } SetInitiator(); Controller = Initiator.StartWithTargetWithIdentifier(new NSUuid(DeviceId)); @@ -120,12 +120,26 @@ public override void Abort() protected override void Dispose(bool disposing) { - if (disposing) - { - Initiator?.Dispose(); - Controller?.Dispose(); - Firmware?.Dispose(); - } + if (!disposing) + return; + + DfuServiceDelegate?.Dispose(); + DfuServiceDelegate = null; + + DfuProgressDelegate?.Dispose(); + DfuProgressDelegate = null; + + DfuPeripheralSelectorDelegate?.Dispose(); + DfuPeripheralSelectorDelegate = null; + + Firmware?.Dispose(); + Firmware = null; + + Initiator?.Dispose(); + Initiator = null; + + Controller?.Dispose(); + Controller = null; } } } \ No newline at end of file diff --git a/Laerdal.Scripts/Laerdal.Changelog.sh b/Laerdal.Scripts/Laerdal.Changelog.sh deleted file mode 100644 index 49e40ae..0000000 --- a/Laerdal.Scripts/Laerdal.Changelog.sh +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/bash - -usage(){ - echo "usage: ./Laerdal.Changelog.sh [-nv | --new-version X.Y.Z] [-o | --output version.txt] [-h | --help]" - echo "parameters:" - echo " -nv | --new-version [version] New major.minor.patch version (default is 0.0.0)" - echo " -o | --output [filename] Name of the output file" - echo " -h | --help Prints this message" - echo " -v | --verbose Verbose mode" -} - -function log () { - if [[ $verbose -eq 1 ]]; then - echo "$@" - fi -} - -filename="CHANGELOG.md" - -while [ "$1" != "" ]; do - case $1 in - -nv | --new-version ) shift - newversion="$1" - ;; - -o | --output ) shift - filename="$1" - ;; - -h | --help ) usage - exit - ;; - -v | --verbose ) verbose=1 - ;; - * ) echo - echo "### Wrong parameter: $1 ###" - echo - usage - exit 1 - esac - shift -done - - -if [ ! -z "$newversion" ]; then - if [[ "$newversion" =~ .*"-".* ]]; then - log "New version contains a dash, skipping changelog generation" - else - currenthash=$(git show --format=%h --no-patch) - echo "$currenthash $newversion" > tags.txt - log "New version: $newversion" - fi -else - echo "" > tags.txt -fi - -# Get all tags on develop and Filter out tags that are not in the format "HASH 1.2.3" -git tag --format='%(objectname:short) %(refname:short)' --sort=-version:refname --merged | grep -o '[a-z0-9]* [a-z0-9]*[.][a-z0-9]*[.][a-z0-9]*$' >> tags.txt - -# Create changelog file -echo "# CHANGELOG" > "$filename" -echo "" >> "$filename" -log "Created changelog file: $filename" - - -# Loop through all tags and create changelog -lastline='' -while read line; do - if [ -z "$lastline" ]; then - lastline=$line - else - # Split the line into hash and version - lasthash=`echo $lastline | cut -d' ' -f1` - lastversion=`echo $lastline | cut -d' ' -f2` - hash=`echo $line | cut -d' ' -f1` - - echo "## **$lastversion**" >> "$filename" - log "Added version: $lastversion" - # Get the commit message and author of the tag - git log -n 1 --pretty=tformat:"%b" $lasthash >> "$filename" - - echo "" >> "$filename" - - # Get all commits between the current tag and the previous tag - git log $hash..$lasthash --pretty=format:"- %s [%cn]" --no-merges >> "$filename" - - echo "" >> "$filename" - echo "" >> "$filename" - - # Get the commit message and author of the tag - git log -n 1 --pretty=tformat:"> by _%cn_ on _%cd_" --date=format:'%Y-%m-%d %H:%M:%S' $lasthash >> "$filename" - - echo "" >> "$filename" - echo "---" >> "$filename" - echo "" >> "$filename" - lastline=$line - fi -done < tags.txt - -rm -r -f tags.txt - -log "Done" - -exit 0 \ No newline at end of file