Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
cf2f499
Structure GUI composition and make buttons look more modern
13Bytes Aug 15, 2025
4d4cd47
make formatting consistent
13Bytes Aug 15, 2025
f21b971
Add datettime of recording-start into log
13Bytes Aug 15, 2025
549af30
Add mocked dongle to ease GUI dev
13Bytes Aug 15, 2025
6eaa396
Refactor US acquisition setup and add functionality to live-patch con…
13Bytes Aug 15, 2025
d255b36
add first steps to move towards a http-api
13Bytes Aug 20, 2025
92b6466
refactor
13Bytes Aug 21, 2025
a437813
send data during measurement
13Bytes Aug 21, 2025
f937c8a
working ws json-message of live measurements
13Bytes Aug 21, 2025
320f2b8
Fix min/max values of config-requirements (the conversion into ticks …
13Bytes Aug 22, 2025
1fff0e1
Add first POC of Web-UI
13Bytes Aug 22, 2025
7f06902
Implement disconnect functionality and update API methods for Bluetoo…
13Bytes Aug 22, 2025
e51805c
Fix bug in bluetooth-connection (string wrong interpreted)
13Bytes Aug 25, 2025
7e226f0
Add recording-functionality
13Bytes Aug 25, 2025
4eaef52
Refactor code into more files & clean up
13Bytes Aug 26, 2025
133dcd0
Add logging and configuration management features, including API endp…
13Bytes Aug 26, 2025
c588bd1
make graph filter user-defined
13Bytes Aug 26, 2025
3031431
Add mock and replay functionality
13Bytes Aug 27, 2025
3ccb1ba
persist config over reloads (use localStorage)
13Bytes Aug 27, 2025
a59aa57
Fix bug where simulation wasn't using the mocked BT-data ("live"-mode)
13Bytes Aug 27, 2025
0ffd88f
Make frontend servable directly from FastAPI
13Bytes Aug 28, 2025
87d4766
Change data-structure of latest_frame to a more detailed (and typed) …
13Bytes Aug 28, 2025
d63e4a1
Fix bug in download-path
13Bytes Aug 28, 2025
be5dc7b
Add a build-script that works on os-independent
13Bytes Aug 28, 2025
a127b52
- Restructure project to nicely integrate new GUI
13Bytes Aug 28, 2025
0f841d4
Merge pull request #1 (New wulpus-gui)
13Bytes Aug 28, 2025
d88754f
fix location of requirement.txt (if you want to use pip instead of an…
13Bytes Aug 28, 2025
11e6594
Add CICD-pipeline with auto-building of AIO exe (#2)
13Bytes Aug 29, 2025
dfe6d02
Add fixed y-range for graph
13Bytes Sep 3, 2025
e8bc502
Add "restore defaults" button
13Bytes Sep 4, 2025
40a794f
Fix bug in case no tx or rx channels are used
13Bytes Sep 4, 2025
81727d6
Change the log format of wulpus and extend it with more information.
13Bytes Sep 4, 2025
ca10635
Fix a bug where the result of _save_measurement() was truncated so th…
13Bytes Sep 5, 2025
530ba15
Add extend visualization of logs in jupyter notebook
13Bytes Sep 5, 2025
d8ac7a4
Add support for onboard bluetooth-adapter besides dongle
13Bytes Sep 9, 2025
0bac216
Make UI more responsive by checkin more often for status-updates (but…
13Bytes Sep 10, 2025
1cecca6
Initially power down HV PCB to save energy
13Bytes Sep 18, 2025
97e8651
Add a SeriesPanel for repeated measurements.
13Bytes Sep 18, 2025
b85e414
extend script to visualize logs (and concatenate multiple logs)
13Bytes Sep 18, 2025
4cf620e
Add POC for live data analysis
13Bytes Sep 19, 2025
53c5e01
Revert bug in firmware (checking runtime for new config doesn't seem …
13Bytes Sep 25, 2025
24a3de7
Add UI-Panel for user-configurable peak-detection
13Bytes Sep 25, 2025
fa3c5b1
allow to ignore first n datapoints in every measurement of every series
13Bytes Sep 29, 2025
7ab6657
Add capabilities to support multiple wulpus at the same time (for the…
13Bytes Oct 10, 2025
2c6134c
Make multi-wulpus more robust by fixing a few bugs
13Bytes Oct 10, 2025
e985988
disable new connections during running job
13Bytes Oct 10, 2025
497af3e
Add version-info into application (#3)
13Bytes Oct 17, 2025
b80cc32
Merge branch 'main' of https://github.com/13Bytes/wulpus
13Bytes Oct 17, 2025
ae9e836
Add automatic releases for main commits (#4)
13Bytes Oct 20, 2025
c8638f9
correclty represent status if wulpus disconnects (for direct connecti…
13Bytes Oct 24, 2025
f0cd0e5
Add details about the log-files to readme.
13Bytes Oct 24, 2025
dd82437
Merge pull request #5 from 13Bytes/multi-wulpus
13Bytes Oct 24, 2025
351515c
Extend printing for debugging
13Bytes Nov 12, 2025
e09ae6b
Fix error: scanning wasn't possible on devices without bluetooth chipset
13Bytes Nov 18, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions .github/workflows/release-gui.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: GUI Release
on:
push:
pull_request:
branches:
- main
jobs:
Build-Action:
runs-on: windows-latest
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v4
- uses: actions/setup-python@v5
with:
python-version: "3.9"
- name: Install npm dependencies
run: npm ci
working-directory: ./sw/wulpus-frontend
- name: Build UI (react)
run: python build.py
working-directory: ./sw/wulpus-frontend
- name: Install python dependencies
working-directory: ./sw/wulpus
run: pip install -r requirements.txt
- name: Build .exe
working-directory: ./sw/wulpus
run: pyinstaller ./main.spec --noconfirm
- name: Bump version and push tag
id: tag_version
uses: mathieudutour/github-tag-action@v6.2
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
dry_run: ${{ github.event_name == 'pull_request' || github.ref != 'refs/heads/main'}}
- name: Write version info to artifact
working-directory: ./sw/wulpus
shell: pwsh
run: |
$commitHash = (git rev-parse HEAD).Trim()
$commitDateFull = (git show -s --format=%cd --date=iso-strict HEAD).Trim()
$commitDate = $commitDateFull.Split('T')[0]
$text = "$commitHash from $commitDate (${{ steps.tag_version.outputs.new_tag }})"
$target = "./dist/main/_internal/wulpus/version.txt"
New-Item -ItemType Directory -Force -Path (Split-Path -Parent $target) | Out-Null
Set-Content -Path $target -Value $text -Encoding UTF8
- uses: actions/upload-artifact@v4
id: artifact-upload-step
with:
name: wulpus-all-in-one
path: ./sw/wulpus/dist/main/
compression-level: 8
- name: Create release
uses: softprops/action-gh-release@v2
if: ${{ github.event_name != 'pull_request' && github.ref == 'refs/heads/main'}}
with:
tag_name: ${{ steps.tag_version.outputs.new_tag }}
name: UI-Release ${{ steps.tag_version.outputs.new_tag }}
body: Automated release of Wulpus GUI version ${{ steps.tag_version.outputs.new_tag }}. The release can be downloaded here [${{ steps.artifact-upload-step.outputs.artifact-url }}](${{ steps.artifact-upload-step.outputs.artifact-url }}) (github-login required)
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,6 @@
__pycache__/
.ipynb_checkpoints/
.vscode
*.clangd
sw/.venv
local-development/
28 changes: 28 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# WULPUS Agent Guidelines

## Commands

- **Start backend**: `sw/.venv/Scripts/Activate.ps1` then `python -m wulpus.main` (hosts backend at http://127.0.0.1:8000/)
- **Frontend dev**: `npm run dev` in `sw/wulpus-frontend/` (dev server at http://localhost:5173/)
- **Frontend build**: `npm run build` in `sw/wulpus-frontend/`
- **Frontend lint**: `npm run lint` in `sw/wulpus-frontend/`

## Architecture

- **Firmware**: `fw/msp430/` (ultrasound MCU), `fw/nrf52/` (BLE MCU + USB dongle)
- **Software**: `sw/wulpus/` (FastAPI backend), `sw/wulpus-frontend/` (React frontend)
- **Communication**: WebSocket for real-time data, REST API for control

## Code Style

- **Python**: Type hints, snake_case, async/await for I/O
- **TypeScript/React**: camelCase, functional components, strict typing
- **Imports**: Standard library first, third-party, then local imports
- **File structure**: Clear separation of concerns, API models in separate files
- **Error handling**: Use proper exception types, HTTP status codes for API errors
- **Data processing**: NumPy for measurements, Pandas for structured data analysis

### General
Write code where the naming of variables and functions is self explanatory.
Comments should be used sparingly.
Make sure to not catch error-cases that logically can't occur.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ Thanks to all the people who contributed to the WULPUS platform:
- [Cédric Hirschi](https://www.linkedin.com/in/c%C3%A9dric-cyril-hirschi-09624021b/) (GUI improvements, Documentation)
- [Josquin Tille](https://www.linkedin.com/in/josquin-tille-829a341a7/) (Silicone package design, Documentation)
- [William Bruderer](https://www.linkedin.com/in/william-bruderer-59ba9b26b/) (Documentation)

- [Louis Dod](https://github.com/13Bytes) (GUI Rework)

# License
The following files are released under Apache License 2.0 (`Apache-2.0`) (see `sw/LICENSE`):
Expand Down
11 changes: 11 additions & 0 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,17 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [1.3.0] - 2025-08-28

### Added
- New GUI with replay-functionality and extended logging, which is running in the browser
- This required a new API, which structures the way of communicating with the wulpus-server

(More details can be found in the [sw-changelog](../sw/CHANGELOG.md))


## [1.2.0] - 2025-01-27

### Added
Expand Down
Binary file added docs/images/v1_2/Gui-Screenshot-2025-08-28.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading