Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion Source/ArduinoUploader/ArduinoSketchUploader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ public void UploadSketch(IEnumerable<string> hexFileContents)
IMcu mcu;

var model = _options.ArduinoModel.ToString();

var hardwareConfig = ReadConfiguration();
var modelOptions = hardwareConfig.Arduinos.SingleOrDefault(
x => x.Model.Equals(model, StringComparison.OrdinalIgnoreCase));
Expand All @@ -100,10 +101,12 @@ public void UploadSketch(IEnumerable<string> hexFileContents)
var preOpenResetBehavior = ParseResetBehavior(modelOptions.PreOpenResetBehavior);
var postOpenResetBehavior = ParseResetBehavior(modelOptions.PostOpenResetBehavior);
var closeResetBehavior = ParseResetBehavior(modelOptions.CloseResetBehavior);
var triggerBootloader = (_options.TriggerBootloader) ? true : false;


var serialPortConfig = new SerialPortConfig(serialPortName,
modelOptions.BaudRate, preOpenResetBehavior, postOpenResetBehavior, closeResetBehavior,
modelOptions.SleepAfterOpen, modelOptions.ReadTimeout, modelOptions.WriteTimeout);
modelOptions.SleepAfterOpen, modelOptions.ReadTimeout, modelOptions.WriteTimeout, triggerBootloader);

switch (modelOptions.Protocol)
{
Expand Down
2 changes: 2 additions & 0 deletions Source/ArduinoUploader/ArduinoSketchUploaderOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,7 @@ public class ArduinoSketchUploaderOptions
public string PortName { get; set; }

public ArduinoModel ArduinoModel { get; set; }

public bool TriggerBootloader { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,30 +14,36 @@ public SerialPortStream Reset(SerialPortStream serialPort, SerialPortConfig conf
Logger?.Info("Issuing forced 1200bps reset...");
var currentPortName = serialPort.PortName;
var originalPorts = SerialPortStream.GetPortNames();
var newPort = currentPortName;

// Close port ...
serialPort.Close();

// And now open port at 1200 bps
serialPort = new SerialPortStream(currentPortName, 1200)
if (config.TriggerBootloader)
{
Handshake = Handshake.DtrRts
};
serialPort.Open();

// Close and wait for a new virtual COM port to appear ...
serialPort.Close();

var newPort = WaitHelper.WaitFor(timeoutVirtualPortDiscovery, virtualPortDiscoveryInterval,
() => SerialPortStream.GetPortNames().Except(originalPorts).SingleOrDefault(),
(i, item, interval) =>
item == null
? $"T+{i * interval} - Port not found"
: $"T+{i * interval} - Port found: {item}");
// Close port ...
serialPort.Close();

// And now open port at 1200 bps
serialPort = new SerialPortStream(currentPortName, 1200)
{
Handshake = Handshake.DtrRts
};
serialPort.Open();

// Close and wait for a new virtual COM port to appear ...
serialPort.Close();

newPort = WaitHelper.WaitFor(timeoutVirtualPortDiscovery, virtualPortDiscoveryInterval,
() => SerialPortStream.GetPortNames().Except(originalPorts).SingleOrDefault(),
(i, item, interval) =>
item == null
? $"T+{i * interval} - Port not found"
: $"T+{i * interval} - Port found: {item}");

if (newPort == null)
throw new ArduinoUploaderException(
$"No (unambiguous) virtual COM port detected (after {timeoutVirtualPortDiscovery}ms).");
}

if (newPort == null)
throw new ArduinoUploaderException(
$"No (unambiguous) virtual COM port detected (after {timeoutVirtualPortDiscovery}ms).");

return new SerialPortStream
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ public SerialPortConfig(
IResetBehavior closeResetAction,
int sleepAfterOpen = 0,
int readTimeout = DefaultTimeout,
int writeTimeout = DefaultTimeout)
int writeTimeout = DefaultTimeout,
bool triggerBootloader = true)
{
PortName = portName;
BaudRate = baudRate;
Expand All @@ -24,6 +25,7 @@ public SerialPortConfig(
SleepAfterOpen = sleepAfterOpen;
ReadTimeOut = readTimeout;
WriteTimeOut = writeTimeout;
TriggerBootloader = triggerBootloader;
}

public string PortName { get; set; }
Expand All @@ -34,5 +36,7 @@ public SerialPortConfig(
public int SleepAfterOpen { get; set; }
public int ReadTimeOut { get; set; }
public int WriteTimeOut { get; set; }
public bool TriggerBootloader { get; set; }

}
}