EvseSettingConfig.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. using Newtonsoft.Json;
  2. using PhihongEv.Lib;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Reflection;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace InitializerModel
  11. {
  12. public enum EvseSettingConfigLoadError
  13. {
  14. None,
  15. LoadConfigRootFolderNotfound,
  16. LoadConfigFolderNotfound,
  17. LoadConfigModelFolderNotfound,
  18. LoadConfigModelInitNotfound,
  19. LoadConfigModelInitFormatError,
  20. InitModelNameEmpty,
  21. InitModelNameError,
  22. InitIccidEmpty,
  23. InitImsiEmpty,
  24. InitFirmwareNameEmpty,
  25. InitFirmwareVersionEmpty,
  26. InitFirmwareFileEmpty,
  27. InitFirmwareFileMissing,
  28. InitFirmwareFileHeaderFormat,
  29. }
  30. public class EvseSettingConfigLoadResult
  31. {
  32. public EvseSettingConfigLoadError Error { get; set; }
  33. public EvseSettingConfigModel Result { get; set; }
  34. public string ErrorFirmware { get; set; }
  35. public string ConfigFolderPath { get; set; }
  36. }
  37. public static class EvseSettingConfig
  38. {
  39. public static List<string> GetModelList()
  40. {
  41. try
  42. {
  43. var defaultPath = AppSettingConfig.Instance.FirmwareRoot;
  44. if (string.IsNullOrEmpty(defaultPath))
  45. {
  46. defaultPath = ".\\";
  47. }
  48. var settingRootFolder = Path.GetFullPath(defaultPath);
  49. var frimwareDirectorys = Directory.GetDirectories(settingRootFolder);
  50. return frimwareDirectorys.Select(x => Path.GetFileName(x)).ToList();
  51. }
  52. catch
  53. {
  54. }
  55. return new List<string>();
  56. }
  57. public static string GetModelFolder(string modelName)
  58. {
  59. var defaultPath = AppSettingConfig.Instance.FirmwareRoot;
  60. if (string.IsNullOrEmpty(defaultPath))
  61. {
  62. defaultPath = ".\\";
  63. }
  64. var settingRootFolder = Path.GetFullPath(defaultPath);
  65. string modelDirectoy = Path.Combine(settingRootFolder, modelName);
  66. return modelDirectoy;
  67. }
  68. public static string GetModelIniPath(string modelName)
  69. {
  70. var modelDirectoy = GetModelFolder(modelName);
  71. string modelSeettingFilePath = Path.Combine(modelDirectoy, modelName + ".ini");
  72. return modelSeettingFilePath;
  73. }
  74. public static EvseSettingConfigLoadResult TryLoad(string modelName)
  75. {
  76. var toReturn = new EvseSettingConfigLoadResult();
  77. string settingRootFolder;
  78. try
  79. {
  80. var defaultPath = AppSettingConfig.Instance.FirmwareRoot;
  81. if (string.IsNullOrEmpty(defaultPath))
  82. {
  83. defaultPath = ".\\";
  84. }
  85. settingRootFolder = Path.GetFullPath(defaultPath);
  86. }
  87. catch
  88. {
  89. toReturn.Error = EvseSettingConfigLoadError.LoadConfigRootFolderNotfound;
  90. return toReturn;
  91. }
  92. if (!Directory.Exists(settingRootFolder))
  93. {
  94. toReturn.Error = EvseSettingConfigLoadError.LoadConfigFolderNotfound;
  95. return toReturn;
  96. }
  97. string modelDirectoy = Path.Combine(settingRootFolder, modelName);
  98. if (!Directory.Exists(modelDirectoy))
  99. {
  100. toReturn.Error = EvseSettingConfigLoadError.LoadConfigModelFolderNotfound;
  101. return toReturn;
  102. }
  103. toReturn.ConfigFolderPath = modelDirectoy;
  104. string modelSeettingFilePath = Path.Combine(modelDirectoy, modelName + ".ini");
  105. if (!File.Exists(modelSeettingFilePath))
  106. {
  107. toReturn.Error = EvseSettingConfigLoadError.LoadConfigModelInitNotfound;
  108. return toReturn;
  109. }
  110. //check format
  111. var settingString = File.ReadAllText(modelSeettingFilePath);
  112. EvseSettingConfigModel setting;
  113. try
  114. {
  115. setting = JsonConvert.DeserializeObject<EvseSettingConfigModel>(settingString);
  116. CompatibilityDataUpdate(setting);
  117. }
  118. catch
  119. {
  120. toReturn.Error = EvseSettingConfigLoadError.LoadConfigModelInitFormatError;
  121. return toReturn;
  122. }
  123. if (string.IsNullOrEmpty(setting.ModelName))
  124. {
  125. toReturn.Error = EvseSettingConfigLoadError.InitModelNameEmpty;
  126. return toReturn;
  127. }
  128. if (!ModelName.TryLooseParse(setting.ModelName, out _))
  129. {
  130. toReturn.Error = EvseSettingConfigLoadError.InitModelNameError;
  131. return toReturn;
  132. }
  133. if (setting.IsSimInsert)
  134. {
  135. if (string.IsNullOrEmpty(setting.SimICCID))
  136. {
  137. toReturn.Error = EvseSettingConfigLoadError.InitIccidEmpty;
  138. return toReturn;
  139. }
  140. if (string.IsNullOrEmpty(setting.SimIMSI))
  141. {
  142. toReturn.Error = EvseSettingConfigLoadError.InitImsiEmpty;
  143. return toReturn;
  144. }
  145. }
  146. if (setting.IsSubSimInsert)
  147. {
  148. if (string.IsNullOrEmpty(setting.SubSimICCID))
  149. {
  150. toReturn.Error = EvseSettingConfigLoadError.InitIccidEmpty;
  151. return toReturn;
  152. }
  153. if (string.IsNullOrEmpty(setting.SubSimIMSI))
  154. {
  155. toReturn.Error = EvseSettingConfigLoadError.InitImsiEmpty;
  156. return toReturn;
  157. }
  158. }
  159. if (setting.FirmwareUpdateList != null)
  160. {
  161. for (int firmwareIndex = 0; firmwareIndex < setting.FirmwareUpdateList.Count; firmwareIndex++)
  162. {
  163. var model = setting.FirmwareUpdateList[firmwareIndex];
  164. bool isVersionVaild = !string.IsNullOrEmpty(model.Version);
  165. bool isFileNameVaild = !string.IsNullOrEmpty(model.FirmwareFileName);
  166. bool isNoduleNameVaild = !string.IsNullOrEmpty(model.Module);
  167. if (!isNoduleNameVaild)
  168. {
  169. //HintDialog.ShowMessage("Firmware module name should not empty");
  170. //HintDialog.ShowMessage(Resx.AppResources.InitFirmwareNameEmptyAlert);
  171. //isCheckPassed = false;
  172. toReturn.Error = EvseSettingConfigLoadError.InitFirmwareNameEmpty;
  173. return toReturn;
  174. }
  175. if (isVersionVaild || isFileNameVaild)
  176. {
  177. if (!isVersionVaild)
  178. {
  179. //HintDialog.ShowMessage($"Version should not empty while {model.Module} firmware is set");
  180. //HintDialog.ShowMessage(string.Format(Resx.AppResources.InitFirmwareVersionEmptyAlert, model.Module));
  181. //isCheckPassed = false;
  182. toReturn.Error = EvseSettingConfigLoadError.InitFirmwareVersionEmpty;
  183. toReturn.ErrorFirmware = model.Module;
  184. return toReturn;
  185. }
  186. //if (!isFileNameVaild)
  187. //{
  188. // //HintDialog.ShowMessage($"File name should not empty while {model.Module} version is set");
  189. // //HintDialog.ShowMessage(string.Format(Resx.AppResources.InitFirmwareFileEmptyAlert, model.Module));
  190. // //isCheckPassed = false;
  191. // toReturn.Error = EvseSettingConfigLoadError.InitFirmwareFileEmpty;
  192. // toReturn.ErrorFirmware = model.Module;
  193. // return toReturn;
  194. //}
  195. var folderPath = System.IO.Path.GetDirectoryName(modelSeettingFilePath);
  196. if (isVersionVaild && isFileNameVaild)
  197. {
  198. var filePath = System.IO.Path.Combine(folderPath, model.FirmwareFileName);
  199. //check file exist
  200. if (!File.Exists(filePath))
  201. {
  202. ////HintDialog.ShowMessage($"{model.Module} Firemware file is missing");
  203. //HintDialog.ShowMessage(string.Format(Resx.AppResources.InitFirmwareFileMissingAlert, model.Module));
  204. //isCheckPassed = false;
  205. toReturn.Error = EvseSettingConfigLoadError.InitFirmwareFileMissing;
  206. toReturn.ErrorFirmware = model.Module;
  207. return toReturn;
  208. }
  209. else
  210. {
  211. try
  212. {
  213. //isCheckPassed = CheckFileHeaderModel(setting, isCheckPassed, model, filePath);
  214. }
  215. catch
  216. {
  217. //HintDialog.ShowMessage($"{model.Module} Firemware header ERROR");
  218. //HintDialog.ShowMessage(string.Format(Resx.AppResources.InitFirmwareFileHeaderFormatAlert, model.Module));
  219. //isCheckPassed = false;
  220. toReturn.Error = EvseSettingConfigLoadError.InitFirmwareFileHeaderFormat;
  221. toReturn.ErrorFirmware = model.Module;
  222. return toReturn;
  223. }
  224. model.FirmwareFileName = filePath;
  225. }
  226. }
  227. }
  228. }
  229. }
  230. toReturn.Error = EvseSettingConfigLoadError.None;
  231. toReturn.Result = setting;
  232. return toReturn;
  233. }
  234. private static void CompatibilityDataUpdate(EvseSettingConfigModel setting)
  235. {
  236. if (string.IsNullOrEmpty(setting.SimICCID))
  237. {
  238. setting.SimICCID = setting.ICCID;
  239. }
  240. if (string.IsNullOrEmpty(setting.SimIMSI))
  241. {
  242. setting.SimIMSI = setting.IMSI;
  243. }
  244. if (setting.SkipButtonTest)
  245. {
  246. setting.ButtonTestMode = ButtonTestModeType.SkipButtonTest;
  247. }
  248. if (setting.SkipEmergencyButton)
  249. {
  250. setting.ButtonTestMode = ButtonTestModeType.SkipEmergencyButton;
  251. }
  252. if (string.IsNullOrEmpty(setting.IpAddress))
  253. {
  254. setting.IpAddress = "192.168.1.10";
  255. }
  256. }
  257. }
  258. }