Files
V2GProtocol_CSharp/V2GApi.cs
chiDT a6c04f1407 Add V2G library project and refactor code structure
- Create V2GProtocol.Library project for DLL usage by external programs
- Add V2GApi.cs with public API methods for EXI encoding/decoding
- Move helper functions to Helper.cs for better code organization
- Update project configuration for .NET Framework 4.8
- Translate all comments in Program.cs to Korean
- Fix .hex file handling to read as binary instead of text

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-07 20:18:14 +09:00

124 lines
4.0 KiB
C#

using System;
using System.Text;
namespace V2GProtocol
{
/// <summary>
/// V2G 프로토콜 API - 외부 프로그램에서 사용하기 위한 간단한 인터페이스
/// </summary>
public static class V2GApi
{
/// <summary>
/// EXI 헥스 문자열을 XML로 디코드
/// </summary>
/// <param name="exiHexString">EXI 형식의 헥스 문자열</param>
/// <returns>디코드된 XML 문자열</returns>
public static string DecodeHexToXml(string exiHexString)
{
try
{
// 헥스 문자열 정리
exiHexString = exiHexString.Replace(" ", "").Replace("-", "").Replace("0x", "");
// 헥스를 바이트 배열로 변환
byte[] exiBytes = Helper.FromHexString(exiHexString);
// EXI를 XML로 디코드
return V2GDecoder.DecodeEXIToXML(exiBytes);
}
catch (Exception ex)
{
throw new Exception($"Failed to decode EXI: {ex.Message}", ex);
}
}
/// <summary>
/// EXI 바이트 배열을 XML로 디코드
/// </summary>
/// <param name="exiBytes">EXI 형식의 바이트 배열</param>
/// <returns>디코드된 XML 문자열</returns>
public static string DecodeBytesToXml(byte[] exiBytes)
{
try
{
return V2GDecoder.DecodeEXIToXML(exiBytes);
}
catch (Exception ex)
{
throw new Exception($"Failed to decode EXI: {ex.Message}", ex);
}
}
/// <summary>
/// XML을 EXI 헥스 문자열로 인코드
/// </summary>
/// <param name="xmlContent">XML 내용</param>
/// <returns>인코드된 EXI 헥스 문자열</returns>
public static string EncodeXmlToHex(string xmlContent)
{
try
{
// XML을 EXI로 인코드
byte[] exiBytes = V2GDecoder.EncodeXMLToEXI(xmlContent);
// 바이트 배열을 헥스 문자열로 변환
return Helper.ToHexString(exiBytes);
}
catch (Exception ex)
{
throw new Exception($"Failed to encode XML: {ex.Message}", ex);
}
}
/// <summary>
/// XML을 EXI 바이트 배열로 인코드
/// </summary>
/// <param name="xmlContent">XML 내용</param>
/// <returns>인코드된 EXI 바이트 배열</returns>
public static byte[] EncodeXmlToBytes(string xmlContent)
{
try
{
return V2GDecoder.EncodeXMLToEXI(xmlContent);
}
catch (Exception ex)
{
throw new Exception($"Failed to encode XML: {ex.Message}", ex);
}
}
/// <summary>
/// V2G 메시지 분석 (헥스 덤프에서 V2G 메시지 추출)
/// </summary>
/// <param name="hexDumpData">헥스 덤프 데이터</param>
/// <returns>V2G 메시지 정보</returns>
public static V2GDecoder.V2GMessage AnalyzeV2GMessage(byte[] hexDumpData)
{
try
{
return V2GDecoder.DecodeMessage(hexDumpData);
}
catch (Exception ex)
{
throw new Exception($"Failed to analyze V2G message: {ex.Message}", ex);
}
}
/// <summary>
/// 헥스 파일 파싱
/// </summary>
/// <param name="filePath">헥스 파일 경로</param>
/// <returns>파싱된 바이트 배열</returns>
public static byte[] ParseHexFile(string filePath)
{
try
{
return V2GDecoder.ParseHexFile(filePath);
}
catch (Exception ex)
{
throw new Exception($"Failed to parse hex file: {ex.Message}", ex);
}
}
}
}