# Custom Server in VOXL MPA

Source: https://forum.modalai.com/topic/4049/custom-server-in-voxl-mpa
Category: VOXL SDK and Software (https://forum.modalai.com/category/47/voxl-sdk-and-software)
Tags: mpa
Posted: 2024-12-21 02:26:57 UTC by Jetson Nano
Replies: 11 · Views: 6686

## Jetson Nano · 2024-12-21 02:26:57 UTC

Hello,

I'm planning to create a custom server, which calls for reading essential data(i.e features detected, no. of points detected) from voxl-qvio-server. I'm planning on referring to the libmodal-pipe documentation [link](https://docs.modalai.com/libmodal-pipe/) for building the server. I have few queries ie.

1. I see the reference files [here](https://gitlab.com/voxl-public/voxl-sdk/core-libs/libmodal-pipe/-/blob/master/examples/modal-hello-server.c). Once I define my server, how and where do I build the server and integrate it within the existing MPA?

## Reply by Alex Kushleyev (ModalAI staff) · 2024-12-26 17:06:32 UTC

@Jetson-Nano , it looks like your server will also be a mpa client - it will need to subscribe to the data from `voxl-qvio-server`. After processing the data, will you need to publish something from your server?

You can get started by using the following tool / example (`voxl-inspect-vio`) : https://gitlab.com/voxl-public/voxl-sdk/utilities/voxl-mpa-tools/-/blob/master/tools/voxl-inspect-vio.c which you may have already used on VOXL2. The example subscribes to the vio output and prints out some data to the terminal. You can extend this example to achieve what you need. In terms of building the application, you can see how the tools are built in this repo and follow the same structure to add your application to a separate project or to your own copy of the `voxl-mpa-tools` project.

Alex

## Reply by Jetson Nano · 2025-02-03 10:36:46 UTC (in reply to Alex Kushleyev)

@Alex-Kushleyev thank you for reverting, 
I would like to subscribe data from the MPA  pipe(features detected, no. of points detected) and give a condition , and if the condition is true run ```voxl-send-neopixel-cmd```.
so i would like to know.
1. How to subscribe data inside or outside a server.
2. Can I run the ```voxl-send-neopixel-cmd``` command inside a c++ file, if yes how, could you help me with the approach. Can a custom client get the data and start the command.
@tom

## Reply by Alex Kushleyev (ModalAI staff) · 2025-02-03 20:21:56 UTC (in reply to Jetson Nano)

@Jetson-Nano , I believe you should be able to prototype something by using the `voxl-inspect-vio` tool, as I mentioned above. You can build a custom version of it and modify the code to send out the following command, when you are ready, to control the neopixels. Please double check the code to make sure it does not have any issues (buffer overflow, etc.. it should not..), I am providing it just for reference :)

```
std::string cmd = "voxl-send-neopixel-cmd"; //modify as needed
std::string response;

char temp_buf[512];

FILE *fp = popen(cmd.c_str(), "r");

if (fp == NULL){
    printf("Failed to run command\n");
}
else{  //read response from the process
    while (fgets(temp_buf, sizeof(temp_buf), fp))
    {
        response += temp_buf;
    }
    pclose(fp);

    printf("got response:\n");
    printf("%s\n",response.c_str());
}
```

## Reply by Jetson Nano · 2025-02-04 05:41:33 UTC (in reply to Alex Kushleyev)

@Alex-Kushleyev thank you for reverting back.
I made the changes in the ```voxl-inspect-qvio``` tool since ```voxl-inspect-vio``` is not visible on the latest version of sdk. will it work.
due to a error from my end, I mentioned c++ file instead of c file, and since ```voxl-inspect-qvio``` is ```c file``` i had convert the code to ```c file```.
I also want to know can I automate the ```custom voxl-inspect-qvio tool``` when once the board is powered the tool will start without running the ```custom voxl-inspect-qvio``` command.

## Reply by Alex Kushleyev (ModalAI staff) · 2025-02-04 22:09:04 UTC (in reply to Jetson Nano)

@Jetson-Nano,

You could convert C to C++ easily if you need to, often for simple code it is just renaming .c to .cpp should do it and update Cmake to use the new source. In any case, it looks like you have it working.

In order to auto start your application on boot, you should write a systemd service as we do for all modalai services on voxl2. 

Here is an example service file for voxl-camera-server : https://gitlab.com/voxl-public/voxl-sdk/services/voxl-camera-server/-/blob/master/services/voxl-camera-server.service

Systemd is standard on ubuntu linux, so you should be able to find plenty of documentation if you need help with writing service files.

Alex

## Reply by Jetson Nano · 2025-02-05 14:44:26 UTC (in reply to Alex Kushleyev)

@Alex-Kushleyev thanks for reverting .
I got the code working.
I created a ```custom voxl-inspect-qvio file```. the code is able to turn ON the LEDs. 
1. Since we are not giving any command for turning OFF the LEDs is still ON even after regaining the QVIO overlay.
2. Another question I had was regarding the same approach while using an external FC. Is it possible. 
3. Can you please mention the directory of the ```voxl-send -neopixel.cmd```. I want to understand the code make necessary changes. Majorly with respect to the colors of the LEDs

## Reply by Alex Kushleyev (ModalAI staff) · 2025-02-05 15:27:23 UTC (in reply to Jetson Nano)

@Jetson-Nano ,

The `voxl-send-neopixel-cmd` source code is here : https://gitlab.com/voxl-public/voxl-sdk/services/voxl-io-server/-/blob/master/tools/voxl-send-neopixel-cmd.c . I was planning on adding some functionality to extend the use cases. If you let me know what commands you might need, i can add those.

Currently, to turn off the LED, you should be able to do it by setting the brightness value to 0 (-b argument).

For using external FC, can you please clarify the connections between VOXL2, Modalai ESC and external FC? is external FC connected to ESC directly?

Alex

## Reply by Jetson Nano · 2025-02-06 04:22:30 UTC (in reply to Alex Kushleyev)

@Alex-Kushleyev thank you for reverting . 
I will try out the approach you mentioned. 

The ```VOXL2``` board is connected to ```Flight Core V2 (FC) ``` and the ```FC ```connected to ```modalai FPV ESC  ```.

## Reply by Eric Katzfey (ModalAI staff) · 2025-02-06 17:50:24 UTC

@Jetson-Nano Can you try with the `-o` option when calling `voxl-send-neopixel-cmd`? Otherwise, it just sits in a loop sending out commands.

## Reply by Jetson Nano · 2025-02-07 10:41:19 UTC (in reply to Eric Katzfey)

@Eric-Katzfey thank you for reverting.
I was able to run the code in loop and it is working good. now i want to automate this client file. start the file when the system is booted.

I have provided the External FC details in the above posts. @Alex-Kushleyev , can you verify the approach and help me out with the implementation.

## Reply by Jetson Nano · 2025-02-10 14:13:24 UTC (in reply to Jetson Nano)

@Alex-Kushleyev @Eric-Katzfey can you check it out and help with the code.

I am also interested what kind of signal is send to the neopixel LEDs to turn it ON.
And with addition to that what is the command to turn ON only blue lights.
