Tags: lumbermill/prremote
Tags
chore(release): v0.3.0 Highlights since v0.2.1 (breaking): - WiFi API renamed from CYW43 to chip-neutral WiFi (no compat alias) - esp32c6: UDPSocket/TCPSocket, hands-free usb-reset flash, PWM clock fix - esp32/esp32c6: LCD draw_line/circle/ellipse; SPI<->LCD bus handoff fix - esp32c6: default I2C pins to XIAO D4/D5 (GPIO22/23); pin_check.rb self-test - docs: SUPPORT.md matrix + rake smoke (NTP hang fixed) Also restore placeholder Wi-Fi credentials (MySSID/MyPassword) in examples/xiao_c6/wifi.rb and socket_udp.rb, which had a real test-AP SSID/password committed by mistake in 7952a05. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
fix(runtime): vendor TCP/UDP socket VM bindings to fix mruby/c refcou… …nt bugs picoruby-socket's src/mrubyc VM bindings leak references: - udp_socket.c over-increfs every element of recvfrom_nonblock's return structure (mrbc_array_set takes ownership without increffing), leaking the whole result on every receive — OOM after ~200 round-trips. - Both udp_socket.c and tcp_socket.c call mrbc_incref(&v[0]) right before SET_*_RETURN(), which already releases the receiver's register reference exactly once. Each call adds +1 to the socket's 16-bit ref_count until it saturates — "assert failed: mrbc_decref value.h:566" after ~65k calls. The submodule stays unmodified: both bindings are now vendored copies (runtime/src/udp_socket_binding.c / tcp_socket_binding.c) kept diffable against upstream, with only the refcount fixes applied. The lwIP port sources still come from the submodule unchanged. Wired into the esp32c6 build (both) and the picow build (TCP, incl. the picoruby_compat.h per-file include property). Verified on a physical XIAO ESP32C6 against echo servers: UDP completed 617,850 round-trips with stable memory; TCP completed 70,000 send + read_nonblock round-trips on one socket with no assert and zero misses. picow verified by a clean build. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Release 0.2.1: ESP32-C6 LCD + recv self-recovery ESP32-C6 (XIAO): - LCD support: compile the shared ILI9342C/ILI9341 driver into the C6 build (LCD_HOST -> SPI2_HOST, LEDC channel 5, esp_lcd linked). - LCD.new(madctl:) overrides the per-rotation MADCTL byte. Verified on a MSP2807 ILI9341: madctl: 0xE8 gives upright 320x240 landscape (0x28 = 180°). examples/xiao_c6/lcd_hello.rb uses 0xE8. - LCD.new(invert:) selects INVON/INVOFF for ILI9342C vs ILI9341 panels. Fix: intermittent hard wedge on ESP32-C6 - Under sustained back-to-back receives the USB Serial/JTAG occasionally drops a byte; recv_exact then blocked in getchar() forever (0x03 could not break it out), wedging the device until a physical reset. - recv path now reads with a 2 s per-byte timeout (new prr_getchar_timeout on all platforms); a dropped byte aborts with "ERROR recv" and returns to READY, so the next run recovers without a reset. - C6 USB Serial/JTAG RX ring enlarged 256 B -> 4096 B to prevent the drop. - Verified on hardware: deterministic truncated-payload test recovers in ~2 s; 200 tight 4.3 KB cycles with zero drops (previously wedged within 1-94). Release: VERSION 0.2.1, CHANGELOG, README, Gemfile.lock. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Release 0.2.1: ESP32-C6 LCD + recv self-recovery ESP32-C6 (XIAO): - LCD support: compile the shared ILI9342C/ILI9341 driver into the C6 build (LCD_HOST -> SPI2_HOST, LEDC channel 5, esp_lcd linked). - LCD.new(madctl:) overrides the per-rotation MADCTL byte. Verified on a MSP2807 ILI9341: madctl: 0xE8 gives upright 320x240 landscape (0x28 = 180°). examples/xiao_c6/lcd_hello.rb uses 0xE8. - LCD.new(invert:) selects INVON/INVOFF for ILI9342C vs ILI9341 panels. Fix: intermittent hard wedge on ESP32-C6 - Under sustained back-to-back receives the USB Serial/JTAG occasionally drops a byte; recv_exact then blocked in getchar() forever (0x03 could not break it out), wedging the device until a physical reset. - recv path now reads with a 2 s per-byte timeout (new prr_getchar_timeout on all platforms); a dropped byte aborts with "ERROR recv" and returns to READY, so the next run recovers without a reset. - C6 USB Serial/JTAG RX ring enlarged 256 B -> 4096 B to prevent the drop. - Verified on hardware: deterministic truncated-payload test recovers in ~2 s; 200 tight 4.3 KB cycles with zero drops (previously wedged within 1-94). Release: VERSION 0.2.1, CHANGELOG, README, Gemfile.lock. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
release: v0.2.0 — ESP32 support; samples reorganized into pico/ and e… …sp32/ ESP32 (WiFi / NTP / LCD) support is the headline feature, so bump the minor version instead of 0.1.8. Pico / Pico W samples move from test/samples/ into test/samples/pico/, mirroring test/samples/esp32/. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Release v0.1.6: restructure CYW43 WiFi API into CYW43::WiFi namespace - Move WiFi methods into CYW43::WiFi sub-module (connect, disconnect, link_status, ipv4_address/netmask/gateway) to prepare for future CYW43::BT (Bluetooth) support - Rename connect_timeout → CYW43::WiFi.connect; enable_sta_mode is now called internally so callers no longer need to invoke it explicitly - Add CYW43::WiFi::ConnectError for authentication failures, distinct from CYW43::WiFi::ConnectTimeout for timeouts - Add CYW43::WiFi::LINK_* constants (from cyw43_ll.h) - Fix misleading comment: ConnectTimeout was not taken from picoruby-cyw43 - Update test/samples/wifi.rb to use new API Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fix RuboCop offense and update test for \x03 sent on port open Disable Style/RescueModifier for the intentional rescue nil pattern. Update LsCommandTest to expect \x03 prepended to QURY in written bytes. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
PreviousNext