From 849c9cb4f7af90e27746c15b58b24c3a880f880e Mon Sep 17 00:00:00 2001 From: Bryn Howell Lewis Date: Tue, 7 Sep 2021 19:33:51 +1200 Subject: [PATCH] Updated to use System.IO.Ports NuGet, struggling with lack of Debug.Write... --- FactoryReset/01.FactoryReset.nfproj | 13 +-- FactoryReset/Program.cs | 121 ++++++++++++---------------- FactoryReset/packages.config | 3 +- 3 files changed, 55 insertions(+), 82 deletions(-) diff --git a/FactoryReset/01.FactoryReset.nfproj b/FactoryReset/01.FactoryReset.nfproj index 9daa008..b7416eb 100644 --- a/FactoryReset/01.FactoryReset.nfproj +++ b/FactoryReset/01.FactoryReset.nfproj @@ -37,18 +37,13 @@ True True - - ..\packages\nanoFramework.Windows.Devices.Gpio.1.5.2\lib\Windows.Devices.Gpio.dll + + ..\packages\nanoFramework.System.IO.Ports.1.0.0\lib\System.IO.Ports.dll True True - - ..\packages\nanoFramework.Windows.Devices.SerialCommunication.1.3.4\lib\Windows.Devices.SerialCommunication.dll - True - True - - - ..\packages\nanoFramework.Windows.Storage.Streams.1.12.2\lib\Windows.Storage.Streams.dll + + ..\packages\nanoFramework.Windows.Devices.Gpio.1.5.2\lib\Windows.Devices.Gpio.dll True True diff --git a/FactoryReset/Program.cs b/FactoryReset/Program.cs index 6f21e5e..f798714 100644 --- a/FactoryReset/Program.cs +++ b/FactoryReset/Program.cs @@ -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 @@ -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 { @@ -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) @@ -128,9 +114,10 @@ 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"); @@ -138,29 +125,20 @@ private static void SerialDevice_DataReceived(object sender, SerialDataReceivedE 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') @@ -168,5 +146,6 @@ static int PinNumber(char port, byte pin) return ((port - 'A') * 16) + pin; } +#endif } } diff --git a/FactoryReset/packages.config b/FactoryReset/packages.config index 85c9685..7325230 100644 --- a/FactoryReset/packages.config +++ b/FactoryReset/packages.config @@ -2,8 +2,7 @@ + - - \ No newline at end of file