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