public static async Task ProcessMessage(string message) { using (var releaser = await myLock.LockAsync()) { try { // Construct default (error) JSON. string json = "{\"Command\": \"\", \"Result\": -99}"; // Check EMR3 thread is running. If it is // not then wait until it is. while (!Emr3.IsRunning()) { await Task.Delay(250); } // Split the message around commas. string[] parts = message.Split(new char[] { ',' }); // Check there is at least one part if (parts.Length >= 1) { switch (parts[0]) { case "BL": // Bootloader. //SystemUpdate.AccessBootloader(); break; case "Gv": // Get Version. await ParentPage.ResetTimer(); json = string.Format("{{\"Command\": \"Gv\", \"Result\": 0, \"Version\": {0}.{1}, \"Model\":\"{2}\"}}", MainPage.MajorVersion, MainPage.MinorVersion, MainPage.Model); break; case "Gf": // Get features. json = Emr3.GetFeatures(); break; case "Gt": // Get temperature. json = await Emr3.GetTemperature(); break; case "Gs": // Get status. json = await Emr3.GetStatus(); break; case "Gpl": // Get preset litres. json = await Emr3.GetPreset(); break; case "Grl": // Get realtime litres. json = await Emr3.GetRealtime(); break; case "Gtc": // Get transaction count json = await Emr3.GetTranCount(); break; case "Gtr": // Get transaction record await ParentPage.ResetTimer(); if (parts.Length == 2) { json = await Emr3.GetTran(parts[1]); } break; case "Spl": // Set polling. if (parts.Length == 2) { json = Emr3.SetPolling(parts[1]); } break; case "Sp": // Set preset. await ParentPage.ResetTimer(); if (parts.Length == 2) { json = await Emr3.SetPreset(parts[1]); } break; case "NOP": await ParentPage.ResetTimer(); json = "{\"Command\": \"NOP\", \"Result\": 0}"; break; default: json = string.Format("{{\"Command\": \"{0}\", \"Result\": -99}}", parts[0]); break; } } // Send reply to PDA. await SendMessage(json); } catch (Exception ex) { Debug.WriteLine("PDA.ProcessMessage: Exception " + ex.Message); } } }