Hi, my name is Andrew. I write software for fun and for work, and some of it is open source.

Projects

Flash Management

Flash management stack consisting of a flash translation layer (dhara) and an SPI NAND driver. Uses an STM32L432KCUX MCU connected to a Micron MT29F1G01ABAFDWB SPI NAND SLC flash chip.

This project is intended to be the “minimum implementation” needed to tie a FAT filesystem, flash translation layer, and low-level flash driver together. Most areas of the source code are heavily commented (probably over commented) in an effort to make it easy as possible for people unfamiliar with ONFI & flash translation concepts to follow.

Quad Rotor

A basic quad rotor flight controller written in Rust with the Embassy framework.

The flight controller estimates orientation using the Madgwick AHRS sensor filter/fusion algorithm and controls roll/pitch/yaw using basic PID control loops. Connects to a host PC via BLE to receive control inputs (via a gamepad) and report telemetry. The control interface on the host PC is a Python GUI which allows live updates to PID parameters and plots telemetry data in real time.

Halfling

Build and task automation system written in python; intended to be simple to understand and easy to extend with a halfling.py file in your project root. Currently supports C and C++ builds out of the box (with incremental builds based on file modified times); supports custom/user-defined builds and generic tasks.

C Data Structures

Implementations of common data structures in C (dynamic array, linked list, queue, hash table). I wrote this for fun, learning, and to try out a test framework I hadn’t used (Unity). These aren’t very useful, since they only work on integers.

AHRS Filter Fusion Viewer

Interactive python notebook for viewing fusion results on raw accelerometer, gyroscope, and magnetometer data. Useful for tweaking fusion parameters and viewing the results.