Repository navigation
Windows embedded target: kiosk builds, Shell Launcher deploy, hardware APIs - #6208
Conversation
windows.embedded=true builds the native Windows exe as a kiosk for Windows 10/11 IoT Enterprise: a borderless topmost window on a chosen monitor, rotation/DPI/cursor defaults from board profiles (generic-x64, generic-x64-mouse, generic-arm64, imx8, qualcomm-iot) overridable through CN1_* variables, system shortcuts blocked by a low-level keyboard hook, the shared on-screen keyboard (EmbeddedTextEditor, moved to core from the Linux port) and stdout/stderr redirected to CN1_LOG_FILE. cn1:deploy-device recognises a PE and installs it over OpenSSH with a PowerShell script: Shell Launcher v2 as the shell (Explorer kept for Administrators), or a logon task, optional Keyboard Filter, machine environment variables. device-logs tails the log file. com.codename1.hardware on Windows: serial (COM ports), GPIO/I2C/SPI/PWM through Windows.Devices, backlight through DDC/CI with a WMI fallback. UWP builds stub the natives. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… it in CI The xwin cross-compile test now also builds the windows.embedded variant for x64 and arm64 (the arm64 sysroot is splatted in CI), which caught a 10-bit I2C mode Windows.Devices.I2c does not have: such an address now answers ENOTSUP. A new kiosk-run job launches the x64 kiosk exe on windows-latest and checks the window is a frameless topmost popup covering the primary monitor, survives Alt+F4 and Alt+Tab, and writes CN1_LOG_FILE. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
WinRT awaits keep their completion event in the handler object and cancel on timeout (ETIMEDOUT) instead of reading a dead stack event; enumeration parks the thread for GC; GPIO edge waiters detect a reused slot by generation, are woken on close and stop on WAIT_FAILED. The kiosk exe directory is admin-only (Users read/execute, no inheritance) so no user can swap the shell or plant a DLL beside it; the log moves to logs\. The CI kiosk job proves the window is foreground before sending Alt+F4 and closes it with WM_CLOSE as a control. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GPIO edge callbacks check the slot generation so a late edge of a closed pin never reaches the pin that reopened the slot; the kiosk log is unbuffered (the MS CRT treats _IOLBF as full buffering); CN1_* booleans accept true/false; icacls failures stop the install; docs list every key the Keyboard Filter blocks and say autostart covers administrators. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # docs/developer-guide/developer-guide.asciidoc
Cloudflare Preview
|
|
Developer Guide build artifacts are available for download from this workflow run:
Developer Guide quality checks: |
…or Vale Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…bedded editor dialog freopen_s opens without write sharing, so reopening stderr on the log path failed and setvbuf on the closed stream aborted with 0xC0000409. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
✅ Continuous Quality ReportTest & Coverage
Static Analysis
Generated automatically by the PR CI workflow. |
✅ ByteCodeTranslator Quality ReportTest & Coverage
Benchmark Results
Static Analysis
Generated automatically by the PR CI workflow. |
|
Compared 231 screenshots: 231 matched. |
|
Compared 210 screenshots: 210 matched. Benchmark ResultsDetailed Performance Metrics
ParparVM vs HotSpot (JDK 25): Windows x64Runner CPU: AMD64 Family 26 Model 2 Stepping 1, AuthenticAMD (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 210 screenshots: 210 matched. Benchmark ResultsDetailed Performance Metrics
|
|
Compared 195 screenshots: 195 matched. Native Android coverage
✅ Native Android screenshot tests passed. Native Android coverage
Benchmark ResultsDetailed Performance Metrics
|
|
Compared 210 screenshots: 210 matched. Benchmark ResultsDetailed Performance Metrics
ParparVM vs HotSpot (JDK 25): Windows arm64Runner CPU: ARMv8 (64-bit) Family 8 Model D49 Revision 0, MICROSOFT CORPORATION (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 210 screenshots: 210 matched. ParparVM vs HotSpot (JDK 25): Linux x64Runner CPU: AMD EPYC 9V74 80-Core Processor (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 210 screenshots: 210 matched. ParparVM vs HotSpot (JDK 25): Linux arm64Runner CPU: Neoverse-N2 (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 196 screenshots: 196 matched. Benchmark Results
Detailed Performance Metrics
ParparVM vs HotSpot (JDK 25): macOS arm64Runner CPU: Apple M1 (Virtual) (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 188 screenshots: 188 matched. |
Codename One apps can now run as the single, locked-down application on Windows 10/11 IoT Enterprise devices: panel PCs, point-of-sale terminals, self-service kiosks and arm64 IoT boards. It's the same JVM-free native
.exethe Windows port already builds, plus the kiosk layer around it and the hardware APIs embedded projects need.What you get
windows.embedded=true: the app takes a whole monitor with no frame and stays above everything else. The Windows key, Alt+Tab, Alt+Esc, Alt+F4 and Ctrl+Esc don't reach the system. Touch panels hide the cursor, and text entry uses Codename One's on-screen keyboard, shared with embedded Linux.generic-x64,generic-x64-mouse,generic-arm64,imx8andqualcomm-iotset the CPU architecture, rotation, DPI and cursor. Hints override any of them, and so doCN1_*environment variables on the device, without a rebuild.cn1:deploy-device(orgradle cn1DeployDevice) installs over the OpenSSH server that ships with Windows and makes the app the device's shell with Shell Launcher. Administrators keep Explorer for servicing. Options: one kiosk account, a Keyboard Filter that also blocks Ctrl+Alt+Del, or a plain logon autostart for development devices.cn1:device-logsfollows the app's log.com.codename1.hardwareworks on Windows for serial ports, GPIO, I2C, SPI, PWM (throughWindows.Devices, on boards whose vendor ships the bus drivers) and the display backlight (DDC/CI or WMI).Verification
kiosk-runjob launches the kiosk exe onwindows-latest. It checks that the window is a frameless, topmost popup covering the primary monitor and is in the foreground. It then sends Alt+F4 and Alt+Tab and checks the app survives with focus intact. Finally it closes the window withWM_CLOSEas a control.🤖 Generated with Claude Code