### Using API This provides the lowest level access to an interface marked as external. Each of the external interface is exported as a raw stream_buffer and can be written to from a C/C++ Api. In order to use it, the context has to be generated as a shared library. The resulting shared library can be loaded by an external system using `[dlopen](http://man7.org/linux/man-pages/man3/dlopen.3.html)` explicitly or linked against using the `api.h` file that is generated in the public folder. #### Walkthrough - For the purpose of demonstration in this walkthrough, we will use a simple function included in vsi_examples repository. Using git, clone the vsi_examples repository: `https://github.com/systemviewinc/vsi-examples.git`. - Create a new project and work through the wizard to the end. Select any part/board as it won't matter since we're only going to be using the software for the walkthrough. - Click `menu->flow->Create Platform`. Accept the prefilled default options and Press okay. - Click `menu->flow->Create Context`. Change the dropdown to `Software` and enter name as `api_walkthrough`. Press okay. - Open Context block properties by double clicking inside `api_walkthrough` and scroll down to `Software Parameters->map exposed interfaces as`. Make sure that `Api` is selected. - Scroll down to `C/C++ options` and ensure that `-static` flag is NOT included in `C` or `C++` compile options. Remove it if you see it included. - Open the `Builds` dropdown and select Shared Library. - Press okay to close the properties dialog. - Select `menu->Flow->Compile Platform`. - Then create a system canvas by selecting `flow->create system`. Accept the prefilled defaults. - Open the newly created system canvas and select `menu->Flow->Import Platform` - Double click the `api_walkthrough` context to enter hierarchy. - Add a new `VSI Software Wizard` block by right clicking and selecting `VSI Software Wizard`. - Open newly added block properties by double-clicking it. - Click browse beside `Source Directory` and browse to select source code directory `/example_1`. - The `C/C++ Function` dropdown box should be populated with multiple entries. Open and select `process_tcp1`. - Enable `Execution Trigger` for `Arg 1` in Arguments section. - Change the direction of `Arg 2` in Arguments section to `output`. Press okay to close properties. - Right click each interface and select `Mark External`. - Select `flow->Generate System`. - Select `flow->Build Software Contexts` and then Select `Build`. - Wait for the build to successfully complete. - Browse to the directory `/vsi_auto_gen/sw/system_1` in a terminal. - VSI automatically generate an example executable to demonstrate the api usage. Run the example by using the following command `./build/api_walkthrough/bin/api_walkthrough_example` - The example will write to each input interface marked external and then read from each output marked external A statement on console is printed for each read and write. #### Exercise - Analyze the example code for API walkthrough in `/vsi_auto_gen/sw/system_1/api_walkthrough/example`. Modify it to read data from a file instead of a variable and write to the input interface.