WifRssiCheckProcedure.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. using AwInitilizer.Assist;
  2. using CsuWebApiLib;
  3. using InitializerModel;
  4. using Newtonsoft.Json;
  5. using PhihongEv.Lib;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Collections.Specialized;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Text.RegularExpressions;
  13. using System.Threading.Tasks;
  14. namespace AwInitilizer.Procedure.WifRssiCheck
  15. {
  16. public enum ErrorType
  17. {
  18. None,
  19. WifiModeDataNotFound,
  20. WifiModeNotClient,
  21. WifiRssiDataNotFound,
  22. WifiRssiLow,
  23. }
  24. public enum LogEvent
  25. {
  26. WifiRssi
  27. }
  28. public class WifRssiCheckProcedure : ProcedureBase
  29. {
  30. public ErrorType Error { get; set; } = ErrorType.None;
  31. private ProcedureLog.LogWriter<WifRssiCheckProcedure, LogEvent> LogWriter;
  32. private readonly static Dictionary<LogEvent, string> ReportDict = new Dictionary<LogEvent, string>()
  33. {
  34. { LogEvent.WifiRssi, "WifiRssi" }
  35. };
  36. private readonly static Dictionary<LogEvent, string> LogDict = new Dictionary<LogEvent, string>()
  37. {
  38. { LogEvent.WifiRssi, "Get Wifi Rssi : {0}" }
  39. };
  40. public WifRssiCheckProcedure() : base()
  41. {
  42. Name = "WiFi Rssi Check";
  43. Content = "Check Wifi Rssi Signal";
  44. LogWriter = new ProcedureLog.LogWriter<WifRssiCheckProcedure, LogEvent>(this)
  45. {
  46. ReportPair = ReportDict,
  47. LogPair = LogDict
  48. };
  49. }
  50. internal override async Task<bool> Run()
  51. {
  52. //if (!UpdateData.SystemID.ModelName.Network.Description.Contains("WiFi"))
  53. if (UpdateData.SystemID.ModelName.GetWiFiCnt() == 0)
  54. {
  55. LogWriter.Log("Wifi not supported, skip procedure");
  56. return true;
  57. }
  58. //var updateWifiConfigResult = await SetWifiConfig();
  59. //if (!updateWifiConfigResult)
  60. //{
  61. // LogWriter.Log("set wifi to station failed");
  62. // return false;
  63. //}
  64. var checkResult = await CheckWifiRssi();
  65. return checkResult;
  66. }
  67. internal async Task<bool> SetWifiConfig()
  68. {
  69. var ssid = AppSettingConfig.Instance.WifiApSSID;
  70. var pwd = AppSettingConfig.Instance.WifiApPassword;
  71. EvApiResult<bool> cmdResult;
  72. int retryCnt = 0;
  73. do
  74. {
  75. LogWriter.Log("Trying to set wifi to station mode");
  76. cmdResult = await EvApi.SetWifiStationMode(ssid, pwd);
  77. if (cmdResult != null && cmdResult.Result)
  78. {
  79. break;
  80. }
  81. await Task.Delay(TimeSpan.FromMinutes(2));
  82. retryCnt++;
  83. }
  84. while (retryCnt < 5);
  85. if (retryCnt >= 5)
  86. {
  87. return false;
  88. }
  89. var restartResult = await EvApi.Restart();
  90. if (restartResult == null || !restartResult.Result)
  91. {
  92. return false;
  93. }
  94. int pollingCnt;
  95. for (pollingCnt = 0; pollingCnt < 16; pollingCnt++)
  96. {
  97. await Task.Delay(TimeSpan.FromSeconds(15));
  98. var response = await ChekCsuBootCompelete();
  99. if (response)
  100. break;
  101. }
  102. if (pollingCnt == 16)
  103. {
  104. LogWriter.Log("Wait reboot complete time out");
  105. }
  106. return cmdResult.Result;
  107. }
  108. internal async Task<bool> CheckWifiRssi()
  109. {
  110. var rssi = await GetWifiRssi();
  111. //LogWriter.Report(LogEvent.WifiRssi, rssi.ToString());
  112. if (rssi == 0)
  113. {
  114. LogWriter.Report(LogEvent.WifiRssi, rssi.ToString(), isError: true);
  115. return false;
  116. }
  117. else
  118. {
  119. var rssiCheckPass = rssi >= -80;
  120. if (rssiCheckPass)
  121. {
  122. LogWriter.Report(LogEvent.WifiRssi, rssi.ToString());
  123. return true;
  124. }
  125. else
  126. {
  127. Error = ErrorType.WifiRssiLow;
  128. LogWriter.Report(LogEvent.WifiRssi, rssi.ToString(), isError: true);
  129. return false;
  130. }
  131. }
  132. }
  133. internal async Task<int> GetWifiRssi()
  134. {
  135. try
  136. {
  137. var result = await EvApi.GetWifiRssi();
  138. switch (result.Result.ErrorCode)
  139. {
  140. case 0:
  141. case 2:
  142. Error = ErrorType.WifiModeDataNotFound;
  143. break;
  144. case 1:
  145. Error = ErrorType.WifiModeNotClient;
  146. break;
  147. case 3:
  148. case 4:
  149. case 5:
  150. Error = ErrorType.WifiRssiDataNotFound;
  151. break;
  152. default:
  153. break;
  154. }
  155. LogWriter.Log($"GetResponse:{result.Response}", isDebugLog: true);
  156. return result.Result.Rssi;
  157. }
  158. catch (Exception e)
  159. {
  160. Error = ErrorType.WifiRssiDataNotFound;
  161. LogWriter.Log("Get Wifi Rssi Failed");
  162. LogWriter.Log(e.Message, isDebugLog: true);
  163. return 0;
  164. }
  165. }
  166. }
  167. }