You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

69 lines
2.7 KiB

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 CalDefaultCommand { get; set; } = "x00c_001001:owt28006727ea97c7801";
public string EndToken { get; set; } = "<end>";
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"),
CalDefaultCommand = GetString(values, "CalDefaultCommand", "x00c_001001:owt28006727ea97c7801"),
EndToken = GetString(values, "EndToken", "<end>"),
DtrEnable = GetBool(values, "DtrEnable", false),
RtsEnable = GetBool(values, "RtsEnable", false)
};
}
private static string GetString(Dictionary<string, string> values, string key, string defaultValue)
{
return values.TryGetValue(key, out var value) && !string.IsNullOrWhiteSpace(value)
? value.Trim()
: defaultValue;
}
private static int GetInt(Dictionary<string, string> 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<string, string> 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
};
}
}