Skip to content
This repository has been archived by the owner on Aug 1, 2022. It is now read-only.

Commit

Permalink
Updated to use System.IO.Ports NuGet, struggling with lack of Debug.W…
Browse files Browse the repository at this point in the history
…rite...
  • Loading branch information
KiwiBryn committed Sep 7, 2021
1 parent d52a425 commit 849c9cb
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 82 deletions.
13 changes: 4 additions & 9 deletions FactoryReset/01.FactoryReset.nfproj
Original file line number Diff line number Diff line change
Expand Up @@ -37,18 +37,13 @@
<Private>True</Private>
<SpecificVersion>True</SpecificVersion>
</Reference>
<Reference Include="Windows.Devices.Gpio, Version=1.5.2.3, Culture=neutral, PublicKeyToken=c07d481e9758c731">
<HintPath>..\packages\nanoFramework.Windows.Devices.Gpio.1.5.2\lib\Windows.Devices.Gpio.dll</HintPath>
<Reference Include="System.IO.Ports, Version=1.0.0.2, Culture=neutral, PublicKeyToken=c07d481e9758c731">
<HintPath>..\packages\nanoFramework.System.IO.Ports.1.0.0\lib\System.IO.Ports.dll</HintPath>
<Private>True</Private>
<SpecificVersion>True</SpecificVersion>
</Reference>
<Reference Include="Windows.Devices.SerialCommunication, Version=1.3.4.3, Culture=neutral, PublicKeyToken=c07d481e9758c731">
<HintPath>..\packages\nanoFramework.Windows.Devices.SerialCommunication.1.3.4\lib\Windows.Devices.SerialCommunication.dll</HintPath>
<Private>True</Private>
<SpecificVersion>True</SpecificVersion>
</Reference>
<Reference Include="Windows.Storage.Streams, Version=1.12.2.3, Culture=neutral, PublicKeyToken=c07d481e9758c731">
<HintPath>..\packages\nanoFramework.Windows.Storage.Streams.1.12.2\lib\Windows.Storage.Streams.dll</HintPath>
<Reference Include="Windows.Devices.Gpio, Version=1.5.2.3, Culture=neutral, PublicKeyToken=c07d481e9758c731">
<HintPath>..\packages\nanoFramework.Windows.Devices.Gpio.1.5.2\lib\Windows.Devices.Gpio.dll</HintPath>
<Private>True</Private>
<SpecificVersion>True</SpecificVersion>
</Reference>
Expand Down
121 changes: 50 additions & 71 deletions FactoryReset/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
//---------------------------------------------------------------------------------
// nanoff --target ST_STM32F769I_DISCOVERY --update
//#define SERIAL_SYNC_READ
//#define SERIAL_ASYNC_READ
//#define HARDWARE_RESET
//#define SOFTWARE_RESTART
//#define DEVICE_STATUS
Expand All @@ -24,22 +25,26 @@ namespace devMobile.IoT.Rak811.FactoryReset
{
using System;
using System.Diagnostics;
using System.IO.Ports;
using System.Threading;
#if HARDWARE_RESET
using Windows.Devices.Gpio;
using Windows.Devices.SerialCommunication;
using Windows.Storage.Streams;

#endif

public class Program
{
private const string SerialPortId = "COM6";

public static void Main()
{
SerialDevice serialDevice;

Debug.WriteLine("devMobile.IoT.Rak811.FactoryReset starting");

Debug.WriteLine(Windows.Devices.SerialCommunication.SerialDevice.GetDeviceSelector());
Debug.Write("Ports:");
foreach (string port in SerialPort.GetPortNames())
{
Debug.Write($" {port}");
}
Debug.WriteLine("");

try
{
Expand All @@ -48,78 +53,59 @@ public static void Main()
resetPin.SetDriveMode(GpioPinDriveMode.Output);
resetPin.Write(GpioPinValue.Low);
#endif
serialDevice = SerialDevice.FromId(SerialPortId);

// set parameters
serialDevice.BaudRate = 9600;
serialDevice.Parity = SerialParity.None;
serialDevice.StopBits = SerialStopBitCount.One;
serialDevice.Handshake = SerialHandshake.None;
serialDevice.DataBits = 8;
using (SerialPort serialDevice = new SerialPort(SerialPortId))
{
// set parameters
serialDevice.BaudRate = 9600;
serialDevice.Parity = Parity.None;
serialDevice.StopBits = StopBits.One;
serialDevice.Handshake = Handshake.None;
serialDevice.DataBits = 8;

serialDevice.ReadTimeout = new TimeSpan(0, 0, 30);
serialDevice.WriteTimeout = new TimeSpan(0, 0, 4);
serialDevice.ReadTimeout = 5000;

DataWriter outputDataWriter = new DataWriter(serialDevice.OutputStream);
serialDevice.NewLine = "\r\n";

#if SERIAL_SYNC_READ
DataReader inputDataReader = new DataReader(serialDevice.InputStream);
#else
serialDevice.DataReceived += SerialDevice_DataReceived;
#endif
serialDevice.Open();

// set a watch char to be notified when it's available in the input stream
serialDevice.WatchChar = '\n';
#if SERIAL_ASYNC_READ
serialDevice.DataReceived += SerialDevice_DataReceived;

while (true)
{
// set a watch char to be notified when it's available in the input stream
serialDevice.WatchChar = '\n';
#endif

while (true)
{
#if HARDWARE_RESET
resetPin.Write(GpioPinValue.High);
Thread.Sleep(10);
resetPin.Write(GpioPinValue.Low);
resetPin.Write(GpioPinValue.High);
Thread.Sleep(10);
resetPin.Write(GpioPinValue.Low);
#endif

#if SOFTWARE_RESTART
uint bytesWritten = outputDataWriter.WriteString("at+set_config=device:restart\r\n");
Debug.WriteLine($"TX: {outputDataWriter.UnstoredBufferLength} bytes to output stream.");

// calling the 'Store' method on the data writer actually sends the data
uint txByteCount = outputDataWriter.Store();
Debug.WriteLine($"TX: {txByteCount} bytes via {serialDevice.PortName}");
serialDevice.WriteLine("at+set_config=device:restart");
#endif

#if DEVICE_STATUS
uint bytesWritten = outputDataWriter.WriteString("at+get_config=device:status\r\n");
Debug.WriteLine($"TX: {outputDataWriter.UnstoredBufferLength} bytes to output stream.");

// calling the 'Store' method on the data writer actually sends the data
uint txByteCount = outputDataWriter.Store();
Debug.WriteLine($"TX: {txByteCount} bytes via {serialDevice.PortName}");
serialDevice.WriteLine("at+get_config=device:status");
#endif

#if LORA_STATUS
uint bytesWritten = outputDataWriter.WriteString("at+get_config=lora:status\r\n");
Debug.WriteLine($"TX: {outputDataWriter.UnstoredBufferLength} bytes to output stream.");

// calling the 'Store' method on the data writer actually sends the data
uint txByteCount = outputDataWriter.Store();
Debug.WriteLine($"TX: {txByteCount} bytes via {serialDevice.PortName}");
serialDevice.WriteLine("at+get_config=lora:status");
#endif

#if SERIAL_SYNC_READ
// June 2020 appears to be limited to 256 chars
uint bytesRead = inputDataReader.Load(50);
Thread.Sleep(500);

Debug.WriteLine($"RXs :{bytesRead} bytes read from {serialDevice.PortName}");
string response = serialDevice.ReadExisting();

if (bytesRead > 0)
{
String response = inputDataReader.ReadString(bytesRead);
Debug.WriteLine($"RX sync:{response}");
}
Debug.WriteLine($"RX :{response.Trim()} bytes:{response.Length} read from {serialDevice.PortName}");
#endif

Thread.Sleep(20000);
Thread.Sleep(20000);
}
}
}
catch (Exception ex)
Expand All @@ -128,45 +114,38 @@ public static void Main()
}
}

#if SERIAL_ASYNC_READ
private static void SerialDevice_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
switch (e.EventType)
switch(e.EventType)
{
case SerialData.Chars:
//Debug.WriteLine("RX SerialData.Chars");
break;

case SerialData.WatchChar:
Debug.WriteLine("RX: SerialData.WatchChar");
SerialDevice serialDevice = (SerialDevice)sender;

using (DataReader inputDataReader = new DataReader(serialDevice.InputStream))
{
inputDataReader.InputStreamOptions = InputStreamOptions.Partial;
SerialPort serialDevice = (SerialPort)sender;

// read all available bytes from the Serial Device input stream
uint bytesRead = inputDataReader.Load(serialDevice.BytesToRead);
string response = serialDevice.ReadExisting();

Debug.WriteLine($"RXa: {bytesRead} bytes read from {serialDevice.PortName}");

if (bytesRead > 0)
{
String response = inputDataReader.ReadString(bytesRead);
Debug.WriteLine($"RX:{response}");
}
}
Debug.WriteLine($"RX :{response.Trim()} bytes:{response.Length} read from {serialDevice.PortName}");
break;
default:
Debug.Assert(false, $"e.EventType {e.EventType} unknown");
break;
}
}
#endif

#if HARDWARE_RESET
static int PinNumber(char port, byte pin)
{
if (port < 'A' || port > 'J')
throw new ArgumentException();

return ((port - 'A') * 16) + pin;
}
#endif
}
}
3 changes: 1 addition & 2 deletions FactoryReset/packages.config
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@
<packages>
<package id="nanoFramework.CoreLibrary" version="1.10.5" targetFramework="netnanoframework10" />
<package id="nanoFramework.Runtime.Events" version="1.9.1" targetFramework="netnanoframework10" />
<package id="nanoFramework.System.IO.Ports" version="1.0.0" targetFramework="netnanoframework10" />
<package id="nanoFramework.System.Text" version="1.1.1" targetFramework="netnanoframework10" />
<package id="nanoFramework.Windows.Devices.Gpio" version="1.5.2" targetFramework="netnanoframework10" />
<package id="nanoFramework.Windows.Devices.SerialCommunication" version="1.3.4" targetFramework="netnanoframework10" />
<package id="nanoFramework.Windows.Storage.Streams" version="1.12.2" targetFramework="netnanoframework10" />
</packages>

0 comments on commit 849c9cb

Please sign in to comment.