using System.IO; namespace Housing.Services; public sealed class BoardHardwareSettings { public string PortName { get; set; } = "Auto"; public int BaudRate { get; set; } = 115200; public int ReadTimeout { get; set; } = 5000; public string PreConnectCommand { get; set; } = "x00o"; public string ConnectCommand { get; set; } = "x00c_001101:owt28006727ea97c7801"; public string ReadIdCommand { get; set; } = "x00c_001101:ow2800326003e"; public string PostReadIdCommand { get; set; } = "x00o"; public string CalDefaultCommand { get; set; } = "x00c_001001:owt28006727ea97c7801"; public string EndToken { get; set; } = ""; public bool DtrEnable { get; set; } public bool RtsEnable { get; set; } public static BoardHardwareSettings Load(string filePath) { if (!File.Exists(filePath)) { throw new FileNotFoundException("Hardware.ini 파일을 찾을 수 없습니다.", filePath); } var values = IniFile.LoadSection(filePath, "Board"); return new BoardHardwareSettings { PortName = GetString(values, "PortName", "Auto"), BaudRate = GetInt(values, "BaudRate", 115200), ReadTimeout = GetInt(values, "ReadTimeout", 5000), PreConnectCommand = GetString(values, "PreConnectCommand", "x00o"), ConnectCommand = GetString(values, "ConnectCommand", "x00c_001101:owt28006727ea97c7801"), ReadIdCommand = GetString(values, "ReadIdCommand", "x00c_001101:ow2800326003e"), PostReadIdCommand = GetString(values, "PostReadIdCommand", "x00o"), CalDefaultCommand = GetString(values, "CalDefaultCommand", "x00c_001001:owt28006727ea97c7801"), EndToken = GetString(values, "EndToken", ""), DtrEnable = GetBool(values, "DtrEnable", false), RtsEnable = GetBool(values, "RtsEnable", false) }; } private static string GetString(Dictionary values, string key, string defaultValue) { return values.TryGetValue(key, out var value) && !string.IsNullOrWhiteSpace(value) ? value.Trim() : defaultValue; } private static int GetInt(Dictionary values, string key, int defaultValue) { return values.TryGetValue(key, out var value) && int.TryParse(value, out var result) ? result : defaultValue; } private static bool GetBool(Dictionary values, string key, bool defaultValue) { if (!values.TryGetValue(key, out var value) || string.IsNullOrWhiteSpace(value)) { return defaultValue; } return value.Trim().ToUpperInvariant() switch { "1" or "TRUE" or "YES" or "ON" => true, "0" or "FALSE" or "NO" or "OFF" => false, _ => defaultValue }; } }