Skip to content

Software Integration Overview

Author: Tavina Chen | Last Major Update: Tavina on 8/27/2026 | Contact: taffykat (Discord)

Documentation for the GCS Software Integration (SI) team.

Manage data flow between Vehicles and the GCS Desktop Application.

InfraSI
Interact directly with the hardware (Xbees).Interact indirectly with the XBees through Infra.
GCS internal & external (vehicles).SI is GCS internal.
Encode and decode bytes in the packets sent between Xbees.Manage GCS internal data pipelines and logic pertaining them.

SI uses the Python and Rust programming languages with RabbitMQ for IPC. See What is RabbitMQ?.

High Level SI Architecture

This diagram showcases SI’s role in how the data generally flows from vehicle to the GCS and GCS to the vehicle to achieve communication.

Each vehicle has an Xbee. The GCS has one Xbee. The Xbees communicate through radio waves, using unique MAC addresses to target which Xbee to transmit to.

1. GCS Xbee recieves packets

  • These packets are made of bytes that need to be decoded using Infrastructure’s libraries
  • See this test script Testing/GCSTest.py for how it is used on the GCS side
  • Read gcs-infrastructure for more in depth explanations on the functions

2. SI publishes packet data to RabbitMQ queue

3. GCS App State Manager consumes packet data from RabbitMQ queue

3. UI & Database

  • The GCS App State Manager will update the UI and database accordingly

1. UI

  • The user presses an UI element which updates the GCS App State Manager

2. GCS App State Manager publishes data to RabbitMQ queue

3. SI consumes the data from RabbitMQ queue

4. GCS Xbee sends data

  • The data needs to be encoded using Infra’s Library as seen above in Vehicle to GCS - GCS Xbee recieves packets
  • Write unit tests for every function/file in their own test files
  • Clean up and encapsulate more parts of the code for readability & clarity
    • Discuss how/where to process telemetry (using Python or Rust?)
    • Discuss if SI should be a submodule, standalone repo, and/or directly in the GCS App repo