Skip to content

Commit

Permalink
Merge pull request #429 from WildernessLabs/warnings
Browse files Browse the repository at this point in the history
Warnings and defensive coding
  • Loading branch information
adrianstevens authored Jan 18, 2024
2 parents ee2551a + 71c11b6 commit 077f1a0
Show file tree
Hide file tree
Showing 19 changed files with 64 additions and 46 deletions.
9 changes: 4 additions & 5 deletions Source/v2/Meadow.CLI.Core/DFU/DfuSharp.cs
Original file line number Diff line number Diff line change
Expand Up @@ -278,21 +278,20 @@ public class DfuDevice : IDisposable

public DfuDevice(IntPtr device, InterfaceDescriptor interface_descriptor, DfuFunctionDescriptor dfu_descriptor)
{
interface_descriptor = interface_descriptor;
dfu_descriptor = dfu_descriptor;
this.interface_descriptor = interface_descriptor;
this.dfu_descriptor = dfu_descriptor;

if (NativeMethods.libusb_open(device, ref handle) < 0)
{
throw new Exception("Error opening device");
}
}

public event UploadingEventHandler Uploading;
public event UploadingEventHandler Uploading = default!;

protected virtual void OnUploading(UploadingEventArgs e)
{
if (Uploading != null)
Uploading(this, e);
Uploading?.Invoke(this, e);
}
public void ClaimInterface()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ public partial class PackageManager
public const string PostLinkDirectoryName = "postlink_bin";
public const string PackageOutputDirectoryName = "mpak";

private string? _meadowAssembliesPath;
private string _meadowAssembliesPath = string.Empty;

private string? MeadowAssembliesPath
private string MeadowAssembliesPath
{
get
{
if (_meadowAssembliesPath == null)
if (string.IsNullOrWhiteSpace(_meadowAssembliesPath))
{ // for now we only support F7
// TODO: add switch and support for other platforms
var store = _fileManager.Firmware["Meadow F7"];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@ public record DeployOptions
public bool? IncludePDBs { get; set; }
}
}
}
}
12 changes: 6 additions & 6 deletions Source/v2/Meadow.Cli/AppManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public static async Task DeployApplication(
string localBinaryDirectory,
bool includePdbs,
bool includeXmlDocs,
ILogger logger,
ILogger? logger,
CancellationToken cancellationToken)
{
// TODO: add sub-folder support when HCOM supports it
Expand All @@ -43,7 +43,7 @@ public static async Task DeployApplication(
var dependencies = packageManager.GetDependencies(new FileInfo(Path.Combine(localBinaryDirectory, "App.dll")));
dependencies.Add(Path.Combine(localBinaryDirectory, "App.dll"));

logger.LogInformation("Generating the list of files to deploy...");
logger?.LogInformation("Generating the list of files to deploy...");
foreach (var file in dependencies)
{
// TODO: add any other filtering capability here
Expand All @@ -65,7 +65,7 @@ public static async Task DeployApplication(

if (localFiles.Count() == 0)
{
logger.LogInformation($"No new files to deploy");
logger?.LogInformation($"No new files to deploy");
}

// get a list of files on-device, with CRCs
Expand All @@ -85,7 +85,7 @@ public static async Task DeployApplication(
// delete those files
foreach (var file in removeFiles)
{
logger.LogInformation($"Deleting file '{file}'...");
logger?.LogInformation($"Deleting file '{file}'...");
await connection.DeleteFile(file, cancellationToken);
}

Expand All @@ -94,7 +94,7 @@ public static async Task DeployApplication(
{
var existing = deviceFiles.FirstOrDefault(f => Path.GetFileName(f.Name) == Path.GetFileName(localFile.Key));

if (existing != null)
if (existing != null && existing.Crc != null)
{
if (uint.Parse(existing.Crc.Substring(2), System.Globalization.NumberStyles.HexNumber) == localFile.Value)
{
Expand All @@ -107,7 +107,7 @@ public static async Task DeployApplication(

if (!await connection?.WriteFile(localFile.Key, null, cancellationToken))
{
logger.LogWarning($"Error sending'{Path.GetFileName(localFile.Key)}'. Retrying.");
logger?.LogWarning($"Error sending'{Path.GetFileName(localFile.Key)}'. Retrying.");
await Task.Delay(100);
goto send_file;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ protected override async ValueTask ExecuteCommand()
file = new FileInfo(path);
}

var targetDirectory = file.DirectoryName;
var targetDirectory = file.DirectoryName!;

await AppManager.DeployApplication(_packageManager, connection, targetDirectory, true, false, Logger, CancellationToken);

Expand Down
2 changes: 1 addition & 1 deletion Source/v2/Meadow.Cli/Commands/Current/App/AppRunCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace Meadow.CLI.Commands.DeviceManagement;
public class AppRunCommand : BaseDeviceCommand<AppRunCommand>
{
private readonly IPackageManager _packageManager;
private string _lastFile;
private string? _lastFile;

[CommandOption("no-prefix", 'n', IsRequired = false, Description = "When set, the message source prefix (e.g. 'stdout>') is suppressed during 'listen'")]
public bool NoPrefix { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ protected override async ValueTask ExecuteCommand()
Logger?.LogInformation("Retrieving your user and organization information...");

var userOrgs = await _userService.GetUserOrgs(Host, CancellationToken).ConfigureAwait(false);
if (!userOrgs.Any())
if (userOrgs == null || !userOrgs.Any())
{
Logger?.LogInformation($"Please visit {Host} to register your account.");
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ protected override async ValueTask ExecuteCommand()

if (Version == null)
{
Logger?.LogInformation($"Default firmware is '{collection.DefaultPackage.Version}'.");
Logger?.LogInformation($"Default firmware is '{collection?.DefaultPackage?.Version}'.");
}
else
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ public class FirmwareWriteCommand : BaseDeviceCommand<FirmwareWriteCommand>
private ISettingsManager Settings { get; }

private ILibUsbDevice? _libUsbDevice;
private bool _fileWriteError = false;

public FirmwareWriteCommand(ISettingsManager settingsManager, FileManager fileManager, MeadowConnectionManager connectionManager, ILoggerFactory loggerFactory)
: base(connectionManager, loggerFactory)
Expand Down Expand Up @@ -201,11 +200,17 @@ private async ValueTask WriteFiles(IMeadowConnection connection, FirmwareType[]
};
connection.FileWriteFailed += (s, e) =>
{
_fileWriteError = true;
Logger?.LogError("Error writing file");
};

var package = await GetSelectedPackage();

if (package == null)
{
Logger?.LogError($"Firware write failed - unable to find selected package");
return;
}

var wasRuntimeEnabled = await connection!.Device!.IsRuntimeEnabled(CancellationToken);

if (wasRuntimeEnabled)
Expand Down Expand Up @@ -246,7 +251,7 @@ private async ValueTask WriteFiles(IMeadowConnection connection, FirmwareType[]
return;
}

if (FirmwareFileTypes.Contains(FirmwareType.ESP))
if (FirmwareFileTypes != null && FirmwareFileTypes.Contains(FirmwareType.ESP))
{
Logger?.LogInformation($"{Environment.NewLine}Writing Coprocessor files...");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ private async Task CallConfigCommand(string selectedPort)
Settings = new string[] { "route", selectedPort }
};

await setCommand.ExecuteAsync(Console);
if (Console != null)
{
await setCommand.ExecuteAsync(Console);
}
}
}
27 changes: 19 additions & 8 deletions Source/v2/Meadow.Cli/Commands/Legacy/FlashOsCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,12 @@ protected override async ValueTask ExecuteCommand()
{
var package = await GetSelectedPackage();

if (package == null)
{
Logger?.LogError($"Unable to get selected OS package");
return;
}

var files = new List<FirmwareType>();
if (!SkipOS) files.Add(FirmwareType.OS);
if (!SkipEsp) files.Add(FirmwareType.ESP);
Expand All @@ -62,7 +68,7 @@ protected override async ValueTask ExecuteCommand()

if (Files == null)
{
Logger.LogInformation($"Writing all firmware for version '{package.Version}'...");
Logger?.LogInformation($"Writing all firmware for version '{package.Version}'...");

Files = new FirmwareType[]
{
Expand All @@ -80,7 +86,7 @@ protected override async ValueTask ExecuteCommand()

bool deviceSupportsOta = false; // TODO: get this based on device OS version

if (package?.OsWithoutBootloader == null
if (package.OsWithoutBootloader == null
|| !deviceSupportsOta
|| UseDfu)
{
Expand Down Expand Up @@ -259,7 +265,14 @@ private async ValueTask WriteFiles()
Logger?.LogInformation(message);
};

var package = await GetSelectedPackage();

var pack = await GetSelectedPackage();

if (pack == null)
{
Logger?.LogError($"Unable to get selected OS package");
}
FirmwarePackage package = pack!;

var wasRuntimeEnabled = await connection.Device.IsRuntimeEnabled(CancellationToken);

Expand All @@ -275,7 +288,7 @@ private async ValueTask WriteFiles()
Console?.Output.Write($"Writing {e.fileName}: {p:0}% \r");
};

if (Files.Contains(FirmwareType.OS))
if (Files!.Contains(FirmwareType.OS))
{
if (UseDfu)
{
Expand All @@ -288,7 +301,7 @@ private async ValueTask WriteFiles()
throw new NotSupportedException("OtA writes for the OS are not yet supported");
}
}
if (Files.Contains(FirmwareType.Runtime))
if (Files!.Contains(FirmwareType.Runtime))
{
Logger?.LogInformation($"{Environment.NewLine}Writing Runtime {package.Version}...");

Expand All @@ -299,7 +312,7 @@ private async ValueTask WriteFiles()

await connection.Device.WriteRuntime(rtpath, CancellationToken);
}
if (Files.Contains(FirmwareType.ESP))
if (Files!.Contains(FirmwareType.ESP))
{
Logger?.LogInformation($"{Environment.NewLine}Writing Coprocessor files...");

Expand All @@ -313,8 +326,6 @@ private async ValueTask WriteFiles()
await connection.Device.WriteCoprocessorFiles(fileList, CancellationToken);
}

Logger?.LogInformation($"{Environment.NewLine}");

if (wasRuntimeEnabled)
{
await connection.Device.RuntimeEnable();
Expand Down
2 changes: 1 addition & 1 deletion Source/v2/Meadow.Cloud.Client/Messages/User.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ public record User
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public void TestInvalidPortName()
}

[Fact]
public async void TestListen()
public void TestListen()
{
using (var connection = new SerialConnection(ValidPortName))
{
Expand Down
10 changes: 5 additions & 5 deletions Source/v2/Meadow.Hcom/Connections/SerialConnection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ public partial class SerialConnection : ConnectionBase, IDisposable
public const int ReadBufferSizeBytes = 0x2000;
private const int DefaultTimeout = 5000;

private event EventHandler<string> FileReadCompleted = delegate { };
private event EventHandler FileWriteAccepted;
private event EventHandler<string> FileDataReceived;
public event ConnectionStateChangedHandler ConnectionStateChanged = delegate { };
private event EventHandler<string> FileReadCompleted = default!;
private event EventHandler FileWriteAccepted = default!;
private event EventHandler<string> FileDataReceived = default!;
public event ConnectionStateChangedHandler ConnectionStateChanged = default!;

private readonly SerialPort _port;
private readonly ILogger? _logger;
Expand Down Expand Up @@ -1178,7 +1178,7 @@ public override async Task<string> GetPublicKey(CancellationToken? cancellationT
{
var command = RequestBuilder.Build<GetPublicKeyRequest>();

string? contents = null;
string contents = string.Empty;

void OnFileDataReceived(object? sender, string data)
{
Expand Down
4 changes: 2 additions & 2 deletions Source/v2/Meadow.Hcom/Connections/TcpConnection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ namespace Meadow.Hcom;

public class TcpConnection : ConnectionBase
{
private HttpClient _client;
private string _baseUri;
private readonly HttpClient _client;
private readonly string _baseUri;

public override string Name => _baseUri;

Expand Down
2 changes: 1 addition & 1 deletion Source/v2/Meadow.Hcom/SerialRequests/RequestBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
{
public static class RequestBuilder
{
private static uint _sequenceNumber;
//private static uint _sequenceNumber;

public static T Build<T>(uint userData = 0, ushort extraData = 0, ushort protocol = Protocol.HCOM_PROTOCOL_HCOM_VERSION_NUMBER)
where T : Request, new()
Expand Down
2 changes: 1 addition & 1 deletion Source/v2/Meadow.SoftwareManager/DownloadFileStream.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ namespace Meadow.Software;

internal class DownloadFileStream : Stream, IDisposable
{
public event EventHandler<long> DownloadProgress;
public event EventHandler<long> DownloadProgress = default!;

private readonly Stream _stream;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ namespace Meadow.Software;
public class F7FirmwarePackageCollection : IFirmwarePackageCollection
{
/// <inheritdoc/>
public event EventHandler<long> DownloadProgress;
public event EventHandler<long> DownloadProgress = default!;

public event EventHandler<FirmwarePackage?> DefaultVersionChanged;

public string PackageFileRoot { get; }

private List<FirmwarePackage> _f7Packages = new();
private readonly List<FirmwarePackage> _f7Packages = new();

public static string DefaultF7FirmwareStoreRoot = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
Expand Down Expand Up @@ -85,7 +85,7 @@ public Task DeletePackage(string version)

// if we're deleting the default, we need to det another default
var i = _f7Packages.Count - 1;
while (DefaultPackage.Version == _f7Packages[i].Version)
while (DefaultPackage?.Version == _f7Packages[i].Version)
{
i--;
}
Expand Down
2 changes: 1 addition & 1 deletion Source/v2/Meadow.SoftwareManager/FirmwarePackage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ internal FirmwarePackage(IFirmwarePackageCollection collection)
_collection = collection;
}

public string GetFullyQualifiedPath(string file)
public string GetFullyQualifiedPath(string? file)
{
return Path.Combine(_collection.PackageFileRoot, Version, file);
}
Expand Down

0 comments on commit 077f1a0

Please sign in to comment.