You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2021/07/06 06:10:30 UTC
[plc4x] branch develop updated: plc4x: unified golang and java xml
writing of spi types
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
The following commit(s) were added to refs/heads/develop by this push:
new 3d27849 plc4x: unified golang and java xml writing of spi types
3d27849 is described below
commit 3d27849d94f57edaf3e5b2d38189e74ba16cfe4e
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Tue Jul 6 08:10:06 2021 +0200
plc4x: unified golang and java xml writing of spi types
---
.../testing/protocols/ads/DriverTestsuite.xml | 42 ++++----
.../testing/protocols/eip/DriverTestsuite.xml | 8 +-
.../testing/protocols/modbus/DriverTestsuite.xml | 40 +++----
.../testing/protocols/s7/DriverTestsuite.xml | 14 +--
plc4go/internal/plc4go/ads/Field.go | 117 +++++----------------
plc4go/internal/plc4go/eip/Field.go | 35 +++---
plc4go/internal/plc4go/modbus/Field.go | 26 ++---
plc4go/internal/plc4go/s7/Field.go | 45 +++-----
.../plc4go/spi/model/DefaultPlcReadRequest.go | 29 ++---
.../plc4go/spi/model/DefaultPlcReadResponse.go | 54 +++++-----
.../spi/model/DefaultPlcSubscriptionEvent.go | 22 ++--
.../spi/model/DefaultPlcSubscriptionRequest.go | 29 ++---
.../spi/model/DefaultPlcSubscriptionResponse.go | 33 +++---
.../plc4go/spi/model/DefaultPlcWriteRequest.go | 64 ++++-------
.../plc4go/spi/model/DefaultPlcWriteResponse.go | 31 +++---
.../plc4go/spi/testutils/DriverTestRunner.go | 23 ++--
plc4go/internal/plc4go/spi/testutils/TestUtils.go | 12 +++
plc4go/internal/plc4go/spi/values/BINT.go | 14 +--
plc4go/internal/plc4go/spi/values/BOOL.go | 23 +---
plc4go/internal/plc4go/spi/values/BREAL.go | 14 ++-
plc4go/internal/plc4go/spi/values/BYTE.go | 11 +-
plc4go/internal/plc4go/spi/values/CHAR.go | 11 +-
plc4go/internal/plc4go/spi/values/DATE.go | 9 +-
plc4go/internal/plc4go/spi/values/DATE_AND_TIME.go | 9 +-
plc4go/internal/plc4go/spi/values/DINT.go | 12 +--
plc4go/internal/plc4go/spi/values/DWORD.go | 11 +-
plc4go/internal/plc4go/spi/values/INT.go | 9 +-
plc4go/internal/plc4go/spi/values/LINT.go | 9 +-
plc4go/internal/plc4go/spi/values/LREAL.go | 9 +-
plc4go/internal/plc4go/spi/values/LTIME.go | 9 +-
plc4go/internal/plc4go/spi/values/LWORD.go | 11 +-
plc4go/internal/plc4go/spi/values/NULL.go | 12 ---
plc4go/internal/plc4go/spi/values/PlcBitString.go | 23 +---
plc4go/internal/plc4go/spi/values/PlcByteArray.go | 16 +--
plc4go/internal/plc4go/spi/values/PlcList.go | 31 +++---
plc4go/internal/plc4go/spi/values/PlcStruct.go | 28 +++--
plc4go/internal/plc4go/spi/values/REAL.go | 13 +--
plc4go/internal/plc4go/spi/values/RawPlcValue.go | 14 ---
plc4go/internal/plc4go/spi/values/SINT.go | 9 +-
plc4go/internal/plc4go/spi/values/STRING.go | 11 +-
plc4go/internal/plc4go/spi/values/TIME.go | 9 +-
plc4go/internal/plc4go/spi/values/TIME_OF_DAY.go | 9 +-
plc4go/internal/plc4go/spi/values/UDINT.go | 9 +-
plc4go/internal/plc4go/spi/values/UINT.go | 9 +-
plc4go/internal/plc4go/spi/values/ULINT.go | 9 +-
plc4go/internal/plc4go/spi/values/USINT.go | 9 +-
plc4go/internal/plc4go/spi/values/WCHAR.go | 9 +-
plc4go/internal/plc4go/spi/values/WORD.go | 11 +-
plc4go/internal/plc4go/spi/values/WSTRING.go | 9 +-
.../plc4x/java/ads/field/DirectAdsField.java | 1 +
.../java/ads/field/SymbolicAdsStringField.java | 2 +
.../plc4x/java/eip/readwrite/field/EipField.java | 1 +
.../plc4x/java/modbus/field/ModbusField.java | 1 +
.../plc4x/java/s7/readwrite/field/S7Field.java | 3 +
.../java/spi/generation/WriteBufferXmlBased.java | 15 ++-
.../org/apache/plc4x/java/spi/values/PlcBOOL.java | 8 ++
.../org/apache/plc4x/java/spi/values/PlcBYTE.java | 8 ++
.../plc4x/java/spi/values/PlcBigDecimal.java | 4 +-
.../plc4x/java/spi/values/PlcBigInteger.java | 3 +-
.../org/apache/plc4x/java/spi/values/PlcCHAR.java | 9 ++
.../org/apache/plc4x/java/spi/values/PlcDATE.java | 4 +-
.../plc4x/java/spi/values/PlcDATE_AND_TIME.java | 4 +-
.../org/apache/plc4x/java/spi/values/PlcDINT.java | 8 ++
.../org/apache/plc4x/java/spi/values/PlcDWORD.java | 8 ++
.../org/apache/plc4x/java/spi/values/PlcINT.java | 10 +-
.../org/apache/plc4x/java/spi/values/PlcLINT.java | 8 ++
.../org/apache/plc4x/java/spi/values/PlcLREAL.java | 8 ++
.../org/apache/plc4x/java/spi/values/PlcLTIME.java | 4 +-
.../org/apache/plc4x/java/spi/values/PlcLWORD.java | 8 ++
.../org/apache/plc4x/java/spi/values/PlcREAL.java | 8 ++
.../org/apache/plc4x/java/spi/values/PlcSINT.java | 8 ++
.../apache/plc4x/java/spi/values/PlcSTRING.java | 4 +-
.../org/apache/plc4x/java/spi/values/PlcTIME.java | 4 +-
.../plc4x/java/spi/values/PlcTIME_OF_DAY.java | 4 +-
.../org/apache/plc4x/java/spi/values/PlcUDINT.java | 8 ++
.../org/apache/plc4x/java/spi/values/PlcUINT.java | 8 ++
.../org/apache/plc4x/java/spi/values/PlcULINT.java | 8 ++
.../org/apache/plc4x/java/spi/values/PlcUSINT.java | 8 ++
.../org/apache/plc4x/java/spi/values/PlcWCHAR.java | 9 ++
.../org/apache/plc4x/java/spi/values/PlcWORD.java | 8 ++
.../resources/protocols/ads/DriverTestsuite.xml | 42 ++++----
.../resources/protocols/eip/DriverTestsuite.xml | 8 +-
.../resources/protocols/modbus/DriverTestsuite.xml | 40 +++----
.../resources/protocols/s7/DriverTestsuite.xml | 14 +--
84 files changed, 640 insertions(+), 683 deletions(-)
diff --git a/plc4go/assets/testing/protocols/ads/DriverTestsuite.xml b/plc4go/assets/testing/protocols/ads/DriverTestsuite.xml
index eb7689a..006f5f5 100644
--- a/plc4go/assets/testing/protocols/ads/DriverTestsuite.xml
+++ b/plc4go/assets/testing/protocols/ads/DriverTestsuite.xml
@@ -197,7 +197,7 @@
<indexGroup dataType="int" bitLength="64">4040</indexGroup>
<indexOffset dataType="int" bitLength="64">8</indexOffset>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">BOOL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">BOOL</dataType>
</DirectAdsField>
</hurz>
</fields>
@@ -205,8 +205,8 @@
<values>
<hurz>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcBOOL dataType="string" bitLength="32">true</PlcBOOL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcBOOL dataType="bit" bitLength="1">true</PlcBOOL>
</ResponseItem>
</hurz>
</values>
@@ -401,7 +401,7 @@
<indexGroup dataType="int" bitLength="64">4040</indexGroup>
<indexOffset dataType="int" bitLength="64">8</indexOffset>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">BOOL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">BOOL</dataType>
</DirectAdsField>
</hurz1>
<hurz2>
@@ -409,7 +409,7 @@
<indexGroup dataType="int" bitLength="64">4040</indexGroup>
<indexOffset dataType="int" bitLength="64">12</indexOffset>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">BOOL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">BOOL</dataType>
</DirectAdsField>
</hurz2>
</fields>
@@ -417,14 +417,14 @@
<values>
<hurz1>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcBOOL dataType="string" bitLength="32">true</PlcBOOL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcBOOL dataType="bit" bitLength="1">true</PlcBOOL>
</ResponseItem>
</hurz1>
<hurz2>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcBOOL dataType="string" bitLength="32">true</PlcBOOL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcBOOL dataType="bit" bitLength="1">true</PlcBOOL>
</ResponseItem>
</hurz2>
</values>
@@ -753,9 +753,9 @@
<fields>
<hurz1>
<SymbolicAdsField>
- <symbolicAddress dataType="string" bitLength="200">main.f_trigDateiGelesen.M</symbolicAddress>
+ <symbolicAddress dataType="string" bitLength="200" encoding="UTF-8">main.f_trigDateiGelesen.M</symbolicAddress>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">BOOL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">BOOL</dataType>
</SymbolicAdsField>
</hurz1>
</fields>
@@ -763,8 +763,8 @@
<values>
<hurz1>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcBOOL dataType="string" bitLength="40">false</PlcBOOL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcBOOL dataType="bit" bitLength="1">false</PlcBOOL>
</ResponseItem>
</hurz1>
</values>
@@ -1094,9 +1094,9 @@
<fields>
<hurz1>
<SymbolicAdsField>
- <symbolicAddress dataType="string" bitLength="200">main.f_trigDateiGelesen.M</symbolicAddress>
+ <symbolicAddress dataType="string" bitLength="200" encoding="UTF-8">main.f_trigDateiGelesen.M</symbolicAddress>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">BOOL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">BOOL</dataType>
</SymbolicAdsField>
</hurz1>
</fields>
@@ -1104,8 +1104,8 @@
<values>
<hurz1>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcBOOL dataType="string" bitLength="40">false</PlcBOOL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcBOOL dataType="bit" bitLength="1">false</PlcBOOL>
</ResponseItem>
</hurz1>
</values>
@@ -1263,9 +1263,9 @@
<fields>
<hurz1>
<SymbolicAdsField>
- <symbolicAddress dataType="string" bitLength="200">main.f_trigDateiGelesen.M</symbolicAddress>
+ <symbolicAddress dataType="string" bitLength="200" encoding="UTF-8">main.f_trigDateiGelesen.M</symbolicAddress>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">BOOL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">BOOL</dataType>
</SymbolicAdsField>
</hurz1>
</fields>
@@ -1273,8 +1273,8 @@
<values>
<hurz1>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcBOOL dataType="string" bitLength="40">false</PlcBOOL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcBOOL dataType="bit" bitLength="1">false</PlcBOOL>
</ResponseItem>
</hurz1>
</values>
diff --git a/plc4go/assets/testing/protocols/eip/DriverTestsuite.xml b/plc4go/assets/testing/protocols/eip/DriverTestsuite.xml
index a4addb1..2231728 100644
--- a/plc4go/assets/testing/protocols/eip/DriverTestsuite.xml
+++ b/plc4go/assets/testing/protocols/eip/DriverTestsuite.xml
@@ -213,9 +213,9 @@
<fields>
<hurz>
<EipField>
- <node dataType="string" bitLength="32">rate</node>
+ <node dataType="string" bitLength="32" encoding="UTF-8">rate</node>
<elementNb dataType="int" bitLength="64">0</elementNb>
- <defaultJavaType dataType="string" bitLength="128">java.lang.Object</defaultJavaType>
+ <defaultJavaType dataType="string" bitLength="128" encoding="UTF-8">java.lang.Object</defaultJavaType>
</EipField>
</hurz>
</fields>
@@ -223,8 +223,8 @@
<values>
<hurz>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcDINT dataType="string" bitLength="72">369229824</PlcDINT>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcDINT dataType="int" bitLength="64">369229824</PlcDINT>
</ResponseItem>
</hurz>
</values>
diff --git a/plc4go/assets/testing/protocols/modbus/DriverTestsuite.xml b/plc4go/assets/testing/protocols/modbus/DriverTestsuite.xml
index 2998551..dd62f42 100644
--- a/plc4go/assets/testing/protocols/modbus/DriverTestsuite.xml
+++ b/plc4go/assets/testing/protocols/modbus/DriverTestsuite.xml
@@ -97,7 +97,7 @@
<ModbusFieldHoldingRegister>
<address dataType="int" bitLength="64">0</address>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">REAL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">REAL</dataType>
</ModbusFieldHoldingRegister>
</hurz>
</fields>
@@ -105,8 +105,8 @@
<values>
<hurz>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcREAL dataType="string" bitLength="72">3.1415927</PlcREAL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcREAL dataType="float" bitLength="31">3.1415927410125732</PlcREAL>
</ResponseItem>
</hurz>
</values>
@@ -187,7 +187,7 @@
<ModbusFieldHoldingRegister>
<address dataType="int" bitLength="64">0</address>
<numberOfElements dataType="int" bitLength="64">2</numberOfElements>
- <dataType dataType="string" bitLength="32">REAL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">REAL</dataType>
</ModbusFieldHoldingRegister>
</hurz>
</fields>
@@ -195,10 +195,10 @@
<values>
<hurz>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
<PlcList>
- <PlcREAL dataType="string" bitLength="72">3.1415927</PlcREAL>
- <PlcREAL dataType="string" bitLength="72">3.1415927</PlcREAL>
+ <PlcREAL dataType="float" bitLength="31">3.1415927410125732</PlcREAL>
+ <PlcREAL dataType="float" bitLength="31">3.1415927410125732</PlcREAL>
</PlcList>
</ResponseItem>
</hurz>
@@ -327,14 +327,14 @@
<ModbusFieldHoldingRegister>
<address dataType="int" bitLength="64">0</address>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">REAL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">REAL</dataType>
</ModbusFieldHoldingRegister>
</hurz1>
<hurz2>
<ModbusFieldHoldingRegister>
<address dataType="int" bitLength="64">2</address>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">REAL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">REAL</dataType>
</ModbusFieldHoldingRegister>
</hurz2>
</fields>
@@ -342,14 +342,14 @@
<values>
<hurz1>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcREAL dataType="string" bitLength="72">3.1415927</PlcREAL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcREAL dataType="float" bitLength="31">3.1415927410125732</PlcREAL>
</ResponseItem>
</hurz1>
<hurz2>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcREAL dataType="string" bitLength="72">3.1415927</PlcREAL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcREAL dataType="float" bitLength="31">3.1415927410125732</PlcREAL>
</ResponseItem>
</hurz2>
</values>
@@ -429,14 +429,14 @@
<ModbusFieldHoldingRegister>
<address dataType="int" bitLength="64">0</address>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">REAL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">REAL</dataType>
</ModbusFieldHoldingRegister>
- <value dataType="string" bitLength="72">3.1415927</value>
+ <value dataType="string" bitLength="72" encoding="UTF-8">3.1415927</value>
</hurz>
</fields>
</PlcWriteRequest>
<fields>
- <hurz dataType="string" bitLength="16">OK</hurz>
+ <hurz dataType="string" bitLength="16" encoding="UTF-8">OK</hurz>
</fields>
</PlcWriteResponse>
</api-response>
@@ -519,15 +519,15 @@
<ModbusFieldHoldingRegister>
<address dataType="int" bitLength="64">0</address>
<numberOfElements dataType="int" bitLength="64">2</numberOfElements>
- <dataType dataType="string" bitLength="32">REAL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">REAL</dataType>
</ModbusFieldHoldingRegister>
- <value dataType="string" bitLength="72">3.1415927</value>
- <value dataType="string" bitLength="72">3.1415927</value>
+ <value dataType="string" bitLength="72" encoding="UTF-8">3.1415927</value>
+ <value dataType="string" bitLength="72" encoding="UTF-8">3.1415927</value>
</hurz>
</fields>
</PlcWriteRequest>
<fields>
- <hurz dataType="string" bitLength="16">OK</hurz>
+ <hurz dataType="string" bitLength="16" encoding="UTF-8">OK</hurz>
</fields>
</PlcWriteResponse>
</api-response>
diff --git a/plc4go/assets/testing/protocols/s7/DriverTestsuite.xml b/plc4go/assets/testing/protocols/s7/DriverTestsuite.xml
index 6b5e78c..bfd535f 100644
--- a/plc4go/assets/testing/protocols/s7/DriverTestsuite.xml
+++ b/plc4go/assets/testing/protocols/s7/DriverTestsuite.xml
@@ -535,12 +535,12 @@
<fields>
<hurz>
<S7Field>
- <memoryArea dataType="string" bitLength="56">OUTPUTS</memoryArea>
+ <memoryArea dataType="string" bitLength="56" encoding="UTF-8">OUTPUTS</memoryArea>
<blockNumber dataType="int" bitLength="64">0</blockNumber>
<byteOffset dataType="int" bitLength="64">0</byteOffset>
<bitOffset dataType="int" bitLength="64">0</bitOffset>
<numElements dataType="int" bitLength="64">1</numElements>
- <dataType dataType="string" bitLength="32">BOOL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">BOOL</dataType>
</S7Field>
</hurz>
</fields>
@@ -548,8 +548,8 @@
<values>
<hurz>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcBOOL dataType="string" bitLength="32">true</PlcBOOL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcBOOL dataType="bit" bitLength="1">true</PlcBOOL>
</ResponseItem>
</hurz>
</values>
@@ -671,12 +671,12 @@
<fields>
<hurz>
<S7Field>
- <memoryArea dataType="string" bitLength="56">OUTPUTS</memoryArea>
+ <memoryArea dataType="string" bitLength="56" encoding="UTF-8">OUTPUTS</memoryArea>
<blockNumber dataType="int" bitLength="64">0</blockNumber>
<byteOffset dataType="int" bitLength="64">0</byteOffset>
<bitOffset dataType="int" bitLength="64">0</bitOffset>
<numElements dataType="int" bitLength="64">1</numElements>
- <dataType dataType="string" bitLength="32">BOOL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">BOOL</dataType>
</S7Field>
</hurz>
</fields>
@@ -684,7 +684,7 @@
<values>
<hurz>
<ResponseItem>
- <result dataType="string" bitLength="104">ACCESS_DENIED</result>
+ <result dataType="string" bitLength="104" encoding="UTF-8">ACCESS_DENIED</result>
</ResponseItem>
</hurz>
</values>
diff --git a/plc4go/internal/plc4go/ads/Field.go b/plc4go/internal/plc4go/ads/Field.go
index 45533d8..cb3cb1c 100644
--- a/plc4go/internal/plc4go/ads/Field.go
+++ b/plc4go/internal/plc4go/ads/Field.go
@@ -23,10 +23,9 @@ import (
"encoding/xml"
"fmt"
model2 "github.com/apache/plc4x/plc4go/internal/plc4go/ads/readwrite/model"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"github.com/apache/plc4x/plc4go/pkg/plc4go/model"
"github.com/pkg/errors"
- "github.com/rs/zerolog/log"
- "strconv"
)
type PlcField struct {
@@ -108,46 +107,36 @@ func castToDirectAdsFieldFromPlcField(plcField model.PlcField) (DirectPlcField,
return DirectPlcField{}, errors.Errorf("couldn't %T cast to DirectPlcField", plcField)
}
-func (m DirectPlcField) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- log.Trace().Msg("MarshalXML")
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: m.FieldType.GetName()}}); err != nil {
+func (m DirectPlcField) Serialize(writeBuffer utils.WriteBuffer) error {
+ if err := writeBuffer.PushContext(m.FieldType.GetName()); err != nil {
return err
}
- if err := e.EncodeElement(m.IndexGroup, xml.StartElement{Name: xml.Name{Local: "indexGroup"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "int"},
- {Name: xml.Name{Local: "bitLength"}, Value: "64"},
- }}); err != nil {
+ // TODO: fix types to uint32
+ if err := writeBuffer.WriteInt64("indexGroup", 64, int64(m.IndexGroup)); err != nil {
return err
}
- if err := e.EncodeElement(m.IndexOffset, xml.StartElement{Name: xml.Name{Local: "indexOffset"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "int"},
- {Name: xml.Name{Local: "bitLength"}, Value: "64"},
- }}); err != nil {
+ if err := writeBuffer.WriteInt64("indexOffset", 64, int64(m.IndexOffset)); err != nil {
return err
}
- if m.StringLength > 0 {
- if err := e.EncodeElement(m.StringLength, xml.StartElement{Name: xml.Name{Local: "stringLength"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "int"},
- {Name: xml.Name{Local: "bitLength"}, Value: "64"},
- }}); err != nil {
- return err
- }
- }
- if err := e.EncodeElement(m.NumberOfElements, xml.StartElement{Name: xml.Name{Local: "numberOfElements"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "int"},
- {Name: xml.Name{Local: "bitLength"}, Value: "64"},
- }}); err != nil {
+
+ // TODO: fix types to uint32
+ if err := writeBuffer.WriteInt64("numberOfElements", 64, int64(m.NumberOfElements)); err != nil {
return err
}
- if err := e.EncodeElement(m.Datatype.String(), xml.StartElement{Name: xml.Name{Local: "dataType"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "string"},
- {Name: xml.Name{Local: "bitLength"}, Value: strconv.Itoa(len(m.Datatype.String()) * 8)},
- }}); err != nil {
+
+ if err := writeBuffer.WriteString("dataType", uint8(len([]rune(m.Datatype.String()))*8), "UTF-8", m.Datatype.String()); err != nil {
return err
}
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: m.FieldType.GetName()}}); err != nil {
+ if m.StringLength != 0 {
+ // TODO: fix types to int32
+ if err := writeBuffer.WriteInt64("stringLength", 64, int64(m.StringLength)); err != nil {
+ return err
+ }
+ }
+
+ if err := writeBuffer.PopContext(m.FieldType.GetName()); err != nil {
return err
}
return nil
@@ -200,82 +189,32 @@ func castToSymbolicPlcFieldFromPlcField(plcField model.PlcField) (SymbolicPlcFie
return SymbolicPlcField{}, errors.Errorf("couldn't cast %T to SymbolicPlcField", plcField)
}
-func (m SymbolicPlcField) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- log.Trace().Msg("MarshalXML")
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: m.FieldType.GetName()}}); err != nil {
+func (m SymbolicPlcField) Serialize(writeBuffer utils.WriteBuffer) error {
+ if err := writeBuffer.PushContext(m.FieldType.GetName()); err != nil {
return err
}
- if err := e.EncodeElement(m.SymbolicAddress, xml.StartElement{Name: xml.Name{Local: "symbolicAddress"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "string"},
- {Name: xml.Name{Local: "bitLength"}, Value: strconv.Itoa(len(m.SymbolicAddress) * 8)},
- }}); err != nil {
- return err
- }
- if m.StringLength > 0 {
- if err := e.EncodeElement(m.StringLength, xml.StartElement{Name: xml.Name{Local: "stringLength"}}); err != nil {
- return err
- }
- }
- if err := e.EncodeElement(m.NumberOfElements, xml.StartElement{Name: xml.Name{Local: "numberOfElements"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "int"},
- {Name: xml.Name{Local: "bitLength"}, Value: "64"},
- }}); err != nil {
- return err
- }
- if err := e.EncodeElement(m.Datatype.String(), xml.StartElement{Name: xml.Name{Local: "dataType"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "string"},
- {Name: xml.Name{Local: "bitLength"}, Value: strconv.Itoa(len(m.Datatype.String()) * 8)},
- }}); err != nil {
+ if err := writeBuffer.WriteString("symbolicAddress", uint8(len([]rune(m.SymbolicAddress))*8), "UTF-8", m.SymbolicAddress); err != nil {
return err
}
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: m.FieldType.GetName()}}); err != nil {
+ // TODO: fix types to uint32
+ if err := writeBuffer.WriteInt64("numberOfElements", 64, int64(m.NumberOfElements)); err != nil {
return err
}
- return nil
-}
-func (m DirectPlcField) banana(e *xml.Encoder, start xml.StartElement) error {
- log.Trace().Msg("MarshalXML")
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: m.FieldType.GetName()}}); err != nil {
+ if err := writeBuffer.WriteString("dataType", uint8(len([]rune(m.Datatype.String()))*8), "UTF-8", m.Datatype.String()); err != nil {
return err
}
- if err := e.EncodeElement(m.IndexGroup, xml.StartElement{Name: xml.Name{Local: "indexGroup"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "int"},
- {Name: xml.Name{Local: "bitLength"}, Value: "64"},
- }}); err != nil {
- return err
- }
- if err := e.EncodeElement(m.IndexOffset, xml.StartElement{Name: xml.Name{Local: "indexOffset"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "int"},
- {Name: xml.Name{Local: "bitLength"}, Value: "64"},
- }}); err != nil {
- return err
- }
if m.StringLength > 0 {
- if err := e.EncodeElement(m.StringLength, xml.StartElement{Name: xml.Name{Local: "stringLength"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "int"},
- {Name: xml.Name{Local: "bitLength"}, Value: "64"},
- }}); err != nil {
+ // TODO: fix types to int32
+ if err := writeBuffer.WriteInt64("stringLength", 64, int64(m.StringLength)); err != nil {
return err
}
}
- if err := e.EncodeElement(m.NumberOfElements, xml.StartElement{Name: xml.Name{Local: "numberOfElements"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "int"},
- {Name: xml.Name{Local: "bitLength"}, Value: "64"},
- }}); err != nil {
- return err
- }
- if err := e.EncodeElement(m.Datatype.String(), xml.StartElement{Name: xml.Name{Local: "dataType"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "string"},
- {Name: xml.Name{Local: "bitLength"}, Value: strconv.Itoa(len(m.Datatype.String()) * 8)},
- }}); err != nil {
- return err
- }
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: m.FieldType.GetName()}}); err != nil {
+ if err := writeBuffer.PopContext(m.FieldType.GetName()); err != nil {
return err
}
return nil
diff --git a/plc4go/internal/plc4go/eip/Field.go b/plc4go/internal/plc4go/eip/Field.go
index b6b8f1e..83c6696 100644
--- a/plc4go/internal/plc4go/eip/Field.go
+++ b/plc4go/internal/plc4go/eip/Field.go
@@ -20,10 +20,8 @@
package eip
import (
- "encoding/xml"
readWrite "github.com/apache/plc4x/plc4go/internal/plc4go/eip/readwrite/model"
- "github.com/rs/zerolog/log"
- "strconv"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
)
type EIPPlcField interface {
@@ -70,41 +68,32 @@ func (m PlcField) GetElementNb() uint16 {
return m.ElementNb
}
-func (m PlcField) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- log.Trace().Msg("MarshalXML")
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "EipField"}}); err != nil {
+func (m PlcField) Serialize(writeBuffer utils.WriteBuffer) error {
+ if err := writeBuffer.PushContext("EipField"); err != nil {
return err
}
- if err := e.EncodeElement(m.Tag, xml.StartElement{Name: xml.Name{Local: "node"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "string"},
- {Name: xml.Name{Local: "bitLength"}, Value: strconv.Itoa(len(m.Tag) * 8)},
- }}); err != nil {
+ if err := writeBuffer.WriteString("node", uint8(len([]rune(m.Tag))*8), "UTF-8", m.Tag); err != nil {
return err
}
+
if m.Type != 0 {
- if err := e.EncodeElement(m.Type, xml.StartElement{Name: xml.Name{Local: "type"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "string"},
- {Name: xml.Name{Local: "bitLength"}, Value: strconv.Itoa(int(m.Type.LengthInBits()))},
- }}); err != nil {
+ if err := writeBuffer.WriteString("type", uint8(len([]rune(m.Type.String()))*8), "UTF-8", m.Type.String()); err != nil {
return err
}
}
- if err := e.EncodeElement(m.ElementNb, xml.StartElement{Name: xml.Name{Local: "elementNb"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "int"},
- {Name: xml.Name{Local: "bitLength"}, Value: "64"},
- }}); err != nil {
+
+ // TODO: fix types to uint16
+ if err := writeBuffer.WriteInt64("elementNb", 64, int64(m.ElementNb)); err != nil {
return err
}
+
// TODO: remove this from the spec
- if err := e.EncodeElement("java.lang.Object", xml.StartElement{Name: xml.Name{Local: "defaultJavaType"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "string"},
- {Name: xml.Name{Local: "bitLength"}, Value: strconv.Itoa(len("java.lang.Object") * 8)},
- }}); err != nil {
+ if err := writeBuffer.WriteString("defaultJavaType", uint8(len([]rune("java.lang.Object"))*8), "UTF-8", "java.lang.Object"); err != nil {
return err
}
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "EipField"}}); err != nil {
+ if err := writeBuffer.PopContext("EipField"); err != nil {
return err
}
return nil
diff --git a/plc4go/internal/plc4go/modbus/Field.go b/plc4go/internal/plc4go/modbus/Field.go
index 0e35e80..15d703d 100644
--- a/plc4go/internal/plc4go/modbus/Field.go
+++ b/plc4go/internal/plc4go/modbus/Field.go
@@ -20,9 +20,9 @@
package modbus
import (
- "encoding/xml"
"fmt"
model2 "github.com/apache/plc4x/plc4go/internal/plc4go/modbus/readwrite/model"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"github.com/apache/plc4x/plc4go/pkg/plc4go/model"
"github.com/pkg/errors"
"github.com/rs/zerolog/log"
@@ -89,32 +89,24 @@ func CastToModbusFieldFromPlcField(plcField model.PlcField) (PlcField, error) {
return PlcField{}, errors.New("couldn't cast to ModbusPlcField")
}
-func (m PlcField) MarshalXML(e *xml.Encoder, _ xml.StartElement) error {
- log.Trace().Msg("MarshalXML")
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: m.FieldType.GetName()}}); err != nil {
+func (m PlcField) Serialize(writeBuffer utils.WriteBuffer) error {
+ if err := writeBuffer.PushContext(m.FieldType.GetName()); err != nil {
return err
}
- if err := e.EncodeElement(m.Address, xml.StartElement{Name: xml.Name{Local: "address"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "int"},
- {Name: xml.Name{Local: "bitLength"}, Value: "64"},
- }}); err != nil {
+ // TODO: fix types to uint16
+ if err := writeBuffer.WriteInt64("address", 64, int64(m.Address)); err != nil {
return err
}
- if err := e.EncodeElement(m.Quantity, xml.StartElement{Name: xml.Name{Local: "numberOfElements"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "int"},
- {Name: xml.Name{Local: "bitLength"}, Value: "64"},
- }}); err != nil {
+ if err := writeBuffer.WriteInt64("numberOfElements", 64, int64(m.GetQuantity())); err != nil {
return err
}
- if err := e.EncodeElement(m.Datatype.String(), xml.StartElement{Name: xml.Name{Local: "dataType"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "string"},
- {Name: xml.Name{Local: "bitLength"}, Value: strconv.Itoa(len(m.Datatype.String()) * 8)},
- }}); err != nil {
+ dataType := m.GetDataType().String()
+ if err := writeBuffer.WriteString("dataType", uint8(len([]rune(dataType))*8), "UTF-8", dataType); err != nil {
return err
}
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: m.FieldType.GetName()}}); err != nil {
+ if err := writeBuffer.PopContext(m.FieldType.GetName()); err != nil {
return err
}
return nil
diff --git a/plc4go/internal/plc4go/s7/Field.go b/plc4go/internal/plc4go/s7/Field.go
index cda8bca..abaa392 100644
--- a/plc4go/internal/plc4go/s7/Field.go
+++ b/plc4go/internal/plc4go/s7/Field.go
@@ -20,13 +20,11 @@
package s7
import (
- "encoding/xml"
"fmt"
readWrite "github.com/apache/plc4x/plc4go/internal/plc4go/s7/readwrite/model"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"github.com/apache/plc4x/plc4go/pkg/plc4go/model"
"github.com/pkg/errors"
- "github.com/rs/zerolog/log"
- "strconv"
)
type S7PlcField interface {
@@ -124,50 +122,35 @@ func CastTos7FieldFromPlcField(plcField model.PlcField) (PlcField, error) {
return PlcField{}, errors.New("couldn't cast to s7PlcField")
}
-func (m PlcField) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- log.Trace().Msg("MarshalXML")
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: m.FieldType.GetName()}}); err != nil {
+func (m PlcField) Serialize(writeBuffer utils.WriteBuffer) error {
+ if err := writeBuffer.PushContext(m.FieldType.GetName()); err != nil {
return err
}
- if err := e.EncodeElement(m.MemoryArea.String(), xml.StartElement{Name: xml.Name{Local: "memoryArea"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "string"},
- {Name: xml.Name{Local: "bitLength"}, Value: strconv.Itoa(len(m.MemoryArea.String()) * 8)},
- }}); err != nil {
+ if err := writeBuffer.WriteString("memoryArea", uint8(len(m.MemoryArea.String())*8), "UTF-8", m.MemoryArea.String()); err != nil {
return err
}
- if err := e.EncodeElement(m.BlockNumber, xml.StartElement{Name: xml.Name{Local: "blockNumber"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "int"},
- {Name: xml.Name{Local: "bitLength"}, Value: "64"},
- }}); err != nil {
+ // TODO: change to uint16
+ if err := writeBuffer.WriteInt64("blockNumber", 64, int64(m.BlockNumber)); err != nil {
return err
}
- if err := e.EncodeElement(m.ByteOffset, xml.StartElement{Name: xml.Name{Local: "byteOffset"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "int"},
- {Name: xml.Name{Local: "bitLength"}, Value: "64"},
- }}); err != nil {
+ // TODO: change to uint16
+ if err := writeBuffer.WriteInt64("byteOffset", 64, int64(m.ByteOffset)); err != nil {
return err
}
- if err := e.EncodeElement(m.BitOffset, xml.StartElement{Name: xml.Name{Local: "bitOffset"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "int"},
- {Name: xml.Name{Local: "bitLength"}, Value: "64"},
- }}); err != nil {
+ // TODO: change to uint16
+ if err := writeBuffer.WriteInt64("bitOffset", 64, int64(m.BitOffset)); err != nil {
return err
}
- if err := e.EncodeElement(m.NumElements, xml.StartElement{Name: xml.Name{Local: "numElements"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "int"},
- {Name: xml.Name{Local: "bitLength"}, Value: "64"},
- }}); err != nil {
+ // TODO: change to uint16
+ if err := writeBuffer.WriteInt64("numElements", 64, int64(m.NumElements)); err != nil {
return err
}
- if err := e.EncodeElement(m.Datatype.String(), xml.StartElement{Name: xml.Name{Local: "dataType"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "string"},
- {Name: xml.Name{Local: "bitLength"}, Value: strconv.Itoa(len(m.Datatype.String()) * 8)},
- }}); err != nil {
+ if err := writeBuffer.WriteString("dataType", uint8(len(m.Datatype.String())*8), "UTF-8", m.Datatype.String()); err != nil {
return err
}
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: m.FieldType.GetName()}}); err != nil {
+ if err := writeBuffer.PopContext(m.FieldType.GetName()); err != nil {
return err
}
return nil
diff --git a/plc4go/internal/plc4go/spi/model/DefaultPlcReadRequest.go b/plc4go/internal/plc4go/spi/model/DefaultPlcReadRequest.go
index 9f2c681..c05c7e5 100644
--- a/plc4go/internal/plc4go/spi/model/DefaultPlcReadRequest.go
+++ b/plc4go/internal/plc4go/spi/model/DefaultPlcReadRequest.go
@@ -20,9 +20,9 @@
package model
import (
- "encoding/xml"
"github.com/apache/plc4x/plc4go/internal/plc4go/spi"
"github.com/apache/plc4x/plc4go/internal/plc4go/spi/interceptors"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"github.com/apache/plc4x/plc4go/pkg/plc4go/model"
"github.com/pkg/errors"
"time"
@@ -140,31 +140,34 @@ func (m DefaultPlcReadRequest) Execute() <-chan model.PlcReadRequestResult {
return resultChannel
}
-func (m DefaultPlcReadRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "PlcReadRequest"}}); err != nil {
+func (m DefaultPlcReadRequest) Serialize(writeBuffer utils.WriteBuffer) error {
+ if err := writeBuffer.PushContext("PlcReadRequest"); err != nil {
return err
}
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "fields"}}); err != nil {
+ if err := writeBuffer.PushContext("fields"); err != nil {
return err
}
- for _, fieldName := range m.fieldNames {
- field := m.fields[fieldName]
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: fieldName}}); err != nil {
+ for _, fieldName := range m.GetFieldNames() {
+ if err := writeBuffer.PushContext(fieldName); err != nil {
return err
}
- if err := e.EncodeElement(field, xml.StartElement{Name: xml.Name{Local: "field"}}); err != nil {
- return err
+ field := m.GetField(fieldName)
+ if serializableField, ok := field.(utils.Serializable); ok {
+ if err := serializableField.Serialize(writeBuffer); err != nil {
+ return err
+ }
+ } else {
+ return errors.Errorf("Error serializing. Field %T doesn't implement Serializable", field)
}
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: fieldName}}); err != nil {
+ if err := writeBuffer.PopContext(fieldName); err != nil {
return err
}
}
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "fields"}}); err != nil {
+ if err := writeBuffer.PopContext("fields"); err != nil {
return err
}
-
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "PlcReadRequest"}}); err != nil {
+ if err := writeBuffer.PopContext("PlcReadRequest"); err != nil {
return err
}
return nil
diff --git a/plc4go/internal/plc4go/spi/model/DefaultPlcReadResponse.go b/plc4go/internal/plc4go/spi/model/DefaultPlcReadResponse.go
index 30bc4a7..3133ad7 100644
--- a/plc4go/internal/plc4go/spi/model/DefaultPlcReadResponse.go
+++ b/plc4go/internal/plc4go/spi/model/DefaultPlcReadResponse.go
@@ -20,10 +20,10 @@
package model
import (
- "encoding/xml"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+ values2 "github.com/apache/plc4x/plc4go/internal/plc4go/spi/values"
"github.com/apache/plc4x/plc4go/pkg/plc4go/model"
"github.com/apache/plc4x/plc4go/pkg/plc4go/values"
- "strconv"
)
type DefaultPlcReadResponse struct {
@@ -59,50 +59,56 @@ func (m DefaultPlcReadResponse) GetValue(name string) values.PlcValue {
return m.values[name]
}
-func (m DefaultPlcReadResponse) MarshalXML(e *xml.Encoder, _ xml.StartElement) error {
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "PlcReadResponse"}}); err != nil {
+func (m DefaultPlcReadResponse) Serialize(writeBuffer utils.WriteBuffer) error {
+ if err := writeBuffer.PushContext("PlcReadResponse"); err != nil {
return err
}
- if err := e.EncodeElement(m.request, xml.StartElement{Name: xml.Name{Local: "PlcReadRequest"}}); err != nil {
- return err
+ if request, ok := m.request.(utils.Serializable); ok {
+ if err := request.Serialize(writeBuffer); err != nil {
+ return err
+ }
}
-
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "values"}}); err != nil {
+ if err := writeBuffer.PushContext("values"); err != nil {
return err
}
for _, fieldName := range m.GetFieldNames() {
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: fieldName}}); err != nil {
+ if err := writeBuffer.PushContext(fieldName); err != nil {
return err
}
- if err := e.EncodeToken(xml.StartElement{
- Name: xml.Name{Local: "ResponseItem"},
- }); err != nil {
+ if err := writeBuffer.PushContext("ResponseItem"); err != nil {
return err
}
- if err := e.EncodeElement(m.GetResponseCode(fieldName).GetName(), xml.StartElement{Name: xml.Name{Local: "result"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "string"},
- {Name: xml.Name{Local: "bitLength"}, Value: strconv.Itoa(len(m.GetResponseCode(fieldName).GetName()) * 8)},
- }}); err != nil {
+ codeName := m.GetResponseCode(fieldName).GetName()
+ if err := writeBuffer.WriteString("result", uint8(len([]rune(codeName))*8), "UTF-8", codeName); err != nil {
return err
}
- if err := e.EncodeElement(m.GetValue(fieldName), xml.StartElement{Name: xml.Name{Local: "field"}}); err != nil {
+
+ valueResponse := m.GetValue(fieldName)
+ if _, ok := valueResponse.(values2.PlcNULL); ok {
+ // We ignore nulls
+ if err := writeBuffer.PopContext("ResponseItem"); err != nil {
+ return err
+ }
+ if err := writeBuffer.PopContext(fieldName); err != nil {
+ return err
+ }
+ continue
+ }
+ if err := valueResponse.(utils.Serializable).Serialize(writeBuffer); err != nil {
return err
}
- if err := e.EncodeToken(xml.EndElement{
- Name: xml.Name{Local: "ResponseItem"},
- }); err != nil {
+ if err := writeBuffer.PopContext("ResponseItem"); err != nil {
return err
}
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: fieldName}}); err != nil {
+ if err := writeBuffer.PopContext(fieldName); err != nil {
return err
}
}
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "values"}}); err != nil {
+ if err := writeBuffer.PopContext("values"); err != nil {
return err
}
-
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "PlcReadResponse"}}); err != nil {
+ if err := writeBuffer.PopContext("PlcReadResponse"); err != nil {
return err
}
return nil
diff --git a/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionEvent.go b/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionEvent.go
index 4ef16b4..06f97a7 100644
--- a/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionEvent.go
+++ b/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionEvent.go
@@ -20,7 +20,7 @@
package model
import (
- "encoding/xml"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"github.com/apache/plc4x/plc4go/pkg/plc4go/model"
"github.com/apache/plc4x/plc4go/pkg/plc4go/values"
"time"
@@ -74,30 +74,30 @@ func (m DefaultPlcSubscriptionEvent) GetValue(name string) values.PlcValue {
return m.values[name]
}
-func (m DefaultPlcSubscriptionEvent) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "PlcSubscriptionRequest"}}); err != nil {
+func (m DefaultPlcSubscriptionEvent) Serialize(writeBuffer utils.WriteBuffer) error {
+ if err := writeBuffer.PushContext("PlcReadResponse"); err != nil {
return err
}
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "fields"}}); err != nil {
+ if err := writeBuffer.PushContext("fields"); err != nil {
return err
}
- for fieldName, field := range m.fields {
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: fieldName}}); err != nil {
+ for _, fieldName := range m.GetFieldNames() {
+ if err := writeBuffer.PushContext(fieldName); err != nil {
return err
}
- if err := e.EncodeElement(field, xml.StartElement{Name: xml.Name{Local: "field"}}); err != nil {
+ valueResponse := m.GetValue(fieldName)
+ if err := valueResponse.(utils.Serializable).Serialize(writeBuffer); err != nil {
return err
}
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: fieldName}}); err != nil {
+ if err := writeBuffer.PopContext(fieldName); err != nil {
return err
}
}
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "fields"}}); err != nil {
+ if err := writeBuffer.PopContext("fields"); err != nil {
return err
}
-
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "PlcSubscriptionRequest"}}); err != nil {
+ if err := writeBuffer.PopContext("PlcReadResponse"); err != nil {
return err
}
return nil
diff --git a/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionRequest.go b/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionRequest.go
index f5b0552..89497f2 100644
--- a/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionRequest.go
+++ b/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionRequest.go
@@ -20,8 +20,8 @@
package model
import (
- "encoding/xml"
"github.com/apache/plc4x/plc4go/internal/plc4go/spi"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"github.com/apache/plc4x/plc4go/pkg/plc4go/model"
"github.com/pkg/errors"
"time"
@@ -151,31 +151,34 @@ func (m DefaultPlcSubscriptionRequest) GetInterval(name string) time.Duration {
return m.intervals[name]
}
-func (m DefaultPlcSubscriptionRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "PlcSubscriptionRequest"}}); err != nil {
+func (m DefaultPlcSubscriptionRequest) Serialize(writeBuffer utils.WriteBuffer) error {
+ if err := writeBuffer.PushContext("PlcSubscriptionRequest"); err != nil {
return err
}
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "fields"}}); err != nil {
+ if err := writeBuffer.PushContext("fields"); err != nil {
return err
}
- for _, fieldName := range m.fieldNames {
- field := m.fields[fieldName]
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: fieldName}}); err != nil {
+ for _, fieldName := range m.GetFieldNames() {
+ if err := writeBuffer.PushContext(fieldName); err != nil {
return err
}
- if err := e.EncodeElement(field, xml.StartElement{Name: xml.Name{Local: "field"}}); err != nil {
- return err
+ field := m.GetField(fieldName)
+ if serializableField, ok := field.(utils.Serializable); ok {
+ if err := serializableField.Serialize(writeBuffer); err != nil {
+ return err
+ }
+ } else {
+ return errors.New("Error serializing. Field doesn't implement Serializable")
}
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: fieldName}}); err != nil {
+ if err := writeBuffer.PopContext(fieldName); err != nil {
return err
}
}
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "fields"}}); err != nil {
+ if err := writeBuffer.PopContext("fields"); err != nil {
return err
}
-
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "PlcSubscriptionRequest"}}); err != nil {
+ if err := writeBuffer.PopContext("PlcSubscriptionRequest"); err != nil {
return err
}
return nil
diff --git a/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionResponse.go b/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionResponse.go
index 19a1256..9a2a323 100644
--- a/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionResponse.go
+++ b/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionResponse.go
@@ -20,8 +20,9 @@
package model
import (
- "encoding/xml"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"github.com/apache/plc4x/plc4go/pkg/plc4go/model"
+ "github.com/apache/plc4x/plc4go/pkg/plc4go/values"
)
type DefaultPlcSubscriptionResponse struct {
@@ -51,41 +52,39 @@ func (m DefaultPlcSubscriptionResponse) GetFieldNames() []string {
return fieldNames
}
-func (m DefaultPlcSubscriptionResponse) GetValue(name string) interface{} {
+func (m DefaultPlcSubscriptionResponse) GetValue(name string) values.PlcValue {
panic("not implemented: implement me")
}
-func (m DefaultPlcSubscriptionResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "PlcReadResponse"}}); err != nil {
+func (m DefaultPlcSubscriptionResponse) Serialize(writeBuffer utils.WriteBuffer) error {
+ if err := writeBuffer.PushContext("PlcSubscriptionResponse"); err != nil {
return err
}
- if err := e.EncodeElement(m.request, xml.StartElement{Name: xml.Name{Local: "PlcReadRequest"}}); err != nil {
- return err
+ if request, ok := m.request.(utils.Serializable); ok {
+ if err := request.Serialize(writeBuffer); err != nil {
+ return err
+ }
}
-
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "values"}}); err != nil {
+ if err := writeBuffer.PushContext("values"); err != nil {
return err
}
for _, fieldName := range m.GetFieldNames() {
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: fieldName},
- Attr: []xml.Attr{
- {Name: xml.Name{Local: "result"}, Value: m.GetResponseCode(fieldName).GetName()},
- }}); err != nil {
+ if err := writeBuffer.PushContext(fieldName); err != nil {
return err
}
- if err := e.EncodeElement(m.GetValue(fieldName), xml.StartElement{Name: xml.Name{Local: "field"}}); err != nil {
+ valueResponse := m.GetValue(fieldName)
+ if err := valueResponse.(utils.Serializable).Serialize(writeBuffer); err != nil {
return err
}
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: fieldName}}); err != nil {
+ if err := writeBuffer.PopContext(fieldName); err != nil {
return err
}
}
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "values"}}); err != nil {
+ if err := writeBuffer.PopContext("values"); err != nil {
return err
}
-
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "PlcReadResponse"}}); err != nil {
+ if err := writeBuffer.PopContext("PlcSubscriptionResponse"); err != nil {
return err
}
return nil
diff --git a/plc4go/internal/plc4go/spi/model/DefaultPlcWriteRequest.go b/plc4go/internal/plc4go/spi/model/DefaultPlcWriteRequest.go
index 6325bd8..6e71eef 100644
--- a/plc4go/internal/plc4go/spi/model/DefaultPlcWriteRequest.go
+++ b/plc4go/internal/plc4go/spi/model/DefaultPlcWriteRequest.go
@@ -20,14 +20,13 @@
package model
import (
- "encoding/xml"
"github.com/apache/plc4x/plc4go/internal/plc4go/spi"
"github.com/apache/plc4x/plc4go/internal/plc4go/spi/interceptors"
- values2 "github.com/apache/plc4x/plc4go/internal/plc4go/spi/values"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+ spiValues "github.com/apache/plc4x/plc4go/internal/plc4go/spi/values"
"github.com/apache/plc4x/plc4go/pkg/plc4go/model"
"github.com/apache/plc4x/plc4go/pkg/plc4go/values"
"github.com/pkg/errors"
- "strconv"
"time"
)
@@ -170,26 +169,30 @@ func (m DefaultPlcWriteRequest) GetValue(name string) values.PlcValue {
return m.values[name]
}
-func (m DefaultPlcWriteRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "PlcWriteRequest"}}); err != nil {
+func (m DefaultPlcWriteRequest) Serialize(writeBuffer utils.WriteBuffer) error {
+ if err := writeBuffer.PushContext("PlcWriteRequest"); err != nil {
return err
}
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "fields"}}); err != nil {
+ if err := writeBuffer.PushContext("fields"); err != nil {
return err
}
- for _, fieldName := range m.fieldNames {
- field := m.fields[fieldName]
- value := m.values[fieldName]
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: fieldName}}); err != nil {
+ for _, fieldName := range m.GetFieldNames() {
+ if err := writeBuffer.PushContext(fieldName); err != nil {
return err
}
- if err := e.EncodeElement(field, xml.StartElement{Name: xml.Name{Local: "field"}}); err != nil {
- return err
+ field := m.GetField(fieldName)
+ if serializableField, ok := field.(utils.Serializable); ok {
+ if err := serializableField.Serialize(writeBuffer); err != nil {
+ return err
+ }
+ } else {
+ return errors.New("Error serializing. Field doesn't implement Serializable")
}
+ value := m.GetValue(fieldName)
switch value.(type) {
- case values2.PlcList:
- listValue, ok := value.(values2.PlcList)
+ case spiValues.PlcList:
+ listValue, ok := value.(spiValues.PlcList)
if !ok {
return errors.New("couldn't cast PlcValue to PlcList")
}
@@ -197,45 +200,24 @@ func (m DefaultPlcWriteRequest) MarshalXML(e *xml.Encoder, start xml.StartElemen
if !subValue.IsString() {
return errors.New("value not serializable to string")
}
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "value"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "string"},
- {Name: xml.Name{Local: "bitLength"}, Value: strconv.Itoa(len(subValue.GetString()) * 8)},
- }}); err != nil {
- return err
- }
- if err := e.EncodeToken(xml.CharData(subValue.GetString())); err != nil {
- return err
- }
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "value"}}); err != nil {
+ subValue.GetString()
+ if err := writeBuffer.WriteString("value", uint8(len([]rune(subValue.GetString()))*8), "UTF-8", subValue.GetString()); err != nil {
return err
}
}
default:
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "value"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "string"},
- {Name: xml.Name{Local: "bitLength"}, Value: strconv.Itoa(len(value.GetString()) * 8)},
- }}); err != nil {
- return err
- }
- if !value.IsString() {
- return errors.New("value not serializable to string")
- }
- if err := e.EncodeToken(xml.CharData(value.GetString())); err != nil {
- return err
- }
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "value"}}); err != nil {
+ if err := writeBuffer.WriteString("value", uint8(len([]rune(value.GetString()))*8), "UTF-8", value.GetString()); err != nil {
return err
}
}
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: fieldName}}); err != nil {
+ if err := writeBuffer.PopContext(fieldName); err != nil {
return err
}
}
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "fields"}}); err != nil {
+ if err := writeBuffer.PopContext("fields"); err != nil {
return err
}
-
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "PlcWriteRequest"}}); err != nil {
+ if err := writeBuffer.PopContext("PlcWriteRequest"); err != nil {
return err
}
return nil
diff --git a/plc4go/internal/plc4go/spi/model/DefaultPlcWriteResponse.go b/plc4go/internal/plc4go/spi/model/DefaultPlcWriteResponse.go
index db0ee57..442bc40 100644
--- a/plc4go/internal/plc4go/spi/model/DefaultPlcWriteResponse.go
+++ b/plc4go/internal/plc4go/spi/model/DefaultPlcWriteResponse.go
@@ -20,9 +20,8 @@
package model
import (
- "encoding/xml"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"github.com/apache/plc4x/plc4go/pkg/plc4go/model"
- "strconv"
)
type DefaultPlcWriteResponse struct {
@@ -52,37 +51,31 @@ func (m DefaultPlcWriteResponse) GetRequest() model.PlcWriteRequest {
return m.request
}
-func (m DefaultPlcWriteResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "PlcWriteResponse"}}); err != nil {
+func (m DefaultPlcWriteResponse) Serialize(writeBuffer utils.WriteBuffer) error {
+ if err := writeBuffer.PushContext("PlcWriteResponse"); err != nil {
return err
}
- if err := e.EncodeElement(m.request, xml.StartElement{Name: xml.Name{Local: "PlcWriteRequest"}}); err != nil {
- return err
+ if serializableRequest, ok := m.request.(utils.Serializable); ok {
+ if err := serializableRequest.Serialize(writeBuffer); err != nil {
+ return err
+ }
}
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "fields"}}); err != nil {
+ if err := writeBuffer.PushContext("fields"); err != nil {
return err
}
for _, fieldName := range m.GetFieldNames() {
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: fieldName}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "string"},
- {Name: xml.Name{Local: "bitLength"}, Value: strconv.Itoa(len(m.GetResponseCode(fieldName).GetName()) * 8)},
- }}); err != nil {
- return err
- }
- if err := e.EncodeToken(xml.CharData(m.GetResponseCode(fieldName).GetName())); err != nil {
- return err
- }
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: fieldName}}); err != nil {
+ responseCodeName := m.GetResponseCode(fieldName).GetName()
+ if err := writeBuffer.WriteString(fieldName, uint8(len([]rune(responseCodeName))*8), "UTF-8", responseCodeName); err != nil {
return err
}
}
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "fields"}}); err != nil {
+ if err := writeBuffer.PopContext("fields"); err != nil {
return err
}
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "PlcWriteResponse"}}); err != nil {
+ if err := writeBuffer.PopContext("PlcWriteResponse"); err != nil {
return err
}
return nil
diff --git a/plc4go/internal/plc4go/spi/testutils/DriverTestRunner.go b/plc4go/internal/plc4go/spi/testutils/DriverTestRunner.go
index 0f76e29..e534c20 100644
--- a/plc4go/internal/plc4go/spi/testutils/DriverTestRunner.go
+++ b/plc4go/internal/plc4go/spi/testutils/DriverTestRunner.go
@@ -21,7 +21,6 @@ package testutils
import (
"encoding/hex"
- "encoding/xml"
"fmt"
"github.com/apache/plc4x/plc4go/internal/plc4go/spi"
"github.com/apache/plc4x/plc4go/internal/plc4go/spi/transports"
@@ -216,14 +215,16 @@ func (m DriverTestsuite) ExecuteStep(connection plc4go.PlcConnection, testcase *
return errors.Wrap(readRequestResult.Err, "error sending response")
}
// Serialize the response to XML
- actualResponse, err := xml.Marshal(readRequestResult.Response)
+ xmlWriteBuffer := utils.NewXmlWriteBuffer()
+ err := readRequestResult.Response.(utils.Serializable).Serialize(xmlWriteBuffer)
if err != nil {
return errors.Wrap(err, "error serializing response")
}
+ actualResponse := xmlWriteBuffer.GetXmlString()
// Get the reference XML
- referenceSerialized := step.payload.XML()
+ referenceSerialized := step.payload.XMLPretty()
// Compare the results
- err = CompareResults(actualResponse, []byte(referenceSerialized))
+ err = CompareResults([]byte(actualResponse), []byte(referenceSerialized))
if err != nil {
return errors.Wrap(err, "Error comparing the results")
}
@@ -239,14 +240,16 @@ func (m DriverTestsuite) ExecuteStep(connection plc4go.PlcConnection, testcase *
return errors.Wrap(writeResponseResult.Err, "error sending response")
}
// Serialize the response to XML
- actualResponse, err := xml.Marshal(writeResponseResult.Response)
+ xmlWriteBuffer := utils.NewXmlWriteBuffer()
+ err := writeResponseResult.Response.(utils.Serializable).Serialize(xmlWriteBuffer)
if err != nil {
return errors.Wrap(err, "error serializing response")
}
+ actualResponse := xmlWriteBuffer.GetXmlString()
// Get the reference XML
- referenceSerialized := step.payload.XML()
+ referenceSerialized := step.payload.XMLPretty()
// Compare the results
- err = CompareResults(actualResponse, []byte(referenceSerialized))
+ err = CompareResults([]byte(actualResponse), []byte(referenceSerialized))
if err != nil {
return errors.Wrap(err, "Error comparing the results")
}
@@ -255,7 +258,7 @@ func (m DriverTestsuite) ExecuteStep(connection plc4go.PlcConnection, testcase *
}
case StepTypeOutgoingPlcMessage:
typeName := step.payload.Name
- payloadString := step.payload.XML()
+ payloadString := step.payload.XMLPretty()
// Parse the xml into a real model
log.Trace().Msg("parsing xml")
@@ -341,7 +344,7 @@ func (m DriverTestsuite) ExecuteStep(connection plc4go.PlcConnection, testcase *
// If there's a difference, parse the input and display it to simplify debugging
case StepTypeIncomingPlcMessage:
typeName := step.payload.Name
- payloadString := step.payload.XML()
+ payloadString := step.payload.XMLPretty()
// Parse the xml into a real model
log.Trace().Msg("Parsing model")
@@ -422,7 +425,7 @@ func (m DriverTestsuite) parseMessage(typeName string, payloadString string, ste
func (m DriverTestsuite) ParseXml(referenceXml *xmldom.Node, parserArguments []string) {
normalizeXml(referenceXml)
- //referenceSerialized := referenceXml.FirstChild().XML()
+ //referenceSerialized := referenceXml.FirstChild().XMLPretty()
}
type Testcase struct {
diff --git a/plc4go/internal/plc4go/spi/testutils/TestUtils.go b/plc4go/internal/plc4go/spi/testutils/TestUtils.go
index b5d41fb..9d60f39 100644
--- a/plc4go/internal/plc4go/spi/testutils/TestUtils.go
+++ b/plc4go/internal/plc4go/spi/testutils/TestUtils.go
@@ -25,6 +25,7 @@ import (
"github.com/pkg/errors"
"github.com/rs/zerolog/log"
"os"
+ "strings"
)
func CompareResults(actualString []byte, referenceString []byte) error {
@@ -50,6 +51,17 @@ func CompareResults(actualString []byte, referenceString []byte) error {
log.Info().Msgf("We ignore empty elements which should be deleted %v", delta)
continue
}
+ // Workaround for different precisions on float
+ if delta.Operation == xdiff.Update &&
+ string(delta.Subject.Parent.FirstChild.Name) == "dataType" &&
+ string(delta.Subject.Parent.FirstChild.Value) == "float" &&
+ string(delta.Object.Parent.FirstChild.Name) == "dataType" &&
+ string(delta.Object.Parent.FirstChild.Value) == "float" {
+ if strings.Contains(string(delta.Subject.Value), string(delta.Object.Value)) || strings.Contains(string(delta.Object.Value), string(delta.Subject.Value)) {
+ log.Info().Msgf("We ignore precision diffs %v", delta)
+ continue
+ }
+ }
cleanDiff = append(cleanDiff, delta)
}
diff --git a/plc4go/internal/plc4go/spi/values/BINT.go b/plc4go/internal/plc4go/spi/values/BINT.go
index ab0b2f4..a744db4 100644
--- a/plc4go/internal/plc4go/spi/values/BINT.go
+++ b/plc4go/internal/plc4go/spi/values/BINT.go
@@ -20,7 +20,7 @@
package values
import (
- "encoding/xml"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"math"
"math/big"
"strconv"
@@ -121,14 +121,6 @@ func (m PlcBINT) GetFloat64() float64 {
func (m PlcBINT) GetString() string {
return strconv.Itoa(int(m.GetInt64()))
}
-
-func (m PlcBINT) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcBINT"}}); err != nil {
- return err
- }
- return nil
-}
-
func (m PlcBINT) isZero() bool {
return m.value.Cmp(big.NewInt(0)) == 0
}
@@ -144,3 +136,7 @@ func (m PlcBINT) isGreaterOrEqual(other int64) bool {
func (m PlcBINT) isLowerOrEqual(other int64) bool {
return m.value.Cmp(big.NewInt(other)) <= 0
}
+
+func (m PlcBINT) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteBigInt("PlcBINT", uint8(m.value.BitLen()), m.value)
+}
diff --git a/plc4go/internal/plc4go/spi/values/BOOL.go b/plc4go/internal/plc4go/spi/values/BOOL.go
index a21e1df..70f0ee8 100644
--- a/plc4go/internal/plc4go/spi/values/BOOL.go
+++ b/plc4go/internal/plc4go/spi/values/BOOL.go
@@ -19,10 +19,7 @@
package values
-import (
- "encoding/xml"
- "strconv"
-)
+import "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
type PlcBOOL struct {
value bool
@@ -58,20 +55,6 @@ func (m PlcBOOL) GetBoolArray() []bool {
return []bool{m.value}
}
-func (m PlcBOOL) MarshalXML(e *xml.Encoder, _ xml.StartElement) error {
- size := 40
- if m.value {
- size = 32
- }
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcBOOL"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "string"},
- {Name: xml.Name{Local: "bitLength"}, Value: strconv.Itoa(size)},
- }}); err != nil {
- return err
- }
- return nil
-}
-
func (m PlcBOOL) IsString() bool {
return true
}
@@ -83,3 +66,7 @@ func (m PlcBOOL) GetString() string {
return "false"
}
}
+
+func (m PlcBOOL) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteBit("PlcBOOL", m.value)
+}
diff --git a/plc4go/internal/plc4go/spi/values/BREAL.go b/plc4go/internal/plc4go/spi/values/BREAL.go
index 51aeee5..6098e72 100644
--- a/plc4go/internal/plc4go/spi/values/BREAL.go
+++ b/plc4go/internal/plc4go/spi/values/BREAL.go
@@ -20,8 +20,8 @@
package values
import (
- "encoding/xml"
"fmt"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"math"
"math/big"
)
@@ -150,13 +150,6 @@ func (m PlcBREAL) GetString() string {
return fmt.Sprintf("%g", m.GetFloat64())
}
-func (m PlcBREAL) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcBREAL"}}); err != nil {
- return err
- }
- return nil
-}
-
func (m PlcBREAL) isZero() bool {
return m.value.Cmp(big.NewFloat(0.0)) == 0.0
}
@@ -172,3 +165,8 @@ func (m PlcBREAL) isGreaterOrEqual(other float64) bool {
func (m PlcBREAL) isLowerOrEqual(other float64) bool {
return m.value.Cmp(big.NewFloat(other)) <= 0
}
+
+func (m PlcBREAL) Serialize(writeBuffer utils.WriteBuffer) error {
+ // TODO: fix this a insert a valid bit length calculation
+ return writeBuffer.WriteBigFloat("PlcBREAL", uint8(m.value.MinPrec()), m.value)
+}
diff --git a/plc4go/internal/plc4go/spi/values/BYTE.go b/plc4go/internal/plc4go/spi/values/BYTE.go
index 0c426ed..32a102b 100644
--- a/plc4go/internal/plc4go/spi/values/BYTE.go
+++ b/plc4go/internal/plc4go/spi/values/BYTE.go
@@ -19,7 +19,9 @@
package values
-import "encoding/xml"
+import (
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+)
type PlcBYTE struct {
value uint8
@@ -77,9 +79,6 @@ func (m PlcBYTE) GetString() string {
return strVal
}
-func (m PlcBYTE) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcBYTE"}}); err != nil {
- return err
- }
- return nil
+func (m PlcBYTE) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteByte("PlcBYTE", m.value)
}
diff --git a/plc4go/internal/plc4go/spi/values/CHAR.go b/plc4go/internal/plc4go/spi/values/CHAR.go
index 138cd72..2420718 100644
--- a/plc4go/internal/plc4go/spi/values/CHAR.go
+++ b/plc4go/internal/plc4go/spi/values/CHAR.go
@@ -19,7 +19,9 @@
package values
-import "encoding/xml"
+import (
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+)
type PlcCHAR struct {
value []byte
@@ -40,9 +42,6 @@ func (m PlcCHAR) GetString() string {
return string(m.value)
}
-func (m PlcCHAR) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcCHAR"}}); err != nil {
- return err
- }
- return nil
+func (m PlcCHAR) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteString("PlcBYTE", 16, "UTF-8", string(m.value))
}
diff --git a/plc4go/internal/plc4go/spi/values/DATE.go b/plc4go/internal/plc4go/spi/values/DATE.go
index 7e4000b..4830f6a 100644
--- a/plc4go/internal/plc4go/spi/values/DATE.go
+++ b/plc4go/internal/plc4go/spi/values/DATE.go
@@ -20,7 +20,7 @@
package values
import (
- "encoding/xml"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"time"
)
@@ -60,9 +60,6 @@ func (m PlcDATE) GetString() string {
return m.GetDate().Format("2006-01-02")
}
-func (m PlcDATE) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcDATE"}}); err != nil {
- return err
- }
- return nil
+func (m PlcDATE) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteString("PlcDATE", byte(len([]rune(m.GetString()))*8), "UTF-8", m.GetString())
}
diff --git a/plc4go/internal/plc4go/spi/values/DATE_AND_TIME.go b/plc4go/internal/plc4go/spi/values/DATE_AND_TIME.go
index ee05096..70d61d6 100644
--- a/plc4go/internal/plc4go/spi/values/DATE_AND_TIME.go
+++ b/plc4go/internal/plc4go/spi/values/DATE_AND_TIME.go
@@ -20,8 +20,8 @@
package values
import (
- "encoding/xml"
"fmt"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"time"
)
@@ -47,9 +47,6 @@ func (m PlcDATE_AND_TIME) GetString() string {
return fmt.Sprintf("%v", m.GetDateTime())
}
-func (m PlcDATE_AND_TIME) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcDATE_AND_TIME"}}); err != nil {
- return err
- }
- return nil
+func (m PlcDATE_AND_TIME) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteString("PlcDATE_AND_TIME", byte(len([]rune(m.GetString()))*8), "UTF-8", m.GetString())
}
diff --git a/plc4go/internal/plc4go/spi/values/DINT.go b/plc4go/internal/plc4go/spi/values/DINT.go
index 3a950f6..8df3a74 100644
--- a/plc4go/internal/plc4go/spi/values/DINT.go
+++ b/plc4go/internal/plc4go/spi/values/DINT.go
@@ -20,7 +20,7 @@
package values
import (
- "encoding/xml"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"math"
"strconv"
)
@@ -131,12 +131,6 @@ func (m PlcDINT) GetString() string {
return strconv.Itoa(int(m.GetInt64()))
}
-func (m PlcDINT) MarshalXML(e *xml.Encoder, _ xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcDINT"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "string"},
- {Name: xml.Name{Local: "bitLength"}, Value: strconv.Itoa(len(strconv.Itoa(int(m.value))) * 8)},
- }}); err != nil {
- return err
- }
- return nil
+func (m PlcDINT) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteInt32("PlcDINT", 64, m.value)
}
diff --git a/plc4go/internal/plc4go/spi/values/DWORD.go b/plc4go/internal/plc4go/spi/values/DWORD.go
index 756c0dc..2263142 100644
--- a/plc4go/internal/plc4go/spi/values/DWORD.go
+++ b/plc4go/internal/plc4go/spi/values/DWORD.go
@@ -19,7 +19,9 @@
package values
-import "encoding/xml"
+import (
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+)
type PlcDWORD struct {
value uint32
@@ -89,9 +91,6 @@ func (m PlcDWORD) GetString() string {
return strVal
}
-func (m PlcDWORD) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcDWORD"}}); err != nil {
- return err
- }
- return nil
+func (m PlcDWORD) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteUint32("PlcDINT", 32, m.value)
}
diff --git a/plc4go/internal/plc4go/spi/values/INT.go b/plc4go/internal/plc4go/spi/values/INT.go
index f73cbab..f960d34 100644
--- a/plc4go/internal/plc4go/spi/values/INT.go
+++ b/plc4go/internal/plc4go/spi/values/INT.go
@@ -20,7 +20,7 @@
package values
import (
- "encoding/xml"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"math"
"strconv"
)
@@ -124,9 +124,6 @@ func (m PlcINT) GetString() string {
return strconv.Itoa(int(m.GetInt64()))
}
-func (m PlcINT) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcINT"}}); err != nil {
- return err
- }
- return nil
+func (m PlcINT) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteInt16("PlcINT", 32, m.value)
}
diff --git a/plc4go/internal/plc4go/spi/values/LINT.go b/plc4go/internal/plc4go/spi/values/LINT.go
index f4ec5c6..7c982c9 100644
--- a/plc4go/internal/plc4go/spi/values/LINT.go
+++ b/plc4go/internal/plc4go/spi/values/LINT.go
@@ -20,7 +20,7 @@
package values
import (
- "encoding/xml"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"math"
"strconv"
)
@@ -138,9 +138,6 @@ func (m PlcLINT) GetString() string {
return strconv.Itoa(int(m.GetInt64()))
}
-func (m PlcLINT) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcLINT"}}); err != nil {
- return err
- }
- return nil
+func (m PlcLINT) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteInt64("PlcLINT", 64, m.value)
}
diff --git a/plc4go/internal/plc4go/spi/values/LREAL.go b/plc4go/internal/plc4go/spi/values/LREAL.go
index 11962ee..8526dad 100644
--- a/plc4go/internal/plc4go/spi/values/LREAL.go
+++ b/plc4go/internal/plc4go/spi/values/LREAL.go
@@ -20,8 +20,8 @@
package values
import (
- "encoding/xml"
"fmt"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"math"
)
@@ -154,9 +154,6 @@ func (m PlcLREAL) GetString() string {
return fmt.Sprintf("%g", m.GetFloat64())
}
-func (m PlcLREAL) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcLREAL"}}); err != nil {
- return err
- }
- return nil
+func (m PlcLREAL) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteFloat64("PlcLREAL", 64, m.value)
}
diff --git a/plc4go/internal/plc4go/spi/values/LTIME.go b/plc4go/internal/plc4go/spi/values/LTIME.go
index 7a1d74f..d718dcf 100644
--- a/plc4go/internal/plc4go/spi/values/LTIME.go
+++ b/plc4go/internal/plc4go/spi/values/LTIME.go
@@ -20,8 +20,8 @@
package values
import (
- "encoding/xml"
"fmt"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"time"
)
@@ -52,9 +52,6 @@ func (m PlcLTIME) GetString() string {
return fmt.Sprintf("PT%0.fS", m.GetDuration().Seconds())
}
-func (m PlcLTIME) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcLTIME"}}); err != nil {
- return err
- }
- return nil
+func (m PlcLTIME) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteString("PlcLTIME", byte(len([]rune(m.GetString()))*8), "UTF-8", m.GetString())
}
diff --git a/plc4go/internal/plc4go/spi/values/LWORD.go b/plc4go/internal/plc4go/spi/values/LWORD.go
index a2b0908..7042ded 100644
--- a/plc4go/internal/plc4go/spi/values/LWORD.go
+++ b/plc4go/internal/plc4go/spi/values/LWORD.go
@@ -19,7 +19,9 @@
package values
-import "encoding/xml"
+import (
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+)
type PlcLWORD struct {
value uint64
@@ -105,9 +107,6 @@ func (m PlcLWORD) GetString() string {
return strVal
}
-func (m PlcLWORD) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcLWORD"}}); err != nil {
- return err
- }
- return nil
+func (m PlcLWORD) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteUint64("PlcLWORD", 64, m.value)
}
diff --git a/plc4go/internal/plc4go/spi/values/NULL.go b/plc4go/internal/plc4go/spi/values/NULL.go
index efb17a1..120d63d 100644
--- a/plc4go/internal/plc4go/spi/values/NULL.go
+++ b/plc4go/internal/plc4go/spi/values/NULL.go
@@ -19,8 +19,6 @@
package values
-import "encoding/xml"
-
type PlcNULL struct {
PlcValueAdapter
}
@@ -28,13 +26,3 @@ type PlcNULL struct {
func NewPlcNULL() PlcNULL {
return PlcNULL{}
}
-
-func (m PlcNULL) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "PlcNULL"}}); err != nil {
- return err
- }
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "PlcNULL"}}); err != nil {
- return err
- }
- return nil
-}
diff --git a/plc4go/internal/plc4go/spi/values/PlcBitString.go b/plc4go/internal/plc4go/spi/values/PlcBitString.go
index 651fd13..e79bac8 100644
--- a/plc4go/internal/plc4go/spi/values/PlcBitString.go
+++ b/plc4go/internal/plc4go/spi/values/PlcBitString.go
@@ -20,13 +20,11 @@
package values
import (
- "encoding/xml"
api "github.com/apache/plc4x/plc4go/pkg/plc4go/values"
)
type PlcBitString struct {
- Values []api.PlcValue
- PlcValueAdapter
+ PlcList
}
func NewPlcBitString(value interface{}) PlcBitString {
@@ -55,7 +53,7 @@ func NewPlcBitString(value interface{}) PlcBitString {
}
return PlcBitString{
- Values: bools,
+ PlcList{Values: bools},
}
}
@@ -74,20 +72,3 @@ func (m PlcBitString) GetIndex(i uint32) api.PlcValue {
func (m PlcBitString) GetList() []api.PlcValue {
return m.Values
}
-
-func (m PlcBitString) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "PlcBitString"}}); err != nil {
- return err
- }
-
- for _, value := range m.Values {
- if err := e.EncodeElement(value, xml.StartElement{Name: xml.Name{Local: "-set-by-element-"}}); err != nil {
- return err
- }
- }
-
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "PlcBitString"}}); err != nil {
- return err
- }
- return nil
-}
diff --git a/plc4go/internal/plc4go/spi/values/PlcByteArray.go b/plc4go/internal/plc4go/spi/values/PlcByteArray.go
index 56a980c..2f97ccd 100644
--- a/plc4go/internal/plc4go/spi/values/PlcByteArray.go
+++ b/plc4go/internal/plc4go/spi/values/PlcByteArray.go
@@ -20,7 +20,7 @@
package values
import (
- "encoding/xml"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
api "github.com/apache/plc4x/plc4go/pkg/plc4go/values"
)
@@ -59,14 +59,16 @@ func (m PlcByteArray) GetList() []api.PlcValue {
return plcValues
}
-func (m PlcByteArray) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "PlcByteArray"}}); err != nil {
+func (m PlcByteArray) Serialize(writeBuffer utils.WriteBuffer) error {
+ if err := writeBuffer.PushContext("PlcByteArray"); err != nil {
return err
}
-
- // TODO: Implement this ...
-
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "PlcByteArray"}}); err != nil {
+ for _, value := range m.Values {
+ if err := writeBuffer.WriteByte("value", value); err != nil {
+ return err
+ }
+ }
+ if err := writeBuffer.PopContext("PlcByteArray"); err != nil {
return err
}
return nil
diff --git a/plc4go/internal/plc4go/spi/values/PlcList.go b/plc4go/internal/plc4go/spi/values/PlcList.go
index 6165a80..96388e9 100644
--- a/plc4go/internal/plc4go/spi/values/PlcList.go
+++ b/plc4go/internal/plc4go/spi/values/PlcList.go
@@ -20,16 +20,17 @@
package values
import (
- "encoding/xml"
- api "github.com/apache/plc4x/plc4go/pkg/plc4go/values"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+ "github.com/apache/plc4x/plc4go/pkg/plc4go/values"
+ "github.com/pkg/errors"
)
type PlcList struct {
- Values []api.PlcValue
+ Values []values.PlcValue
PlcValueAdapter
}
-func NewPlcList(values []api.PlcValue) api.PlcValue {
+func NewPlcList(values []values.PlcValue) values.PlcValue {
return PlcList{
Values: values,
}
@@ -43,26 +44,28 @@ func (m PlcList) GetLength() uint32 {
return uint32(len(m.Values))
}
-func (m PlcList) GetIndex(i uint32) api.PlcValue {
+func (m PlcList) GetIndex(i uint32) values.PlcValue {
return m.Values[i]
}
-func (m PlcList) GetList() []api.PlcValue {
+func (m PlcList) GetList() []values.PlcValue {
return m.Values
}
-func (m PlcList) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "PlcList"}}); err != nil {
+func (m PlcList) Serialize(writeBuffer utils.WriteBuffer) error {
+ if err := writeBuffer.PushContext("PlcList"); err != nil {
return err
}
-
- for _, value := range m.Values {
- if err := e.EncodeElement(value, xml.StartElement{Name: xml.Name{Local: "-set-by-element-"}}); err != nil {
- return err
+ for _, listItem := range m.GetList() {
+ if listItemSerializable, ok := listItem.(utils.Serializable); ok {
+ if err := listItemSerializable.Serialize(writeBuffer); err != nil {
+ return err
+ }
+ } else {
+ return errors.New("Error serializing. List item doesn't implement Serializable")
}
}
-
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "PlcList"}}); err != nil {
+ if err := writeBuffer.PopContext("PlcList"); err != nil {
return err
}
return nil
diff --git a/plc4go/internal/plc4go/spi/values/PlcStruct.go b/plc4go/internal/plc4go/spi/values/PlcStruct.go
index ddf1bcf..1320761 100644
--- a/plc4go/internal/plc4go/spi/values/PlcStruct.go
+++ b/plc4go/internal/plc4go/spi/values/PlcStruct.go
@@ -20,8 +20,9 @@
package values
import (
- "encoding/xml"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
api "github.com/apache/plc4x/plc4go/pkg/plc4go/values"
+ "github.com/pkg/errors"
"strings"
)
@@ -80,19 +81,26 @@ func (m PlcStruct) GetString() string {
return sb.String()
}
-func (m PlcStruct) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "PlcNULL"}}); err != nil {
+func (m PlcStruct) Serialize(writeBuffer utils.WriteBuffer) error {
+ if err := writeBuffer.PushContext("PlcStruct"); err != nil {
return err
}
-
- for fieldName, fieldValue := range m.values {
- if err := e.EncodeElement(fieldValue, xml.StartElement{Name: xml.Name{Local: fieldName}}); err != nil {
+ for fieldName, plcValue := range m.values {
+ if err := writeBuffer.PushContext(fieldName); err != nil {
return err
}
- }
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "PlcNULL"}}); err != nil {
- return err
+ if serializablePlcValue, ok := plcValue.(utils.Serializable); ok {
+ if err := serializablePlcValue.Serialize(writeBuffer); err != nil {
+ return err
+ }
+ } else {
+ return errors.Errorf("Error serializing. %T doesn't implement Serializable", plcValue)
+ }
+
+ if err := writeBuffer.PopContext(fieldName); err != nil {
+ return err
+ }
}
- return nil
+ return writeBuffer.PopContext("PlcStruct")
}
diff --git a/plc4go/internal/plc4go/spi/values/REAL.go b/plc4go/internal/plc4go/spi/values/REAL.go
index 0faabad..8e2515f 100644
--- a/plc4go/internal/plc4go/spi/values/REAL.go
+++ b/plc4go/internal/plc4go/spi/values/REAL.go
@@ -20,10 +20,9 @@
package values
import (
- "encoding/xml"
"fmt"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"math"
- "strconv"
)
type PlcREAL struct {
@@ -149,12 +148,6 @@ func (m PlcREAL) GetString() string {
return fmt.Sprintf("%g", m.GetFloat32())
}
-func (m PlcREAL) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcREAL"}, Attr: []xml.Attr{
- {Name: xml.Name{Local: "dataType"}, Value: "string"},
- {Name: xml.Name{Local: "bitLength"}, Value: strconv.Itoa(len(m.GetString()) * 8)},
- }}); err != nil {
- return err
- }
- return nil
+func (m PlcREAL) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteFloat32("PlcREAL", 31, m.value)
}
diff --git a/plc4go/internal/plc4go/spi/values/RawPlcValue.go b/plc4go/internal/plc4go/spi/values/RawPlcValue.go
index 87a4313..a8750b4 100644
--- a/plc4go/internal/plc4go/spi/values/RawPlcValue.go
+++ b/plc4go/internal/plc4go/spi/values/RawPlcValue.go
@@ -20,7 +20,6 @@
package values
import (
- "encoding/xml"
"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
api "github.com/apache/plc4x/plc4go/pkg/plc4go/values"
)
@@ -77,16 +76,3 @@ func (m RawPlcValue) RawHasMore() bool {
func (m RawPlcValue) RawReset() {
m.readBuffer.(utils.ReadBufferByteBased).Reset()
}
-
-func (m RawPlcValue) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "PlcByteArray"}}); err != nil {
- return err
- }
-
- // TODO: Implement this ...
-
- if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "PlcByteArray"}}); err != nil {
- return err
- }
- return nil
-}
diff --git a/plc4go/internal/plc4go/spi/values/SINT.go b/plc4go/internal/plc4go/spi/values/SINT.go
index 6edc134..08e50ef 100644
--- a/plc4go/internal/plc4go/spi/values/SINT.go
+++ b/plc4go/internal/plc4go/spi/values/SINT.go
@@ -20,7 +20,7 @@
package values
import (
- "encoding/xml"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"strconv"
)
@@ -116,9 +116,6 @@ func (m PlcSINT) GetString() string {
return strconv.Itoa(int(m.GetInt64()))
}
-func (m PlcSINT) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcSINT"}}); err != nil {
- return err
- }
- return nil
+func (m PlcSINT) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteInt8("PlcINT", 8, m.value)
}
diff --git a/plc4go/internal/plc4go/spi/values/STRING.go b/plc4go/internal/plc4go/spi/values/STRING.go
index d51c60d..2c620e4 100644
--- a/plc4go/internal/plc4go/spi/values/STRING.go
+++ b/plc4go/internal/plc4go/spi/values/STRING.go
@@ -19,7 +19,9 @@
package values
-import "encoding/xml"
+import (
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+)
type PlcSTRING struct {
value string
@@ -40,9 +42,6 @@ func (m PlcSTRING) GetString() string {
return m.value
}
-func (m PlcSTRING) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcSTRING"}}); err != nil {
- return err
- }
- return nil
+func (m PlcSTRING) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteString("PlcSTRING", uint8(len([]rune(m.value))*8), "UTF-8", m.value)
}
diff --git a/plc4go/internal/plc4go/spi/values/TIME.go b/plc4go/internal/plc4go/spi/values/TIME.go
index a9c0487..01c8926 100644
--- a/plc4go/internal/plc4go/spi/values/TIME.go
+++ b/plc4go/internal/plc4go/spi/values/TIME.go
@@ -20,8 +20,8 @@
package values
import (
- "encoding/xml"
"fmt"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"time"
)
@@ -52,9 +52,6 @@ func (m PlcTIME) GetString() string {
return fmt.Sprintf("PT%0.fS", m.GetDuration().Seconds())
}
-func (m PlcTIME) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcTIME"}}); err != nil {
- return err
- }
- return nil
+func (m PlcTIME) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteString("PlcTIME", byte(len([]rune(m.GetString()))*8), "UTF-8", m.GetString())
}
diff --git a/plc4go/internal/plc4go/spi/values/TIME_OF_DAY.go b/plc4go/internal/plc4go/spi/values/TIME_OF_DAY.go
index 1d9e39e..5a14d56 100644
--- a/plc4go/internal/plc4go/spi/values/TIME_OF_DAY.go
+++ b/plc4go/internal/plc4go/spi/values/TIME_OF_DAY.go
@@ -20,7 +20,7 @@
package values
import (
- "encoding/xml"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"time"
)
@@ -63,9 +63,6 @@ func (m PlcTIME_OF_DAY) GetString() string {
return m.value.Format("15:04:05.000")
}
-func (m PlcTIME_OF_DAY) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcTIME_OF_DAY"}}); err != nil {
- return err
- }
- return nil
+func (m PlcTIME_OF_DAY) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteString("PlcTIME_OF_DAY", byte(len([]rune(m.GetString()))*8), "UTF-8", m.GetString())
}
diff --git a/plc4go/internal/plc4go/spi/values/UDINT.go b/plc4go/internal/plc4go/spi/values/UDINT.go
index d793814..6f6bce0 100644
--- a/plc4go/internal/plc4go/spi/values/UDINT.go
+++ b/plc4go/internal/plc4go/spi/values/UDINT.go
@@ -20,7 +20,7 @@
package values
import (
- "encoding/xml"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"math"
"strconv"
)
@@ -124,9 +124,6 @@ func (m PlcUDINT) GetString() string {
return strconv.Itoa(int(m.GetInt64()))
}
-func (m PlcUDINT) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcUDINT"}}); err != nil {
- return err
- }
- return nil
+func (m PlcUDINT) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteUint32("PlcUDINT", 32, m.value)
}
diff --git a/plc4go/internal/plc4go/spi/values/UINT.go b/plc4go/internal/plc4go/spi/values/UINT.go
index 47d6a73..42e3686 100644
--- a/plc4go/internal/plc4go/spi/values/UINT.go
+++ b/plc4go/internal/plc4go/spi/values/UINT.go
@@ -20,7 +20,7 @@
package values
import (
- "encoding/xml"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"math"
"strconv"
)
@@ -110,9 +110,6 @@ func (m PlcUINT) GetString() string {
return strconv.Itoa(int(m.GetInt64()))
}
-func (m PlcUINT) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcUINT"}}); err != nil {
- return err
- }
- return nil
+func (m PlcUINT) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteUint16("PlcUINT", 16, m.value)
}
diff --git a/plc4go/internal/plc4go/spi/values/ULINT.go b/plc4go/internal/plc4go/spi/values/ULINT.go
index 2e72940..2188d44 100644
--- a/plc4go/internal/plc4go/spi/values/ULINT.go
+++ b/plc4go/internal/plc4go/spi/values/ULINT.go
@@ -20,7 +20,7 @@
package values
import (
- "encoding/xml"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"math"
"strconv"
)
@@ -138,9 +138,6 @@ func (m PlcULINT) GetString() string {
return strconv.Itoa(int(m.GetInt64()))
}
-func (m PlcULINT) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcULINT"}}); err != nil {
- return err
- }
- return nil
+func (m PlcULINT) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteUint64("PlcUINT", 64, m.value)
}
diff --git a/plc4go/internal/plc4go/spi/values/USINT.go b/plc4go/internal/plc4go/spi/values/USINT.go
index 2d0887b..f5ec7f7 100644
--- a/plc4go/internal/plc4go/spi/values/USINT.go
+++ b/plc4go/internal/plc4go/spi/values/USINT.go
@@ -20,7 +20,7 @@
package values
import (
- "encoding/xml"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"math"
"strconv"
)
@@ -96,9 +96,6 @@ func (m PlcUSINT) GetString() string {
return strconv.Itoa(int(m.GetInt64()))
}
-func (m PlcUSINT) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcUSINT"}}); err != nil {
- return err
- }
- return nil
+func (m PlcUSINT) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteUint8("PlcUSINT", 64, m.value)
}
diff --git a/plc4go/internal/plc4go/spi/values/WCHAR.go b/plc4go/internal/plc4go/spi/values/WCHAR.go
index f7ab331..83819a4 100644
--- a/plc4go/internal/plc4go/spi/values/WCHAR.go
+++ b/plc4go/internal/plc4go/spi/values/WCHAR.go
@@ -20,7 +20,7 @@
package values
import (
- "encoding/xml"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"unicode/utf16"
)
@@ -43,9 +43,6 @@ func (m PlcWCHAR) GetString() string {
return string(m.value)
}
-func (m PlcWCHAR) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcWCHAR"}}); err != nil {
- return err
- }
- return nil
+func (m PlcWCHAR) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteString("PlcSTRING", uint8(len(m.value)*8), "UTF-8", string(m.value))
}
diff --git a/plc4go/internal/plc4go/spi/values/WORD.go b/plc4go/internal/plc4go/spi/values/WORD.go
index 3e96a3b..77c19f2 100644
--- a/plc4go/internal/plc4go/spi/values/WORD.go
+++ b/plc4go/internal/plc4go/spi/values/WORD.go
@@ -19,7 +19,9 @@
package values
-import "encoding/xml"
+import (
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+)
type PlcWORD struct {
value uint16
@@ -81,9 +83,6 @@ func (m PlcWORD) GetString() string {
return strVal
}
-func (m PlcWORD) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcWORD"}}); err != nil {
- return err
- }
- return nil
+func (m PlcWORD) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteUint16("PlcWORD", 16, m.value)
}
diff --git a/plc4go/internal/plc4go/spi/values/WSTRING.go b/plc4go/internal/plc4go/spi/values/WSTRING.go
index d08a189..b574425 100644
--- a/plc4go/internal/plc4go/spi/values/WSTRING.go
+++ b/plc4go/internal/plc4go/spi/values/WSTRING.go
@@ -20,7 +20,7 @@
package values
import (
- "encoding/xml"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
"unicode/utf16"
)
@@ -43,9 +43,6 @@ func (m PlcWSTRING) GetString() string {
return string(m.value)
}
-func (m PlcWSTRING) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if err := e.EncodeElement(m.value, xml.StartElement{Name: xml.Name{Local: "PlcWSTRING"}}); err != nil {
- return err
- }
- return nil
+func (m PlcWSTRING) Serialize(writeBuffer utils.WriteBuffer) error {
+ return writeBuffer.WriteString("PlcSTRING", uint8(len([]rune(m.value))*8), "UTF-8", string(m.value))
}
diff --git a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsField.java b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsField.java
index dd30aec..8cc2bff 100644
--- a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsField.java
+++ b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsField.java
@@ -154,6 +154,7 @@ public class DirectAdsField implements AdsField {
public void serialize(WriteBuffer writeBuffer) throws ParseException {
writeBuffer.pushContext(getClass().getSimpleName());
+ // TODO: fix types to uint32
writeBuffer.writeLong("indexGroup", 64, getIndexGroup());
writeBuffer.writeLong("indexOffset", 64, getIndexOffset());
writeBuffer.writeLong("numberOfElements", 64, getNumberOfElements());
diff --git a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsStringField.java b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsStringField.java
index 776b51d..4068353 100644
--- a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsStringField.java
+++ b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsStringField.java
@@ -87,11 +87,13 @@ public class SymbolicAdsStringField extends SymbolicAdsField implements AdsStrin
String symbolicAddress = getSymbolicAddress();
writeBuffer.writeString("symbolicAddress", symbolicAddress.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), symbolicAddress);
+ // TODO: fix types to uint32
writeBuffer.writeInt("numberOfElements", 64, getNumberOfElements());
String dataType = getPlcDataType();
writeBuffer.writeString("dataType", dataType.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), dataType);
+ // TODO: fix types to int32
writeBuffer.writeInt("stringLength", 64, getStringLength());
writeBuffer.popContext(getClass().getSimpleName());
}
diff --git a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipField.java b/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipField.java
index 551befa..7986050 100644
--- a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipField.java
+++ b/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipField.java
@@ -147,6 +147,7 @@ public class EipField implements PlcField, Serializable {
if (type != null) {
writeBuffer.writeString("type", type.name().getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), type.name());
}
+ // TODO: fix types to uint16
writeBuffer.writeInt("elementNb", 64, elementNb);
// TODO: remove this (not language agnostic)
String defaultJavaType = (type == null ? Object.class : getDefaultJavaType()).getName();
diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
index 896a8fa..82a9549 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
@@ -132,6 +132,7 @@ public abstract class ModbusField implements PlcField, Serializable {
public void serialize(WriteBuffer writeBuffer) throws ParseException {
writeBuffer.pushContext(getClass().getSimpleName());
+ // TODO: fix types to uint16
writeBuffer.writeInt("address", 64, address);
writeBuffer.writeInt("numberOfElements", 64, getNumberOfElements());
String dataType = getPlcDataType();
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java
index 53ba02a..a89748b 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java
@@ -364,8 +364,11 @@ public class S7Field implements PlcField, Serializable {
String memoryArea = getMemoryArea().name();
writeBuffer.writeString("memoryArea", memoryArea.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), memoryArea);
+ // TODO: change to uint16
writeBuffer.writeInt("blockNumber", 64, getBlockNumber());
+ // TODO: change to uint16
writeBuffer.writeInt("byteOffset", 64, getByteOffset());
+ // TODO: change to uint8
writeBuffer.writeInt("bitOffset", 64, getBitOffset());
writeBuffer.writeInt("numElements", 64, getNumberOfElements());
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferXmlBased.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferXmlBased.java
index 2379298..b066337 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferXmlBased.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferXmlBased.java
@@ -19,6 +19,7 @@
package org.apache.plc4x.java.spi.generation;
+import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
@@ -36,7 +37,6 @@ import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayDeque;
import java.util.Deque;
-import java.util.Stack;
public class WriteBufferXmlBased implements WriteBuffer, BufferCommons {
@@ -194,7 +194,7 @@ public class WriteBufferXmlBased implements WriteBuffer, BufferCommons {
@Override
public void writeString(String logicalName, int bitLength, String encoding, String value, WithWriterArgs... writerArgs) throws ParseException {
- createAndAppend(logicalName, rwStringKey, bitLength, value, writerArgs);
+ createAndAppend(logicalName, rwStringKey, bitLength, value, encoding, writerArgs);
move(bitLength);
}
@@ -215,7 +215,7 @@ public class WriteBufferXmlBased implements WriteBuffer, BufferCommons {
String context = stack.pop();
if (!context.equals(logicalName)) {
- throw new PlcRuntimeException("Unexpected pop context '" + context + '\''+ ". Expected '"+logicalName+ '\'');
+ throw new PlcRuntimeException("Unexpected pop context '" + context + '\'' + ". Expected '" + logicalName + '\'');
}
if (stack.isEmpty()) {
try {
@@ -249,6 +249,10 @@ public class WriteBufferXmlBased implements WriteBuffer, BufferCommons {
}
private void createAndAppend(String logicalName, String dataType, int bitLength, String data, WithWriterArgs... writerArgs) {
+ createAndAppend(logicalName, dataType, bitLength, data, null, writerArgs);
+ }
+
+ private void createAndAppend(String logicalName, String dataType, int bitLength, String data, String encoding, WithWriterArgs... writerArgs) {
try {
indent();
StartElement startElement = xmlEventFactory.createStartElement("", "", sanitizeLogicalName(logicalName));
@@ -262,6 +266,10 @@ public class WriteBufferXmlBased implements WriteBuffer, BufferCommons {
Attribute additionalStringRepresentationAttribute = xmlEventFactory.createAttribute(rwStringRepresentationKey, additionalStringRepresentation);
xmlEventWriter.add(additionalStringRepresentationAttribute);
}
+ if (encoding != null) {
+ Attribute encodingAttribute = xmlEventFactory.createAttribute(rwEncodingKey, encoding);
+ xmlEventWriter.add(encodingAttribute);
+ }
Characters dataCharacters = xmlEventFactory.createCharacters(data);
xmlEventWriter.add(dataCharacters);
EndElement endElement = xmlEventFactory.createEndElement("", "", sanitizeLogicalName(logicalName));
@@ -271,5 +279,4 @@ public class WriteBufferXmlBased implements WriteBuffer, BufferCommons {
throw new PlcRuntimeException(e);
}
}
-
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBOOL.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBOOL.java
index df27fd7..165bda0 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBOOL.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBOOL.java
@@ -24,9 +24,12 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
public class PlcBOOL extends PlcIECValue<Boolean> {
@@ -283,4 +286,9 @@ public class PlcBOOL extends PlcIECValue<Boolean> {
return Boolean.toString(value);
}
+ @Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.writeBit(getClass().getSimpleName(), value);
+ }
+
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBYTE.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBYTE.java
index 41955fc..60abd85 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBYTE.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBYTE.java
@@ -24,9 +24,12 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
import java.util.BitSet;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
@@ -295,4 +298,9 @@ public class PlcBYTE extends PlcIECValue<Short> {
return bytes;
}
+ @Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.writeShort(getClass().getSimpleName(), 8, value);
+ }
+
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigDecimal.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigDecimal.java
index b8d2f28..4bc5360 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigDecimal.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigDecimal.java
@@ -29,6 +29,7 @@ import org.w3c.dom.Element;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
public class PlcBigDecimal extends PlcSimpleValue<BigDecimal> {
@@ -166,7 +167,8 @@ public class PlcBigDecimal extends PlcSimpleValue<BigDecimal> {
@Override
public void serialize(WriteBuffer writeBuffer) throws ParseException {
- // TODO: Implement
+ int scale = 32;
+ writeBuffer.writeBigDecimal(getClass().getSimpleName(), value.unscaledValue().bitLength() + scale, value);
}
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigInteger.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigInteger.java
index b43a9ad..7b86b27 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigInteger.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigInteger.java
@@ -29,6 +29,7 @@ import org.w3c.dom.Element;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
public class PlcBigInteger extends PlcSimpleValue<BigInteger> {
@@ -166,7 +167,7 @@ public class PlcBigInteger extends PlcSimpleValue<BigInteger> {
@Override
public void serialize(WriteBuffer writeBuffer) throws ParseException {
- // TODO: Implement
+ writeBuffer.writeBigInteger(getClass().getSimpleName(), value.bitLength(), value);
}
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcCHAR.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcCHAR.java
index bcd74fb..45e7967 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcCHAR.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcCHAR.java
@@ -24,9 +24,12 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
public class PlcCHAR extends PlcIECValue<Short> {
@@ -325,4 +328,10 @@ public class PlcCHAR extends PlcIECValue<Short> {
return bytes;
}
+ @Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ String valueString = value.toString();
+ writeBuffer.writeString(getClass().getSimpleName(), 16, StandardCharsets.UTF_8.name(), valueString);
+ }
+
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE.java
index 29479f8..27f8922 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE.java
@@ -28,6 +28,7 @@ import org.apache.plc4x.java.spi.generation.ParseException;
import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -97,7 +98,8 @@ public class PlcDATE extends PlcSimpleValue<LocalDate> {
@Override
public void serialize(WriteBuffer writeBuffer) throws ParseException {
- // TODO: Implement
+ String valueString = value.toString();
+ writeBuffer.writeString(getClass().getSimpleName(), valueString.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), valueString);
}
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE_AND_TIME.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE_AND_TIME.java
index a4e98b1..4c25c3f 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE_AND_TIME.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE_AND_TIME.java
@@ -28,6 +28,7 @@ import org.apache.plc4x.java.spi.generation.ParseException;
import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
import java.time.*;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
@@ -110,7 +111,8 @@ public class PlcDATE_AND_TIME extends PlcSimpleValue<LocalDateTime> {
@Override
public void serialize(WriteBuffer writeBuffer) throws ParseException {
- // TODO: Implement
+ String valueString = value.toString();
+ writeBuffer.writeString(getClass().getSimpleName(), valueString.getBytes(StandardCharsets.UTF_8).length*8,StandardCharsets.UTF_8.name(),valueString);
}
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDINT.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDINT.java
index 25a0e89..e974bd6 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDINT.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDINT.java
@@ -24,9 +24,12 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
public class PlcDINT extends PlcIECValue<Integer> {
@@ -271,4 +274,9 @@ public class PlcDINT extends PlcIECValue<Integer> {
};
}
+ @Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.writeInt(getClass().getSimpleName(), 64, value);
+ }
+
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDWORD.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDWORD.java
index c8312ff..a009b9b 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDWORD.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDWORD.java
@@ -24,9 +24,12 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
import java.util.BitSet;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
@@ -298,4 +301,9 @@ public class PlcDWORD extends PlcIECValue<Long> {
return bytes;
}
+ @Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.writeLong(getClass().getSimpleName(), 32, value);
+ }
+
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcINT.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcINT.java
index 81770c2..01c9b45 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcINT.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcINT.java
@@ -24,9 +24,12 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
public class PlcINT extends PlcIECValue<Short> {
@@ -147,7 +150,7 @@ public class PlcINT extends PlcIECValue<Short> {
@Override
@JsonIgnore
public boolean getBoolean() {
- return (value != null) && !value.equals((short)0);
+ return (value != null) && !value.equals((short) 0);
}
@Override
@@ -272,4 +275,9 @@ public class PlcINT extends PlcIECValue<Short> {
};
}
+ @Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.writeInt(getClass().getSimpleName(), 16, value);
+ }
+
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLINT.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLINT.java
index 18a92bf..3756d3d 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLINT.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLINT.java
@@ -24,9 +24,12 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
public class PlcLINT extends PlcIECValue<Long> {
@@ -272,4 +275,9 @@ public class PlcLINT extends PlcIECValue<Long> {
};
}
+ @Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.writeLong(getClass().getSimpleName(), 64, value);
+ }
+
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLREAL.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLREAL.java
index 41472ca..c7b55b0 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLREAL.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLREAL.java
@@ -24,9 +24,12 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
public class PlcLREAL extends PlcIECValue<Double> {
@@ -262,4 +265,9 @@ public class PlcLREAL extends PlcIECValue<Double> {
};
}
+ @Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.writeDouble(getClass().getSimpleName(), value, 11, 52);
+ }
+
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLTIME.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLTIME.java
index 6a90af5..efca6a7 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLTIME.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLTIME.java
@@ -28,6 +28,7 @@ import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Element;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
@@ -92,7 +93,8 @@ public class PlcLTIME extends PlcSimpleValue<Duration> {
@Override
public void serialize(WriteBuffer writeBuffer) throws ParseException {
- // TODO: Implement
+ String valueString = value.toString();
+ writeBuffer.writeString(getClass().getSimpleName(), valueString.getBytes(StandardCharsets.UTF_8).length*8,StandardCharsets.UTF_8.name(),valueString);
}
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLWORD.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLWORD.java
index 1d201a7..90b1a2c 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLWORD.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLWORD.java
@@ -22,9 +22,12 @@ package org.apache.plc4x.java.spi.values;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
import java.util.BitSet;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
@@ -309,4 +312,9 @@ public class PlcLWORD extends PlcIECValue<BigInteger> {
return bytes;
}
+ @Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.writeBigInteger(getClass().getSimpleName(), 64, value);
+ }
+
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcREAL.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcREAL.java
index 8b3b2eb..e31b140 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcREAL.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcREAL.java
@@ -21,9 +21,12 @@ package org.apache.plc4x.java.spi.values;
import com.fasterxml.jackson.annotation.*;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
public class PlcREAL extends PlcIECValue<Float> {
@@ -253,4 +256,9 @@ public class PlcREAL extends PlcIECValue<Float> {
return new byte[]{(byte) (intBits >> 24), (byte) (intBits >> 16), (byte) (intBits >> 8), (byte) (intBits)};
}
+ @Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.writeDouble(getClass().getSimpleName(), value, 8, 23);
+ }
+
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSINT.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSINT.java
index 20e9663..a8ae33a 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSINT.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSINT.java
@@ -24,9 +24,12 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
public class PlcSINT extends PlcIECValue<Byte> {
@@ -273,4 +276,9 @@ public class PlcSINT extends PlcIECValue<Byte> {
return bytes;
}
+ @Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.writeByte(getClass().getSimpleName(), value);
+ }
+
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSTRING.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSTRING.java
index 96c9847..6af4e9d 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSTRING.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSTRING.java
@@ -29,6 +29,7 @@ import org.w3c.dom.Element;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
public class PlcSTRING extends PlcSimpleValue<String> {
@@ -233,7 +234,8 @@ public class PlcSTRING extends PlcSimpleValue<String> {
@Override
public void serialize(WriteBuffer writeBuffer) throws ParseException {
- // TODO: Implement
+ String valueString = value.toString();
+ writeBuffer.writeString(getClass().getSimpleName(), valueString.getBytes(StandardCharsets.UTF_8).length*8,StandardCharsets.UTF_8.name(),valueString);
}
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME.java
index 28e4681..ddb8a05 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME.java
@@ -27,6 +27,7 @@ import org.apache.plc4x.java.spi.generation.ParseException;
import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
@@ -87,7 +88,8 @@ public class PlcTIME extends PlcSimpleValue<Duration> {
@Override
public void serialize(WriteBuffer writeBuffer) throws ParseException {
- // TODO: Implement
+ String valueString = value.toString();
+ writeBuffer.writeString(getClass().getSimpleName(), valueString.getBytes(StandardCharsets.UTF_8).length*8,StandardCharsets.UTF_8.name(),valueString);
}
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java
index f9225a2..e44b559 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java
@@ -28,6 +28,7 @@ import org.apache.plc4x.java.spi.generation.ParseException;
import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Element;
+import java.nio.charset.StandardCharsets;
import java.time.LocalTime;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
@@ -84,7 +85,8 @@ public class PlcTIME_OF_DAY extends PlcSimpleValue<LocalTime> {
@Override
public void serialize(WriteBuffer writeBuffer) throws ParseException {
- // TODO: Implement
+ String valueString = value.toString();
+ writeBuffer.writeString(getClass().getSimpleName(), valueString.getBytes(StandardCharsets.UTF_8).length*8,StandardCharsets.UTF_8.name(),valueString);
}
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUDINT.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUDINT.java
index eb2b370..21b49fe 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUDINT.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUDINT.java
@@ -24,9 +24,12 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
public class PlcUDINT extends PlcIECValue<Long> {
@@ -290,4 +293,9 @@ public class PlcUDINT extends PlcIECValue<Long> {
return bytes;
}
+ @Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.writeLong(getClass().getSimpleName(), 32, value);
+ }
+
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUINT.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUINT.java
index 1904697..0d499b9 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUINT.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUINT.java
@@ -24,9 +24,12 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
public class PlcUINT extends PlcIECValue<Integer> {
@@ -281,4 +284,9 @@ public class PlcUINT extends PlcIECValue<Integer> {
};
}
+ @Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.writeInt(getClass().getSimpleName(), 16, value);
+ }
+
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcULINT.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcULINT.java
index 6ea8432..2164190 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcULINT.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcULINT.java
@@ -22,9 +22,12 @@ package org.apache.plc4x.java.spi.values;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
public class PlcULINT extends PlcIECValue<BigInteger> {
@@ -298,4 +301,9 @@ public class PlcULINT extends PlcIECValue<BigInteger> {
return bytes;
}
+ @Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.writeBigInteger(getClass().getSimpleName(), 64, value);
+ }
+
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUSINT.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUSINT.java
index 21ddccb..1c7658d 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUSINT.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUSINT.java
@@ -24,9 +24,12 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
public class PlcUSINT extends PlcIECValue<Short> {
@@ -283,4 +286,9 @@ public class PlcUSINT extends PlcIECValue<Short> {
return bytes;
}
+ @Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.writeShort(getClass().getSimpleName(), 8, value);
+ }
+
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcWCHAR.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcWCHAR.java
index 7975b4a..ec4ddd3 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcWCHAR.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcWCHAR.java
@@ -24,9 +24,12 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
public class PlcWCHAR extends PlcIECValue<Integer> {
@@ -301,4 +304,10 @@ public class PlcWCHAR extends PlcIECValue<Integer> {
};
}
+ @Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ String valueString = value.toString();
+ writeBuffer.writeString(getClass().getSimpleName(), 16, StandardCharsets.UTF_8.name(), valueString);
+ }
+
}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcWORD.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcWORD.java
index 6a968bc..ac0729b 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcWORD.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcWORD.java
@@ -24,11 +24,14 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
import java.util.BitSet;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
@@ -294,4 +297,9 @@ public class PlcWORD extends PlcIECValue<Integer> {
};
}
+ @Override
+ public void serialize(WriteBuffer writeBuffer) throws ParseException {
+ writeBuffer.writeInt(getClass().getSimpleName(), 16, value);
+ }
+
}
diff --git a/protocols/ads/src/test/resources/protocols/ads/DriverTestsuite.xml b/protocols/ads/src/test/resources/protocols/ads/DriverTestsuite.xml
index eb7689a..006f5f5 100644
--- a/protocols/ads/src/test/resources/protocols/ads/DriverTestsuite.xml
+++ b/protocols/ads/src/test/resources/protocols/ads/DriverTestsuite.xml
@@ -197,7 +197,7 @@
<indexGroup dataType="int" bitLength="64">4040</indexGroup>
<indexOffset dataType="int" bitLength="64">8</indexOffset>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">BOOL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">BOOL</dataType>
</DirectAdsField>
</hurz>
</fields>
@@ -205,8 +205,8 @@
<values>
<hurz>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcBOOL dataType="string" bitLength="32">true</PlcBOOL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcBOOL dataType="bit" bitLength="1">true</PlcBOOL>
</ResponseItem>
</hurz>
</values>
@@ -401,7 +401,7 @@
<indexGroup dataType="int" bitLength="64">4040</indexGroup>
<indexOffset dataType="int" bitLength="64">8</indexOffset>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">BOOL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">BOOL</dataType>
</DirectAdsField>
</hurz1>
<hurz2>
@@ -409,7 +409,7 @@
<indexGroup dataType="int" bitLength="64">4040</indexGroup>
<indexOffset dataType="int" bitLength="64">12</indexOffset>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">BOOL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">BOOL</dataType>
</DirectAdsField>
</hurz2>
</fields>
@@ -417,14 +417,14 @@
<values>
<hurz1>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcBOOL dataType="string" bitLength="32">true</PlcBOOL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcBOOL dataType="bit" bitLength="1">true</PlcBOOL>
</ResponseItem>
</hurz1>
<hurz2>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcBOOL dataType="string" bitLength="32">true</PlcBOOL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcBOOL dataType="bit" bitLength="1">true</PlcBOOL>
</ResponseItem>
</hurz2>
</values>
@@ -753,9 +753,9 @@
<fields>
<hurz1>
<SymbolicAdsField>
- <symbolicAddress dataType="string" bitLength="200">main.f_trigDateiGelesen.M</symbolicAddress>
+ <symbolicAddress dataType="string" bitLength="200" encoding="UTF-8">main.f_trigDateiGelesen.M</symbolicAddress>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">BOOL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">BOOL</dataType>
</SymbolicAdsField>
</hurz1>
</fields>
@@ -763,8 +763,8 @@
<values>
<hurz1>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcBOOL dataType="string" bitLength="40">false</PlcBOOL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcBOOL dataType="bit" bitLength="1">false</PlcBOOL>
</ResponseItem>
</hurz1>
</values>
@@ -1094,9 +1094,9 @@
<fields>
<hurz1>
<SymbolicAdsField>
- <symbolicAddress dataType="string" bitLength="200">main.f_trigDateiGelesen.M</symbolicAddress>
+ <symbolicAddress dataType="string" bitLength="200" encoding="UTF-8">main.f_trigDateiGelesen.M</symbolicAddress>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">BOOL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">BOOL</dataType>
</SymbolicAdsField>
</hurz1>
</fields>
@@ -1104,8 +1104,8 @@
<values>
<hurz1>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcBOOL dataType="string" bitLength="40">false</PlcBOOL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcBOOL dataType="bit" bitLength="1">false</PlcBOOL>
</ResponseItem>
</hurz1>
</values>
@@ -1263,9 +1263,9 @@
<fields>
<hurz1>
<SymbolicAdsField>
- <symbolicAddress dataType="string" bitLength="200">main.f_trigDateiGelesen.M</symbolicAddress>
+ <symbolicAddress dataType="string" bitLength="200" encoding="UTF-8">main.f_trigDateiGelesen.M</symbolicAddress>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">BOOL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">BOOL</dataType>
</SymbolicAdsField>
</hurz1>
</fields>
@@ -1273,8 +1273,8 @@
<values>
<hurz1>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcBOOL dataType="string" bitLength="40">false</PlcBOOL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcBOOL dataType="bit" bitLength="1">false</PlcBOOL>
</ResponseItem>
</hurz1>
</values>
diff --git a/protocols/eip/src/test/resources/protocols/eip/DriverTestsuite.xml b/protocols/eip/src/test/resources/protocols/eip/DriverTestsuite.xml
index a4addb1..2231728 100644
--- a/protocols/eip/src/test/resources/protocols/eip/DriverTestsuite.xml
+++ b/protocols/eip/src/test/resources/protocols/eip/DriverTestsuite.xml
@@ -213,9 +213,9 @@
<fields>
<hurz>
<EipField>
- <node dataType="string" bitLength="32">rate</node>
+ <node dataType="string" bitLength="32" encoding="UTF-8">rate</node>
<elementNb dataType="int" bitLength="64">0</elementNb>
- <defaultJavaType dataType="string" bitLength="128">java.lang.Object</defaultJavaType>
+ <defaultJavaType dataType="string" bitLength="128" encoding="UTF-8">java.lang.Object</defaultJavaType>
</EipField>
</hurz>
</fields>
@@ -223,8 +223,8 @@
<values>
<hurz>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcDINT dataType="string" bitLength="72">369229824</PlcDINT>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcDINT dataType="int" bitLength="64">369229824</PlcDINT>
</ResponseItem>
</hurz>
</values>
diff --git a/protocols/modbus/src/test/resources/protocols/modbus/DriverTestsuite.xml b/protocols/modbus/src/test/resources/protocols/modbus/DriverTestsuite.xml
index 2998551..dd62f42 100644
--- a/protocols/modbus/src/test/resources/protocols/modbus/DriverTestsuite.xml
+++ b/protocols/modbus/src/test/resources/protocols/modbus/DriverTestsuite.xml
@@ -97,7 +97,7 @@
<ModbusFieldHoldingRegister>
<address dataType="int" bitLength="64">0</address>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">REAL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">REAL</dataType>
</ModbusFieldHoldingRegister>
</hurz>
</fields>
@@ -105,8 +105,8 @@
<values>
<hurz>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcREAL dataType="string" bitLength="72">3.1415927</PlcREAL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcREAL dataType="float" bitLength="31">3.1415927410125732</PlcREAL>
</ResponseItem>
</hurz>
</values>
@@ -187,7 +187,7 @@
<ModbusFieldHoldingRegister>
<address dataType="int" bitLength="64">0</address>
<numberOfElements dataType="int" bitLength="64">2</numberOfElements>
- <dataType dataType="string" bitLength="32">REAL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">REAL</dataType>
</ModbusFieldHoldingRegister>
</hurz>
</fields>
@@ -195,10 +195,10 @@
<values>
<hurz>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
<PlcList>
- <PlcREAL dataType="string" bitLength="72">3.1415927</PlcREAL>
- <PlcREAL dataType="string" bitLength="72">3.1415927</PlcREAL>
+ <PlcREAL dataType="float" bitLength="31">3.1415927410125732</PlcREAL>
+ <PlcREAL dataType="float" bitLength="31">3.1415927410125732</PlcREAL>
</PlcList>
</ResponseItem>
</hurz>
@@ -327,14 +327,14 @@
<ModbusFieldHoldingRegister>
<address dataType="int" bitLength="64">0</address>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">REAL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">REAL</dataType>
</ModbusFieldHoldingRegister>
</hurz1>
<hurz2>
<ModbusFieldHoldingRegister>
<address dataType="int" bitLength="64">2</address>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">REAL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">REAL</dataType>
</ModbusFieldHoldingRegister>
</hurz2>
</fields>
@@ -342,14 +342,14 @@
<values>
<hurz1>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcREAL dataType="string" bitLength="72">3.1415927</PlcREAL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcREAL dataType="float" bitLength="31">3.1415927410125732</PlcREAL>
</ResponseItem>
</hurz1>
<hurz2>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcREAL dataType="string" bitLength="72">3.1415927</PlcREAL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcREAL dataType="float" bitLength="31">3.1415927410125732</PlcREAL>
</ResponseItem>
</hurz2>
</values>
@@ -429,14 +429,14 @@
<ModbusFieldHoldingRegister>
<address dataType="int" bitLength="64">0</address>
<numberOfElements dataType="int" bitLength="64">1</numberOfElements>
- <dataType dataType="string" bitLength="32">REAL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">REAL</dataType>
</ModbusFieldHoldingRegister>
- <value dataType="string" bitLength="72">3.1415927</value>
+ <value dataType="string" bitLength="72" encoding="UTF-8">3.1415927</value>
</hurz>
</fields>
</PlcWriteRequest>
<fields>
- <hurz dataType="string" bitLength="16">OK</hurz>
+ <hurz dataType="string" bitLength="16" encoding="UTF-8">OK</hurz>
</fields>
</PlcWriteResponse>
</api-response>
@@ -519,15 +519,15 @@
<ModbusFieldHoldingRegister>
<address dataType="int" bitLength="64">0</address>
<numberOfElements dataType="int" bitLength="64">2</numberOfElements>
- <dataType dataType="string" bitLength="32">REAL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">REAL</dataType>
</ModbusFieldHoldingRegister>
- <value dataType="string" bitLength="72">3.1415927</value>
- <value dataType="string" bitLength="72">3.1415927</value>
+ <value dataType="string" bitLength="72" encoding="UTF-8">3.1415927</value>
+ <value dataType="string" bitLength="72" encoding="UTF-8">3.1415927</value>
</hurz>
</fields>
</PlcWriteRequest>
<fields>
- <hurz dataType="string" bitLength="16">OK</hurz>
+ <hurz dataType="string" bitLength="16" encoding="UTF-8">OK</hurz>
</fields>
</PlcWriteResponse>
</api-response>
diff --git a/protocols/s7/src/test/resources/protocols/s7/DriverTestsuite.xml b/protocols/s7/src/test/resources/protocols/s7/DriverTestsuite.xml
index 6b5e78c..bfd535f 100644
--- a/protocols/s7/src/test/resources/protocols/s7/DriverTestsuite.xml
+++ b/protocols/s7/src/test/resources/protocols/s7/DriverTestsuite.xml
@@ -535,12 +535,12 @@
<fields>
<hurz>
<S7Field>
- <memoryArea dataType="string" bitLength="56">OUTPUTS</memoryArea>
+ <memoryArea dataType="string" bitLength="56" encoding="UTF-8">OUTPUTS</memoryArea>
<blockNumber dataType="int" bitLength="64">0</blockNumber>
<byteOffset dataType="int" bitLength="64">0</byteOffset>
<bitOffset dataType="int" bitLength="64">0</bitOffset>
<numElements dataType="int" bitLength="64">1</numElements>
- <dataType dataType="string" bitLength="32">BOOL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">BOOL</dataType>
</S7Field>
</hurz>
</fields>
@@ -548,8 +548,8 @@
<values>
<hurz>
<ResponseItem>
- <result dataType="string" bitLength="16">OK</result>
- <PlcBOOL dataType="string" bitLength="32">true</PlcBOOL>
+ <result dataType="string" bitLength="16" encoding="UTF-8">OK</result>
+ <PlcBOOL dataType="bit" bitLength="1">true</PlcBOOL>
</ResponseItem>
</hurz>
</values>
@@ -671,12 +671,12 @@
<fields>
<hurz>
<S7Field>
- <memoryArea dataType="string" bitLength="56">OUTPUTS</memoryArea>
+ <memoryArea dataType="string" bitLength="56" encoding="UTF-8">OUTPUTS</memoryArea>
<blockNumber dataType="int" bitLength="64">0</blockNumber>
<byteOffset dataType="int" bitLength="64">0</byteOffset>
<bitOffset dataType="int" bitLength="64">0</bitOffset>
<numElements dataType="int" bitLength="64">1</numElements>
- <dataType dataType="string" bitLength="32">BOOL</dataType>
+ <dataType dataType="string" bitLength="32" encoding="UTF-8">BOOL</dataType>
</S7Field>
</hurz>
</fields>
@@ -684,7 +684,7 @@
<values>
<hurz>
<ResponseItem>
- <result dataType="string" bitLength="104">ACCESS_DENIED</result>
+ <result dataType="string" bitLength="104" encoding="UTF-8">ACCESS_DENIED</result>
</ResponseItem>
</hurz>
</values>