I know that LabVIEW treats Booleans as bytes in some cases, but it looks like the Ethernet/IP implementation treats them as bytes in some cases and bits in others.
Example: In "initialize assembly lists.vi" there are two subVIs that seem to conflict.
1. element to byte index.vi - Contains a case structure selected by "data type" that makes the exception for Boolean so that you have a byte index and then a subindex (bit).
2. check data size.vi - Contains a case structure also selected by "data type", but here we declare Boolean to be 1 byte in size (rather than 1 bit or 0.125 bytes).
As a result, we have a situation where we have defined up to 96 bits in a robot controller interface, but the E/IP assembly gets sized to 96 bytes. On the robot side of things, we end up with 96 * 8 = 768 bits.
For us this is not terribly bad, but it confused our robot programmers to have all those unused bits reserved.
We are making great progress with DCAF and its learning curve. I've got a custom module that successfully executes a startup/recovery sequence on the robot controller through E/IP from cRIO.