WISP-ORCA
Project Type Freelance
Project Duration 1 year
Languages Used C++, C#, C

Not much related to games, but very much as technical, I developed a full-stack solution for a client on a freelance basis for their project: WISP-ORCA.

The device is a portable spectrometer, which measures a light spectrum from different angles, then performs processing on a server, and the result represents the reflectance of water.

Here is an overview of my contributions:

Hardware Design

I designed multiple PCBs for ORCA, including the main board of ORCA which consists of several microcontrollers and sensors. Features include:

  • 6-layer impedance controlled stackup
  • Nordic nRF52840 Bluetooth 5.3 SoC
  • STM32F7 microcontroller, capable of USB 2.0 communication
  • An Xsens MTi-3 AHRS sensor
  • GPS module
  • MicroSD card
  • 32 MBit SRAM
  • Efficient power distribution, buck converter and multiple power switches
  • On-board driver for a multi-channel fiber switch
  • High-Speed USB port
  • Expansion module

orca_pcb3.jpg#asset:584

I've also designed a development board for the device, which can be used to program and debug it.

Firmware

I developed two firmwares, one for the nRF52840 chip, and one for the STM32F7.
These were developed mainly in C++, with some low-level drivers in C.
Some highlights include:

  • FreeRTOS (nRF52840) & ThreadX (STM32F7)
  • Custom USB 2.0 driver
  • Custom Remote Procedure Call (RPC) system developed for communication between chips and host interfaces
  • Implementation of Bluetooth Low Energy (BLE) using the nRF52 SDK
  • Custom L2CAP protocol for transferring larger data packets
  • Custom bitpacked delta encoding algorithm for measurement data without needing work ram which reduces data sizes by 60% 

Backend

The backend was developed in ASP.NET. I use PostgreSQL with a self-hosted TimescaleDB for efficient measurement storage.
I've also integrated various analytical modules such as Grafana and Loki. There is an elaborate configuration solution using JSON-Schema that I use to verify configuration files and also auto-generate forms on the frontend dashboard.

Frontend

The frontend dashboard was developed using React and NextJS, and uses Ant Design for its UI framework.

CAD design

I designed the inner routing and mechanics of our custom fiber-switch solution as well as multiple edits and additions to the design of the instrument's enclosure and other components. I also provide 3D printing and manufacturing of the instrument.

App

The app is what is used to communicate with the device. I started with C# and Xamarin, and over time migrated to .NET MAUI, which is the new cross-platform C# app framework, which unfortunately still uses XAML.

orca_app2.jpg#asset:587

Tools

I've developed multiple tools to aid with testing and calibration in C++ using my own framework, Warlock Engine. The engine has a connection to the device over UART through the ST-Link V3's virtual com port, which is embedded on the device's development board.

ImageGlass_Lb7UEtd4Ng.png#asset:585