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); } } } }