juno-site 0.1.0-SNAPSHOT API
Packages
Package
Description
Juno's top-level compiler entry points: the CLI, the embeddable compiler API, and the small
value types that connect them.
Control-flow structure and conservative resource/runtime-risk analysis over decoded bytecode.
Compile-time-only annotations an entry-point class uses to configure Juno's compilation, read
directly from the class file rather than at runtime.
The Java-facing hardware API that Juno's compiler recognizes as intrinsics.
USB HID mouse control:
Mouse, backed by the Arduino
Mouse library.Motion sensing:
NineAxisMotionShield, the orientation sensor of the Arduino
9 Axis Motion Shield, over I2c.General-purpose digital/analog I/O:
Gpio, the raw
pin-number operations (pinMode/digitalWrite/digitalRead/
analogRead/analogWrite/toggle), and DigitalOutput, a zero-cost handle bound to one output pin
(high/low/toggle/isHigh) for callers that prefer an
object-shaped API over passing a pin number to every call.I2C register access:
I2c reads and writes the registers
of a peripheral on the board's primary I2C bus.Infrared serial transport:
Infrared bit-bangs framed
bytes over a 38 kHz IR receiver module and an IR LED on plain pins.Drivers for character LCD shields, currently
LcdKeypadShield: a 16x2 HD44780-compatible display in
4-bit mode plus 5 buttons read from a single resistor-ladder analog pin, wired for the shield's
standard pinout.LEGO Powered Up hubs over Bluetooth LE:
PoweredUpHubRemote,
backed by the Arduino ArduinoBLE library, and the LEGO Mindstorms RCX infrared remote
protocol: RcxRemote and, for its sensors,
RcxBrick, and Scout brick commands in
ScoutRemote, plus the Power Functions IR receiver in
PowerFunctionsRemote; the three infrared classes are built on
Infrared.Motor handles:
Servo drives a standard 3-wire hobby servo through the
Arduino Servo library.Basic SMTP send / POP3S read built on
Wifi's
connection: Smtp to send a plain-text message to
one recipient, and Pop3Client to report the
mailbox message count and read the newest message's From/Subject and a bounded
plain-text body into caller-owned buffers.HTTP(S) client and server support built on
Wifi's
connection: HttpClient/HttpsClient to send requests into a caller-owned
byte[] response buffer, Json to read typed
values directly out of a response buffer without building a parsed document, and HttpServer (plain HTTP only) to serve requests, with
HttpMethod/HttpStatus as named constants for both directions.Drivers for TFT display shields, currently
TftTouchShield: the ELEGOO 2.8" 240x320 ILI9341 display
on an 8-bit parallel bus, with a resistive touch panel and a microSD socket (read through
SdCard).Code generation: turns optimized Juno IR into a complete Arduino sketch for any supported board
(the Cortex-M4 UNO R4 WiFi and the Cortex-M33 UNO Q).
Juno's model of a compilation target:
Board, resolved from
the entry-point class's @Board annotation (see
Board) via
Board.fromApiClassName(String), or
Board.DEFAULT when the entry point carries none.Decodes the intentionally small JVM bytecode subset Juno v0.1 supports.
Reads standard JVM class files and resolves their constant-pool references, independent of
Juno's own bytecode subset or IR.
The closed catalog of hardware operations Juno understands, independent of any particular
Java method signature or Arduino-side lowering.
Juno's own intermediate representation: a non-SSA, block-structured form that
lowering produces from JVM bytecode, optimize transforms, and backend
consumes to generate assembly.Closed-world reachability: starting at
main, follows every statically resolvable call,
resolves hardware intrinsics and record accessors, and rejects anything reachable that falls
outside Juno's supported subset — before any code generation is attempted.Lowers linked, reachable JVM bytecode into Juno's IR.
IR-to-IR optimization passes run between lowering and the backend.