- README.md (was a one-liner): describe the layout, the macOS quick path including the esbuild platform-pin gotcha, and how to flash with curl or 'make update'. - docs/AUX_W_AXIS.md: document the new Control jog row layout, the Settings 'W Axis (auxcnc)' section, and list the additional UI files touched by this fork.
123 lines
3.7 KiB
Markdown
123 lines
3.7 KiB
Markdown
# OneFinity CNC Controller Firmware (W-axis fork)
|
|
|
|
This is the OneFinity / Buildbotics bbctrl firmware with a virtual W
|
|
axis driven by an auxcnc ESP32 over USB serial. See
|
|
[docs/AUX_W_AXIS.md](docs/AUX_W_AXIS.md) for the design and config.
|
|
|
|
## Layout
|
|
|
|
```
|
|
src/avr/ AVR firmware (motion controller, AtxMega)
|
|
src/boot/ AVR bootloader
|
|
src/bbserial/ Linux kernel module for the bbserial driver
|
|
src/py/bbctrl/ Python control daemon (Tornado + websockets)
|
|
src/js/ Vue.js UI (legacy)
|
|
src/svelte-components/ Newer Svelte UI for dialogs and settings
|
|
src/pug/ Pug templates compiled into build/http/index.html
|
|
src/resources/ Static assets and config templates
|
|
scripts/ Install / update / RPi build helpers
|
|
docs/ Architecture, dev setup, W-axis docs
|
|
```
|
|
|
|
## Build & flash (quick path, macOS or Linux)
|
|
|
|
The full build (`make`) requires `avr-gcc`, but the controller and UI
|
|
only depend on the Python + web parts. If you're shipping a UI/Python
|
|
change you don't need the AVR toolchain.
|
|
|
|
### Prerequisites
|
|
|
|
- Node.js (any recent LTS) with npm
|
|
- Python 3 with setuptools
|
|
- `npm install` once at the project root (this is wired into the
|
|
`node_modules` Make target, but on a fresh checkout it's clearer to
|
|
do it explicitly)
|
|
|
|
```bash
|
|
npm install
|
|
(cd src/svelte-components && npm install)
|
|
```
|
|
|
|
#### macOS gotcha: esbuild platform pin
|
|
|
|
The Pi build leaves `node_modules/esbuild` pinned to
|
|
`linux-arm64`, which won't run on Darwin. If `npm run build` inside
|
|
`src/svelte-components` complains about esbuild, reinstall it for the
|
|
host:
|
|
|
|
```bash
|
|
cd src/svelte-components
|
|
rm -rf node_modules/esbuild
|
|
npm install esbuild@0.14.49 --no-save
|
|
```
|
|
|
|
(Use the version that matches `package-lock.json`.)
|
|
|
|
### Build the web UI + Python sdist
|
|
|
|
```bash
|
|
# Build the Svelte components
|
|
(cd src/svelte-components && npm run build)
|
|
|
|
# Render pug templates and copy assets into build/http
|
|
make all # AVR step will fail without avr-gcc; safe to ignore
|
|
# if you didn't change anything under src/avr or src/boot
|
|
|
|
# Package
|
|
./setup.py sdist
|
|
ls dist/bbctrl-*.tar.bz2
|
|
```
|
|
|
|
`make pkg` is the canonical target but it tries to build AVR first. On
|
|
hosts without avr-gcc, run the steps above directly.
|
|
|
|
If `bbctrl-*.tar.bz2` is missing `src/bbserial/bbserial.ko`, copy the
|
|
prebuilt `.ko` from a previous official release into `src/bbserial/`
|
|
before running `setup.py sdist` (the install script on the controller
|
|
just installs the existing module if a newer one isn't shipped).
|
|
|
|
### Flash to a controller
|
|
|
|
```bash
|
|
curl -X PUT -H "Content-Type: multipart/form-data" \
|
|
-F "firmware=@dist/bbctrl-1.6.7.tar.bz2" \
|
|
-F "password=onefinity" \
|
|
http://onefinity.local/api/firmware/update
|
|
```
|
|
|
|
…or use the Make target:
|
|
|
|
```bash
|
|
make update HOST=onefinity.local PASSWORD=onefinity
|
|
```
|
|
|
|
The controller stops bbctrl, untars the package, runs
|
|
`scripts/install.sh`, and brings the service back up. Total downtime
|
|
is ~30-45s. Watch progress at `http://<host>/` (you'll get 404s while
|
|
bbctrl restarts, then the new UI).
|
|
|
|
### Verify the flash
|
|
|
|
```bash
|
|
curl -s http://onefinity.local/ | grep -c "OneFinity"
|
|
curl -s http://onefinity.local/api/aux/status # if W axis is enabled
|
|
```
|
|
|
|
## Build & flash (full path, Debian/Linux)
|
|
|
|
For AVR + GPlan rebuilds, see [docs/development.md](docs/development.md).
|
|
That path uses qemu + chroot to cross-compile gplan for ARM and needs
|
|
the `gcc-avr` / `avr-libc` toolchain.
|
|
|
|
## W axis (auxcnc)
|
|
|
|
This fork adds a virtual W axis. See
|
|
[docs/AUX_W_AXIS.md](docs/AUX_W_AXIS.md) for:
|
|
|
|
- G-code surface (`G28 W0`, `G1 W25`, etc.)
|
|
- The G-code preprocessor and hook architecture
|
|
- aux.json keys
|
|
- REST API (`/api/aux/*`)
|
|
- UI surface (jog row in Control, settings panel in Settings)
|
|
- Edge cases (ESP reboot mid-job, limit closed at home start, …)
|