A questionable combination of JavaScript (in syntax), FORTH (in spirit) and MicroPython (in terms of scope and being a wild mix of weird and kinda cool).
$deity
, why?esp32-idf
image size and thus turnaround time can be a bit of an obstacle.Care has been taken to keep runtime platform, language and language dialect generic. This means:
- runtime: you can run trenchcoat
on a PC, a microcontroller, or in the browser.
- language dialect: Pixelblaze-specific JavaScript extensions are factored out and don't pollute the standard JS namespace
- language: the virtual machine actually executing code is a language-agnostic stack machine, there just happened to be a JavaScript parser lying around. If you want to add, say, Python syntax support, you totally can! I won't! (Pull requests are welcome, though)
for
loops? Maybe in the next release…Right now the main focus lies on getting pixelblaze support to mature, so that's also what these instructions will focus on.
The general approach is:
.tcb
for "TrenChcoat Bytecode" is a suggested file extension) using the console-compiler
and "somehow" have your firmware access it. include_bytes!
is the most straightforward way, but in the near future hot code reload over UART or HTTP will be added.Executor
, start()
it once and call do_frame()
as many times as you wish to produce LED colors. On no_std
"current time" needs to be advanced manually from some timer source (the example app reuses the frame task's scheduling interval). Executor::exit()
is optional.probe-run
setup.f4-peri
crate; you can also use SPI1+PB5 by using the spi
feature instead of the default spi_alt
. f4-peri
also supports the SK9822/APA102 protocol if you prefer a more stable LED.```shell cd console-compiler
cargo run -- -f pixelblaze -i ../res/rainbow\ melt.js -o "../res/rainbow melt.tcb" cd ../stm32f4-app
cargo rrb app ```
(a cool bear spawns from an adjacent universe)
cool bear: Browser? As in ... you're running a rudimentary JavaScript virtual machine ... in the browser ...
author, in straightjacket: you got that exactly right. With no performance-boosting offload support whatsoever!
On the bright side, we don't need a separate compilation step as part of our build. Because the compiler also runs in the browser, muahahaha
See main.rs
for more details. Currently the web app is animating rather weirdly because the runtime state management is messed up.
shell
cargo install --git https://github.com/DioxusLabs/cli # their stable version seems broken atm
cd web-app
dioxus serve
$browser http://localhost:8080/
log
/defmt
) logging macros courtesy of dirbaio and whitequark