| // |
| // Licensed to the Apache Software Foundation (ASF) under one or more |
| // contributor license agreements. See the NOTICE file distributed with |
| // this work for additional information regarding copyright ownership. |
| // The ASF licenses this file to You under the Apache License, Version 2.0 |
| // (the "License"); you may not use this file except in compliance with |
| // the License. You may obtain a copy of the License at |
| // |
| // https://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| :imagesdir: ../../images/ |
| |
| = Strategy for creating a new Driver |
| |
| Please inspect other existing modules on how to implement some of this. |
| |
| == Prepare a new protocol module |
| |
| 1. Create a new `protocol` module for your protocol. |
| 2. Create the `pom.xml` file for the new module. |
| 3. Create a new `mspec` file in `src/main/release/` with just one or two dummy types. |
| 4. Create a new `Protocol` class in `src/main/java` which implements `org.apache.plc4x.plugins.codegenerator.protocol.Protocol`. |
| - The value returned by `getName()` will be used in the maven driver code generation. |
| 5. Create a new file called `src/main/resources/META-INF/services/org.apache.plc4x.plugins.codegenerator.protocol.Protocol` and list the new protocol class. |
| 6. Test you can build the new protocol module. |
| |
| == Prepare a new driver module |
| |
| 1. Create a new `driver` module under `plc4j/drivers` |
| 2. Create the `pom.xml` file for the new module. |
| - Be sure to add a maven dependency to your protocol module. |
| - Be sure you have the `update-generated-code` profile in there. |
| - Be sure to reference the protocol name used in your protocol module. |
| 3. Create the `Driver` class in `src/main/java` which implements `org.apache.plc4x.java.api.PlcDriver`. |
| 4. Create a file called `src/main/resources/META-INF/services/org.apache.plc4x.java.api.PlcDriver` and list the new driver class. |
| 5. Test you can build the new driver module and the code generation works. |
| |
| == Start implementing the protocol parser and serializer |
| |
| 1. Create a capture of the communication you want to create a driver for. |
| 2. Open the capture in WireShark |
| 3. Start defining the types you see in your mspec file |
| 4. Create a file `ParserSerializerTestsuite.xml` in the protocol modules `src/test/resources` directory. |
| 5. Start adding empty test-cases for every packet in your recording, by copying the TCP/UDP/Whatever payload in Wireshark as `hex-stream` and pasting that in the `raw` element of a test-case. |
| 6. In the driver module, create a ParserSerializer test that extends `org.apache.plc4x.test.parserserializer.ParserSerializerTestsuiteRunner` in `src/test/java` which references the `ParserSerializerTestsuite.xml` file of your protocol module. |
| 7. Iteratively implement all the `mspec` types needed to process your captures: |
| - Add/update the types in the `mspec` file |
| - Rebuild the protocol module |
| - Rebuild the driver module (with the `update-generate-code` profile enabled) |
| - Run the ParserSerializer test |
| |
| == Start implementing the driver logic |
| |
| As soon as you are able to process all captures of your observed communication, you can start implementing a driver protocol logic. |
| |
| TODO: Continue writing this. |