From 4bfc6dff798054055a9c98c3bfe8479b8a0f1937 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCney=20Saramal=C4=B1?= Date: Mon, 4 Aug 2025 13:48:35 +0300 Subject: [PATCH 01/15] Remove Enabled, use SchmittTrigger --- port/raspberrypi/rp2xxx/src/hal/gpio.zig | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/port/raspberrypi/rp2xxx/src/hal/gpio.zig b/port/raspberrypi/rp2xxx/src/hal/gpio.zig index f40e2ef6c..b26c4063d 100644 --- a/port/raspberrypi/rp2xxx/src/hal/gpio.zig +++ b/port/raspberrypi/rp2xxx/src/hal/gpio.zig @@ -77,11 +77,6 @@ pub const SchmittTrigger = enum(u1) { disabled, }; -pub const Enabled = enum { - disabled, - enabled, -}; - pub const Pull = enum { up, down, @@ -156,7 +151,7 @@ pub const Mask = } } - pub fn set_schmitt_trigger(self: Mask, enabled: Enabled) void { + pub fn set_schmitt_trigger(self: Mask, enabled: SchmittTrigger) void { const raw_mask = @intFromEnum(self); for (0..@bitSizeOf(Mask)) |i| { const bit = @as(u5, @intCast(i)); @@ -235,7 +230,7 @@ pub const Mask = } } - pub fn set_schmitt_trigger(self: Mask, enabled: Enabled) void { + pub fn set_schmitt_trigger(self: Mask, enabled: SchmittTrigger) void { const raw_mask = @intFromEnum(self); for (0..@bitSizeOf(Mask)) |i| { const bit = @as(u6, @intCast(i)); @@ -489,7 +484,7 @@ pub const Pin = enum(u6) { }); } - pub fn set_schmitt_trigger(gpio: Pin, enabled: Enabled) void { + pub fn set_schmitt_trigger(gpio: Pin, enabled: SchmittTrigger) void { const pads_reg = gpio.get_pads_reg(); pads_reg.modify(.{ .SCHMITT = switch (enabled) { From 1d78d14caed9a38b3ab7c13912213624e523ecc9 Mon Sep 17 00:00:00 2001 From: Guney Saramali Date: Wed, 6 Aug 2025 11:01:51 +0300 Subject: [PATCH 02/15] Rename SchmittTrigger to Enabled and use it also in set_input_enabled method --- port/raspberrypi/rp2xxx/src/hal/gpio.zig | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/port/raspberrypi/rp2xxx/src/hal/gpio.zig b/port/raspberrypi/rp2xxx/src/hal/gpio.zig index b26c4063d..44ec6a074 100644 --- a/port/raspberrypi/rp2xxx/src/hal/gpio.zig +++ b/port/raspberrypi/rp2xxx/src/hal/gpio.zig @@ -72,7 +72,7 @@ pub const SlewRate = enum(u1) { pub const DriveStrength = microzig.chip.types.peripherals.PADS_BANK0.DriveStrength; -pub const SchmittTrigger = enum(u1) { +pub const Enabled = enum(u1) { enabled, disabled, }; @@ -151,7 +151,7 @@ pub const Mask = } } - pub fn set_schmitt_trigger(self: Mask, enabled: SchmittTrigger) void { + pub fn set_schmitt_trigger(self: Mask, enabled: Enabled) void { const raw_mask = @intFromEnum(self); for (0..@bitSizeOf(Mask)) |i| { const bit = @as(u5, @intCast(i)); @@ -230,7 +230,7 @@ pub const Mask = } } - pub fn set_schmitt_trigger(self: Mask, enabled: SchmittTrigger) void { + pub fn set_schmitt_trigger(self: Mask, enabled: Enabled) void { const raw_mask = @intFromEnum(self); for (0..@bitSizeOf(Mask)) |i| { const bit = @as(u6, @intCast(i)); @@ -437,9 +437,9 @@ pub const Pin = enum(u6) { } } - pub inline fn set_input_enabled(pin: Pin, enabled: bool) void { + pub inline fn set_input_enabled(pin: Pin, enabled: Enabled) void { const pads_reg = pin.get_pads_reg(); - pads_reg.modify(.{ .IE = @intFromBool(enabled) }); + pads_reg.modify(.{ .IE = @intFromEnum(enabled) }); } pub inline fn set_output_disabled(pin: Pin, disabled: bool) void { @@ -484,7 +484,7 @@ pub const Pin = enum(u6) { }); } - pub fn set_schmitt_trigger(gpio: Pin, enabled: SchmittTrigger) void { + pub fn set_schmitt_trigger(gpio: Pin, enabled: Enabled) void { const pads_reg = gpio.get_pads_reg(); pads_reg.modify(.{ .SCHMITT = switch (enabled) { From c180aedd6736815d4db2e94a5ef5fcc507b44b6e Mon Sep 17 00:00:00 2001 From: Guney Saramali Date: Wed, 6 Aug 2025 11:26:58 +0300 Subject: [PATCH 03/15] Fixing pins.zig pin config since SchmittTrigger is removed --- port/raspberrypi/rp2xxx/src/hal/pins.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/port/raspberrypi/rp2xxx/src/hal/pins.zig b/port/raspberrypi/rp2xxx/src/hal/pins.zig index a47ed7be3..64d541038 100644 --- a/port/raspberrypi/rp2xxx/src/hal/pins.zig +++ b/port/raspberrypi/rp2xxx/src/hal/pins.zig @@ -81,7 +81,7 @@ pub const Pin = enum { drive_strength: ?gpio.DriveStrength = null, pull: ?gpio.Pull = null, slew_rate: ?gpio.SlewRate = null, - schmitt_trigger: ?gpio.SchmittTrigger = null, + schmitt_trigger: ?gpio.Enabled = null, pub fn get_direction(comptime config: Configuration) Direction { return if (config.direction) |direction| From c3cc2a73a35d308228b1d4e95c8acb1186266c9e Mon Sep 17 00:00:00 2001 From: Guney Saramali Date: Wed, 13 Aug 2025 11:55:02 +0300 Subject: [PATCH 04/15] - Moving Enabled to pins.zig since it's not being used in gpio.zig anymore - Removed all Enabled enum usage in schmitt trigger and turned them to be bool only - Only GPIO confing uses now the Enabled enum for user-friendly readability --- port/raspberrypi/rp2xxx/src/hal/gpio.zig | 20 ++++++-------------- port/raspberrypi/rp2xxx/src/hal/pins.zig | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/port/raspberrypi/rp2xxx/src/hal/gpio.zig b/port/raspberrypi/rp2xxx/src/hal/gpio.zig index 44ec6a074..24202b4ae 100644 --- a/port/raspberrypi/rp2xxx/src/hal/gpio.zig +++ b/port/raspberrypi/rp2xxx/src/hal/gpio.zig @@ -72,11 +72,6 @@ pub const SlewRate = enum(u1) { pub const DriveStrength = microzig.chip.types.peripherals.PADS_BANK0.DriveStrength; -pub const Enabled = enum(u1) { - enabled, - disabled, -}; - pub const Pull = enum { up, down, @@ -151,7 +146,7 @@ pub const Mask = } } - pub fn set_schmitt_trigger(self: Mask, enabled: Enabled) void { + pub fn set_schmitt_trigger(self: Mask, enabled: bool) void { const raw_mask = @intFromEnum(self); for (0..@bitSizeOf(Mask)) |i| { const bit = @as(u5, @intCast(i)); @@ -230,7 +225,7 @@ pub const Mask = } } - pub fn set_schmitt_trigger(self: Mask, enabled: Enabled) void { + pub fn set_schmitt_trigger(self: Mask, enabled: bool) void { const raw_mask = @intFromEnum(self); for (0..@bitSizeOf(Mask)) |i| { const bit = @as(u6, @intCast(i)); @@ -437,9 +432,9 @@ pub const Pin = enum(u6) { } } - pub inline fn set_input_enabled(pin: Pin, enabled: Enabled) void { + pub inline fn set_input_enabled(pin: Pin, enabled: true) void { const pads_reg = pin.get_pads_reg(); - pads_reg.modify(.{ .IE = @intFromEnum(enabled) }); + pads_reg.modify(.{ .IE = @intFromBool(enabled) }); } pub inline fn set_output_disabled(pin: Pin, disabled: bool) void { @@ -484,13 +479,10 @@ pub const Pin = enum(u6) { }); } - pub fn set_schmitt_trigger(gpio: Pin, enabled: Enabled) void { + pub fn set_schmitt_trigger(gpio: Pin, enabled: bool) void { const pads_reg = gpio.get_pads_reg(); pads_reg.modify(.{ - .SCHMITT = switch (enabled) { - .enabled => @as(u1, 1), - .disabled => @as(u1, 0), - }, + .SCHMITT = @intFromBool(enabled), }); } diff --git a/port/raspberrypi/rp2xxx/src/hal/pins.zig b/port/raspberrypi/rp2xxx/src/hal/pins.zig index 64d541038..55345c597 100644 --- a/port/raspberrypi/rp2xxx/src/hal/pins.zig +++ b/port/raspberrypi/rp2xxx/src/hal/pins.zig @@ -22,6 +22,11 @@ pub const Direction = enum(u2) { unknown, }; +pub const Enabled = enum(u1) { + enabled, + disabled, +}; + pub const PinFlags = if (has_rp2350b) [48]u1 else [32]u1; pub const Pin = enum { @@ -81,7 +86,7 @@ pub const Pin = enum { drive_strength: ?gpio.DriveStrength = null, pull: ?gpio.Pull = null, slew_rate: ?gpio.SlewRate = null, - schmitt_trigger: ?gpio.Enabled = null, + schmitt_trigger: ?Enabled = null, pub fn get_direction(comptime config: Configuration) Direction { return if (config.direction) |direction| @@ -941,7 +946,12 @@ pub const GlobalConfiguration = struct { } if (pin_config.schmitt_trigger) |enabled| { - gpio.num(gpio_num).set_schmitt_trigger(enabled); + gpio.num(gpio_num).set_schmitt_trigger( + switch (enabled) { + Enabled.enabled => true, + else => false, + }, + ); } if (pin_config.drive_strength) |drive_strength| { From e591500a55f9d207b04141c5072a2e17d2a1fdb5 Mon Sep 17 00:00:00 2001 From: Guney Saramali Date: Wed, 13 Aug 2025 13:31:51 +0300 Subject: [PATCH 05/15] - Refactor set_schmitt_trigger_enabled - Remove switch and use logical eval --- port/raspberrypi/rp2xxx/src/hal/gpio.zig | 10 +++++----- port/raspberrypi/rp2xxx/src/hal/pins.zig | 7 +------ 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/port/raspberrypi/rp2xxx/src/hal/gpio.zig b/port/raspberrypi/rp2xxx/src/hal/gpio.zig index 24202b4ae..ae95255d9 100644 --- a/port/raspberrypi/rp2xxx/src/hal/gpio.zig +++ b/port/raspberrypi/rp2xxx/src/hal/gpio.zig @@ -146,12 +146,12 @@ pub const Mask = } } - pub fn set_schmitt_trigger(self: Mask, enabled: bool) void { + pub fn set_schmitt_trigger_enabled(self: Mask, enabled: bool) void { const raw_mask = @intFromEnum(self); for (0..@bitSizeOf(Mask)) |i| { const bit = @as(u5, @intCast(i)); if (0 != raw_mask & (@as(u32, 1) << bit)) - num(bit).set_schmitt_trigger(enabled); + num(bit).set_schmitt_trigger_enabled(enabled); } } @@ -225,12 +225,12 @@ pub const Mask = } } - pub fn set_schmitt_trigger(self: Mask, enabled: bool) void { + pub fn set_schmitt_trigger_enabled(self: Mask, enabled: bool) void { const raw_mask = @intFromEnum(self); for (0..@bitSizeOf(Mask)) |i| { const bit = @as(u6, @intCast(i)); if (0 != raw_mask & (@as(u48, 1) << bit)) - num(bit).set_schmitt_trigger(enabled); + num(bit).set_schmitt_trigger_enabled(enabled); } } @@ -479,7 +479,7 @@ pub const Pin = enum(u6) { }); } - pub fn set_schmitt_trigger(gpio: Pin, enabled: bool) void { + pub fn set_schmitt_trigger_enabled(gpio: Pin, enabled: bool) void { const pads_reg = gpio.get_pads_reg(); pads_reg.modify(.{ .SCHMITT = @intFromBool(enabled), diff --git a/port/raspberrypi/rp2xxx/src/hal/pins.zig b/port/raspberrypi/rp2xxx/src/hal/pins.zig index 55345c597..051e87f8f 100644 --- a/port/raspberrypi/rp2xxx/src/hal/pins.zig +++ b/port/raspberrypi/rp2xxx/src/hal/pins.zig @@ -946,12 +946,7 @@ pub const GlobalConfiguration = struct { } if (pin_config.schmitt_trigger) |enabled| { - gpio.num(gpio_num).set_schmitt_trigger( - switch (enabled) { - Enabled.enabled => true, - else => false, - }, - ); + gpio.num(gpio_num).set_schmitt_trigger(enabled == .enabled); } if (pin_config.drive_strength) |drive_strength| { From ad934a43e12bedbbd25a472af26d5dce1d12fe4c Mon Sep 17 00:00:00 2001 From: Guney Saramali Date: Wed, 13 Aug 2025 13:47:13 +0300 Subject: [PATCH 06/15] Fixing typo for bool param --- port/raspberrypi/rp2xxx/src/hal/gpio.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/port/raspberrypi/rp2xxx/src/hal/gpio.zig b/port/raspberrypi/rp2xxx/src/hal/gpio.zig index ae95255d9..ebf96ce38 100644 --- a/port/raspberrypi/rp2xxx/src/hal/gpio.zig +++ b/port/raspberrypi/rp2xxx/src/hal/gpio.zig @@ -432,7 +432,7 @@ pub const Pin = enum(u6) { } } - pub inline fn set_input_enabled(pin: Pin, enabled: true) void { + pub inline fn set_input_enabled(pin: Pin, enabled: bool) void { const pads_reg = pin.get_pads_reg(); pads_reg.modify(.{ .IE = @intFromBool(enabled) }); } From 7173e924394a7bc2da08246d1b2fee6bc0938000 Mon Sep 17 00:00:00 2001 From: Guney Saramali Date: Thu, 14 Aug 2025 16:11:45 +0300 Subject: [PATCH 07/15] Adding an example usage for ssd1306 i2c displays --- .../raspberrypi/rp2xxx/src/ssd1306_oled.zig | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig diff --git a/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig b/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig new file mode 100644 index 000000000..ea81213c6 --- /dev/null +++ b/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig @@ -0,0 +1,71 @@ +const std = @import("std"); +const microzig = @import("microzig"); +const rp2xxx = microzig.hal; +const time = rp2xxx.time; +const gpio = rp2xxx.gpio; +const i2c = rp2xxx.i2c; +const font8x8 = @import("font8x8"); + +// Compile-time pin configuration +const pin_config = rp2xxx.pins.GlobalConfiguration{ + .GPIO8 = .{ + .name = "SDA", + .function = .I2C0_SDA, + .schmitt_trigger = .enabled, + .slew_rate = .slow, + .pull = .up, + .direction = .out, + }, + .GPIO9 = .{ + .name = "SCL", + .function = .I2C0_SCL, + .schmitt_trigger = .enabled, + .slew_rate = .slow, + .pull = .up, + .direction = .out, + }, +}; + +const i2c0 = i2c.instance.num(0); +const lcd_address = rp2xxx.i2c.Address.new(0x3C); +const empty_row: []const u8 = " "; + +pub fn main() void { + var backinf_buffer: [200 * 1024]u8 = undefined; + var fba = std.heap.FixedBufferAllocator.init(&backinf_buffer); + pin_config.apply(); + rp2xxx.i2c.I2C.apply(i2c0, .{ .baud_rate = 400_000, .clock_config = rp2xxx.clock_config }); + + const I2C_DEVICE = rp2xxx.drivers.I2C_Device.init(i2c0, lcd_address, null); + const lcd = microzig.drivers.display.ssd1306.init(.i2c, I2C_DEVICE, null) catch unreachable; + lcd.clear_screen(false) catch unreachable; + const print_val = empty_row ++ empty_row ++ empty_row ++ empty_row ++ " WELCOME!"; + var buff: [print_val.len * 8]u8 = undefined; + lcd.write_gdram(font8x8.Fonts.draw(&buff, print_val)) catch unreachable; + + var counter = 0; + while (true) : (time.sleep_ms(1000)) { + var allocator = fba.allocator(); + var counter_buf: [80]u8 = undefined; + const text_centered = center(&counter_buf, counter); + const text = font8x8.Fonts.drawAlloc(allocator, text_centered) catch continue; + defer allocator.free(text); + lcd.write_gdram(text) catch continue; + counter += 1; + } +} + +fn center(buf: []u8, value: anytype) []u8 { + var temp_buf: [32]u8 = undefined; + const str = std.fmt.bufPrint(&temp_buf, "{}", .{value}) catch unreachable; + + const space = " "; + const to_be_added = @divTrunc(16 - str.len, 2); + const four_rows = empty_row ++ empty_row ++ empty_row ++ empty_row; + @memcpy(buf[0..64], four_rows); + for (0..to_be_added) |i| { + @memcpy(buf[64 + i], space); + } + @memcpy(buf[(64 + to_be_added)..(64 + to_be_added + str.len)], str); + return buf; +} From db192a57199a92d87533312ef02b923d8245bd1a Mon Sep 17 00:00:00 2001 From: Guney Saramali Date: Thu, 14 Aug 2025 16:13:29 +0300 Subject: [PATCH 08/15] Adding 1 seconds of delay for each loop --- examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig b/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig index ea81213c6..8e31039a0 100644 --- a/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig +++ b/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig @@ -52,6 +52,7 @@ pub fn main() void { defer allocator.free(text); lcd.write_gdram(text) catch continue; counter += 1; + time.sleep_ms(1000); } } From e278d6545b4d3dd2e77b1cd72b2a169a7fecd30d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCney=20Saramal=C4=B1?= Date: Thu, 14 Aug 2025 22:27:56 +0300 Subject: [PATCH 09/15] Testing and making sure it works for ssd1306 --- examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig b/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig index 8e31039a0..15c4a0935 100644 --- a/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig +++ b/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig @@ -4,7 +4,7 @@ const rp2xxx = microzig.hal; const time = rp2xxx.time; const gpio = rp2xxx.gpio; const i2c = rp2xxx.i2c; -const font8x8 = @import("font8x8"); +const font8x8 = @import("font8x8"); //zig fetch --save=font8x8 git+https://github.com/Gnyblast/zig-ssd1306-gddram-fonts // Compile-time pin configuration const pin_config = rp2xxx.pins.GlobalConfiguration{ @@ -42,9 +42,11 @@ pub fn main() void { const print_val = empty_row ++ empty_row ++ empty_row ++ empty_row ++ " WELCOME!"; var buff: [print_val.len * 8]u8 = undefined; lcd.write_gdram(font8x8.Fonts.draw(&buff, print_val)) catch unreachable; + time.sleep_ms(2000); - var counter = 0; + var counter: u8 = 0; while (true) : (time.sleep_ms(1000)) { + lcd.clear_screen(false) catch continue; var allocator = fba.allocator(); var counter_buf: [80]u8 = undefined; const text_centered = center(&counter_buf, counter); @@ -53,11 +55,13 @@ pub fn main() void { lcd.write_gdram(text) catch continue; counter += 1; time.sleep_ms(1000); + if (counter > 59) + break; } } fn center(buf: []u8, value: anytype) []u8 { - var temp_buf: [32]u8 = undefined; + var temp_buf: [2]u8 = undefined; const str = std.fmt.bufPrint(&temp_buf, "{}", .{value}) catch unreachable; const space = " "; @@ -65,8 +69,11 @@ fn center(buf: []u8, value: anytype) []u8 { const four_rows = empty_row ++ empty_row ++ empty_row ++ empty_row; @memcpy(buf[0..64], four_rows); for (0..to_be_added) |i| { - @memcpy(buf[64 + i], space); + @memcpy(buf[(64 + i)..(64 + i + 1)], space); } @memcpy(buf[(64 + to_be_added)..(64 + to_be_added + str.len)], str); + for ((64 + str.len + to_be_added)..buf.len) |i| { + @memcpy(buf[i..(i + 1)], space); + } return buf; } From e780dea5dd5111c0dd60b98dfb3e78e4548e866f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCney=20Saramal=C4=B1?= Date: Thu, 14 Aug 2025 22:31:35 +0300 Subject: [PATCH 10/15] Cleaning the code a bit --- examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig b/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig index 15c4a0935..1a5bda1ac 100644 --- a/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig +++ b/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig @@ -29,6 +29,7 @@ const pin_config = rp2xxx.pins.GlobalConfiguration{ const i2c0 = i2c.instance.num(0); const lcd_address = rp2xxx.i2c.Address.new(0x3C); const empty_row: []const u8 = " "; +const four_rows = empty_row ++ empty_row ++ empty_row ++ empty_row; pub fn main() void { var backinf_buffer: [200 * 1024]u8 = undefined; @@ -39,7 +40,7 @@ pub fn main() void { const I2C_DEVICE = rp2xxx.drivers.I2C_Device.init(i2c0, lcd_address, null); const lcd = microzig.drivers.display.ssd1306.init(.i2c, I2C_DEVICE, null) catch unreachable; lcd.clear_screen(false) catch unreachable; - const print_val = empty_row ++ empty_row ++ empty_row ++ empty_row ++ " WELCOME!"; + const print_val = four_rows ++ " WELCOME!"; var buff: [print_val.len * 8]u8 = undefined; lcd.write_gdram(font8x8.Fonts.draw(&buff, print_val)) catch unreachable; time.sleep_ms(2000); @@ -64,12 +65,10 @@ fn center(buf: []u8, value: anytype) []u8 { var temp_buf: [2]u8 = undefined; const str = std.fmt.bufPrint(&temp_buf, "{}", .{value}) catch unreachable; - const space = " "; const to_be_added = @divTrunc(16 - str.len, 2); - const four_rows = empty_row ++ empty_row ++ empty_row ++ empty_row; @memcpy(buf[0..64], four_rows); for (0..to_be_added) |i| { - @memcpy(buf[(64 + i)..(64 + i + 1)], space); + @memcpy(buf[(64 + i)..(64 + i + 1)], " "); } @memcpy(buf[(64 + to_be_added)..(64 + to_be_added + str.len)], str); for ((64 + str.len + to_be_added)..buf.len) |i| { From dbbc14871377a82f4bc73fd0de50e0b20dfadb84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCney=20Saramal=C4=B1?= Date: Thu, 14 Aug 2025 22:32:45 +0300 Subject: [PATCH 11/15] Cleaning the code a bit --- examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig b/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig index 1a5bda1ac..fa1b67f2e 100644 --- a/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig +++ b/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig @@ -34,26 +34,33 @@ const four_rows = empty_row ++ empty_row ++ empty_row ++ empty_row; pub fn main() void { var backinf_buffer: [200 * 1024]u8 = undefined; var fba = std.heap.FixedBufferAllocator.init(&backinf_buffer); + pin_config.apply(); rp2xxx.i2c.I2C.apply(i2c0, .{ .baud_rate = 400_000, .clock_config = rp2xxx.clock_config }); const I2C_DEVICE = rp2xxx.drivers.I2C_Device.init(i2c0, lcd_address, null); const lcd = microzig.drivers.display.ssd1306.init(.i2c, I2C_DEVICE, null) catch unreachable; - lcd.clear_screen(false) catch unreachable; + const print_val = four_rows ++ " WELCOME!"; var buff: [print_val.len * 8]u8 = undefined; + + lcd.clear_screen(false) catch unreachable; lcd.write_gdram(font8x8.Fonts.draw(&buff, print_val)) catch unreachable; + time.sleep_ms(2000); var counter: u8 = 0; while (true) : (time.sleep_ms(1000)) { - lcd.clear_screen(false) catch continue; var allocator = fba.allocator(); var counter_buf: [80]u8 = undefined; const text_centered = center(&counter_buf, counter); + const text = font8x8.Fonts.drawAlloc(allocator, text_centered) catch continue; defer allocator.free(text); + + lcd.clear_screen(false) catch continue; lcd.write_gdram(text) catch continue; + counter += 1; time.sleep_ms(1000); if (counter > 59) From 18c083900424752136d0182c073ade2c47dc8a4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCney=20Saramal=C4=B1?= Date: Thu, 14 Aug 2025 22:40:20 +0300 Subject: [PATCH 12/15] Cleaning the code a bit --- examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig b/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig index fa1b67f2e..250b58724 100644 --- a/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig +++ b/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig @@ -79,7 +79,7 @@ fn center(buf: []u8, value: anytype) []u8 { } @memcpy(buf[(64 + to_be_added)..(64 + to_be_added + str.len)], str); for ((64 + str.len + to_be_added)..buf.len) |i| { - @memcpy(buf[i..(i + 1)], space); + @memcpy(buf[i..(i + 1)], " "); } return buf; } From a4cac98d0f4c147c12a85cafed50090e535f1d66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCney=20Saramal=C4=B1?= Date: Thu, 14 Aug 2025 22:48:27 +0300 Subject: [PATCH 13/15] Writing text and number together --- examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig b/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig index 250b58724..d762a19a5 100644 --- a/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig +++ b/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig @@ -52,8 +52,10 @@ pub fn main() void { var counter: u8 = 0; while (true) : (time.sleep_ms(1000)) { var allocator = fba.allocator(); + var temp_buf: [7]u8 = undefined; + const str = std.fmt.bufPrint(&temp_buf, "{s}{}", .{ "Try #", counter }) catch unreachable; var counter_buf: [80]u8 = undefined; - const text_centered = center(&counter_buf, counter); + const text_centered = center(&counter_buf, str); const text = font8x8.Fonts.drawAlloc(allocator, text_centered) catch continue; defer allocator.free(text); @@ -68,10 +70,7 @@ pub fn main() void { } } -fn center(buf: []u8, value: anytype) []u8 { - var temp_buf: [2]u8 = undefined; - const str = std.fmt.bufPrint(&temp_buf, "{}", .{value}) catch unreachable; - +fn center(buf: []u8, str: []u8) []u8 { const to_be_added = @divTrunc(16 - str.len, 2); @memcpy(buf[0..64], four_rows); for (0..to_be_added) |i| { From 501b50e52af84d84b2c9946f28de01a275d8d2a3 Mon Sep 17 00:00:00 2001 From: Guney Saramali Date: Mon, 18 Aug 2025 08:39:16 +0300 Subject: [PATCH 14/15] Adding dependency to zon file --- examples/raspberrypi/rp2xxx/build.zig.zon | 4 ++++ examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/examples/raspberrypi/rp2xxx/build.zig.zon b/examples/raspberrypi/rp2xxx/build.zig.zon index 7f87cbd80..609b7a2c3 100644 --- a/examples/raspberrypi/rp2xxx/build.zig.zon +++ b/examples/raspberrypi/rp2xxx/build.zig.zon @@ -4,6 +4,10 @@ .version = "0.0.0", .dependencies = .{ .microzig = .{ .path = "../../.." }, + .font8x8 = .{ + .url = "git+https://github.com/Gnyblast/zig-ssd1306-gddram-fonts#84dd5fab70ddc1198eef1cd1305cc82f08f419dc", + .hash = "ssd1306_font_8x8-0.0.0-oGb_cERcAAA6NJzWDOMepgnY6r4blNEHjpkldDaRAui5", + }, }, .paths = .{ "README.md", diff --git a/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig b/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig index d762a19a5..d7e68d44e 100644 --- a/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig +++ b/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig @@ -4,7 +4,7 @@ const rp2xxx = microzig.hal; const time = rp2xxx.time; const gpio = rp2xxx.gpio; const i2c = rp2xxx.i2c; -const font8x8 = @import("font8x8"); //zig fetch --save=font8x8 git+https://github.com/Gnyblast/zig-ssd1306-gddram-fonts +const font8x8 = @import("font8x8"); // Compile-time pin configuration const pin_config = rp2xxx.pins.GlobalConfiguration{ From 2eb54d63705c49d78a92b0b7a1775ead7f8e0919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCney=20Saramal=C4=B1?= Date: Sat, 6 Sep 2025 14:36:36 +0300 Subject: [PATCH 15/15] Update examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig Co-authored-by: Grazfather --- examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig b/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig index d7e68d44e..4749de867 100644 --- a/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig +++ b/examples/raspberrypi/rp2xxx/src/ssd1306_oled.zig @@ -53,7 +53,7 @@ pub fn main() void { while (true) : (time.sleep_ms(1000)) { var allocator = fba.allocator(); var temp_buf: [7]u8 = undefined; - const str = std.fmt.bufPrint(&temp_buf, "{s}{}", .{ "Try #", counter }) catch unreachable; + const str = std.fmt.bufPrint(&temp_buf, "Try #{}", .{ counter }) catch unreachable; var counter_buf: [80]u8 = undefined; const text_centered = center(&counter_buf, str);