From 148663d4fdff34807c2a1f293e35444b84d68d5c Mon Sep 17 00:00:00 2001 From: ede1998 Date: Sun, 30 Aug 2026 01:54:18 +0200 Subject: [PATCH] vibe-code wokwi display ch1115 integration --- .gitignore | 2 + build.rs | 23 +++++++++++ diagram.json | 40 ++++++++++++++++--- src/bin/main.rs | 14 ++++++- src/drivers/spi_bus.rs | 17 ++++---- wokwi.toml | 4 ++ wokwi/Makefile | 36 +++++++++++++++++ wokwi/ch1115.chip.c | 86 +++++++++++++++++++++++++++++++++++++++++ wokwi/ch1115.chip.json | 9 +++++ wokwi/ch1115.chip.wasm | Bin 0 -> 95460 bytes 10 files changed, 216 insertions(+), 15 deletions(-) create mode 100644 wokwi/Makefile create mode 100644 wokwi/ch1115.chip.c create mode 100644 wokwi/ch1115.chip.json create mode 100755 wokwi/ch1115.chip.wasm diff --git a/.gitignore b/.gitignore index c71be5a..22d5313 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,5 @@ creaturedex.wiki/ *.zip *.lck schematics/.history/ + +wokwi/wokwi-api.h diff --git a/build.rs b/build.rs index 926a012..e90d624 100644 --- a/build.rs +++ b/build.rs @@ -1,5 +1,6 @@ fn main() { generate_filter_snippet(); + compile_custom_wokwi_components(); linker_be_nice(); // make sure linkall.x is the last linker script (otherwise might cause problems with flip-link) println!("cargo:rustc-link-arg=-Tlinkall.x"); @@ -70,6 +71,28 @@ fn linker_be_nice() { ); } +fn compile_custom_wokwi_components() { + use std::process::Command; + + if std::env::var("CARGO_FEATURE_WOKWI").is_ok() { + println!("cargo:rerun-if-changed=wokwi/ch1115.chip.c"); + println!("cargo:rerun-if-changed=wokwi/ch1115.chip.json"); + println!("cargo:rerun-if-changed=wokwi/Makefile"); + + let status = Command::new("make") + .current_dir("wokwi") + .status() + .expect("Failed to execute make command. Is 'make' installed?"); + + if !status.success() { + panic!( + "Wokwi custom chip compilation failed with status: {}", + status + ); + } + } +} + // Taken over from esp_println because impossible to just extend their existing env logger. // https://github.com/esp-rs/esp-hal/blob/8fa6d7e985e724d6ad998e34307429b0920da370/esp-println/build.rs fn generate_filter_snippet() { diff --git a/diagram.json b/diagram.json index 4959541..9d7e4cc 100644 --- a/diagram.json +++ b/diagram.json @@ -59,19 +59,23 @@ "top": -291.2, "left": -167.2, "attrs": { "pins": "i2c" } - } + }, + { "type": "chip-ch1115", "id": "chip1", "top": 509.82, "left": -4.8, "attrs": {} }, + { "type": "chip-ch1115", "id": "chip2", "top": 625.02, "left": -4.8, "attrs": {} }, + { "type": "chip-ch1115", "id": "chip3", "top": 394.62, "left": -4.8, "attrs": {} }, + { "type": "wokwi-vcc", "id": "vcc1", "top": 39.16, "left": 316.8, "attrs": {} } ], "connections": [ [ "esp1:TX", "$serialMonitor:RX", "", [] ], [ "esp1:RX", "$serialMonitor:TX", "", [] ], [ "lcd1:VCC", "esp1:3V3", "red", [ "v19.2", "h-57.6", "v-105.6", "h-124.95" ] ], [ "lcd1:GND", "esp1:GND.2", "black", [ "v28.8", "h-76.8", "v-76.8" ] ], - [ "lcd1:CS", "esp1:11", "orange", [ "v0" ] ], - [ "lcd1:D/C", "esp1:12", "gold", [ "v0" ] ], + [ "lcd1:CS", "esp1:11", "orange", [ "v259.2", "h-729.6", "v-95.82" ] ], + [ "lcd1:D/C", "esp1:12", "gold", [ "v278.4", "h-729.6", "v-105.42" ] ], [ "lcd1:RESET", "esp1:10", "brown", [ "v0" ] ], - [ "lcd1:MOSI", "esp1:35", "violet", [ "v105.6", "h-124.8", "v-144" ] ], + [ "lcd1:MOSI", "esp1:35", "violet", [ "v124.8", "h-124.8", "v0.18" ] ], [ "lcd1:SCK", "esp1:36", "white", [ "v115.2", "h-144", "v-86.4" ] ], - [ "esp1:37", "lcd1:MISO", "magenta", [ "h57.6", "v105.6", "h172.8" ] ], + [ "esp1:37", "lcd1:MISO", "magenta", [ "h57.6", "v-0.18", "h594.94" ] ], [ "btn-up:2.l", "esp1:38", "purple", [ "h-9.6", "v19.4" ] ], [ "btn-up:1.l", "esp1:GND.2", "black", [ "h0" ] ], [ "btn-down:1.l", "esp1:GND.2", "black", [ "h0" ] ], @@ -87,7 +91,31 @@ [ "lcd2:GND", "esp1:GND.2", "black", [ "h0" ] ], [ "lcd2:VCC", "esp1:3V3.1", "red", [ "h0" ] ], [ "lcd2:SDA", "esp1:17", "green", [ "h-134.4", "v413" ] ], - [ "lcd2:SCL", "esp1:18", "green", [ "h-124.8", "v38.7" ] ] + [ "lcd2:SCL", "esp1:18", "green", [ "h-124.8", "v38.7" ] ], + [ "chip2:RES", "chip1:RES", "gray", [ "h-28.8", "v-115.2" ] ], + [ "chip1:RES", "chip3:RES", "gray", [ "h-28.8", "v-67.2" ] ], + [ "chip2:GND", "chip1:GND", "black", [ "h-48", "v-115.2" ] ], + [ "chip1:GND", "chip3:GND", "black", [ "h-48", "v-115.2" ] ], + [ "chip2:VCC", "chip1:VCC", "red", [ "h-38.4", "v-115.2" ] ], + [ "chip3:VCC", "chip1:VCC", "red", [ "h-38.4", "v115.2" ] ], + [ "chip2:DC", "chip1:DC", "gold", [ "h46.84", "v-115.2" ] ], + [ "chip1:DC", "chip3:DC", "gold", [ "h46.84", "v-115.2" ] ], + [ "chip2:SCL", "chip1:SCL", "white", [ "h56.44", "v-115.2" ] ], + [ "chip1:SCL", "chip3:SCL", "white", [ "h56.44", "v-115.2" ] ], + [ "chip3:SDA", "chip1:SDA", "violet", [ "h-1.16", "h67.2", "v57.6" ] ], + [ "chip1:SDA", "chip2:SDA", "violet", [ "h66.04", "v115.2" ] ], + [ "esp1:35", "chip3:SDA", "violet", [ "h364.53", "v153.42" ] ], + [ "chip3:SCL", "esp1:36", "white", [ "h56.44", "v-172.62" ] ], + [ "esp1:12", "chip3:DC", "gold", [ "h-29.12", "v105.42", "h460.8", "v67.2" ] ], + [ "esp1:GND.4", "chip3:GND", "black", [ "h18.93", "v19.02", "h105.6", "v48" ] ], + [ "esp1:3V3.1", "chip3:VCC", "red", [ "h-57.92", "v259.02" ] ], + [ "lcd1:VCC", "vcc1:VCC", "red", [ "v67.2", "h-48" ] ], + [ "lcd1:LED", "vcc1:VCC", "red", [ "v67.2", "h-144.01" ] ], + [ "lcd1:RST", "esp1:10", "gray", [ "v268.8", "h-729.6", "v-115.02" ] ], + [ "esp1:47", "chip3:RES", "gray", [ "h28.53", "v182.22" ] ], + [ "chip3:CS", "esp1:13", "blue", [ "h-278.4", "v-153.42" ] ], + [ "esp1:14", "chip1:CS", "magenta", [ "h-9.92", "v259.02" ] ], + [ "esp1:21", "chip2:CS", "#8f4814", [ "h95.73", "v316.62" ] ] ], "dependencies": {} } \ No newline at end of file diff --git a/src/bin/main.rs b/src/bin/main.rs index f65da9a..f001eee 100644 --- a/src/bin/main.rs +++ b/src/bin/main.rs @@ -11,6 +11,7 @@ use alloc::boxed::Box; use creaturedex::background_tasks; use creaturedex::drivers::i2c_bus::I2cBusPinConfiguration; use creaturedex::drivers::nfc_pn532::NfcPn532Driver; +use creaturedex::drivers::primary_lcd::PrimaryDisplay; use creaturedex::drivers::secondary_oled::SecondaryDisplay; use creaturedex::drivers::spi_bus; use creaturedex::drivers::tertiary_lcd::{ @@ -71,7 +72,7 @@ async fn main(spawner: Spawner) { let timg0 = TimerGroup::new(esp_peripherals.TIMG0); esp_rtos::start(timg0.timer0, sw_interrupt.software_interrupt0); - let (primary, mut secondaries) = retry( + let (mut primary, mut secondaries) = retry( 5, spi_bus::DisplayPinConfiguration { spi_peripheral: esp_peripherals.SPI2, @@ -160,6 +161,7 @@ async fn main(spawner: Spawner) { display_shit(&mut secondaries[0], "foo 1"); display_shit(&mut secondaries[1], "bar 1"); display_shit(&mut secondaries[2], "baz 1"); + display_shit_prim(&mut primary, "Hello World"); let outputs = { let [sec_1, sec_2, sec_3] = secondaries; @@ -191,6 +193,16 @@ fn display_shit(oled: &mut SecondaryDisplay<'static>, text: &str) { oled.flush().unwrap(); } +fn display_shit_prim(main: &mut PrimaryDisplay<'static>, text: &str) { + use embedded_graphics::pixelcolor::Rgb565; + main.clear(Rgb565::BLACK).unwrap(); + + let text_style = MonoTextStyle::new(&FONT_6X10, Rgb565::WHITE); + Text::new(text, Point::new(10, 20), text_style) + .draw(main) + .unwrap(); +} + fn retry Result>(repetitions: u32, input: T, mut action: F) -> U { let mut initial_state = input; for iteration in 0..repetitions { diff --git a/src/drivers/spi_bus.rs b/src/drivers/spi_bus.rs index 89ec939..cb39249 100644 --- a/src/drivers/spi_bus.rs +++ b/src/drivers/spi_bus.rs @@ -158,14 +158,7 @@ where OutputConfig::default(), )); - let primary = PrimaryDisplayPinConfiguration { - spi_bus: bus_static, - cs: low_active(self.cs_primary), - reset: low_active(self.reset_primary), - dc: dc.clone(), - } - .build(); - + // Secondary displays must come first or they don't work in wokwi for some reason. let secondaries = SecondaryDisplayPinConfiguration { spi_bus: bus_static, cs_pins: [ @@ -174,6 +167,14 @@ where low_active(self.cs_secondary_3), ], res: reset_secondary, + dc: dc.clone(), + } + .build(); + + let primary = PrimaryDisplayPinConfiguration { + spi_bus: bus_static, + cs: low_active(self.cs_primary), + reset: low_active(self.reset_primary), dc, } .build(); diff --git a/wokwi.toml b/wokwi.toml index 4445166..c6e133d 100644 --- a/wokwi.toml +++ b/wokwi.toml @@ -3,3 +3,7 @@ version = 1 gdbServerPort = 3333 elf = "target/xtensa-esp32s3-none-elf/debug/creaturedex" firmware = "target/xtensa-esp32s3-none-elf/debug/creaturedex" + +[[chip]] +name = 'ch1115' +binary = 'wokwi/ch1115.chip.wasm' \ No newline at end of file diff --git a/wokwi/Makefile b/wokwi/Makefile new file mode 100644 index 0000000..d19a525 --- /dev/null +++ b/wokwi/Makefile @@ -0,0 +1,36 @@ +.PHONY: all auto native docker clean + +# Configuration +SRC = ch1115.chip.c +OUT = ch1115.chip.wasm + +# Check if wokwi-cli exists in PATH +WOKWI_CLI := $(shell command -v wokwi-cli 2> /dev/null) + +HOST_UID := $(shell id -u) +HOST_GID := $(shell id -g) + +# Default target runs the auto-detection +all: auto + +auto: +ifeq ($(WOKWI_CLI),) + @echo "wokwi-cli not found in PATH. Falling back to Docker build..." + $(MAKE) docker +else + @echo "Found wokwi-cli at $(WOKWI_CLI). Using native build..." + $(MAKE) native +endif + +native: + wokwi-cli chip compile $(SRC) -o $(OUT) + +docker: + docker run --rm -v $(CURDIR):/workspace -w /workspace ubuntu:latest \ + bash -c "apt-get update && apt-get install -y --no-install-recommends curl ca-certificates && \ + curl -L https://wokwi.com/ci/install.sh | sh && \ + ~/.wokwi/bin/wokwi-cli chip compile $(SRC) -o $(OUT) && \ + chown $(HOST_UID):$(HOST_GID) $(OUT)" + +clean: + rm -f $(OUT) \ No newline at end of file diff --git a/wokwi/ch1115.chip.c b/wokwi/ch1115.chip.c new file mode 100644 index 0000000..1673d4f --- /dev/null +++ b/wokwi/ch1115.chip.c @@ -0,0 +1,86 @@ +#include "wokwi-api.h" +#include +#include + +typedef struct { + pin_t cs, dc, res; + spi_dev_t spi; + buffer_t fb; + uint32_t width, height; + uint8_t spi_buffer[1]; + uint8_t page; + uint8_t col; +} chip_state_t; + +// Forward declarations +static void on_cs_change(void *user_data, pin_t pin, uint32_t value); +static void chip_spi_done(void *user_data, uint8_t *buffer, uint32_t count); + +void chip_init(void) { + printf("Initing CH1115 chip\n"); + fflush(stdout); + + chip_state_t *chip = malloc(sizeof(chip_state_t)); + chip->fb = framebuffer_init(&chip->width, &chip->height); + + chip->cs = pin_init("CS", INPUT_PULLUP); + chip->dc = pin_init("DC", INPUT); + chip->res = pin_init("RES", INPUT_PULLUP); + + const spi_config_t spi_cfg = { + .sck = pin_init("SCL", INPUT), + .mosi = pin_init("SDA", INPUT), + .miso = NO_PIN, + .mode = 0, + .done = chip_spi_done, + .user_data = chip, + }; + chip->spi = spi_init(&spi_cfg); + + const pin_watch_config_t cs_watch = { + .edge = BOTH, + .pin_change = on_cs_change, + .user_data = chip, + }; + pin_watch(chip->cs, &cs_watch); +} + +static void on_cs_change(void *user_data, pin_t pin, uint32_t value) { + chip_state_t *chip = (chip_state_t*)user_data; + if (value == LOW) { + // Start receiving 1 byte at a time + spi_start(chip->spi, chip->spi_buffer, 1); + } else { + spi_stop(chip->spi); + } +} + +static void chip_spi_done(void *user_data, uint8_t *buffer, uint32_t count) { + chip_state_t *chip = (chip_state_t*)user_data; + if (!count) return; + + uint8_t val = buffer[0]; + bool is_data = pin_read(chip->dc) == HIGH; + + if (is_data) { + // Write 8 vertical pixels to the Wokwi RGBA Framebuffer + for (int i = 0; i < 8; i++) { + // 0xFFFFFFFF = White, 0x000000FF = Black + uint32_t color = (val & (1 << i)) ? 0xFFFFFFFF : 0x000000FF; + uint32_t y = (chip->page * 8) + i; + uint32_t offset = (y * chip->width + chip->col) * 4; + buffer_write(chip->fb, offset, &color, 4); + } + chip->col++; // Auto-increment column + } else { + // CH1115 Core Commands + if ((val & 0xB0) == 0xB0) chip->page = val & 0x0F; // Set Page Start + else if ((val & 0xF0) == 0x00) chip->col = (chip->col & 0xF0) | (val & 0x0F); // Lower Col + else if ((val & 0xF0) == 0x10) chip->col = (chip->col & 0x0F) | ((val & 0x0F) << 4); // Upper Col + } + + // Continue receiving if CS is still active + if (pin_read(chip->cs) == LOW) { + spi_start(chip->spi, chip->spi_buffer, 1); + } +} \ No newline at end of file diff --git a/wokwi/ch1115.chip.json b/wokwi/ch1115.chip.json new file mode 100644 index 0000000..4fa1d84 --- /dev/null +++ b/wokwi/ch1115.chip.json @@ -0,0 +1,9 @@ +{ + "name": "CH1115 OLED", + "author": "ede1998", + "pins": ["VCC", "GND", "CS", "RES", "DC", "SCL", "SDA"], + "display": { + "width": 128, + "height": 64 + } +} \ No newline at end of file diff --git a/wokwi/ch1115.chip.wasm b/wokwi/ch1115.chip.wasm new file mode 100755 index 0000000000000000000000000000000000000000..0783263c1fc0e5d1b6c1d5ecc1a0d1bfd2aa25b5 GIT binary patch literal 95460 zcmeFa2e@2S)jxdN^tt!Wt+_Y3_cC`9(i0L5AtZrhsEM=)p$V7-2q8BiohCx4N|!2~ z34)*)AksuZARsRaNRc8Is@UjKlvfe{zu#JWpE*-*(AWR_eBbkY-@weQz1P~S?X}ll zXP%s}EnkX5NZb3y)g7@aT!j!w#Ky$kOGj7drj`6b+y_?9kO~7Oa`KXdx6HfGh#B z)e9FcaS{U%P}0$&Xwn}sJe5wxV!rRBd_SE^`AN_7eJ_zj({X&qbsawik|5@;a1)7m z5}q&Ke{qmW%=EkF&0Dk0d#nZDN zXPitx>;sbLSK2bMyGG*w&Aa z&i%-iVg0J1)%)GZ_1ICYY;3;n=+VEqLJCzKI z?#`GDr_b|e=KbQ@;-_?_cT~|`Ib^a2Jw`$_tQ_a`6#X^*Y_~0Cv$wzKt-*+Fe=*3N zMoxLJ==K-9ViF89P?tpLndhuUokng%H8=D=k^5uFV zC*bq$D&=OmH=(N-tYI(c;2E`v0!C8#Vt0Sh&3%p9WuR-$`e`)WBqV)4WP70ZD~Ovw zo%^~BOM_SL0s%i7l(R%+eT7P;5WEUX8o5|+s=dkJ1%Dae7fG3{F zxws!;a<=xstYm+2#meIIH$Hn~Y;^$P)YbSe88Zg2iVKv$NKnIihwKDiJ zLBvr|e3Rq)0lX{#htS7C@p)~>*ba)XDVb?~UcO_#?e!!I34Kj~7qK$Bte(*%LunN%pc$&I04F2E!DEKBAekud&n`GaFf5>#hV&)#L7$U#GMPM>cJ_HN z59^iJRe7%?GpZXzJtpy3EiTfw2nlGq&8boAxehrvjQaDqQGpXx*U#PpJe+F%gI z1cGN91DMlcGUgl{yunOPu0neF>lAJ5ZMJx3LTmHjZD)0o+52%H)p0)a_ri@C`3 zIr$9S!96WNXbHa*R!AaTA^9|N$c_z|z{;TL3m^=^LZ3$_9U9K=OOl;&wah^uJPu4g zsgaN(kb((VIk9wN@XG>#o14Cae&%HNQx1V zq_)XE_(mfH(O3~7(l!wi*9b|2d8inah{^6VQdf~#rs%~QFXn*a!i%hOG=qMwG(l)` zpkCZRYzjk$4%CH`eKGHxd!+mF5(Q`%F5JXSh{#pFBzI%U#CC&lkHX

f>vk!BAvS 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 nm38<6??r8$Jat`Kb^J+uQ&gHbGh*0 literal 0 HcmV?d00001