const std = @import("std");
const microzig = @import("microzig");
const rp2xxx = microzig.hal;
const time = rp2xxx.time;

const LOW = 0;
const HIGH = 100;
const WRAP = 100;
const SLEEP_MS = 10;

// Compile-time pin configuration
const pin_config = rp2xxx.pins.GlobalConfiguration{
    .GPIO17 = .{
        .name = "led",
        .function = .PWM0_B,
    },
};

const pins = pin_config.pins();

pub fn main() !void {
    pin_config.apply();

    pins.led.slice().set_wrap(WRAP);
    pins.led.slice().enable();

    // duty cycle = level/wrap * 100

    var invert: bool = true;
    while (true) {
        for (LOW..HIGH) |i| {
            pins.led.set_level(@truncate(i));
            time.sleep_ms(SLEEP_MS);
        }
        pins.led.set_inverted(invert);
        invert = !invert;
    }
}