9355f5e sbus: Add sbus_vtable and update codegen to support it

8 files Authored by stefw 9 years ago, Committed by jhrozek 9 years ago,
    sbus: Add sbus_vtable and update codegen to support it
    
    Each interface is a vtable structure derived from
    sbus_vtable, in the sense that it has an sbus_vtable
    struct as its first argument. This lets us upcast the
    interface vtable structure to an sbus_vtable and dispatch
    to it dynamically and cleanly.
    
    The interface metadata contains information about which
    vtable offset in the interface metadata should be dispatched
    to for a given function. This is a common scheme, not only
    among dbus implementations, but also compiled languages.
    
    Currently all the vtable functions are of type
    sbus_msg_handler_fn. These are the handlers we are familiar
    with and perform raw processing of the message. Later commits
    will introduce type safe handlers that levelage compile checking
    and automatic argument packing/unpacking.
    
    Although this may seem contrived now, the remainder of the
    dbus infrastructure work will build on this, including
    ofd.Properties, ofd.ObjectManager, ofd.Introspect, compiler
    checked type safe unpacking/packing, etc.
    
    The codegen now generates vtable structures for each interface
    along-side the metadata, and fills in vtable offsets
    appropriately.
    
    It is obviously still possible to hand-craft such vtables and
    metadata if needed for a special case.
    
    Once again examples output can be found at:
    
      src/tests/sbus_codegen_tests_generated.h
    
    Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
    Reviewed-by: Sumit Bose <sbose@redhat.com>
    Reviewed-by: Lukáš Slebodník <lslebodn@redhat.com>
    Reviewed-by: Simo Sorce <simo@redhat.com>
    (cherry picked from commit fcd8093c58638dc7c4f9cddfc97f273b94ce2ead)
    
        
file modified
+1 -1
file modified
+40 -2
file modified
+15 -0
file modified
+1 -0