using AwInitilizer.Model; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows; namespace AwInitilizer.Assist { public class EvApiResult { public T Result { get; set; } public string Response { get; set; } } public class EvApiWifiResult { public int Rssi { get; set; } public int ErrorCode { get; set; } } public static class EvApi { internal static async Task> ChekCsuBootCompelete() { var getResult = await EvHttpClient.GetQueryActionOpt2String(); if (!getResult.IsSuccess || string.IsNullOrEmpty(getResult.Msg)) { return new EvApiResult() { Response = getResult.Msg, Result = false }; } Regex rx = new Regex("(SystemStatus)\\\": ([0-9]*)"); var matches = rx.Matches(getResult.Msg); if (matches.Count == 0) { return new EvApiResult() { Result = false, Response = getResult.Msg }; } bool isAllPassed = true; for (int matchIndex = 0; matchIndex < matches.Count; matchIndex++) { var match = matches[matchIndex]; if (match.Groups.Count != 3) { isAllPassed = false; break; } else { if (match.Groups[2].Value != "1") { isAllPassed = false; break; } } } return new EvApiResult() { Result = isAllPassed, Response = getResult.Msg, }; } internal static async Task> CheckGetQueryAction() { var getResult = await EvHttpClient.GetQueryActionOpt2String(); if (!getResult.IsSuccess || string.IsNullOrEmpty(getResult.Msg)) { return new EvApiResult() { Response = getResult.Msg, Result = false }; } return new EvApiResult() { Result = !string.IsNullOrEmpty(getResult.Msg), Response = getResult.Msg }; } internal static async Task> GetButtonStatus() { var getResult = await EvHttpClient.GetButtonStatusString(); var result = getResult.Msg; if (!getResult.IsSuccess) { return new EvApiResult() { Result = null, Response = getResult.Msg }; } if (!result.Contains("Button1") || !result.Contains("Button2")) { return new EvApiResult() { Result = null, Response = result }; } var values = JsonConvert.DeserializeObject(result); return new EvApiResult() { Result = values, Response = result, }; } internal static async Task>> GetVersion() { var getResult = await EvHttpClient.GetQueryActionOpt1String(); var toReturn = new Dictionary(); string result = getResult.Msg; if (!getResult.IsSuccess) { return new EvApiResult>() { Result = null, Response = getResult.Msg, }; } var values = JsonConvert.DeserializeObject>(result); foreach (var pair in values) { if (pair.Value is string v) { toReturn.Add(pair.Key, v); } else if (pair.Value is Newtonsoft.Json.Linq.JArray a) { try { var versionList = JsonConvert.DeserializeObject>(a.ToString()); for (int index = 0; index < versionList.Count; index++) { toReturn.Add(string.Format("{0}{1}", pair.Key, index), versionList[index]); } } catch { } } } return new EvApiResult>() { Result = toReturn, Response = result }; } internal static async Task> GetTelcomModemImei() { var getResult = await EvHttpClient.GetQueryActionOpt3String(); string result = getResult.Msg; if (!getResult.IsSuccess) { return new EvApiResult() { Result = null, Response = getResult.Msg, }; } Regex rx = new Regex("(TelcomModemImei)\\\": \"([0-9]*)\""); var matches = rx.Matches(result); string imeiString = string.Empty; if (matches.Count != 0) { var match = matches[0]; if (match.Groups.Count != 3) { imeiString = string.Empty; } else { if (match.Groups[2].Value is string imei) { imeiString = imei; } else { imeiString = ""; } } } else { imeiString = ""; } return new EvApiResult() { Result = imeiString, Response = result }; } internal static async Task> GetWifiRssi() { var getResult = await EvHttpClient.GetQueryActionOpt3String(); string result = getResult.Msg; if (!getResult.IsSuccess) { return new EvApiResult() { Result = new EvApiWifiResult() { Rssi = 0, ErrorCode = 0 }, Response = getResult.Msg, }; } Regex rx_mode = new Regex("(WifiMode)\\\": ([0-9]*)"); var matches_mode = rx_mode.Matches(result); int rssi = 0; int errorCode = -1; if (matches_mode.Count != 0) { var match = matches_mode[0]; if (match.Groups.Count != 3) { errorCode = 0; } else { if (int.TryParse(match.Groups[2].Value, out var wifiMode)) { if (wifiMode != 1) { errorCode = 1; } } } } else { errorCode = 2; } if (errorCode != -1) { return new EvApiResult() { Result = new EvApiWifiResult() { Rssi = rssi, ErrorCode = errorCode }, Response = result }; } Regex rx = new Regex("(WifiRssi)\\\": (-?[0-9]*)"); var matches = rx.Matches(result); if (matches.Count != 0) { var match = matches[0]; if (match.Groups.Count != 3) { errorCode = 3; } else { if (int.TryParse(match.Groups[2].Value, out var rssiSignal)) { rssi = rssiSignal; } else { errorCode = 4; } } } else { errorCode = 5; } return new EvApiResult() { Result = new EvApiWifiResult() { Rssi = rssi, ErrorCode = errorCode }, Response = result }; } internal static async Task>> GetConnectorStatus() { var getResult = await EvHttpClient.GetQueryActionOpt2String(); Dictionary connectorStatusPair = new Dictionary(); string result = getResult.Msg; if (!getResult.IsSuccess) { return new EvApiResult>() { Result = null, Response = getResult.Msg }; } Regex rx = new Regex("(SystemStatus)\\\": (\\d)"); var matches = rx.Matches(result); for (int matchIndex = 0; matchIndex < matches.Count; matchIndex++) { var match = matches[matchIndex]; if (match.Groups.Count != 3) { //LogWriter.Log($"Connector {matchIndex} status string mismatched"); return new EvApiResult>() { Result = null, Response = result }; //InfoLog += $"Connector {matchIndex} status string mismatched\n"; //Logger.Print($"Connector {matchIndex} status string mismatched", isError:true); } else { connectorStatusPair.Add(matchIndex, match.Groups[2].Value); } } return new EvApiResult>() { Result = connectorStatusPair, Response = result, }; } internal static async Task> FactorySet() { var getResult = await EvHttpClient.GetFactorySetResultString(); var result = getResult.Msg; if (!getResult.IsSuccess) { return new EvApiResult() { Result = false, Response = getResult.Msg }; } Regex rx = new Regex("(result)\":\"([a-zA-Z]*)\""); var matches = rx.Matches(result); if (matches.Count > 0 && matches[0].Success && matches[0].Groups.Count == 3 && matches[0].Groups[2].Value.ToLower() == "success") { return new EvApiResult() { Result = true, Response = result }; } return new EvApiResult() { Result = false, Response = result }; } internal static async Task> SignalUpdateFirmware() { var result = await EvHttpClient.GetSignalUpdateFirmwareResultString(); if (!result.IsSuccess) { return new EvApiResult() { Result = false, Response = result.Msg }; } return new EvApiResult() { Result = !string.IsNullOrEmpty(result.Msg), Response = result.Msg, }; } internal static async Task> SetAuthorisationMode(bool isAuthRequired) { var result = await EvHttpClient.SetSystemAction("AuthorisationMode", isAuthRequired ? "0" : "1"); if (!result.IsSuccess) { return new EvApiResult() { Result = false, Response = result.Msg }; } return new EvApiResult() { Result = !string.IsNullOrEmpty(result.Msg), Response = result.Msg, }; } internal static async Task> GetTelcomModemFwRev() { var key = "TelcomModemFwRev"; var result = await GetVersion(); if (result.Result is null) { return new EvApiResult { Result = null, Response = result.Response }; } var versionPairs = result.Result; if (versionPairs is null || !versionPairs.ContainsKey(key)) { return new EvApiResult { Result = string.Empty, Response = result.Response }; } return new EvApiResult { Result = versionPairs[key], Response = result.Response }; } internal static async Task> GetTelcomSubModemFwRev() { var key = "TelcomSubModemFwRev"; var result = await GetVersion(); if (result.Result is null) { return new EvApiResult { Result = null, Response = result.Response }; } var versionPairs = result.Result; if (versionPairs is null || !versionPairs.ContainsKey(key)) { return new EvApiResult { Result = string.Empty, Response = result.Response }; } return new EvApiResult { Result = versionPairs[key], Response = result.Response }; } internal static async Task> GetTelcomSimStatus() { var result = await EvHttpClient.GetQueryActionOpt3String(); if (!result.IsSuccess) { return new EvApiResult() { Result = null, Response = result.Msg }; } var simStatus = GetIntValue("TelcomSimStatus", result.Msg); var simIccid = GetStringValue("TelcomSimIccid", result.Msg); var simImsi = GetStringValue("TelcomSimImsi", result.Msg); return new EvApiResult() { Result = new SimStatusString() { IsInstalled = simStatus == 1, ICCID = simIccid, IMSI = simImsi }, Response = result.Msg, }; } internal static async Task> GetTelcomSubSimStatus() { var result = await EvHttpClient.GetQueryActionOpt3String(); if (!result.IsSuccess) { return new EvApiResult() { Result = null, Response = result.Msg }; } var simStatus = GetIntValue("TelcomSubSimStatus", result.Msg); var simIccid = GetStringValue("TelcomSubSimIccid", result.Msg); var simImsi = GetStringValue("TelcomSubSimImsi", result.Msg); return new EvApiResult() { Result = new SimStatusString() { IsInstalled = simStatus == 1, ICCID = simIccid, IMSI = simImsi }, Response = result.Msg, }; } /// /// Not Tested /// /// /// [Obsolete] internal static async Task> Uploadfirmware(string fileName) { var result = await EvHttpClient.GetUploadfirmwareResultString(new List { fileName }); if (!result.IsSuccess) { return new EvApiResult() { Result = false, Response = result.Msg }; } return new EvApiResult() { Result = !string.IsNullOrEmpty(result.Msg), Response = result.Msg, }; } /// /// Not tested /// /// /// internal static async Task> Uploadfirmware(List fileNames) { var result = await EvHttpClient.GetUploadfirmwareResultString(fileNames); if (!result.IsSuccess) { return new EvApiResult() { Result = false, Response = result.Msg }; } return new EvApiResult() { Result = !string.IsNullOrEmpty(result.Msg), Response = result.Msg, }; } private static int? GetIntValue(string key, string source) { Regex rx = new Regex($"({key})\\\": ([0-9]*)"); var matches = rx.Matches(source); if (matches.Count != 0) { var match = matches[0]; if (match.Groups.Count != 3) { return null; } else { if (int.TryParse(match.Groups[2].Value, out var val)) { return val; } else { return null; } } } return null; } private static string GetStringValue(string key, string source) { Regex rx = new Regex($"({key})\\\": \"([a-zA-Z0-9]*)\""); var matches = rx.Matches(source); if (matches.Count != 0) { var match = matches[0]; if (match.Groups.Count != 3) { return null; } else { return match.Groups[2].Value; } } return null; } } }