Here is what worked for me:
It looks like gpio data is contained in the hardware_interface::ComponentInfo structure.
This has a map of strings called parameters in it.
The example above that I made did not work because there are some key parameter names( not sure the whole list) that are used internally and will cause the parsing to fail.
creating unique names did work:
<gpio name="safety_module_load_interaction_output">
<param name="byteIndex">1</param>
<param name="bitMask">0x20</param>
<command_interface name="enable"/>
<state_interface name="status" />
</gpio>