You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2019/08/07 08:47:50 UTC
[plc4x] 03/17: DLC-207
This is an automated email from the ASF dual-hosted git repository.
cdutz pushed a commit to branch feature/implement-df1-driver
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 3ac29211837258bfe5e5b30825da6c8085e43260
Author: v.emmert <v....@pragmaticminds.de>
AuthorDate: Tue Jul 30 12:02:00 2019 +0200
DLC-207
first mspec definition
---
.../main/resources/templates/java/io-template.ftlh | 3 +
.../main/resources/protocols/df1/protocol.mspec | 213 ++-------------------
.../plc4x/protocol/df1/BenchmarkGeneratedDf1.java | 2 +-
3 files changed, 21 insertions(+), 197 deletions(-)
diff --git a/build-utils/language-java/src/main/resources/templates/java/io-template.ftlh b/build-utils/language-java/src/main/resources/templates/java/io-template.ftlh
index f4b0880..67a92f1 100644
--- a/build-utils/language-java/src/main/resources/templates/java/io-template.ftlh
+++ b/build-utils/language-java/src/main/resources/templates/java/io-template.ftlh
@@ -239,6 +239,9 @@ public class ${typeName}IO implements MessageIO<${typeName}<#if helper.isDiscrim
</#switch>
</#list>
}
+ public static int CRC(Object... args) {
+ return 0;
+ }
private static int COUNT(Object obj) {
if(obj.getClass().isArray()) {
diff --git a/protocols/df1/src/main/resources/protocols/df1/protocol.mspec b/protocols/df1/src/main/resources/protocols/df1/protocol.mspec
index 55b3679..3f36a18 100644
--- a/protocols/df1/src/main/resources/protocols/df1/protocol.mspec
+++ b/protocols/df1/src/main/resources/protocols/df1/protocol.mspec
@@ -17,205 +17,26 @@
// under the License.
//
-////////////////////////////////////////////////////////////////
-// IsoOnTcp/TPKT
-////////////////////////////////////////////////////////////////
-[type 'TPKTPacket'
- [const uint 8 'protocolId' '0x03']
- [reserved uint 8 '0x00']
- [implicit uint 16 'len' 'payload.lengthInBytes + 4']
- [field COTPPacket 'payload']
-]
-
-////////////////////////////////////////////////////////////////
-// COTP
-////////////////////////////////////////////////////////////////
-
-[discriminatedType 'COTPPacket'
- [implicit uint 8 'headerLength' 'lengthInBytes - (payload.lengthInBytes + 1)']
- [discriminator uint 8 'tpduCode']
- [typeSwitch 'tpduCode'
- ['0xF0' COTPPacketData
- [field bit 'eot']
- [field uint 7 'tpduRef']
- ]
- ['0xE0' COTPPacketConnectionRequest
- [field uint 16 'destinationReference']
- [field uint 16 'sourceReference']
- [field uint 8 'protocolClass']
- ]
- ['0xD0' COTPPacketConnectionResponse
- [field uint 16 'destinationReference']
- [field uint 16 'sourceReference']
- [field uint 8 'protocolClass']
- ]
- ['0x80' COTPPacketDisconnectRequest
- [field uint 16 'destinationReference']
- [field uint 16 'sourceReference']
- [field uint 8 'protocolClass']
- ]
- ['0xC0' COTPPacketDisconnectResponse
- [field uint 16 'destinationReference']
- [field uint 16 'sourceReference']
- ]
- ['0x70' COTPPacketTpduError
- [field uint 16 'destinationReference']
- [field uint 8 'rejectCause']
- ]
- ]
- [arrayField COTPParameter 'parameters' length '(headerLength + 1) - curPos' ['(headerLength + 1) - curPos']]
- [field S7Message 'payload']
-]
-
-[discriminatedType 'COTPParameter' [uint 8 'rest']
- [discriminator uint 8 'parameterType']
- [typeSwitch 'parameterType'
- ['0xC0' COTPParameterTpduSize
- [field uint 8 'tpduSize']
- ]
- ['0xC1' COTPParameterCallingTsap
- [field uint 16 'tsapId']
- ]
- ['0xC2' COTPParameterCalledTsap
- [field uint 16 'tsapId']
- ]
- ['0xC3' COTPParameterChecksum
- [field uint 8 'checksum']
- ]
- ['0xE0' COTPParameterDisconnectAdditionalInformation
- [arrayField uint 8 'data' count 'rest']
- ]
- ]
-]
-
-////////////////////////////////////////////////////////////////
-// S7
-////////////////////////////////////////////////////////////////
-
-[discriminatedType 'S7Message'
- [const uint 8 'protocolId' '0x32']
- [discriminator uint 8 'messageType']
- [reserved uint 16 '0x0000']
- [field uint 16 'tpduReference']
- [implicit uint 16 'parameterLength' 'parameter.lengthInBytes']
- [implicit uint 16 'payloadLength' 'payload.lengthInBytes']
- [typeSwitch 'messageType'
- ['0x01' S7MessageRequest
- ]
- ['0x03' S7MessageResponse
- [field uint 8 'errorClass']
- [field uint 8 'errorCode']
- ]
- ['0x07' S7MessageUserData
- ]
- ]
- [field S7Parameter 'parameter' ['messageType']]
- [field S7Payload 'payload' ['messageType', 'parameter']]
-]
-
-////////////////////////////////////////////////////////////////
-// Parameters
-
-[discriminatedType 'S7Parameter' [uint 8 'messageType']
- [discriminator uint 8 'parameterType']
- [typeSwitch 'parameterType','messageType'
- ['0xF0' S7ParameterSetupCommunication
- [reserved uint 8 '0x00']
- [field uint 16 'maxAmqCaller']
- [field uint 16 'maxAmqCallee']
- [field uint 16 'pduLength']
- ]
- ['0x04','0x01' S7ParameterReadVarRequest
- [implicit uint 8 'numItems' 'COUNT(items)']
- [arrayField S7VarRequestParameterItem 'items' count 'numItems']
- ]
- ['0x04','0x03' S7ParameterReadVarResponse
- [field uint 8 'numItems']
- ]
- ['0x05','0x01' S7ParameterWriteVarRequest
- [implicit uint 8 'numItems' 'COUNT(items)']
- [arrayField S7VarRequestParameterItem 'items' count 'numItems']
- ]
- ['0x05','0x03' S7ParameterWriteVarResponse
- [field uint 8 'numItems']
- ]
- ['0x00','0x07' S7ParameterUserData
- [implicit uint 8 'numItems' 'COUNT(items)']
- [arrayField UserDataItem 'items' count 'numItems']
- ]
- ]
-]
-
-[discriminatedType 'S7VarRequestParameterItem'
- [discriminator uint 8 'parameterItemType']
- [typeSwitch 'parameterItemType'
- ['0x12' S7VarRequestParameterItemAddress
- [implicit uint 8 'addressLength' 'address.lengthInBytes']
- [field S7Address 'address']
+[discriminatedType 'DF1Message' [uint 8 'payloadSize']
+ [const uint 8 'messageStart' '0x10']
+ [field uint 8 'transmissionMode']
+ [field uint 8 'destinationAddress']
+ [field uint 8 'sourceAddress']
+ [discriminator uint 8 'command']
+ [field uint 8 'status']
+ [field uint 16 'transactioncounter']
+ [typeSwitch 'command'
+ ['0x01' DF1ReadRequest
+ [field uint 16 'address']
+ [field uint 8 'size']
]
- ]
-]
-
-[discriminatedType 'S7Address'
- [discriminator uint 8 'addressType']
- [typeSwitch 'addressType'
- ['0x10' S7AddressAny
- [field uint 8 'transportSize']
- [field uint 16 'numberOfElements']
- [field uint 16 'dbNumber']
- [field uint 8 'area']
- [reserved uint 5 '0x00']
- [field uint 16 'byteAddress']
- [field uint 3 'bitAddress']
+ ['0x41' DF1ReadResponse
+ [arrayField uint 8 'data' length 'payloadSize']
]
]
+ [const uint 8 'messageEnd' '0x10']
+ [const uint 8 'messageTransmissionEnd' '0x03']
+ [implicit uint 16 'crc' 'CRC(destinationAddress, sourceAddress, discriminatorValues, status, transactioncounter)']
]
-// TODO: CPUFunctions still need some love ...
-[discriminatedType 'UserDataItem'
- [discriminator uint 8 'itemType']
- [typeSwitch 'itemType'
- ['0x12' UserDataItemCPUFunctions
- [implicit uint 8 'parameterLength' 'lengthInBytes']
- [field uint 16 'cpuFunctionType']
- [field uint 8 'subFunctionGroup']
- [field uint 8 'sequenceNumber']
- [optionalField uint 8 'dataUnitReferenceNumber' 'parameterLength == 8']
- [optionalField uint 8 'lastDataUnit' 'parameterLength == 8']
- [optionalField uint 8 'errorCode' 'parameterLength == 8']
- ]
- ]
-]
-
-////////////////////////////////////////////////////////////////
-// Payloads
-
-[discriminatedType 'S7Payload' [uint 8 'messageType', S7Parameter 'parameter']
- [typeSwitch 'parameter.discriminatorValues[0]', 'messageType'
- ['0xF0' S7PayloadSetupCommunication]
- ['0x04','0x01' S7PayloadReadVarRequest]
- ['0x04','0x03' S7PayloadReadVarResponse
- [arrayField S7VarPayloadDataItem 'items' count 'CAST(parameter, S7ParameterReadVarResponse).numItems']
- ]
- ['0x05','0x01' S7PayloadWriteVarRequest
- [arrayField S7VarPayloadDataItem 'items' count 'COUNT(CAST(parameter, S7ParameterWriteVarRequest).items)']
- ]
- ['0x05','0x03' S7PayloadWriteVarResponse
- [arrayField S7VarPayloadStatusItem 'items' count 'CAST(parameter, S7ParameterWriteVarResponse).numItems']
- ]
- ['0x00','0x07' S7PayloadUserData
- ]
- ]
-]
-
-[type 'S7VarPayloadDataItem'
- [field uint 8 'returnCode']
- [field uint 8 'transportSize']
- [field uint 16 'dataLength']
- [arrayField uint 8 'data' count 'dataLength']
-]
-
-[type 'S7VarPayloadStatusItem'
- [field uint 8 'returnCode']
-]
\ No newline at end of file
diff --git a/sandbox/test-java-df1-driver/src/main/java/org/apache/plc4x/protocol/df1/BenchmarkGeneratedDf1.java b/sandbox/test-java-df1-driver/src/main/java/org/apache/plc4x/protocol/df1/BenchmarkGeneratedDf1.java
index 715f983..0630c03 100644
--- a/sandbox/test-java-df1-driver/src/main/java/org/apache/plc4x/protocol/df1/BenchmarkGeneratedDf1.java
+++ b/sandbox/test-java-df1-driver/src/main/java/org/apache/plc4x/protocol/df1/BenchmarkGeneratedDf1.java
@@ -100,7 +100,7 @@ public class BenchmarkGeneratedDf1 {
System.out.print(comPort.getSystemPortName() + " | ");
System.out.print(comPort.getPortDescription() + " | ");
System.out.print(comPort.getDescriptivePortName() + " | Baud rate: ");
- System.out.print(comPort.getBaudRate());
+ System.out.println(comPort.getBaudRate());
// System.out.println(comPort.getReadTimeout());
// System.out.println(comPort.getWriteTimeout());