Hi all, I just wanted to inform you that I just merged something I was planning on doing for quite some time. Support of external types.
This means that you can introduce types into your mspec, which are not defined inside the mspec itself. This is particularly interesting for DataIo types as it allows supporting using our PlcValueTypes directly without the need to re-define them in the mspec and then to aquardly map them in the drvier, like I did in the ADS driver. It’s not a huge change, but I think it will help model the DataIo parts in the future. In order to keep things as simple as possible, I added an msped argument: “external”. You define the type just like you usually would, but leave the body empty and mark it as external: [type AdsConstants [const uint 16 adsTcpDefaultPort 48898] ] //////////////////////////////////////////////////////////////// // External types //////////////////////////////////////////////////////////////// [enum PlcValueType external='true'] //////////////////////////////////////////////////////////////// // AMS/TCP Packet //////////////////////////////////////////////////////////////// Then in the maven plugin you can provide the type information according the programming language you are aiming for: Java: <executions> <execution> <id>generate-ams-structs</id> <phase>generate-sources</phase> <goals> <goal>generate-driver</goal> </goals> <configuration> <protocolName>ads</protocolName> <languageName>java</languageName> <outputFlavor>read-write</outputFlavor> <outputDir>src/main/generated</outputDir> <options> <externalTypes> <PlcValueType>org.apache.plc4x.java.api.types.PlcValueType</PlcValueType> </externalTypes> </options> </configuration> </execution> Go: <execution> <id>generate-driver-ads</id> <phase>generate-sources</phase> <goals> <goal>generate-driver</goal> </goals> <configuration> <protocolName>ads</protocolName> <languageName>go</languageName> <outputFlavor>read-write</outputFlavor> <outputDir>${project.basedir}/protocols</outputDir> <options> <externalTypes> <PlcValueType>api "github.com/apache/plc4x/plc4go/pkg/api/values"</PlcValueType> </externalTypes> </options> </configuration> </execution> Have fun playing with this new feature. Right now, the only difference should be in the ADS driver and this should be minimal. I also updated the maven plugin to allow not only string arguments, but almost any type of structs. Hopefully that will reduce the number of times we have to release this little tool. Chris