EvseSettingConfig.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  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. var compatableSetting = JsonConvert.DeserializeObject<EvseSettingConfigCompatableModel>(settingString);
  116. setting = compatableSetting.ToEvseSettingConfigModel();
  117. }
  118. catch(Exception e)
  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 (!SystemID.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. toReturn.Error = EvseSettingConfigLoadError.InitFirmwareNameEmpty;
  170. return toReturn;
  171. }
  172. if (isVersionVaild || isFileNameVaild)
  173. {
  174. if (!isVersionVaild)
  175. {
  176. toReturn.Error = EvseSettingConfigLoadError.InitFirmwareVersionEmpty;
  177. toReturn.ErrorFirmware = model.Module;
  178. return toReturn;
  179. }
  180. var folderPath = System.IO.Path.GetDirectoryName(modelSeettingFilePath);
  181. if (isVersionVaild && isFileNameVaild)
  182. {
  183. var filePath = System.IO.Path.Combine(folderPath, model.FirmwareFileName);
  184. //check file exist
  185. if (!File.Exists(filePath))
  186. {
  187. toReturn.Error = EvseSettingConfigLoadError.InitFirmwareFileMissing;
  188. toReturn.ErrorFirmware = model.Module;
  189. return toReturn;
  190. }
  191. model.FirmwareFileName = filePath;
  192. }
  193. }
  194. }
  195. }
  196. if (setting.PreFlashFirmwareUpdateList != null)
  197. {
  198. for (int firmwareIndex = 0; firmwareIndex < setting.PreFlashFirmwareUpdateList.Count; firmwareIndex++)
  199. {
  200. var model = setting.PreFlashFirmwareUpdateList[firmwareIndex];
  201. bool isVersionVaild = !string.IsNullOrEmpty(model.Version);
  202. bool isFileNameVaild = !string.IsNullOrEmpty(model.FirmwareFileName);
  203. bool isNoduleNameVaild = !string.IsNullOrEmpty(model.Module);
  204. if (!isNoduleNameVaild)
  205. {
  206. toReturn.Error = EvseSettingConfigLoadError.InitFirmwareNameEmpty;
  207. return toReturn;
  208. }
  209. if (isVersionVaild || isFileNameVaild)
  210. {
  211. if (!isVersionVaild)
  212. {
  213. toReturn.Error = EvseSettingConfigLoadError.InitFirmwareVersionEmpty;
  214. toReturn.ErrorFirmware = model.Module;
  215. return toReturn;
  216. }
  217. var folderPath = System.IO.Path.GetDirectoryName(modelSeettingFilePath);
  218. if (isVersionVaild && isFileNameVaild)
  219. {
  220. var filePath = System.IO.Path.Combine(folderPath, model.FirmwareFileName);
  221. //check file exist
  222. if (!File.Exists(filePath))
  223. {
  224. toReturn.Error = EvseSettingConfigLoadError.InitFirmwareFileMissing;
  225. toReturn.ErrorFirmware = model.Module;
  226. return toReturn;
  227. }
  228. model.FirmwareFileName = filePath;
  229. }
  230. }
  231. }
  232. }
  233. toReturn.Error = EvseSettingConfigLoadError.None;
  234. toReturn.Result = setting;
  235. return toReturn;
  236. }
  237. private static void CompatibilityDataUpdate(EvseSettingConfigModel setting)
  238. {
  239. if (string.IsNullOrEmpty(setting.IpAddress))
  240. {
  241. setting.IpAddress = "192.168.1.10";
  242. }
  243. }
  244. }
  245. }