public async Task <IActionResult> Send(/*[FromBody] SetServos request*/) // cannot deserialize into struct { using (var reader = new StreamReader(Request.Body)) { var payload = await reader.ReadToEndAsync(); var request = JsonConvert.DeserializeObject <SetServos>(payload); var quokkPayload = QuokkaJson.SerializeObject(new[] { request }); var quokkPayloadBytes = Encoding.ASCII.GetBytes(quokkPayload); var port = new SerialPort(); port.PortName = "COM3"; port.BaudRate = 115200;// 9600; port.Parity = Parity.None; port.DataBits = 8; port.StopBits = StopBits.Two; port.Handshake = Handshake.None; port.Open(); port.Write(quokkPayloadBytes, 0, quokkPayloadBytes.Length); port.Close(); return(Ok("Ok")); } }
static void Main(string[] args) { var request = new SetServos() { s0 = 90, s1 = 90, s2 = 90, s3 = 90, }; while (true) { try { Console.WriteLine($"ServoID => value"); var servoId = Console.ReadLine(); if (servoId == "") { break; } var servoValue = Console.ReadLine(); if (servoValue == "") { break; } var port = new SerialPort(); port.PortName = "COM3"; port.BaudRate = 115200;// 9600; port.Parity = Parity.None; port.DataBits = 8; port.StopBits = StopBits.Two; port.Handshake = Handshake.None; var data = new byte[] { byte.Parse(servoId), byte.Parse(servoValue), }; var prop = request.GetType().GetField($"s{data[0]}"); TypedReference tr = __makeref(request); prop.SetValueDirect(tr, data[1]); var payload = QuokkaJson.SerializeObject(new[] { request }); var bytes = Encoding.ASCII.GetBytes(payload); port.Open(); port.Write(bytes, 0, bytes.Length); Console.WriteLine("Waiting for response ..."); var buff = new byte[10]; var received = port.Read(buff, 0, 2); foreach (var resp in buff.Take(received)) { Console.WriteLine($"Got {resp}"); } port.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } }