High-level bridges - VM interface

Each provided interface is equipped with an FV_Name AADL property. For example...
SUBPROGRAM mysimulink
FEATURES
        my_in:IN PARAMETER DataView::T_FOR_SIMULINK_IN {encoding=>UPER;};
        my_out:OUT PARAMETER DataView::T_FOR_SIMULINK_OUT {encoding=>UPER;};
END mysimulink;

SUBPROGRAM IMPLEMENTATION mysimulink.Simulink
PROPERTIES
        FV_Name => "mysimulink_fv";
        Source_Language => Simulink;
END mysimulink.Simulink;
Two ``bridge'' functions are generated per interface from aadl2glueC:
/* Initialize the PI */
void init_FVName();

/* Invoke the PI */
void FVName_SubPrgName(
    void *pInBuffer1, size_t iInBufferSize1, 
    void *pInBuffer2, size_t iInBufferSize2, 
    ..., 
    void *pOutBuffer1, size_t *pOutBufferSize1,
    void *pOutBuffer2, size_t *pOutBufferSize2,
    ...);
SubPrgName is the name of the AADL SUBPROGRAM that is used for the implementation of the interface, e.g. mysimulink in this example. aadl2glueC would therefore create the following functions for this example:
void init_mysimulink_fv();

void mysimulink_fv_mysimulink(
    void *pmy_in, size_t size_my_in, void *pmy_out, size_t *pSize_my_out);
The VM code generator only needs to call these two functions per interface, to get access to any interface's functionality. The ``init_FVName'' must of course be called only once, to initialize the interface; the VM code calls it at startup.