This commit is contained in:
gram
2025-09-10 01:02:29 +09:00
parent 5ed9b8cdcc
commit 4d9b03e3c5
6 changed files with 35 additions and 129 deletions

20
build.bat Normal file
View File

@@ -0,0 +1,20 @@
@echo off
echo Building enhanced_exi_viewer...
gcc -o enhanced_exi_viewer enhanced_exi_viewer.c ^
src/iso1/*.c ^
src/iso2/*.c ^
src/din/*.c ^
src/codec/*.c ^
-I./src/codec ^
-I./src/iso1 ^
-I./src/iso2 ^
-I./src/din
if %ERRORLEVEL% EQU 0 (
echo Build successful! enhanced_exi_viewer.exe created.
) else (
echo Build failed with error code %ERRORLEVEL%
)
pause

View File

@@ -281,23 +281,7 @@ int readEXIFile(char* file, uint8_t* buffer, size_t buffer_size, size_t *bytes_r
return 0;
}
// Helper functions for Wireshark XML output
const char* get_unit_string(int unit) {
switch(unit) {
case 2: return "s"; // seconds
case 3: return "A"; // amperes
case 4: return "V"; // volts
case 5: return "W"; // watts
default: return ""; // fallback to number
}
}
const char* get_error_string(int error) {
switch(error) {
case 0: return "NO_ERROR";
default: return ""; // fallback to number
}
}
// Helper functions for Wireshark XML output removed - using numeric values directly
void print_xml_header_wireshark() {
printf("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
@@ -332,23 +316,13 @@ void print_iso1_xml_wireshark(struct iso1EXIDocument* doc) {
printf("<ns3:EVSEPresentVoltage>");
printf("<ns4:Multiplier>%d</ns4:Multiplier>", doc->V2G_Message.Body.CurrentDemandRes.EVSEPresentVoltage.Multiplier);
const char* unit_str = get_unit_string(doc->V2G_Message.Body.CurrentDemandRes.EVSEPresentVoltage.Unit);
if (strlen(unit_str) > 0) {
printf("<ns4:Unit>%s</ns4:Unit>", unit_str);
} else {
printf("<ns4:Unit>%d</ns4:Unit>", doc->V2G_Message.Body.CurrentDemandRes.EVSEPresentVoltage.Unit);
}
printf("<ns4:Unit>%d</ns4:Unit>", doc->V2G_Message.Body.CurrentDemandRes.EVSEPresentVoltage.Unit);
printf("<ns4:Value>%d</ns4:Value>", doc->V2G_Message.Body.CurrentDemandRes.EVSEPresentVoltage.Value);
printf("</ns3:EVSEPresentVoltage>");
printf("<ns3:EVSEPresentCurrent>");
printf("<ns4:Multiplier>%d</ns4:Multiplier>", doc->V2G_Message.Body.CurrentDemandRes.EVSEPresentCurrent.Multiplier);
unit_str = get_unit_string(doc->V2G_Message.Body.CurrentDemandRes.EVSEPresentCurrent.Unit);
if (strlen(unit_str) > 0) {
printf("<ns4:Unit>%s</ns4:Unit>", unit_str);
} else {
printf("<ns4:Unit>%d</ns4:Unit>", doc->V2G_Message.Body.CurrentDemandRes.EVSEPresentCurrent.Unit);
}
printf("<ns4:Unit>%d</ns4:Unit>", doc->V2G_Message.Body.CurrentDemandRes.EVSEPresentCurrent.Unit);
printf("<ns4:Value>%d</ns4:Value>", doc->V2G_Message.Body.CurrentDemandRes.EVSEPresentCurrent.Value);
printf("</ns3:EVSEPresentCurrent>");
@@ -366,47 +340,27 @@ void print_iso1_xml_wireshark(struct iso1EXIDocument* doc) {
printf("<ns3:DC_EVStatus>");
printf("<ns4:EVReady>%s</ns4:EVReady>", doc->V2G_Message.Body.CurrentDemandReq.DC_EVStatus.EVReady ? "true" : "false");
const char* error_str = get_error_string(doc->V2G_Message.Body.CurrentDemandReq.DC_EVStatus.EVErrorCode);
if (strlen(error_str) > 0) {
printf("<ns4:EVErrorCode>%s</ns4:EVErrorCode>", error_str);
} else {
printf("<ns4:EVErrorCode>%d</ns4:EVErrorCode>", doc->V2G_Message.Body.CurrentDemandReq.DC_EVStatus.EVErrorCode);
}
printf("<ns4:EVErrorCode>%d</ns4:EVErrorCode>", doc->V2G_Message.Body.CurrentDemandReq.DC_EVStatus.EVErrorCode);
printf("<ns4:EVRESSSOC>%d</ns4:EVRESSSOC>", doc->V2G_Message.Body.CurrentDemandReq.DC_EVStatus.EVRESSSOC);
printf("</ns3:DC_EVStatus>");
printf("<ns3:EVTargetCurrent>");
printf("<ns4:Multiplier>%d</ns4:Multiplier>", doc->V2G_Message.Body.CurrentDemandReq.EVTargetCurrent.Multiplier);
const char* unit_str = get_unit_string(doc->V2G_Message.Body.CurrentDemandReq.EVTargetCurrent.Unit);
if (strlen(unit_str) > 0) {
printf("<ns4:Unit>%s</ns4:Unit>", unit_str);
} else {
printf("<ns4:Unit>%d</ns4:Unit>", doc->V2G_Message.Body.CurrentDemandReq.EVTargetCurrent.Unit);
}
printf("<ns4:Unit>%d</ns4:Unit>", doc->V2G_Message.Body.CurrentDemandReq.EVTargetCurrent.Unit);
printf("<ns4:Value>%d</ns4:Value>", doc->V2G_Message.Body.CurrentDemandReq.EVTargetCurrent.Value);
printf("</ns3:EVTargetCurrent>");
printf("<ns3:EVTargetVoltage>");
printf("<ns4:Multiplier>%d</ns4:Multiplier>", doc->V2G_Message.Body.CurrentDemandReq.EVTargetVoltage.Multiplier);
unit_str = get_unit_string(doc->V2G_Message.Body.CurrentDemandReq.EVTargetVoltage.Unit);
if (strlen(unit_str) > 0) {
printf("<ns4:Unit>%s</ns4:Unit>", unit_str);
} else {
printf("<ns4:Unit>%d</ns4:Unit>", doc->V2G_Message.Body.CurrentDemandReq.EVTargetVoltage.Unit);
}
printf("<ns4:Unit>%d</ns4:Unit>", doc->V2G_Message.Body.CurrentDemandReq.EVTargetVoltage.Unit);
printf("<ns4:Value>%d</ns4:Value>", doc->V2G_Message.Body.CurrentDemandReq.EVTargetVoltage.Value);
printf("</ns3:EVTargetVoltage>");
if (doc->V2G_Message.Body.CurrentDemandReq.EVMaximumVoltageLimit_isUsed) {
printf("<ns3:EVMaximumVoltageLimit>");
printf("<ns4:Multiplier>%d</ns4:Multiplier>", doc->V2G_Message.Body.CurrentDemandReq.EVMaximumVoltageLimit.Multiplier);
unit_str = get_unit_string(doc->V2G_Message.Body.CurrentDemandReq.EVMaximumVoltageLimit.Unit);
if (strlen(unit_str) > 0) {
printf("<ns4:Unit>%s</ns4:Unit>", unit_str);
} else {
printf("<ns4:Unit>%d</ns4:Unit>", doc->V2G_Message.Body.CurrentDemandReq.EVMaximumVoltageLimit.Unit);
}
printf("<ns4:Unit>%d</ns4:Unit>", doc->V2G_Message.Body.CurrentDemandReq.EVMaximumVoltageLimit.Unit);
printf("<ns4:Value>%d</ns4:Value>", doc->V2G_Message.Body.CurrentDemandReq.EVMaximumVoltageLimit.Value);
printf("</ns3:EVMaximumVoltageLimit>");
}
@@ -414,12 +368,7 @@ void print_iso1_xml_wireshark(struct iso1EXIDocument* doc) {
if (doc->V2G_Message.Body.CurrentDemandReq.EVMaximumCurrentLimit_isUsed) {
printf("<ns3:EVMaximumCurrentLimit>");
printf("<ns4:Multiplier>%d</ns4:Multiplier>", doc->V2G_Message.Body.CurrentDemandReq.EVMaximumCurrentLimit.Multiplier);
unit_str = get_unit_string(doc->V2G_Message.Body.CurrentDemandReq.EVMaximumCurrentLimit.Unit);
if (strlen(unit_str) > 0) {
printf("<ns4:Unit>%s</ns4:Unit>", unit_str);
} else {
printf("<ns4:Unit>%d</ns4:Unit>", doc->V2G_Message.Body.CurrentDemandReq.EVMaximumCurrentLimit.Unit);
}
printf("<ns4:Unit>%d</ns4:Unit>", doc->V2G_Message.Body.CurrentDemandReq.EVMaximumCurrentLimit.Unit);
printf("<ns4:Value>%d</ns4:Value>", doc->V2G_Message.Body.CurrentDemandReq.EVMaximumCurrentLimit.Value);
printf("</ns3:EVMaximumCurrentLimit>");
}
@@ -427,12 +376,7 @@ void print_iso1_xml_wireshark(struct iso1EXIDocument* doc) {
if (doc->V2G_Message.Body.CurrentDemandReq.EVMaximumPowerLimit_isUsed) {
printf("<ns3:EVMaximumPowerLimit>");
printf("<ns4:Multiplier>%d</ns4:Multiplier>", doc->V2G_Message.Body.CurrentDemandReq.EVMaximumPowerLimit.Multiplier);
unit_str = get_unit_string(doc->V2G_Message.Body.CurrentDemandReq.EVMaximumPowerLimit.Unit);
if (strlen(unit_str) > 0) {
printf("<ns4:Unit>%s</ns4:Unit>", unit_str);
} else {
printf("<ns4:Unit>%d</ns4:Unit>", doc->V2G_Message.Body.CurrentDemandReq.EVMaximumPowerLimit.Unit);
}
printf("<ns4:Unit>%d</ns4:Unit>", doc->V2G_Message.Body.CurrentDemandReq.EVMaximumPowerLimit.Unit);
printf("<ns4:Value>%d</ns4:Value>", doc->V2G_Message.Body.CurrentDemandReq.EVMaximumPowerLimit.Value);
printf("</ns3:EVMaximumPowerLimit>");
}
@@ -446,12 +390,7 @@ void print_iso1_xml_wireshark(struct iso1EXIDocument* doc) {
if (doc->V2G_Message.Body.CurrentDemandReq.RemainingTimeToFullSoC_isUsed) {
printf("<ns3:RemainingTimeToFullSoC>");
printf("<ns4:Multiplier>%d</ns4:Multiplier>", doc->V2G_Message.Body.CurrentDemandReq.RemainingTimeToFullSoC.Multiplier);
unit_str = get_unit_string(doc->V2G_Message.Body.CurrentDemandReq.RemainingTimeToFullSoC.Unit);
if (strlen(unit_str) > 0) {
printf("<ns4:Unit>%s</ns4:Unit>", unit_str);
} else {
printf("<ns4:Unit>%d</ns4:Unit>", doc->V2G_Message.Body.CurrentDemandReq.RemainingTimeToFullSoC.Unit);
}
printf("<ns4:Unit>%d</ns4:Unit>", doc->V2G_Message.Body.CurrentDemandReq.RemainingTimeToFullSoC.Unit);
printf("<ns4:Value>%d</ns4:Value>", doc->V2G_Message.Body.CurrentDemandReq.RemainingTimeToFullSoC.Value);
printf("</ns3:RemainingTimeToFullSoC>");
}
@@ -459,12 +398,7 @@ void print_iso1_xml_wireshark(struct iso1EXIDocument* doc) {
if (doc->V2G_Message.Body.CurrentDemandReq.RemainingTimeToBulkSoC_isUsed) {
printf("<ns3:RemainingTimeToBulkSoC>");
printf("<ns4:Multiplier>%d</ns4:Multiplier>", doc->V2G_Message.Body.CurrentDemandReq.RemainingTimeToBulkSoC.Multiplier);
unit_str = get_unit_string(doc->V2G_Message.Body.CurrentDemandReq.RemainingTimeToBulkSoC.Unit);
if (strlen(unit_str) > 0) {
printf("<ns4:Unit>%s</ns4:Unit>", unit_str);
} else {
printf("<ns4:Unit>%d</ns4:Unit>", doc->V2G_Message.Body.CurrentDemandReq.RemainingTimeToBulkSoC.Unit);
}
printf("<ns4:Unit>%d</ns4:Unit>", doc->V2G_Message.Body.CurrentDemandReq.RemainingTimeToBulkSoC.Unit);
printf("<ns4:Value>%d</ns4:Value>", doc->V2G_Message.Body.CurrentDemandReq.RemainingTimeToBulkSoC.Value);
printf("</ns3:RemainingTimeToBulkSoC>");
}

Binary file not shown.

View File

@@ -1,53 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<V2G_Message xmlns="urn:iso:15118:2:2013:MsgDef"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Header>
<SessionID>4142423030303831</SessionID>
</Header>
<Body>
<CurrentDemandReq>
<DC_EVStatus>
<EVReady>true</EVReady>
<EVErrorCode>0</EVErrorCode>
<EVRESSSOC>100</EVRESSSOC>
</DC_EVStatus>
<EVTargetCurrent>
<Multiplier>0</Multiplier>
<Unit>3</Unit>
<Value>1</Value>
</EVTargetCurrent>
<EVTargetVoltage>
<Multiplier>0</Multiplier>
<Unit>4</Unit>
<Value>460</Value>
</EVTargetVoltage>
<EVMaximumVoltageLimit>
<Multiplier>0</Multiplier>
<Unit>4</Unit>
<Value>471</Value>
</EVMaximumVoltageLimit>
<EVMaximumCurrentLimit>
<Multiplier>0</Multiplier>
<Unit>3</Unit>
<Value>100</Value>
</EVMaximumCurrentLimit>
<EVMaximumPowerLimit>
<Multiplier>3</Multiplier>
<Unit>5</Unit>
<Value>50</Value>
</EVMaximumPowerLimit>
<BulkChargingComplete>false</BulkChargingComplete>
<ChargingComplete>true</ChargingComplete>
<RemainingTimeToFullSoC>
<Multiplier>0</Multiplier>
<Unit>2</Unit>
<Value>0</Value>
</RemainingTimeToFullSoC>
<RemainingTimeToBulkSoC>
<Multiplier>0</Multiplier>
<Unit>2</Unit>
<Value>0</Value>
</RemainingTimeToBulkSoC>
</CurrentDemandReq>
</Body>
</V2G_Message>
<ns1:V2G_Message xmlns:ns1="urn:iso:15118:2:2013:MsgDef" xmlns:ns2="urn:iso:15118:2:2013:MsgHeader" xmlns:ns3="urn:iso:15118:2:2013:MsgBody" xmlns:ns4="urn:iso:15118:2:2013:MsgDataTypes">
<ns1:Header><ns2:SessionID>4142423030303831</ns2:SessionID></ns1:Header><ns1:Body><ns3:CurrentDemandReq><ns3:DC_EVStatus><ns4:EVReady>true</ns4:EVReady><ns4:EVErrorCode>0</ns4:EVErrorCode><ns4:EVRESSSOC>100</ns4:EVRESSSOC></ns3:DC_EVStatus><ns3:EVTargetCurrent><ns4:Multiplier>0</ns4:Multiplier><ns4:Unit>3</ns4:Unit><ns4:Value>1</ns4:Value></ns3:EVTargetCurrent><ns3:EVTargetVoltage><ns4:Multiplier>0</ns4:Multiplier><ns4:Unit>4</ns4:Unit><ns4:Value>460</ns4:Value></ns3:EVTargetVoltage><ns3:EVMaximumVoltageLimit><ns4:Multiplier>0</ns4:Multiplier><ns4:Unit>4</ns4:Unit><ns4:Value>471</ns4:Value></ns3:EVMaximumVoltageLimit><ns3:EVMaximumCurrentLimit><ns4:Multiplier>0</ns4:Multiplier><ns4:Unit>3</ns4:Unit><ns4:Value>100</ns4:Value></ns3:EVMaximumCurrentLimit><ns3:EVMaximumPowerLimit><ns4:Multiplier>3</ns4:Multiplier><ns4:Unit>5</ns4:Unit><ns4:Value>50</ns4:Value></ns3:EVMaximumPowerLimit><ns3:BulkChargingComplete>false</ns3:BulkChargingComplete><ns3:ChargingComplete>true</ns3:ChargingComplete><ns3:RemainingTimeToFullSoC><ns4:Multiplier>0</ns4:Multiplier><ns4:Unit>2</ns4:Unit><ns4:Value>0</ns4:Value></ns3:RemainingTimeToFullSoC><ns3:RemainingTimeToBulkSoC><ns4:Multiplier>0</ns4:Multiplier><ns4:Unit>2</ns4:Unit><ns4:Value>0</ns4:Value></ns3:RemainingTimeToBulkSoC></ns3:CurrentDemandReq></ns1:Body></ns1:V2G_Message>

1
test5_encoded.exi Normal file
View File

@@ -0,0 +1 @@
Error encoding to EXI (error: -109)\n

1
test5ws.xml Normal file
View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><ns1:V2G_Message xmlns:ns1="urn:iso:15118:2:2013:MsgDef" xmlns:ns2="urn:iso:15118:2:2013:MsgHeader" xmlns:ns3="urn:iso:15118:2:2013:MsgBody" xmlns:ns4="urn:iso:15118:2:2013:MsgDataTypes"><ns1:Header><ns2:SessionID>4142423030303831</ns2:SessionID></ns1:Header><ns1:Body><ns3:CurrentDemandReq><ns3:DC_EVStatus><ns4:EVReady>true</ns4:EVReady><ns4:EVErrorCode>NO_ERROR</ns4:EVErrorCode><ns4:EVRESSSOC>100</ns4:EVRESSSOC></ns3:DC_EVStatus><ns3:EVTargetCurrent><ns4:Multiplier>0</ns4:Multiplier><ns4:Unit>A</ns4:Unit><ns4:Value>1</ns4:Value></ns3:EVTargetCurrent><ns3:EVMaximumVoltageLimit><ns4:Multiplier>0</ns4:Multiplier><ns4:Unit>V</ns4:Unit><ns4:Value>471</ns4:Value></ns3:EVMaximumVoltageLimit><ns3:EVMaximumCurrentLimit><ns4:Multiplier>0</ns4:Multiplier><ns4:Unit>A</ns4:Unit><ns4:Value>100</ns4:Value></ns3:EVMaximumCurrentLimit><ns3:EVMaximumPowerLimit><ns4:Multiplier>3</ns4:Multiplier><ns4:Unit>W</ns4:Unit><ns4:Value>50</ns4:Value></ns3:EVMaximumPowerLimit><ns3:BulkChargingComplete>false</ns3:BulkChargingComplete><ns3:ChargingComplete>true</ns3:ChargingComplete><ns3:RemainingTimeToFullSoC><ns4:Multiplier>0</ns4:Multiplier><ns4:Unit>s</ns4:Unit><ns4:Value>0</ns4:Value></ns3:RemainingTimeToFullSoC><ns3:RemainingTimeToBulkSoC><ns4:Multiplier>0</ns4:Multiplier><ns4:Unit>s</ns4:Unit><ns4:Value>0</ns4:Value></ns3:RemainingTimeToBulkSoC><ns3:EVTargetVoltage><ns4:Multiplier>0</ns4:Multiplier><ns4:Unit>V</ns4:Unit><ns4:Value>460</ns4:Value></ns3:EVTargetVoltage></ns3:CurrentDemandReq></ns1:Body></ns1:V2G_Message>