Hi,

awesome work Etienne.
Just a quick note from me... did you already sign a ICLA with the Apache 
Foundation? If not you should do that now, otherwise we can not accept this big 
(and awesome!!) contribution.

You can find more information here: https://www.apache.org/licenses/
Direkt Link tot he ICLA: https://apache.org/licenses/icla.pdf

Best
Julian

Am 17.03.20, 13:30 schrieb "Etienne Robinet" <[email protected]>:

    Hi Chris, 
    I will do the PR. inside the fork there are also the changes I did to the 
Camel component a couple of weeks ago (passing a List of queries and returning 
a List of values).
    
    Etienne
    On 2020/03/17 10:25:01, Christofer Dutz <[email protected]> wrote: 
    > Hi Etienne, 
    > 
    > I would suggest you create a Pull Request for your changes so we can pull 
them in.
    > We can then work on finalizing this together.
    > 
    > Chris
    > 
    > 
    > 
    > Am 17.03.20, 11:22 schrieb "Etienne Robinet" <[email protected]>:
    > 
    >     Hi Chris,
    >     the problem was the <parameter> tag was a parameter from COTP and not 
propper to XML. Just removed it and it found the right parameters. I pushed the 
test for Parser/Serializer for Read&Write Response/Request. The only little 
issue I have is with the parsing from the Java Object to an XML string (to 
compare). It seems like it still has some difficulties to correctly parse a 
byte[]; for the rest everything should be OK.
    >     What needs to be done more on the driver? 
    >     Etienne 
    >     On 2020/03/17 08:00:49, Christofer Dutz <[email protected]> 
wrote: 
    >     > Hi Etienne,
    >     > 
    >     > sorry for the late response ... couldn't read the image on my 
phone, but on the computer it's fine.
    >     > 
    >     > In your case the root element needs to be EipConnectionRequest and 
not EipRequest.
    >     > 
    >     > I have to admit I too haven't completely grasped all the details of 
how Jackson parses and serializes stuff. 
    >     > But usually I paste an empty xml representation (in your case an 
empty EipPacket element) and put in the bytes.
    >     > Then I run the test and obviously it fails complaining about what 
it parsed and that it looks different.
    >     > I manually examine if the xml is correct and replace the empty 
element with the printed out verson.
    >     > 
    >     > Chris
    >     > 
    >     > 
    >     > 
    >     > Am 16.03.20, 17:20 schrieb "Etienne Robinet" <[email protected]>:
    >     > 
    >     >     Hi again,
    >     >     I started also to test serializer and parser. Here is the 
problem I am facing: https://i.imgur.com/stmEqlm.png
    >     >     On the left you see the testcase, on the right the code in the 
ProtocolLogic. I don't know what I a m doing wrong, but from the log it seems 
it does only look for the parameters I am giving?
    >     >     
    >     >     Etienne
    >     >     On 2020/03/16 15:38:33, Etienne Robinet <[email protected]> 
wrote: 
    >     >     > Hi Chris,
    >     >     > I did a similar test for reading a tag. As I never did such 
tests before, I don't know if the method is correct, but the results are 
similar to the ones I get running the same test for the s7. I also pushed this 
to my fork. Tomorrow I will try to do some tests on the PLC to see if I can 
perform fetching a lot of data (like I did on the s7) and if the writing works.
    >     >     > 
    >     >     > Etienne
    >     >     > 
    >     >     > On 2020/03/16 13:47:53, Christofer Dutz 
<[email protected]> wrote: 
    >     >     > > Hi Etienne,
    >     >     > > 
    >     >     > > You probably pulled in a SNAPSHOT from our maven repo ... 
if this is newer than yours, Maven usually pulls new versions the first time 
you build on every day. ... yes this can be annoying ;-)
    >     >     > > 
    >     >     > > Chris
    >     >     > > 
    >     >     > > Am 16.03.20, 14:41 schrieb "Etienne Robinet" 
<[email protected]>:
    >     >     > > 
    >     >     > >     Hi,
    >     >     > >     Ok I see, seems to be resolved once rebuilt. But how 
does it come that it generates the getLengthInBits() before I updated it?
    >     >     > >     
    >     >     > >     Etienne
    >     >     > >     On 2020/03/16 13:10:24, Christofer Dutz 
<[email protected]> wrote: 
    >     >     > >     > Hi Etienne,
    >     >     > >     > 
    >     >     > >     > it's there ... have a look:
    >     >     > >     > 
https://github.com/apache/plc4x/blob/develop/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/Message.java
    >     >     > >     > 
    >     >     > >     > The problem is that you checked out your fork. That 
doesn't update automatically if someone pushes anything to our repo.
    >     >     > >     > You manually have to do that.
    >     >     > >     > 
    >     >     > >     > Please check "Keeping your fork up to date" on 
https://plc4x.apache.org/developers/contributing.html
    >     >     > >     > 
    >     >     > >     > Hope that helps.
    >     >     > >     > 
    >     >     > >     > Chris
    >     >     > >     > 
    >     >     > >     > 
    >     >     > >     > 
    >     >     > >     > Am 16.03.20, 13:50 schrieb "Etienne Robinet" 
<[email protected]>:
    >     >     > >     > 
    >     >     > >     >     Hi Chris,
    >     >     > >     >     
    >     >     > >     >     buy how do I stop it from generating the error? 
He calls the getLengthInBits on an implmentation of Message so that is where 
the error happens (also the @Override). I checked the Message interface and 
there is no such metho, also checked the pojo-template and couldn't find the 
method. I did not had that before when generating sources (I think since I ran 
some tests on the PLC).
    >     >     > >     >     Etienne
    >     >     > >     >     On 2020/03/16 12:46:48, Christofer Dutz 
<[email protected]> wrote: 
    >     >     > >     >     > Hi Etienne,
    >     >     > >     >     > 
    >     >     > >     >     > well the getLengthInBytes is still there ... it 
just calls the getLengthInBits and divides that by 8.
    >     >     > >     >     > The reason was that with the Firmata driver we 
first had a protocol where the getLengthInBytes returned 0 because one datatype 
didn't have a full multiple of 8 as content. This made getLengthInBytes return 
0 instead of 1.
    >     >     > >     >     > 
    >     >     > >     >     > In general nothing should have changed as the 
getLengthInBytes still exists. It's just that there is an additional 
getLengthInBits.
    >     >     > >     >     > 
    >     >     > >     >     > Chris
    >     >     > >     >     > 
    >     >     > >     >     > 
    >     >     > >     >     > 
    >     >     > >     >     > 
    >     >     > >     >     > Am 16.03.20, 13:19 schrieb "Etienne Robinet" 
<[email protected]>:
    >     >     > >     >     > 
    >     >     > >     >     >     Hi Chris,
    >     >     > >     >     >     
    >     >     > >     >     >     Thanks for the advice I will try to find a 
way for that.
    >     >     > >     >     >     I tried executing some tests but I 
realisedI got an error on runtime. After looking at the generated source, this 
is what I have:
    >     >     > >     >     >     https://i.imgur.com/LflQvpw.png
    >     >     > >     >     >     Why does the getLengthInBytes method got 
swapped by getLengthInBits? The error comes that he is looking for the 
gteLengthInBits() on a Message, and the @Override is also wrong.
    >     >     > >     >     >     
    >     >     > >     >     >     Etienne 
    >     >     > >     >     >     On 2020/03/16 11:46:53, Christofer Dutz 
<[email protected]> wrote: 
    >     >     > >     >     >     > Hi Etienne,
    >     >     > >     >     >     > 
    >     >     > >     >     >     > well there must be some way to 
distinguish the two ... perhaps using more than one field to discriminate the 
types?
    >     >     > >     >     >     > 
    >     >     > >     >     >     > Chris
    >     >     > >     >     >     > 
    >     >     > >     >     >     > 
    >     >     > >     >     >     > 
    >     >     > >     >     >     > Am 16.03.20, 12:01 schrieb "Etienne 
Robinet" <[email protected]>:
    >     >     > >     >     >     > 
    >     >     > >     >     >     >     Hi Chris,
    >     >     > >     >     >     >     I will have a look to build the tests 
for the parser/serializer.
    >     >     > >     >     >     >     
    >     >     > >     >     >     >     I have another question. In Cip when 
data is too large and wont fit into a signle packet (>500 bytes), we use 
fragmentedRequest. The problem I'm facing is: ReadFragmentedService and 
UnconnectedRequest have the same service number 0x52.
    >     >     > >     >     >     >     From the structure, the 
UnconnectedRequest contains the fragmentedServiceRequest; but the responses are 
at the same 'level' as the UnconnectedRequest. So I don't know for now how to 
implement this and if we even need it (but I still find a good option);
    >     >     > >     >     >     >     
    >     >     > >     >     >     >     Etienne
    >     >     > >     >     >     >     On 2020/03/16 10:35:34, Christofer 
Dutz <[email protected]> wrote: 
    >     >     > >     >     >     >     > Hi Etienne,
    >     >     > >     >     >     >     > 
    >     >     > >     >     >     >     > I would also suggest you have a 
look at the unit-test framework I built for testing the parsers, serializers 
and the model.
    >     >     > >     >     >     >     > 
    >     >     > >     >     >     >     > 
plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/readwrite/S7DriverTestsuite.java
    >     >     > >     >     >     >     > 
plc4j/drivers/s7/src/test/resources/testsuite/S7DriverTestsuite.xml
    >     >     > >     >     >     >     > 
    >     >     > >     >     >     >     > I'm currently still working on an 
integration test-suite that will test the protocol component using pre-defined 
messages:
    >     >     > >     >     >     >     > 
    >     >     > >     >     >     >     > 
plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/readwrite/S7ParserSerializerTestsuite.java
    >     >     > >     >     >     >     > 
plc4j/drivers/s7/src/test/resources/testsuite/S7ParserSerializerTestsuite.xml
    >     >     > >     >     >     >     > 
    >     >     > >     >     >     >     > But I wouldn't call that production 
ready yet as I was distracted by other work and have to check where I dropped 
the ball last time.
    >     >     > >     >     >     >     > 
    >     >     > >     >     >     >     > Chris
    >     >     > >     >     >     >     > 
    >     >     > >     >     >     >     > 
    >     >     > >     >     >     >     > 
    >     >     > >     >     >     >     > 
    >     >     > >     >     >     >     > Am 16.03.20, 11:28 schrieb "Etienne 
Robinet" <[email protected]>:
    >     >     > >     >     >     >     > 
    >     >     > >     >     >     >     >     Hi Chris, 
    >     >     > >     >     >     >     >     this did also the trick and 
looks far more clean, thanks for the help on that!
    >     >     > >     >     >     >     >     
    >     >     > >     >     >     >     >     I am now working on the 
writing, might have a look on connected messages afterwards. The fact is that 
now I'm doing home office so it will be a bit trickier to test, but I might get 
a solution in the following days. 
    >     >     > >     >     >     >     >     Stay safe,
    >     >     > >     >     >     >     >     
    >     >     > >     >     >     >     >     Etienne
    >     >     > >     >     >     >     >     On 2020/03/13 17:09:06, 
Christofer Dutz <[email protected]> wrote: 
    >     >     > >     >     >     >     >     > Hi Etienne,
    >     >     > >     >     >     >     >     > 
    >     >     > >     >     >     >     >     > I just took the version 
before your last commit and applied the pattern how you pass along the 
arguments.
    >     >     > >     >     >     >     >     > Please have a look ... I 
haven't compiled the spec, but it should work. As you can see, if you want to 
use the
    >     >     > >     >     >     >     >     > arguments inside a sub-type, 
you have to re-declare the variable (identical name and type) in the sub-type.
    >     >     > >     >     >     >     >     > 
    >     >     > >     >     >     >     >     > 
    >     >     > >     >     >     >     >     > //
    >     >     > >     >     >     >     >     >  // 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
    >     >     > >     >     >     >     >     >  //
    >     >     > >     >     >     >     >     >  //     
http://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.
    >     >     > >     >     >     >     >     >  //
    >     >     > >     >     >     >     >     > 
    >     >     > >     >     >     >     >     >  
//////////////////////////////////////////////////////////////////
    >     >     > >     >     >     >     >     >  ///EthernetIP Header of size 
24
    >     >     > >     >     >     >     >     >  
/////////////////////////////////////////////////////////////////
    >     >     > >     >     >     >     >     > 
    >     >     > >     >     >     >     >     > [discriminatedType 'EipPacket'
    >     >     > >     >     >     >     >     >     [discriminator uint 16 
'command']
    >     >     > >     >     >     >     >     >     [implicit      uint 16 
'len' 'lengthInBytes - 24']
    >     >     > >     >     >     >     >     >     [simple        uint 32 
'sessionHandle']
    >     >     > >     >     >     >     >     >     [simple        uint 32 
'status']
    >     >     > >     >     >     >     >     >     [array         uint 8  
'senderContext' count '8']
    >     >     > >     >     >     >     >     >     [simple        uint 32 
'options']
    >     >     > >     >     >     >     >     >     [typeSwitch 'command'
    >     >     > >     >     >     >     >     >             ['0x0065' 
EipConnectionRequest
    >     >     > >     >     >     >     >     >                 [const  uint  
  16   'protocolVersion'   '0x01']
    >     >     > >     >     >     >     >     >                 [const  uint  
  16   'flags'             '0x00']
    >     >     > >     >     >     >     >     >             ]
    >     >     > >     >     >     >     >     >             ['0x0066' 
EipDisconnectRequest
    >     >     > >     >     >     >     >     >             ]
    >     >     > >     >     >     >     >     >             ['0x006F' 
CipRRData [uint  16  'len']
    >     >     > >     >     >     >     >     >                 [reserved  
uint    32    '0x00000000']
    >     >     > >     >     >     >     >     >                 [reserved  
uint    16    '0x0000']
    >     >     > >     >     >     >     >     >                 [simple 
CipExchange 'exchange' ['len-6']]
    >     >     > >     >     >     >     >     >             ]
    >     >     > >     >     >     >     >     >         ]
    >     >     > >     >     >     >     >     > ]
    >     >     > >     >     >     >     >     > [type  'CipExchange' [uint 16 
'exchangeLen']
    >     >     > >     >     >     >     >     >     [const          uint      
  16      'itemCount'           '0x0002']     //2 items
    >     >     > >     >     >     >     >     >     [const          uint      
  32      'nullPtr'             '0x0']          //NullPointerAddress
    >     >     > >     >     >     >     >     >     [const          uint      
  16      'UnconnectedData'     '0x00B2']   //Connection Manager
    >     >     > >     >     >     >     >     >     [implicit       uint      
  16      'size'                'lengthInBytes - 8 - 2'] //remove fields above 
and routing
    >     >     > >     >     >     >     >     >     [simple         
CipService          'service' ['exchangeLen - 10'] ]
    >     >     > >     >     >     >     >     > ]
    >     >     > >     >     >     >     >     > 
    >     >     > >     >     >     >     >     > [discriminatedType  
'CipService' [uint 16 'serviceLen']
    >     >     > >     >     >     >     >     >     [discriminator  uint    8 
  'service']
    >     >     > >     >     >     >     >     >     [typeSwitch 'service'
    >     >     > >     >     >     >     >     >         ['0x4C' CipReadRequest
    >     >     > >     >     >     >     >     >             [simple     int   
  8   'RequestPathSize']
    >     >     > >     >     >     >     >     >             [array      int   
  8   'tag'   length  '(RequestPathSize*2)']
    >     >     > >     >     >     >     >     >             [simple     uint  
  16  'elementNb']
    >     >     > >     >     >     >     >     >         ]
    >     >     > >     >     >     >     >     >         ['0xCC' 
CipReadResponse [uint 16 'serviceLen']
    >     >     > >     >     >     >     >     >               [reserved   
uint            8   '0x00']
    >     >     > >     >     >     >     >     >               [simple     
uint            8   'status']
    >     >     > >     >     >     >     >     >               [simple     
uint            8   'extStatus']
    >     >     > >     >     >     >     >     >               [enum       
CIPDataTypeCode   'dataType']
    >     >     > >     >     >     >     >     >               [array      int 
            8   'data'  length  'serviceLen-6']
    >     >     > >     >     >     >     >     >         ]
    >     >     > >     >     >     >     >     >         ['0x0A' 
MultipleServiceRequest [uint 16 'serviceLen']
    >     >     > >     >     >     >     >     >                [const  int    
 8   'RequestPathSize'   '0x02']
    >     >     > >     >     >     >     >     >                [const  uint   
 32  'RequestPath'       '0x01240220']   //Logical Segment: Class(0x20) 0x02, 
Instance(0x24) 01 (Message Router)
    >     >     > >     >     >     >     >     >                [simple 
Services  'data' ['serviceLen - 6 ']]
    >     >     > >     >     >     >     >     >         ]
    >     >     > >     >     >     >     >     >         ['0x8A' 
MultipleServiceResponse [uint 16 'serviceLen']
    >     >     > >     >     >     >     >     >                [reserved   
uint    8   '0x0']
    >     >     > >     >     >     >     >     >                [simple     
uint    8   'status']
    >     >     > >     >     >     >     >     >                [simple     
uint    8   'extStatus']
    >     >     > >     >     >     >     >     >                [simple 
Services  'data' ['serviceLen - 4']]
    >     >     > >     >     >     >     >     >         ]
    >     >     > >     >     >     >     >     >         ['0x0052'   
CipUnconnectedRequest
    >     >     > >     >     >     >     >     >                [reserved   
uint    8   '0x02']
    >     >     > >     >     >     >     >     >                [reserved   
uint    8   '0x20']   // setRequestPathLogicalClassSegment
    >     >     > >     >     >     >     >     >                [reserved   
uint    8   '0x06']   // set request class path
    >     >     > >     >     >     >     >     >                [reserved   
uint    8   '0x24']   // setRequestPathLogicalInstanceSegment
    >     >     > >     >     >     >     >     >                [reserved   
uint    8   '0x01']   // setRequestPathInstance
    >     >     > >     >     >     >     >     >                [reserved   
uint    16  '0x9D05']   //Timeout 5s
    >     >     > >     >     >     >     >     >                [implicit   
uint    16   'messageSize'   'lengthInBytes - 10 - 4']   //substract above and 
routing
    >     >     > >     >     >     >     >     >                [simple     
CipService  'service']
    >     >     > >     >     >     >     >     >                [const      
uint    16  'route' '0x0001']
    >     >     > >     >     >     >     >     >                [simple     
int     8   'backPlane']
    >     >     > >     >     >     >     >     >                [simple     
int     8   'slot']
    >     >     > >     >     >     >     >     >         ]
    >     >     > >     >     >     >     >     >     ]
    >     >     > >     >     >     >     >     > ]
    >     >     > >     >     >     >     >     > 
    >     >     > >     >     >     >     >     > [type   'Services' [uint   16 
  'servicesLen']
    >     >     > >     >     >     >     >     >     [simple uint    16  
'serviceNb']
    >     >     > >     >     >     >     >     >     [array  uint        16  
'offsets'       count  'serviceNb']
    >     >     > >     >     >     >     >     >     [array  CipService   
'services'      count  'serviceNb' ['servicesLen/serviceNb'] ]
    >     >     > >     >     >     >     >     > ]
    >     >     > >     >     >     >     >     > 
    >     >     > >     >     >     >     >     > [enum uint   16   
'CIPDataTypeCode' [uint 8  'size']
    >     >     > >     >     >     >     >     >     ['0X00C1'   BOOL          
  ['1']]
    >     >     > >     >     >     >     >     >     ['0X00CA'   REAL          
  ['4']]
    >     >     > >     >     >     >     >     >     ['0X00C4'   DINT          
  ['4']]
    >     >     > >     >     >     >     >     >     ['0X00C3'   INT           
  ['2']]
    >     >     > >     >     >     >     >     >     ['0X00C2'   SINT          
  ['1']]
    >     >     > >     >     >     >     >     >     ['0X02A0'   STRUCTURED    
  ['88']]
    >     >     > >     >     >     >     >     >     ['0X02A0'   STRING        
  ['88']]
    >     >     > >     >     >     >     >     >     ['0X02A0'   STRING36      
  ['40']]
    >     >     > >     >     >     >     >     >     ['-1'       UNKNOWN       
  ['-1']]
    >     >     > >     >     >     >     >     > ]
    >     >     > >     >     >     >     >     > 
    >     >     > >     >     >     >     >     > 
    >     >     > >     >     >     >     >     > Hope that helps,
    >     >     > >     >     >     >     >     >        Chris
    >     >     > >     >     >     >     >     > 
    >     >     > >     >     >     >     >     > 
    >     >     > >     >     >     >     >     > 
    >     >     > >     >     >     >     >     > 
    >     >     > >     >     >     >     >     > 
    >     >     > >     >     >     >     >     > Am 13.03.20, 17:09 schrieb 
"Etienne Robinet" <[email protected]>:
    >     >     > >     >     >     >     >     > 
    >     >     > >     >     >     >     >     >     Hi all,
    >     >     > >     >     >     >     >     >     sorry for double-posting, 
but I found the fix. For me the code does not look that 'sexy' now but it 
works. I do not know if I can make it better but for now I will stick to this 
:) I pushed it to the 'eip' branch of my fork.
    >     >     > >     >     >     >     >     >     Have a nice weekend,
    >     >     > >     >     >     >     >     >     
    >     >     > >     >     >     >     >     >     Etienne
    >     >     > >     >     >     >     >     >     On 2020/03/13 14:48:35, 
Etienne Robinet <[email protected]> wrote: 
    >     >     > >     >     >     >     >     >     > Hi,
    >     >     > >     >     >     >     >     >     > Thanks for the advice. 
I am trying to pass the length down the subclasses, but I'm stuck. This does 
not work as it seems:
    >     >     > >     >     >     >     >     >     > 
https://i.imgur.com/77bbdBN.png CipRRData does not know what 'len' is nor its 
value as it seems.
    >     >     > >     >     >     >     >     >     > 
    >     >     > >     >     >     >     >     >     > I wanted to inspire 
mysefl from the CotpPayload, but unfortunately, the first byte of the whole 
packet is a discriminator (command).
    >     >     > >     >     >     >     >     >     > 
    >     >     > >     >     >     >     >     >     > Etienne
    >     >     > >     >     >     >     >     >     > On 2020/03/13 13:52:16, 
Christofer Dutz <[email protected]> wrote: 
    >     >     > >     >     >     >     >     >     > > Hi Etienne,
    >     >     > >     >     >     >     >     >     > > 
    >     >     > >     >     >     >     >     >     > > I think you can solve 
your problem in two ways. 
    >     >     > >     >     >     >     >     >     > > In all you need to 
pass down the length of the packet in total from the root type (which knows the 
length).
    >     >     > >     >     >     >     >     >     > > 1) You keep on just 
reading bytes and parse in the protocol logic class (Like in the S7 driver or 
KNX)
    >     >     > >     >     >     >     >     >     > > 2) You directly parse 
PlcValues (using "dataIo" types) 
    >     >     > >     >     >     >     >     >     > > 
    >     >     > >     >     >     >     >     >     > > I would prefer option 
2 but 1 is simpler. The reason I'm doing 1) in S7 and KNX is that I need to 
know the type from the request to decode in the S7 case and in the KNX case I 
need to know the type from an external source in order to decode it.
    >     >     > >     >     >     >     >     >     > > 
    >     >     > >     >     >     >     >     >     > > 
    >     >     > >     >     >     >     >     >     > > Chris
    >     >     > >     >     >     >     >     >     > > 
    >     >     > >     >     >     >     >     >     > > Am 13.03.20, 14:45 
schrieb "Etienne Robinet" <[email protected]>:
    >     >     > >     >     >     >     >     >     > > 
    >     >     > >     >     >     >     >     >     > >     Yes this is 
exactly what I need. If I get the remaining bytes, I can know the element 
numbers as I have their type!
    >     >     > >     >     >     >     >     >     > >     
    >     >     > >     >     >     >     >     >     > >     Etienne
    >     >     > >     >     >     >     >     >     > >     
    >     >     > >     >     >     >     >     >     > >     On 2020/03/13 
13:40:09, Julian Feinauer <[email protected]> wrote: 
    >     >     > >     >     >     >     >     >     > >     > Hey,
    >     >     > >     >     >     >     >     >     > >     > 
    >     >     > >     >     >     >     >     >     > >     > there ist he 
possibility to get the remaining size oft he bytes of the message. Does that 
help?
    >     >     > >     >     >     >     >     >     > >     > Otherwise I 
misread your question.
    >     >     > >     >     >     >     >     >     > >     > 
    >     >     > >     >     >     >     >     >     > >     > Julian
    >     >     > >     >     >     >     >     >     > >     > 
    >     >     > >     >     >     >     >     >     > >     > Am 13.03.20, 
14:37 schrieb "Etienne Robinet" <[email protected]>:
    >     >     > >     >     >     >     >     >     > >     > 
    >     >     > >     >     >     >     >     >     > >     >     Hi Julian,
    >     >     > >     >     >     >     >     >     > >     >     so how 
should I declare this field in the mspec if I can not get its size?
    >     >     > >     >     >     >     >     >     > >     >     Thank you,
    >     >     > >     >     >     >     >     >     > >     >     
    >     >     > >     >     >     >     >     >     > >     >     Etienne
    >     >     > >     >     >     >     >     >     > >     >     
    >     >     > >     >     >     >     >     >     > >     >     On 
2020/03/13 13:35:52, Julian Feinauer <[email protected]> wrote: 
    >     >     > >     >     >     >     >     >     > >     >     > Hi 
Etienne,
    >     >     > >     >     >     >     >     >     > >     >     > 
    >     >     > >     >     >     >     >     >     > >     >     > first, 
Congratulations on your Progress!
    >     >     > >     >     >     >     >     >     > >     >     > To you 
question:
    >     >     > >     >     >     >     >     >     > >     >     > This is a 
common issue with many protocols.
    >     >     > >     >     >     >     >     >     > >     >     > We solve 
that in the protocol layer by keeping the request until we get the response 
(see for Example how we did it for S7).
    >     >     > >     >     >     >     >     >     > >     >     > So you 
cannot solve that in mpsec at compile time but have to decode the byte[] you 
get with the Information from the Request.
    >     >     > >     >     >     >     >     >     > >     >     > 
    >     >     > >     >     >     >     >     >     > >     >     > Hope that 
helps!
    >     >     > >     >     >     >     >     >     > >     >     > Julian
    >     >     > >     >     >     >     >     >     > >     >     > 
    >     >     > >     >     >     >     >     >     > >     >     > Am 
13.03.20, 14:02 schrieb "Etienne Robinet" <[email protected]>:
    >     >     > >     >     >     >     >     >     > >     >     > 
    >     >     > >     >     >     >     >     >     > >     >     >     Hi 
Chris,
    >     >     > >     >     >     >     >     >     > >     >     >     I 
have yet another question. When sending a request for multiple elements (let's 
say 10 elements of an array), you get a response from the PLC with all the data 
at the end of the packet. The problem is, in the request there is the number of 
elements we want, but not in the response. So so the protocol knows how many 
elements there are in the response packet, but not the packet itself. This is 
quite a problem as for the parse, we need to know the length of the 'data' 
array containing the response data (for now it was only depending on the type, 
but I would need type*elements).
    >     >     > >     >     >     >     >     >     > >     >     >     
    >     >     > >     >     >     >     >     >     > >     >     >     I 
tested a bit by modifying the generated IO, and 1 way to do it is to get the 
remaining bytes and divide this by the datatype size. I just wanted to ask if 
someone would know how to declare this in the mspec, as I don't want to touch 
at the template. I also thought about having an attribute on the response, but 
I don't know how to put an attribute that won't get parsed/serialized. Hope I 
am clear enough, but this is  a code sample that worked (modifying generated 
sources):
    >     >     > >     >     >     >     >     >     > >     >     >     
https://i.imgur.com/Xm6DxEZ.png (notice the error but this code works if I 
write it myself)
    >     >     > >     >     >     >     >     >     > >     >     >     And 
here is how I put it in the mspec: https://i.imgur.com/Ye1Kl9q.png (you can see 
the number of element is not present)
    >     >     > >     >     >     >     >     >     > >     >     >     
    >     >     > >     >     >     >     >     >     > >     >     >     Any 
help is welcome of course! :)
    >     >     > >     >     >     >     >     >     > >     >     >     
Etienne
    >     >     > >     >     >     >     >     >     > >     >     >     
    >     >     > >     >     >     >     >     >     > >     >     >     
    >     >     > >     >     >     >     >     >     > >     >     >     
    >     >     > >     >     >     >     >     >     > >     >     >     
    >     >     > >     >     >     >     >     >     > >     >     >     
    >     >     > >     >     >     >     >     >     > >     >     >     On 
2020/03/12 21:34:12, Christofer Dutz <[email protected]> wrote: 
    >     >     > >     >     >     >     >     >     > >     >     >     > Hi 
Etienne,
    >     >     > >     >     >     >     >     >     > >     >     >     > 
    >     >     > >     >     >     >     >     >     > >     >     >     > 
that's amazing news :-) ... congratulations :-)
    >     >     > >     >     >     >     >     >     > >     >     >     > 
    >     >     > >     >     >     >     >     >     > >     >     >     > 
Also had a look at your mspec and I think you have done a great job with that. 
I wasn't quite sure about the relation between CipRRData and CipExchange, but 
your solution looks rock-solid.
    >     >     > >     >     >     >     >     >     > >     >     >     > 
    >     >     > >     >     >     >     >     >     > >     >     >     > And 
now reading that you even managed to get something working, that makes me very 
happy.
    >     >     > >     >     >     >     >     >     > >     >     >     > 
    >     >     > >     >     >     >     >     >     > >     >     >     > 
Tomorrow I'll be a little consumed with signing the contract with the KNX 
foundation but I'll try to have a look at your fork.
    >     >     > >     >     >     >     >     >     > >     >     >     > 
    >     >     > >     >     >     >     >     >     > >     >     >     > 
Thanks for your great work :)
    >     >     > >     >     >     >     >     >     > >     >     >     > 
    >     >     > >     >     >     >     >     >     > >     >     >     > 
Chris
    >     >     > >     >     >     >     >     >     > >     >     >     > 
    >     >     > >     >     >     >     >     >     > >     >     >     > 
    >     >     > >     >     >     >     >     >     > >     >     >     > 
    >     >     > >     >     >     >     >     >     > >     >     >     > Am 
12.03.20, 17:50 schrieb "Etienne Robinet" <[email protected]>:
    >     >     > >     >     >     >     >     >     > >     >     >     > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
Hi all,
    >     >     > >     >     >     >     >     >     > >     >     >     >     
again a productive day, I pushed to my branch and the driver support reading, 
multiple reading and the camel component works (in karaf) and takes a List of 
strings. Tested it on a different PLC and it also worked! Next I'm going to 
implement the array readings and then maybe writing (tests needs to be done 
too).
    >     >     > >     >     >     >     >     >     > >     >     >     >     
    >     >     > >     >     >     >     >     >     > >     >     >     >     
Etienne
    >     >     > >     >     >     >     >     >     > >     >     >     >     
    >     >     > >     >     >     >     >     >     > >     >     >     >     
On 2020/03/12 07:18:32, Etienne Robinet <[email protected]> wrote: 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> Hi Chris,
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> yes that's what I thought so I managed to work around like this: 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> 
https://github.com/etiennerobinet/plc4x/blob/eip/protocols/eip/src/main/resources/protocols/eip/eip.mspec
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> And this works for reading! I managed to make a quick test and read via the 
tag name. Now my question is: can I create sub-types that are also 
discriminated with sub-subtypes? That would allow to create the ReadRequest 
only, as the fields before are mainly constant/implicit.
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> Etienne
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> On 2020/03/11 20:24:14, Christofer Dutz <[email protected]> wrote: 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> > Hi Etienne,
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> > you are defining the type CipRRData twice ... once as one of the sub-types 
of EipPacket and once as a dedicated discriminated type.
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> > Chris
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> > PS: I have no idea why I didn't finish writing this email and I just 
noticed when closing everything down ... sorry for the late reply.
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> > Am 11.03.20, 09:30 schrieb "Etienne Robinet" <[email protected]>:
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     Hi all,
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     I have a quick question. I've been working on the CIP encapsulation but 
hitting a problem with the mspec design. Here is the error I am facing: 
https://i.imgur.com/iCfh59n.png
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     The problem here is that this CipRRData should also be of type 
EipPacket. When the command of an EipPacket is '0x66' this means SendRRData 
(for Read/Write and Request/Response so I have to discriminate it on the sub 
level). The problem is that after generation, CipRRData implements Message but 
does not extend EipPacket. How should I do it? Here is the mspec:
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     [discriminatedType 'EipPacket'
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [discriminator uint 16 'command']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [implicit      uint 16 'len' 'lengthInBytes - 24']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [simple        uint 32 'sessionHandle']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [simple        uint 32 'status']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [array         uint 8  'senderContext' count '8']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [simple        uint 32 'options']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [typeSwitch 'command'
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                 ['0x0065' EipConnectionRequest
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                     [const  uint    16   'protocolVersion'   '0x01']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                     [const  uint    16   'flags'             '0x00']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                 ]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                 ['0x0066' EipDisconnectRequest
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                 ]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                 ['0x006F' CipRRData
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                     [const  uint    32  'EipInterface' '0x00000000']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                     [const  uint    8   'timeout'   '0x0000']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                 ]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >             ]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     ]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     [discriminatedType 'CipRRData'
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [simple         uint        8       'itemNb']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [array          CipItem     'items'    length  'itemNb']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [discriminator  uint        8       'CipService']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [typeSwitch 'CipService'
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >             ['0x52' CipUnconnectedRequest
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                 [simple CommandData    'data']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >             ]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >             ['0xCC' CipReadResponse
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                 [reserved   uint            8   '0x0000']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                 [simple     uint            8   'status']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                 [simple     uint            8   'extStatus']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                 [simple     uint            8    'dataType']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                 [array      uint            8   'data'  length  'dataType']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >             ]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         ]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     ]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     [type 'CipItem'
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [simple uint    16  'typeID']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [simple uint    16  'size']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     ]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     [discriminatedType 'CommandData'
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [reserved         uint    8   '0x02']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [reserved         uint    8   '0x20']   // 
setRequestPathLogicalClassSegment
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [reserved         uint    8   '0x06']   // set request class path
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [reserved         uint    8   '0x24']   // 
setRequestPathLogicalInstanceSegment
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [reserved         uint    8   '0x01']   // setRequestPathInstance
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [discriminator  uint    8   'CipService']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         [typeSwitch 'CipService'
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >             ['0x4C' CipReadRequest
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                 [simple     uint    8   'RequestPathSize']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                 [reserved   uint    8   '0x91']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                 [array      uint    8   'tag'   length  
'(RequestPathSize*2) - 1']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >                 [reserved   uint    16  '0x0001']  //itemCount set to 1 for 
now
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >             ]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         ]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     ]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     [enum int   16   'CIPDataTypeCode' [uint 8  'size']
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         ['0X00C1'   BOOL            ['1']]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         ['0X00CA'   REAL            ['4']]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         ['0X00C4'   DINT            ['4']]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         ['0X00C3'   INT             ['2']]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         ['0X00C2'   SINT            ['1']]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         ['0X02A0'   STRUCTURED      ['88']]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         ['0X02A0'   STRING          ['88']]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         ['0X02A0'   STRING36        ['40']]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >         ['-1'       UNKNOWN         ['-1']]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     ]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     Thanks for any help!
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     Etienne 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     On 2020/03/10 15:18:47, Etienne Robinet <[email protected]> wrote: 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > Hi all,
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > I've managed to implement the EIP Session Register/Unregister (used 
for connected message which is best for high frequency fetching). I will push 
it to my branch and create a document explaining my steps.
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > Next I want to do was to to the CIP encapsulation part for accessing 
tag by their name. The thing is, CIP is (from what I heard) proper to Allen 
Bradley. Should I leave it in the EIP driver or modify and adapt the current AB 
driver later on? For now I will continue on eip.
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > Etienne
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > On 2020/03/10 14:41:42, Cesar Garcia <[email protected]> 
wrote: 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > Hi,
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > You can document the process step by step, you will surely find 
observation
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > points.
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > I am working with the handwritten S7 driver, but in the future I 
would
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > support the team in migrate to mspec, so the experience you will 
gain with
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > the Etheret / IP is very important.
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > Best regards,
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > El mar., 10 mar. 2020 a las 9:17, Christofer Dutz (<
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > [email protected]>) escribió:
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > > Hi Etienne,
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > >
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > > I would strongly suggest you install the Antlr plugn for the IDE 
you use.
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > > The problem is that ANTLR seems to gobble up a lot of errors and 
tries to
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > > be smart in a lot of cases.
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > > Whenever I have problems like this I use the ANTLR visual parser 
to parse
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > > a block of mspec (one type at a time) and try to narrow down the 
cause.
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > >
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > > Chris
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > >
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > >
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > >
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > > Am 10.03.20, 13:31 schrieb "Etienne Robinet" <[email protected]>:
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > >
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > >     Hi all,
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > >     I've been struggling with implementing the EIP driver. I 
started
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > > writing the mspec after creating both a module for the protocol 
and the one
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > > from the driver. I copied and adapted the pom(s) from the AB-ETH 
but only
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > > the enum is generated.
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > >     Here is a link to the forked branch:
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > > https://github.com/etiennerobinet/plc4x/tree/eip
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > >
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > >     I've been studying the EIP/CIP protocol and now I am 
confident what
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > > the packages should contain but I can not figure out how to 
generate this
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > > with the templates. Am I missing something?
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > >
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > >     Etienne
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > >
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > >
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > >
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > -- 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > *CEOS Automatización, C.A.*
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > *GALPON SERVICIO INDUSTRIALES Y NAVALES FA, C.A.,*
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > *PISO 1, OFICINA 2, AV. RAUL LEONI, SECTOR GUAMACHITO,*
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > *FRENTE A LA ASOCIACION DE GANADEROS,BARCELONA,EDO. ANZOATEGUI*
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > *Ing. César García*
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > *Cel: 0416-681.03.99*
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > *Cel: 0414-760.98.95*
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > *Hotline Técnica SIEMENS: 0800 1005080*
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > *Email: [email protected]
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > <[email protected]>*
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> >     
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> > 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
> 
    >     >     > >     >     >     >     >     >     > >     >     >     >     
    >     >     > >     >     >     >     >     >     > >     >     >     > 
    >     >     > >     >     >     >     >     >     > >     >     >     > 
    >     >     > >     >     >     >     >     >     > >     >     >     
    >     >     > >     >     >     >     >     >     > >     >     > 
    >     >     > >     >     >     >     >     >     > >     >     > 
    >     >     > >     >     >     >     >     >     > >     >     
    >     >     > >     >     >     >     >     >     > >     > 
    >     >     > >     >     >     >     >     >     > >     > 
    >     >     > >     >     >     >     >     >     > >     
    >     >     > >     >     >     >     >     >     > > 
    >     >     > >     >     >     >     >     >     > > 
    >     >     > >     >     >     >     >     >     > 
    >     >     > >     >     >     >     >     >     
    >     >     > >     >     >     >     >     > 
    >     >     > >     >     >     >     >     > 
    >     >     > >     >     >     >     >     
    >     >     > >     >     >     >     > 
    >     >     > >     >     >     >     > 
    >     >     > >     >     >     >     
    >     >     > >     >     >     > 
    >     >     > >     >     >     > 
    >     >     > >     >     >     
    >     >     > >     >     > 
    >     >     > >     >     > 
    >     >     > >     >     
    >     >     > >     > 
    >     >     > >     > 
    >     >     > >     
    >     >     > > 
    >     >     > > 
    >     >     > 
    >     >     
    >     > 
    >     > 
    >     
    > 
    > 
    

Reply via email to