# Firmware code for the sangaboard *This firmware is Work in Progress and while it should now support all features of the original, many features are untested.* Firmware for the control board of OpenFlexure Microscope. This is a refactor of the [original arduino code](https://gitlab.com/bath_open_instrumentation_group/sangaboard/-/blob/master/arduino_code) with some improvements to the infrastructure and features. ## Notable changes This version of the firmware uses PlatformIO rather than Arduino IDE. The code is split into the main part which mostly handles command parsing and modules which execute actual commands, allowing the firmware to be easily extensible with new features (add a module based on one of the existing ones and add a line to setup to register its commands and loop function). Motor moves now do not block command processing and a new command `stop` was added which aborts any move in progress. The firware can be build against different platforms (pi pico, stm32). `boards.h` contains wiring configuration which will need to be adjusted when used with a custom board. ## Hardware Currently works on Arduino Nano + Sangaboard v0.2. Other platforms might work with appropriate `platform.ini` and `config.h` changes and will be supported in due course. ## TODO list ### Original firmware feature parity - [x] Implement Endstops module - [x] Implement Light sensor modules - [x] Handle Sangaboardv3 ### Testing - [ ] Ensure responses to commands match the original version - [ ] Test endstop modules - [ ] Test Light sensor module - [ ] Test on different platforms ### Improvements and fixes - [ ] Add a CI script - [x] Add test for argument parsing - [ ] Add more unit tests - [ ] Test automatic building and upload - [x] Support other platforms - [ ] Clean up - [ ] Improve handling of unused modules/libraries - [ ] Lower RAM use