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.