using System;
using System.Text;
namespace V2GProtocol
{
///
/// V2G 프로토콜 API - 외부 프로그램에서 사용하기 위한 간단한 인터페이스
///
public static class V2GApi
{
///
/// EXI 헥스 문자열을 XML로 디코드
///
/// EXI 형식의 헥스 문자열
/// 디코드된 XML 문자열
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);
}
}
///
/// EXI 바이트 배열을 XML로 디코드
///
/// EXI 형식의 바이트 배열
/// 디코드된 XML 문자열
public static string DecodeBytesToXml(byte[] exiBytes)
{
try
{
return V2GDecoder.DecodeEXIToXML(exiBytes);
}
catch (Exception ex)
{
throw new Exception($"Failed to decode EXI: {ex.Message}", ex);
}
}
///
/// XML을 EXI 헥스 문자열로 인코드
///
/// XML 내용
/// 인코드된 EXI 헥스 문자열
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);
}
}
///
/// XML을 EXI 바이트 배열로 인코드
///
/// XML 내용
/// 인코드된 EXI 바이트 배열
public static byte[] EncodeXmlToBytes(string xmlContent)
{
try
{
return V2GDecoder.EncodeXMLToEXI(xmlContent);
}
catch (Exception ex)
{
throw new Exception($"Failed to encode XML: {ex.Message}", ex);
}
}
///
/// V2G 메시지 분석 (헥스 덤프에서 V2G 메시지 추출)
///
/// 헥스 덤프 데이터
/// V2G 메시지 정보
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);
}
}
///
/// 헥스 파일 파싱
///
/// 헥스 파일 경로
/// 파싱된 바이트 배열
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);
}
}
}
}