Basic connectivity
Over the weekend I have been working on a GHI Electronics TinyCLR V2 C# library for my modified RAK811 LPWAN Evaluation Board(EVB) from RAK Wireless. My initial test rig is based on an Fezduino board which has Arduino Uno R3 format socket for the EVB.

The code has compile time options for synchronous and asynchronous operation.
public class Program { private static UartController serialDevice; private const string ATCommand = "at+version\r\n"; #if TINYCLR_V2_FEZDUINO private static string SerialPortId = SC20100.UartPort.Uart5; #endif public static void Main() { Debug.WriteLine("devMobile.IoT.Rak811.ShieldSerial starting"); try { serialDevice = UartController.FromName(SerialPortId); serialDevice.SetActiveSettings(new UartSetting() { BaudRate = 9600, Parity = UartParity.None, StopBits = UartStopBitCount.One, Handshaking = UartHandshake.None, DataBits = 8 }); serialDevice.Enable(); #if SERIAL_ASYNC_READ serialDevice.DataReceived += SerialDevice_DataReceived; #endif while (true) { byte[] txBuffer = UTF8Encoding.UTF8.GetBytes(ATCommand); int txByteCount = serialDevice.Write(txBuffer); Debug.WriteLine($"TX: {txByteCount} bytes"); #if SERIAL_SYNC_READ while( serialDevice.BytesToWrite>0) { Debug.WriteLine($" BytesToWrite {serialDevice.BytesToWrite}"); Thread.Sleep(100); } int rxByteCount = serialDevice.BytesToRead; if (rxByteCount>0) { byte[] rxBuffer = new byte[rxByteCount]; serialDevice.Read(rxBuffer); Debug.WriteLine($"RX sync:{rxByteCount} bytes read"); String response = UTF8Encoding.UTF8.GetString(rxBuffer); Debug.WriteLine($"RX sync:{response}"); } #endif Thread.Sleep(20000); } } catch (Exception ex) { Debug.WriteLine(ex.Message); } } #if SERIAL_ASYNC_READ private static void SerialDevice_DataReceived(UartController sender, DataReceivedEventArgs e) { byte[] rxBuffer = new byte[e.Count]; serialDevice.Read(rxBuffer, 0, e.Count); Debug.WriteLine($"RX Async:{e.Count} bytes read"); String response = UTF8Encoding.UTF8.GetString(rxBuffer); Debug.WriteLine($"RX Async:{response}"); } #endif }
When I first ran the code I noticed the serialDevice.Read timed out before any characters were received.
The thread '<No Name>' (0x2) has exited with code 0 (0x0). devMobile.IoT.Rak811.ShieldSerial starting TX: 12 bytes TX: 12 bytes RX sync:19 bytes read RX sync:OK V3.0.0.13.H.T3 TX: 12 bytes RX sync:19 bytes read RX sync:OK V3.0.0.13.H.T3 TX: 12 bytes RX sync:19 bytes read RX sync:OK V3.0.0.13.H.T3
I then added code to check the message had been sent and the code worked as expected. I now think, that rather than checking that the characters had been sent the short 100mSec delay was more important.
The thread '<No Name>' (0x2) has exited with code 0 (0x0). devMobile.IoT.Rak811.ShieldSerial starting TX: 12 bytes BytesToWrite 10 RX sync:19 bytes read RX sync:OK V3.0.0.13.H.T3 TX: 12 bytes BytesToWrite 10 RX sync:19 bytes read RX sync:OK V3.0.0.13.H.T3 TX: 12 bytes BytesToWrite 10 RX sync:19 bytes read RX sync:OK V3.0.0.13.H.T3
I then added code to receive data asynchronously and the response to the version request was received as expected.
The thread '<No Name>' (0x2) has exited with code 0 (0x0). devMobile.IoT.Rak811.ShieldSerial starting TX: 12 bytes RX Async:1 bytes read RX Async:O RX Async:8 bytes read RX Async:K V3.0.0 RX Async:10 bytes read RX Async:.13.H.T3 TX: 12 bytes RX Async:1 bytes read RX Async:O RX Async:5 bytes read RX Async:K V3. RX Async:9 bytes read RX Async:0.0.13.H. RX Async:4 bytes read RX Async:T3