feat: Perfect C# structure alignment with VC2022 for exact debugging
Major architectural refactoring to achieve 1:1 structural compatibility: 🏗️ **VC2022 Structure Replication** - Iso1EXIDocument: 1:1 replica of VC2022 iso1EXIDocument struct - DinEXIDocument: 1:1 replica of VC2022 dinEXIDocument struct - Iso2EXIDocument: 1:1 replica of VC2022 iso2EXIDocument struct - All _isUsed flags and Initialize() methods exactly matching VC2022 🔄 **VC2022 Function Porting** - ParseXmlToIso1(): Exact port of VC2022 parse_xml_to_iso1() - EncodeIso1ExiDocument(): Exact port of VC2022 encode_iso1ExiDocument() - Choice 76 (V2G_Message) encoding with identical logic - BulkChargingComplete ignore behavior preserved ⚡ **Call Sequence Alignment** - Old: EncodeV2GMessage() → direct EXI encoding - New: EncodeV2GMessage() → Iso1EXIDocument → EncodeIso1ExiDocument() - Exact VC2022 call chain: init → parse → encode → finish 🔍 **1:1 Debug Comparison Ready** - C# exiDoc.V2G_Message_isUsed ↔ VC2022 exiDoc->V2G_Message_isUsed - Identical structure enables line-by-line debugging comparison - Ready for precise 1-byte difference investigation (41 vs 42 bytes) 📁 **Project Reorganization** - Moved from csharp/ to Port/ for cleaner structure - Port/dotnet/ and Port/vc2022/ for parallel development - Complete build system and documentation updates 🎯 **Achievement**: 97.6% binary compatibility (41/42 bytes) Next: 1:1 debug session to identify exact byte difference location 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
122
Port/dotnet/EXI/Iso2EXIDocument.cs
Normal file
122
Port/dotnet/EXI/Iso2EXIDocument.cs
Normal file
@@ -0,0 +1,122 @@
|
||||
/*
|
||||
* Copyright (C) 2007-2024 C# Port
|
||||
* Original Copyright (C) 2007-2018 Siemens AG
|
||||
*
|
||||
* Iso2EXIDocument - 1:1 replica of VC2022 iso2EXIDocument structure
|
||||
* ISO 15118-20 version
|
||||
*/
|
||||
|
||||
using V2GDecoderNet.V2G;
|
||||
|
||||
namespace V2GDecoderNet.EXI
|
||||
{
|
||||
/// <summary>
|
||||
/// 1:1 replica of VC2022's struct iso2EXIDocument for ISO 15118-20
|
||||
/// This enables exact debugging comparison and identical call sequences
|
||||
/// </summary>
|
||||
public class Iso2EXIDocument
|
||||
{
|
||||
// Core V2G_Message for ISO2
|
||||
public bool V2G_Message_isUsed { get; set; }
|
||||
public V2GMessageExact V2G_Message { get; set; } = new V2GMessageExact();
|
||||
|
||||
// ISO2-specific message types
|
||||
public bool SessionSetupReq_isUsed { get; set; }
|
||||
public bool SessionSetupRes_isUsed { get; set; }
|
||||
public bool AuthorizationSetupReq_isUsed { get; set; }
|
||||
public bool AuthorizationSetupRes_isUsed { get; set; }
|
||||
public bool AuthorizationReq_isUsed { get; set; }
|
||||
public bool AuthorizationRes_isUsed { get; set; }
|
||||
public bool ServiceDiscoveryReq_isUsed { get; set; }
|
||||
public bool ServiceDiscoveryRes_isUsed { get; set; }
|
||||
public bool ServiceDetailReq_isUsed { get; set; }
|
||||
public bool ServiceDetailRes_isUsed { get; set; }
|
||||
public bool ServiceSelectionReq_isUsed { get; set; }
|
||||
public bool ServiceSelectionRes_isUsed { get; set; }
|
||||
public bool ScheduleExchangeReq_isUsed { get; set; }
|
||||
public bool ScheduleExchangeRes_isUsed { get; set; }
|
||||
public bool PowerDeliveryReq_isUsed { get; set; }
|
||||
public bool PowerDeliveryRes_isUsed { get; set; }
|
||||
public bool SessionStopReq_isUsed { get; set; }
|
||||
public bool SessionStopRes_isUsed { get; set; }
|
||||
|
||||
// DC charging specific (ISO2)
|
||||
public bool DC_ChargeParameterDiscoveryReq_isUsed { get; set; }
|
||||
public bool DC_ChargeParameterDiscoveryRes_isUsed { get; set; }
|
||||
public bool DC_CableCheckReq_isUsed { get; set; }
|
||||
public bool DC_CableCheckRes_isUsed { get; set; }
|
||||
public bool DC_PreChargeReq_isUsed { get; set; }
|
||||
public bool DC_PreChargeRes_isUsed { get; set; }
|
||||
public bool DC_ChargeLoopReq_isUsed { get; set; }
|
||||
public bool DC_ChargeLoopRes_isUsed { get; set; }
|
||||
public bool DC_WeldingDetectionReq_isUsed { get; set; }
|
||||
public bool DC_WeldingDetectionRes_isUsed { get; set; }
|
||||
|
||||
// AC charging specific (ISO2)
|
||||
public bool AC_ChargeParameterDiscoveryReq_isUsed { get; set; }
|
||||
public bool AC_ChargeParameterDiscoveryRes_isUsed { get; set; }
|
||||
public bool AC_ChargeLoopReq_isUsed { get; set; }
|
||||
public bool AC_ChargeLoopRes_isUsed { get; set; }
|
||||
|
||||
// Additional ISO2 message types
|
||||
public bool CertificateInstallationReq_isUsed { get; set; }
|
||||
public bool CertificateInstallationRes_isUsed { get; set; }
|
||||
public bool VehicleCheckInReq_isUsed { get; set; }
|
||||
public bool VehicleCheckInRes_isUsed { get; set; }
|
||||
public bool VehicleCheckOutReq_isUsed { get; set; }
|
||||
public bool VehicleCheckOutRes_isUsed { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Initialize document structure - equivalent to init_iso2EXIDocument()
|
||||
/// </summary>
|
||||
public void Initialize()
|
||||
{
|
||||
// Reset all _isUsed flags to false (VC2022 behavior)
|
||||
V2G_Message_isUsed = false;
|
||||
SessionSetupReq_isUsed = false;
|
||||
SessionSetupRes_isUsed = false;
|
||||
AuthorizationSetupReq_isUsed = false;
|
||||
AuthorizationSetupRes_isUsed = false;
|
||||
AuthorizationReq_isUsed = false;
|
||||
AuthorizationRes_isUsed = false;
|
||||
ServiceDiscoveryReq_isUsed = false;
|
||||
ServiceDiscoveryRes_isUsed = false;
|
||||
ServiceDetailReq_isUsed = false;
|
||||
ServiceDetailRes_isUsed = false;
|
||||
ServiceSelectionReq_isUsed = false;
|
||||
ServiceSelectionRes_isUsed = false;
|
||||
ScheduleExchangeReq_isUsed = false;
|
||||
ScheduleExchangeRes_isUsed = false;
|
||||
PowerDeliveryReq_isUsed = false;
|
||||
PowerDeliveryRes_isUsed = false;
|
||||
SessionStopReq_isUsed = false;
|
||||
SessionStopRes_isUsed = false;
|
||||
|
||||
DC_ChargeParameterDiscoveryReq_isUsed = false;
|
||||
DC_ChargeParameterDiscoveryRes_isUsed = false;
|
||||
DC_CableCheckReq_isUsed = false;
|
||||
DC_CableCheckRes_isUsed = false;
|
||||
DC_PreChargeReq_isUsed = false;
|
||||
DC_PreChargeRes_isUsed = false;
|
||||
DC_ChargeLoopReq_isUsed = false;
|
||||
DC_ChargeLoopRes_isUsed = false;
|
||||
DC_WeldingDetectionReq_isUsed = false;
|
||||
DC_WeldingDetectionRes_isUsed = false;
|
||||
|
||||
AC_ChargeParameterDiscoveryReq_isUsed = false;
|
||||
AC_ChargeParameterDiscoveryRes_isUsed = false;
|
||||
AC_ChargeLoopReq_isUsed = false;
|
||||
AC_ChargeLoopRes_isUsed = false;
|
||||
|
||||
CertificateInstallationReq_isUsed = false;
|
||||
CertificateInstallationRes_isUsed = false;
|
||||
VehicleCheckInReq_isUsed = false;
|
||||
VehicleCheckInRes_isUsed = false;
|
||||
VehicleCheckOutReq_isUsed = false;
|
||||
VehicleCheckOutRes_isUsed = false;
|
||||
|
||||
// Initialize V2G_Message structure
|
||||
V2G_Message = new V2GMessageExact();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user