ESA OPS-SAT Rust experiment ======== This is the primary repository for the ESA OPS-SAT experiment. The primary repository to generate packages for ESOC can be found [here](https://egit.irs.uni-stuttgart.de/rust/ops-sat-experiment). You can also find some more general documentation about OPS-SAT there. ## Pre-Requisites - Containerization provider like [docker](https://www.docker.com/) or [podman](https://podman.io/) installed - [`cross`](https://github.com/cross-rs/cross) package installed ## Build for Target Hardware You might need to set the [`CROSS_CONTAINER_ENGINE`](https://github.com/cross-rs/cross/wiki/FAQ#explicitly-choose-the-container-engine) and [`CROSS_ROOTLESS_CONTAINER_ENGINE`](https://github.com/cross-rs/cross/blob/main/docs/environment_variables.md#configuring-cross-with-environment-variables) variables manually before calling cross. ### Debug Build ```sh cross build ``` ### Release Build ```sh cross build --release ``` ## Build for Host The software was designed to be runnable and testable on a host computer. You can use the regular cargo workflow for this. ### Running ```sh cargo run --features host ``` ### Testing ```sh cargo test ``` ## Commanding Infrastructure Commanding of the `ops-sat-rs` application is possible by different means. Networking and Commanding Structure ### Using the `pyclient` and `pyserver` applications You can find both commanding application inside the `pytmtc` folder. It is recommended to set up a virtual environment first, for example by running the following code inside the `pytmtc` folder: ```sh python3 -m venv venv source venv/bin/activate ``` After that, you can install all requirements for both the client and server application interactively using ```sh pip install -e . ``` If you want to command the satellite using the OPS-SAT infrastrucute, start the `pyserver.py` as a background application first, for example by simply running `pyserver.py` inside a new terminal window. After that, you can run `pyclient.py -p /test/ping -l` to send a ping telecommand and then go into listener mode using the following `tmtc_conf.json` file: ```json { "com_if": "tcp", "tcpip_tcp_ip_addr": "127.0.0.1", "tcpip_tcp_port": 4097 } ``` You can command the TCP server in the OPS-SAT software directly by running the commands with the following configuration: ```json { "com_if": "tcp", "tcpip_tcp_ip_addr": "127.0.0.1", "tcpip_tcp_port": 7031 } ``` You can run `pyclient.py -T` or `pyclient.py -h` for more information on the client application. ## Knowledge Base ### Home Path Handling The OPS-SAT software filesystem handling will determine a home path at the start of the software. This home path is used for various mechanisms inside the OPS-SAT infrastructure. Currently, there are 3 possible configurations: 1. If the software is built with the `host` feature, the HOME path will be the current path the software is run at. 2. If the `host` feature is not set and the `/home/exp278` folder exists, that folder will be the home directory. 3. Otherwise, the default OS home directory will be the home directory. ### Application Shutdown Handling The application can be stopped by creating a `stop-experiment` file either in the home path specified in the previous section, or inside the temporary folder. There is also an action command available to stop the application. ### Camera Handling TODO